public void DismountPlayer(BasePlayer player, bool lite = false) { if (_mounted == null || _mounted != player || Interface.CallHook("CanDismountEntity", player, this) != null) { return; } BaseVehicle baseVehicle = VehicleParent(); Vector3 res; if (lite) { if (baseVehicle != null) { baseVehicle.PrePlayerDismount(player, this); } _mounted.DismountObject(); _mounted = null; SetFlag(Flags.Busy, false); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } Interface.CallHook("OnEntityDismounted", this, player); } else if (!GetDismountPosition(player, out res) || Distance(res) > 10f) { if (baseVehicle != null) { baseVehicle.PrePlayerDismount(player, this); } res = player.transform.position; _mounted.DismountObject(); _mounted.MovePosition(res); _mounted.ClientRPCPlayer(null, _mounted, "ForcePositionTo", res); BasePlayer mounted = _mounted; _mounted = null; Debug.LogWarning("Killing player due to invalid dismount point :" + player.displayName + " / " + player.userID + " on obj : " + base.gameObject.name); mounted.Hurt(1000f, DamageType.Suicide, mounted, false); SetFlag(Flags.Busy, false); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } } else { if (baseVehicle != null) { baseVehicle.PrePlayerDismount(player, this); } _mounted.DismountObject(); _mounted.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up); _mounted.MovePosition(res); _mounted.SendNetworkUpdateImmediate(); _mounted = null; SetFlag(Flags.Busy, false); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } player.ForceUpdateTriggers(); if ((bool)player.GetParentEntity()) { BaseEntity baseEntity = player.GetParentEntity(); player.ClientRPCPlayer(null, player, "ForcePositionToParentOffset", baseEntity.transform.InverseTransformPoint(res), baseEntity.net.ID); } else { Interface.CallHook("OnEntityDismounted", this, player); player.ClientRPCPlayer(null, player, "ForcePositionTo", res); } OnPlayerDismounted(player); } }