diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-06-23 22:44:39 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-23 22:44:39 +0200 |
commit | 61a7026f1765271595377be0c37a8228fe620c0d (patch) | |
tree | b0bde635101186188b2e1fb718b445ae38da2ad7 /src | |
parent | 4621babae70f97adcfc4b749253e137d9f5d20ae (diff) |
Core/AuctionHouse: Fixed buying commodities
Closes #26110
Closes #26619
Diffstat (limited to 'src')
5 files changed, 17 insertions, 8 deletions
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<Milliseconds>(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<uint64> TotalPrice; Optional<uint32> Quantity; Optional<Duration<Milliseconds>> QuoteDuration; - int32 Unknown830 = 0; + int32 ItemID = 0; uint32 DesiredDelay = 0; }; |