aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers
diff options
context:
space:
mode:
authorroc13x <roc13x@gmail.com>2017-08-17 02:00:42 -0600
committerShauren <shauren.trinity@gmail.com>2017-08-20 18:10:11 +0200
commite04f75bd962006662bc0f77f0034f061605fb1c6 (patch)
tree5e8d1bf38ab41319634e104bdb08dce56d16ac9d /src/server/game/Handlers
parent26d63a276e51db88e293e61b190ca3789fea13db (diff)
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
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp10
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp14
-rw-r--r--src/server/game/Handlers/MailHandler.cpp4
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp4
4 files changed, 19 insertions, 13 deletions
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 52eeea3d1f0..dc846cc10a7 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -223,8 +223,8 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell
uint32 auctionTime = uint32(packet.RunTime * sWorld->getRate(RATE_AUCTION_TIME));
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());
- uint32 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, packet.RunTime, item, finalCount);
- if (!_player->HasEnoughMoney((uint64)deposit))
+ uint64 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, packet.RunTime, item, finalCount);
+ if (!_player->HasEnoughMoney(deposit))
{
SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_NOT_ENOUGHT_MONEY);
return;
@@ -440,7 +440,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_AUCTION_BID);
stmt->setUInt64(0, auction->bidder);
- stmt->setUInt32(1, auction->bid);
+ stmt->setUInt64(1, auction->bid);
stmt->setUInt32(2, auction->Id);
trans->Append(stmt);
@@ -511,8 +511,8 @@ void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRe
{
if (auction->bidder) // If we have a bidder, we have to send him the money he paid
{
- uint32 auctionCut = auction->GetAuctionCut();
- if (!player->HasEnoughMoney((uint64)auctionCut)) //player doesn't have enough money, maybe message needed
+ uint64 auctionCut = auction->GetAuctionCut();
+ if (!player->HasEnoughMoney(auctionCut)) //player doesn't have enough money, maybe message needed
return;
sAuctionMgr->SendAuctionCancelledToBidderMail(auction, trans);
player->ModifyMoney(-int64(auctionCut));
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);
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 73423256893..b0c473091b4 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -456,7 +456,7 @@ void WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet)
}
// prevent cheating with skip client money check
- if (!player->HasEnoughMoney(uint64(m->COD)))
+ if (!player->HasEnoughMoney(m->COD))
{
player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);
return;
@@ -509,7 +509,7 @@ void WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet)
.SendMailTo(trans, MailReceiver(receiver, m->sender), MailSender(MAIL_NORMAL, m->receiver), MAIL_CHECK_MASK_COD_PAYMENT);
}
- player->ModifyMoney(-int32(m->COD));
+ player->ModifyMoney(-int64(m->COD));
}
m->COD = 0;
m->state = MAIL_STATE_CHANGED;
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index ea79a4a67f9..93be14c374c 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -285,7 +285,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
return;
}
- if (_player->GetMoney() >= uint64(MAX_MONEY_AMOUNT) - his_trade->GetMoney())
+ if (_player->GetMoney() > MAX_MONEY_AMOUNT - his_trade->GetMoney())
{
info.Status = TRADE_STATUS_FAILED;
info.BagResult = EQUIP_ERR_TOO_MUCH_GOLD;
@@ -294,7 +294,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
return;
}
- if (trader->GetMoney() >= uint64(MAX_MONEY_AMOUNT) - my_trade->GetMoney())
+ if (trader->GetMoney() > MAX_MONEY_AMOUNT - my_trade->GetMoney())
{
info.Status = TRADE_STATUS_FAILED;
info.BagResult = EQUIP_ERR_TOO_MUCH_GOLD;