From 920b3c7b08bf8d3671e502477bf2bc8abfa3866b Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 15:00:55 +1100 Subject: [PATCH 01/17] Lowered Heroic Strike priority --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index c77e25c2..35b608d5 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -64,7 +64,7 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) triggers.push_back(new TriggerNode( "victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); triggers.push_back(new TriggerNode( - "high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 10), nullptr))); + "high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), nullptr))); triggers.push_back(new TriggerNode("medium rage available", NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), new NextAction("thunder clap", ACTION_HIGH), From 68b48ce5730d7a9180e973e1cc8967fac1455734 Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 15:45:10 +1100 Subject: [PATCH 02/17] Adjusted priorities --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index 35b608d5..2f5ac44c 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -44,40 +44,42 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) GenericWarriorStrategy::InitTriggers(triggers); triggers.push_back(new TriggerNode("enemy out of melee", - NextAction::array(0, new NextAction("charge", ACTION_MOVE + 9), nullptr))); + NextAction::array(0, new NextAction("charge", ACTION_MOVE + 10), nullptr))); triggers.push_back(new TriggerNode( - "battle stance", NextAction::array(0, new NextAction("battle stance", ACTION_HIGH + 9), nullptr))); + "battle stance", NextAction::array(0, new NextAction("battle stance", ACTION_HIGH + 10), nullptr))); triggers.push_back(new TriggerNode("battle shout", - NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 8), nullptr))); + NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 9), nullptr))); triggers.push_back(new TriggerNode( - "mortal strike", NextAction::array(0, new NextAction("mortal strike", ACTION_HIGH + 1), nullptr))); + "mortal strike", NextAction::array(0, new NextAction("mortal strike", ACTION_HIGH + 3), nullptr))); triggers.push_back(new TriggerNode("target critical health", - NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr))); + NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); triggers.push_back( - new TriggerNode("sudden death", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr))); + new TriggerNode("sudden death", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); triggers.push_back( new TriggerNode("hamstring", NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH), nullptr))); triggers.push_back( - new TriggerNode("overpower", NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 3), nullptr))); + new TriggerNode("overpower", NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); triggers.push_back(new TriggerNode("taste for blood", - NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 3), nullptr))); + NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); triggers.push_back(new TriggerNode( "victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); - triggers.push_back(new TriggerNode( - "high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), nullptr))); - triggers.push_back(new TriggerNode("medium rage available", - NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), - new NextAction("thunder clap", ACTION_HIGH), - nullptr))); + triggers.push_back(new TriggerNode("high rage available", + NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), + NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), + nullptr))); + // triggers.push_back(new TriggerNode("medium rage available", + // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), + // new NextAction("thunder clap", ACTION_HIGH), + // nullptr))); triggers.push_back( new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr))); triggers.push_back( new TriggerNode("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH + 2), nullptr))); - triggers.push_back(new TriggerNode("rend", NextAction::array(0, new NextAction("rend", ACTION_HIGH + 5), nullptr))); + triggers.push_back(new TriggerNode("rend", NextAction::array(0, new NextAction("rend", ACTION_HIGH + 8), nullptr))); triggers.push_back(new TriggerNode( - "rend on attacker", NextAction::array(0, new NextAction("rend on attacker", ACTION_HIGH + 5), nullptr))); + "rend on attacker", NextAction::array(0, new NextAction("rend on attacker", ACTION_HIGH + 8), nullptr))); triggers.push_back(new TriggerNode( "critical health", NextAction::array(0, new NextAction("intimidating shout", ACTION_EMERGENCY), nullptr))); - triggers.push_back(new TriggerNode("medium aoe", - NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 2), nullptr))); + // triggers.push_back(new TriggerNode("medium aoe", + // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 2), nullptr))); } From 85efe3fbbd79f8aa5adad927674a0f056be43b9b Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 15:45:19 +1100 Subject: [PATCH 03/17] Adjusted priorities --- src/strategy/warrior/GenericWarriorStrategy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strategy/warrior/GenericWarriorStrategy.cpp b/src/strategy/warrior/GenericWarriorStrategy.cpp index 3b5588ea..a1132641 100644 --- a/src/strategy/warrior/GenericWarriorStrategy.cpp +++ b/src/strategy/warrior/GenericWarriorStrategy.cpp @@ -50,8 +50,8 @@ void WarrirorAoeStrategy::InitTriggers(std::vector& triggers) triggers.push_back(new TriggerNode( "light aoe", NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 5), new NextAction("shockwave", ACTION_HIGH + 4), - new NextAction("sweeping strikes", ACTION_HIGH + 3), - new NextAction("bladestorm", ACTION_HIGH + 3), + new NextAction("sweeping strikes", ACTION_HIGH + 7), + new NextAction("bladestorm", ACTION_HIGH + 6), // new NextAction("whirlwind", ACTION_HIGH + 2), new NextAction("demoralizing shout without life time check", ACTION_HIGH + 1), new NextAction("cleave", ACTION_HIGH), nullptr))); From 6eef4106897d3aeaa7ee28cc9365fc4a600ff392 Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 15:47:38 +1100 Subject: [PATCH 04/17] Missing ) --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index 2f5ac44c..a1c8324b 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -66,7 +66,7 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), - nullptr))); + nullptr)))); // triggers.push_back(new TriggerNode("medium rage available", // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), // new NextAction("thunder clap", ACTION_HIGH), From 9f1b9df9d18194b39d0f12a085732cceadff8017 Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 15:55:04 +1100 Subject: [PATCH 05/17] Update ArmsWarriorStrategy.cpp --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index a1c8324b..732e025d 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -65,8 +65,8 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) "victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), - NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), - nullptr)))); + new NextAction("slam", ACTION_HIGH + 1), + nullptr))); // triggers.push_back(new TriggerNode("medium rage available", // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), // new NextAction("thunder clap", ACTION_HIGH), From c253a32039ea66e2af246c3f7fb32c005d94f773 Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 16:09:32 +1100 Subject: [PATCH 06/17] Update GenericWarriorStrategy.cpp --- src/strategy/warrior/GenericWarriorStrategy.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strategy/warrior/GenericWarriorStrategy.cpp b/src/strategy/warrior/GenericWarriorStrategy.cpp index a1132641..a3046b04 100644 --- a/src/strategy/warrior/GenericWarriorStrategy.cpp +++ b/src/strategy/warrior/GenericWarriorStrategy.cpp @@ -48,10 +48,10 @@ void WarrirorAoeStrategy::InitTriggers(std::vector& triggers) // clap on snare target", ACTION_HIGH + 3), nullptr))); triggers.push_back(new TriggerNode("thunder clap", // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 10), nullptr))); triggers.push_back(new TriggerNode( - "light aoe", NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 5), - new NextAction("shockwave", ACTION_HIGH + 4), - new NextAction("sweeping strikes", ACTION_HIGH + 7), + "light aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), new NextAction("bladestorm", ACTION_HIGH + 6), + new NextAction("thunder clap", ACTION_HIGH + 5), + new NextAction("shockwave", ACTION_HIGH + 4), // new NextAction("whirlwind", ACTION_HIGH + 2), new NextAction("demoralizing shout without life time check", ACTION_HIGH + 1), new NextAction("cleave", ACTION_HIGH), nullptr))); From a6ceaa5565538e0b6bc253e1fbf49ca242e8279e Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 16:28:48 +1100 Subject: [PATCH 07/17] Update ArmsWarriorStrategy.cpp --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index 732e025d..d0c6a183 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -68,9 +68,9 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) new NextAction("slam", ACTION_HIGH + 1), nullptr))); // triggers.push_back(new TriggerNode("medium rage available", - // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), - // new NextAction("thunder clap", ACTION_HIGH), - // nullptr))); + // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), + // new NextAction("thunder clap", ACTION_HIGH), + // nullptr))); triggers.push_back( new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr))); triggers.push_back( From b9c96e80c3d787b73e9a9a3ea808a523fc9de7ca Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 16:52:54 +1100 Subject: [PATCH 08/17] Added medium aoe trigger for SS/BS combo --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index d0c6a183..96106f72 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -63,10 +63,10 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); triggers.push_back(new TriggerNode( "victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); - triggers.push_back(new TriggerNode("high rage available", - NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), - new NextAction("slam", ACTION_HIGH + 1), - nullptr))); + triggers.push_back(new TriggerNode("high rage available", + NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), + new NextAction("slam", ACTION_HIGH + 1), + nullptr))); // triggers.push_back(new TriggerNode("medium rage available", // NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), // new NextAction("thunder clap", ACTION_HIGH), @@ -82,4 +82,8 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) "critical health", NextAction::array(0, new NextAction("intimidating shout", ACTION_EMERGENCY), nullptr))); // triggers.push_back(new TriggerNode("medium aoe", // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 2), nullptr))); + triggers.push_back(new TriggerNode("medium aoe", + NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), + new NextAction("bladestorm", ACTION_HIGH + 6), + nullptr))); } From 9432b265ea04e9401cd103c1081d34424b730a2b Mon Sep 17 00:00:00 2001 From: avirar Date: Sun, 29 Dec 2024 17:14:38 +1100 Subject: [PATCH 09/17] Update GenericWarriorStrategy.cpp --- src/strategy/warrior/GenericWarriorStrategy.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/strategy/warrior/GenericWarriorStrategy.cpp b/src/strategy/warrior/GenericWarriorStrategy.cpp index a3046b04..97e53112 100644 --- a/src/strategy/warrior/GenericWarriorStrategy.cpp +++ b/src/strategy/warrior/GenericWarriorStrategy.cpp @@ -47,6 +47,10 @@ void WarrirorAoeStrategy::InitTriggers(std::vector& triggers) // triggers.push_back(new TriggerNode("thunder clap on snare target", NextAction::array(0, new NextAction("thunder // clap on snare target", ACTION_HIGH + 3), nullptr))); triggers.push_back(new TriggerNode("thunder clap", // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 10), nullptr))); + triggers.push_back(new TriggerNode( + "medium aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), + new NextAction("bladestorm", ACTION_HIGH + 6), + nullptr))); triggers.push_back(new TriggerNode( "light aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), new NextAction("bladestorm", ACTION_HIGH + 6), @@ -60,4 +64,5 @@ void WarrirorAoeStrategy::InitTriggers(std::vector& triggers) NextAction::array(0, new NextAction("shockwave on snare target", ACTION_HIGH + 5), nullptr))); // triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("whirlwind", // ACTION_HIGH + 10), nullptr))); + } From a6d169726706b333fd1a09885a8630d0482f8cbd Mon Sep 17 00:00:00 2001 From: kadeshar Date: Sun, 29 Dec 2024 21:44:35 +0100 Subject: [PATCH 10/17] Oculus - fix flying/attacking drake (#827) * - fixed bug with duplicated action name "fly drake" * - fixed bug with duplicated action name "drake attack" * - fixed eoe strategy after bugfixes --- src/strategy/dungeons/wotlk/oculus/OculusActionContext.h | 8 ++++---- src/strategy/dungeons/wotlk/oculus/OculusStrategy.cpp | 4 ++-- src/strategy/raids/eyeofeternity/RaidEoEActionContext.h | 8 ++++---- src/strategy/raids/eyeofeternity/RaidEoEStrategy.cpp | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/strategy/dungeons/wotlk/oculus/OculusActionContext.h b/src/strategy/dungeons/wotlk/oculus/OculusActionContext.h index fc22fdbb..fa5036e5 100644 --- a/src/strategy/dungeons/wotlk/oculus/OculusActionContext.h +++ b/src/strategy/dungeons/wotlk/oculus/OculusActionContext.h @@ -12,8 +12,8 @@ class WotlkDungeonOccActionContext : public NamedObjectContext creators["avoid unstable sphere"] = &WotlkDungeonOccActionContext::avoid_unstable_sphere; creators["mount drake"] = &WotlkDungeonOccActionContext::mount_drake; creators["dismount drake"] = &WotlkDungeonOccActionContext::dismount_drake; - creators["fly drake"] = &WotlkDungeonOccActionContext::fly_drake; - creators["drake attack"] = &WotlkDungeonOccActionContext::drake_attack; + creators["occ fly drake"] = &WotlkDungeonOccActionContext::occ_fly_drake; + creators["occ drake attack"] = &WotlkDungeonOccActionContext::occ_drake_attack; creators["avoid arcane explosion"] = &WotlkDungeonOccActionContext::avoid_arcane_explosion; creators["time bomb spread"] = &WotlkDungeonOccActionContext::time_bomb_spread; } @@ -21,8 +21,8 @@ class WotlkDungeonOccActionContext : public NamedObjectContext static Action* avoid_unstable_sphere(PlayerbotAI* ai) { return new AvoidUnstableSphereAction(ai); } static Action* mount_drake(PlayerbotAI* ai) { return new MountDrakeAction(ai); } static Action* dismount_drake(PlayerbotAI* ai) { return new DismountDrakeAction(ai); } - static Action* fly_drake(PlayerbotAI* ai) { return new OccFlyDrakeAction(ai); } - static Action* drake_attack(PlayerbotAI* ai) { return new OccDrakeAttackAction(ai); } + static Action* occ_fly_drake(PlayerbotAI* ai) { return new OccFlyDrakeAction(ai); } + static Action* occ_drake_attack(PlayerbotAI* ai) { return new OccDrakeAttackAction(ai); } static Action* avoid_arcane_explosion(PlayerbotAI* ai) { return new AvoidArcaneExplosionAction(ai); } static Action* time_bomb_spread(PlayerbotAI* ai) { return new TimeBombSpreadAction(ai); } }; diff --git a/src/strategy/dungeons/wotlk/oculus/OculusStrategy.cpp b/src/strategy/dungeons/wotlk/oculus/OculusStrategy.cpp index 9c1786b5..e64ede7a 100644 --- a/src/strategy/dungeons/wotlk/oculus/OculusStrategy.cpp +++ b/src/strategy/dungeons/wotlk/oculus/OculusStrategy.cpp @@ -15,9 +15,9 @@ void WotlkDungeonOccStrategy::InitTriggers(std::vector &triggers) triggers.push_back(new TriggerNode("drake dismount", NextAction::array(0, new NextAction("dismount drake", ACTION_RAID + 5), nullptr))); triggers.push_back(new TriggerNode("group flying", - NextAction::array(0, new NextAction("fly drake", ACTION_NORMAL + 1), nullptr))); + NextAction::array(0, new NextAction("occ fly drake", ACTION_NORMAL + 1), nullptr))); triggers.push_back(new TriggerNode("drake combat", - NextAction::array(0, new NextAction("drake attack", ACTION_NORMAL + 5), nullptr))); + NextAction::array(0, new NextAction("occ drake attack", ACTION_NORMAL + 5), nullptr))); // Varos Cloudstrider // Seems to be no way to identify the marked cores, may need to hook boss AI.. diff --git a/src/strategy/raids/eyeofeternity/RaidEoEActionContext.h b/src/strategy/raids/eyeofeternity/RaidEoEActionContext.h index ba4d841d..620610e9 100644 --- a/src/strategy/raids/eyeofeternity/RaidEoEActionContext.h +++ b/src/strategy/raids/eyeofeternity/RaidEoEActionContext.h @@ -14,8 +14,8 @@ public: creators["malygos target"] = &RaidEoEActionContext::target; // creators["pull power spark"] = &RaidEoEActionContext::pull_power_spark; // creators["kill power spark"] = &RaidEoEActionContext::kill_power_spark; - creators["fly drake"] = &RaidEoEActionContext::fly_drake; - creators["drake attack"] = &RaidEoEActionContext::drake_attack; + creators["eoe fly drake"] = &RaidEoEActionContext::eoe_fly_drake; + creators["eoe drake attack"] = &RaidEoEActionContext::eoe_drake_attack; } private: @@ -23,8 +23,8 @@ private: static Action* target(PlayerbotAI* ai) { return new MalygosTargetAction(ai); } // static Action* pull_power_spark(PlayerbotAI* ai) { return new PullPowerSparkAction(ai); } // static Action* kill_power_spark(PlayerbotAI* ai) { return new KillPowerSparkAction(ai); } - static Action* fly_drake(PlayerbotAI* ai) { return new EoEFlyDrakeAction(ai); } - static Action* drake_attack(PlayerbotAI* ai) { return new EoEDrakeAttackAction(ai); } + static Action* eoe_fly_drake(PlayerbotAI* ai) { return new EoEFlyDrakeAction(ai); } + static Action* eoe_drake_attack(PlayerbotAI* ai) { return new EoEDrakeAttackAction(ai); } }; #endif diff --git a/src/strategy/raids/eyeofeternity/RaidEoEStrategy.cpp b/src/strategy/raids/eyeofeternity/RaidEoEStrategy.cpp index f30cf30a..d06aa27f 100644 --- a/src/strategy/raids/eyeofeternity/RaidEoEStrategy.cpp +++ b/src/strategy/raids/eyeofeternity/RaidEoEStrategy.cpp @@ -14,9 +14,9 @@ void RaidEoEStrategy::InitTriggers(std::vector& triggers) // NextAction::array(0, new NextAction("kill power spark", ACTION_RAID + 3), nullptr))); triggers.push_back(new TriggerNode("group flying", - NextAction::array(0, new NextAction("fly drake", ACTION_NORMAL + 1), nullptr))); + NextAction::array(0, new NextAction("eoe fly drake", ACTION_NORMAL + 1), nullptr))); triggers.push_back(new TriggerNode("drake combat", - NextAction::array(0, new NextAction("drake attack", ACTION_NORMAL + 5), nullptr))); + NextAction::array(0, new NextAction("eoe drake attack", ACTION_NORMAL + 5), nullptr))); } void RaidEoEStrategy::InitMultipliers(std::vector &multipliers) From 5c8283d40a421d765860d59e7330cbbb4fd3728a Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 07:47:22 +1100 Subject: [PATCH 11/17] Prot warriors cast vigilance when in a group (#825) * Add Vigilance * Vigilance * Update WarriorTriggers.h * Update TankWarriorStrategy.cpp * Update WarriorAiObjectContext.cpp * Update WarriorTriggers.cpp * Update WarriorTriggers.h * Update WarriorTriggers.cpp Check for existence of Vigilance in raid already * Update WarriorActions.cpp Check for existence of Vigilance in raid already Apply to tanks, then highest gearscore DPS. * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Added logout Bots keep assigning it to me and not maintank? Added logging to clarify * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorTriggers.cpp * Update WarriorTriggers.cpp * Update WarriorTriggers.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Update WarriorTriggers.cpp * Update WarriorActions.cpp * Update WarriorActions.cpp * Removed Logs * Removed logs * Added check for spell in trigger * Update WarriorTriggers.cpp * !member->IsAlive() * !member->IsAlive() --- src/strategy/warrior/TankWarriorStrategy.cpp | 12 +++ src/strategy/warrior/WarriorActions.cpp | 89 +++++++++++++++++++ src/strategy/warrior/WarriorActions.h | 9 ++ .../warrior/WarriorAiObjectContext.cpp | 6 ++ src/strategy/warrior/WarriorTriggers.cpp | 72 +++++++++++++++ src/strategy/warrior/WarriorTriggers.h | 8 ++ 6 files changed, 196 insertions(+) diff --git a/src/strategy/warrior/TankWarriorStrategy.cpp b/src/strategy/warrior/TankWarriorStrategy.cpp index d7e47f6b..5f228b09 100644 --- a/src/strategy/warrior/TankWarriorStrategy.cpp +++ b/src/strategy/warrior/TankWarriorStrategy.cpp @@ -22,6 +22,7 @@ public: creators["heroic throw taunt"] = &heroic_throw_taunt; creators["taunt"] = &taunt; creators["taunt spell"] = &taunt; + creators["vigilance"] = &vigilance; } private: @@ -41,6 +42,14 @@ private: /*A*/ NextAction::array(0, new NextAction("heroic throw taunt"), nullptr), /*C*/ nullptr); } + + static ActionNode* vigilance(PlayerbotAI* botAI) + { + return new ActionNode("vigilance", + /*P*/ nullptr, + /*A*/ nullptr, + /*C*/ nullptr); + } }; TankWarriorStrategy::TankWarriorStrategy(PlayerbotAI* botAI) : GenericWarriorStrategy(botAI) @@ -59,6 +68,9 @@ void TankWarriorStrategy::InitTriggers(std::vector& triggers) { GenericWarriorStrategy::InitTriggers(triggers); + triggers.push_back(new TriggerNode( + "vigilance", + NextAction::array(0, new NextAction("vigilance", ACTION_HIGH + 7), nullptr))); triggers.push_back( new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("heroic throw", ACTION_MOVE + 11), new NextAction("charge", ACTION_MOVE + 10), nullptr))); diff --git a/src/strategy/warrior/WarriorActions.cpp b/src/strategy/warrior/WarriorActions.cpp index eaf8f9a5..662bcc2d 100644 --- a/src/strategy/warrior/WarriorActions.cpp +++ b/src/strategy/warrior/WarriorActions.cpp @@ -12,3 +12,92 @@ bool CastSunderArmorAction::isUseful() Aura* aura = botAI->GetAura("sunder armor", GetTarget(), false, true); return !aura || aura->GetStackAmount() < 5 || aura->GetDuration() <= 6000; } + +Value* CastVigilanceAction::GetTargetValue() +{ + Group* group = bot->GetGroup(); + if (!group) + { + return new ManualSetValue(botAI, nullptr); + } + + Player* currentVigilanceTarget = nullptr; + Player* mainTank = nullptr; + Player* assistTank1 = nullptr; + Player* assistTank2 = nullptr; + Player* highestGearScorePlayer = nullptr; + uint32 highestGearScore = 0; + + // Iterate once through the group to gather all necessary information + for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next()) + { + Player* member = ref->GetSource(); + if (!member || member == bot || !member->IsAlive()) + continue; + + // Check if member has Vigilance applied by the bot + if (!currentVigilanceTarget && botAI->HasAura("vigilance", member, false, true)) + { + currentVigilanceTarget = member; + } + + // Identify Main Tank + if (!mainTank && botAI->IsMainTank(member)) + { + mainTank = member; + } + + // Identify Assist Tanks + if (assistTank1 == nullptr && botAI->IsAssistTankOfIndex(member, 0)) + { + assistTank1 = member; + } + else if (assistTank2 == nullptr && botAI->IsAssistTankOfIndex(member, 1)) + { + assistTank2 = member; + } + + // Determine Highest Gear Score + uint32 gearScore = botAI->GetEquipGearScore(member, false, false); + if (gearScore > highestGearScore) + { + highestGearScore = gearScore; + highestGearScorePlayer = member; + } + } + + // Determine the highest-priority target + Player* highestPriorityTarget = mainTank ? mainTank : + (assistTank1 ? assistTank1 : + (assistTank2 ? assistTank2 : highestGearScorePlayer)); + + // If no valid target, return nullptr + if (!highestPriorityTarget) + { + return new ManualSetValue(botAI, nullptr); + } + + // If the current target is already the highest-priority target, do nothing + if (currentVigilanceTarget == highestPriorityTarget) + { + return new ManualSetValue(botAI, nullptr); + } + + // Assign the new target + Unit* targetUnit = highestPriorityTarget->ToUnit(); + if (targetUnit) + { + return new ManualSetValue(botAI, targetUnit); + } + + return new ManualSetValue(botAI, nullptr); +} + +bool CastVigilanceAction::Execute(Event event) +{ + Unit* target = GetTarget(); + if (!target || target == bot) + return false; + + return botAI->CastSpell("vigilance", target); +} diff --git a/src/strategy/warrior/WarriorActions.h b/src/strategy/warrior/WarriorActions.h index 05505da0..38e14f89 100644 --- a/src/strategy/warrior/WarriorActions.h +++ b/src/strategy/warrior/WarriorActions.h @@ -135,4 +135,13 @@ public: bool isUseful() override; }; +class CastVigilanceAction : public BuffOnPartyAction +{ +public: + CastVigilanceAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "vigilance") {} + + Value* GetTargetValue() override; + bool Execute(Event event) override; +}; + #endif diff --git a/src/strategy/warrior/WarriorAiObjectContext.cpp b/src/strategy/warrior/WarriorAiObjectContext.cpp index 71be13bf..365fe756 100644 --- a/src/strategy/warrior/WarriorAiObjectContext.cpp +++ b/src/strategy/warrior/WarriorAiObjectContext.cpp @@ -98,6 +98,8 @@ public: creators["intercept and far enemy"] = &WarriorTriggerFactoryInternal::intercept_and_far_enemy; creators["intercept and rage"] = &WarriorTriggerFactoryInternal::intercept_and_rage; // creators["slam"] = &WarriorTriggerFactoryInternal::slam; + + creators["vigilance"] = &WarriorTriggerFactoryInternal::vigilance; } private: @@ -166,6 +168,8 @@ private: static Trigger* revenge(PlayerbotAI* botAI) { return new RevengeAvailableTrigger(botAI); } static Trigger* sunder_armor(PlayerbotAI* botAI) { return new SunderArmorDebuffTrigger(botAI); } // static Trigger* slam(PlayerbotAI* ai) { return new SlamTrigger(ai); } + + static Trigger* vigilance(PlayerbotAI* botAI) { return new VigilanceTrigger(botAI); } }; class WarriorAiObjectContextInternal : public NamedObjectContext @@ -235,6 +239,7 @@ public: creators["heroic throw"] = &WarriorAiObjectContextInternal::heroic_throw; creators["heroic throw on snare target"] = &WarriorAiObjectContextInternal::heroic_throw_on_snare_target; creators["shattering throw"] = &WarriorAiObjectContextInternal::shattering_throw; + creators["vigilance"] = &WarriorAiObjectContextInternal::vigilance; } private: @@ -304,6 +309,7 @@ private: static Action* heroic_throw_on_snare_target(PlayerbotAI* botAI) { return new CastHeroicThrowSnareAction(botAI); } static Action* heroic_throw(PlayerbotAI* botAI) { return new CastHeroicThrowAction(botAI); } static Action* bladestorm(PlayerbotAI* botAI) { return new CastBladestormAction(botAI); } + static Action* vigilance(PlayerbotAI* botAI) { return new CastVigilanceAction(botAI); } }; WarriorAiObjectContext::WarriorAiObjectContext(PlayerbotAI* botAI) : AiObjectContext(botAI) diff --git a/src/strategy/warrior/WarriorTriggers.cpp b/src/strategy/warrior/WarriorTriggers.cpp index f2ea13da..8a608690 100644 --- a/src/strategy/warrior/WarriorTriggers.cpp +++ b/src/strategy/warrior/WarriorTriggers.cpp @@ -12,3 +12,75 @@ bool BloodrageBuffTrigger::IsActive() return AI_VALUE2(uint8, "health", "self target") >= sPlayerbotAIConfig->mediumHealth && AI_VALUE2(uint8, "rage", "self target") < 20; } + +bool VigilanceTrigger::IsActive() +{ + if (!bot->HasSpell(50720)) + { + return false; + } + + Group* group = bot->GetGroup(); + if (!group) + { + return false; + } + + Player* currentVigilanceTarget = nullptr; + Player* mainTank = nullptr; + Player* assistTank1 = nullptr; + Player* assistTank2 = nullptr; + Player* highestGearScorePlayer = nullptr; + uint32 highestGearScore = 0; + + // Iterate once through the group to gather all necessary information + for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next()) + { + Player* member = ref->GetSource(); + if (!member || member == bot || !member->IsAlive()) + continue; + + // Check if member has Vigilance applied by the bot + if (!currentVigilanceTarget && botAI->HasAura("vigilance", member, false, true)) + { + currentVigilanceTarget = member; + } + + // Identify Main Tank + if (!mainTank && botAI->IsMainTank(member)) + { + mainTank = member; + } + + // Identify Assist Tanks + if (assistTank1 == nullptr && botAI->IsAssistTankOfIndex(member, 0)) + { + assistTank1 = member; + } + else if (assistTank2 == nullptr && botAI->IsAssistTankOfIndex(member, 1)) + { + assistTank2 = member; + } + + // Determine Highest Gear Score + uint32 gearScore = botAI->GetEquipGearScore(member, false, false); + if (gearScore > highestGearScore) + { + highestGearScore = gearScore; + highestGearScorePlayer = member; + } + } + + // Determine the highest-priority target + Player* highestPriorityTarget = mainTank ? mainTank : + (assistTank1 ? assistTank1 : + (assistTank2 ? assistTank2 : highestGearScorePlayer)); + + // Trigger if no Vigilance is active or the current target is not the highest-priority target + if (!currentVigilanceTarget || currentVigilanceTarget != highestPriorityTarget) + { + return true; + } + + return false; // No need to reassign Vigilance +} diff --git a/src/strategy/warrior/WarriorTriggers.h b/src/strategy/warrior/WarriorTriggers.h index 223e0049..3509ead7 100644 --- a/src/strategy/warrior/WarriorTriggers.h +++ b/src/strategy/warrior/WarriorTriggers.h @@ -63,6 +63,14 @@ public: RendDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "rend", 1, true) {} }; +class VigilanceTrigger : public BuffOnPartyTrigger +{ +public: + VigilanceTrigger(PlayerbotAI* botAI) : BuffOnPartyTrigger(botAI, "vigilance") {} + + bool IsActive() override; +}; + // class SlamTrigger : public HasAuraTrigger // { // public: From c7dd947a7a20d94ea07a0e61b92f47f0de5c8d78 Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 09:34:43 +1100 Subject: [PATCH 12/17] Update GenericWarriorStrategy.cpp --- src/strategy/warrior/GenericWarriorStrategy.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strategy/warrior/GenericWarriorStrategy.cpp b/src/strategy/warrior/GenericWarriorStrategy.cpp index 97e53112..c48a6493 100644 --- a/src/strategy/warrior/GenericWarriorStrategy.cpp +++ b/src/strategy/warrior/GenericWarriorStrategy.cpp @@ -47,10 +47,11 @@ void WarrirorAoeStrategy::InitTriggers(std::vector& triggers) // triggers.push_back(new TriggerNode("thunder clap on snare target", NextAction::array(0, new NextAction("thunder // clap on snare target", ACTION_HIGH + 3), nullptr))); triggers.push_back(new TriggerNode("thunder clap", // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 10), nullptr))); - triggers.push_back(new TriggerNode( + /* triggers.push_back(new TriggerNode( "medium aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), new NextAction("bladestorm", ACTION_HIGH + 6), nullptr))); + */ triggers.push_back(new TriggerNode( "light aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), new NextAction("bladestorm", ACTION_HIGH + 6), From 6842505c88c352d720b76b2995546a63cc8caa43 Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 09:51:47 +1100 Subject: [PATCH 13/17] Update ArmsWarriorStrategy.cpp --- src/strategy/warrior/ArmsWarriorStrategy.cpp | 56 +++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/strategy/warrior/ArmsWarriorStrategy.cpp b/src/strategy/warrior/ArmsWarriorStrategy.cpp index 96106f72..b6c5eed7 100644 --- a/src/strategy/warrior/ArmsWarriorStrategy.cpp +++ b/src/strategy/warrior/ArmsWarriorStrategy.cpp @@ -44,25 +44,41 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) GenericWarriorStrategy::InitTriggers(triggers); triggers.push_back(new TriggerNode("enemy out of melee", - NextAction::array(0, new NextAction("charge", ACTION_MOVE + 10), nullptr))); - triggers.push_back(new TriggerNode( - "battle stance", NextAction::array(0, new NextAction("battle stance", ACTION_HIGH + 10), nullptr))); + NextAction::array(0, new NextAction("charge", ACTION_MOVE + 10), nullptr))); + + triggers.push_back(new TriggerNode("battle stance", + NextAction::array(0, new NextAction("battle stance", ACTION_HIGH + 10), nullptr))); + triggers.push_back(new TriggerNode("battle shout", - NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 9), nullptr))); - triggers.push_back(new TriggerNode( - "mortal strike", NextAction::array(0, new NextAction("mortal strike", ACTION_HIGH + 3), nullptr))); + NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 9), nullptr))); + + triggers.push_back(new TriggerNode("rend", + NextAction::array(0, new NextAction("rend", ACTION_HIGH + 8), nullptr))); + + triggers.push_back(new TriggerNode("rend on attacker", + NextAction::array(0, new NextAction("rend on attacker", ACTION_HIGH + 8), nullptr))); + + triggers.push_back(new TriggerNode("mortal strike", + NextAction::array(0, new NextAction("mortal strike", ACTION_HIGH + 3), nullptr))); + triggers.push_back(new TriggerNode("target critical health", - NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); - triggers.push_back( - new TriggerNode("sudden death", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); - triggers.push_back( - new TriggerNode("hamstring", NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH), nullptr))); - triggers.push_back( - new TriggerNode("overpower", NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); + NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); + + triggers.push_back(new TriggerNode("sudden death", + NextAction::array(0, new NextAction("execute", ACTION_HIGH + 5), nullptr))); + + triggers.push_back(new TriggerNode("hamstring", + NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH), nullptr))); + + triggers.push_back(new TriggerNode("overpower", + NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); + triggers.push_back(new TriggerNode("taste for blood", - NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); - triggers.push_back(new TriggerNode( - "victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); + NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 4), nullptr))); + + triggers.push_back(new TriggerNode("victory rush", + NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr))); + triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), new NextAction("slam", ACTION_HIGH + 1), @@ -73,17 +89,19 @@ void ArmsWarriorStrategy::InitTriggers(std::vector& triggers) // nullptr))); triggers.push_back( new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr))); + triggers.push_back( new TriggerNode("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH + 2), nullptr))); - triggers.push_back(new TriggerNode("rend", NextAction::array(0, new NextAction("rend", ACTION_HIGH + 8), nullptr))); - triggers.push_back(new TriggerNode( - "rend on attacker", NextAction::array(0, new NextAction("rend on attacker", ACTION_HIGH + 8), nullptr))); + triggers.push_back(new TriggerNode( "critical health", NextAction::array(0, new NextAction("intimidating shout", ACTION_EMERGENCY), nullptr))); + // triggers.push_back(new TriggerNode("medium aoe", // NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 2), nullptr))); + /* triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("sweeping strikes", ACTION_HIGH + 7), new NextAction("bladestorm", ACTION_HIGH + 6), nullptr))); + */ } From 64b5cb833a45fc61bf5cdd52a9264a24a52ead8b Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 10:32:49 +1100 Subject: [PATCH 14/17] Merged Fury tweaks into Arms branch --- src/strategy/warrior/FuryWarriorStrategy.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strategy/warrior/FuryWarriorStrategy.cpp b/src/strategy/warrior/FuryWarriorStrategy.cpp index 56e12b7b..49410f2c 100644 --- a/src/strategy/warrior/FuryWarriorStrategy.cpp +++ b/src/strategy/warrior/FuryWarriorStrategy.cpp @@ -68,12 +68,14 @@ void FuryWarriorStrategy::InitTriggers(std::vector& triggers) // snare target", ACTION_HIGH), nullptr))); triggers.push_back( new TriggerNode("bloodthirst", NextAction::array(0, new NextAction("bloodthirst", ACTION_HIGH + 7), nullptr))); + triggers.push_back( + new TriggerNode("whirlwind", NextAction::array(0, new NextAction("whirlwind", ACTION_HIGH + 6), nullptr))); triggers.push_back( new TriggerNode("instant slam", NextAction::array(0, new NextAction("slam", ACTION_HIGH + 5), nullptr))); triggers.push_back( new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr))); triggers.push_back(new TriggerNode("medium rage available", - NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 1), NULL))); + NextAction::array(0, new NextAction("heroic strike", ACTION_DEFAULT + 0.1f), NULL))); // triggers.push_back(new TriggerNode("berserker rage", NextAction::array(0, new NextAction("berserker rage", // ACTION_HIGH + 2), nullptr))); triggers.push_back(new TriggerNode("light aoe", NextAction::array(0, // new NextAction("whirlwind", ACTION_HIGH + 2), From a8baa213d6761a040bbcfdd36a8b52f8c4d0ddf1 Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 10:34:01 +1100 Subject: [PATCH 15/17] Merged Fury tweaks into Arms branch to unify PR --- src/strategy/warrior/WarriorAiObjectContext.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/strategy/warrior/WarriorAiObjectContext.cpp b/src/strategy/warrior/WarriorAiObjectContext.cpp index 71be13bf..efe4c9c1 100644 --- a/src/strategy/warrior/WarriorAiObjectContext.cpp +++ b/src/strategy/warrior/WarriorAiObjectContext.cpp @@ -78,6 +78,7 @@ public: creators["thunder clap on snare target"] = &WarriorTriggerFactoryInternal::thunder_clap_on_snare_target; creators["thunder clap"] = &WarriorTriggerFactoryInternal::thunder_clap; creators["bloodthirst"] = &WarriorTriggerFactoryInternal::bloodthirst; + creators["whirlwind"] = &WarriorTriggerFactoryInternal::whirlwind; creators["berserker rage"] = &WarriorTriggerFactoryInternal::berserker_rage; creators["pummel on enemy healer"] = &WarriorTriggerFactoryInternal::pummel_on_enemy_healer; creators["pummel"] = &WarriorTriggerFactoryInternal::pummel; @@ -157,6 +158,7 @@ private: } static Trigger* berserker_rage(PlayerbotAI* botAI) { return new BerserkerRageBuffTrigger(botAI); } static Trigger* bloodthirst(PlayerbotAI* botAI) { return new BloodthirstBuffTrigger(botAI); } + static Trigger* whirlwind(PlayerbotAI* botAI) { return new WhirlwindTrigger(botAI); } static Trigger* thunder_clap_on_snare_target(PlayerbotAI* botAI) { return new ThunderClapSnareTrigger(botAI); } static Trigger* thunder_clap(PlayerbotAI* botAI) { return new ThunderClapTrigger(botAI); } static Trigger* mortal_strike(PlayerbotAI* botAI) { return new MortalStrikeDebuffTrigger(botAI); } From f1a1562ae9640d898753770789177e103fbf77ea Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 10:36:55 +1100 Subject: [PATCH 16/17] Merged Fury tweaks into Arms branch for unified PR --- src/strategy/warrior/WarriorTriggers.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/strategy/warrior/WarriorTriggers.h b/src/strategy/warrior/WarriorTriggers.h index 223e0049..4ce070b9 100644 --- a/src/strategy/warrior/WarriorTriggers.h +++ b/src/strategy/warrior/WarriorTriggers.h @@ -45,6 +45,7 @@ DEBUFF_TRIGGER(ShockwaveTrigger, "shockwave"); BOOST_TRIGGER(DeathWishTrigger, "death wish"); BOOST_TRIGGER(RecklessnessTrigger, "recklessness"); BUFF_TRIGGER(BloodthirstBuffTrigger, "bloodthirst"); +BUFF_TRIGGER(WhirlwindTrigger, "whirlwind"); BUFF_TRIGGER(BerserkerRageBuffTrigger, "berserker rage"); INTERRUPT_HEALER_TRIGGER(ShieldBashInterruptEnemyHealerSpellTrigger, "shield bash"); INTERRUPT_TRIGGER(ShieldBashInterruptSpellTrigger, "shield bash"); From fd7b82d170eda747aba03ea4ead7891e386f4a66 Mon Sep 17 00:00:00 2001 From: avirar Date: Mon, 30 Dec 2024 13:58:34 +1100 Subject: [PATCH 17/17] Lowered Heroic Strike for Prot spec too Also added Devastate as a medium rage ability after Shield Slam. --- src/strategy/warrior/TankWarriorStrategy.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strategy/warrior/TankWarriorStrategy.cpp b/src/strategy/warrior/TankWarriorStrategy.cpp index 5f228b09..c1e8aa18 100644 --- a/src/strategy/warrior/TankWarriorStrategy.cpp +++ b/src/strategy/warrior/TankWarriorStrategy.cpp @@ -89,7 +89,9 @@ void TankWarriorStrategy::InitTriggers(std::vector& triggers) triggers.push_back( new TriggerNode("sunder armor", NextAction::array(0, new NextAction("devastate", ACTION_HIGH + 2), nullptr))); triggers.push_back(new TriggerNode("medium rage available", - NextAction::array(0, new NextAction("shield slam", ACTION_HIGH + 1), nullptr))); + NextAction::array(0, new NextAction("shield slam", ACTION_HIGH + 2), + new NextAction("devastate", ACTION_HIGH + 1), + nullptr))); triggers.push_back(new TriggerNode( "shield block", NextAction::array(0, new NextAction("shield block", ACTION_INTERRUPT + 1), nullptr))); triggers.push_back( @@ -129,7 +131,7 @@ void TankWarriorStrategy::InitTriggers(std::vector& triggers) triggers.push_back(new TriggerNode("protect party member", NextAction::array(0, new NextAction("intervene", ACTION_EMERGENCY), nullptr))); triggers.push_back(new TriggerNode( - "high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 1), nullptr))); + "high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH), nullptr))); triggers.push_back(new TriggerNode("medium rage available", NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 1), nullptr))); }