diff options
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.cpp')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 2e48d791525..7c94aa3ed55 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -97,6 +97,10 @@ struct is_script_database_bound<AchievementCriteriaScript> : std::true_type { }; template<> +struct is_script_database_bound<AreaTriggerEntityScript> + : std::true_type { }; + +template<> struct is_script_database_bound<SceneScript> : std::true_type { }; @@ -662,6 +666,35 @@ private: bool swapped; }; +/// This hook is responsible for swapping AreaTriggerEntityScript's +template<typename Base> +class ScriptRegistrySwapHooks<AreaTriggerEntityScript, Base> + : public ScriptRegistrySwapHookBase +{ +public: + ScriptRegistrySwapHooks() : swapped(false) { } + + void BeforeReleaseContext(std::string const& context) final override + { + auto const bounds = static_cast<Base*>(this)->_ids_of_contexts.equal_range(context); + if (bounds.first != bounds.second) + swapped = true; + } + + void BeforeSwapContext(bool /*initialize*/) override + { + swapped = false; + } + + void BeforeUnload() final override + { + ASSERT(!swapped); + } + +private: + bool swapped; +}; + /// This hook is responsible for swapping SceneScript's template<typename Base> class ScriptRegistrySwapHooks<SceneScript, Base> @@ -2337,6 +2370,73 @@ void ScriptMgr::ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& dama FOREACH_SCRIPT(PlayerScript)->ModifySpellDamageTaken(target, attacker, damage); } +// AreaTriggerEntityScript +void ScriptMgr::OnAreaTriggerEntityInitialize(AreaTrigger* areaTrigger) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnInitialize(areaTrigger); +} + +void ScriptMgr::OnAreaTriggerEntityCreate(AreaTrigger* areaTrigger) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnCreate(areaTrigger); +} + +void ScriptMgr::OnAreaTriggerEntityUpdate(AreaTrigger* areaTrigger, uint32 diff) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnUpdate(areaTrigger, diff); +} + +void ScriptMgr::OnAreaTriggerEntitySplineIndexReached(AreaTrigger* areaTrigger, int splineIndex) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnSplineIndexReached(areaTrigger, splineIndex); +} + +void ScriptMgr::OnAreaTriggerEntityDestinationReached(AreaTrigger* areaTrigger) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnDestinationReached(areaTrigger); +} + +void ScriptMgr::OnAreaTriggerEntityUnitEnter(AreaTrigger* areaTrigger, Unit* unit) +{ + ASSERT(areaTrigger); + ASSERT(unit); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnUnitEnter(areaTrigger, unit); +} + +void ScriptMgr::OnAreaTriggerEntityUnitExit(AreaTrigger* areaTrigger, Unit* unit) +{ + ASSERT(areaTrigger); + ASSERT(unit); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnUnitExit(areaTrigger, unit); +} + +void ScriptMgr::OnAreaTriggerEntityRemove(AreaTrigger* areaTrigger) +{ + ASSERT(areaTrigger); + + GET_SCRIPT(AreaTriggerEntityScript, areaTrigger->GetScriptId(), tmpscript); + tmpscript->OnRemove(areaTrigger); +} + // Scene void ScriptMgr::OnSceneStart(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate) { @@ -2546,6 +2646,12 @@ GroupScript::GroupScript(const char* name) ScriptRegistry<GroupScript>::Instance()->AddScript(this); } +AreaTriggerEntityScript::AreaTriggerEntityScript(const char* name) + : ScriptObject(name) +{ + ScriptRegistry<AreaTriggerEntityScript>::Instance()->AddScript(this); +} + // Specialize for each script type class like so: template class TC_GAME_API ScriptRegistry<SpellScriptLoader>; template class TC_GAME_API ScriptRegistry<ServerScript>; @@ -2573,4 +2679,5 @@ template class TC_GAME_API ScriptRegistry<GuildScript>; template class TC_GAME_API ScriptRegistry<GroupScript>; template class TC_GAME_API ScriptRegistry<UnitScript>; template class TC_GAME_API ScriptRegistry<AccountScript>; +template class TC_GAME_API ScriptRegistry<AreaTriggerEntityScript>; template class TC_GAME_API ScriptRegistry<SceneScript>; |