165 banishAura->Remove();
213 switch (aurEff->GetId())
222 TC_LOG_ERROR(
"spells",
"Unknown rank of Improved Healthstone id: {}", aurEff->GetId());
227 if (spellRank > 0 && spellRank <= 8)
246 { 5512, 19004, 19005},
247 { 5511, 19006, 19007},
248 { 5509, 19008, 19009},
249 { 5510, 19010, 19011},
250 { 9421, 19012, 19013},
251 {22103, 22104, 22105},
252 {36889, 36890, 36891},
253 {36892, 36893, 36894}
362 player->NearTeleportTo(circle->GetPositionX(), circle->GetPositionY(), circle->GetPositionZ(), circle->GetOrientation());
363 player->RemoveMovementImpairingAuras(
false);
395 if (targetCreature->IsPet())
517 aur->ChangeAmount(aur->CalculateAmount(aur->GetCaster()),
false);
518 aur->CalculatePeriodic(caster,
false,
false);
519 aur->GetBase()->RefreshDuration(
true);
543 if (!damageInfo || !damageInfo->
GetDamage())
736 AddPct(fmana, aurEff->GetAmount());
737 int32 mana = round(fmana);
747 int32 manaFeedVal = 0;
749 manaFeedVal = aurEff->GetAmount();
843 target->CastSpell(target, triggerspell, aurEff);
979 if (
Unit const* unitTarget = target->
ToUnit())
981 if (!unitTarget->IsWithinLOS(dest->GetPositionX(), dest->GetPositionY(), dest->GetPositionZ()))
1018 if (!damageInfo || !damageInfo->
GetDamage())
1024 const_cast<AuraEffect*
>(aurEff)->SetAmount(amount);
1066 if (!damageInfo || !damageInfo->
GetDamage())
1072 const_cast<AuraEffect*
>(aurEff)->SetAmount(amount);
1098 canBeRecalculated =
false;
1102 float bonus = 0.8068f;
1104 bonus *= caster->SpellBaseHealingBonusDone(
GetSpellInfo()->GetSchoolMask());
1105 bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(
GetSpellInfo());
1107 amount +=
int32(bonus);
1134 if (!damageInfo || !damageInfo->
GetDamage())
1147 AddPct(amount, glyph->GetAmount());
1187 if (!damageInfo || !damageInfo->
GetDamage())
1201 uint32 selfSpellId = casterMana[impSoulLeechRank - 1];
1202 uint32 petSpellId = petMana[impSoulLeechRank - 1];
1204 caster->
CastSpell(
nullptr, selfSpellId, aurEff);
1205 caster->
CastSpell(
nullptr, petSpellId, aurEff);
1231 if (target->GetThreatManager().IsThreatenedBy(caster,
true))
1243template <u
int32 TriggerSpellId>
1257 caster->
CastSpell(caster, TriggerSpellId, aurEff);
1284 int32 bp = aurEff->GetAmount();
1285 bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp,
DOT);
#define TC_LOG_ERROR(filterType__,...)
std::vector< ItemPosCount > ItemPosCountVec
bool roll_chance_i(int chance)
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_APPLY_AURA
@ TARGET_UNIT_DEST_AREA_ENEMY
@ CREATURE_FAMILY_FELGUARD
@ CREATURE_FAMILY_VOIDWALKER
@ CREATURE_FAMILY_FELHUNTER
@ CREATURE_FAMILY_SUCCUBUS
@ SPELL_SCHOOL_MASK_MAGIC
SpellSchools GetFirstSchoolInMask(SpellSchoolMask mask)
@ AURA_STATE_HEALTHLESS_35_PERCENT
@ SPELL_FAILED_TOO_MANY_OF_ITEM
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAPPLY
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_ADD_FLAT_MODIFIER
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
@ SPELL_AURA_MECHANIC_IMMUNITY
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_PERIODIC_DUMMY
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define BeforeSpellHitFn(F)
#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 AuraEffectUpdatePeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ PLAYER_FIELD_MOD_DAMAGE_DONE_POS
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
T ApplyPct(T &base, U pct)
T CalculatePct(T base, U pct)
AuraRemoveMode GetRemoveMode() const
uint32 GetTickNumber() const
SpellInfo const * GetSpellInfo() const
SpellEffectInfo const & GetSpellEffectInfo() const
void SetAmount(int32 amount)
ObjectGuid GetCasterGUID() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
HookList< EffectUpdatePeriodicHandler > OnEffectUpdatePeriodic
AuraEffect * GetEffect(uint8 effIndex) const
ObjectGuid GetCasterGUID() 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
HookList< EffectApplyHandler > OnEffectApply
SpellInfo const * GetSpellInfo() const
SpellSchoolMask GetSchoolMask() const
WorldObject * GetDispeller() const
static ObjectGuid const Empty
static Unit * ToUnit(Object *o)
uint32 GetUInt32Value(uint16 index) const
static ObjectGuid GetGUID(Object const *o)
ObjectGuid GetGUID() const
static Player * ToPlayer(Object *o)
bool isHonorOrXPTarget(Unit const *victim) const
Unit * GetActionTarget() const
SpellInfo const * GetSpellInfo() const
DamageInfo * GetDamageInfo() const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
HookList< CheckCastHandler > OnCheckCast
Creature * GetHitCreature() const
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Aura * GetHitAura(bool dynObjAura=false) const
HookList< EffectHandler > OnEffectLaunchTarget
HookList< BeforeHitHandler > BeforeHit
void CreateItem(uint32 itemId)
WorldLocation const * GetExplTargetDest() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
int32 ModifyHealth(int32 val)
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void RemoveGameObject(GameObject *gameObj, bool del)
float CalculateSpellpowerCoefficientLevelPenalty(SpellInfo const *spellInfo) const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) 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)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
uint32 SpellDamageBonusDone(Unit *victim, SpellInfo const *spellProto, uint32 pdamage, DamageEffectType damagetype, SpellEffectInfo const &spellEffectInfo, Optional< float > const &donePctTotal, uint32 stack=1) const
uint32 GetMaxPower(Powers power) 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
AuraApplication * GetAuraApplicationOfRankedSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
AuraEffect * GetDummyAuraEffect(SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
Guardian * GetGuardianPet() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
PrepareSpellScript(spell_warl_banish)
void HandleBanish(SpellMissInfo missInfo)
PrepareSpellScript(spell_warl_create_healthstone_SpellScript)
bool Validate(SpellInfo const *) override
static uint32 const iTypes[8][3]
SpellCastResult CheckCast()
void HandleScriptEffect(SpellEffIndex)
spell_warl_create_healthstone()
SpellScript * GetSpellScript() const override
PrepareAuraScript(spell_warl_curse_of_agony)
void ApplyEffect(AuraEffect const *aurEff, AuraEffectHandleModes)
void HandleEffectPeriodicUpdate(AuraEffect *aurEff)
void OnRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
PrepareAuraScript(spell_warl_curse_of_doom)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_decimation)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_demonic_circle_summon)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes mode)
void HandleDummyTick(AuraEffect const *)
PrepareAuraScript(spell_warl_demonic_circle_teleport)
void HandleTeleport(AuraEffect const *, AuraEffectHandleModes)
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_warl_demonic_empowerment)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_demonic_pact)
void HandleProc(AuraEffect const *, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
void HandleTick(AuraEffect const *aurEff)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_drain_soul)
void HandleScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_warl_everlasting_affliction)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_fel_synergy)
void OnProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_glyph_of_corruption_nightfall)
PrepareAuraScript(spell_warl_glyph_of_life_tap)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_glyph_of_shadowflame)
void HandleRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
PrepareAuraScript(spell_warl_haunt_aura)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_warl_haunt)
void ApplyEffect(AuraEffect const *, AuraEffectHandleModes)
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_warl_health_funnel)
void HandleDummy(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
SpellCastResult CheckCast()
PrepareSpellScript(spell_warl_life_tap)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_nether_protection)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_warl_ritual_of_doom_effect)
void HandleDummy(SpellEffIndex)
PrepareSpellScript(spell_warl_ritual_of_souls)
bool Validate(SpellInfo const *) override
spell_warl_ritual_of_souls(std::array< uint32, 3 > createSoulwellSpellIds)
std::array< uint32, 3 > _createSoulwellSpellIds
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
PrepareSpellScript(spell_warl_seduction)
PrepareAuraScript(spell_warl_seed_of_corruption_dummy)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void CalculateBuffer(AuraEffect const *aurEff, int32 &amount, bool &)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_seed_of_corruption_generic)
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_warl_seed_of_corruption)
PrepareAuraScript(spell_warl_shadow_ward)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_siphon_life)
void OnProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_warl_soul_leech)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_warl_soulshatter)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_warl_t4_2p_bonus)
bool Validate(SpellInfo const *) override
void HandleDispel(DispelInfo *dispelInfo)
PrepareAuraScript(spell_warl_unstable_affliction)
bool Validate(SpellInfo const *) override
void AddSC_warlock_spell_scripts()
@ SPELL_WARLOCK_HAUNT_HEAL
@ SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT
@ SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT
@ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2
@ SPELL_WARLOCK_SIPHON_LIFE_HEAL
@ SPELL_WARLOCK_NETHER_PROTECTION_FIRE
@ SPELL_WARLOCK_SHADOWFLAME
@ SPELL_WARLOCK_CREATE_SOULWELL_R2
@ SPELL_WARLOCK_NETHER_PROTECTION_ARCANE
@ SPELL_WARLOCK_SOUL_LEECH_CASTER_MANA_2
@ SPELL_WARLOCK_GLYPH_OF_LIFE_TAP_TRIGGERED
@ SPELL_WARLOCK_SOUL_LEECH_PET_MANA_1
@ SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_R1
@ SPELL_WARLOCK_IMP_SOUL_LEECH_R1
@ SPELL_WARLOCK_DEMONIC_PACT_PROC
@ SPELL_WARLOCK_NETHER_PROTECTION_FROST
@ SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON
@ SPELL_WARLOCK_SOUL_LEECH_CASTER_MANA_1
@ SPELL_WARLOCK_GLYPH_OF_DRAIN_SOUL_PROC
@ SPELL_WARLOCK_GLYPH_OF_DRAIN_SOUL_AURA
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1
@ SPELL_WARLOCK_SHADOW_TRANCE
@ SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2
@ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD
@ SPELL_WARLOCK_SOUL_LEECH_PET_MANA_2
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC
@ SPELL_WARLOCK_DRAIN_SOUL_R1
@ SPELL_WARLOCK_CREATE_SOULWELL_R1_IMP_HS_R1
@ SPELL_WARLOCK_SOULSHATTER_EFFECT
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE_R1
@ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER
@ SPELL_WARLOCK_FEL_SYNERGY_HEAL
@ SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC
@ SPELL_WARLOCK_LIFE_TAP_ENERGIZE
@ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER
@ SPELL_WARLOCK_SOUL_LEECH_HEAL
@ SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST
@ SPELL_WARLOCK_CREATE_SOULSHARD
@ SPELL_WARLOCK_CREATE_SOULWELL_R1
@ SPELL_WARLOCK_GLYPH_OF_SUCCUBUS
@ SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME
@ SPELL_WARLOCK_FLAMESHADOW
@ SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1
@ SPELL_WARLOCK_CREATE_SOULWELL_R2_IMP_HS_R1
@ SPELL_WARLOCK_NETHER_PROTECTION_NATURE
@ SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE
@ SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL
@ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP
@ SPELL_WARLOCK_CREATE_SOULWELL_R1_IMP_HS_R2
@ SPELL_WARLOCK_NETHER_PROTECTION_HOLY
@ SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2
@ SPELL_WARLOCK_NETHER_PROTECTION_SHADOW
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1
@ SPELL_WARLOCK_CREATE_SOULWELL_R2_IMP_HS_R2
@ WARLOCK_ICON_ID_MANA_FEED
@ WARLOCK_ICON_ID_IMPROVED_LIFE_TAP
@ WARLOCK_ICON_ID_DEMONIC_PACT