From db9b1115cb9de5f0cebbd8caad11ded1bd13b700 Mon Sep 17 00:00:00 2001 From: Yunfan Li Date: Fri, 4 Oct 2024 18:56:44 +0800 Subject: [PATCH] [Spell] Priest prayer of mending buff owner --- src/strategy/priest/PriestActions.cpp | 35 +++++++++++++++++++++++++-- src/strategy/priest/PriestActions.h | 23 +++++++++++++++--- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/strategy/priest/PriestActions.cpp b/src/strategy/priest/PriestActions.cpp index 3a94dafc..2364a5e2 100644 --- a/src/strategy/priest/PriestActions.cpp +++ b/src/strategy/priest/PriestActions.cpp @@ -18,7 +18,7 @@ bool CastRemoveShadowformAction::Execute(Event event) return true; } -Unit* CastPowerWordShieldOnAlmostFullHealthBelow::GetTarget() +Unit* CastPowerWordShieldOnAlmostFullHealthBelowAction::GetTarget() { Group* group = bot->GetGroup(); for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next()) @@ -47,7 +47,7 @@ Unit* CastPowerWordShieldOnAlmostFullHealthBelow::GetTarget() return nullptr; } -bool CastPowerWordShieldOnAlmostFullHealthBelow::isUseful() +bool CastPowerWordShieldOnAlmostFullHealthBelowAction::isUseful() { Group* group = bot->GetGroup(); for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next()) @@ -74,4 +74,35 @@ bool CastPowerWordShieldOnAlmostFullHealthBelow::isUseful() return true; } return false; +} + +Unit* CastPowerWordShieldOnNotFullAction::GetTarget() +{ + Group* group = bot->GetGroup(); + MinValueCalculator calc(100); + for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next()) + { + Player* player = gref->GetSource(); + if (!player) + continue; + if (player->isDead() || player->IsFullHealth()) + { + continue; + } + if (player->GetDistance2d(bot) > sPlayerbotAIConfig->spellDistance) + { + continue; + } + if (botAI->HasAnyAuraOf(player, "weakened soul", "power word: shield", nullptr)) + { + continue; + } + calc.probe(player->GetHealthPct(), player); + } + return (Unit*)calc.param; +} + +bool CastPowerWordShieldOnNotFullAction::isUseful() +{ + return GetTarget(); } \ No newline at end of file diff --git a/src/strategy/priest/PriestActions.h b/src/strategy/priest/PriestActions.h index bffea2bc..c84bfc7d 100644 --- a/src/strategy/priest/PriestActions.h +++ b/src/strategy/priest/PriestActions.h @@ -52,7 +52,13 @@ HEAL_PARTY_ACTION(CastGreaterHealOnPartyAction, "greater heal", 50.0f, HealingMa HEAL_PARTY_ACTION(CastPowerWordShieldOnPartyAction, "power word: shield", 15.0f, HealingManaEfficiency::VERY_HIGH); HEAL_PARTY_ACTION(CastFlashHealOnPartyAction, "flash heal", 15.0f, HealingManaEfficiency::LOW); HEAL_PARTY_ACTION(CastRenewOnPartyAction, "renew", 15.0f, HealingManaEfficiency::VERY_HIGH); -HEAL_PARTY_ACTION(CastPrayerOfMendingAction, "prayer of mending", 15.0f, HealingManaEfficiency::MEDIUM); +// HEAL_PARTY_ACTION(CastPrayerOfMendingAction, "prayer of mending", 10.0f, HealingManaEfficiency::HIGH); +class CastPrayerOfMendingAction : public HealPartyMemberAction +{ +public: + CastPrayerOfMendingAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "prayer of mending", 10.0f, HealingManaEfficiency::HIGH, false) {} +}; + HEAL_PARTY_ACTION(CastBindingHealAction, "binding heal", 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); @@ -169,10 +175,10 @@ public: virtual std::string const GetTargetName() { return "current target"; } }; -class CastPowerWordShieldOnAlmostFullHealthBelow : public HealPartyMemberAction +class CastPowerWordShieldOnAlmostFullHealthBelowAction : public HealPartyMemberAction { public: - CastPowerWordShieldOnAlmostFullHealthBelow(PlayerbotAI* ai) + CastPowerWordShieldOnAlmostFullHealthBelowAction(PlayerbotAI* ai) : HealPartyMemberAction(ai, "power word: shield", 15.0f, HealingManaEfficiency::HIGH) { } @@ -180,6 +186,17 @@ public: Unit* GetTarget() override; }; +class CastPowerWordShieldOnNotFullAction : public HealPartyMemberAction +{ +public: + CastPowerWordShieldOnNotFullAction(PlayerbotAI* ai) + : HealPartyMemberAction(ai, "power word: shield", 5.0f, HealingManaEfficiency::HIGH) + { + } + bool isUseful() override; + Unit* GetTarget() override; +}; + class CastMindSearAction : public CastSpellAction { public: