Quote:
Originally Posted by André!
hm sowas hab ich mir auch schon gedacht, jedoch habs gerade zu nem integer geändert und jetzt zieht er 17233 ab ...
Ich verzweifel hier noch ._.
Meine Änderung:
Code:
if(pCharacter->m_nVenderType == 1) // ĨÀ¸·Î °Å·¡ÇÏ´Â venderÀÏ °æ¿ì
{
if(pCharacter->m_venderItemAry2[i].GetSize())
{
fShop = TRUE;
m_ShopInventory[i]->Clear(); // m_packÀ» ´Ù ¾ø¾Ø´Ù.
for( int j = 0; j < pCharacter->m_venderItemAry2[i].GetSize(); j++ )
{
pVendor = (LPVENDOR_ITEM)pCharacter->m_venderItemAry2[i].GetAt(j);
CItemElem itemElem;
itemElem.m_dwItemId = pVendor->m_dwItemId;
#ifdef __CHIPSYSTEM_FIX
itemElem.m_nItemNum = (int)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#else //__CHIPSYSTEM_FIX
itemElem.m_nItemNum = (short)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#endif //__CHIPSYSTEM_FIX
itemElem.m_nHitPoint = prj.GetItemProp( pVendor->m_dwItemId )->dwEndurance;
if( (int)itemElem.GetChipCost() < 1 )
Error( "chip cost < 1 : npc = %s, item = %d", pCharacter->m_szKey, pVendor->m_dwItemId );
else
m_ShopInventory[i]->Add( &itemElem );
}
}
}
|
Du weißt, das dass Item dort nur zum Item Container hinzugefügt wird, ich denke nicht das es daran liegt, da du ja deine Angaben in der Spec_item machen mussst.
PHP Code:
int dwChipCost = pItemElem->GetChipCost() * nNum;
if( dwChipCost > 0x7fff )
{
for( ; dwChipCost > 0x7fff; )
{
pUser->RemoveItemA( II_CHP_RED, 0x7fff );
dwChipCost -= 0x7fff;
}
}
pUser->RemoveItemA( II_CHP_RED, (short)dwChipCost );
Hier wird's abgezogen.
Achja die zuständige Funktion ist OnBuyChipItem in der Klasse CDPSrvr.
Das zuständige Packet ist PACKETTYPE_BUYCHIPITEM.
Schaut's euch genau an, ich hab kein Problem damit.
Quote:
Originally Posted by Jopsi332
wird am short liegen, das du erst in einer for schleife soweit immer abziehst in größe eines shortes, bis nur noch ein wert von einem ganzen bzw kleineren Wert als 32767 hast und den rest dann nochmal abziehst
|
0x7fff ist SHRT_MAX und naja .. er ziehts halt in einer Schleife ab, also ergibt das was du sagst eig keinen Sinn.