bool Game::playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount,
bool ignoreCap/* = false*/, bool inBackpacks/* = false*/)
{
Player* player = getPlayerByID(playerId);
if(!player || player->isRemoved())
return false;
int32_t onBuy, onSell;
Npc* merchant = player->getShopOwner(onBuy, onSell);
if(!merchant)
return false;
const ItemType& it = Item::items.getItemIdByClientId(spriteId);
if(!it.id)
return false;
uint8_t subType = count;
if(it.isFluidContainer() && count < uint8_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
subType = reverseFluidMap[count];
if(!player->canShopItem(it.id, subType, SHOPEVENT_BUY))
return false;
merchant->onPlayerTrade(player, SHOPEVENT_BUY, onBuy, it.id, subType, amount, ignoreCap, inBackpacks);
return true;
}