/* * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license, you may redistribute it * and/or modify it under version 3 of the License, or (at your option), any later version. */ #include "OffhealRetPaladinStrategy.h" #include "Playerbots.h" #include "Strategy.h" class OffhealRetPaladinStrategyActionNodeFactory : public NamedObjectFactory { public: OffhealRetPaladinStrategyActionNodeFactory() { creators["retribution aura"] = &retribution_aura; creators["seal of corruption"] = &seal_of_corruption; creators["seal of vengeance"] = &seal_of_vengeance; creators["seal of command"] = &seal_of_command; creators["blessing of might"] = &blessing_of_might; creators["crusader strike"] = &crusader_strike; creators["divine plea"] = &divine_plea; } private: static ActionNode* retribution_aura([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "retribution aura", /*P*/ {}, /*A*/ { NextAction("devotion aura") }, /*C*/ {} ); } static ActionNode* seal_of_corruption([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "seal of corruption", /*P*/ {}, /*A*/ { NextAction("seal of vengeance") }, /*C*/ {} ); } static ActionNode* seal_of_vengeance([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "seal of vengeance", /*P*/ {}, /*A*/ { NextAction("seal of command") }, /*C*/ {} ); } static ActionNode* seal_of_command([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "seal of command", /*P*/ {}, /*A*/ { NextAction("seal of righteousness") }, /*C*/ {} ); } static ActionNode* blessing_of_might([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "blessing of might", /*P*/ {}, /*A*/ { NextAction("blessing of kings") }, /*C*/ {} ); } static ActionNode* crusader_strike([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "crusader strike", /*P*/ {}, /*A*/ {}, /*C*/ {} ); } static ActionNode* divine_plea([[maybe_unused]] PlayerbotAI* botAI) { return new ActionNode( "divine plea", /*P*/ {}, /*A*/ {}, /*C*/ {} ); } }; OffhealRetPaladinStrategy::OffhealRetPaladinStrategy(PlayerbotAI* botAI) : GenericPaladinStrategy(botAI) { actionNodeFactories.Add(new OffhealRetPaladinStrategyActionNodeFactory()); } std::vector OffhealRetPaladinStrategy::getDefaultActions() { return { NextAction("hammer of wrath", ACTION_DEFAULT + 0.6f), NextAction("judgement of wisdom", ACTION_DEFAULT + 0.5f), NextAction("crusader strike", ACTION_DEFAULT + 0.4f), NextAction("divine storm", ACTION_DEFAULT + 0.3f), NextAction("melee", ACTION_DEFAULT) }; } void OffhealRetPaladinStrategy::InitTriggers(std::vector& triggers) { GenericPaladinStrategy::InitTriggers(triggers); // Damage Triggers triggers.push_back( new TriggerNode( "seal", { NextAction("seal of corruption", ACTION_HIGH) } ) ); triggers.push_back( new TriggerNode( "low mana", { NextAction("seal of wisdom", ACTION_HIGH + 5), NextAction("divine plea", ACTION_HIGH + 4) } ) ); triggers.push_back( new TriggerNode( "art of war", { NextAction("exorcism", ACTION_HIGH + 1) } ) ); triggers.push_back( new TriggerNode( "avenging wrath", { NextAction("avenging wrath", ACTION_HIGH + 2) } ) ); triggers.push_back( new TriggerNode( "medium aoe", { NextAction("divine storm", ACTION_HIGH + 4), NextAction("consecration", ACTION_HIGH + 3) } ) ); triggers.push_back( new TriggerNode( "enemy out of melee", { NextAction("reach melee", ACTION_HIGH + 1) } ) ); triggers.push_back( new TriggerNode( "retribution aura", { NextAction("retribution aura", ACTION_NORMAL) } ) ); triggers.push_back( new TriggerNode( "blessing of might", { NextAction("blessing of might", ACTION_NORMAL + 1) } ) ); triggers.push_back( new TriggerNode( "low health", { NextAction("holy light", ACTION_CRITICAL_HEAL + 2) } ) ); // Healing Triggers triggers.push_back( new TriggerNode( "party member critical health", { NextAction("holy shock on party", ACTION_CRITICAL_HEAL + 6), NextAction("holy light on party", ACTION_CRITICAL_HEAL + 4) } ) ); triggers.push_back( new TriggerNode( "party member low health", { NextAction("holy light on party", ACTION_MEDIUM_HEAL + 5) } ) ); triggers.push_back( new TriggerNode( "party member medium health", { NextAction("flash of light on party", ACTION_LIGHT_HEAL + 8) } ) ); triggers.push_back( new TriggerNode( "party member almost full health", { NextAction("flash of light on party", ACTION_LIGHT_HEAL + 3) } ) ); triggers.push_back( new TriggerNode( "party member to heal out of spell range", { NextAction("reach party member to heal", ACTION_EMERGENCY + 3) } ) ); triggers.push_back( new TriggerNode( "beacon of light on main tank", { NextAction("beacon of light on main tank", ACTION_CRITICAL_HEAL + 7) } ) ); }