From a5a66207c4d56b0ae0eb2968b99bbd933f071589 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 1 Jan 2022 23:37:04 -0300 Subject: [PATCH] feat(Core/Scripting): OnBuildValuesUpdate hook (#9961) --- src/server/game/Entities/Unit/Unit.cpp | 7 +++++++ .../game/Scripting/ScriptDefines/UnitScript.cpp | 12 ++++++++++++ src/server/game/Scripting/ScriptMgr.h | 3 +++ 3 files changed, 22 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ebead0d83..d1c9780f0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -20082,8 +20082,15 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) } } else + { + if (!sScriptMgr->OnBuildValuesUpdate(this, updateType, fieldBuffer, target, index)) + { + continue; + } + // send in current format (float as float, uint32 as uint32) fieldBuffer << m_uint32Values[index]; + } } } diff --git a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp index c2e6ce19c..c2f26ac5d 100644 --- a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp @@ -191,6 +191,18 @@ bool ScriptMgr::IsCustomBuildValuesUpdate(Unit const* unit, uint8 updateType, By return false; } +bool ScriptMgr::OnBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player* target, uint16 index) +{ + auto ret = IsValidBoolScript([&](UnitScript* script) { return script->OnBuildValuesUpdate(unit, updateType, fieldBuffer, target, index); }); + + if (ret && *ret) + { + return true; + } + + return false; +} + void ScriptMgr::OnUnitUpdate(Unit* unit, uint32 diff) { ExecuteScript([&](UnitScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 2637b7da9..875bc171d 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -445,6 +445,8 @@ public: [[nodiscard]] virtual bool IsCustomBuildValuesUpdate(Unit const* /*unit*/, uint8 /*updateType*/, ByteBuffer& /*fieldBuffer*/, Player const* /*target*/, uint16 /*index*/) { return false; } + [[nodiscard]] virtual bool OnBuildValuesUpdate(Unit const* /*unit*/, uint8 /*updateType*/, ByteBuffer& /*fieldBuffer*/, Player* /*target*/, uint16 /*index*/) { return false; } + /** * @brief This hook runs in Unit::Update * @@ -2361,6 +2363,7 @@ public: /* UnitScript */ bool IsNeedModHealPercent(Unit const* unit, AuraEffect* auraEff, float& doneTotalMod, SpellInfo const* spellProto); bool CanSetPhaseMask(Unit const* unit, uint32 newPhaseMask, bool update); 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); public: /* MovementHandlerScript */