18#ifndef __SPELL_SCRIPT_H
19#define __SPELL_SCRIPT_H
52#define SPELL_EFFECT_ANY (uint16)-1
53#define SPELL_AURA_ANY (uint16)-1
62#define SPELL_SCRIPT_STATE_END SPELL_SCRIPT_STATE_UNLOADING + 1
70 virtual bool _Validate(
SpellInfo const* entry);
77 void _Init(std::string
const* scriptname,
uint32 spellId);
78 std::string
const* _GetScriptName()
const;
90 std::string EffIndexToString();
100 std::string ToString();
110 std::string ToString();
121#ifdef TRINITY_API_USE_DYNAMIC_LINKING
124 std::shared_ptr<ModuleReference> m_moduleReference;
140 virtual bool Load() {
return true; }
147 return _ValidateSpellInfo(spellIds.begin(), spellIds.end());
153 return _ValidateSpellInfo(std::begin(spellIds), std::end(spellIds));
157 template<
typename Iterator>
160 bool allValid =
true;
163 if (!_ValidateSpellInfo(*begin))
171 static bool _ValidateSpellInfo(
uint32 spellId);
195#define HOOK_SPELL_HIT_START SPELL_SCRIPT_HOOK_EFFECT_HIT
196#define HOOK_SPELL_HIT_END SPELL_SCRIPT_HOOK_AFTER_HIT + 1
203 #define SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) \
204 typedef SpellCastResult(CLASSNAME::*SpellCheckCastFnType)(); \
205 typedef void(CLASSNAME::*SpellEffectFnType)(SpellEffIndex); \
206 typedef void(CLASSNAME::*SpellBeforeHitFnType)(SpellMissInfo missInfo); \
207 typedef void(CLASSNAME::*SpellHitFnType)(); \
208 typedef void(CLASSNAME::*SpellCastFnType)(); \
209 typedef void(CLASSNAME::*SpellOnResistAbsorbCalculateFnType)(DamageInfo const& damageInfo, uint32& resistAmount, int32& absorbAmount); \
210 typedef void(CLASSNAME::*SpellObjectAreaTargetSelectFnType)(std::list<WorldObject*>&); \
211 typedef void(CLASSNAME::*SpellObjectTargetSelectFnType)(WorldObject*&); \
212 typedef void(CLASSNAME::*SpellDestinationTargetSelectFnType)(SpellDestination&);
238 std::string ToString();
239 bool CheckEffect(
SpellInfo const* spellInfo,
uint8 effIndex)
override;
248 HitHandler(SpellHitFnType _pHitHandlerScript);
267 bool CheckEffect(
SpellInfo const* spellInfo,
uint8 effIndex)
override;
268 std::string ToString();
280 void Call(
SpellScript* spellScript, std::list<WorldObject*>& targets);
320 #define SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) \
321 class CastHandlerFunction : public SpellScript::CastHandler { public: explicit CastHandlerFunction(SpellCastFnType _pCastHandlerScript) : SpellScript::CastHandler((SpellScript::SpellCastFnType)_pCastHandlerScript) { } }; \
322 class CheckCastHandlerFunction : public SpellScript::CheckCastHandler { public: explicit CheckCastHandlerFunction(SpellCheckCastFnType _checkCastHandlerScript) : SpellScript::CheckCastHandler((SpellScript::SpellCheckCastFnType)_checkCastHandlerScript) { } }; \
323 class EffectHandlerFunction : public SpellScript::EffectHandler { public: explicit EffectHandlerFunction(SpellEffectFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : SpellScript::EffectHandler((SpellScript::SpellEffectFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
324 class HitHandlerFunction : public SpellScript::HitHandler { public: explicit HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) { } }; \
325 class BeforeHitHandlerFunction : public SpellScript::BeforeHitHandler { public: explicit BeforeHitHandlerFunction(SpellBeforeHitFnType pBeforeHitHandlerScript) : SpellScript::BeforeHitHandler((SpellScript::SpellBeforeHitFnType)pBeforeHitHandlerScript) { } }; \
326 class OnCalculateResistAbsorbHandlerFunction : public SpellScript::OnCalculateResistAbsorbHandler { public: explicit OnCalculateResistAbsorbHandlerFunction(SpellOnResistAbsorbCalculateFnType _onCalculateResistAbsorbScript) : SpellScript::OnCalculateResistAbsorbHandler((SpellScript::SpellOnResistAbsorbCalculateFnType)_onCalculateResistAbsorbScript) { } }; \
327 class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: explicit ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
328 class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: explicit ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
329 class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: explicit DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } }
331 #define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
335 bool _Validate(
SpellInfo const* entry)
override;
336 bool _Load(
Spell* spell);
341 void _FinishScriptCall();
342 bool IsInCheckCastHook()
const;
343 bool IsAfterTargetSelectionPhase()
const;
344 bool IsInTargetHook()
const;
345 bool IsInModifiableHook()
const;
346 bool IsInHitPhase()
const;
347 bool IsInEffectHook()
const;
363 #define SpellCastFn(F) CastHandlerFunction(&F)
368 #define SpellCheckCastFn(F) CheckCastHandlerFunction(&F)
373 #define SpellOnResistAbsorbCalculateFn(F) OnCalculateResistAbsorbHandlerFunction(&F)
382 #define SpellEffectFn(F, I, N) EffectHandlerFunction(&F, I, N)
387 #define BeforeSpellHitFn(F) BeforeHitHandlerFunction(&F)
394 #define SpellHitFn(F) HitHandlerFunction(&F)
399 #define SpellObjectAreaTargetSelectFn(F, I, N) ObjectAreaTargetSelectHandlerFunction(&F, I, N)
404 #define SpellObjectTargetSelectFn(F, I, N) ObjectTargetSelectHandlerFunction(&F, I, N)
409 #define SpellDestinationTargetSelectFn(F, I, N) DestinationTargetSelectHandlerFunction(&F, I, N)
435 Unit* GetCaster()
const;
437 Unit* GetOriginalCaster()
const;
462 Unit* GetExplTargetUnit()
const;
468 Item* GetExplTargetItem()
const;
477 Unit* GetHitUnit()
const;
481 Player* GetHitPlayer()
const;
483 Item* GetHitItem()
const;
487 Corpse* GetHitCorpse()
const;
492 int32 GetHitDamage()
const;
493 void SetHitDamage(
int32 damage);
497 int32 GetHitHeal()
const;
498 void SetHitHeal(
int32 heal);
502 Aura* GetHitAura(
bool dynObjAura =
false)
const;
504 void PreventHitAura();
519 int32 GetEffectValue()
const;
520 void SetEffectValue(
int32 value);
523 Item* GetCastItem()
const;
526 void CreateItem(
uint32 itemId);
529 SpellInfo const* GetTriggeringSpell()
const;
579 #define AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) \
580 typedef bool(CLASSNAME::*AuraCheckAreaTargetFnType)(Unit* target); \
581 typedef void(CLASSNAME::*AuraDispelFnType)(DispelInfo* dispelInfo); \
582 typedef void(CLASSNAME::*AuraEffectApplicationModeFnType)(AuraEffect const*, AuraEffectHandleModes); \
583 typedef void(CLASSNAME::*AuraEffectPeriodicFnType)(AuraEffect const*); \
584 typedef void(CLASSNAME::*AuraEffectUpdatePeriodicFnType)(AuraEffect*); \
585 typedef void(CLASSNAME::*AuraEffectCalcAmountFnType)(AuraEffect const*, int32 &, bool &); \
586 typedef void(CLASSNAME::*AuraEffectCalcPeriodicFnType)(AuraEffect const*, bool &, int32 &); \
587 typedef void(CLASSNAME::*AuraEffectCalcSpellModFnType)(AuraEffect const*, SpellModifier* &); \
588 typedef void(CLASSNAME::*AuraEffectAbsorbFnType)(AuraEffect*, DamageInfo &, uint32 &); \
589 typedef void(CLASSNAME::*AuraEffectSplitFnType)(AuraEffect*, DamageInfo &, uint32 &); \
590 typedef bool(CLASSNAME::*AuraCheckProcFnType)(ProcEventInfo&); \
591 typedef bool(CLASSNAME::*AuraCheckEffectProcFnType)(AuraEffect const*, ProcEventInfo&); \
592 typedef void(CLASSNAME::*AuraProcFnType)(ProcEventInfo&); \
593 typedef void(CLASSNAME::*AuraEffectProcFnType)(AuraEffect const*, ProcEventInfo&); \
617 std::string ToString();
618 bool CheckEffect(
SpellInfo const* spellInfo,
uint8 effIndex)
override;
726 #define AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) \
727 class CheckAreaTargetFunction : public AuraScript::CheckAreaTargetHandler { public: explicit CheckAreaTargetFunction(AuraCheckAreaTargetFnType _pHandlerScript) : AuraScript::CheckAreaTargetHandler((AuraScript::AuraCheckAreaTargetFnType)_pHandlerScript) { } }; \
728 class AuraDispelFunction : public AuraScript::AuraDispelHandler { public: explicit AuraDispelFunction(AuraDispelFnType _pHandlerScript) : AuraScript::AuraDispelHandler((AuraScript::AuraDispelFnType)_pHandlerScript) { } }; \
729 class EffectPeriodicHandlerFunction : public AuraScript::EffectPeriodicHandler { public: explicit EffectPeriodicHandlerFunction(AuraEffectPeriodicFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectPeriodicHandler((AuraScript::AuraEffectPeriodicFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
730 class EffectUpdatePeriodicHandlerFunction : public AuraScript::EffectUpdatePeriodicHandler { public: explicit EffectUpdatePeriodicHandlerFunction(AuraEffectUpdatePeriodicFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectUpdatePeriodicHandler((AuraScript::AuraEffectUpdatePeriodicFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
731 class EffectCalcAmountHandlerFunction : public AuraScript::EffectCalcAmountHandler { public: explicit EffectCalcAmountHandlerFunction(AuraEffectCalcAmountFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectCalcAmountHandler((AuraScript::AuraEffectCalcAmountFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
732 class EffectCalcPeriodicHandlerFunction : public AuraScript::EffectCalcPeriodicHandler { public: explicit EffectCalcPeriodicHandlerFunction(AuraEffectCalcPeriodicFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectCalcPeriodicHandler((AuraScript::AuraEffectCalcPeriodicFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
733 class EffectCalcSpellModHandlerFunction : public AuraScript::EffectCalcSpellModHandler { public: explicit EffectCalcSpellModHandlerFunction(AuraEffectCalcSpellModFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectCalcSpellModHandler((AuraScript::AuraEffectCalcSpellModFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \
734 class EffectApplyHandlerFunction : public AuraScript::EffectApplyHandler { public: explicit EffectApplyHandlerFunction(AuraEffectApplicationModeFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName, AuraEffectHandleModes _mode) : AuraScript::EffectApplyHandler((AuraScript::AuraEffectApplicationModeFnType)_pEffectHandlerScript, _effIndex, _effName, _mode) { } }; \
735 class EffectAbsorbFunction : public AuraScript::EffectAbsorbHandler { public: explicit EffectAbsorbFunction(AuraEffectAbsorbFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectAbsorbHandler((AuraScript::AuraEffectAbsorbFnType)_pEffectHandlerScript, _effIndex) { } }; \
736 class EffectManaShieldFunction : public AuraScript::EffectManaShieldHandler { public: explicit EffectManaShieldFunction(AuraEffectAbsorbFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectManaShieldHandler((AuraScript::AuraEffectAbsorbFnType)_pEffectHandlerScript, _effIndex) { } }; \
737 class EffectSplitFunction : public AuraScript::EffectSplitHandler { public: explicit EffectSplitFunction(AuraEffectSplitFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectSplitHandler((AuraScript::AuraEffectSplitFnType)_pEffectHandlerScript, _effIndex) { } }; \
738 class CheckProcHandlerFunction : public AuraScript::CheckProcHandler { public: explicit CheckProcHandlerFunction(AuraCheckProcFnType handlerScript) : AuraScript::CheckProcHandler((AuraScript::AuraCheckProcFnType)handlerScript) { } }; \
739 class CheckEffectProcHandlerFunction : public AuraScript::CheckEffectProcHandler { public: explicit CheckEffectProcHandlerFunction(AuraCheckEffectProcFnType handlerScript, uint8 effIndex, uint16 effName) : AuraScript::CheckEffectProcHandler((AuraScript::AuraCheckEffectProcFnType)handlerScript, effIndex, effName) { } }; \
740 class AuraProcHandlerFunction : public AuraScript::AuraProcHandler { public: explicit AuraProcHandlerFunction(AuraProcFnType handlerScript) : AuraScript::AuraProcHandler((AuraScript::AuraProcFnType)handlerScript) { } }; \
741 class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: explicit EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }
743 #define PrepareAuraScript(CLASSNAME) AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
748 bool _Validate(
SpellInfo const* entry)
override;
749 bool _Load(
Aura* aura);
751 void _FinishScriptCall();
752 bool _IsDefaultActionPrevented();
765 : _auraApplication(auraApplication), _currentScriptState(currentScriptState), _defaultActionPrevented(defaultActionPrevented)
780 #define AuraCheckAreaTargetFn(F) CheckAreaTargetFunction(&F)
790 #define AuraDispelFn(F) AuraDispelFunction(&F)
801 #define AuraEffectApplyFn(F, I, N, M) EffectApplyHandlerFunction(&F, I, N, M)
812 #define AuraEffectRemoveFn(F, I, N, M) EffectApplyHandlerFunction(&F, I, N, M)
818 #define AuraEffectPeriodicFn(F, I, N) EffectPeriodicHandlerFunction(&F, I, N)
824 #define AuraEffectUpdatePeriodicFn(F, I, N) EffectUpdatePeriodicHandlerFunction(&F, I, N)
830 #define AuraEffectCalcAmountFn(F, I, N) EffectCalcAmountHandlerFunction(&F, I, N)
836 #define AuraEffectCalcPeriodicFn(F, I, N) EffectCalcPeriodicHandlerFunction(&F, I, N)
842 #define AuraEffectCalcSpellModFn(F, I, N) EffectCalcSpellModHandlerFunction(&F, I, N)
848 #define AuraEffectAbsorbFn(F, I) EffectAbsorbFunction(&F, I)
859 #define AuraEffectManaShieldFn(F, I) EffectManaShieldFunction(&F, I)
870 #define AuraEffectSplitFn(F, I) EffectSplitFunction(&F, I)
876 #define AuraCheckProcFn(F) CheckProcHandlerFunction(&F)
882 #define AuraCheckEffectProcFn(F, I, N) CheckEffectProcHandlerFunction(&F, I, N)
896 #define AuraProcFn(F) AuraProcHandlerFunction(&F)
906 #define AuraEffectProcFn(F, I, N) EffectProcHandlerFunction(&F, I, N)
911 void PreventDefaultAction();
924 Unit* GetCaster()
const;
930 Unit* GetUnitOwner()
const;
937 Aura* GetAura()
const;
943 int32 GetDuration()
const;
944 void SetDuration(
int32 duration,
bool withMods =
false);
946 void RefreshDuration();
947 time_t GetApplyTime()
const;
948 int32 GetMaxDuration()
const;
949 void SetMaxDuration(
int32 duration);
950 int32 CalcMaxDuration()
const;
952 bool IsExpired()
const;
954 bool IsPermanent()
const;
957 uint8 GetCharges()
const;
958 void SetCharges(
uint8 charges);
959 uint8 CalcMaxCharges()
const;
965 uint8 GetStackAmount()
const;
966 void SetStackAmount(
uint8 num);
970 bool IsPassive()
const;
972 bool IsDeathPersistent()
const;
975 bool HasEffect(
uint8 effIndex)
const;
980 bool HasEffectType(
AuraType type)
const;
988 Unit* GetTarget()
const;
@ AURA_SCRIPT_HOOK_EFFECT_CALC_PERIODIC
@ AURA_SCRIPT_HOOK_CHECK_EFFECT_PROC
@ AURA_SCRIPT_HOOK_EFFECT_CALC_AMOUNT
@ AURA_SCRIPT_HOOK_EFFECT_REMOVE
@ AURA_SCRIPT_HOOK_EFFECT_AFTER_MANASHIELD
@ AURA_SCRIPT_HOOK_PREPARE_PROC
@ AURA_SCRIPT_HOOK_EFFECT_AFTER_APPLY
@ AURA_SCRIPT_HOOK_EFFECT_AFTER_REMOVE
@ AURA_SCRIPT_HOOK_AFTER_PROC
@ AURA_SCRIPT_HOOK_CHECK_AREA_TARGET
@ AURA_SCRIPT_HOOK_EFFECT_MANASHIELD
@ AURA_SCRIPT_HOOK_EFFECT_AFTER_ABSORB
@ AURA_SCRIPT_HOOK_DISPEL
@ AURA_SCRIPT_HOOK_EFFECT_APPLY
@ AURA_SCRIPT_HOOK_EFFECT_PERIODIC
@ AURA_SCRIPT_HOOK_EFFECT_AFTER_PROC
@ AURA_SCRIPT_HOOK_EFFECT_ABSORB
@ AURA_SCRIPT_HOOK_EFFECT_PROC
@ AURA_SCRIPT_HOOK_EFFECT_SPLIT
@ AURA_SCRIPT_HOOK_EFFECT_CALC_SPELLMOD
@ AURA_SCRIPT_HOOK_AFTER_DISPEL
@ AURA_SCRIPT_HOOK_CHECK_PROC
@ AURA_SCRIPT_HOOK_EFFECT_UPDATE_PERIODIC
#define AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME)
@ SPELL_SCRIPT_STATE_NONE
@ SPELL_SCRIPT_STATE_LOADING
@ SPELL_SCRIPT_STATE_UNLOADING
@ SPELL_SCRIPT_STATE_REGISTRATION
#define SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME)
#define SPELL_SCRIPT_STATE_END
@ SPELL_SCRIPT_HOOK_AFTER_CAST
@ SPELL_SCRIPT_HOOK_EFFECT_HIT
@ SPELL_SCRIPT_HOOK_AFTER_HIT
@ SPELL_SCRIPT_HOOK_EFFECT_SUCCESSFUL_DISPEL
@ SPELL_SCRIPT_HOOK_EFFECT_LAUNCH
@ SPELL_SCRIPT_HOOK_OBJECT_AREA_TARGET_SELECT
@ SPELL_SCRIPT_HOOK_BEFORE_HIT
@ SPELL_SCRIPT_HOOK_CHECK_CAST
@ SPELL_SCRIPT_HOOK_EFFECT_LAUNCH_TARGET
@ SPELL_SCRIPT_HOOK_BEFORE_CAST
@ SPELL_SCRIPT_HOOK_ON_RESIST_ABSORB_CALCULATION
@ SPELL_SCRIPT_HOOK_DESTINATION_TARGET_SELECT
@ SPELL_SCRIPT_HOOK_OBJECT_TARGET_SELECT
@ SPELL_SCRIPT_HOOK_EFFECT_HIT_TARGET
@ SPELL_SCRIPT_HOOK_ON_CAST
AuraDispelFnType pHandlerScript
AuraProcFnType _HandlerScript
AuraCheckAreaTargetFnType pHandlerScript
AuraCheckEffectProcFnType _HandlerScript
AuraCheckProcFnType _HandlerScript
AuraEffectAbsorbFnType pEffectHandlerScript
AuraEffectHandleModes mode
AuraEffectApplicationModeFnType pEffectHandlerScript
AuraEffectCalcAmountFnType pEffectHandlerScript
AuraEffectCalcPeriodicFnType pEffectHandlerScript
AuraEffectCalcSpellModFnType pEffectHandlerScript
AuraEffectAbsorbFnType pEffectHandlerScript
AuraEffectPeriodicFnType pEffectHandlerScript
AuraEffectProcFnType _EffectHandlerScript
AuraEffectSplitFnType pEffectHandlerScript
AuraEffectUpdatePeriodicFnType pEffectHandlerScript
ScriptStateStore(uint8 currentScriptState, AuraApplication const *auraApplication, bool defaultActionPrevented)
bool _defaultActionPrevented
uint8 _currentScriptState
AuraApplication const * _auraApplication
HookList< EffectManaShieldHandler > AfterEffectManaShield
HookList< EffectCalcPeriodicHandler > DoEffectCalcPeriodic
HookList< EffectApplyHandler > AfterEffectRemove
AuraApplication const * m_auraApplication
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
bool m_defaultActionPrevented
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectProcHandler > AfterEffectProc
HookList< EffectAbsorbHandler > AfterEffectAbsorb
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
HookList< EffectUpdatePeriodicHandler > OnEffectUpdatePeriodic
HookList< EffectCalcSpellModHandler > DoEffectCalcSpellMod
HookList< EffectManaShieldHandler > OnEffectManaShield
HookList< EffectAbsorbHandler > OnEffectAbsorb
std::stack< ScriptStateStore > ScriptStateStack
HookList< CheckAreaTargetHandler > DoCheckAreaTarget
HookList< AuraProcHandler > AfterProc
HookList< AuraDispelHandler > OnDispel
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< AuraDispelHandler > AfterDispel
ScriptStateStack m_scriptStates
HookList< EffectProcHandler > OnEffectProc
HookList< AuraProcHandler > DoPrepareProc
HookList< AuraProcHandler > OnProc
HookList< EffectSplitHandler > OnEffectSplit
HookList< EffectApplyHandler > OnEffectApply
SpellBeforeHitFnType _pBeforeHitHandlerScript
SpellCastFnType pCastHandlerScript
SpellCheckCastFnType _checkCastHandlerScript
SpellDestinationTargetSelectFnType DestinationTargetSelectHandlerScript
SpellEffectFnType pEffectHandlerScript
SpellHitFnType pHitHandlerScript
SpellObjectAreaTargetSelectFnType pObjectAreaTargetSelectHandlerScript
bool HasSameTargetFunctionAs(ObjectAreaTargetSelectHandler const &other) const
bool HasSameTargetFunctionAs(ObjectTargetSelectHandler const &other) const
SpellObjectTargetSelectFnType pObjectTargetSelectHandlerScript
SpellOnResistAbsorbCalculateFnType pOnCalculateResistAbsorbHandlerScript
HookList< CastHandler > AfterCast
HookList< CheckCastHandler > OnCheckCast
HookList< HitHandler > AfterHit
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
uint8 m_hitPreventEffectMask
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
HookList< OnCalculateResistAbsorbHandler > OnCalculateResistAbsorb
HookList< CastHandler > BeforeCast
HookList< EffectHandler > OnEffectLaunchTarget
uint8 m_hitPreventDefaultEffectMask
HookList< BeforeHitHandler > BeforeHit
bool _IsDefaultEffectPrevented(SpellEffIndex effIndex)
bool _IsEffectPrevented(SpellEffIndex effIndex)
HookList< EffectHandler > OnEffectSuccessfulDispel
HookList< EffectHandler > OnEffectLaunch
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
EffectAuraNameCheck(uint16 _effAurName)
virtual bool CheckEffect(SpellInfo const *spellInfo, uint8 effIndex)=0
EffectNameCheck(uint16 _effName)
static bool ValidateSpellInfo(T const &spellIds)
std::string const * m_scriptName
uint8 m_currentScriptState
static bool _ValidateSpellInfo(Iterator begin, Iterator end)
virtual bool Validate(SpellInfo const *)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
virtual void Register()=0