diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-07-19 13:44:18 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-07-19 13:44:18 +0200 |
commit | d949f86e280120518816d01660a2001ec0f18f4f (patch) | |
tree | c8609ac306e63e79ed5e6754ce36e13b0c470dd4 /src/server/game/Scripting/ScriptMgr.h | |
parent | 5be076b2400364c5fc2b293032ad92f1d955ec1f (diff) |
Scripts/Spells: Allow using templated spell script with multiple template arguments in RegisterSpellScriptWithArgs
* Also fixed some script conversion issues
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.h')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index f20652607b2..fe3fb48df79 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -22,6 +22,7 @@ #include "ObjectGuid.h" #include "Tuples.h" #include "Types.h" +#include <boost/preprocessor/punctuation/remove_parens.hpp> #include <memory> #include <vector> @@ -1339,6 +1340,8 @@ class GenericSpellAndAuraScriptLoader : public SpellScriptLoader using AuraScriptType = typename Trinity::find_type_if_t<Trinity::SpellScripts::is_AuraScript, Ts...>; using ArgsType = typename Trinity::find_type_if_t<Trinity::is_tuple, Ts...>; + static_assert(!std::conjunction_v<std::is_same<SpellScriptType, Trinity::find_type_end>, std::is_same<AuraScriptType, Trinity::find_type_end>>, "At least one of SpellScript/AuraScript arguments must be provided for GenericSpellAndAuraScriptLoader"); + public: GenericSpellAndAuraScriptLoader(char const* name, ArgsType&& args) : SpellScriptLoader(name), _args(std::move(args)) { } @@ -1362,9 +1365,9 @@ private: ArgsType _args; }; -#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader<spell_script, decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__)) +#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader<BOOST_PP_REMOVE_PARENS(spell_script), decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__)) #define RegisterSpellScript(spell_script) RegisterSpellScriptWithArgs(spell_script, #spell_script) -#define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name, ...) new GenericSpellAndAuraScriptLoader<script_1, script_2, decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__)) +#define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name, ...) new GenericSpellAndAuraScriptLoader<BOOST_PP_REMOVE_PARENS(script_1), BOOST_PP_REMOVE_PARENS(script_2), decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__)) #define RegisterSpellAndAuraScriptPair(script_1, script_2) RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, #script_1) template <class AI> |