📄 itemmanager_composite.cpp
字号:
/*
bCreatedSocket = FALSE;
switch( pSelectedItemSlot->GetItemInfo()->m_wType )
{
// 公扁
case eITEMTYPE_TWOHANDAXE:
case eITEMTYPE_TWOHANDSWORD:
case eITEMTYPE_ONEHANDSWORD:
case eITEMTYPE_SPEAR:
case eITEMTYPE_WHIP:
case eITEMTYPE_ETHERCLAW:
case eITEMTYPE_ONEHANDCROSSBOW:
case eITEMTYPE_ETHERWEAPON:
case eITEMTYPE_STAFF:
case eITEMTYPE_ORB:
// 规绢备
case eITEMTYPE_ARMOR:
case eITEMTYPE_PANTS:
case eITEMTYPE_BOOTS:
case eITEMTYPE_GLOVE:
{
BYTE SocketNum = pSelectedItemSlot->GetSocketNum();
if( (curRank+1) <= RANK_B && SocketNum < 3 )
{
ASSERT( pSelectedItemSlot->GetRank() == (curRank+1) );
BYTE SelectRank = pSelectedItemSlot->GetRank() - RANK_D;
seed = random( 1, 100 );
if( seed <= g_Ratio.m_SocketRatio[SelectRank].Ratio[SocketNum] )
{
// 己傍
pSelectedItemSlot->SetSocketNum(pSelectedItemSlot->GetSocketNum()+1);
bCreatedSocket = TRUE;
}
}
}break;
}
*/
// 昏力且 酒捞袍 昏力
pInventory->DeleteSlot( DeletedItemPos, NULL );
// 家葛登绰 捣 家厚
BOOL ret = m_pPlayer->MinusMoney( RankUpFare );
ASSERT(ret);
return RC::RC_ITEM_SUCCESS;
}
/*
RC::eITEM_RESULT ItemManager::RankUp( POSTYPE TargetPos1, POSTYPE TargetPos2, POSTYPE & OUT RankUpItemPos, POSTYPE & OUT DeletedItemPos )
{
if( !IsPossibleFunction( eFUNCTIONALTYPE_RANKUP ) )
return RC::RC_ITEM_UNUSABLE_FUNCTION;
if( !ValidState() )
return RC::RC_ITEM_INVALIDSTATE;
if( !ValidPos( SI_INVENTORY, TargetPos1 ) )
return RC::RC_ITEM_INVALIDPOS;
if( !ValidPos( SI_INVENTORY, TargetPos2 ) )
return RC::RC_ITEM_INVALIDPOS;
if( TargetPos1 == TargetPos2 )
return RC::RC_ITEM_INVALIDPOS;
SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
SCItemSlot & rTargetSlot1 = (SCItemSlot &)pInventory->GetSlot(TargetPos1);
SCItemSlot & rTargetSlot2 = (SCItemSlot &)pInventory->GetSlot(TargetPos2);
if( rTargetSlot1.GetCode() != rTargetSlot2.GetCode() ||
rTargetSlot1.GetRank() != rTargetSlot2.GetRank() )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
MONEY SpendMoney = rTargetSlot1.GetPriceForBuy()/2;
// 家葛登绰 捣 眉农
if( m_pPlayer->GetMoney() < SpendMoney )
{
return RC::RC_ITEM_INSUFFICIENT_MONEY;
}
// 歹捞惑 珐农 阂啊瓷窍霸
if( rTargetSlot1.GetRank() == RANK_A )
{
return RC::RC_ITEM_NO_MORE_RANK;
}
eOPTION_KIND kind;
switch( rTargetSlot1.GetItemInfo()->m_wType )
{
case eITEMTYPE_TWOHANDAXE:
case eITEMTYPE_TWOHANDSWORD:
case eITEMTYPE_ONEHANDSWORD:
case eITEMTYPE_SPEAR:
case eITEMTYPE_WHIP:
case eITEMTYPE_ETHERCLAW:
case eITEMTYPE_ONEHANDCROSSBOW:
case eITEMTYPE_ETHERWEAPON:
case eITEMTYPE_STAFF:
case eITEMTYPE_ORB:
{
if( rTargetSlot1.GetEnchantLV() != rTargetSlot2.GetEnchantLV() )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
kind = OPTION_KIND_WEAPON;
}
break;
case eITEMTYPE_ARMOR:
case eITEMTYPE_PROTECTOR:
case eITEMTYPE_HELMET:
case eITEMTYPE_PANTS:
case eITEMTYPE_BOOTS:
case eITEMTYPE_GLOVE:
case eITEMTYPE_BELT:
case eITEMTYPE_SHIRTS:
{
if( rTargetSlot1.GetEnchantLV() != rTargetSlot2.GetEnchantLV() )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
kind = OPTION_KIND_ARMOR;
}
break;
case eITEMTYPE_RING:
{
// 厩技辑府
kind = OPTION_KIND_RING;
}
break;
case eITEMTYPE_NECKLACE:
{
// 厩技辑府
kind = OPTION_KIND_NECKLACE;
}
break;
case eITEMTYPE_BERSERKER_SACCESSORY:
case eITEMTYPE_DRAGON_SACCESSORY:
case eITEMTYPE_VALKYRIE_SACCESSORY:
case eITEMTYPE_SHADOW_SACCESSORY:
case eITEMTYPE_ELEMENTALIST_SACCESSORY:
{
// 漂荐 厩技辑府
// TEMP : ! 泅犁 备泅 救凳!
return RC::RC_ITEM_CANNT_RANKUP_ITEM;
}
break;
default:
return RC::RC_ITEM_CANNT_RANKUP_ITEM;
}
// 快急 霉锅掳 酒捞袍阑 珐农诀 酒捞袍栏肺 急琶
SCItemSlot * pSelectedItemSlot = &rTargetSlot1;
RankUpItemPos = rTargetSlot1.GetPos();
DeletedItemPos = rTargetSlot2.GetPos();
int seed = random(0, 99);
if( seed < 30 )
{
// 2锅掳 酒捞袍 急琶
pSelectedItemSlot = &rTargetSlot2;
RankUpItemPos = rTargetSlot2.GetPos();
DeletedItemPos = rTargetSlot1.GetPos();
}
// 牢镁飘绰 臭篮 率 傈铰
if( rTargetSlot1.GetEnchant() >= rTargetSlot2.GetEnchant() )
pSelectedItemSlot->SetEnchant( rTargetSlot1.GetEnchant() );
else
pSelectedItemSlot->SetEnchant( rTargetSlot2.GetEnchant() );
// 加己 眠啊
// 犬伏利 加己 急琶
// 悼老 加己篮 滚覆
const RANK_ATTR_SELECTOR & rRankAttrSelector = ItemOptionParser::Instance()->GetRankAttrSelector(kind);
BYTE curRank = pSelectedItemSlot->GetRank();
seed = random( 0, rRankAttrSelector.m_RankAccCount[curRank+1] );
eRANK AcqRank = rRankAttrSelector.pAttrArray[seed].m_Rank;
BYTE Index = rRankAttrSelector.pAttrArray[seed].m_AttrIndex;
BYTE value = rRankAttrSelector.pAttrArray[seed].m_byValue;
pSelectedItemSlot->SetRank((eRANK)(curRank+1));
pSelectedItemSlot->SetRankAttr((eRANK)(curRank+1), AcqRank, Index, value );
// 鞍篮 可记捞 乐栏搁 绝沮
for( BYTE i = (eRANK)(RANK_D) ; i < curRank+1 ; ++i )
{
if( pSelectedItemSlot->GetRankAttrRank((eRANK)i) == AcqRank &&
pSelectedItemSlot->GetRankAttrRank((eRANK)i) == Index )
{
pSelectedItemSlot->SetRankAttr((eRANK)(curRank+1), RANK_E, 0, 0 );
}
}
// for DEBUG
DEBUG_CODE(
if( pSelectedItemSlot->GetRank() >= RANK_MAX )
{
SUNLOG( eFULL_LOG, "[ItemManager::RankUp] 珐农啊 RANK_MAX甫 逞绢脊促." );
}
);
// 家南 俺荐 积己
// !!! 公扁, 规绢备(快急癌渴)父 秦寸
BOOL bCreateSocket = FALSE;
if( (kind == OPTION_KIND_WEAPON ||
kind == OPTION_KIND_ARMOR) &&
pSelectedItemSlot->GetRank() <= RANK_B )
{
BYTE SelectRank = pSelectedItemSlot->GetRank() - RANK_D;
BYTE SocketNum = pSelectedItemSlot->GetSocketNum();
ASSERT( rTargetSlot1.GetSocketNum() < 3 );
seed = random( 1, 100 );
if( seed <= g_Ratio.m_SocketRatio[SelectRank].Ratio[SocketNum] )
{
// 己傍
pSelectedItemSlot->SetSocketNum(pSelectedItemSlot->GetSocketNum()+1);
bCreateSocket = TRUE;
}
}
// 昏力且 酒捞袍 昏力
pInventory->DeleteSlot( DeletedItemPos, NULL );
// 家葛登绰 捣 家厚
BOOL ret = m_pPlayer->MinusMoney( SpendMoney );
ASSERT(ret);
return RC::RC_ITEM_SUCCESS;
}
*/
RC::eITEM_RESULT ItemManager::FillSocket( POSTYPE SocketItemPos, POSTYPE TargetPos )
{
if( !IsPossibleFunction( eFUNCTIONALTYPE_FILLSOCKET ) )
return RC::RC_ITEM_UNUSABLE_FUNCTION;
if( !ValidState() )
return RC::RC_ITEM_INVALIDSTATE;
if( !ValidPos( SI_INVENTORY, SocketItemPos ) )
return RC::RC_ITEM_INVALIDPOS;
if( !ValidPos( SI_INVENTORY, TargetPos ) )
return RC::RC_ITEM_INVALIDPOS;
SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
SCItemSlot & rSocketSlot = (SCItemSlot &)pInventory->GetSlot(SocketItemPos);
SCItemSlot & rTargetSlot = (SCItemSlot &)pInventory->GetSlot(TargetPos);
if( rSocketSlot.GetItemInfo()->m_wType != eITEMTYPE_SOCKET )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
// 公扁, 规绢备(癌渴, 秋镐, 官瘤, 厘癌, 何明)父
if( !rTargetSlot.GetItemInfo()->IsWeapon() &&
rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_ARMOR &&
rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_HELMET &&
rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_PANTS &&
rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_BOOTS &&
rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_GLOVE )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
eSOCKET EmptySocket = SOCKET_1;
if( !rTargetSlot.ExistEmptySocket(EmptySocket) )
{
return RC::RC_ITEM_FULLSOCKET;
}
// 100%己傍
const sSOCKETITEM_OPTION * pItemOption = SocketOptionParser::Instance()->GetSocketItemOption( rSocketSlot.GetCode() );
if( !pItemOption) return RC::RC_ITEM_INVALID_CONDITION;
const sSOCKET_OPTION * pOption = SocketOptionParser::Instance()->GetSocketOption( pItemOption->m_AttrIndex );
if( !pOption) return RC::RC_ITEM_INVALID_CONDITION;
//const SOCKETITEM_OPTION * pOption = ItemOptionParser::Instance()->GetSocketOption(rSocketSlot.GetCode());
//ASSERT( pOption );
// 家南 酒捞袍俊 蝶扼 家南 加己苞 加己 蔼阑 持绰促.
//rTargetSlot.SetSocketAttr( EmptySocket, pOption->m_SocketLevel, pOption->m_AttrIndex, pOption->m_byValue );
rTargetSlot.SetSocketAttr( EmptySocket, pItemOption->m_SocketLevel, pOption );
// 家南酒捞袍 力芭 : 俺荐 力芭
Lose( pInventory, SocketItemPos, 1 );
return RC::RC_ITEM_SUCCESS;
}
// 焊籍苞 犁丰绰 ItemCompositeParser俊辑 茫扁
RC::eITEM_RESULT ItemManager::ExtractSocket( POSTYPE TargetPos )
{
if( !IsPossibleFunction( eFUNCTIONALTYPE_EXTRACTSOCKET ) )
return RC::RC_ITEM_UNUSABLE_FUNCTION;
if( !ValidState() )
return RC::RC_ITEM_INVALIDSTATE;
if( !ValidPos( SI_INVENTORY, TargetPos ) )
return RC::RC_ITEM_INVALIDPOS;
SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
SCItemSlot & rTargetSlot = (SCItemSlot &)pInventory->GetSlot(TargetPos);
// 家南可记阑 力芭且 可记捞 乐绰啊?
BOOL bExist = FALSE;
for( int i = (int)(rTargetSlot.GetSocketNum())-1 ; i >= 0 ; --i )
{
if( rTargetSlot.GetSocketAttr((eSOCKET)i) != 0 )
{
bExist = TRUE;
break;
}
}
if( !bExist ) return RC::RC_ITEM_INVALID_CONDITION;
// 犁丰啊 乐绰瘤俊 措茄 眉农
// 俺荐 眉农, 捣 眉农
sITEMCOMPOSITE * pCInfo = ItemCompositeParser::Instance()->GetCompositeInfo(eITEMCOMPOSITE_EXTRACT_SOCKET);
ASSERT( pCInfo );
if( m_pPlayer->GetMoney() < pCInfo->m_Money )
return RC::RC_ITEM_HAVENOTMONEY;
sITEMCOMPOSITEMATERIAL * pMaterials = pCInfo->m_sCompositeMaterials;
for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
{
if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;
EmptyItemCheck EmptyCheck(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
if( !ForeachSlot( SI_INVENTORY, EmptyCheck ) )
return RC::RC_ITEM_ENCHANT_HAVENOTMETERIALS;
}
// 犁丰 绝局扁
for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
{
if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;
DeleteItem DeleteOperator(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
BOOL rt = ForeachSlot( SI_INVENTORY, DeleteOperator );
ASSERT(rt);
}
// 捣瞒皑
BOOL ret = m_pPlayer->MinusMoney( pCInfo->m_Money );
ASSERT(ret);
// 己傍 犬伏
int seed = random(0,99);
if( seed < 75 )
{
// 己傍
// 弥辟 惯积茄 可记 力芭
for( int i = ((int)rTargetSlot.GetSocketNum())-1 ; i >= 0 ; --i )
{
if( rTargetSlot.GetSocketAttr((eSOCKET)i) != 0 )
{
//rTargetSlot.SetSocketAttr((eSOCKET)i, SOCKETLV_LOW, 0, 0);
rTargetSlot.SetSocketAttr((eSOCKET)i, SOCKETLV_LOW, NULL);
return RC::RC_ITEM_EXTRACTSOCKET_SUCCESS;
}
}
}
return RC::RC_ITEM_EXTRACTSOCKET_FAILED;
}
RC::eITEM_RESULT ItemManager::CreateAccessory( BYTE Type, POSTYPE SocketItemPos, INVENTORY_TOTAL_INFO * OUT pTotalInfo )
{
if( !IsPossibleFunction( eFUNCTIONALTYPE_CREATEACCESSORY ) )
return RC::RC_ITEM_UNUSABLE_FUNCTION;
if( !ValidState() )
return RC::RC_ITEM_INVALIDSTATE;
if( !ValidPos( SI_INVENTORY, SocketItemPos ) )
return RC::RC_ITEM_INVALIDPOS;
SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
SCItemSlot & rSocketItem = (SCItemSlot &)pInventory->GetSlot(SocketItemPos);
if( rSocketItem.GetItemInfo()->m_wType != eITEMTYPE_SOCKET )
{
return RC::RC_ITEM_INVALID_CONDITION;
}
// 犁丰啊 乐绰瘤俊 措茄 眉农
// 俺荐 眉农, 捣 眉农
sITEMCOMPOSITE * pCInfo = ItemCompositeParser::Instance()->GetCompositeInfo((eITEMCOMPOSITECODE)(eITEMCOMPOSITE_LOW_RING+Type));
if( !pCInfo )
return RC::RC_ITEM_INVALIDSTATE;
sITEMCOMPOSITERESULT * pResultInfo = ItemCompositeParser::Instance()->GetCompositeResultInfo(pCInfo->m_byResult);
ASSERT( pResultInfo );
if( m_pPlayer->GetMoney() < pCInfo->m_Money )
return RC::RC_ITEM_HAVENOTMONEY;
sITEMCOMPOSITEMATERIAL * pMaterials = pCInfo->m_sCompositeMaterials;
for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
{
if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;
EmptyItemCheck EmptyCheck(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
if( !ForeachSlot( SI_INVENTORY, EmptyCheck ) )
return RC::RC_ITEM_ENCHANT_HAVENOTMETERIALS;
}
// 厩技辑府 急琶
// 后傍埃俊 积己 : 家南俊促啊 绝局绊 且妨绊 沁栏唱, 般摹绰 酒捞袍捞扼辑 阂啊瓷
int seed = random(0,sITEMCOMPOSITERESULT::MAX_COMPOSITE_RESULT_NUM-1);
ASSERT( pResultInfo->m_ResultItemCode[seed] != 0 );
// 货肺 积己登绰 巴捞扁 锭巩
// 后傍埃 乐绰瘤 眉农
RC::eITEM_RESULT rt = Obtain( pResultInfo->m_ResultItemCode[seed], 1, pTotalInfo );
if( rt != RC::RC_ITEM_SUCCESS )
return RC::RC_ITEM_ISNOTEMPTYSLOT;
// 犁丰 绝局扁
for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
{
if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;
DeleteItem DeleteOperator(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
BOOL rt = ForeachSlot( SI_INVENTORY, DeleteOperator );
ASSERT(rt);
}
// 捣瞒皑
BOOL ret = m_pPlayer->MinusMoney( pCInfo->m_Money );
ASSERT(ret);
// 家南酒捞袍 力芭 : 俺荐 力芭
Lose( pInventory, SocketItemPos, 1 );
return RC::RC_ITEM_SUCCESS;
}
RC::eITEM_RESULT ItemManager::AddSocket( POSTYPE TargetPos )
{
if( !IsPossibleFunction( eFUNCTIONALTYPE_ADDSOCKET ) )
return RC::RC_ITEM_UNUSABLE_FUNCTION;
return RC::RC_ITEM_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -