From 1377f7db1be96c19425154b6eb0fd7baabc12d2d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 21:23:02 +0000 Subject: [PATCH] Fix Azgalor melee Rain of Fire target swapping Agent-Logs-Url: https://github.com/brighton-chi/mod-playerbots/sessions/a91f27bd-55aa-4c28-b511-e00e256b5398 Co-authored-by: brighton-chi <190869400+brighton-chi@users.noreply.github.com> --- .../Action/RaidHyjalSummitActions.cpp | 15 +++++-- .../Util/RaidHyjalSummitHelpers.cpp | 41 ++++++++----------- .../HyjalSummit/Util/RaidHyjalSummitHelpers.h | 2 + 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/Ai/Raid/HyjalSummit/Action/RaidHyjalSummitActions.cpp b/src/Ai/Raid/HyjalSummit/Action/RaidHyjalSummitActions.cpp index dcf725b0829..72b7f558019 100644 --- a/src/Ai/Raid/HyjalSummit/Action/RaidHyjalSummitActions.cpp +++ b/src/Ai/Raid/HyjalSummit/Action/RaidHyjalSummitActions.cpp @@ -750,14 +750,21 @@ bool AzgalorMeleeGetOutOfFireAction::Execute(Event /*event*/) if (!azgalor || !IsBotInsideActiveAzgalorRainOfFire(bot, 17.0f)) return false; - if (Unit* doomguard = AI_VALUE2(Unit*, "find target", "lesser doomguard")) + Unit* doomguard = AI_VALUE2(Unit*, "find target", "lesser doomguard"); + bool isTargetingDoomguard = + doomguard && (bot->GetVictim() == doomguard || bot->GetTarget() == doomguard->GetGUID()); + if (isTargetingDoomguard) { - if (bot->GetVictim() != doomguard) - return Attack(doomguard); + if (bot->GetVictim() != azgalor || bot->GetTarget() != azgalor->GetGUID()) + return Attack(azgalor); - return true; + return false; } + if (doomguard && + (bot->GetVictim() != doomguard || bot->GetTarget() != doomguard->GetGUID())) + return Attack(doomguard); + return MoveAway(azgalor, 5.0f); } diff --git a/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.cpp b/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.cpp index f536ca1c21c..4220f950f04 100644 --- a/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.cpp +++ b/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.cpp @@ -13,34 +13,29 @@ namespace HyjalSummitHelpers { - namespace + std::unordered_map* GetActiveAzgalorRainOfFire(uint32 instanceId) { - constexpr uint32 AZGALOR_RAIN_OF_FIRE_DURATION = 10000; + auto instanceIt = rainOfFirePosition.find(instanceId); + if (instanceIt == rainOfFirePosition.end()) + return nullptr; - std::unordered_map* GetActiveAzgalorRainOfFire(uint32 instanceId) + uint32 now = getMSTime(); + auto& dynObjMap = instanceIt->second; + for (auto it = dynObjMap.begin(); it != dynObjMap.end(); ) { - auto instanceIt = rainOfFirePosition.find(instanceId); - if (instanceIt == rainOfFirePosition.end()) - return nullptr; - - uint32 now = getMSTime(); - auto& dynObjMap = instanceIt->second; - for (auto it = dynObjMap.begin(); it != dynObjMap.end(); ) - { - if (getMSTimeDiff(it->second.spawnTime, now) >= AZGALOR_RAIN_OF_FIRE_DURATION) - it = dynObjMap.erase(it); - else - ++it; - } - - if (dynObjMap.empty()) - { - rainOfFirePosition.erase(instanceIt); - return nullptr; - } + if (getMSTimeDiff(it->second.spawnTime, now) >= AZGALOR_RAIN_OF_FIRE_DURATION) + it = dynObjMap.erase(it); + else + ++it; + } - return &dynObjMap; + if (dynObjMap.empty()) + { + rainOfFirePosition.erase(instanceIt); + return nullptr; } + + return &dynObjMap; } // General diff --git a/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.h b/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.h index 04de11e5c60..bea3fbbb7a8 100644 --- a/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.h +++ b/src/Ai/Raid/HyjalSummit/Util/RaidHyjalSummitHelpers.h @@ -90,6 +90,7 @@ namespace HyjalSummitHelpers extern const Position AZGALOR_TANK_FINAL_POSITION; extern const Position AZGALOR_DOOMGUARD_POSITION; extern std::unordered_map azgalorTankStep; + constexpr uint32 AZGALOR_RAIN_OF_FIRE_DURATION = 10000; struct RainOfFireData { Position position; @@ -97,6 +98,7 @@ namespace HyjalSummitHelpers }; extern std::unordered_map> rainOfFirePosition; TankPositionState GetAzgalorTankPositionState(PlayerbotAI* botAI, Player* bot); + std::unordered_map* GetActiveAzgalorRainOfFire(uint32 instanceId); bool IsBotInsideActiveAzgalorRainOfFire(Player* bot, float radius); bool AnyGroupMemberHasDoom(Player* bot);