diff --git a/src/strategy/deathknight/DKAiObjectContext.cpp b/src/strategy/deathknight/DKAiObjectContext.cpp index 45d4b65f..c02ff82b 100644 --- a/src/strategy/deathknight/DKAiObjectContext.cpp +++ b/src/strategy/deathknight/DKAiObjectContext.cpp @@ -74,14 +74,14 @@ public: creators["plague strike"] = &DeathKnightTriggerFactoryInternal::plague_strike; creators["plague strike on attacker"] = &DeathKnightTriggerFactoryInternal::plague_strike_on_attacker; creators["icy touch"] = &DeathKnightTriggerFactoryInternal::icy_touch; - creators["icy touch 8s"] = &DeathKnightTriggerFactoryInternal::icy_touch_8s; - creators["dd cd and icy touch 8s"] = &DeathKnightTriggerFactoryInternal::dd_cd_and_icy_touch_8s; + creators["icy touch 3s"] = &DeathKnightTriggerFactoryInternal::icy_touch_3s; + creators["dd cd and icy touch 3s"] = &DeathKnightTriggerFactoryInternal::dd_cd_and_icy_touch_3s; creators["death coil"] = &DeathKnightTriggerFactoryInternal::death_coil; creators["icy touch on attacker"] = &DeathKnightTriggerFactoryInternal::icy_touch_on_attacker; creators["improved icy talons"] = &DeathKnightTriggerFactoryInternal::improved_icy_talons; creators["plague strike"] = &DeathKnightTriggerFactoryInternal::plague_strike; - creators["plague strike 8s"] = &DeathKnightTriggerFactoryInternal::plague_strike_8s; - creators["dd cd and plague strike 8s"] = &DeathKnightTriggerFactoryInternal::dd_cd_and_plague_strike_8s; + creators["plague strike 3s"] = &DeathKnightTriggerFactoryInternal::plague_strike_3s; + creators["dd cd and plague strike 3s"] = &DeathKnightTriggerFactoryInternal::dd_cd_and_plague_strike_3s; creators["horn of winter"] = &DeathKnightTriggerFactoryInternal::horn_of_winter; creators["mind freeze"] = &DeathKnightTriggerFactoryInternal::mind_freeze; creators["mind freeze on enemy healer"] = &DeathKnightTriggerFactoryInternal::mind_freeze_on_enemy_healer; @@ -94,6 +94,7 @@ public: creators["high blood rune"] = &DeathKnightTriggerFactoryInternal::high_blood_rune; creators["high frost rune"] = &DeathKnightTriggerFactoryInternal::high_frost_rune; creators["high unholy rune"] = &DeathKnightTriggerFactoryInternal::high_unholy_rune; + creators["no rune"] = &DeathKnightTriggerFactoryInternal::no_rune; creators["freezing fog"] = &DeathKnightTriggerFactoryInternal::freezing_fog; creators["no desolation"] = &DeathKnightTriggerFactoryInternal::no_desolation; creators["dd cd and no desolation"] = &DeathKnightTriggerFactoryInternal::dd_cd_and_no_desolation; @@ -106,15 +107,15 @@ private: static Trigger* pestilence_glyph(PlayerbotAI* botAI) { return new PestilenceGlyphTrigger(botAI); } static Trigger* blood_strike(PlayerbotAI* botAI) { return new BloodStrikeTrigger(botAI); } static Trigger* plague_strike(PlayerbotAI* botAI) { return new PlagueStrikeDebuffTrigger(botAI); } - static Trigger* plague_strike_8s(PlayerbotAI* botAI) { return new PlagueStrike8sDebuffTrigger(botAI); } - static Trigger* dd_cd_and_plague_strike_8s(PlayerbotAI* botAI) { return new TwoTriggers(botAI, "death and decay cooldown", "plague strike 8s"); } + static Trigger* plague_strike_3s(PlayerbotAI* botAI) { return new PlagueStrike3sDebuffTrigger(botAI); } + static Trigger* dd_cd_and_plague_strike_3s(PlayerbotAI* botAI) { return new TwoTriggers(botAI, "death and decay cooldown", "plague strike 3s"); } static Trigger* plague_strike_on_attacker(PlayerbotAI* botAI) { return new PlagueStrikeDebuffOnAttackerTrigger(botAI); } static Trigger* icy_touch(PlayerbotAI* botAI) { return new IcyTouchDebuffTrigger(botAI); } - static Trigger* icy_touch_8s(PlayerbotAI* botAI) { return new IcyTouch8sDebuffTrigger(botAI); } - static Trigger* dd_cd_and_icy_touch_8s(PlayerbotAI* botAI) { return new TwoTriggers(botAI, "death and decay cooldown", "icy touch 8s"); } + static Trigger* icy_touch_3s(PlayerbotAI* botAI) { return new IcyTouch3sDebuffTrigger(botAI); } + static Trigger* dd_cd_and_icy_touch_3s(PlayerbotAI* botAI) { return new TwoTriggers(botAI, "death and decay cooldown", "icy touch 3s"); } static Trigger* death_coil(PlayerbotAI* botAI) { return new DeathCoilTrigger(botAI); } static Trigger* icy_touch_on_attacker(PlayerbotAI* botAI) { return new IcyTouchDebuffOnAttackerTrigger(botAI); } static Trigger* improved_icy_talons(PlayerbotAI* botAI) { return new ImprovedIcyTalonsTrigger(botAI); } @@ -136,6 +137,7 @@ private: static Trigger* high_blood_rune(PlayerbotAI* botAI) { return new HighBloodRuneTrigger(botAI); } static Trigger* high_frost_rune(PlayerbotAI* botAI) { return new HighFrostRuneTrigger(botAI); } static Trigger* high_unholy_rune(PlayerbotAI* botAI) { return new HighUnholyRuneTrigger(botAI); } + static Trigger* no_rune(PlayerbotAI* botAI) { return new NoRuneTrigger(botAI); } static Trigger* freezing_fog(PlayerbotAI* botAI) { return new FreezingFogTrigger(botAI); } static Trigger* no_desolation(PlayerbotAI* botAI) { return new DesolationTrigger(botAI); } static Trigger* dd_cd_and_no_desolation(PlayerbotAI* botAI) { return new TwoTriggers(botAI, "death and decay cooldown", "no desolation"); } diff --git a/src/strategy/deathknight/DKTriggers.cpp b/src/strategy/deathknight/DKTriggers.cpp index 2d1cbb15..430ccdf9 100644 --- a/src/strategy/deathknight/DKTriggers.cpp +++ b/src/strategy/deathknight/DKTriggers.cpp @@ -37,20 +37,32 @@ bool PestilenceGlyphTrigger::IsActive() return false; } +// Based on runeSlotTypes bool HighBloodRuneTrigger::IsActive() { - return !bot->GetRuneCooldown(0) && !bot->GetRuneCooldown(1); + return bot->GetRuneCooldown(0) <= 2000 && bot->GetRuneCooldown(1) <= 2000; } bool HighFrostRuneTrigger::IsActive() { - return !bot->GetRuneCooldown(2) && !bot->GetRuneCooldown(3); + return bot->GetRuneCooldown(4) <= 2000 && bot->GetRuneCooldown(5) <= 2000; } bool HighUnholyRuneTrigger::IsActive() { - return !bot->GetRuneCooldown(4) && !bot->GetRuneCooldown(5); + return bot->GetRuneCooldown(2) <= 2000 && bot->GetRuneCooldown(3) <= 2000; } + +bool NoRuneTrigger::IsActive() +{ + for (uint32 i = 0; i < MAX_RUNES; ++i) + { + if (!bot->GetRuneCooldown(i)) + return false; + } + return true; +} + bool DesolationTrigger::IsActive() { return bot->HasAura(66817) && BuffTrigger::IsActive(); @@ -62,5 +74,5 @@ bool DeathAndDecayCooldownTrigger::IsActive() if (!spellId) return true; - return bot->GetSpellCooldownDelay(spellId) >= 3000; + return bot->GetSpellCooldownDelay(spellId) >= 2000; } \ No newline at end of file diff --git a/src/strategy/deathknight/DKTriggers.h b/src/strategy/deathknight/DKTriggers.h index ef82394b..721a1dbc 100644 --- a/src/strategy/deathknight/DKTriggers.h +++ b/src/strategy/deathknight/DKTriggers.h @@ -20,10 +20,10 @@ public: PlagueStrikeDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "blood plague", 1, true, .0f) {} }; -class PlagueStrike8sDebuffTrigger : public DebuffTrigger +class PlagueStrike3sDebuffTrigger : public DebuffTrigger { public: - PlagueStrike8sDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "blood plague", 1, true, .0f, 3000) {} + PlagueStrike3sDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "blood plague", 1, true, .0f, 3000) {} }; // DEBUFF_CHECKISOWNER_TRIGGER(IcyTouchDebuffTrigger, "frost fever"); @@ -33,10 +33,10 @@ public: IcyTouchDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "frost fever", 1, true, .0f) {} }; -class IcyTouch8sDebuffTrigger : public DebuffTrigger +class IcyTouch3sDebuffTrigger : public DebuffTrigger { public: - IcyTouch8sDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "frost fever", 1, true, .0f, 3000) {} + IcyTouch3sDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "frost fever", 1, true, .0f, 3000) {} }; BUFF_TRIGGER(UnbreakableArmorTrigger, "unbreakable armor"); @@ -165,6 +165,13 @@ public: bool IsActive() override; }; +class NoRuneTrigger : public Trigger +{ +public: + NoRuneTrigger(PlayerbotAI* botAI) : Trigger(botAI, "no rune") {} + bool IsActive() override; +}; + class FreezingFogTrigger : public HasAuraTrigger { public: diff --git a/src/strategy/deathknight/UnholyDKStrategy.cpp b/src/strategy/deathknight/UnholyDKStrategy.cpp index fb1baca4..cc60e4f8 100644 --- a/src/strategy/deathknight/UnholyDKStrategy.cpp +++ b/src/strategy/deathknight/UnholyDKStrategy.cpp @@ -80,7 +80,7 @@ NextAction** UnholyDKStrategy::getDefaultActions() return NextAction::array( 0, new NextAction("death and decay", ACTION_HIGH + 5), new NextAction("summon gargoyle", ACTION_DEFAULT + 0.4f), - new NextAction("empower rune weapon", ACTION_DEFAULT + 0.3f), + // new NextAction("empower rune weapon", ACTION_DEFAULT + 0.3f), new NextAction("horn of winter", ACTION_DEFAULT + 0.2f), new NextAction("death coil", ACTION_DEFAULT + 0.1f), new NextAction("melee", ACTION_DEFAULT), nullptr); @@ -93,8 +93,8 @@ void UnholyDKStrategy::InitTriggers(std::vector& triggers) "death and decay cooldown", NextAction::array(0, new NextAction("ghoul frenzy", ACTION_DEFAULT + 0.9f), new NextAction("scourge strike", ACTION_DEFAULT + 0.8f), - new NextAction("blood boil", ACTION_DEFAULT + 0.7f), - new NextAction("icy touch", ACTION_DEFAULT + 0.6f), + new NextAction("icy touch", ACTION_DEFAULT + 0.7f), + new NextAction("blood strike", ACTION_DEFAULT + 0.6f), new NextAction("plague strike", ACTION_DEFAULT + 0.5f), nullptr))); @@ -111,24 +111,26 @@ void UnholyDKStrategy::InitTriggers(std::vector& triggers) new NextAction("icy touch", ACTION_NORMAL + 3), nullptr))); triggers.push_back(new TriggerNode( - "high unholy rune", NextAction::array(0, - new NextAction("plague strike", ACTION_NORMAL + 2), nullptr))); + "high blood rune", NextAction::array(0, new NextAction("blood strike", ACTION_NORMAL + 2), nullptr))); triggers.push_back(new TriggerNode( - "high blood rune", NextAction::array(0, new NextAction("blood strike", ACTION_NORMAL + 1), nullptr))); + "high unholy rune", NextAction::array(0, + new NextAction("plague strike", ACTION_NORMAL + 1), nullptr))); triggers.push_back( - new TriggerNode("dd cd and plague strike 8s", NextAction::array(0, new NextAction("plague strike", ACTION_HIGH + 2), nullptr))); + new TriggerNode("dd cd and plague strike 3s", NextAction::array(0, new NextAction("plague strike", ACTION_HIGH + 1), nullptr))); triggers.push_back( - new TriggerNode("dd cd and icy touch 8s", NextAction::array(0, new NextAction("icy touch", ACTION_HIGH + 1), nullptr))); + new TriggerNode("dd cd and icy touch 3s", NextAction::array(0, new NextAction("icy touch", ACTION_HIGH + 2), nullptr))); + triggers.push_back( + new TriggerNode("no rune", NextAction::array(0, new NextAction("empower rune weapon", ACTION_HIGH + 1), nullptr))); // triggers.push_back(new TriggerNode("often", NextAction::array(0, new NextAction(, ACTION_NORMAL + 2), nullptr))); triggers.push_back(new TriggerNode( "army of the dead", NextAction::array(0, new NextAction("army of the dead", ACTION_HIGH + 6), nullptr))); triggers.push_back( - new TriggerNode("bone shield", NextAction::array(0, new NextAction("bone shield", ACTION_HIGH + 1), nullptr))); + new TriggerNode("bone shield", NextAction::array(0, new NextAction("bone shield", ACTION_HIGH + 3), nullptr))); } void UnholyDKAoeStrategy::InitTriggers(std::vector& triggers)