27#include "G3DPosition.hpp"
242 if (
GetCaster()->IsWithinDist2d(&destPos, radius))
273 if (areaTriggers.size() >= 3)
274 areaTriggers.front()->SetDuration(0);
282 if (caster->IsFriendlyTo(unit))
305 extraDuration =
Seconds(durationEffect->GetAmount());
312 if (!answeredPrayers)
323 answeredPrayers->
Remove();
327 apotheosis->SetDuration(apotheosis->GetDuration() + extraDuration.count());
328 apotheosis->SetMaxDuration(apotheosis->GetMaxDuration() + extraDuration.count());
359 if (!healInfo || !healInfo->
GetHeal())
445 if (target->IsInDist2d(priest, distanceLimit))
458 constexpr std::array<float, 20> damageByStack = { 40.0f, 40.0f, 40.0f, 40.0f, 40.0f, 35.0f, 30.0f, 25.0f, 20.0f, 15.0f, 11.0f, 8.0f, 5.0f, 4.0f, 3.0f, 2.5f, 2.0f, 1.5f, 1.25f, 1.0f };
462 sinOfTheMany->ChangeAmount(damageByStack[std::min(
_appliedAtonements.size(), damageByStack.size() - 1)]);
481 AddPct(pctMod, abyssalReverieEffect->GetAmount());
543 (
Seconds(indemnity->GetAmount())
545 caster, &
GetSpell()->GetPowerCost()))).count());
576 RegisterHelper<&spell_pri_atonement::AddAtonementTarget>();
581 RegisterHelper<&spell_pri_atonement::RemoveAtonementTarget>();
584 template<
void(spell_pri_atonement::*func)(ObjectGu
id const&)>
622 script->TriggerAtonementHealOnTargets(atonementEffect, eventInfo);
671 if (
GetTarget()->IsValidAttackTarget(procTarget))
699 targets.push_front(explicitTarget);
880 tempSummon->RefreshTimer();
887 .SetTriggeringAura(aurEff)
896 .SetTriggeringAura(aurEff)
972 owner->RemoveAuraFromStack(spelId);
995 AddPct(pctMod,
int32(divineServiceEffect->GetAmount() * prayerOfMending->GetStackAmount()));
1051 G3D::Vector3
const& endPoint = firstPath.
GetPath().back();
1122 returnSplinePoints.push_back(PositionToVector3(
at));
1123 returnSplinePoints.push_back(PositionToVector3(
at));
1124 returnSplinePoints.push_back(PositionToVector3(caster));
1125 returnSplinePoints.push_back(PositionToVector3(caster));
1261 bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&
GetSpell()->m_customArg);
1263 if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending)
1264 AddPct(pctMod, focusedMendingEffect->GetAmount());
1388 if (caster->IsValidAttackTarget(unit))
1391 else if (caster->IsValidAssistTarget(unit))
1454 switch (spellInfo->
Id)
1719 if (!caster || !target)
1725 shadowWordPain->SetDuration(shadowWordPain->GetDuration() + additionalDuration);
1728 purgeTheWicked->SetDuration(purgeTheWicked->GetDuration() + additionalDuration);
1980 AddPct(pctMod, powerOfTheDarkSide->GetAmount());
2001 AddPct(pctMod, powerOfTheDarkSide->GetAmount());
2025 if (targets.size() > maxTargets)
2030 if (lhs == explTarget)
2032 if (rhs == explTarget)
2038 targets.resize(maxTargets);
2043 if (target == explTarget)
2110 canBeRecalculated =
false;
2114 float modifiedAmount = caster->SpellBaseDamageBonusDone(
GetSpellInfo()->GetSchoolMask()) * 3.36f;
2123 AddPct(modifiedAmount, masteryGraceEffect->GetAmount());
2125 switch (player->GetPrimarySpecialization())
2128 modifiedAmount *= 1.37f;
2131 modifiedAmount *= 1.25f;
2133 modifiedAmount *= 0.8f;
2140 float critChanceDone = caster->SpellCritChanceDone(
nullptr, auraEffect,
GetSpellInfo()->GetSchoolMask(),
GetSpellInfo()->GetAttackType());
2145 modifiedAmount *= 2;
2149 AddPct(modifiedAmount, divineEff->GetAmount());
2154 AddPct(modifiedAmount, raptureEffect->GetAmount());
2158 AddPct(modifiedAmount, benevolenceEffect->GetAmount());
2160 amount = modifiedAmount;
2345 if (stackAmount > 1)
2349 int32 newStackAmount = stackAmount - 1;
2390 if (
bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&
GetSpell()->m_customArg))
2588 targets.remove_if([&](
WorldObject*
object) ->
bool
2595 if (targets.empty())
2619 return auraA->
GetDuration() < auraB->GetDuration();
2626 if (targets.size() > spreadCount)
2627 targets.resize(spreadCount);
2767 targets.push_front(explicitTarget);
2799 int32 damageForAuraRemoveAmount = periodicAmount * 10;
2804 else if (target->IsInCombat() && periodicAmount)
2928 if (healInfo->GetEffectiveHeal())
2929 if (healTarget->GetHealth() >= healTarget->GetMaxHealth())
2961 if (!healInfo || !healInfo->
GetHeal())
3117 if (!damageInfo || !damageInfo->
GetDamage())
3121 int32 teamHeal = selfHeal / 2;
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define TC_LOG_WARN(filterType__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool roll_chance_f(float chance)
bool roll_chance_i(int chance)
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ TARGET_UNIT_DEST_AREA_ALLY
@ TARGET_UNIT_CASTER_AREA_PARTY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_FAILED_UNIT_NOT_INFRONT
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_DUMMY
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_POWER_AND_REAGENT_COST
Will ignore power and reagent cost.
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore Spell and Category cooldowns.
@ TRIGGERED_CAST_DIRECTLY
In Spell::prepare, will be cast directly without setting containers for executed spell.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
@ TRIGGERED_DISALLOW_PROC_EVENTS
Disallows proc events from triggered spell (default)
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ SPELLVALUE_DURATION_PCT
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define SpellCalcDamageFn(F)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectAbsorbOverkillFn(F, I)
#define AuraCheckProcFn(F)
#define SpellCalcHealingFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ CR_VERSATILITY_DAMAGE_DONE
T CalculatePct(T base, U pct)
uint32 GetSpellId() const
void InitSplines(std::vector< G3D::Vector3 > splinePoints, uint32 timeToTarget)
void SetDuration(int32 newDuration)
static float CalculateEstimatedfTotalPeriodicAmount(Unit *caster, Unit *target, SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, float amount, uint8 stack)
void ChangeAmount(int32 newAmount, bool mark=true, bool onStackOrReapply=false, AuraEffect const *triggeredBy=nullptr)
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
int32 GetMaxDuration() const
HookList< EffectAbsorbHandler > AfterEffectAbsorb
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
ObjectGuid GetCasterGUID() const
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< AuraDispelHandler > AfterDispel
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
HookList< AuraProcHandler > OnProc
uint8 GetStackAmount() const
HookList< EffectApplyHandler > OnEffectApply
int32 GetDuration() const
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool resetPeriodicTimer=true)
int32 CalcMaxDuration() const
void SetDuration(int32 duration, bool withMods=false)
uint8 GetStackAmount() const
void SetMaxDuration(int32 duration)
Script * GetScript() const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
Unit * GetAttacker() const
SpellInfo const * GetSpellInfo() const
SpellSchoolMask GetSchoolMask() const
WorldObject * GetDispeller() const
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
Movement::PointsArray const & GetPath() const
bool CalculatePath(float destX, float destY, float destZ, bool forceDest=false)
ChrSpecialization GetPrimarySpecialization() const
HealInfo * GetHealInfo() const
Unit * GetActionTarget() const
ProcFlagsSpellType GetSpellTypeMask() const
Spell const * GetProcSpell() const
SpellInfo const * GetSpellInfo() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
RaidCheck(Unit const *caster)
bool operator()(WorldObject *obj) const
void SetDst(float x, float y, float z, float orientation, uint32 mapId=MAPID_INVALID)
void SetUnitTarget(Unit *target)
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
float CalcRadius(WorldObject *caster=nullptr, SpellTargetIndex targetIndex=SpellTargetIndex::TargetA, Spell *=nullptr) const
SpellImplicitTargetInfo TargetB
void ResetCooldown(uint32 spellId, bool update=false)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
Targets GetTarget() const
uint32 GetMaxTicks() const
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
std::vector< SpellEffectInfo > const & GetEffects() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< DamageAndHealingCalcHandler > CalcDamage
HookList< CastHandler > AfterCast
WorldLocation * GetHitDest() const
HookList< CheckCastHandler > OnCheckCast
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Aura * GetHitAura(bool dynObjAura=false) const
WorldObject * GetExplTargetWorldObject() const
Difficulty GetCastDifficulty() const
HookList< EffectHandler > OnEffectLaunch
HookList< DamageAndHealingCalcHandler > CalcHealing
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
SpellCastTargets m_targets
TaskContext & Repeat(std::chrono::duration< Rep, Period > duration)
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
float GetHealthPct() const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
bool HasBreakableByDamageCrowdControlAura(Unit *excludeCasterChannel=nullptr) const
Aura * GetOwnedAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, Aura *except=nullptr) const
Powers GetPowerType() const
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
bool IsFullHealth() const
TempSummon * ToTempSummon()
virtual bool HasSpell(uint32) const
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
float SpellCritChanceTaken(Unit const *caster, Spell *spell, AuraEffect const *aurEff, SpellSchoolMask schoolMask, float doneChance, WeaponAttackType attackType=BASE_ATTACK) const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void NearTeleportTo(Position const &pos, bool casting=false)
uint64 CountPctFromMaxHealth(int32 pct) const
bool IsInRaidWith(Unit const *unit) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
void RemoveMovementImpairingAuras(bool withRoot)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
int32 SpellHealingBonusDone(Unit *victim, SpellInfo const *spellProto, int32 healamount, DamageEffectType damagetype, SpellEffectInfo const &spellEffectInfo, uint32 stack=1, Spell *spell=nullptr, AuraEffect const *aurEff=nullptr) const
ObjectGuid GetTarget() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Position GetRandomNearPosition(float radius)
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
float GetDistance(WorldObject const *obj) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsFriendlyTo(WorldObject const *target) const
void CalculateHealingBonus(Unit const *, int32 const &, int32 const &, float &pctMod) const
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo) const
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleOnHitTarget() const
void HandleOnProc(AuraEffect const *, ProcEventInfo const &eventInfo) const
static bool CheckProc(ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void AddAtonementTarget(ObjectGuid const &target)
void UpdateSinsOfTheManyValue() const
void TriggerAtonementHealOnTargets(AuraEffect const *atonementEffect, ProcEventInfo const &eventInfo)
void RemoveAtonementTarget(ObjectGuid const &target)
std::vector< ObjectGuid > const & GetAtonementTargets() const
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(ProcEventInfo const &eventInfo)
std::vector< ObjectGuid > _appliedAtonements
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
void HandleEffectHitTarget(SpellEffIndex) const
void HandleProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleAfterAbsorb(AuraEffect const *, DamageInfo const &dmgInfo, uint32 const &absorbAmount) const
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
bool CheckProc(ProcEventInfo const &eventInfo) const
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
static bool CheckProc(ProcEventInfo const &eventInfo)
void HandleAfterRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void TrackStackApplicationTime(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
static void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void CalculateHealingBonus(Unit const *victim, int32 &, int32 &, float &pctMod) const
void HandleHitTarget(SpellEffIndex effIndex)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &)
static void FilterTargets(std::list< WorldObject * > &targets)
void HandleScriptEffect(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void CalculateHealingBonus(Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
void Absorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *spellInfo) override
void HandleHitTarget(SpellEffIndex effIndex)
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool CheckProc(ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
static void FilterTargets(std::list< WorldObject * > &targets)
static bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
void HandleOnRemove(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex) const
bool CheckProc(AuraEffect const *, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void ReduceCooldown() const
bool Validate(SpellInfo const *) override
SpellEffectInfo const * _healEffectDummy
SpellInfo const * _spellInfoHeal
bool Validate(SpellInfo const *spellInfo) override
void HandleApplyBuffs(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void CalculateDamageBonus(Unit const *, int32 const &, int32 const &, float &pctMod) const
void OnPrecast() override
bool Validate(SpellInfo const *spellInfo) override
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
spell_pri_penance(uint32 damageSpellId, uint32 healingSpellId)
void HandleDummy(SpellEffIndex)
SpellCastResult CheckCast()
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex)
static bool CheckProc(ProcEventInfo const &eventInfo)
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void CalculateDamageBonus(Unit *, int32 &, int32 &, float &pctMod) const
void CalculateHealingBonus(Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes)
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
static bool IsUnitInjured(WorldObject *obj)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
std::tuple< bool, bool > MakeSortTuple(WorldObject *obj) const
void HandleEffectHitTarget(SpellEffIndex) const
bool IsUnitWithNoAtonement(WorldObject *obj) const
std::vector< ObjectGuid > _visualTargets
void CalculateAmount(AuraEffect const *auraEffect, int32 &amount, bool &canBeRecalculated) const
void HandleOnRemove(AuraEffect const *aurEff, AuraEffectHandleModes) const
void HandleOnApply(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void RestoreMana(SpellEffIndex)
bool Validate(SpellInfo const *) override
void CastPrayerOfMendingAura(Unit *caster, Unit *target, Unit *visualSender, uint8 stack, bool firstCast) const
SpellInfo const * _spellInfoHeal
SpellEffectInfo const * _healEffectDummy
bool Validate(SpellInfo const *) override
void HandleHeal(AuraEffect const *aurEff, ProcEventInfo const &)
bool _isEmpoweredByFocusedMending
void SetEmpoweredByFocusedMending(bool isEmpowered)
void HandleEffectDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleJump(SpellEffIndex) const
static void FilterTargets(std::list< WorldObject * > &targets)
void HandleEffectDummy(SpellEffIndex) const
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
bool CheckEffectProc(AuraEffect const *, ProcEventInfo &eventInfo)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex)
ObjectGuid _raptureTarget
void HandleEffectHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
void HandleDummyTick(AuraEffect const *aurEff)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes)
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleAbsorb(AuraEffect const *aurEff, DamageInfo const &, uint32 const &) const
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleOnProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
std::queue< ObjectGuid > _healQueue
bool CheckEffect1(AuraEffect const *, ProcEventInfo const &eventInfo) const
bool CheckEffect0(AuraEffect const *, ProcEventInfo const &eventInfo) const
void ReducePenanceCooldown(AuraEffect const *aurEff, ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
void ReducePowerWordShieldCooldown(AuraEffect const *aurEff, ProcEventInfo const &) const
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void FilterTargets(std::list< WorldObject * > &unitList)
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleApplyEffect(AuraEffect const *, AuraEffectHandleModes)
void HandleDispel(DispelInfo *dispelInfo)
void Trigger(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
Unit * GetSummon(Unit const *owner)
Optional< uint32 > GetSpellToCast(uint32 spellId)
std::vector< Vector3 > PointsArray
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
std::list< T, Alloc >::iterator RemoveUnique(std::list< T, Alloc > &list, T const &value)
void SelectRandomInjuredTargets(std::list< WorldObject * > &targets, size_t maxTargets, bool prioritizePlayers, Unit const *prioritizeGroupMembersOf)
@ NPC_PRIEST_DIVINE_IMAGE
void AddSC_priest_spell_scripts()
@ SPELL_PRIEST_PENANCE_HEALING
@ SPELL_PRIEST_LEVITATE_EFFECT
@ SPELL_PRIEST_DIVINE_BLESSING
@ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE
@ SPELL_PRIEST_DAZZLING_LIGHT
@ SPELL_PRIEST_MINDBENDER_SHADOW
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER
@ SPELL_PRIEST_MASTERY_GRACE
@ SPELL_PRIEST_POWER_LEECH_MINDBENDER_INSANITY
@ SPELL_PRIEST_LIGHT_ERUPTION
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT
@ SPELL_PRIEST_ABYSSAL_REVERIE
@ SPELL_PRIEST_ULTIMATE_PENITENCE_DAMAGE
@ SPELL_PRIEST_BLAZE_OF_LIGHT_DECREASE
@ SPELL_PRIEST_DIVINE_HYMN_HEAL
@ SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_HEALING
@ SPELL_PRIEST_TRAIL_OF_LIGHT_HEAL
@ SPELL_PRIEST_HOLY_WORD_SERENITY
@ SPELL_PRIEST_SURGE_OF_LIGHT_EFFECT
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION_HEAL
@ SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_DAMAGE
@ SPELL_PRIEST_ANGELIC_FEATHER_AURA
@ SPELL_PRIEST_POWER_WORD_SHIELD
@ SPELL_PRIEST_PENANCE_DAMAGE
@ SPELL_PRIEST_ARMOR_OF_FAITH
@ SPELL_PRIEST_ATONEMENT_HEAL
@ SPELL_PRIEST_BODY_AND_SOUL_SPEED
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P
@ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL
@ SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE
@ SPELL_PRIEST_BLAZE_OF_LIGHT
@ SPELL_PRIEST_PRAYER_OF_MENDING_AURA
@ SPELL_PRIEST_FOCUSED_MENDING
@ SPELL_PRIEST_POWER_LEECH_MINDBENDER_MANA
@ SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL
@ SPELL_PRIEST_DARK_INDULGENCE
@ SPELL_PRIEST_MINDBENDER_DISC
@ SPELL_PRIEST_REVEL_IN_PURITY
@ SPELL_PRIEST_DARK_REPRIMAND_DAMAGE
@ SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE
@ SPELL_PRIEST_HALO_SHADOW_HEAL
@ SPELL_PRIEST_SHIELD_DISCIPLINE
@ SPELL_PRIEST_PENANCE_CHANNEL_HEALING
@ SPELL_PRIEST_MASOCHISM_TALENT
@ SPELL_PRIEST_THE_PENITENT_AURA
@ SPELL_PRIEST_DIVINE_AEGIS
@ SPELL_PRIEST_VOID_SHIELD
@ SPELL_PRIEST_BENEVOLENCE
@ SPELL_PRIEST_EMPOWERED_RENEW_HEAL
@ SPELL_PRIEST_PRAYER_OF_HEALING
@ SPELL_PRIEST_MINDGAMES_VENTHYR
@ SPELL_PRIEST_DARK_REPRIMAND
@ SPELL_PRIEST_GREATER_HEAL
@ SPELL_PRIEST_EPIPHANY_HIGHLIGHT
@ SPELL_PRIEST_PROTECTIVE_LIGHT_AURA
@ SPELL_PRIEST_HOLY_WORD_SANCTIFY
@ SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER
@ SPELL_PRIEST_PRAYER_OF_MENDING
@ SPELL_PRIEST_FLASH_HEAL
@ SPELL_PRIEST_MIND_BOMB_STUN
@ SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC
@ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT
@ SPELL_PRIEST_SHADOW_WORD_PAIN
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION
@ SPELL_PRIEST_ESSENCE_DEVOURER
@ SPELL_PRIEST_PAIN_TRANSFORMATION
@ SPELL_PRIEST_ORACULAR_HEAL
@ SPELL_PRIEST_PRAYER_OF_MENDING_HEAL
@ SPELL_PRIEST_LIGHTS_WRATH_VISUAL
@ SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL
@ SPELL_PRIEST_HALO_SHADOW_DAMAGE
@ SPELL_PRIEST_DIVINE_AEGIS_ABSORB
@ SPELL_PRIEST_DIVINE_STAR_HOLY_DAMAGE
@ SPELL_PRIEST_DARK_REPRIMAND_HEALING
@ SPELL_PRIEST_ATONEMENT_EFFECT
@ SPELL_PRIEST_HOLY_MENDING_HEAL
@ SPELL_PRIEST_PAIN_TRANSFORMATION_HEAL
@ SPELL_PRIEST_DIVINE_STAR_SHADOW_DAMAGE
@ SPELL_PRIEST_POWER_WORD_LIFE
@ SPELL_PRIEST_DIVINE_WRATH
@ SPELL_PRIEST_BLESSED_LIGHT
@ SPELL_PRIEST_DIVINE_STAR_HOLY
@ SPELL_PRIEST_DIVINE_IMAGE_EMPOWER_STACK
@ SPELL_PRIEST_SEARING_LIGHT
@ SPELL_PRIEST_ULTIMATE_PENITENCE_HEAL
@ SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_MANA
@ SPELL_PRIEST_POWER_WORD_RADIANCE
@ SPELL_PRIEST_DIVINE_IMAGE_SUMMON
@ SPELL_PRIEST_DIVINE_IMAGE_EMPOWER
@ SPELL_PRIEST_DIVINE_SERVICE
@ SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL
@ SPELL_PRIEST_WEAKENED_SOUL
@ SPELL_PRIEST_SPIRIT_OF_REDEMPTION
@ SPELL_PRIEST_HALO_HOLY_DAMAGE
@ SPELL_PRIEST_SURGE_OF_LIGHT
@ SPELL_PRIEST_STRENGTH_OF_SOUL
@ SPELL_PRIEST_ANSWERED_PRAYERS
@ SPELL_PRIEST_HOLY_WORD_CHASTISE
@ SPELL_PVP_RULES_ENABLED_HARDCODED
@ SPELL_PRIEST_PURGE_THE_WICKED_DUMMY
@ SPELL_PRIEST_TRANQUIL_LIGHT
@ SPELL_PRIEST_SHIELD_DISCIPLINE_EFFECT
@ SPELL_PRIEST_HALO_HOLY_HEAL
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION_REFLECT
@ SPELL_PRIEST_HEAVENS_WRATH
@ SPELL_PRIEST_HALO_SHADOW
@ SPELL_PRIEST_CIRCLE_OF_HEALING
@ SPELL_PRIEST_PRAYER_OF_MENDING_JUMP
@ SPELL_PRIEST_APOTHEOSIS
@ SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_INSANITY
@ SPELL_PRIEST_SINS_OF_THE_MANY
@ SPELL_PRIEST_ESSENCE_DEVOURER_MINDBENDER_HEAL
@ SPELL_PRIEST_HEALING_LIGHT
@ SPELL_PRIEST_DIVINE_STAR_SHADOW
@ SPELL_PRIEST_BLAZE_OF_LIGHT_INCREASE
@ SPELL_PRIEST_RENEWED_HOPE
@ SPELL_PRIEST_SAY_YOUR_PRAYERS
@ SPELL_PRIEST_ITEM_EFFICIENCY
@ SPELL_PRIEST_SHADOW_WORD_DEATH
@ SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY
@ SPELL_PRIEST_ULTIMATE_PENITENCE
@ SPELL_PRIEST_BLESSED_HEALING
@ SPELL_PRIEST_TRINITY_EFFECT
@ SPELL_PRIEST_BENEDICTION
@ SPELL_PRIEST_ESSENCE_DEVOURER_SHADOWFIEND_HEAL
@ SPELL_PRIEST_SCHISM_AURA
@ SPELL_PRIEST_RENEWED_HOPE_EFFECT
@ SPELL_PRIEST_SHADOW_MEND_DAMAGE
@ SPELL_PRIEST_VOID_SHIELD_EFFECT
@ SPELL_PRIEST_BODY_AND_SOUL
@ SPELL_PRIEST_STRENGTH_OF_SOUL_EFFECT
@ SPELL_PRIEST_LEAP_OF_FAITH_EFFECT
@ SPELL_PRIEST_PURGE_THE_WICKED
@ SPELL_PRIEST_HOLY_WORD_SALVATION
@ SPELL_PRIEST_FROM_DARKNESS_COMES_LIGHT_AURA
@ SPELL_PRIEST_SIN_AND_PUNISHMENT
@ SPELL_PRIEST_DIVINE_STAR_HOLY_HEAL
@ SPELL_VISUAL_PRIEST_POWER_WORD_RADIANCE
@ SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING
constexpr float GetPositionX() const
constexpr float GetPositionY() const
float GetExactDist(float x, float y, float z) const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetPositionZ() const
void OnInitialize() override
areatrigger_pri_angelic_feather(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
Position _casterCurrentPosition
void OnInitialize() override
void OnUnitExit(Unit *unit) override
void OnUnitEnter(Unit *unit) override
void OnDestinationReached() override
void OnUpdate(uint32 diff) override
void HandleUnitEnterExit(Unit *unit)
std::vector< ObjectGuid > _affectedUnits
areatrigger_pri_divine_star(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
areatrigger_pri_halo(AreaTrigger *areatrigger)
SpellSchoolMask DamageSchoolMask
SpellInfo const * TriggeredBy