From 0246faa95a39ab92a294cf69fe7aecfeff1d77c2 Mon Sep 17 00:00:00 2001 From: Axel Cocat Date: Sun, 29 Mar 2026 01:20:27 +0100 Subject: [PATCH] feat(Core/Scripting): Add `OnPlayerLearnTaxiNode` hook (#25288) --- src/server/game/Handlers/TaxiHandler.cpp | 4 ++++ src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 5 +++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 9 +++++++++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index c4f21afed..1a493c7d3 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -142,6 +142,8 @@ bool WorldSession::SendLearnNewTaxiNode(Creature* unit) update << uint8(1); SendPacket(&update); + sScriptMgr->OnPlayerLearnTaxiNode(GetPlayer(), curloc); + return true; } else @@ -154,6 +156,8 @@ void WorldSession::SendDiscoverNewTaxiNode(uint32 nodeid) { WorldPacket msg(SMSG_NEW_TAXI_PATH, 0); SendPacket(&msg); + + sScriptMgr->OnPlayerLearnTaxiNode(GetPlayer(), nodeid); } } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 72dcb83e8..c33c13d7c 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -925,6 +925,11 @@ void ScriptMgr::OnPlayerGetReputationPriceDiscount(Player const* player, Faction CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_GET_REPUTATION_PRICE_DISCOUNT, script->OnPlayerGetReputationPriceDiscount(player, factionTemplate, discount)); } +void ScriptMgr::OnPlayerLearnTaxiNode(Player const* player, uint32 nodeId) +{ + CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_LEARN_TAXI_NODE, script->OnPlayerLearnTaxiNode(player, nodeId)); +} + PlayerScript::PlayerScript(const char* name, std::vector enabledHooks) : ScriptObject(name, PLAYERHOOK_END) { diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index e0418eb87..e25fc82b8 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -210,6 +210,7 @@ enum PlayerHook PLAYERHOOK_ON_SEND_LIST_INVENTORY, PLAYERHOOK_ON_GIVE_REPUTATION, PLAYERHOOK_ON_GET_REPUTATION_PRICE_DISCOUNT, + PLAYERHOOK_ON_LEARN_TAXI_NODE, PLAYERHOOK_END }; @@ -820,6 +821,14 @@ public: * @param discount Float value of the discount, as a multiplier of the base price */ virtual void OnPlayerGetReputationPriceDiscount(Player const* /*player*/, FactionTemplateEntry const* /*factionTemplate*/, float& /*discount*/) {} + + /** + * @brief This hook is called when a player learns a new flight path node. + * + * @param player Contains information about the Player + * @param nodeId The id of the learned taxi node + */ + virtual void OnPlayerLearnTaxiNode(Player const* /*player*/, uint32 /*nodeId*/) {} }; #endif diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 6f139bbd0..070a97c09 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -466,6 +466,7 @@ public: /* PlayerScript */ void OnPlayerSendListInventory(Player* player, ObjectGuid vendorGuid, uint32& vendorEntry); void OnPlayerGetReputationPriceDiscount(Player const* player, Creature const* creature, float& discount); void OnPlayerGetReputationPriceDiscount(Player const* player, FactionTemplateEntry const* factionTemplate, float& discount); + void OnPlayerLearnTaxiNode(Player const* player, uint32 nodeId); // Anti cheat void AnticheatSetCanFlybyServer(Player* player, bool apply);