mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Paladin AI tweaks
This commit is contained in:
@@ -326,11 +326,11 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
if (tab == 1)
|
||||
engine->addStrategies("tank", "tank assist", "bthreat", "cure", "barmor", "bstats", "close", "cc", nullptr);
|
||||
engine->addStrategies("tank", "tank assist", "bthreat", "cure", "baoe", "bstats", "close", "cc", nullptr);
|
||||
else if (tab == 0)
|
||||
engine->addStrategies("heal", "bmana", "dps assist", "cure", "flee", "barmor", nullptr);
|
||||
engine->addStrategies("heal", "bmana", "dps assist", "cure", "flee", "cc", nullptr);
|
||||
else
|
||||
engine->addStrategies("dps", "bdps", "dps assist", "cure", "baoe", "close", "cc", nullptr);
|
||||
engine->addStrategies("dps", "bdps", "dps assist", "cure", "close", "cc", nullptr);
|
||||
|
||||
if (player->getLevel() < 14)
|
||||
{
|
||||
@@ -492,11 +492,11 @@ void AiFactory::AddDefaultNonCombatStrategies(Player* player, PlayerbotAI* const
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
if (tab == 1)
|
||||
nonCombatEngine->addStrategies("bthreat", "tank assist", "barmor", "bstats", nullptr);
|
||||
nonCombatEngine->addStrategies("bthreat", "tank assist", "baoe", "bstats", nullptr);
|
||||
else if (tab == 0)
|
||||
nonCombatEngine->addStrategies("dps assist", "barmor", "bmana", nullptr);
|
||||
nonCombatEngine->addStrategies("dps assist", "bmana", nullptr);
|
||||
else
|
||||
nonCombatEngine->addStrategies("dps assist", "baoe", "bdps", nullptr);
|
||||
nonCombatEngine->addStrategies("dps assist", "bdps", nullptr);
|
||||
|
||||
nonCombatEngine->addStrategies("cure", nullptr);
|
||||
|
||||
|
||||
@@ -10,10 +10,16 @@ class DpsPaladinStrategyActionNodeFactory : public NamedObjectFactory<ActionNode
|
||||
public:
|
||||
DpsPaladinStrategyActionNodeFactory()
|
||||
{
|
||||
creators["sanctity aura"] = &sanctity_aura;
|
||||
creators["retribution aura"] = &retribution_aura;
|
||||
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["repentance"] = &repentance;
|
||||
creators["repentance on enemy healer"] = &repentance_on_enemy_healer;
|
||||
creators["repentance on snare target"] = &repentance_on_snare_target;
|
||||
creators["repentance of shield"] = &repentance_or_shield;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -29,7 +35,7 @@ class DpsPaladinStrategyActionNodeFactory : public NamedObjectFactory<ActionNode
|
||||
{
|
||||
return new ActionNode ("seal of command",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("seal of wisdom"), nullptr),
|
||||
/*A*/ NextAction::array(0, new NextAction("seal of righteousness"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
@@ -48,6 +54,12 @@ class DpsPaladinStrategyActionNodeFactory : public NamedObjectFactory<ActionNode
|
||||
/*A*/ NextAction::array(0, new NextAction("melee"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
ACTION_NODE_A(repentance, "repentance", "hammer of justice");
|
||||
ACTION_NODE_A(repentance_on_enemy_healer, "repentance on enemy healer", "hammer of justice on enemy healer");
|
||||
ACTION_NODE_A(repentance_on_snare_target, "repentance on snare target", "hammer of justice on snare target");
|
||||
ACTION_NODE_A(sanctity_aura, "sanctity aura", "retribution aura");
|
||||
ACTION_NODE_A(retribution_aura, "retribution aura", "devotion aura");
|
||||
ACTION_NODE_A(repentance_or_shield, "repentance", "divine shield");
|
||||
};
|
||||
|
||||
DpsPaladinStrategy::DpsPaladinStrategy(PlayerbotAI* botAI) : GenericPaladinStrategy(botAI)
|
||||
@@ -64,9 +76,17 @@ void DpsPaladinStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericPaladinStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("seal", NextAction::array(0, new NextAction("seal of wisdom", 90.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("divine shield", ACTION_CRITICAL_HEAL + 2), new NextAction("holy light", ACTION_CRITICAL_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement of wisdom", NextAction::array(0, new NextAction("judgement of wisdom", ACTION_NORMAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("seal", NextAction::array(0, new NextAction("seal of command", 90.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low mana", NextAction::array(0, new NextAction("seal of wisdom", 91.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("sanctity aura", NextAction::array(0, new NextAction("sanctity aura", 90.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("repentance or shield", ACTION_CRITICAL_HEAL + 3), new NextAction("holy light", ACTION_CRITICAL_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement of wisdom", NextAction::array(0, new NextAction("judgement of wisdom", ACTION_NORMAL + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement", NextAction::array(0, new NextAction("judgement", ACTION_HIGH + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("consecration", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("repentance on enemy healer", NextAction::array(0, new NextAction("repentance on enemy healer", ACTION_INTERRUPT + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("repentance on snare target", NextAction::array(0, new NextAction("repentance on snare target", ACTION_INTERRUPT + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("repentance", NextAction::array(0, new NextAction("repentance", ACTION_INTERRUPT + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("divine storm", ACTION_HIGH + 1), new NextAction("consecration", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("art of war", NextAction::array(0, new NextAction("exorcism", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("target critical health", NextAction::array(0, new NextAction("hammer of wrath", ACTION_CRITICAL_HEAL), nullptr)));
|
||||
}
|
||||
|
||||
@@ -16,4 +16,6 @@ void GenericPaladinNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& tr
|
||||
NonCombatStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("party member dead", NextAction::array(0, new NextAction("redemption", 30.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("almost full health", NextAction::array(0, new NextAction("flash of light", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member almost full health", NextAction::array(0, new NextAction("flash of light on party", 24.0f), nullptr)));
|
||||
}
|
||||
|
||||
@@ -15,15 +15,12 @@ void GenericPaladinStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
CombatStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("divine protection", ACTION_CRITICAL_HEAL + 2), new NextAction("holy light", ACTION_CRITICAL_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member low health", NextAction::array(0, new NextAction("holy light on party", ACTION_CRITICAL_HEAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice interrupt", NextAction::array(0, new NextAction("hammer of justice", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice on enemy healer", NextAction::array(0, new NextAction("hammer of justice on enemy healer", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice on snare target", NextAction::array(0, new NextAction("hammer of justice on snare target", ACTION_MOVE + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("critical health", NextAction::array(0, new NextAction("lay on hands", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member critical health", NextAction::array(0, new NextAction("lay on hands on party", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(new TriggerNode("target critical health", NextAction::array(0, new NextAction("hammer of wrath", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("often", NextAction::array(0, new NextAction("apply stone", 1.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("divine shield", ACTION_CRITICAL_HEAL + 2), new NextAction("holy light", ACTION_CRITICAL_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice interrupt", NextAction::array(0, new NextAction("hammer of justice", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice on enemy healer", NextAction::array(0, new NextAction("hammer of justice on enemy healer", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("hammer of justice on snare target", NextAction::array(0, new NextAction("hammer of justice on snare target", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("critical health", NextAction::array(0, new NextAction("lay on hands", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member critical health", NextAction::array(0, new NextAction("lay on hands on party", ACTION_EMERGENCY + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("protect party member", NextAction::array(0, new NextAction("blessing of protection on party", ACTION_EMERGENCY + 2), nullptr)));
|
||||
}
|
||||
|
||||
|
||||
@@ -5,21 +5,43 @@
|
||||
#include "HealPaladinStrategy.h"
|
||||
#include "Playerbots.h"
|
||||
|
||||
class HealPaladinStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
HealPaladinStrategyActionNodeFactory()
|
||||
{
|
||||
creators["concentration aura"] = &concentration_aura;
|
||||
}
|
||||
|
||||
private:
|
||||
ACTION_NODE_A(concentration_aura, "concentration aura", "devotion aura");
|
||||
};
|
||||
|
||||
HealPaladinStrategy::HealPaladinStrategy(PlayerbotAI* botAI) : GenericPaladinStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new HealPaladinStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
NextAction** HealPaladinStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(0, new NextAction("melee", ACTION_NORMAL), nullptr);
|
||||
return NextAction::array(0, new NextAction("reach party member to heal", ACTION_NORMAL + 1), new NextAction("judgement", ACTION_NORMAL), nullptr);
|
||||
}
|
||||
|
||||
void HealPaladinStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericPaladinStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("concentration aura", NextAction::array(0, new NextAction("concentration aura", 90.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("seal", NextAction::array(0, new NextAction("seal of light", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("judgement of light", ACTION_HIGH + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("judgement", ACTION_HIGH + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low mana", NextAction::array(0, new NextAction("divine favor", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("almost full health", NextAction::array(0, new NextAction("flash of light", ACTION_LIGHT_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member almost full health", NextAction::array(0, new NextAction("flash of light on party", ACTION_LIGHT_HEAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium health", NextAction::array(0, new NextAction("flash of light", ACTION_MEDIUM_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member medium health", NextAction::array(0, new NextAction("flash of light on party", ACTION_MEDIUM_HEAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("divine favor", ACTION_MEDIUM_HEAL + 4), new NextAction("holy shock", ACTION_MEDIUM_HEAL + 3), new NextAction("holy light", ACTION_MEDIUM_HEAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member low health", NextAction::array(0, new NextAction("divine favor", ACTION_MEDIUM_HEAL + 7), new NextAction("holy shock on party", ACTION_MEDIUM_HEAL + 6), new NextAction("holy light on party", ACTION_MEDIUM_HEAL + 5), nullptr)));
|
||||
triggers.push_back(new TriggerNode("blessing", NextAction::array(0, new NextAction("blessing of sanctuary", ACTION_HIGH + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member to heal out of spell range", NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member to heal out of spell range", NextAction::array(0, new NextAction("reach party member to heal", ACTION_EMERGENCY + 3), nullptr)));
|
||||
}
|
||||
|
||||
@@ -11,12 +11,6 @@
|
||||
class PlayerbotAI;
|
||||
class Unit;
|
||||
|
||||
// judgements
|
||||
MELEE_ACTION(CastJudgementAction, "judgement");
|
||||
MELEE_ACTION(CastJudgementOfLightAction, "judgement of light");
|
||||
MELEE_ACTION(CastJudgementOfWisdomAction, "judgement of wisdom");
|
||||
MELEE_ACTION(CastJudgementOfJusticeAction, "judgement of justice");
|
||||
|
||||
// seals
|
||||
BUFF_ACTION(CastSealOfRighteousnessAction, "seal of righteousness");
|
||||
BUFF_ACTION(CastSealOfJusticeAction, "seal of justice");
|
||||
@@ -25,10 +19,40 @@ BUFF_ACTION(CastSealOfWisdomAction, "seal of wisdom");
|
||||
BUFF_ACTION(CastSealOfCommandAction, "seal of command");
|
||||
BUFF_ACTION(CastSealOfVengeanceAction, "seal of vengeance");
|
||||
|
||||
// judgements
|
||||
DEBUFF_ACTION_R(CastJudgementAction, "judgement", 10.0f);
|
||||
DEBUFF_ACTION_R(CastJudgementOfLightAction, "judgement of light", 10.0f);
|
||||
DEBUFF_ACTION_R(CastJudgementOfWisdomAction, "judgement of wisdom", 10.0f);
|
||||
DEBUFF_ACTION_R(CastJudgementOfJusticeAction, "judgement of justice", 10.0f);
|
||||
|
||||
// auras
|
||||
BUFF_ACTION(CastDevotionAuraAction, "devotion aura");
|
||||
BUFF_ACTION(CastRetributionAuraAction, "retribution aura");
|
||||
BUFF_ACTION(CastConcentrationAuraAction, "concentration aura");
|
||||
BUFF_ACTION(CastShadowResistanceAuraAction, "shadow resistance aura");
|
||||
BUFF_ACTION(CastFrostResistanceAuraAction, "frost resistance aura");
|
||||
BUFF_ACTION(CastFireResistanceAuraAction, "fire resistance aura");
|
||||
BUFF_ACTION(CastCrusaderAuraAction, "crusader aura");
|
||||
BUFF_ACTION(CastSanctityAuraAction, "sanctity aura");
|
||||
|
||||
SPELL_ACTION(CastHolyShockAction, "holy shock");
|
||||
HEAL_PARTY_ACTION(CastHolyShockOnPartyAction, "holy shock");
|
||||
|
||||
// consecration
|
||||
SPELL_ACTION(CastConsecrationAction, "consecration");
|
||||
|
||||
// repentance
|
||||
SNARE_ACTION(CastRepentanceSnareAction, "repentance");
|
||||
DEBUFF_ACTION(CastRepentanceAction, "repentance");
|
||||
ENEMY_HEALER_ACTION(CastRepentanceOnHealerAction, "repentance");
|
||||
|
||||
//hamme of wrath
|
||||
SPELL_ACTION(CastHammerOfWrathAction, "hammer of wrath");
|
||||
|
||||
// buffs
|
||||
BUFF_ACTION(CastDivineFavorAction, "divine favor");
|
||||
|
||||
// blessings
|
||||
|
||||
// fury
|
||||
BUFF_ACTION(CastRighteousFuryAction, "righteous fury");
|
||||
@@ -45,30 +69,6 @@ class CastCrusaderStrikeAction : public CastMeleeSpellAction
|
||||
CastCrusaderStrikeAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "crusader strike") { }
|
||||
};
|
||||
|
||||
class CastShadowResistanceAuraAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastShadowResistanceAuraAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "shadow resistance aura") { }
|
||||
};
|
||||
|
||||
class CastFrostResistanceAuraAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastFrostResistanceAuraAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "frost resistance aura") { }
|
||||
};
|
||||
|
||||
class CastFireResistanceAuraAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastFireResistanceAuraAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "fire resistance aura") { }
|
||||
};
|
||||
|
||||
class CastCrusaderAuraAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastCrusaderAuraAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "crusader aura") { }
|
||||
};
|
||||
|
||||
class CastSealSpellAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
@@ -157,8 +157,6 @@ class CastHolyLightOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastHolyLightOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "holy light") { }
|
||||
|
||||
std::string const getName() override { return "holy light on party"; }
|
||||
};
|
||||
|
||||
class CastFlashOfLightAction : public CastHealingSpellAction
|
||||
@@ -171,8 +169,6 @@ class CastFlashOfLightOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastFlashOfLightOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "flash of light") { }
|
||||
|
||||
std::string const getName() override { return "flash of light on party"; }
|
||||
};
|
||||
|
||||
class CastLayOnHandsAction : public CastHealingSpellAction
|
||||
@@ -185,8 +181,6 @@ class CastLayOnHandsOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastLayOnHandsOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "lay on hands") { }
|
||||
|
||||
std::string const getName() override { return "lay on hands on party"; }
|
||||
};
|
||||
|
||||
class CastDivineProtectionAction : public CastBuffSpellAction
|
||||
@@ -209,12 +203,6 @@ class CastDivineShieldAction: public CastBuffSpellAction
|
||||
CastDivineShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "divine shield") { }
|
||||
};
|
||||
|
||||
class CastConsecrationAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
CastConsecrationAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "consecration") { }
|
||||
};
|
||||
|
||||
class CastHolyWrathAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
@@ -227,12 +215,6 @@ class CastHammerOfJusticeAction : public CastMeleeSpellAction
|
||||
CastHammerOfJusticeAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "hammer of justice") { }
|
||||
};
|
||||
|
||||
class CastHammerOfWrathAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
CastHammerOfWrathAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "hammer of wrath") { }
|
||||
};
|
||||
|
||||
class CastHammerOfTheRighteousAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
@@ -351,12 +333,6 @@ class CastHammerOfJusticeSnareAction : public CastSnareSpellAction
|
||||
CastHammerOfJusticeSnareAction(PlayerbotAI* botAI) : CastSnareSpellAction(botAI, "hammer of justice") { }
|
||||
};
|
||||
|
||||
class CastDivineFavorAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastDivineFavorAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "divine favor") { }
|
||||
};
|
||||
|
||||
class CastTurnUndeadAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -92,6 +92,7 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
public:
|
||||
PaladinTriggerFactoryInternal()
|
||||
{
|
||||
creators["judgement"] = &PaladinTriggerFactoryInternal::judgement;
|
||||
creators["judgement of wisdom"] = &PaladinTriggerFactoryInternal::judgement_of_wisdom;
|
||||
creators["judgement of light"] = &PaladinTriggerFactoryInternal::judgement_of_light;
|
||||
creators["blessing"] = &PaladinTriggerFactoryInternal::blessing;
|
||||
@@ -101,6 +102,8 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
creators["crusader aura"] = &PaladinTriggerFactoryInternal::crusader_aura;
|
||||
creators["retribution aura"] = &PaladinTriggerFactoryInternal::retribution_aura;
|
||||
creators["devotion aura"] = &PaladinTriggerFactoryInternal::devotion_aura;
|
||||
creators["sanctity aura"] = &PaladinTriggerFactoryInternal::sanctity_aura;
|
||||
creators["concentration aura"] = &PaladinTriggerFactoryInternal::concentration_aura;
|
||||
creators["shadow resistance aura"] = &PaladinTriggerFactoryInternal::shadow_resistance_aura;
|
||||
creators["frost resistance aura"] = &PaladinTriggerFactoryInternal::frost_resistance_aura;
|
||||
creators["fire resistance aura"] = &PaladinTriggerFactoryInternal::fire_resistance_aura;
|
||||
@@ -119,6 +122,10 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
creators["divine favor"] = &PaladinTriggerFactoryInternal::divine_favor;
|
||||
creators["turn undead"] = &PaladinTriggerFactoryInternal::turn_undead;
|
||||
creators["avenger's shield"] = &PaladinTriggerFactoryInternal::avenger_shield;
|
||||
creators["consecration"] = &PaladinTriggerFactoryInternal::consecration;
|
||||
creators["repentance on enemy healer"] = &PaladinTriggerFactoryInternal::repentance_on_enemy_healer;
|
||||
creators["repentance on snare target"] = &PaladinTriggerFactoryInternal::repentance_on_snare_target;
|
||||
creators["repentance interrupt"] = &PaladinTriggerFactoryInternal::repentance_interrupt;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -126,6 +133,7 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
static Trigger* divine_favor(PlayerbotAI* botAI) { return new DivineFavorTrigger(botAI); }
|
||||
static Trigger* holy_shield(PlayerbotAI* botAI) { return new HolyShieldTrigger(botAI); }
|
||||
static Trigger* righteous_fury(PlayerbotAI* botAI) { return new RighteousFuryTrigger(botAI); }
|
||||
static Trigger* judgement(PlayerbotAI* botAI) { return new JudgementTrigger(botAI); }
|
||||
static Trigger* judgement_of_wisdom(PlayerbotAI* botAI) { return new JudgementOfWisdomTrigger(botAI); }
|
||||
static Trigger* judgement_of_light(PlayerbotAI* botAI) { return new JudgementOfLightTrigger(botAI); }
|
||||
static Trigger* blessing(PlayerbotAI* botAI) { return new BlessingTrigger(botAI); }
|
||||
@@ -135,6 +143,8 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
static Trigger* crusader_aura(PlayerbotAI* botAI) { return new CrusaderAuraTrigger(botAI); }
|
||||
static Trigger* retribution_aura(PlayerbotAI* botAI) { return new RetributionAuraTrigger(botAI); }
|
||||
static Trigger* devotion_aura(PlayerbotAI* botAI) { return new DevotionAuraTrigger(botAI); }
|
||||
static Trigger* sanctity_aura(PlayerbotAI* botAI) { return new SanctityAuraTrigger(botAI); }
|
||||
static Trigger* concentration_aura(PlayerbotAI* botAI) { return new ConcentrationAuraTrigger(botAI); }
|
||||
static Trigger* shadow_resistance_aura(PlayerbotAI* botAI) { return new ShadowResistanceAuraTrigger(botAI); }
|
||||
static Trigger* frost_resistance_aura(PlayerbotAI* botAI) { return new FrostResistanceAuraTrigger(botAI); }
|
||||
static Trigger* fire_resistance_aura(PlayerbotAI* botAI) { return new FireResistanceAuraTrigger(botAI); }
|
||||
@@ -149,6 +159,10 @@ class PaladinTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
static Trigger* hammer_of_justice_on_enemy_target(PlayerbotAI* botAI) { return new HammerOfJusticeEnemyHealerTrigger(botAI); }
|
||||
static Trigger* hammer_of_justice_on_snare_target(PlayerbotAI* botAI) { return new HammerOfJusticeSnareTrigger(botAI); }
|
||||
static Trigger* avenger_shield(PlayerbotAI* botAI) { return new AvengerShieldTrigger(botAI); }
|
||||
static Trigger* consecration(PlayerbotAI* botAI) { return new ConsecrationTrigger(ai); }
|
||||
static Trigger* repentance_on_enemy_healer(PlayerbotAI* botAI) { return new RepentanceOnHealerTrigger(botAI); }
|
||||
static Trigger* repentance_on_snare_target(PlayerbotAI* botAI) { return new RepentanceSnareTrigger(botAI); }
|
||||
static Trigger* repentance_interrupt(PlayerbotAI* botAI) { return new RepentanceInterruptTrigger(botAI); }
|
||||
};
|
||||
|
||||
class PaladinAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
@@ -171,6 +185,7 @@ class PaladinAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
creators["crusader aura"] = &PaladinAiObjectContextInternal::crusader_aura;
|
||||
creators["seal of light"] = &PaladinAiObjectContextInternal::seal_of_light;
|
||||
creators["devotion aura"] = &PaladinAiObjectContextInternal::devotion_aura;
|
||||
creators["concentration aura"] = &PaladinAiObjectContextInternal::concentration_aura;
|
||||
creators["holy wrath"] = &PaladinAiObjectContextInternal::holy_wrath;
|
||||
creators["consecration"] = &PaladinAiObjectContextInternal::consecration;
|
||||
creators["cleanse disease"] = &PaladinAiObjectContextInternal::cleanse_disease;
|
||||
@@ -217,6 +232,12 @@ class PaladinAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
creators["turn undead"] = &PaladinAiObjectContextInternal::turn_undead;
|
||||
creators["blessing of protection on party"] = &PaladinAiObjectContextInternal::blessing_of_protection_on_party;
|
||||
creators["righteous defense"] = &PaladinAiObjectContextInternal::righteous_defense;
|
||||
creators["repentance"] = &PaladinAiObjectContextInternal::repentance;
|
||||
creators["repentance on snare target"] = &PaladinAiObjectContextInternal::repentance_on_snare_target;
|
||||
creators["repentance on enemy healer"] = &PaladinAiObjectContextInternal::repentance_on_enemy_healer;
|
||||
creators["sanctity aura"] = &PaladinAiObjectContextInternal::sanctity_aura;
|
||||
creators["holy shock"] = &PaladinAiObjectContextInternal::holy_shock;
|
||||
creators["holy shock on party"] = &PaladinAiObjectContextInternal::holy_shock_on_party;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -239,6 +260,7 @@ class PaladinAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
static Action* crusader_aura(PlayerbotAI* botAI) { return new CastCrusaderAuraAction(botAI); }
|
||||
static Action* seal_of_light(PlayerbotAI* botAI) { return new CastSealOfLightAction(botAI); }
|
||||
static Action* devotion_aura(PlayerbotAI* botAI) { return new CastDevotionAuraAction(botAI); }
|
||||
static Action* concentration_aura(PlayerbotAI* botAI) { return new CastConcentrationAuraAction(botAI); }
|
||||
static Action* holy_wrath(PlayerbotAI* botAI) { return new CastHolyWrathAction(botAI); }
|
||||
static Action* consecration(PlayerbotAI* botAI) { return new CastConsecrationAction(botAI); }
|
||||
static Action* cleanse_poison(PlayerbotAI* botAI) { return new CastCleansePoisonAction(botAI); }
|
||||
@@ -281,6 +303,12 @@ class PaladinAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
static Action* hammer_of_justice_on_enemy_healer(PlayerbotAI* botAI) { return new CastHammerOfJusticeOnEnemyHealerAction(botAI); }
|
||||
static Action* hammer_of_justice_on_snare_target(PlayerbotAI* botAI) { return new CastHammerOfJusticeSnareAction(botAI); }
|
||||
static Action* righteous_defense(PlayerbotAI* botAI) { return new CastRighteousDefenseAction(botAI); }
|
||||
static Action* repentance(PlayerbotAI* botAI) { return new CastRepentanceAction(botAI); }
|
||||
static Action* repentance_on_snare_target(PlayerbotAI* botAI) { return new CastRepentanceSnareAction(botAI); }
|
||||
static Action* repentance_on_enemy_healer(PlayerbotAI* botAI) { return new CastRepentanceOnHealerAction(botAI); }
|
||||
static Action* sanctity_aura(PlayerbotAI* botAI) { return new CastSanctityAuraAction(botAI); }
|
||||
static Action* holy_shock(PlayerbotAI* botAI) { return new CastHolyShockAction(botAI); }
|
||||
static Action* holy_shock_on_party(PlayerbotAI* botAI) { return new CastHolyShockOnPartyAction(botAI); }
|
||||
};
|
||||
|
||||
PaladinAiObjectContext::PaladinAiObjectContext(PlayerbotAI* botAI) : AiObjectContext(botAI)
|
||||
|
||||
@@ -31,9 +31,19 @@ class SealTrigger : public BuffTrigger
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
// judgements
|
||||
DEBUFF_TRIGGER(JudgementTrigger, "judgement");
|
||||
DEBUFF_TRIGGER(JudgementOfLightTrigger, "judgement of light");
|
||||
DEBUFF_TRIGGER(JudgementOfWisdomTrigger, "judgement of wisdom");
|
||||
|
||||
DEBUFF_TRIGGER(ConsecrationTrigger, "consecration");
|
||||
|
||||
// repentance triggers
|
||||
INTERRUPT_HEALER_TRIGGER(RepentanceOnHealerTrigger, "repentance on enemy healer");
|
||||
SNARE_TRIGGER(RepentanceSnareTrigger, "repentance on snare target");
|
||||
INTERRUPT_TRIGGER(RepentanceInterruptTrigger, "repentance");
|
||||
|
||||
|
||||
class BlessingOnPartyTrigger : public BuffOnPartyTrigger
|
||||
{
|
||||
public:
|
||||
@@ -90,6 +100,9 @@ class DevotionAuraTrigger : public BuffTrigger
|
||||
DevotionAuraTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "devotion aura") { }
|
||||
};
|
||||
|
||||
BUFF_TRIGGER(ConcentrationAuraTrigger, "concentration aura");
|
||||
|
||||
|
||||
class CleanseCureDiseaseTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -40,15 +40,18 @@ void TankPaladinStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericPaladinStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("seal", NextAction::array(0, new NextAction("seal of vengeance", 90.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement of light", NextAction::array(0, new NextAction("judgement of light", ACTION_NORMAL + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium mana", NextAction::array(0, new NextAction("judgement of wisdom", ACTION_NORMAL + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("judgement", ACTION_NORMAL + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode("light aoe", NextAction::array(0, new NextAction("hammer of the righteous", ACTION_HIGH + 6), new NextAction("avenger's shield", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("avenger's shield", NextAction::array(0, new NextAction("avenger's shield", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("consecration", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("consecration", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("seal", NextAction::array(0, new NextAction("seal of vengeance", 90.0f), NULL)));
|
||||
triggers.push_back(new TriggerNode("low mana", NextAction::array(0, new NextAction("seal of wisdom", 91.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement of light", NextAction::array(0, new NextAction("judgement of light", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium mana", NextAction::array(0, new NextAction("judgement of wisdom", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement", NextAction::array(0, new NextAction("judgement", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("judgement", NextAction::array(0, new NextAction("exorcism", ACTION_HIGH + 6), nullptr)));
|
||||
triggers.push_back(new TriggerNode("light aoe", NextAction::array(0, new NextAction("hammer of the righteous", ACTION_HIGH + 8), new NextAction("avenger's shield", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(new TriggerNode("avenger's shield", NextAction::array(0, new NextAction("avenger's shield", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("consecration", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("lose aggro", NextAction::array(0, new NextAction("hand of reckoning", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(new TriggerNode("holy shield", NextAction::array(0, new NextAction("holy shield", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(new TriggerNode("lose aggro", NextAction::array(0, new NextAction("exorcism", ACTION_HIGH + 8), nullptr)));
|
||||
triggers.push_back(new TriggerNode("holy shield", NextAction::array(0, new NextAction("holy shield", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(new TriggerNode("blessing", NextAction::array(0, new NextAction("blessing of sanctuary", ACTION_HIGH + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode("target critical health", NextAction::array(0, new NextAction("hammer of wrath", ACTION_CRITICAL_HEAL), nullptr)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user