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;
}
bool Game::playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount)
{
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_SELL))
return false;
merchant->onPlayerTrade(player, SHOPEVENT_SELL, onSell, it.id, subType, amount);
return true;
}
bool Game::playerLookInShop(uint32_t playerId, uint16_t spriteId, uint8_t count)
{
Player* player = getPlayerByID(playerId);
if(player == NULL || player->isRemoved())
return false;
const ItemType& it = Item::items.getItemIdByClientId(spriteId);
if(it.id == 0)
return false;
int32_t subType = count;
if(it.isFluidContainer() && count < uint8_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
subType = reverseFluidMap[count];
std::stringstream ss;
ss << "You see " << Item::getDescription(it, 1, NULL, subType);
if(player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails))
ss << std::endl << "ItemID: [" << it.id << "].";
player->sendTextMessage(MSG_INFO_DESCR, ss.str());
return true;
}