diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-10-28 22:13:59 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-10-28 22:13:59 +0200 |
commit | 73e0b3e77c04a7821f58d79211f344b9129602f1 (patch) | |
tree | 315e6970f0c97c4b45019b564446b358b08c5969 /src/server/game/Handlers/MovementHandler.cpp | |
parent | b8770d96e43679c873f6643bcc81e46b6dcd497f (diff) |
Core/Creatures: Taxi improvements
* Fixed flight master minimap icon
* Fixed crash on Argus
* Implemented teleport taxi nodes
Closes #29389
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 103daba53d3..d7e9ca22edd 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -685,16 +685,26 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest); // far teleport case - if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId() && GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) + if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) { if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator())) { - // short preparations to continue flight - flight->SetCurrentNodeAfterTeleport(); - TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()]; - flight->SkipCurrentNode(); + bool shouldTeleport = curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId(); + if (!shouldTeleport) + { + TaxiPathNodeEntry const* currentNode = flight->GetPath()[flight->GetCurrentNode()]; + shouldTeleport = currentNode->Flags & TAXI_PATH_NODE_FLAG_TELEPORT; + } - GetPlayer()->TeleportTo(curDestNode->ContinentID, node->Loc.X, node->Loc.Y, node->Loc.Z, GetPlayer()->GetOrientation()); + if (shouldTeleport) + { + // short preparations to continue flight + flight->SetCurrentNodeAfterTeleport(); + TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()]; + flight->SkipCurrentNode(); + + GetPlayer()->TeleportTo(curDestNode->ContinentID, node->Loc.X, node->Loc.Y, node->Loc.Z, GetPlayer()->GetOrientation()); + } } } |