From a83cd03bfb8539f9be77dafc0252018c79bfaeca Mon Sep 17 00:00:00 2001 From: ianmeesters <124554706+ianmeesters@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:06:07 +0200 Subject: [PATCH] feat(Core/Player): add OnCalculateTalentsPoints hook (#19749) * playerTalentsHook * oeps :# * :# * does this work? * make reference --------- Co-authored-by: Amy Fang --- src/server/game/Entities/Player/Player.cpp | 1 + src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 5 +++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 4 ++++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 11 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6a25a83c2..2f2fec96e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -13584,6 +13584,7 @@ uint32 Player::CalculateTalentsPoints() const } talentPointsForLevel += m_extraBonusTalentCount; + sScriptMgr->OnCalculateTalentsPoints(this, talentPointsForLevel); return uint32(talentPointsForLevel * sWorld->getRate(RATE_TALENT)); } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 61d6cd18b..022914352 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -54,6 +54,11 @@ void ScriptMgr::OnPlayerJustDied(Player* player) CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_PLAYER_JUST_DIED, script->OnPlayerJustDied(player)); } +void ScriptMgr::OnCalculateTalentsPoints(Player const* player, uint32& talentPointsForLevel) +{ + CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_CALCULATE_TALENTS_POINTS, script->OnCalculateTalentsPoints(player, talentPointsForLevel)); +} + void ScriptMgr::OnPlayerReleasedGhost(Player* player) { CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_PLAYER_RELEASED_GHOST, script->OnPlayerReleasedGhost(player)); diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index 9495c1b5d..dfe68b18c 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -28,6 +28,7 @@ enum PlayerHook { PLAYERHOOK_ON_PLAYER_JUST_DIED, + PLAYERHOOK_ON_CALCULATE_TALENTS_POINTS, PLAYERHOOK_ON_PLAYER_RELEASED_GHOST, PLAYERHOOK_ON_SEND_INITIAL_PACKETS_BEFORE_ADD_TO_MAP, PLAYERHOOK_ON_BATTLEGROUND_DESERTION, @@ -213,6 +214,9 @@ public: // Called when a player dies virtual void OnPlayerJustDied(Player* /*player*/) { } + // Called player talent points are calculated + virtual void OnCalculateTalentsPoints(Player const* /*player*/, uint32& /*talentPointsForLevel*/) { } + // Called when clicking the release button virtual void OnPlayerReleasedGhost(Player* /*player*/) { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index eed0d2f20..5096b9919 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -298,6 +298,7 @@ public: /* PlayerScript */ void OnPlayerUpdate(Player* player, uint32 p_time); void OnSendInitialPacketsBeforeAddToMap(Player* player, WorldPacket& data); void OnPlayerJustDied(Player* player); + void OnCalculateTalentsPoints(Player const* player, uint32& talentPointsForLevel); void OnPlayerReleasedGhost(Player* player); void OnPVPKill(Player* killer, Player* killed); void OnPlayerPVPFlagChange(Player* player, bool state);