void HandleEjectPassenger(EjectPassenger packet) { Vehicle vehicle = GetPlayer().GetVehicleKit(); if (!vehicle) { Log.outError(LogFilter.Network, "HandleEjectPassenger: {0} is not in a vehicle!", GetPlayer().GetGUID().ToString()); return; } if (packet.Passenger.IsUnit()) { Unit unit = Global.ObjAccessor.GetUnit(GetPlayer(), packet.Passenger); if (!unit) { Log.outError(LogFilter.Network, "{0} tried to eject {1} from vehicle, but the latter was not found in world!", GetPlayer().GetGUID().ToString(), packet.Passenger.ToString()); return; } if (!unit.IsOnVehicle(vehicle.GetBase())) { Log.outError(LogFilter.Network, "{0} tried to eject {1}, but they are not in the same vehicle", GetPlayer().GetGUID().ToString(), packet.Passenger.ToString()); return; } VehicleSeatRecord seat = vehicle.GetSeatForPassenger(unit); Cypher.Assert(seat != null); if (seat.IsEjectable()) { unit.ExitVehicle(); } else { Log.outError(LogFilter.Network, "{0} attempted to eject {1} from non-ejectable seat.", GetPlayer().GetGUID().ToString(), packet.Passenger.ToString()); } } else { Log.outError(LogFilter.Network, "HandleEjectPassenger: {0} tried to eject invalid {1}", GetPlayer().GetGUID().ToString(), packet.Passenger.ToString()); } }