Optimize fury warrior

This commit is contained in:
Yunfan Li
2024-02-11 00:17:04 +08:00
parent 87b274564f
commit 036a890aa1
6 changed files with 20 additions and 15 deletions

View File

@@ -12,9 +12,9 @@ class FuryWarriorStrategyActionNodeFactory : public NamedObjectFactory<ActionNod
{
creators["charge"] = &charge;
creators["intercept"] = &intercept;
creators["death wish"] = &death_wish;
// creators["death wish"] = &death_wish;
creators["piercing howl"] = &piercing_howl;
creators["bloodthirst"] = &bloodthirst;
// creators["bloodthirst"] = &bloodthirst;
creators["pummel"] = &pummel;
}
@@ -22,8 +22,8 @@ class FuryWarriorStrategyActionNodeFactory : public NamedObjectFactory<ActionNod
ACTION_NODE_A(charge, "charge", "intercept");
ACTION_NODE_A(intercept, "intercept", "reach melee");
ACTION_NODE_A(piercing_howl, "piercing howl", "hamstring");
ACTION_NODE_A(death_wish, "death wish", "berserker rage");
ACTION_NODE_A(bloodthirst, "bloodthirst", "melee");
// ACTION_NODE_A(death_wish, "death wish", "berserker rage");
// ACTION_NODE_A(bloodthirst, "bloodthirst", "melee");
ACTION_NODE_A(pummel, "pummel", "intercept");
};
@@ -39,7 +39,7 @@ NextAction** FuryWarriorStrategy::getDefaultActions()
new NextAction("whirlwind", ACTION_DEFAULT + 0.4f),
new NextAction("sunder armor", ACTION_DEFAULT + 0.3f),
new NextAction("execute", ACTION_DEFAULT + 0.2f),
new NextAction("overpower", ACTION_DEFAULT + 0.1f),
// new NextAction("overpower", ACTION_DEFAULT + 0.1f),
new NextAction("melee", ACTION_DEFAULT),
NULL);
}
@@ -53,19 +53,20 @@ void FuryWarriorStrategy::InitTriggers(std::vector<TriggerNode*> &triggers)
triggers.push_back(new TriggerNode("battle shout", NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 8), nullptr)));
// triggers.push_back(new TriggerNode("target critical health", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr)));
// triggers.push_back(new TriggerNode("sudden death", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr)));
triggers.push_back(new TriggerNode("hamstring", NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH + 1), nullptr)));
// triggers.push_back(new TriggerNode("hamstring", NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH + 1), nullptr)));
triggers.push_back(new TriggerNode("pummel on enemy healer", NextAction::array(0, new NextAction("pummel on enemy healer", ACTION_INTERRUPT), nullptr)));
triggers.push_back(new TriggerNode("pummel", NextAction::array(0, new NextAction("pummel", ACTION_INTERRUPT), nullptr)));
triggers.push_back(new TriggerNode("victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr)));
// triggers.push_back(new TriggerNode("intercept on snare target", NextAction::array(0, new NextAction("intercept on snare target", ACTION_HIGH), nullptr)));
triggers.push_back(new TriggerNode("bloodthirst", NextAction::array(0, new NextAction("bloodthirst", ACTION_HIGH + 2), nullptr)));
triggers.push_back(new TriggerNode("instant slam", NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1), nullptr)));
triggers.push_back(new TriggerNode("berserker rage", NextAction::array(0, new NextAction("berserker rage", ACTION_HIGH + 2), nullptr)));
triggers.push_back(new TriggerNode("bloodthirst", NextAction::array(0, new NextAction("bloodthirst", ACTION_HIGH + 7), 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("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH + 2), nullptr)));
// triggers.push_back(new TriggerNode("rampage", NextAction::array(0, new NextAction("rampage", ACTION_INTERRUPT + 1), nullptr)));
triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 1), 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),
// nullptr)));
triggers.push_back(new TriggerNode("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH), nullptr)));
triggers.push_back(new TriggerNode("recklessness", NextAction::array(0, new NextAction("recklessness", ACTION_HIGH), nullptr)));
}

View File

@@ -51,5 +51,5 @@ void WarrirorAoeStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
new NextAction("cleave", ACTION_HIGH),
nullptr)));
triggers.push_back(new TriggerNode("shockwave on snare target", 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)));
// triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("whirlwind", ACTION_HIGH + 10), nullptr)));
}

View File

@@ -8,5 +8,5 @@
bool CastSunderArmorAction::isUseful()
{
Aura *aura = botAI->GetAura("sunder armor", GetTarget(), false, true);
return !aura || aura->GetStackAmount() < 5 || aura->GetDuration() <= 3000;
return !aura || aura->GetStackAmount() < 5 || aura->GetDuration() <= 6000;
}

View File

@@ -74,7 +74,6 @@ BUFF_ACTION(CastBerserkerRageAction, "berserker rage");
MELEE_ACTION(CastWhirlwindAction, "whirlwind");
MELEE_ACTION(CastPummelAction, "pummel");
ENEMY_HEALER_ACTION(CastPummelOnEnemyHealerAction, "pummel");
BUFF_ACTION(CastRecklessnessAction, "recklessness");
// fury 2.4.3
MELEE_ACTION(CastVictoryRushAction, "victory rush");
// fury 3.3.5
@@ -83,6 +82,7 @@ BUFF_ACTION(CastHeroicFuryAction, "heroic fury");
// fury talents
BUFF_ACTION(CastDeathWishAction, "death wish");
BUFF_ACTION(CastRecklessnessAction, "recklessness");
MELEE_ACTION(CastBloodthirstAction, "bloodthirst");
DEBUFF_ACTION_R(CastPiercingHowlAction, "piercing howl", 8.0f);
// fury talents 2.4.3

View File

@@ -53,6 +53,7 @@ class WarriorTriggerFactoryInternal : public NamedObjectContext<Trigger>
creators["hamstring"] = &WarriorTriggerFactoryInternal::hamstring;
creators["victory rush"] = &WarriorTriggerFactoryInternal::victory_rush;
creators["death wish"] = &WarriorTriggerFactoryInternal::death_wish;
creators["recklessness"] = &WarriorTriggerFactoryInternal::recklessness;
creators["battle shout"] = &WarriorTriggerFactoryInternal::battle_shout;
creators["rend"] = &WarriorTriggerFactoryInternal::rend;
creators["rend on attacker"] = &WarriorTriggerFactoryInternal::rend_on_attacker;
@@ -105,6 +106,7 @@ class WarriorTriggerFactoryInternal : public NamedObjectContext<Trigger>
static Trigger* hamstring(PlayerbotAI* botAI) { return new HamstringTrigger(botAI); }
static Trigger* victory_rush(PlayerbotAI* botAI) { return new VictoryRushTrigger(botAI); }
static Trigger* death_wish(PlayerbotAI* botAI) { return new DeathWishTrigger(botAI); }
static Trigger* recklessness(PlayerbotAI* botAI) { return new RecklessnessTrigger(botAI); }
static Trigger* battle_shout(PlayerbotAI* botAI) { return new BattleShoutTrigger(botAI); }
static Trigger* rend(PlayerbotAI* botAI) { return new RendDebuffTrigger(botAI); }
static Trigger* rend_on_attacker(PlayerbotAI* botAI) { return new RendDebuffOnAttackerTrigger(botAI); }
@@ -160,6 +162,7 @@ class WarriorAiObjectContextInternal : public NamedObjectContext<Action>
creators["rend on attacker"] = &WarriorAiObjectContextInternal::rend_on_attacker;
creators["mocking blow"] = &WarriorAiObjectContextInternal::mocking_blow;
creators["death wish"] = &WarriorAiObjectContextInternal::death_wish;
creators["recklessness"] = &WarriorAiObjectContextInternal::recklessness;
creators["berserker rage"] = &WarriorAiObjectContextInternal::berserker_rage;
creators["victory rush"] = &WarriorAiObjectContextInternal::victory_rush;
creators["execute"] = &WarriorAiObjectContextInternal::execute;
@@ -234,6 +237,7 @@ class WarriorAiObjectContextInternal : public NamedObjectContext<Action>
static Action* rend_on_attacker(PlayerbotAI* botAI) { return new CastRendOnAttackerAction(botAI); }
static Action* mocking_blow(PlayerbotAI* botAI) { return new CastMockingBlowAction(botAI); }
static Action* death_wish(PlayerbotAI* botAI) { return new CastDeathWishAction(botAI); }
static Action* recklessness(PlayerbotAI* botAI) { return new CastRecklessnessAction(botAI); }
static Action* berserker_rage(PlayerbotAI* botAI) { return new CastBerserkerRageAction(botAI); }
static Action* victory_rush(PlayerbotAI* botAI) { return new CastVictoryRushAction(botAI); }
static Action* execute(PlayerbotAI* botAI) { return new CastExecuteAction(botAI); }
@@ -266,7 +270,6 @@ class WarriorAiObjectContextInternal : public NamedObjectContext<Action>
static Action* whirlwind(PlayerbotAI* botAI) { return new CastWhirlwindAction(botAI); }
static Action* pummel(PlayerbotAI* botAI) { return new CastPummelAction (botAI); }
static Action* pummel_on_enemy_healer(PlayerbotAI* botAI) { return new CastPummelOnEnemyHealerAction(botAI); }
static Action* recklessness(PlayerbotAI* botAI) { return new CastRecklessnessAction(botAI); }
static Action* piercing_howl(PlayerbotAI* botAI) { return new CastPiercingHowlAction(botAI); }
static Action* rampage(PlayerbotAI* botAI) { return new CastRampageAction(botAI); }
static Action* intervene(PlayerbotAI* botAI) { return new CastInterveneAction(botAI); }

View File

@@ -42,6 +42,7 @@ CD_TRIGGER(InterceptCanCastTrigger, "intercept");
SNARE_TRIGGER(ShockwaveSnareTrigger, "shockwave");
DEBUFF_TRIGGER(ShockwaveTrigger, "shockwave");
BOOST_TRIGGER(DeathWishTrigger, "death wish");
BOOST_TRIGGER(RecklessnessTrigger, "recklessness");
BUFF_TRIGGER(BloodthirstBuffTrigger, "bloodthirst");
BUFF_TRIGGER(BerserkerRageBuffTrigger, "berserker rage");
INTERRUPT_HEALER_TRIGGER(ShieldBashInterruptEnemyHealerSpellTrigger, "shield bash");