diff options
| author | Ivan Beňovic <Ivan.Benovic2@gmail.com> | 2016-07-20 09:08:58 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-07-20 09:08:58 +0200 |
| commit | 8ff5b35be1256d03b85438b130dcec7cd4cae6e1 (patch) | |
| tree | 38d7460449eb774a0ffddcfb046df9c003ad5bfd /src/server/game/Spells/SpellScript.h | |
| parent | dc9e2a53aa27a0cad18b876234e13bba79995323 (diff) | |
Core/Spells: Add SpellMissInfo argument to BeforeHit hooks and call them also when the spell doesn't hit. (#17613)
Diffstat (limited to 'src/server/game/Spells/SpellScript.h')
| -rw-r--r-- | src/server/game/Spells/SpellScript.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 97bbdf14231..bf67a81612a 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -168,6 +168,7 @@ class TC_GAME_API SpellScript : public _SpellScript #define SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) \ typedef SpellCastResult(CLASSNAME::*SpellCheckCastFnType)(); \ typedef void(CLASSNAME::*SpellEffectFnType)(SpellEffIndex); \ + typedef void(CLASSNAME::*SpellBeforeHitFnType)(SpellMissInfo missInfo); \ typedef void(CLASSNAME::*SpellHitFnType)(); \ typedef void(CLASSNAME::*SpellCastFnType)(); \ typedef void(CLASSNAME::*SpellObjectAreaTargetSelectFnType)(std::list<WorldObject*>&); \ @@ -214,6 +215,15 @@ class TC_GAME_API SpellScript : public _SpellScript SpellHitFnType pHitHandlerScript; }; + class TC_GAME_API BeforeHitHandler + { + public: + BeforeHitHandler(SpellBeforeHitFnType pBeforeHitHandlerScript); + void Call(SpellScript* spellScript, SpellMissInfo missInfo); + private: + SpellBeforeHitFnType _pBeforeHitHandlerScript; + }; + class TC_GAME_API TargetHook : public _SpellScript::EffectHook { public: @@ -259,6 +269,7 @@ class TC_GAME_API SpellScript : public _SpellScript class CheckCastHandlerFunction : public SpellScript::CheckCastHandler { public: CheckCastHandlerFunction(SpellCheckCastFnType _checkCastHandlerScript) : SpellScript::CheckCastHandler((SpellScript::SpellCheckCastFnType)_checkCastHandlerScript) { } }; \ class EffectHandlerFunction : public SpellScript::EffectHandler { public: EffectHandlerFunction(SpellEffectFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : SpellScript::EffectHandler((SpellScript::SpellEffectFnType)_pEffectHandlerScript, _effIndex, _effName) { } }; \ class HitHandlerFunction : public SpellScript::HitHandler { public: HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) { } }; \ + class BeforeHitHandlerFunction : public SpellScript::BeforeHitHandler { public: BeforeHitHandlerFunction(SpellBeforeHitFnType pBeforeHitHandlerScript) : SpellScript::BeforeHitHandler((SpellScript::SpellBeforeHitFnType)pBeforeHitHandlerScript) { } }; \ class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } } @@ -307,8 +318,11 @@ class TC_GAME_API SpellScript : public _SpellScript HookList<EffectHandler> OnEffectSuccessfulDispel; #define SpellEffectFn(F, I, N) EffectHandlerFunction(&F, I, N) - // example: BeforeHit += SpellHitFn(class::function); - HookList<HitHandler> BeforeHit; + // example: BeforeHit += BeforeSpellHitFn(class::function); + // where function is void function(SpellMissInfo missInfo) + HookList<BeforeHitHandler> BeforeHit; + #define BeforeSpellHitFn(F) BeforeHitHandlerFunction(&F) + // example: OnHit += SpellHitFn(class::function); HookList<HitHandler> OnHit; // example: AfterHit += SpellHitFn(class::function); |
