[Spell] Fix alternative healing spell

This commit is contained in:
Yunfan Li
2024-10-04 14:38:09 +08:00
parent a0865cca14
commit 37c5c1dcdf
13 changed files with 42 additions and 38 deletions

View File

@@ -78,11 +78,11 @@ void HealDruidStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
triggers.push_back( triggers.push_back(
new TriggerNode("party member critical health", new TriggerNode("party member critical health",
NextAction::array(0, new NextAction("nature's swiftness", ACTION_CRITICAL_HEAL + 4), NULL))); NextAction::array(0, new NextAction("nature's swiftness", ACTION_CRITICAL_HEAL + 4), nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("medium group heal occasion", new TriggerNode("medium group heal occasion",
NextAction::array(0, new NextAction("tranquility", ACTION_CRITICAL_HEAL + 5), NULL))); NextAction::array(0, new NextAction("tranquility", ACTION_CRITICAL_HEAL + 5), nullptr)));
// LOW // LOW
triggers.push_back( triggers.push_back(

View File

@@ -29,15 +29,14 @@ void HealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
// triggers.push_back(new TriggerNode( // triggers.push_back(new TriggerNode(
// "medium aoe heal", // "medium aoe heal",
// NextAction::array(0, // NextAction::array(0,
// new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 8), // new NextAction("circle of healing on party", ACTION_MEDIUM_HEAL + 8),
// // new NextAction("power word: shield on almost full health below", ACTION_MEDIUM_HEAL + 7), // // new NextAction("power word: shield on almost full health below", ACTION_MEDIUM_HEAL + 7),
// NULL))); // NULL)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"group heal occasion", "group heal setting",
NextAction::array(0, new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 8), NextAction::array(0, new NextAction("power word: shield on almost full health below", ACTION_MEDIUM_HEAL + 7),
new NextAction("power word: shield on almost full health below", ACTION_MEDIUM_HEAL + 7), nullptr)));
NULL)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"medium group heal occasion", "medium group heal occasion",
@@ -49,25 +48,23 @@ void HealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
NextAction::array(0, new NextAction("power word: shield on party", ACTION_CRITICAL_HEAL + 6), NextAction::array(0, new NextAction("power word: shield on party", ACTION_CRITICAL_HEAL + 6),
new NextAction("penance on party", ACTION_CRITICAL_HEAL + 4), new NextAction("penance on party", ACTION_CRITICAL_HEAL + 4),
new NextAction("flash heal on party", ACTION_CRITICAL_HEAL + 3), new NextAction("flash heal on party", ACTION_CRITICAL_HEAL + 3),
new NextAction("prayer of mending on party", ACTION_CRITICAL_HEAL + 2), NULL))); new NextAction("prayer of mending on party", ACTION_CRITICAL_HEAL + 2), nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member low health", new TriggerNode("party member low health",
NextAction::array(0, new NextAction("power word: shield on party", ACTION_MEDIUM_HEAL + 4), NextAction::array(0, new NextAction("power word: shield on party", ACTION_MEDIUM_HEAL + 4),
new NextAction("penance on party", ACTION_MEDIUM_HEAL + 2), new NextAction("penance on party", ACTION_MEDIUM_HEAL + 2),
new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 2),
new NextAction("prayer of mending on party", ACTION_MEDIUM_HEAL + 1), new NextAction("prayer of mending on party", ACTION_MEDIUM_HEAL + 1),
new NextAction("flash heal on party", ACTION_MEDIUM_HEAL + 0), NULL))); new NextAction("flash heal on party", ACTION_MEDIUM_HEAL + 0), nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member medium health", new TriggerNode("party member medium health",
NextAction::array(0, new NextAction("power word: shield on party", ACTION_LIGHT_HEAL + 9), NextAction::array(0, new NextAction("power word: shield on party", ACTION_LIGHT_HEAL + 9),
new NextAction("penance on party", ACTION_LIGHT_HEAL + 7), new NextAction("penance on party", ACTION_LIGHT_HEAL + 7),
new NextAction("circle of healing", ACTION_LIGHT_HEAL + 7),
new NextAction("prayer of mending on party", ACTION_LIGHT_HEAL + 6), new NextAction("prayer of mending on party", ACTION_LIGHT_HEAL + 6),
new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 5), new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 5),
// new NextAction("renew on party", ACTION_LIGHT_HEAL + 8), // new NextAction("renew on party", ACTION_LIGHT_HEAL + 8),
NULL))); nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member almost full health", new TriggerNode("party member almost full health",
@@ -86,7 +83,7 @@ void HealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 10), nullptr))); NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 10), nullptr)));
// triggers.push_back(new TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("prayer of // triggers.push_back(new TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("prayer of
// mending", 49.0f), nullptr))); triggers.push_back(new TriggerNode("medium aoe heal", NextAction::array(0, new // mending", 49.0f), nullptr))); triggers.push_back(new TriggerNode("medium aoe heal", NextAction::array(0, new
// NextAction("circle of healing", 48.0f), nullptr))); triggers.push_back(new TriggerNode("binding heal", // NextAction("circle of healing on party", 48.0f), nullptr))); triggers.push_back(new TriggerNode("binding heal",
// NextAction::array(0, new NextAction("binding heal", 52.0f), nullptr))); triggers.push_back(new TriggerNode("low // NextAction::array(0, new NextAction("binding heal", 52.0f), nullptr))); triggers.push_back(new TriggerNode("low
// mana", NextAction::array(0, new NextAction("shadowfiend", ACTION_HIGH), nullptr))); // mana", NextAction::array(0, new NextAction("shadowfiend", ACTION_HIGH), nullptr)));

View File

@@ -63,8 +63,8 @@ void HolyHealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
GenericPriestStrategy::InitTriggers(triggers); GenericPriestStrategy::InitTriggers(triggers);
triggers.push_back( triggers.push_back(
new TriggerNode("group heal occasion", new TriggerNode("group heal setting",
NextAction::array(0, new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 8), NULL))); NextAction::array(0, new NextAction("circle of healing on party", ACTION_MEDIUM_HEAL + 8), nullptr)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"medium group heal occasion", "medium group heal occasion",
@@ -77,28 +77,28 @@ void HolyHealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
new NextAction("guardian spirit on party", ACTION_CRITICAL_HEAL + 6), new NextAction("guardian spirit on party", ACTION_CRITICAL_HEAL + 6),
new NextAction("power word: shield on party", ACTION_CRITICAL_HEAL + 5), new NextAction("power word: shield on party", ACTION_CRITICAL_HEAL + 5),
new NextAction("flash heal on party", ACTION_CRITICAL_HEAL + 3), new NextAction("flash heal on party", ACTION_CRITICAL_HEAL + 3),
new NextAction("prayer of mending on party", ACTION_CRITICAL_HEAL + 2), NULL))); new NextAction("prayer of mending on party", ACTION_CRITICAL_HEAL + 2), nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member low health", new TriggerNode("party member low health",
NextAction::array(0, new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 4), NextAction::array(0, new NextAction("circle of healing on party", ACTION_MEDIUM_HEAL + 4),
new NextAction("greater heal on party", ACTION_MEDIUM_HEAL + 3), new NextAction("greater heal on party", ACTION_MEDIUM_HEAL + 3),
new NextAction("prayer of mending on party", ACTION_MEDIUM_HEAL + 2), new NextAction("prayer of mending on party", ACTION_MEDIUM_HEAL + 2),
new NextAction("flash heal on party", ACTION_MEDIUM_HEAL + 1), NULL))); new NextAction("flash heal on party", ACTION_MEDIUM_HEAL + 1), nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member medium health", new TriggerNode("party member medium health",
NextAction::array(0, new NextAction("circle of healing", ACTION_LIGHT_HEAL + 7), NextAction::array(0, new NextAction("circle of healing on party", ACTION_LIGHT_HEAL + 7),
new NextAction("prayer of mending on party", ACTION_LIGHT_HEAL + 6), new NextAction("prayer of mending on party", ACTION_LIGHT_HEAL + 6),
new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 5), new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 5),
// new NextAction("renew on party", ACTION_LIGHT_HEAL + 8), // new NextAction("renew on party", ACTION_LIGHT_HEAL + 8),
NULL))); nullptr)));
triggers.push_back( triggers.push_back(
new TriggerNode("party member almost full health", new TriggerNode("party member almost full health",
NextAction::array(0, new NextAction("renew on party", ACTION_LIGHT_HEAL + 2), NextAction::array(0, new NextAction("renew on party", ACTION_LIGHT_HEAL + 2),
// new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 1), // new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 1),
NULL))); nullptr)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"party member to heal out of spell range", "party member to heal out of spell range",

View File

@@ -55,7 +55,14 @@ HEAL_PARTY_ACTION(CastRenewOnPartyAction, "renew", 15.0f, HealingManaEfficiency:
HEAL_PARTY_ACTION(CastPrayerOfMendingAction, "prayer of mending", 15.0f, HealingManaEfficiency::MEDIUM); HEAL_PARTY_ACTION(CastPrayerOfMendingAction, "prayer of mending", 15.0f, HealingManaEfficiency::MEDIUM);
HEAL_PARTY_ACTION(CastBindingHealAction, "binding heal", 15.0f, HealingManaEfficiency::MEDIUM); HEAL_PARTY_ACTION(CastBindingHealAction, "binding heal", 15.0f, HealingManaEfficiency::MEDIUM);
HEAL_PARTY_ACTION(CastPrayerOfHealingAction, "prayer of healing", 15.0f, HealingManaEfficiency::MEDIUM); HEAL_PARTY_ACTION(CastPrayerOfHealingAction, "prayer of healing", 15.0f, HealingManaEfficiency::MEDIUM);
AOE_HEAL_ACTION(CastCircleOfHealingAction, "circle of healing", 15.0f, HealingManaEfficiency::HIGH); // AOE_HEAL_ACTION(CastCircleOfHealingAction, "circle of healing", 15.0f, HealingManaEfficiency::HIGH);
class CastCircleOfHealingAction : public HealPartyMemberAction
{
public:
CastCircleOfHealingAction(PlayerbotAI* ai) : HealPartyMemberAction(ai, "circle of healing", 15.0f, HealingManaEfficiency::HIGH)
{
}
};
AOE_HEAL_ACTION(CastLightwellAction, "lightwell", 15.0f, HealingManaEfficiency::MEDIUM); AOE_HEAL_ACTION(CastLightwellAction, "lightwell", 15.0f, HealingManaEfficiency::MEDIUM);
SPELL_ACTION(CastSmiteAction, "smite"); SPELL_ACTION(CastSmiteAction, "smite");

View File

@@ -195,7 +195,7 @@ public:
creators["fade"] = &PriestAiObjectContextInternal::fade; creators["fade"] = &PriestAiObjectContextInternal::fade;
creators["inner fire"] = &PriestAiObjectContextInternal::inner_fire; creators["inner fire"] = &PriestAiObjectContextInternal::inner_fire;
creators["resurrection"] = &PriestAiObjectContextInternal::resurrection; creators["resurrection"] = &PriestAiObjectContextInternal::resurrection;
creators["circle of healing"] = &PriestAiObjectContextInternal::circle_of_healing; creators["circle of healing on party"] = &PriestAiObjectContextInternal::circle_of_healing;
creators["psychic scream"] = &PriestAiObjectContextInternal::psychic_scream; creators["psychic scream"] = &PriestAiObjectContextInternal::psychic_scream;
creators["vampiric touch"] = &PriestAiObjectContextInternal::vampiric_touch; creators["vampiric touch"] = &PriestAiObjectContextInternal::vampiric_touch;
creators["vampiric touch on attacker"] = &PriestAiObjectContextInternal::vampiric_touch_on_attacker; creators["vampiric touch on attacker"] = &PriestAiObjectContextInternal::vampiric_touch_on_attacker;

View File

@@ -55,7 +55,7 @@ void PriestNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
NextAction::array(0, new NextAction("renew on party", ACTION_LIGHT_HEAL + 3), NULL))); NextAction::array(0, new NextAction("renew on party", ACTION_LIGHT_HEAL + 3), NULL)));
triggers.push_back( triggers.push_back(
new TriggerNode("group heal occasion", NextAction::array(0, new NextAction("circle of healing", 27.0f), NULL))); new TriggerNode("group heal setting", NextAction::array(0, new NextAction("circle of healing on party", 27.0f), NULL)));
} }
void PriestBuffStrategy::InitTriggers(std::vector<TriggerNode*>& triggers) void PriestBuffStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)

View File

@@ -29,7 +29,7 @@ public:
creators["lesser heal on party"] = &lesser_heal_on_party; creators["lesser heal on party"] = &lesser_heal_on_party;
creators["flash heal"] = &flash_heal; creators["flash heal"] = &flash_heal;
creators["flash heal on party"] = &flash_heal_on_party; creators["flash heal on party"] = &flash_heal_on_party;
creators["circle of healing"] = &circle_of_healing; creators["circle of healing on party"] = &circle_of_healing;
creators["prayer of fortitude on party"] = &prayer_of_fortitude_on_party; creators["prayer of fortitude on party"] = &prayer_of_fortitude_on_party;
creators["prayer of spirit on party"] = &prayer_of_spirit_on_party; creators["prayer of spirit on party"] = &prayer_of_spirit_on_party;
} }
@@ -128,7 +128,7 @@ private:
} }
static ActionNode* circle_of_healing(PlayerbotAI* ai) static ActionNode* circle_of_healing(PlayerbotAI* ai)
{ {
return new ActionNode("circle of healing", return new ActionNode("circle of healing on party",
/*P*/ NextAction::array(0, new NextAction("remove shadowform"), NULL), /*P*/ NextAction::array(0, new NextAction("remove shadowform"), NULL),
// /*A*/ NextAction::array(0, new NextAction("flash heal on party"), NULL), // /*A*/ NextAction::array(0, new NextAction("flash heal on party"), NULL),
/*A*/ NULL, /*A*/ NULL,

View File

@@ -18,7 +18,7 @@ public:
creators["windfury weapon"] = &windfury_weapon; creators["windfury weapon"] = &windfury_weapon;
creators["lesser healing wave"] = &lesser_healing_wave; creators["lesser healing wave"] = &lesser_healing_wave;
creators["lesser healing wave on party"] = &lesser_healing_wave_on_party; creators["lesser healing wave on party"] = &lesser_healing_wave_on_party;
creators["chain heal"] = &chain_heal; creators["chain heal on party"] = &chain_heal;
creators["riptide"] = &riptide; creators["riptide"] = &riptide;
creators["riptide on party"] = &riptide_on_party; creators["riptide on party"] = &riptide_on_party;
creators["earth shock"] = &earth_shock; creators["earth shock"] = &earth_shock;
@@ -75,9 +75,9 @@ private:
static ActionNode* chain_heal([[maybe_unused]] PlayerbotAI* botAI) static ActionNode* chain_heal([[maybe_unused]] PlayerbotAI* botAI)
{ {
return new ActionNode("chain heal", return new ActionNode("chain heal on party",
/*P*/ nullptr, /*P*/ nullptr,
/*A*/ NextAction::array(0, new NextAction("lesser healing wave"), nullptr), /*A*/ NextAction::array(0, new NextAction("lesser healing wave on party"), nullptr),
/*C*/ nullptr); /*C*/ nullptr);
} }
@@ -117,7 +117,7 @@ void GenericShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
// triggers.push_back(new TriggerNode("party member medium health", NextAction::array(0, new NextAction("lesser // triggers.push_back(new TriggerNode("party member medium health", NextAction::array(0, new NextAction("lesser
// healing wave on party", 25.0f), nullptr))); triggers.push_back(new TriggerNode("party member low health", // healing wave on party", 25.0f), nullptr))); triggers.push_back(new TriggerNode("party member low health",
// NextAction::array(0, new NextAction("riptide on party", 25.0f), nullptr))); triggers.push_back(new // NextAction::array(0, new NextAction("riptide on party", 25.0f), nullptr))); triggers.push_back(new
// TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("chain heal", 27.0f), nullptr))); // TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("chain heal on party", 27.0f), nullptr)));
// triggers.push_back(new TriggerNode("medium health", NextAction::array(0, new NextAction("lesser healing // triggers.push_back(new TriggerNode("medium health", NextAction::array(0, new NextAction("lesser healing
// wave", 26.0f), nullptr))); triggers.push_back(new TriggerNode("low health", NextAction::array(0, new // wave", 26.0f), nullptr))); triggers.push_back(new TriggerNode("low health", NextAction::array(0, new
// NextAction("riptide", 26.0f), nullptr))); // NextAction("riptide", 26.0f), nullptr)));

View File

@@ -49,8 +49,8 @@ void HealShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
triggers.push_back(new TriggerNode("main hand weapon no imbue", triggers.push_back(new TriggerNode("main hand weapon no imbue",
NextAction::array(0, new NextAction("earthliving weapon", 22.0f), nullptr))); NextAction::array(0, new NextAction("earthliving weapon", 22.0f), nullptr)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"group heal occasion", "group heal setting",
NextAction::array(0, new NextAction("riptide on party", 23.0f), new NextAction("chain heal", 22.0f), NULL))); NextAction::array(0, new NextAction("riptide on party", 23.0f), new NextAction("chain heal on party", 22.0f), NULL)));
triggers.push_back(new TriggerNode( triggers.push_back(new TriggerNode(
"party member critical health", "party member critical health",

View File

@@ -42,11 +42,11 @@ public:
} }
}; };
class CastChainHealAction : public CastAoeHealSpellAction class CastChainHealAction : public HealPartyMemberAction
{ {
public: public:
CastChainHealAction(PlayerbotAI* botAI) CastChainHealAction(PlayerbotAI* botAI)
: CastAoeHealSpellAction(botAI, "chain heal", 15.0f, HealingManaEfficiency::HIGH) : HealPartyMemberAction(botAI, "chain heal", 15.0f, HealingManaEfficiency::HIGH)
{ {
} }
}; };

View File

@@ -210,7 +210,7 @@ public:
creators["lesser healing wave on party"] = &ShamanAiObjectContextInternal::lesser_healing_wave_on_party; creators["lesser healing wave on party"] = &ShamanAiObjectContextInternal::lesser_healing_wave_on_party;
creators["earth shield"] = &ShamanAiObjectContextInternal::earth_shield; creators["earth shield"] = &ShamanAiObjectContextInternal::earth_shield;
creators["earth shield on party"] = &ShamanAiObjectContextInternal::earth_shield_on_party; creators["earth shield on party"] = &ShamanAiObjectContextInternal::earth_shield_on_party;
creators["chain heal"] = &ShamanAiObjectContextInternal::chain_heal; creators["chain heal on party"] = &ShamanAiObjectContextInternal::chain_heal;
creators["riptide"] = &ShamanAiObjectContextInternal::riptide; creators["riptide"] = &ShamanAiObjectContextInternal::riptide;
creators["riptide on party"] = &ShamanAiObjectContextInternal::riptide_on_party; creators["riptide on party"] = &ShamanAiObjectContextInternal::riptide_on_party;
creators["stormstrike"] = &ShamanAiObjectContextInternal::stormstrike; creators["stormstrike"] = &ShamanAiObjectContextInternal::stormstrike;

View File

@@ -39,7 +39,7 @@ void ShamanNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
new NextAction("lesser healing wave on party", 24.0f), NULL))); new NextAction("lesser healing wave on party", 24.0f), NULL)));
triggers.push_back( triggers.push_back(
new TriggerNode("group heal occasion", NextAction::array(0, new NextAction("chain heal", 27.0f), NULL))); new TriggerNode("group heal setting", NextAction::array(0, new NextAction("chain heal on party", 27.0f), NULL)));
triggers.push_back( triggers.push_back(
new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr))); new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr)));

View File

@@ -139,7 +139,7 @@ public:
creators["medium aoe heal"] = &TriggerContext::medium_aoe_heal; creators["medium aoe heal"] = &TriggerContext::medium_aoe_heal;
creators["almost full aoe heal"] = &TriggerContext::almost_full_aoe_heal; creators["almost full aoe heal"] = &TriggerContext::almost_full_aoe_heal;
creators["group heal occasion"] = &TriggerContext::group_heal_occasion; creators["group heal setting"] = &TriggerContext::group_heal_occasion;
creators["medium group heal occasion"] = &TriggerContext::medium_group_heal_occasion; creators["medium group heal occasion"] = &TriggerContext::medium_group_heal_occasion;
creators["invalid target"] = &TriggerContext::invalid_target; creators["invalid target"] = &TriggerContext::invalid_target;
creators["lfg proposal active"] = &TriggerContext::lfg_proposal_active; creators["lfg proposal active"] = &TriggerContext::lfg_proposal_active;
@@ -246,7 +246,7 @@ private:
} }
static Trigger* group_heal_occasion(PlayerbotAI* ai) static Trigger* group_heal_occasion(PlayerbotAI* ai)
{ {
return new AoeInGroupTrigger(ai, "group heal occasion", "almost full"); return new AoeInGroupTrigger(ai, "group heal setting", "almost full");
} }
static Trigger* medium_group_heal_occasion(PlayerbotAI* ai) static Trigger* medium_group_heal_occasion(PlayerbotAI* ai)
{ {