From 14436686941d65563a98b8abebadb004868c2e8b Mon Sep 17 00:00:00 2001 From: dillyns <49765217+dillyns@users.noreply.github.com> Date: Sat, 23 May 2026 00:47:38 -0400 Subject: [PATCH] Make arcane barrage the alternate for arcane blast for level 60 mages (#2401) ## Pull Request Description Adds arcane barrage as the alternate for arcane blast so level 60 arcane mages who dont have arcane blast yet will use arcane barrage whenever available. For level 60 arcane mages, its actually better dps to alternate between arcane barrage and arcane missiles to fish for Missile Barrage procs. Before: Screenshot_20260518_024601 After: Screenshot_20260518_025040 ## Feature Evaluation - Describe the **minimum logic** required to achieve the intended behavior. - Describe the **processing cost** when this logic executes across many bots. ## How to Test the Changes Have a level 60 arcane mage dps a dummy. To compare to the old "rotation" of just using arcane missiles you can "ss Arcane Barrage" ## Impact Assessment - Does this change increase per-bot/per-tick processing or risk scaling poorly with thousands of bots? - - [x] No, not at all - - [ ] Minimal impact (**explain below**) - - [ ] Moderate impact (**explain below**) - Does this change modify default bot behavior? - - [x] No - - [ ] Yes (**explain why**) - Does this change add new decision branches or increase maintenance complexity? - - [x] No - - [ ] Yes (**explain below**) ## AI Assistance Was AI assistance used while working on this change? - - [x] No - - [ ] Yes (**explain below**) ## Final Checklist - - [x] Stability is not compromised. - - [x] Performance impact is understood, tested, and acceptable. - - [x] Added logic complexity is justified and explained. - - [x] Any new bot dialogue lines are translated. - - [x] Documentation updated if needed (Conf comments, WiKi commands). ## Notes for Reviewers Co-authored-by: Keleborn <22352763+Celandriel@users.noreply.github.com> --- .../Mage/Strategy/ArcaneMageStrategy.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Ai/Class/Mage/Strategy/ArcaneMageStrategy.cpp b/src/Ai/Class/Mage/Strategy/ArcaneMageStrategy.cpp index 4ba7d42b9..b9ed1e3dd 100644 --- a/src/Ai/Class/Mage/Strategy/ArcaneMageStrategy.cpp +++ b/src/Ai/Class/Mage/Strategy/ArcaneMageStrategy.cpp @@ -6,9 +6,31 @@ #include "ArcaneMageStrategy.h" #include "Playerbots.h" +// ===== Action Node Factory ===== +class ArcaneMageStrategyActionNodeFactory : public NamedObjectFactory +{ +public: + ArcaneMageStrategyActionNodeFactory() + { + creators["arcane blast"] = &arcane_blast; + } + +private: + // Arcane Barrage is the alternate for Arcane Blast (cast while moving, or + // when Arcane Blast is unavailable - e.g. not yet learned at low levels). + static ActionNode* arcane_blast([[maybe_unused]] PlayerbotAI* botAI) + { + return new ActionNode("arcane blast", + /*P*/ {}, + /*A*/ { NextAction("arcane barrage") }, + /*C*/ {}); + } +}; + +// ===== Single Target Strategy ===== ArcaneMageStrategy::ArcaneMageStrategy(PlayerbotAI* botAI) : GenericMageStrategy(botAI) { - // No custom ActionNodeFactory needed + actionNodeFactories.Add(new ArcaneMageStrategyActionNodeFactory()); } // ===== Default Actions =====