From 6d83465ad23eebffcbca58a6ed2d8e2e96ad70e9 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 21 Mar 2026 17:09:02 -0300 Subject: [PATCH] fix(Core/Taxi): Use original team for flight path lookups (#25165) Co-authored-by: Claude Opus 4.6 --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 5 +++++ src/server/game/Globals/ObjectMgr.h | 1 + src/server/game/Handlers/TaxiHandler.cpp | 6 +++--- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 44e6a734e..faa3b5053 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -10441,7 +10441,7 @@ void Player::SendTaxiNodeStatusMultiple() if (!creature->HasNpcFlag(UNIT_NPC_FLAG_FLIGHTMASTER)) return; - uint32 nearestNode = sObjectMgr->GetNearestTaxiNode(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetMapId(), GetTeamId()); + uint32 nearestNode = sObjectMgr->GetNearestTaxiNode(*creature, GetTeamId(true)); if (!nearestNode) return; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index fe9ccbce6..c3d639022 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7160,6 +7160,11 @@ void ObjectMgr::LoadAreaTriggerScripts() LOG_INFO("server.loading", " "); } +uint32 ObjectMgr::GetNearestTaxiNode(WorldLocation const& loc, uint32 teamId) +{ + return GetNearestTaxiNode(loc.GetPositionX(), loc.GetPositionY(), loc.GetPositionZ(), loc.GetMapId(), teamId); +} + uint32 ObjectMgr::GetNearestTaxiNode(float x, float y, float z, uint32 mapid, uint32 teamId) { bool found = false; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 1c6185a50..cbf2ff4e8 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -811,6 +811,7 @@ public: void GetPlayerLevelInfo(uint32 race, uint32 class_, uint8 level, PlayerLevelInfo* info) const; uint32 GetNearestTaxiNode(float x, float y, float z, uint32 mapid, uint32 teamId); + uint32 GetNearestTaxiNode(WorldLocation const& loc, uint32 teamId); void GetTaxiPath(uint32 source, uint32 destination, uint32& path, uint32& cost); uint32 GetTaxiMountDisplayId(uint32 id, TeamId teamId, bool allowed_alt_team = false); diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index 4fd089b6b..c4f21afed 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -43,7 +43,7 @@ void WorldSession::SendTaxiStatus(ObjectGuid guid) } // find taxi node - uint32 nearest = sObjectMgr->GetNearestTaxiNode(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetMapId(), player->GetTeamId()); + uint32 nearest = sObjectMgr->GetNearestTaxiNode(*unit, player->GetTeamId(true)); if (!nearest) { return; @@ -84,7 +84,7 @@ void WorldSession::HandleTaxiQueryAvailableNodes(WorldPacket& recvData) void WorldSession::SendTaxiMenu(Creature* unit) { // find current node - uint32 curloc = sObjectMgr->GetNearestTaxiNode(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetMapId(), GetPlayer()->GetTeamId()); + uint32 curloc = sObjectMgr->GetNearestTaxiNode(*unit, GetPlayer()->GetTeamId(true)); if (curloc == 0) return; @@ -127,7 +127,7 @@ void WorldSession::SendDoFlight(uint32 mountDisplayId, uint32 path, uint32 pathN bool WorldSession::SendLearnNewTaxiNode(Creature* unit) { // find current node - uint32 curloc = sObjectMgr->GetNearestTaxiNode(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetMapId(), GetPlayer()->GetTeamId()); + uint32 curloc = sObjectMgr->GetNearestTaxiNode(*unit, GetPlayer()->GetTeamId(true)); if (curloc == 0) return true; // `true` send to avoid WorldSession::SendTaxiMenu call with one more curlock seartch with same false result.