diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fa78bdd34..8bb1efa4d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15171,6 +15171,8 @@ void Player::ActivateSpec(uint8 spec) else ++iter; } + + sScriptMgr->OnAfterSpecSlotChanged(this, GetActiveSpec()); } void Player::LoadActions(PreparedQueryResult result) diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index de924a6c6..c6ff46681 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -153,6 +153,14 @@ void ScriptMgr::OnPlayerTalentsReset(Player* player, bool noCost) }); } +void ScriptMgr::OnAfterSpecSlotChanged(Player* player, uint8 newSlot) +{ + ExecuteScript([=](PlayerScript* script) + { + script->OnAfterSpecSlotChanged(player, newSlot); + }); +} + void ScriptMgr::OnPlayerMoneyChanged(Player* player, int32& amount) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 113b3b877..ef504df1f 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1033,6 +1033,9 @@ public: // Called when a player's talent points are reset (right before the reset is done) virtual void OnTalentsReset(Player* /*player*/, bool /*noCost*/) { } + // Called after a player switches specs using the dual spec system + virtual void OnAfterSpecSlotChanged(Player* /*player*/, uint8 /*newSlot*/) { } + // Called for player::update virtual void OnBeforeUpdate(Player* /*player*/, uint32 /*p_time*/) { } virtual void OnUpdate(Player* /*player*/, uint32 /*p_time*/) { } @@ -2325,6 +2328,7 @@ public: /* PlayerScript */ void OnPlayerLevelChanged(Player* player, uint8 oldLevel); void OnPlayerFreeTalentPointsChanged(Player* player, uint32 newPoints); void OnPlayerTalentsReset(Player* player, bool noCost); + void OnAfterSpecSlotChanged(Player* player, uint8 newSlot); void OnPlayerMoneyChanged(Player* player, int32& amount); void OnBeforeLootMoney(Player* player, Loot* loot); void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource);