public void DismountPlayer(BasePlayer player, bool lite = false) { Vector3 vector3; if (this._mounted == null) { return; } if (this._mounted != player) { return; } if (Interface.CallHook("CanDismountEntity", player, this) != null) { return; } BaseVehicle baseVehicle = this.VehicleParent(); if (lite) { this._mounted.DismountObject(); this._mounted = null; base.SetFlag(BaseEntity.Flags.Busy, false, false, true); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } return; } if (this.GetDismountPosition(player, out vector3) && base.Distance(vector3) <= 10f) { this._mounted.DismountObject(); this._mounted.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up); this._mounted.MovePosition(vector3); this._mounted.SendNetworkUpdateImmediate(false); this._mounted = null; base.SetFlag(BaseEntity.Flags.Busy, false, false, true); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } player.ForceUpdateTriggers(true, true, true); if (!player.GetParentEntity()) { player.ClientRPCPlayer <Vector3>(null, player, "ForcePositionTo", vector3); Interface.CallHook("OnEntityDismounted", this, player); return; } BaseEntity parentEntity = player.GetParentEntity(); player.ClientRPCPlayer <Vector3, uint>(null, player, "ForcePositionToParentOffset", parentEntity.transform.InverseTransformPoint(vector3), parentEntity.net.ID); return; } vector3 = player.transform.position; this._mounted.DismountObject(); this._mounted.MovePosition(vector3); this._mounted.ClientRPCPlayer <Vector3>(null, this._mounted, "ForcePositionTo", vector3); BasePlayer basePlayer = this._mounted; this._mounted = null; Debug.LogWarning(string.Concat(new object[] { "Killing player due to invalid dismount point :", player.displayName, " / ", player.userID, " on obj : ", base.gameObject.name })); basePlayer.Hurt(1000f, DamageType.Suicide, basePlayer, false); base.SetFlag(BaseEntity.Flags.Busy, false, false, true); if (baseVehicle != null) { baseVehicle.PlayerDismounted(player, this); } }
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); } }