From e04f75bd962006662bc0f77f0034f061605fb1c6 Mon Sep 17 00:00:00 2001 From: roc13x Date: Thu, 17 Aug 2017 02:00:42 -0600 Subject: Core/Players: Several gold handling improvements * Update gold limit to 10 million * Updated auction house gold handling to 64-bit * Fixed some vendor checks for when BuyCount > 1 * Tweaked some checks for available gold space * Updated guild bank gold handling to 64-bit and fix withdraw limits * Enforce gold limit on guild bank * Check correct rank right when withdrawing from bank * Other small changes to update money to 64-bit Closes #19195 Closes #20152 --- src/server/game/Handlers/ItemHandler.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/server/game/Handlers/ItemHandler.cpp') diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 3f7aae6f91a..0e14a16d415 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -445,6 +445,16 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) { if (pProto->GetSellPrice() > 0) { + uint64 money = uint64(pProto->GetSellPrice()) * packet.Amount; + + if (!_player->ModifyMoney(money)) // ensure player doesn't exceed gold limit + { + _player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, packet.ItemGUID); + return; + } + + _player->UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_VENDORS, money); + if (packet.Amount < pItem->GetCount()) // need split items { Item* pNewItem = pItem->CloneItem(packet.Amount, _player); @@ -472,10 +482,6 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) RemoveItemFromUpdateQueueOf(pItem, _player); _player->AddItemToBuyBackSlot(pItem); } - - uint32 money = pProto->GetSellPrice() * packet.Amount; - _player->ModifyMoney(money); - _player->UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_VENDORS, money); } else _player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, packet.ItemGUID); -- cgit v1.2.3