257 bool procTriggered = [&]()
265 if (!requiredTargets)
292 canBeRecalculated =
false;
294 amount =
int32(caster->SpellBaseHealingBonusDone(
GetSpellInfo()->GetSchoolMask()) * 7.0f);
303 if (caster && target)
556 Group* group = caster->GetGroup();
619 if (!reductionEffect)
625 if (reduction >
Seconds(cap->GetAmount()))
626 reduction =
Seconds(cap->GetAmount());
637 int32 effectivenessPct = 100;
639 effectivenessPct = effectivenessEffect->GetAmount();
642 ApplyPct(slowPct, effectivenessPct);
667 amount = valueHolder->GetAmount();
669 canBeRecalculated =
false;
767 canBeRecalculated =
false;
896 canBeRecalculated =
false;
898 amount +=
int32(caster->SpellBaseHealingBonusDone(
GetSpellInfo()->GetSchoolMask()) * 10.0f);
906 if (caster && target)
978 if (!thermalVoid->GetSpellInfo()->GetEffects().empty())
980 icyVeins->SetDuration(icyVeins->GetDuration() + thermalVoid->GetSpellInfo()->GetEffect(
EFFECT_0).CalcValue(caster) *
IN_MILLISECONDS);
1096 uint32 stacks = aura->GetStackAmount();
1239 canBeRecalculated =
false;
1346 std::list<TempSummon*> minions;
1354 if (summon->GetTimer() > ringOfFrost->GetTimer())
1356 ringOfFrost->DespawnOrUnsummon();
1360 summon->DespawnOrUnsummon();
1397 float inRadius = 6.5f;
1399 targets.remove_if([dest, outRadius, inRadius](
WorldObject* target)
DB2Storage< SpellCategoryEntry > sSpellCategoryStore("SpellCategory.db2", &SpellCategoryLoadInfo::Instance)
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
float frand(float min, float max)
Milliseconds randtime(Milliseconds min, Milliseconds max)
uint32 urand(uint32 min, uint32 max)
bool roll_chance_i(int chance)
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
@ TARGET_UNIT_DEST_AREA_ENEMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_SPELL
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS
@ 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.
#define SpellOnCalcCritChanceFn(F)
#define SpellObjectTargetSelectFn(F, I, N)
#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 AuraEffectCalcCritChanceFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
float GetPctOf(T value, T max)
T ApplyPct(T &base, U pct)
T CalculatePct(T base, U pct)
uint32 GetTickNumber() const
SpellEffectInfo const & GetSpellEffectInfo() const
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
WorldObject * GetOwner() const
HookList< EffectProcHandler > AfterEffectProc
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
HookList< EffectCalcCritChanceHandler > DoEffectCalcCritChance
ObjectGuid GetCasterGUID() const
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectProcHandler > OnEffectProc
bool HasEffect(uint8 effIndex) const
HookList< EffectApplyHandler > OnEffectApply
uint32 CalcMaxStackAmount() const
uint8 GetStackAmount() const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
ObjectGuid _originalCastId
bool Execute(uint64 time, uint32) override
CometStormEvent(Unit *caster, ObjectGuid originalCastId, Position const &dest)
Unit * GetAttacker() const
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
static ObjectGuid const Empty
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
Unit * GetActionTarget() const
Spell const * GetProcSpell() const
SpellInfo const * GetSpellInfo() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
SpellDestination const * GetDst() const
void ResetCooldown(uint32 spellId, bool update=false)
void RestoreCharge(uint32 chargeCategoryId)
void ResetCharges(uint32 chargeCategoryId)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
uint32 GetMaxTicks() const
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
bool NeedsExplicitUnitTarget() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< CastHandler > AfterCast
WorldLocation * GetHitDest() const
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
int64 GetUnitTargetCountForEffect(SpellEffIndex effect) const
Unit * GetHitUnit() const
SpellValue const * GetSpellValue() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
WorldObject * GetExplTargetWorldObject() const
HookList< EffectHandler > OnEffectLaunchTarget
Difficulty GetCastDifficulty() const
void SetHitDamage(int32 damage)
HookList< OnCalcCritChanceHandler > OnCalcCritChance
WorldLocation const * GetExplTargetDest() const
HookList< EffectHandler > OnEffectLaunch
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
SpellCastTargets m_targets
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
float GetHealthPct() const
void SetHealth(uint64 val)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
int32 GetMaxPower(Powers power) const
TempSummon * ToTempSummon()
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
void NearTeleportTo(Position const &pos, bool casting=false)
void GetAllMinionsByEntry(std::list< TempSummon * > &Minions, uint32 entry)
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsInBetween(Position const &pos1, Position const &pos2, float size=0) const
float GetDistance(WorldObject const *obj) const
virtual float GetCombatReach() const
void RemoveAlterTimeAura(SpellEffIndex)
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void ConsumeArcaneCharges()
ObjectGuid _primaryTarget
void HandleEffectHitTarget(SpellEffIndex)
void MarkPrimaryTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void RemoveArcaneCharge(SpellEffIndex)
void CheckRequiredAuraForBaselineEnergize(SpellEffIndex effIndex)
bool Validate(SpellInfo const *spellInfo) override
void HandleReverberate(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
void HandleSlow(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *spellInfo) override
void HandleAbsorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &)
void SuppressSpeedBuff(SpellEffIndex effIndex)
static uint32 constexpr SpellsToReset[]
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
void HandleEffectHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void EffectHit(SpellEffIndex)
void HandleSlow(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void TriggerSlow(SpellEffIndex)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void CalcAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
bool Validate(SpellInfo const *) override
void Trigger(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckFrozenOrbProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckFrostboltProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void CalcCritChance(AuraEffect const *, Unit const *victim, float &critChance)
void CalcCritChance(Unit const *victim, float &critChance)
bool Validate(SpellInfo const *) override
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
bool Validate(SpellInfo const *spellInfo) override
bool Execute(uint64 time, uint32) override
FlurryEvent(Unit *caster, ObjectGuid const &target, ObjectGuid const &originalCastId, int32 count)
ObjectGuid _originalCastId
void HandleDamage(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void EffectHit(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
void PreventEverwarmSocks(WorldObject *&target)
bool Validate(SpellInfo const *) override
void PreventStunWithEverwarmSocks(WorldObject *&target)
void ApplyDamageMultiplier(SpellEffIndex)
void IndexTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleOnHit(SpellEffIndex)
std::vector< ObjectGuid > _orderedTargets
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandlePeriodicTick(AuraEffect const *)
void HandleSpread(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void FilterTargets(std::list< WorldObject * > &targets)
void AfterRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
static const uint32 PolymorhForms[6]
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
bool CheckProc(AuraEffect const *, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
void HandleEffectPeriodic(AuraEffect const *aurEff)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void Apply(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
TempSummon * GetRingOfFrostMinion() const
ObjectGuid _ringOfFrostGUID
void HandleDamage(SpellEffIndex)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void AfterRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleImprovedFreeze()
bool Validate(SpellInfo const *) override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void AddSC_mage_spell_scripts()
@ SPELL_MAGE_RADIANT_SPARK_PROC_BLOCKER
@ SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE
@ SPELL_MAGE_ARCANE_CHARGE
@ SPELL_MAGE_CONJURE_REFRESHMENT
@ SPELL_MAGE_ALTER_TIME_AURA
@ SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE
@ SPELL_MAGE_BLAZING_BARRIER_TRIGGER
@ SPELL_MAGE_WINTERS_CHILL
@ SPELL_MAGE_ETHEREAL_BLINK
@ SPELL_MAGE_CONJURE_REFRESHMENT_TABLE
@ SPELL_MAGE_RAY_OF_FROST_BONUS
@ SPELL_MAGE_LIVING_BOMB_PERIODIC
@ SPELL_MAGE_RING_OF_FROST_SUMMON
@ SPELL_MAGE_ARCANE_ALTER_TIME_AURA
@ SPELL_MAGE_COMET_STORM_DAMAGE
@ SPELL_PET_NETHERWINDS_FATIGUED
@ SPELL_MAGE_MASTER_OF_TIME
@ SPELL_MAGE_COMET_STORM_VISUAL
@ SPELL_MAGE_INCANTERS_FLOW
@ SPELL_MAGE_GIRAFFE_FORM
@ SPELL_MAGE_CONE_OF_COLD_SLOW
@ SPELL_MAGE_FINGERS_OF_FROST
@ SPELL_MAGE_BLIZZARD_DAMAGE
@ SPELL_MAGE_FLURRY_DAMAGE
@ SPELL_MAGE_ALTER_TIME_VISUAL
@ SPELL_MAGE_DRAGONHAWK_FORM
@ SPELL_MAGE_RING_OF_FROST_FREEZE
@ SPELL_MAGE_ICE_LANCE_TRIGGER
@ SPELL_MAGE_SQUIRREL_FORM
@ SPELL_MAGE_LIVING_BOMB_EXPLOSION
@ SPELL_MAGE_CONE_OF_COLD
@ SPELL_MAGE_EVERWARM_SOCKS
@ SPELL_MAGE_CHAIN_REACTION
@ SPELL_MAGE_FEEL_THE_BURN
@ SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST
@ SPELL_MAGE_SERPENT_FORM
@ SPELL_MAGE_BLIZZARD_SLOW
@ SPELL_MAGE_CAUTERIZE_DOT
@ SPELL_MAGE_THERMAL_VOID
@ SPELL_MAGE_ARCANE_BARRAGE_R3
@ SPELL_MAGE_RING_OF_FROST_DUMMY
@ SPELL_MAGE_CHAIN_REACTION_DUMMY
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
int32 EffectBasePoints[MAX_SPELL_EFFECTS]
uint32 CustomBasePointsMask
void OnUpdate(uint32 diff) override
static constexpr Milliseconds TICK_PERIOD
areatrigger_mage_blizzard(AreaTrigger *areatrigger)