From e956ea4e62c3b1c2788b4444a36d76837c41582c Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 19 Feb 2017 09:06:37 +0100 Subject: [PATCH] Game/Scripting: Add OnGameEvent hook for game objects. Called when specific game event starts --- src/server/game/Events/GameEventMgr.cpp | 6 ++++++ src/server/game/Scripting/ScriptMgr.cpp | 5 +++++ src/server/game/Scripting/ScriptMgr.h | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index fc67aa5dfa3..37120f36f51 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -28,6 +28,7 @@ #include "BattlegroundMgr.h" #include "UnitAI.h" #include "GameObjectAI.h" +#include "ScriptMgr.h" GameEventMgr* GameEventMgr::instance() { @@ -1642,8 +1643,13 @@ class GameEventAIHookWorker void Visit(std::unordered_map& gameObjectMap) { for (auto const& p : gameObjectMap) + { if (p.second->IsInWorld()) + { p.second->AI()->OnGameEvent(_activate, _eventId); + sScriptMgr->OnGameEvent(_activate, _eventId); + } + } } template diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index c332087470c..f8160dcc9eb 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1510,6 +1510,11 @@ InstanceScript* ScriptMgr::CreateInstanceData(InstanceMap* map) return tmpscript->GetInstanceScript(map); } +void ScriptMgr::OnGameEvent(bool start, uint16 eventId) +{ + FOREACH_SCRIPT(GameObjectScript)->OnGameEvent(start, eventId); +} + bool ScriptMgr::OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, Item* target) { ASSERT(caster); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 9a9e8712843..ae19302c86f 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -483,6 +483,9 @@ class TC_GAME_API GameObjectScript : public ScriptObject, public UpdatableScript // Called when a GameObjectAI object is needed for the gameobject. virtual GameObjectAI* GetAI(GameObject* /*go*/) const { return NULL; } + + // Called when specific game event starts. + virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) { } }; class TC_GAME_API AreaTriggerScript : public ScriptObject @@ -983,6 +986,7 @@ class TC_GAME_API ScriptMgr void OnGameObjectStateChanged(GameObject* go, uint32 state); void OnGameObjectUpdate(GameObject* go, uint32 diff); GameObjectAI* GetGameObjectAI(GameObject* go); + void OnGameEvent(bool start, uint16 eventId); public: /* AreaTriggerScript */