diff options
| author | 55Honey <71938210+55Honey@users.noreply.github.com> | 2023-02-07 17:15:17 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-07 13:15:17 -0300 |
| commit | a1fb48391b2decd9d24bf05dcb29cc42cbead28a (patch) | |
| tree | d45fa00551758345c1a85b9d1fdb3d48574a5658 /src/server/game/Scripting | |
| parent | e7e119283f776746f34f409480c567e87f078483 (diff) | |
feat(Core/Scripting): Implement OnBeforeSetBossState (#14891)
Diffstat (limited to 'src/server/game/Scripting')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/GlobalScript.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp b/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp index f20e9515ce..1e10185dee 100644 --- a/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/GlobalScript.cpp @@ -15,6 +15,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "InstanceScript.h" #include "Player.h" #include "ScriptMgr.h" #include "ScriptMgrMacros.h" @@ -189,3 +190,20 @@ void ScriptMgr::OnInstanceIdRemoved(uint32 instanceId) script->OnInstanceIdRemoved(instanceId); }); } + +/** + * @brief Called when any raid boss has their state updated (e.g. pull, reset, kill). + * @details Careful checks for old- and newState are required, since it can fire multiple times and not only when combat starts/ends. + * + * @param id The id of the boss in the [instance] + * @param newState The new boss state to be applied to this boss + * @param oldState The previously assigned state of this boss + * @param instance A pointer to the [map] object of the instance + */ +void ScriptMgr::OnBeforeSetBossState(uint32 id, EncounterState newState, EncounterState oldState, Map* instance) +{ + ExecuteScript<GlobalScript>([&](GlobalScript* script) + { + script->OnBeforeSetBossState(id, newState, oldState, instance); + }); +} diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 450ecc6309..a94922d7d1 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -27,6 +27,7 @@ #include "DynamicObject.h" #include "GameEventMgr.h" #include "Group.h" +#include "InstanceScript.h" #include "LFGMgr.h" #include "ObjectMgr.h" #include "PetDefines.h" @@ -1597,6 +1598,9 @@ public: // Called when instance id is removed from database (e.g. instance reset) virtual void OnInstanceIdRemoved(uint32 /*instanceId*/) { } + + // 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*/) { } }; class BGScript : public ScriptObject @@ -2431,6 +2435,7 @@ public: /* GlobalScript */ void OnLoadSpellCustomAttr(SpellInfo* spell); bool OnAllowedForPlayerLootCheck(Player const* player, ObjectGuid source); void OnInstanceIdRemoved(uint32 instanceId); + void OnBeforeSetBossState(uint32 id, EncounterState newState, EncounterState oldState, Map* instance); public: /* Scheduled scripts */ uint32 IncreaseScheduledScriptsCount() { return ++_scheduledScripts; } |
