From 61a7026f1765271595377be0c37a8228fe620c0d Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 23 Jun 2021 22:44:39 +0200 Subject: Core/AuctionHouse: Fixed buying commodities Closes #26110 Closes #26619 --- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 18 +++++++++++++----- src/server/game/AuctionHouse/AuctionHouseMgr.h | 2 +- src/server/game/Handlers/AuctionHouseHandler.cpp | 1 + src/server/game/Server/Packets/AuctionHousePackets.cpp | 2 +- src/server/game/Server/Packets/AuctionHousePackets.h | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index b0eb0437e49..22832485f7c 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -79,12 +79,12 @@ AuctionsBucketKey AuctionsBucketKey::ForItem(Item* item) }; } else - return ForCommodity(item->GetEntry()); + return ForCommodity(itemTemplate); } -AuctionsBucketKey AuctionsBucketKey::ForCommodity(uint32 itemId) +AuctionsBucketKey AuctionsBucketKey::ForCommodity(ItemTemplate const* itemTemplate) { - return { itemId, 0, 0, 0 }; + return { itemTemplate->GetId(), uint16(itemTemplate->GetBaseItemLevel()), 0, 0 }; } bool operator<(AuctionsBucketKey const& left, AuctionsBucketKey const& right) @@ -1558,7 +1558,11 @@ uint64 AuctionHouseObject::CalcualteAuctionHouseCut(uint64 bidAmount) const CommodityQuote const* AuctionHouseObject::CreateCommodityQuote(Player* player, uint32 itemId, uint32 quantity) { - auto bucketItr = _buckets.find(AuctionsBucketKey::ForCommodity(itemId)); + ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId); + if (!itemTemplate) + return nullptr; + + auto bucketItr = _buckets.find(AuctionsBucketKey::ForCommodity(itemTemplate)); if (bucketItr == _buckets.end()) return nullptr; @@ -1601,7 +1605,11 @@ void AuctionHouseObject::CancelCommodityQuote(ObjectGuid guid) bool AuctionHouseObject::BuyCommodity(CharacterDatabaseTransaction trans, Player* player, uint32 itemId, uint32 quantity, Milliseconds delayForNextAction) { - auto bucketItr = _buckets.find(AuctionsBucketKey::ForCommodity(itemId)); + ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId); + if (!itemTemplate) + return false; + + auto bucketItr = _buckets.find(AuctionsBucketKey::ForCommodity(itemTemplate)); if (bucketItr == _buckets.end()) { player->GetSession()->SendAuctionCommandResult(0, AuctionCommand::PlaceBid, AuctionResult::CommodityPurchaseFailed, delayForNextAction); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 2a0816fd21a..51ddb3eed65 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -179,7 +179,7 @@ struct AuctionsBucketKey static std::size_t Hash(AuctionsBucketKey const& bucket); static AuctionsBucketKey ForItem(Item* item); - static AuctionsBucketKey ForCommodity(uint32 itemId); + static AuctionsBucketKey ForCommodity(ItemTemplate const* itemTemplate); }; bool operator<(AuctionsBucketKey const& left, AuctionsBucketKey const& right); diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 5a505dc100f..150c4821337 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -185,6 +185,7 @@ void WorldSession::HandleAuctionGetCommodityQuote(WorldPackets::AuctionHouse::Au commodityQuoteResult.QuoteDuration = std::chrono::duration_cast(quote->ValidTo - GameTime::GetGameTimeSteadyPoint()); } + commodityQuoteResult.ItemID = getCommodityQuote.ItemID; commodityQuoteResult.DesiredDelay = uint32(throttle.DelayUntilNext.count()); SendPacket(commodityQuoteResult.Write()); diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index 9b9e45bdec2..0bf1acec836 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -544,7 +544,7 @@ WorldPacket const* AuctionGetCommodityQuoteResult::Write() _worldPacket.WriteBit(TotalPrice.is_initialized()); _worldPacket.WriteBit(Quantity.is_initialized()); _worldPacket.WriteBit(QuoteDuration.is_initialized()); - _worldPacket << int32(Unknown830); + _worldPacket << int32(ItemID); _worldPacket << uint32(DesiredDelay); if (TotalPrice) diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index e76624dbae2..0e30f6f53f7 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -397,7 +397,7 @@ namespace WorldPackets Optional TotalPrice; Optional Quantity; Optional> QuoteDuration; - int32 Unknown830 = 0; + int32 ItemID = 0; uint32 DesiredDelay = 0; }; -- cgit v1.2.3