aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-06-23 22:44:39 +0200
committerShauren <shauren.trinity@gmail.com>2021-06-23 22:44:39 +0200
commit61a7026f1765271595377be0c37a8228fe620c0d (patch)
treeb0bde635101186188b2e1fb718b445ae38da2ad7 /src
parent4621babae70f97adcfc4b749253e137d9f5d20ae (diff)
Core/AuctionHouse: Fixed buying commodities
Closes #26110 Closes #26619
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp18
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h2
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp1
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.h2
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;
};