From aa89f6c3a6fd441dfc74a7a5ab07a309e6acdb1d Mon Sep 17 00:00:00 2001 From: Axel Cocat Date: Mon, 11 Jul 2022 14:11:26 +0200 Subject: [PATCH] feat(Core): add OnDisplayId hook (#12320) --- src/server/game/Entities/Unit/Unit.cpp | 2 ++ src/server/game/Scripting/ScriptDefines/UnitScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 3 +++ 3 files changed, 13 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 1bfbb3d5c..0e3f2dbb7 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16359,6 +16359,8 @@ void Unit::SetDisplayId(uint32 modelId) // Set Gender by modelId if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); + + sScriptMgr->OnDisplayIdChange(this, modelId); } void Unit::RestoreDisplayId() diff --git a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp index 7c7d755fd..86bcb42c8 100644 --- a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp @@ -210,3 +210,11 @@ void ScriptMgr::OnUnitUpdate(Unit* unit, uint32 diff) script->OnUnitUpdate(unit, diff); }); } + +void ScriptMgr::OnDisplayIdChange(Unit* unit, uint32 displayId) +{ + ExecuteScript([&](UnitScript* script) + { + script->OnDisplayIdChange(unit, displayId); + }); +} diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index ed213f619..550dadf4c 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -459,6 +459,8 @@ public: * @param diff Contains information about the diff time */ virtual void OnUnitUpdate(Unit* /*unit*/, uint32 /*diff*/) { } + + virtual void OnDisplayIdChange(Unit* /*unit*/, uint32 /*displayId*/) { } }; class MovementHandlerScript : public ScriptObject @@ -2400,6 +2402,7 @@ public: /* UnitScript */ bool IsCustomBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player const* target, uint16 index); bool OnBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player* target, uint16 index); void OnUnitUpdate(Unit* unit, uint32 diff); + void OnDisplayIdChange(Unit* unit, uint32 displayId); public: /* MovementHandlerScript */ void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);