119 if (!healInfo || !healInfo->
GetHeal())
145 if (targets.size() < 2)
152 targets.push_back(target);
361 amount = aura->GetSpellInfo()->GetEffect(
EFFECT_1).CalcValue();
410 if (
Player* owner =
GetCaster()->GetCharmerOrOwnerPlayerOrPlayerItself())
487 chance += aurEff->GetAmount();
506 if (!firstRankSpellInfo || !spellInfo->
IsRankOf(firstRankSpellInfo))
538 if (totem->IsTotem())
567 if (!aurEff->GetSpellInfo()->IsRankOf(firstRankSpellInfo))
570 uint8 rank = aurEff->GetSpellInfo()->GetRank();
629 float fireDamage = basePoints / 100.0f;
630 fireDamage *= attackSpeed;
642 float const spCoeff = 0.03811f;
643 spellPowerBonus *= spCoeff * attackSpeed * factorMod;
708 if (!earthShieldEffect)
738 return healInfo && healInfo->
GetHeal();
828 originalCasterGuid = player->GetGUID();
832 AddPct(damage, aurEff->GetAmount());
836 AddPct(damage, aurEff->GetAmount());
919 caster->
CastSpell(
nullptr, spellId, aurEff);
1150 if (aurEff->GetBase()->GetCastItemGUID() == offhand->GetGUID())
1151 AddPct(hitDamage, damage);
1299 if (unitTarget->GetPowerType() ==
POWER_MANA)
1305 effValue += dummy->GetAmount();
1338 if (!damageInfo || !damageInfo->
GetDamage())
1343 if (target->HealthBelowPctDamaged(healthpct, damageInfo->
GetDamage()))
1382 if (totem->IsTotem())
1390 caster->ToPlayer()->StopCastingBindSight();
1443 if (totem && totem->
IsTotem())
1480 if (!damageInfo || !damageInfo->
GetDamage())
1518 if (!lightningShield)
1646 caster->
CastSpell(target, spellId, aurEff);
1690 if (!damageInfo || !damageInfo->
GetDamage())
1728 if (!damageInfo || !damageInfo->
GetDamage())
1775 if (newDuration > maxDuration)
1800 if (!healInfo || !healInfo->
GetHeal())
1879 int32 extraAttackPower = 0;
1891 if (!extraAttackPower)
1900 for (
uint8 i = 0; i < 2; ++i)
#define ASSERT_NOTNULL(pointer)
#define INVENTORY_SLOT_BAG_0
bool roll_chance_f(float chance)
bool roll_chance_i(int chance)
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_KNOCK_BACK
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_CASTER_AREA_RAID
@ SPELL_CUSTOM_ERROR_MUST_HAVE_FIRE_TOTEM
@ AURA_STATE_HEALTHLESS_35_PERCENT
@ SPELL_FAILED_CUSTOM_ERROR
@ SPELL_FAILED_OUT_OF_RANGE
@ AURA_EFFECT_HANDLE_CHANGE_AMOUNT
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_ADD_PCT_MODIFIER
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
@ SPELL_AURA_MOD_DAMAGE_TAKEN
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ PROC_FLAG_DONE_MAINHAND_ATTACK
@ PROC_FLAG_DONE_OFFHAND_ATTACK
#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 AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
T RoundToInterval(T &num, T floor, T ceil)
T CalculatePct(T base, U pct)
SpellInfo const * GetSpellInfo() const
SpellEffectInfo const & GetSpellEffectInfo() const
void SetAmount(int32 amount)
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
ObjectGuid GetCasterGUID() const
HookList< CheckProcHandler > DoCheckProc
HookList< AuraDispelHandler > AfterDispel
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
uint8 GetStackAmount() const
HookList< EffectApplyHandler > OnEffectApply
int32 GetMaxDuration() const
int32 GetDuration() const
void SetDuration(int32 duration, bool withMods=false)
void SetMaxDuration(int32 duration)
bool DropCharge(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
uint32 m_spells[MAX_CREATURE_SPELLS]
EarthenPowerTargetSelector()
bool operator()(WorldObject *target)
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Creature * GetCreature(ObjectGuid const &guid)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
Item * GetWeaponForAttack(WeaponAttackType attackType, bool useable=false) const
Item * GetItemByGuid(ObjectGuid guid) const
static WeaponAttackType GetAttackBySlot(uint8 slot)
HealInfo * GetHealInfo() const
SpellSchoolMask GetSchoolMask() const
Unit * GetActionTarget() const
uint32 GetTypeMask() const
SpellInfo const * GetSpellInfo() const
DamageInfo * GetDamageInfo() const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
bool IsRankOf(SpellInfo const *spellInfo) const
uint32 GetMaxTicks() const
int32 CalcPowerCost(WorldObject const *caster, SpellSchoolMask schoolMask, Spell *spell=nullptr) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
SpellInfo const * GetNextRankSpell() const
HookList< CheckCastHandler > OnCheckCast
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
void SetCustomCastResultMessage(SpellCustomErrors result)
void SetHitDamage(int32 damage)
void SetHitHeal(int32 heal)
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
float CalculateSpellpowerCoefficientLevelPenalty(SpellInfo const *spellInfo) const
Aura * GetAuraOfRankedSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
uint32 GetMaxHealth() const
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
bool HasAuraWithMechanic(uint32 mechanicMask) const
int32 GetTotalAuraModifierByMiscMask(AuraType auraType, uint32 misc_mask) const
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
AuraEffect * GetAuraEffectOfRankedSpell(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
void RemoveAuraFromStack(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
uint32 GetAttackTime(WeaponAttackType att) const
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
ObjectGuid m_SummonSlot[MAX_SUMMON_SLOT]
float GetTotalAttackPowerValue(WeaponAttackType attType) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
float GetDistance(WorldObject const *obj) const
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Player * GetAffectingPlayer() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
void HandleDummy(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_ancestral_awakening_proc)
PrepareAuraScript(spell_sha_ancestral_awakening)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_astral_shift_aura)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_astral_shift_visual_dummy)
void PeriodicTick(AuraEffect const *)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
PrepareAuraScript(spell_sha_astral_shift)
void Absorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &absorbAmount)
void RemoveInvalidTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_sha_bloodlust)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_chain_heal)
void HandleHeal(SpellEffIndex)
PrepareSpellScript(spell_sha_cleansing_totem_pulse)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
PrepareAuraScript(spell_sha_clearcasting)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_earth_shield)
void HandleEffectPeriodic(AuraEffect const *)
PrepareAuraScript(spell_sha_earthbind_totem)
void Apply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_earthen_power)
void FilterTargets(std::list< WorldObject * > &unitList)
PrepareAuraScript(spell_sha_earthliving_weapon)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_sha_fire_nova)
SpellCastResult CheckFireTotem()
PrepareAuraScript(spell_sha_flame_shock)
bool Validate(SpellInfo const *) override
void HandleDispel(DispelInfo *)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_flametongue_weapon)
bool CheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_frozen_power)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_glyph_of_earth_shield)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_glyph_of_healing_wave)
PrepareAuraScript(spell_sha_glyph_of_totem_of_wrath)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_healing_stream_totem)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
void RemoveInvalidTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_heroism)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_imp_water_shield)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_item_lightning_shield_trigger)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_item_lightning_shield)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_item_mana_surge)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_item_t10_elemental_2p_bonus)
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_item_t6_trinket)
PrepareSpellScript(spell_sha_lava_lash)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_lightning_overload)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_lightning_shield)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleBonus(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_sha_maelstrom_weapon)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
PrepareSpellScript(spell_sha_mana_spring_totem)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_sha_mana_tide_totem)
void HandleDummy(SpellEffIndex)
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *spellInfo) override
PrepareAuraScript(spell_sha_mana_tide)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_nature_guardian)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_sha_sentry_totem)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_shamanistic_rage)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_spirit_hunt)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_static_shock)
void HandleScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_sha_stoneclaw_totem)
PrepareAuraScript(spell_sha_t10_elemental_4p_bonus)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_t10_restoration_4p_bonus)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_t3_6p_bonus)
PrepareAuraScript(spell_sha_t3_8p_bonus)
void PeriodicTick(AuraEffect const *)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_t8_elemental_4p_bonus)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_t9_elemental_4p_bonus)
PrepareSpellScript(spell_sha_thunderstorm)
void HandleKnockBack(SpellEffIndex effIndex)
void HandleProc(AuraEffect const *, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_sha_tidal_force_dummy)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_totemic_mastery)
void HandleDummy(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_sha_windfury_weapon)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void AddSC_shaman_spell_scripts()
@ SHAMAN_ICON_ID_TOTEM_OF_WRATH
@ SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW
@ SHAMAN_ICON_ID_RESTORATIVE_TOTEMS
@ SPELL_SHAMAN_ANCESTRAL_AWAKENING_DUMMY
@ SPELL_SHAMAN_TOTEM_OF_WRATH_SPELL_POWER
@ SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB
@ SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE_HEAL
@ SPELL_SHAMAN_SPIRIT_HUNT_HEAL
@ SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM
@ SPELL_SHAMAN_NATURE_GUARDIAN
@ SPELL_SHAMAN_NATURE_GUARDIAN_THREAT
@ SPELL_SHAMAN_FLAMETONGUE_ATTACK
@ SPELL_SHAMAN_BIND_SIGHT
@ SPELL_SHAMAN_WINDFURY_ATTACK_OH
@ SPELL_SHAMAN_BLESSING_OF_THE_ETERNALS_R1
@ SPELL_SHAMAN_TOTEMIC_POWER_SPELL_POWER
@ SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD
@ SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM
@ SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE
@ SPELL_SHAMAN_MANA_TIDE_TOTEM
@ SPELL_SHAMAN_SHAMANISTIC_RAGE_PROC
@ SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE
@ SPELL_SHAMAN_T10_ENHANCEMENT_4P_BONUS
@ SPELL_SHAMAN_POWER_SURGE
@ SPELL_SHAMAN_TOTEMIC_POWER_MP5
@ SPELL_SHAMAN_STONECLAW_TOTEM
@ SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD
@ SPELL_SHAMAN_ELEMENTAL_MASTERY
@ SPELL_SHAMAN_FIRE_NOVA_R1
@ SPELL_SHAMAN_CHAINED_HEAL
@ SPELL_SHAMAN_MAELSTROM_POWER
@ SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM
@ SPELL_SHAMAN_TOTEMIC_MASTERY
@ SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL
@ SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_R1
@ SPELL_SHAMAN_LAVA_FLOWS_R1
@ SPELL_SHAMAN_GLYPH_OF_MANA_TIDE
@ SPELL_SHAMAN_WINDFURY_WEAPON_R1
@ SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC
@ SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE
@ SPELL_SHAMAN_TOTEMIC_POWER_ARMOR
@ SPELL_SHAMAN_LIGHTNING_SHIELD_R1
@ SPELL_SHAMAN_GLYPH_OF_STONECLAW_TOTEM
@ SPELL_SHAMAN_ELECTRIFIED
@ SPELL_SHAMAN_EXHAUSTION
@ SPELL_SHAMAN_TOTEM_EARTHEN_POWER
@ SPELL_SHAMAN_STORM_EARTH_AND_FIRE
@ SPELL_SHAMAN_TOTEMIC_POWER_ATTACK_POWER
@ SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT
@ SPELL_SHAMAN_ENERGY_SURGE
@ SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1
@ SPELL_SHAMAN_TIDAL_FORCE_CRIT
@ SPELL_SHAMAN_ELEMENTAL_OATH
@ SPELL_SHAMAN_EARTH_SHIELD_HEAL
@ SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1
@ SPELL_SHAMAN_ITEM_MANA_SURGE
@ SPELL_SHAMAN_WINDFURY_ATTACK_MH
@ SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD_R1
@ SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE_R1