diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index d2e2b8bbe..459d65929 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -70,6 +70,7 @@ void InstanceScript::OnGameObjectCreate(GameObject* go) { AddObject(go); AddDoor(go); + sScriptMgr->AfterInstanceGameObjectCreate(instance, go); } void InstanceScript::OnGameObjectRemove(GameObject* go) diff --git a/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp b/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp index 7ad7b251e..86fe0ae8c 100644 --- a/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp @@ -232,6 +232,20 @@ void ScriptMgr::OnBeforeSetBossState(uint32 id, EncounterState newState, Encount }); } +/** + * @brief Called when a game object is created inside an instance + * + * @param instance A pointer to the [map] object of the instance + * @param go The object being added + */ +void ScriptMgr::AfterInstanceGameObjectCreate(Map* instance, GameObject* go) +{ + ExecuteScript([&](GlobalScript* script) + { + script->AfterInstanceGameObjectCreate(instance, go); + }); +} + GlobalScript::GlobalScript(const char* name) : ScriptObject(name) { diff --git a/src/server/game/Scripting/ScriptDefines/GlobalScript.h b/src/server/game/Scripting/ScriptDefines/GlobalScript.h index 7dd370a3a..849fd3c87 100644 --- a/src/server/game/Scripting/ScriptDefines/GlobalScript.h +++ b/src/server/game/Scripting/ScriptDefines/GlobalScript.h @@ -72,6 +72,9 @@ public: // Called when any raid boss has their state updated (e.g. pull, reset, kill) virtual void OnBeforeSetBossState(uint32 /*id*/, EncounterState /*newState*/, EncounterState /*oldState*/, Map* /*instance*/) { } + + // Called when a gameobject is created by an instance + virtual void AfterInstanceGameObjectCreate(Map* /*instance*/, GameObject* /*go*/) { } }; #endif diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 42ab7e15b..94ba6496b 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -518,6 +518,7 @@ public: /* GlobalScript */ bool OnAllowedToLootContainerCheck(Player const* player, ObjectGuid source); void OnInstanceIdRemoved(uint32 instanceId); void OnBeforeSetBossState(uint32 id, EncounterState newState, EncounterState oldState, Map* instance); + void AfterInstanceGameObjectCreate(Map* instance, GameObject* go); public: /* Scheduled scripts */ uint32 IncreaseScheduledScriptsCount() { return ++_scheduledScripts; }