From 67918db7a0e2e382c00a3be325f8762d22f9914f Mon Sep 17 00:00:00 2001 From: sogladev Date: Sat, 21 Mar 2026 02:04:33 +0100 Subject: [PATCH] fix(Core/Unit): Improve vehicle exit safety checks and fallback logic (#24612) --- src/server/game/Entities/Unit/Unit.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 565b350cd..8712c7514 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15714,6 +15714,12 @@ void Unit::_ExitVehicle(Position const* exitPosition) pos.RelocateOffset({ seatAddon->ExitParameterX, seatAddon->ExitParameterY, seatAddon->ExitParameterZ, seatAddon->ExitParameterO }); else if (seatAddon->ExitParameter == VehicleExitParameters::VehicleExitParamDest) pos.Relocate({ seatAddon->ExitParameterX, seatAddon->ExitParameterY, seatAddon->ExitParameterZ, seatAddon->ExitParameterO }); + + bool isInLoS = GetMap()->isInLineOfSight(GetPositionX(), GetPositionY(), GetPositionZ(), pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), GetPhaseMask(), LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::Nothing); + float floorZ = GetMapHeight(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); + + if (!isInLoS || pos.GetPositionZ() < floorZ) + pos = vehicleBase->GetPosition(); } }