mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 00:18:43 +01:00
@@ -23,6 +23,7 @@
|
||||
#include "CreatureAI.h"
|
||||
#include "DynamicObject.h"
|
||||
#include "GameObject.h"
|
||||
#include "Group.h"
|
||||
#include "Player.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellInfo.h"
|
||||
@@ -874,6 +875,44 @@ namespace Trinity
|
||||
bool i_excludeSelf;
|
||||
};
|
||||
|
||||
class MostHPMissingGroupInRange
|
||||
{
|
||||
public:
|
||||
MostHPMissingGroupInRange(Unit const* obj, float range, uint32 hp) : i_obj(obj), i_range(range), i_hp(hp) { }
|
||||
|
||||
bool operator()(Unit* u)
|
||||
{
|
||||
if (i_obj == u)
|
||||
return false;
|
||||
|
||||
Player* player = nullptr;
|
||||
if (u->GetTypeId() == TYPEID_PLAYER)
|
||||
player = u->ToPlayer();
|
||||
else if (u->IsPet() && u->GetOwner())
|
||||
player = u->GetOwner()->ToPlayer();
|
||||
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
Group* group = player->GetGroup();
|
||||
if (!group || !group->IsMember(i_obj->IsPet() ? i_obj->GetOwnerGUID() : i_obj->GetGUID()))
|
||||
return false;
|
||||
|
||||
if (u->IsAlive() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && u->GetMaxHealth() - u->GetHealth() > i_hp)
|
||||
{
|
||||
i_hp = u->GetMaxHealth() - u->GetHealth();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
Unit const* i_obj;
|
||||
float i_range;
|
||||
uint32 i_hp;
|
||||
};
|
||||
|
||||
class FriendlyCCedInRange
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -5762,7 +5762,12 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
|
||||
{
|
||||
float radius = GetSpellEffectInfo().CalcRadius(caster);
|
||||
|
||||
if (Unit* triggerTarget = target->GetNextRandomRaidMemberOrPet(radius))
|
||||
Unit* triggerTarget = nullptr;
|
||||
Trinity::MostHPMissingGroupInRange u_check(target, radius, 0);
|
||||
Trinity::UnitLastSearcher<Trinity::MostHPMissingGroupInRange> searcher(target, triggerTarget, u_check);
|
||||
Cell::VisitAllObjects(target, searcher, radius);
|
||||
|
||||
if (triggerTarget)
|
||||
{
|
||||
target->CastSpell(triggerTarget, GetId(), args);
|
||||
if (Aura* aura = triggerTarget->GetAura(GetId(), GetCasterGUID()))
|
||||
|
||||
@@ -74,6 +74,9 @@ enum PriestSpells
|
||||
SPELL_PRIEST_LIGHTWELL_RENEW_R4 = 28276,
|
||||
SPELL_PRIEST_LIGHTWELL_RENEW_R5 = 48084,
|
||||
SPELL_PRIEST_LIGHTWELL_RENEW_R6 = 48085,
|
||||
SPELL_PRIEST_TWIN_DISCIPLINE_R1 = 47586,
|
||||
SPELL_PRIEST_SPIRITUAL_HEALING_R1 = 14898,
|
||||
SPELL_PRIEST_DIVINE_PROVIDENCE_R1 = 47562
|
||||
};
|
||||
|
||||
enum PriestSpellIcons
|
||||
@@ -953,22 +956,41 @@ class spell_pri_prayer_of_mending_heal : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_pri_prayer_of_mending_heal);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_PRIEST_T9_HEALING_2P,
|
||||
SPELL_PRIEST_TWIN_DISCIPLINE_R1,
|
||||
SPELL_PRIEST_SPIRITUAL_HEALING_R1,
|
||||
SPELL_PRIEST_DIVINE_PROVIDENCE_R1
|
||||
});
|
||||
}
|
||||
|
||||
void HandleHeal(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetOriginalCaster())
|
||||
{
|
||||
int32 heal = GetEffectValue();
|
||||
if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_PRIEST_T9_HEALING_2P, EFFECT_0))
|
||||
{
|
||||
int32 heal = GetHitHeal();
|
||||
AddPct(heal, aurEff->GetAmount());
|
||||
SetHitHeal(heal);
|
||||
}
|
||||
|
||||
if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_TWIN_DISCIPLINE_R1, EFFECT_0))
|
||||
AddPct(heal, aurEff->GetAmount());
|
||||
|
||||
if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_SPIRITUAL_HEALING_R1, EFFECT_0))
|
||||
AddPct(heal, aurEff->GetAmount());
|
||||
|
||||
if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_DIVINE_PROVIDENCE_R1, EFFECT_0))
|
||||
AddPct(heal, aurEff->GetAmount());
|
||||
|
||||
SetEffectValue(heal);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
|
||||
OnEffectLaunchTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -982,6 +1004,11 @@ class spell_pri_renew : public AuraScript
|
||||
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||
}
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_EMPOWERED_RENEW });
|
||||
}
|
||||
|
||||
void HandleApplyEffect(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
Reference in New Issue
Block a user