diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-09-27 00:51:52 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-28 12:45:06 +0100 |
commit | 569b5d6f04548cd874cc161cb67a62dcad792fb0 (patch) | |
tree | 98b4cc4f720694c815b32c2da1b4387632dc75fb /src/server/game/AuctionHouse | |
parent | e7fc68d74b4fe146b37d14f1b73dbbed421b9214 (diff) |
Core/Auction House: Eliminate blocking db queries for account permissions when expiring auctions that have offline bidders
(cherry picked from commit d0d0f51f325e4ae42c9bef7606fed4f4c00c98d6)
Diffstat (limited to 'src/server/game/AuctionHouse')
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.h | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index be9845258de..0fdd6d32117 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -631,6 +631,7 @@ void AuctionHouseMgr::LoadAuctions() auction.BidAmount = fields[7].GetUInt64(); auction.StartTime = std::chrono::system_clock::from_time_t(fields[8].GetInt64()); auction.EndTime = std::chrono::system_clock::from_time_t(fields[9].GetInt64()); + auction.ServerFlags = static_cast<AuctionPostingServerFlag>(fields[10].GetUInt8()); auto biddersItr = biddersByAuction.find(auction.Id); if (biddersItr != biddersByAuction.end()) @@ -1003,6 +1004,7 @@ void AuctionHouseObject::AddAuction(CharacterDatabaseTransaction trans, AuctionP stmt->setUInt64(7, auction.BidAmount); stmt->setInt64(8, std::chrono::system_clock::to_time_t(auction.StartTime)); stmt->setInt64(9, std::chrono::system_clock::to_time_t(auction.EndTime)); + stmt->setUInt8(10, auction.ServerFlags.AsUnderlyingType()); trans->Append(stmt); for (Item* item : auction.Items) @@ -1854,18 +1856,16 @@ void AuctionHouseObject::SendAuctionWon(AuctionPosting const* auction, Player* b // data for gm.log std::string bidderName; - bool logGmTrade = false; + bool logGmTrade = auction->ServerFlags.HasFlag(AuctionPostingServerFlag::GmLogBuyer); if (bidder) { bidderAccId = bidder->GetSession()->GetAccountId(); bidderName = bidder->GetName(); - logGmTrade = bidder->GetSession()->HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE); } else { bidderAccId = sCharacterCache->GetCharacterAccountIdByGuid(auction->Bidder); - logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, realm.Id.Realm); if (logGmTrade && !sCharacterCache->GetCharacterNameByGuid(auction->Bidder, bidderName)) bidderName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 2d84bdb24a9..caa96909654 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -222,6 +222,14 @@ struct AuctionsBucketData class Sorter; }; +enum class AuctionPostingServerFlag : uint8 +{ + None = 0x0, + GmLogBuyer = 0x1 // write transaction to gm log file for buyer (optimization flag - avoids querying database for offline player permissions) +}; + +DEFINE_ENUM_FLAG(AuctionPostingServerFlag); + // This structure represents the result of a single C_AuctionHouse.PostItem/PostCommodity call struct AuctionPosting { @@ -238,6 +246,7 @@ struct AuctionPosting uint64 BidAmount = 0; SystemTimePoint StartTime = SystemTimePoint::min(); SystemTimePoint EndTime = SystemTimePoint::min(); + EnumFlag<AuctionPostingServerFlag> ServerFlags = AuctionPostingServerFlag::None; GuidUnorderedSet BidderHistory; |