140 ?
Seconds(absoluteCorruption->GetSpellInfo()->GetEffect(
EFFECT_0).CalcValueAsInt())
198 banishAura->Remove();
267 for (
uint8 i = 1; i <= 12; i++)
362 Unit* validTarget =
nullptr;
391 .TriggeringAura = aurEff
470 float damageReductionPct = effect1->
GetAmount() / 3;
472 damageReductionPct +=
frand(0.0f, damageReductionPct);
539 canBeRecalculated =
false;
542 float extraAmount = caster->SpellBaseDamageBonusDone(
GetSpellInfo()->GetSchoolMask()) * 2.5f;
544 caster->SetHealth(caster->GetHealth() - absorb);
623 if (caster != victim)
705 player->NearTeleportTo(circle->GetPositionX(), circle->GetPositionY(), circle->GetPositionZ(), circle->GetOrientation());
706 player->RemoveMovementImpairingAuras(
false);
805 caster->GetSpellHistory()->ResetCooldown(
GetId(),
true);
850 damageInfo.
damage = damage;
915 FloatSeconds maxUnstableAfflictionDuration(perpetualUnstability->GetAmount());
916 if (
Milliseconds(unstableAfflictionAura->GetDuration()) <= maxUnstableAfflictionDuration)
941 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
942 .TriggeringAura = aurEff
961 for (
AreaTrigger* rainOfFireAreaTrigger : rainOfFireAreaTriggers)
963 GuidUnorderedSet const& insideTargets = rainOfFireAreaTrigger->GetInsideUnits();
964 targetsInRainOfFire.insert(insideTargets.begin(), insideTargets.end());
967 for (
ObjectGuid insideTargetGuid : targetsInRainOfFire)
1004 if (pet->IsPetSayaad())
1005 pet->DespawnOrUnsummon();
1061 .SetOriginalCaster(pet->GetGUID())
1126 if (targets.size() < 2)
1139 if (!targets.empty())
1235 if (!damageInfo || !damageInfo->
GetDamage())
1306 .TriggeringSpell = triggeringSpell,
1307 .TriggeringAura = triggeringAura
1377 if (!damageInfo || !damageInfo->
GetDamage())
1478 if (!warlock || !swapVictim)
1486 if (!swapSpellScript)
1491 for (Unit::AuraApplicationMap::const_iterator itr = appliedAuras.begin(); itr != appliedAuras.end(); ++itr)
1493 SpellInfo const* spellProto = itr->second->GetBase()->GetSpellInfo();
1494 if (itr->second->GetBase()->GetCaster() == warlock)
1496 swapSpellScript->
AddDot(itr->first);
1519 Unit* swapTarget =
nullptr;
1522 swapTarget = swapScript->GetOriginalSwapSource();
1525 if (swapTarget && currentTarget && swapTarget == currentTarget)
1536 std::list<uint32> dotList;
1537 Unit* swapSource =
nullptr;
1547 if (dotList.empty())
1550 for (std::list<uint32>::const_iterator itr = dotList.begin(); itr != dotList.end(); ++itr)
1553 if (!hasGlyph && swapSource)
1583 if (target->GetThreatManager().IsThreatenedBy(caster,
true))
1670template <u
int32 Trigger>
1682 caster->
CastSpell(caster, Trigger, aurEff);
1777 FloatSeconds maxAgonyDuration(volatileAgony->GetAmount());
1778 if (
Milliseconds(agonyAura->GetDuration()) <= maxAgonyDuration)
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::duration< double, Seconds::period > FloatSeconds
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::unordered_set< ObjectGuid > GuidUnorderedSet
constexpr uint32 PET_SUMMONING_DISORIENTATION
float frand(float min, float max)
bool roll_chance(T chance)
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_TARGET_ENEMY
@ SPELL_EFFECT_CREATE_AREATRIGGER
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ENOUGH_HEALTH
@ SPELL_FAILED_CUSTOM_ERROR
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAPPLY
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_MOD_SCHOOL_MASK_DAMAGE_FROM_CASTER
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_OBS_MOD_HEALTH
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
@ SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL
@ SPELL_AURA_MECHANIC_IMMUNITY
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_PERIODIC_DUMMY
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_POWER_COST
Will ignore power and reagent cost.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define SpellOnCalcCritChanceFn(F)
#define BeforeSpellHitFn(F)
#define SpellObjectTargetSelectFn(F, I, N)
#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 AuraEffectCalcHealingFn(F, I, N)
#define SpellCalcDamageFn(F)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectCalcDamageFn(F, I, N)
#define AuraEffectRemoveFn(F, I, N, M)
T CalculatePct(T base, U pct)
int32 GetTotalDuration() const
void SetAmount(SpellEffectValue amount)
SpellEffectValue GetBaseAmount() const
static Optional< SpellEffectValue > CalculateEstimatedAmount(Unit const *caster, Unit *target, SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, SpellEffectValue amount, uint8 stack, AuraEffect const *aurEff)
SpellEffectValue GetAmount() const
HookList< EffectCalcDamageAndHealingHandler > DoEffectCalcDamageAndHealing
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
int32 GetDuration() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Difficulty GetCastDifficulty() const
HookList< EffectApplyHandler > OnEffectRemove
HookList< AuraDispelHandler > AfterDispel
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
HookList< AuraProcHandler > OnProc
bool HasEffect(uint8 effIndex) const
HookList< EffectApplyHandler > OnEffectApply
AuraEffect * GetEffect(uint32 index) const
void SetDuration(int32 duration, bool withMods=false)
void SetMaxDuration(int32 duration)
ObjectGuid const & GetGUID() const
bool Execute(uint64, uint32) override
BilescourgeBombersEvent(Unit *caster, Position srcPos, Position destPos)
Unit * GetAttacker() const
SpellInfo const * GetSpellInfo() const
WorldObject * GetDispeller() const
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
static ObjectGuid const Empty
bool isHonorOrXPTarget(Unit const *victim) const
Unit * GetActionTarget() const
DamageInfo * GetDamageInfo() const
SpellEffectValue CalcValue(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
void RestoreCharge(uint32 chargeCategoryId)
float GetMaxRange(bool positive=false, WorldObject const *caster=nullptr, Spell *spell=nullptr) 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
HookList< CheckCastHandler > OnCheckCast
Aura * GetHitAura(bool dynObjAura=false, bool withRemoved=false) const
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
void SetCustomCastResultMessage(SpellCustomErrors result)
HookList< EffectHandler > OnEffectLaunchTarget
HookList< BeforeHitHandler > BeforeHit
void SetHitDamage(int32 damage)
HookList< EffectHandler > OnEffectSuccessfulDispel
HookList< OnCalcCritChanceHandler > OnCalcCritChance
void SetHitHeal(int32 heal)
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void RemoveGameObject(GameObject *gameObj, bool del)
float GetHealthPct() const
uint64 CountPctFromMaxHealth(float pct) const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
std::multimap< uint32, AuraApplication * > AuraApplicationMap
void DealSpellDamage(SpellNonMeleeDamage const *damageInfo, bool durabilityLoss)
Aura * AddAura(uint32 spellId, Unit *target)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
void SendSpellNonMeleeDamageLog(SpellNonMeleeDamage const *log)
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HealthBelowPct(float pct) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
AuraApplicationMap & GetAppliedAuras()
std::vector< AreaTrigger * > GetAreaTriggers(uint32 spellId) const
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
AreaTrigger * GetAreaTrigger(uint32 spellId) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void SendPlayOrphanSpellVisual(Position const &sourceLocation, ObjectGuid const &target, uint32 spellVisualId, float travelSpeed, bool speedAsTime=false, bool withSourceOrientation=false)
Player * GetSpellModOwner() const
bool IsFriendlyTo(WorldObject const *target) const
void HandleApply(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleBanish(SpellMissInfo missInfo)
void HandleHit(SpellEffIndex)
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *spellInfo) override
SpellCastResult CheckApplyAura()
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex) const
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes) const
void ApplyEffect(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *aurEff) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDamage(SpellEffIndex) const
void FilterTargets(std::list< WorldObject * > &targets) const
void HandleDummy(SpellEffIndex)
void CalcCritChance(Unit const *, float &critChance)
void HandleAbsorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &absorbAmount)
void HandleAfterCast(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void CalculateAmount(AuraEffect const *, SpellEffectValue &amount, bool &canBeRecalculated)
void CalculateDamage(AuraEffect const *, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void CalculateHeal(AuraEffect const *, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDamageCalculation(SpellEffectInfo const &, Unit const *victim, int32 const &, int32 const &, float &pctMod) const
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleRemove(AuraEffect const *, AuraEffectHandleModes mode)
void HandleDummyTick(AuraEffect const *)
void HandleTeleport(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
void OnSuccessfulDispel(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
void CalculateDamage(AuraEffect const *, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) override
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
void ApplyEffect(AuraEffect const *, AuraEffectHandleModes)
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes)
void OnPeriodic(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
void HandleOnEffectHit(SpellEffIndex)
bool Validate(SpellInfo const *) override
void TriggerExplosion() const
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &procInfo) const
bool Validate(SpellInfo const *) override
void HandleDummyTick(AuraEffect const *)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void OnPrecast() override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
void CalculateBuffer(AuraEffect const *, SpellEffectValue &amount, bool &) const
void HandleProc(AuraEffect *aurEff, ProcEventInfo const &eventInfo)
void OnPeriodic(AuraEffect const *aurEff) const
bool Validate(SpellInfo const *) override
void SelectTarget(std::list< WorldObject * > &targets) const
void RemoveVisualMissile(WorldObject *&target) const
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(ProcEventInfo &eventInfo)
void RemoveEffect(AuraEffect const *aurEff, AuraEffectHandleModes) const
static void TryEnergize(Player *caster, Unit const *target, SpellInfo const *spellInfo, Spell const *triggeringSpell, AuraEffect const *triggeringAura)
void CalcCritChance(Unit const *victim, float &critChance) const
void HandleEnergize() const
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
void HandleTriggers(SpellEffIndex) const
bool Validate(SpellInfo const *) override
Soul Swap Copy Spells - 92795 - Simply copies spell IDs.
void HandleHit(SpellEffIndex)
SpellCastResult CheckCast()
bool Validate(SpellInfo const *) override
void OnEffectHit(SpellEffIndex)
Unit * GetOriginalSwapSource() const
void SetOriginalSwapSource(Unit *victim)
std::list< uint32 > _dotList
void Register() override
Forced to, pure virtual functions must have a body when linking.
std::list< uint32 > const GetDotList() const
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleDispel(DispelInfo const *dispelInfo) const
bool Validate(SpellInfo const *) override
void HandleRemove(AuraEffect const *, AuraEffectHandleModes) const
void HandleScriptEffect(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void TriggerExplosion() const
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
void AddSC_warlock_spell_scripts()
@ SPELL_GEN_REPLENISHMENT
@ SPELL_PRIEST_SHADOW_WORD_DEATH
@ SPELL_WARLOCK_CONFLAGRATE_ENERGIZE
@ SPELL_WARLOCK_SOUL_SWAP_MOD_COST
@ SPELL_WARLOCK_STRENGTHEN_PACT_SUCCUBUS
@ SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2
@ SPELL_WARLOCK_SIPHON_LIFE_HEAL
@ SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER
@ SPELL_WARLOCK_RAIN_OF_FIRE
@ SPELL_WARLOCK_SHADOWFLAME
@ SPELL_WARLOCK_DEATHS_EMBRACE
@ SPELL_WARLOCK_GLYPH_OF_DEMON_TRAINING
@ SPELL_WARLOCK_CHANNEL_DEMONFIRE_SELECTOR
@ SPELL_WARLOCK_PYROGENICS_TALENT
@ SPELL_WARLOCK_RAIN_OF_FIRE_DAMAGE
@ SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP
@ SPELL_WARLOCK_VILE_TAINT_DAMAGE
@ SPELL_WARLOCK_CONFLAGRATE_DEBUFF
@ SPELL_WARLOCK_DRAIN_SOUL_ENERGIZE
@ SPELL_WARLOCK_PERPETUAL_UNSTABILITY_TALENT
@ SPELL_WARLOCK_SHADOW_BOLT_ENERGIZE
@ SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON
@ SPELL_WARLOCK_BACKDRAFT_PROC
@ SPELL_WARLOCK_UNSTABLE_AFFLICTION_ENERGIZE
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1
@ SPELL_WARLOCK_CHANNEL_DEMONFIRE_DAMAGE
@ SPELL_WARLOCK_STRENGTHEN_PACT_INCUBUS
@ SPELL_WARLOCK_SOUL_SWAP_OVERRIDE
@ SPELL_WARLOCK_SOUL_FIRE_ENERGIZE
@ SPELL_WARLOCK_SUMMON_SUCCUBUS
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC
@ SPELL_WARLOCK_DEVOUR_MAGIC_HEAL
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE
@ SPELL_WARLOCK_SUCCUBUS_PACT
@ SPELL_WARLOCK_SOULSHATTER_EFFECT
@ SPELL_WARLOCK_SOUL_SWAP_CD_MARKER
@ SPELL_WARLOCK_WITHER_PERIODIC
@ SPELL_WARLOCK_CURSE_OF_EXHAUSTION
@ SPELL_WARLOCK_CORRUPTION_DAMAGE
@ SPELL_WARLOCK_ROARING_BLAZE
@ SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST
@ SPELL_WARLOCK_CREATE_HEALTHSTONE
@ SPELL_WARLOCK_SUMMON_INCUBUS
@ SPELL_WARLOCK_SHADOWBURN_ENERGIZE
@ SPELL_WARLOCK_VOLATILE_AGONY_DAMAGE
@ SPELL_WARLOCK_CHANNEL_DEMONFIRE_ACTIVATOR
@ SPELL_WARLOCK_GLYPH_OF_SUCCUBUS
@ SPELL_WARLOCK_INCUBUS_PACT
@ SPELL_WARLOCK_UNSTABLE_AFFLICTION_DAMAGE
@ SPELL_WARLOCK_PERPETUAL_UNSTABILITY_DAMAGE
@ SPELL_WARLOCK_BACKDRAFT
@ SPELL_WARLOCK_FLAMESHADOW
@ SPELL_WARLOCK_WITHER_TALENT
@ SPELL_WARLOCK_PYROGENICS_DEBUFF
@ SPELL_WARLOCK_DEMONBOLT_ENERGIZE
@ SPELL_WARLOCK_DOOM_ENERGIZE
@ SPELL_WARLOCK_IMMOLATE_PERIODIC
@ SPELL_WARLOCK_BILESCOURGE_BOMBERS_MISSILE
@ SPELL_WARLOCK_BILESCOURGE_BOMBERS_AREATRIGGER
@ SPELL_WARLOCK_VOLATILE_AGONY_TALENT
@ SPELL_WARLOCK_ABSOLUTE_CORRUPTION
@ SPELL_WARLOCK_BILESCOURGE_BOMBERS
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1
@ SPELL_VISUAL_WARLOCK_BILESCOURGE_BOMBERS_CRASH
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
constexpr void GetPosition(float &x, float &y) const
static constexpr uint8 MAX_TICKS
at_warl_bilescourge_bombers(AreaTrigger *areatrigger)
void OnCreate(Spell const *) override
static void HandleDamageOrHealingCalculation(Unit const *caster, Unit const *target, float &pctMod, SpellEffIndex inreaseEffect, SpellEffIndex healthLimitEffect)