373 dotTicks += blastFurnace->GetAmount() / 2;
405 flatMod += fireBreath->GetEstimatedAmount().value_or(fireBreath->GetAmount()) * (
params->EmpowerLevel - 1) * 3;
435 return *std::any_cast<extra_create_data>(&firestorm->
m_customArg);
447 period *= *caster->m_unitData->ModCastingSpeed;
448 caster->CastSpell(at->GetPosition(), SPELL_EVOKER_FIRESTORM_DAMAGE, CastSpellExtraArgsInit{
449 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
450 .CustomArg = _damageSpellCustomArg
454 task.
Repeat(duration_cast<Milliseconds>(period));
460 _scheduler.Update(diff);
692 if (
GetSpell()->m_appliedMods.contains(snapfire->GetBase()))
705 pctMod *= bonus->SnapshotDamageMultipliers;
731 if (target != caster)
DB2Storage< SpellVisualKitEntry > sSpellVisualKitStore("SpellVisualKit.db2", &SpellVisualKitLoadInfo::Instance)
std::unordered_set< uint32 > params[2]
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::duration< double, Milliseconds::period > FloatMilliseconds
bool roll_chance(T chance)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ TARGET_UNIT_DEST_AREA_ALLY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_TARGET_ALLY
@ TARGET_UNIT_CASTER_AREA_RAID
@ TARGET_UNIT_TARGET_ENEMY
@ TARGET_UNIT_CONE_CASTER_TO_DEST_ENEMY
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_FAILED_NOT_ON_GROUND
@ SPELL_AURA_PERIODIC_DAMAGE
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ SPELLVALUE_DURATION_PCT
#define SpellObjectTargetSelectFn(F, I, N)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define SpellOnEmpowerStageCompletedFn(F)
#define SpellCalcDamageFn(F)
#define AuraCheckProcFn(F)
T CalculatePct(T base, U pct)
AreaTriggerAI(AreaTrigger *a, uint32 scriptId={}) noexcept
int32 GetAmountAsInt() const
SpellEffectValue GetAmount() const
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< CheckProcHandler > DoCheckProc
HookList< EffectProcHandler > OnEffectProc
SpellInfo const * GetSpellInfo() const
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
void StartCooldown(SpellInfo const *spellInfo, uint32 itemId, Spell *spell=nullptr, bool onHold=false, Optional< Duration > forcedCooldown={})
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
bool HasLabel(uint32 labelId) 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
void SetEffectValue(SpellEffectValue value)
int64 GetUnitTargetCountForEffect(SpellEffIndex effect) const
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
HookList< EffectHandler > OnEffectLaunchTarget
Difficulty GetCastDifficulty() const
HookList< EmpowerStageCompletedHandler > OnEmpowerCompleted
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Optional< int32 > GetPowerTypeCostAmount(Powers power) const
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & Schedule(duration_t time, task_handler_t task)
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
void FilterTargets(std::list< WorldObject * > &targets)
void RemoveInvalidTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &)
static void HandleProc(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleCallOfYsera() const
bool Validate(SpellInfo const *) override
void OnTick(AuraEffect const *) const
static constexpr int64 TargetLimit
void HandleCooldown() const
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &procInfo)
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
spell_evo_essence_burst_trigger(uint32 talentAuraId)
bool Validate(SpellInfo const *) override
void HandleEssenceBurst() const
void RemoveUnusedEffect(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
void AddBonusUpfrontDamage(SpellEffectInfo const &, Unit const *victim, int32 &, int32 &flatMod, float &) const
void OnComplete(int32 completedStageCount) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
SpellCastResult CheckCast()
void HandleHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleLaunchTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandlePanacea() const
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleDamage(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
static void PreventPeriodic(SpellScript const &, WorldObject *&target)
bool Validate(SpellInfo const *) override
void CalcDispelCount(SpellEffIndex)
void HandleScouringFlame(std::list< WorldObject * > &targets) const
void CalculateDamageBonus(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void OnPrecast() override
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleLaunchTarget(SpellEffIndex) const
void RandomResize(C &container, std::size_t requestedSize)
void SelectRandomInjuredTargets(std::list< WorldObject * > &targets, size_t maxTargets, bool prioritizePlayers, Unit const *prioritizeGroupMembersOf)
static constexpr std::array< uint32, 2 > CausalityAffectedEmpowerSpells
@ SPELL_VISUAL_KIT_EVOKER_VERDANT_EMBRACE_JUMP
@ SPELL_EVOKER_SCOURING_FLAME
@ SPELL_EVOKER_RUBY_ESSENCE_BURST
@ SPELL_EVOKER_CALL_OF_YSERA
@ SPELL_EVOKER_ESSENCE_BURST
@ SPELL_EVOKER_VERDANT_EMBRACE_JUMP
@ SPELL_EVOKER_BLAST_FURNACE
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_WARLOCK
@ SPELL_EVOKER_FIRE_BREATH
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_PRIEST
@ SPELL_EVOKER_LIVING_FLAME
@ SPELL_EVOKER_PANACEA_TALENT
@ SPELL_EVOKER_AZURE_ESSENCE_BURST
@ SPELL_EVOKER_SOAR_RACIAL
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_DH
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_MAGE
@ SPELL_EVOKER_RUBY_EMBERS
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_PALADIN
@ SPELL_EVOKER_PANACEA_HEAL
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_EVOKER
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_HUNTER
@ SPELL_EVOKER_CALL_OF_YSERA_TALENT
@ SPELL_EVOKER_ETERNITY_SURGE
@ SPELL_EVOKER_GLIDE_KNOCKBACK
@ SPELL_EVOKER_DISINTEGRATE
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_ROGUE
@ SPELL_EVOKER_ENERGIZING_FLAME
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_DK
@ SPELL_EVOKER_LIVING_FLAME_DAMAGE
@ SPELL_EVOKER_FIRESTORM_DAMAGE
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_DRUID
@ SPELL_EVOKER_LIVING_FLAME_HEAL
@ SPELL_EVOKER_PYRE_DAMAGE
@ SPELL_EVOKER_VERDANT_EMBRACE_HEAL
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_SHAMAN
@ SPELL_EVOKER_FIRE_BREATH_DAMAGE
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_MONK
@ SPELL_EVOKER_BLESSING_OF_THE_BRONZE_WARRIOR
@ SPELL_EVOKER_EMERALD_BLOSSOM_HEAL
@ SPELL_EVOKER_PERMEATING_CHILL_TALENT
@ SPELL_LABEL_EVOKER_BLUE
void AddSC_evoker_spell_scripts()
constexpr void GetPosition(float &x, float &y) const
void OnCreate(Spell const *creatingSpell) override
std::any _damageSpellCustomArg
static extra_create_data & GetOrCreateExtraData(Spell *firestorm)
void OnUpdate(uint32 diff) override