fix(Core/Transport): Fix for passengers dropped in the middle of nowhere (#21296)

This commit is contained in:
p-tkachuk 2025-02-08 05:53:57 +01:00 committed by GitHub
parent fd67f8e004
commit b07e545bae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -582,7 +582,22 @@ void MotionTransport::DelayedTeleportTransport()
float destX, destY, destZ, destO;
obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO);
TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o);
if (!obj->ToPlayer()->TeleportTo(newMapId, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT))
Player* player = obj->ToPlayer();
// Vehicle passengers are dropped in the middle of nowhere, so lets try to eject them, add to the transport and teleport
// this needs to be revisited to properly restore vehicles with passengers after transport teleportation
if (player->IsVehicle())
if (Vehicle* vehicleKit = player->GetVehicleKit())
for (SeatMap::iterator itr = vehicleKit->Seats.begin(); itr != vehicleKit->Seats.end(); ++itr)
if (Player* passenger = ObjectAccessor::GetPlayer(*player, itr->second.Passenger.Guid))
{
passenger->ExitVehicle();
AddPassenger(passenger, true);
if (!passenger->TeleportTo(newMapId, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT))
_passengers.erase(passenger);
}
if (!player->TeleportTo(newMapId, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT))
_passengers.erase(obj);
}
break;