From a6ebda011631bbbf53db10241615b825bb54e146 Mon Sep 17 00:00:00 2001 From: zeb <37308742+zeb139@users.noreply.github.com> Date: Wed, 1 Oct 2025 11:06:04 -0400 Subject: [PATCH] manage AHBot Players with unique ptr --- src/AuctionHouseBot.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/AuctionHouseBot.cpp b/src/AuctionHouseBot.cpp index b0bcae6..701a94d 100644 --- a/src/AuctionHouseBot.cpp +++ b/src/AuctionHouseBot.cpp @@ -1194,29 +1194,29 @@ void AuctionHouseBot::Update() CyclesBetweenBuyOrSell = urand(CyclesBetweenBuyOrSellMin, CyclesBetweenBuyOrSellMax); // Load all AH Bot Players - std::vector>> AHBPlayers; + std::vector, std::unique_ptr>> AHBPlayers; AHBPlayers.reserve(AHCharacters.size()); for (uint32 botIndex = 0; botIndex < AHCharacters.size(); ++botIndex) { CurrentBotCharGUID = AHCharacters[botIndex].CharacterGUID; std::string accountName = "AuctionHouseBot" + std::to_string(AHCharacters[botIndex].AccountID); - // Wrap session in unique pointer to manage the session lifetime + // Wrap session and player in unique pointer to manage lifetime auto session = std::make_unique( AHCharacters[botIndex].AccountID, std::move(accountName), 0, nullptr, SEC_PLAYER, sWorld->getIntConfig(CONFIG_EXPANSION), 0, LOCALE_enUS, 0, false, false, 0 ); - Player* player = new Player(session.get()); + auto player = std::make_unique(session.get()); player->Initialize(AHCharacters[botIndex].CharacterGUID); - ObjectAccessor::AddObject(player); - AHBPlayers.emplace_back(player, std::move(session)); + ObjectAccessor::AddObject(player.get()); + AHBPlayers.emplace_back(std::move(player), std::move(session)); } // Create a vector of Player* for passing to methods std::vector playersPointerVector; playersPointerVector.reserve(AHBPlayers.size()); for (const auto& pair : AHBPlayers) - playersPointerVector.push_back(pair.first); + playersPointerVector.emplace_back(pair.first.get()); // Add New Bids if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION) == false) @@ -1233,12 +1233,9 @@ void AuctionHouseBot::Update() if (BuyingBotBuyCandidatesPerBuyCycleMin > 0) AddNewAuctionBuyerBotBid(playersPointerVector, &NeutralConfig); - // Explicitly delete players to close sessions + // Remove AH Bot Players from world for (auto& [player, session] : AHBPlayers) - { - ObjectAccessor::RemoveObject(player); - delete player; - } + ObjectAccessor::RemoveObject(player.get()); } void AuctionHouseBot::InitializeConfiguration()