diff options
Diffstat (limited to 'src/server/game/Spells/SpellScript.h')
-rwxr-xr-x | src/server/game/Spells/SpellScript.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 068673eb543..564d699c69b 100755 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -340,6 +340,7 @@ enum AuraScriptHookType AURA_SCRIPT_HOOK_EFFECT_AFTER_ABSORB, AURA_SCRIPT_HOOK_EFFECT_MANASHIELD, AURA_SCRIPT_HOOK_EFFECT_AFTER_MANASHIELD, + AURA_SCRIPT_HOOK_CHECK_AREA_TARGET, /*AURA_SCRIPT_HOOK_APPLY, AURA_SCRIPT_HOOK_REMOVE, */ }; @@ -354,6 +355,7 @@ class AuraScript : public _SpellScript public: #define AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) \ + typedef bool(CLASSNAME::*AuraCheckAreaTargetFnType)(Unit * target); \ typedef void(CLASSNAME::*AuraEffectApplicationModeFnType)(AuraEffect const *, AuraEffectHandleModes); \ typedef void(CLASSNAME::*AuraEffectPeriodicFnType)(AuraEffect const *); \ typedef void(CLASSNAME::*AuraEffectUpdatePeriodicFnType)(AuraEffect *); \ @@ -364,6 +366,14 @@ class AuraScript : public _SpellScript AURASCRIPT_FUNCTION_TYPE_DEFINES(AuraScript) + class CheckAreaTargetHandler + { + public: + CheckAreaTargetHandler(AuraCheckAreaTargetFnType pHandlerScript); + bool Call(AuraScript* auraScript, Unit * target); + private: + AuraCheckAreaTargetFnType pHandlerScript; + }; class EffectBase : public _SpellScript::EffectAuraNameCheck, public _SpellScript::EffectHook { public: @@ -438,6 +448,7 @@ class AuraScript : public _SpellScript }; #define AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) \ + class CheckAreaTargetFunction : public AuraScript::CheckAreaTargetHandler { public: CheckAreaTargetFunction(AuraCheckAreaTargetFnType _pHandlerScript) : AuraScript::CheckAreaTargetHandler((AuraScript::AuraCheckAreaTargetFnType)_pHandlerScript) {} }; \ class EffectPeriodicHandlerFunction : public AuraScript::EffectPeriodicHandler { public: EffectPeriodicHandlerFunction(AuraEffectPeriodicFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectPeriodicHandler((AuraScript::AuraEffectPeriodicFnType)_pEffectHandlerScript, _effIndex, _effName) {} }; \ class EffectUpdatePeriodicHandlerFunction : public AuraScript::EffectUpdatePeriodicHandler { public: EffectUpdatePeriodicHandlerFunction(AuraEffectUpdatePeriodicFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectUpdatePeriodicHandler((AuraScript::AuraEffectUpdatePeriodicFnType)_pEffectHandlerScript, _effIndex, _effName) {} }; \ class EffectCalcAmountHandlerFunction : public AuraScript::EffectCalcAmountHandler { public: EffectCalcAmountHandlerFunction(AuraEffectCalcAmountFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : AuraScript::EffectCalcAmountHandler((AuraScript::AuraEffectCalcAmountFnType)_pEffectHandlerScript, _effIndex, _effName) {} }; \ @@ -480,6 +491,11 @@ class AuraScript : public _SpellScript // AuraScript interface // hooks to which you can attach your functions // + // executed when area aura checks if it can be applied on target + // example: OnEffectApply += AuraEffectApplyFn(class::function); + // where function is: bool function (Unit * target); + HookList<CheckAreaTargetHandler> DoCheckAreaTarget; + #define AuraCheckAreaTargetFn(F) CheckAreaTargetFunction(&F) // executed when aura effect is applied with specified mode to target // should be used when when effect handler preventing/replacing is needed, do not use this hook for triggering spellcasts/removing auras etc - may be unsafe // example: OnEffectApply += AuraEffectApplyFn(class::function, EffectIndexSpecifier, EffectAuraNameSpecifier, AuraEffectHandleModes); |