diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index abac07950..2864ec507 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -422,6 +422,12 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) AuctionEntry* auction = auctionHouse->GetAuction(auctionId); Player* player = GetPlayer(); + if (!sScriptMgr->CanPlaceAuctionBid(player, auction)) + { + SendAuctionCommandResult(0, AUCTION_PLACE_BID, ERR_AUCTION_RESTRICTED_ACCOUNT); + return; + } + if (!auction || auction->owner == player->GetGUID()) { //you cannot bid your own auction: diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 2434ac25f..03254d66c 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -606,6 +606,21 @@ void ScriptMgr::OnQuestRewardItem(Player* player, Item* item, uint32 count) }); } +bool ScriptMgr::CanPlaceAuctionBid(Player* player, AuctionEntry* auction) +{ + auto ret = IsValidBoolScript([&](PlayerScript *script) + { + return !script->CanPlaceAuctionBid(player, auction); + }); + + if (ret && *ret) + { + return false; + } + + return true; +} + void ScriptMgr::OnGroupRollRewardItem(Player* player, Item* item, uint32 count, RollVote voteType, Roll* roll) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a94922d7d..103553217 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1190,6 +1190,9 @@ public: // After receiving item as a quest reward virtual void OnQuestRewardItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/) { } + // When placing a bid or buying out an auction + [[nodiscard]] virtual bool CanPlaceAuctionBid(Player* /*player*/, AuctionEntry* /*auction*/) { return true; } + // After receiving item as a group roll reward virtual void OnGroupRollRewardItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/, RollVote /*voteType*/, Roll* /*roll*/) { } @@ -2290,6 +2293,7 @@ public: /* PlayerScript */ void OnStoreNewItem(Player* player, Item* item, uint32 count); void OnCreateItem(Player* player, Item* item, uint32 count); void OnQuestRewardItem(Player* player, Item* item, uint32 count); + bool CanPlaceAuctionBid(Player* player, AuctionEntry* auction); void OnGroupRollRewardItem(Player* player, Item* item, uint32 count, RollVote voteType, Roll* roll); bool OnBeforeOpenItem(Player* player, Item* item); bool OnBeforePlayerQuestComplete(Player* player, uint32 quest_id);