[8092] Check bag size at item protos loading and item slots at invetory loading. Author: VladimirMangos

--HG--
branch : trunk
This commit is contained in:
megamage
2009-07-01 17:38:38 -05:00
parent 9c9c9f5078
commit bea88590c7
2 changed files with 156 additions and 147 deletions
+6
View File
@@ -2035,6 +2035,12 @@ void ObjectMgr::LoadItemPrototypes()
const_cast<ItemPrototype*>(proto)->Stackable = 1000; const_cast<ItemPrototype*>(proto)->Stackable = 1000;
} }
if(proto->ContainerSlots > MAX_BAG_SIZE)
{
sLog.outErrorDb("Item (Entry: %u) has too large value in ContainerSlots (%u), replace by hardcoded limit (%u).",i,proto->ContainerSlots,MAX_BAG_SIZE);
const_cast<ItemPrototype*>(proto)->ContainerSlots = MAX_BAG_SIZE;
}
if(proto->StatsCount > MAX_ITEM_PROTO_STATS) if(proto->StatsCount > MAX_ITEM_PROTO_STATS)
{ {
sLog.outErrorDb("Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).",i,proto->StatsCount,MAX_ITEM_PROTO_STATS); sLog.outErrorDb("Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).",i,proto->StatsCount,MAX_ITEM_PROTO_STATS);
+150 -147
View File
@@ -9071,39 +9071,42 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV
Item* pItem2 = GetItemByPos( bag, slot ); Item* pItem2 = GetItemByPos( bag, slot );
// ignore move item (this slot will be empty at move) // ignore move item (this slot will be empty at move)
if(pItem2==pSrcItem) if (pItem2==pSrcItem)
pItem2 = NULL; pItem2 = NULL;
uint32 need_space; uint32 need_space;
// empty specific slot - check item fit to slot // empty specific slot - check item fit to slot
if( !pItem2 || swap ) if (!pItem2 || swap)
{ {
if( bag == INVENTORY_SLOT_BAG_0 ) if (bag == INVENTORY_SLOT_BAG_0)
{ {
// keyring case // keyring case
if(slot >= KEYRING_SLOT_START && slot < KEYRING_SLOT_START+GetMaxKeyringSize() && !(pProto->BagFamily & BAG_FAMILY_MASK_KEYS)) if (slot >= KEYRING_SLOT_START && slot < KEYRING_SLOT_START+GetMaxKeyringSize() && !(pProto->BagFamily & BAG_FAMILY_MASK_KEYS))
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
// currencytoken case // currencytoken case
if(slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)) if (slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS))
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
// prevent cheating // prevent cheating
if(slot >= BUYBACK_SLOT_START && slot < BUYBACK_SLOT_END || slot >= PLAYER_SLOT_END) if (slot >= BUYBACK_SLOT_START && slot < BUYBACK_SLOT_END || slot >= PLAYER_SLOT_END)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
} }
else else
{ {
Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, bag ); Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, bag );
if( !pBag ) if (!pBag)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
ItemPrototype const* pBagProto = pBag->GetProto(); ItemPrototype const* pBagProto = pBag->GetProto();
if( !pBagProto ) if (!pBagProto)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
if( !ItemCanGoIntoBag(pProto,pBagProto) ) if (slot >= pBagProto->ContainerSlots)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
if (!ItemCanGoIntoBag(pProto,pBagProto))
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
} }
@@ -9114,22 +9117,22 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV
else else
{ {
// check item type // check item type
if(pItem2->GetEntry() != pProto->ItemId) if (pItem2->GetEntry() != pProto->ItemId)
return EQUIP_ERR_ITEM_CANT_STACK; return EQUIP_ERR_ITEM_CANT_STACK;
// check free space // check free space
if(pItem2->GetCount() >= pProto->GetMaxStackSize()) if (pItem2->GetCount() >= pProto->GetMaxStackSize())
return EQUIP_ERR_ITEM_CANT_STACK; return EQUIP_ERR_ITEM_CANT_STACK;
// free stack space or infinity // free stack space or infinity
need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); need_space = pProto->GetMaxStackSize() - pItem2->GetCount();
} }
if(need_space > count) if (need_space > count)
need_space = count; need_space = count;
ItemPosCount newPosition = ItemPosCount((bag << 8) | slot, need_space); ItemPosCount newPosition = ItemPosCount((bag << 8) | slot, need_space);
if(!newPosition.isContainedIn(dest)) if (!newPosition.isContainedIn(dest))
{ {
dest.push_back(newPosition); dest.push_back(newPosition);
count -= need_space; count -= need_space;
@@ -9140,55 +9143,55 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV
uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototype const *pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot ) const uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototype const *pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot ) const
{ {
// skip specific bag already processed in first called _CanStoreItem_InBag // skip specific bag already processed in first called _CanStoreItem_InBag
if(bag==skip_bag) if (bag==skip_bag)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, bag ); Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, bag );
if( !pBag ) if (!pBag)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
ItemPrototype const* pBagProto = pBag->GetProto(); ItemPrototype const* pBagProto = pBag->GetProto();
if( !pBagProto ) if (!pBagProto)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
// specialized bag mode or non-specilized // specialized bag mode or non-specilized
if( non_specialized != (pBagProto->Class == ITEM_CLASS_CONTAINER && pBagProto->SubClass == ITEM_SUBCLASS_CONTAINER) ) if (non_specialized != (pBagProto->Class == ITEM_CLASS_CONTAINER && pBagProto->SubClass == ITEM_SUBCLASS_CONTAINER))
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
if( !ItemCanGoIntoBag(pProto,pBagProto) ) if (!ItemCanGoIntoBag(pProto,pBagProto))
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
for(uint32 j = 0; j < pBag->GetBagSize(); j++) for(uint32 j = 0; j < pBag->GetBagSize(); j++)
{ {
// skip specific slot already processed in first called _CanStoreItem_InSpecificSlot // skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
if(j==skip_slot) if (j==skip_slot)
continue; continue;
Item* pItem2 = GetItemByPos( bag, j ); Item* pItem2 = GetItemByPos( bag, j );
// ignore move item (this slot will be empty at move) // ignore move item (this slot will be empty at move)
if(pItem2==pSrcItem) if (pItem2==pSrcItem)
pItem2 = NULL; pItem2 = NULL;
// if merge skip empty, if !merge skip non-empty // if merge skip empty, if !merge skip non-empty
if((pItem2!=NULL)!=merge) if ((pItem2!=NULL)!=merge)
continue; continue;
if( pItem2 ) if (pItem2)
{ {
if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) if (pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize())
{ {
uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount();
if(need_space > count) if(need_space > count)
need_space = count; need_space = count;
ItemPosCount newPosition = ItemPosCount((bag << 8) | j, need_space); ItemPosCount newPosition = ItemPosCount((bag << 8) | j, need_space);
if(!newPosition.isContainedIn(dest)) if (!newPosition.isContainedIn(dest))
{ {
dest.push_back(newPosition); dest.push_back(newPosition);
count -= need_space; count -= need_space;
if(count==0) if (count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
} }
} }
@@ -9196,16 +9199,16 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy
else else
{ {
uint32 need_space = pProto->GetMaxStackSize(); uint32 need_space = pProto->GetMaxStackSize();
if(need_space > count) if (need_space > count)
need_space = count; need_space = count;
ItemPosCount newPosition = ItemPosCount((bag << 8) | j, need_space); ItemPosCount newPosition = ItemPosCount((bag << 8) | j, need_space);
if(!newPosition.isContainedIn(dest)) if (!newPosition.isContainedIn(dest))
{ {
dest.push_back(newPosition); dest.push_back(newPosition);
count -= need_space; count -= need_space;
if(count==0) if (count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
} }
} }
@@ -9218,33 +9221,33 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end,
for(uint32 j = slot_begin; j < slot_end; j++) for(uint32 j = slot_begin; j < slot_end; j++)
{ {
// skip specific slot already processed in first called _CanStoreItem_InSpecificSlot // skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
if(INVENTORY_SLOT_BAG_0==skip_bag && j==skip_slot) if (INVENTORY_SLOT_BAG_0==skip_bag && j==skip_slot)
continue; continue;
Item* pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, j ); Item* pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, j );
// ignore move item (this slot will be empty at move) // ignore move item (this slot will be empty at move)
if(pItem2==pSrcItem) if (pItem2==pSrcItem)
pItem2 = NULL; pItem2 = NULL;
// if merge skip empty, if !merge skip non-empty // if merge skip empty, if !merge skip non-empty
if((pItem2!=NULL)!=merge) if ((pItem2!=NULL)!=merge)
continue; continue;
if( pItem2 ) if (pItem2)
{ {
if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) if (pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize())
{ {
uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount();
if(need_space > count) if (need_space > count)
need_space = count; need_space = count;
ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space); ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space);
if(!newPosition.isContainedIn(dest)) if (!newPosition.isContainedIn(dest))
{ {
dest.push_back(newPosition); dest.push_back(newPosition);
count -= need_space; count -= need_space;
if(count==0) if (count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
} }
} }
@@ -9252,16 +9255,16 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end,
else else
{ {
uint32 need_space = pProto->GetMaxStackSize(); uint32 need_space = pProto->GetMaxStackSize();
if(need_space > count) if (need_space > count)
need_space = count; need_space = count;
ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space); ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space);
if(!newPosition.isContainedIn(dest)) if (!newPosition.isContainedIn(dest))
{ {
dest.push_back(newPosition); dest.push_back(newPosition);
count -= need_space; count -= need_space;
if(count==0) if (count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
} }
} }
@@ -9274,16 +9277,16 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
sLog.outDebug( "STORAGE: CanStoreItem bag = %u, slot = %u, item = %u, count = %u", bag, slot, entry, count); sLog.outDebug( "STORAGE: CanStoreItem bag = %u, slot = %u, item = %u, count = %u", bag, slot, entry, count);
ItemPrototype const *pProto = objmgr.GetItemPrototype(entry); ItemPrototype const *pProto = objmgr.GetItemPrototype(entry);
if( !pProto ) if (!pProto)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count; *no_space_count = count;
return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED :EQUIP_ERR_ITEM_NOT_FOUND; return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED :EQUIP_ERR_ITEM_NOT_FOUND;
} }
if(pItem && pItem->IsBindedNotWith(this)) if (pItem && pItem->IsBindedNotWith(this))
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count; *no_space_count = count;
return EQUIP_ERR_DONT_OWN_THAT_ITEM; return EQUIP_ERR_DONT_OWN_THAT_ITEM;
} }
@@ -9291,11 +9294,11 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
// check count of items (skip for auto move for same player from bank) // check count of items (skip for auto move for same player from bank)
uint32 no_similar_count = 0; // can't store this amount similar items uint32 no_similar_count = 0; // can't store this amount similar items
uint8 res = _CanTakeMoreSimilarItems(entry,count,pItem,&no_similar_count); uint8 res = _CanTakeMoreSimilarItems(entry,count,pItem,&no_similar_count);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(count==no_similar_count) if (count==no_similar_count)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = no_similar_count; *no_space_count = no_similar_count;
return res; return res;
} }
@@ -9303,22 +9306,22 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
} }
// in specific slot // in specific slot
if( bag != NULL_BAG && slot != NULL_SLOT ) if (bag != NULL_BAG && slot != NULL_SLOT)
{ {
res = _CanStoreItem_InSpecificSlot(bag,slot,dest,pProto,count,swap,pItem); res = _CanStoreItem_InSpecificSlot(bag,slot,dest,pProto,count,swap,pItem);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9327,45 +9330,45 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
// not specific slot or have space for partly store only in specific slot // not specific slot or have space for partly store only in specific slot
// in specific bag // in specific bag
if( bag != NULL_BAG ) if (bag != NULL_BAG)
{ {
// search stack in bag for merge to // search stack in bag for merge to
if( pProto->Stackable != 1 ) if (pProto->Stackable != 1)
{ {
if( bag == INVENTORY_SLOT_BAG_0 ) // inventory if (bag == INVENTORY_SLOT_BAG_0) // inventory
{ {
res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,true,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9374,22 +9377,22 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
{ {
// we need check 2 time (specialized/non_specialized), use NULL_BAG to prevent skipping bag // we need check 2 time (specialized/non_specialized), use NULL_BAG to prevent skipping bag
res = _CanStoreItem_InBag(bag,dest,pProto,count,true,false,pItem,NULL_BAG,slot); res = _CanStoreItem_InBag(bag,dest,pProto,count,true,false,pItem,NULL_BAG,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
res = _CanStoreItem_InBag(bag,dest,pProto,count,true,true,pItem,NULL_BAG,slot); res = _CanStoreItem_InBag(bag,dest,pProto,count,true,true,pItem,NULL_BAG,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9397,83 +9400,83 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
} }
// search free slot in bag for place to // search free slot in bag for place to
if( bag == INVENTORY_SLOT_BAG_0 ) // inventory if(bag == INVENTORY_SLOT_BAG_0) // inventory
{ {
// search free slot - keyring case // search free slot - keyring case
if(pProto->BagFamily & BAG_FAMILY_MASK_KEYS) if (pProto->BagFamily & BAG_FAMILY_MASK_KEYS)
{ {
uint32 keyringSize = GetMaxKeyringSize(); uint32 keyringSize = GetMaxKeyringSize();
res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,KEYRING_SLOT_START+keyringSize,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,KEYRING_SLOT_START+keyringSize,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
} }
else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) else if (pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
{ {
res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
} }
res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9481,22 +9484,22 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
else // equipped bag else // equipped bag
{ {
res = _CanStoreItem_InBag(bag,dest,pProto,count,false,false,pItem,NULL_BAG,slot); res = _CanStoreItem_InBag(bag,dest,pProto,count,false,false,pItem,NULL_BAG,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
res = _CanStoreItem_InBag(bag,dest,pProto,count,false,true,pItem,NULL_BAG,slot); res = _CanStoreItem_InBag(bag,dest,pProto,count,false,true,pItem,NULL_BAG,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9506,58 +9509,58 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
// not specific bag or have space for partly store only in specific bag // not specific bag or have space for partly store only in specific bag
// search stack for merge to // search stack for merge to
if( pProto->Stackable != 1 ) if (pProto->Stackable != 1)
{ {
res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,true,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
if( pProto->BagFamily ) if (pProto->BagFamily)
{ {
for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{ {
res = _CanStoreItem_InBag(i,dest,pProto,count,true,false,pItem,bag,slot); res = _CanStoreItem_InBag(i,dest,pProto,count,true,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
continue; continue;
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9567,15 +9570,15 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{ {
res = _CanStoreItem_InBag(i,dest,pProto,count,true,true,pItem,bag,slot); res = _CanStoreItem_InBag(i,dest,pProto,count,true,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
continue; continue;
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9583,45 +9586,45 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
} }
// search free slot - special bag case // search free slot - special bag case
if( pProto->BagFamily ) if (pProto->BagFamily)
{ {
if(pProto->BagFamily & BAG_FAMILY_MASK_KEYS) if (pProto->BagFamily & BAG_FAMILY_MASK_KEYS)
{ {
uint32 keyringSize = GetMaxKeyringSize(); uint32 keyringSize = GetMaxKeyringSize();
res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,KEYRING_SLOT_START+keyringSize,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,KEYRING_SLOT_START+keyringSize,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
} }
else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) else if (pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
{ {
res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9630,15 +9633,15 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) for(uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{ {
res = _CanStoreItem_InBag(i,dest,pProto,count,false,false,pItem,bag,slot); res = _CanStoreItem_InBag(i,dest,pProto,count,false,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
continue; continue;
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9647,19 +9650,19 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
// search free slot // search free slot
res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot); res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
{ {
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return res; return res;
} }
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
@@ -9667,21 +9670,21 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3
for(uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) for(uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{ {
res = _CanStoreItem_InBag(i,dest,pProto,count,false,true,pItem,bag,slot); res = _CanStoreItem_InBag(i,dest,pProto,count,false,true,pItem,bag,slot);
if(res!=EQUIP_ERR_OK) if (res!=EQUIP_ERR_OK)
continue; continue;
if(count==0) if (count==0)
{ {
if(no_similar_count==0) if (no_similar_count==0)
return EQUIP_ERR_OK; return EQUIP_ERR_OK;
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
} }
} }
if(no_space_count) if (no_space_count)
*no_space_count = count + no_similar_count; *no_space_count = count + no_similar_count;
return EQUIP_ERR_INVENTORY_FULL; return EQUIP_ERR_INVENTORY_FULL;