Ejemplo n.º 1
0
    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);
        }
    }
Ejemplo n.º 2
0
    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);
        }
    }