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:
After:
## 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 =====