From 57b9b296d85ff39bcd13859ff5f6abbda904c192 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 20 Feb 2022 17:39:08 -0300 Subject: [PATCH] feat(Scripting/Hooks): Implement OnGameEventCheck() hook (#10761) --- src/server/game/Events/GameEventMgr.cpp | 3 +++ .../game/Scripting/ScriptDefines/GameEventScript.cpp | 8 ++++++++ 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 b2d552ba2..fa574f278 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1136,6 +1136,9 @@ uint32 GameEventMgr::Update() // return the next e // must do the activating first, and after that the deactivating // so first queue it //LOG_ERROR("sql.sql", "Checking event {}", itr); + + sScriptMgr->OnGameEventCheck(itr); + if (CheckOneGameEvent(itr)) { // if the world event is in NEXTPHASE state, and the time has passed to finish this event, then do so diff --git a/src/server/game/Scripting/ScriptDefines/GameEventScript.cpp b/src/server/game/Scripting/ScriptDefines/GameEventScript.cpp index d489083ce..2382092ab 100644 --- a/src/server/game/Scripting/ScriptDefines/GameEventScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/GameEventScript.cpp @@ -33,3 +33,11 @@ void ScriptMgr::OnGameEventStop(uint16 EventID) script->OnStop(EventID); }); } + +void ScriptMgr::OnGameEventCheck(uint16 EventID) +{ + ExecuteScript([&](GameEventScript* script) + { + script->OnEventCheck(EventID); + }); +} diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 95561b637..a1860b269 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1717,6 +1717,9 @@ public: // Runs on stop event virtual void OnStop(uint16 /*EventID*/) { } + + // Runs on event check + virtual void OnEventCheck(uint16 /*EventID*/) { } }; class MailScript : public ScriptObject @@ -2437,6 +2440,7 @@ public: /* SpellSC */ public: /* GameEventScript */ void OnGameEventStart(uint16 EventID); void OnGameEventStop(uint16 EventID); + void OnGameEventCheck(uint16 EventID); public: /* MailScript */ void OnBeforeMailDraftSendMailTo(MailDraft* mailDraft, MailReceiver const& receiver, MailSender const& sender, MailCheckMask& checked, uint32& deliver_delay, uint32& custom_expiration, bool& deleteMailItemsFromDB, bool& sendMail);