示例#1
0
 public virtual void SpawnSubEntities()
 {
     for (int i = 0; i < (int)this.mountPoints.Length; i++)
     {
         BaseVehicle.MountPointInfo component = this.mountPoints[i];
         Vector3 vector3  = Quaternion.Euler(component.rot) * Vector3.forward;
         Vector3 vector31 = component.pos;
         Vector3 vector32 = Vector3.up;
         if (component.bone != "")
         {
             vector31 = this.model.FindBone(component.bone).transform.position + base.transform.TransformDirection(component.pos);
             vector3  = base.transform.TransformDirection(vector3);
             vector32 = base.transform.up;
         }
         BaseEntity baseEntity = GameManager.server.CreateEntity(component.prefab.resourcePath, vector31, Quaternion.LookRotation(vector3, vector32), true);
         baseEntity.Spawn();
         if (component.bone == "")
         {
             baseEntity.SetParent(this, false, false);
         }
         else
         {
             baseEntity.SetParent(this, component.bone, true, true);
         }
         component.mountable = baseEntity.GetComponent <BaseMountable>();
     }
 }
示例#2
0
 BaseVehicle.MountPointInfo CreateMount(Vector3 vec, BaseVehicle.MountPointInfo exampleSeat, Vector3 rotation)
 {
     return(new BaseVehicle.MountPointInfo {
         pos = vec,
         rot = rotation != null ? rotation : new Vector3(0, 0, 0),
         bone = exampleSeat.bone,
         prefab = exampleSeat.prefab,
         mountable = exampleSeat.mountable
     });
 }
示例#3
0
        private void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (!killOnSleep)
            {
                return;
            }
            if (player == null)
            {
                return;
            }

            if (storedData.playerminiID.ContainsKey(player.userID) == true)
            {
                uint deluint;
                storedData.playerminiID.TryGetValue(player.userID, out deluint);
                BaseNetworkable tokill = BaseNetworkable.serverEntities.Find(deluint);
                if (tokill == null)
                {
                    return;                // Didn't find it
                }
                // Check for mounted players
                BaseVehicle copter = tokill as BaseVehicle;
                List <BaseVehicle.MountPointInfo> mountpoints = copter.mountPoints;
                for (int i = 0; i < (int)mountpoints.Count; i++)
                {
                    // error CS0029: Cannot implicitly convert type `System.Collections.Generic.List<BaseVehicle.MountPointInfo>' to `BaseVehicle.MountPointInfo[]'
                    BaseVehicle.MountPointInfo mountPointInfo = mountpoints[i];
                    if (mountPointInfo.mountable != null)
                    {
                        BasePlayer mounted = mountPointInfo.mountable.GetMounted();
                        if (mounted)
                        {
#if DEBUG
                            Puts("Copter owner sleeping but another one is mounted - cannot destroy copter");
#endif
                            return;
                        }
                    }
                }
#if DEBUG
                Puts("Copter owner sleeping - destroying copter");
#endif
                tokill.Kill();
                storedData.playerminiID.Remove(player.userID);
                var myKey = currentMounts.FirstOrDefault(x => x.Value == player.userID).Key;
                currentMounts.Remove(myKey);

                if (storedData.playercounter.ContainsKey(player.userID) & !useCooldown)
                {
                    storedData.playercounter.Remove(player.userID);
                }
                SaveData();
            }
        }
            public void Setup(BaseVehicle vehicle)
            {
                BaseVehicle.MountPointInfo pilot     = vehicle.mountPoints[0];
                BaseVehicle.MountPointInfo passenger = vehicle.mountPoints[1];

                vehicle.mountPoints.Add(MakeMount(vehicle, new Vector3(0.6f, 0.2f, -0.3f)));
                vehicle.mountPoints.Add(MakeMount(vehicle, new Vector3(-0.6f, 0.2f, -0.3f)));

                MakeSeat(vehicle, new Vector3(0.6f, 0.2f, -0.5f));
                MakeSeat(vehicle, new Vector3(-0.6f, 0.2f, -0.5f));
            }
示例#5
0
 public override void DismountAllPlayers()
 {
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null)
         {
             mountPointInfo.mountable.DismountAllPlayers();
         }
     }
 }
示例#6
0
 public virtual void SpawnSubEntities()
 {
     for (int index = 0; index < this.mountPoints.Length; ++index)
     {
         BaseVehicle.MountPointInfo mountPoint = this.mountPoints[index];
         Vector3    vector3 = Quaternion.op_Multiply(Quaternion.Euler(mountPoint.rot), Vector3.get_forward());
         BaseEntity entity  = GameManager.server.CreateEntity(mountPoint.prefab.resourcePath, mountPoint.pos, Quaternion.LookRotation(vector3, Vector3.get_up()), true);
         entity.Spawn();
         entity.SetParent((BaseEntity)this, false, false);
         mountPoint.mountable = (BaseMountable)((Component)entity).GetComponent <BaseMountable>();
     }
 }
示例#7
0
 public BasePlayer GetDriver()
 {
     if (!this.HasMountPoints())
     {
         return(this._mounted);
     }
     BaseVehicle.MountPointInfo mountPointInfo = this.mountPoints[0];
     if (mountPointInfo == null || mountPointInfo.mountable == null)
     {
         return(null);
     }
     return(mountPointInfo.mountable.GetMounted());
 }
示例#8
0
 public bool HasAnyPassengers()
 {
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null && mountPointInfo.mountable.GetMounted())
         {
             return(true);
         }
     }
     return(false);
 }
示例#9
0
 public bool HasDriver()
 {
     if (!this.HasMountPoints())
     {
         return(this.IsMounted());
     }
     BaseVehicle.MountPointInfo mountPointInfo = this.mountPoints[0];
     if (mountPointInfo == null || mountPointInfo.mountable == null)
     {
         return(false);
     }
     return(mountPointInfo.mountable.IsMounted());
 }
示例#10
0
 public bool HasDriver()
 {
     if (!this.HasMountPoints())
     {
         return(this.IsMounted());
     }
     BaseVehicle.MountPointInfo mountPoint = this.mountPoints[0];
     if (mountPoint == null || Object.op_Equality((Object)mountPoint.mountable, (Object)null))
     {
         return(false);
     }
     return(mountPoint.mountable.IsMounted());
 }
示例#11
0
 public int GetPlayerSeat(BasePlayer player)
 {
     if (!this.HasMountPoints() && Object.op_Equality((Object)this.GetMounted(), (Object)player))
     {
         return(0);
     }
     for (int index = 0; index < this.mountPoints.Length; ++index)
     {
         BaseVehicle.MountPointInfo mountPoint = this.mountPoints[index];
         if (Object.op_Inequality((Object)mountPoint.mountable, (Object)null) && Object.op_Equality((Object)mountPoint.mountable.GetMounted(), (Object)player))
         {
             return(index);
         }
     }
     return(-1);
 }
示例#12
0
 public int GetPlayerSeat(BasePlayer player)
 {
     if (!this.HasMountPoints() && base.GetMounted() == player)
     {
         return(0);
     }
     for (int i = 0; i < (int)this.mountPoints.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = this.mountPoints[i];
         if (mountPointInfo.mountable != null && mountPointInfo.mountable.GetMounted() == player)
         {
             return(i);
         }
     }
     return(-1);
 }
 public override void DismountAllPlayers()
 {
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null)
         {
             BasePlayer mounted = mountPointInfo.mountable.GetMounted();
             if (mounted)
             {
                 mounted.Hurt(10000f, DamageType.Explosion, this, false);
             }
         }
     }
 }
示例#14
0
 public void DelayedKill()
 {
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null)
         {
             BasePlayer mounted = mountPointInfo.mountable.GetMounted();
             if (mounted && mounted.transform != null && !mounted.IsDestroyed && !mounted.IsDead() && mounted.IsNpc)
             {
                 mounted.Kill(BaseNetworkable.DestroyMode.None);
             }
         }
     }
     base.Kill(BaseNetworkable.DestroyMode.None);
 }
示例#15
0
    public void SwapSeats(BasePlayer player, int targetSeat = 0)
    {
        if (!this.HasMountPoints())
        {
            return;
        }
        int playerSeat = this.GetPlayerSeat(player);

        if (playerSeat == -1)
        {
            return;
        }
        BaseMountable baseMountable  = this.mountPoints[playerSeat].mountable;
        int           num            = playerSeat;
        BaseMountable baseMountable1 = null;

        if (baseMountable1 == null)
        {
            int num1 = 0;
            while (num1 < (int)this.mountPoints.Length)
            {
                num++;
                if (num >= (int)this.mountPoints.Length)
                {
                    num = 0;
                }
                BaseVehicle.MountPointInfo mountPointInfo = this.mountPoints[num];
                if (!(mountPointInfo.mountable != null) || mountPointInfo.mountable.IsMounted() || this.IsSeatClipping(mountPointInfo.mountable, 1218511105) || !this.IsSeatVisible(mountPointInfo.mountable, player.eyes.position, 1218511105))
                {
                    num1++;
                }
                else
                {
                    baseMountable1 = mountPointInfo.mountable;
                    break;
                }
            }
        }
        if (baseMountable1 != null && baseMountable1 != baseMountable)
        {
            baseMountable.DismountPlayer(player, true);
            baseMountable1.MountPlayer(player);
            player.MarkSwapSeat();
        }
    }
示例#16
0
    public void SwapSeats(BasePlayer player, int targetSeat = 0)
    {
        if (!this.HasMountPoints())
        {
            return;
        }
        int playerSeat = this.GetPlayerSeat(player);

        if (playerSeat == -1)
        {
            return;
        }
        BaseMountable mountable     = this.mountPoints[playerSeat].mountable;
        int           index1        = playerSeat;
        BaseMountable baseMountable = (BaseMountable)null;

        if (Object.op_Equality((Object)baseMountable, (Object)null))
        {
            for (int index2 = 0; index2 < this.mountPoints.Length; ++index2)
            {
                ++index1;
                if (index1 >= this.mountPoints.Length)
                {
                    index1 = 0;
                }
                BaseVehicle.MountPointInfo mountPoint = this.mountPoints[index1];
                if (Object.op_Inequality((Object)mountPoint.mountable, (Object)null) && !mountPoint.mountable.IsMounted() && (!this.IsSeatClipping(mountPoint.mountable, 1218511105) && this.IsSeatVisible(mountPoint.mountable, player.eyes.position, 1218511105)))
                {
                    baseMountable = mountPoint.mountable;
                    break;
                }
            }
        }
        if (!Object.op_Inequality((Object)baseMountable, (Object)null) || !Object.op_Inequality((Object)baseMountable, (Object)mountable))
        {
            return;
        }
        mountable.DismountPlayer(player, true);
        baseMountable.MountPlayer(player);
        player.MarkSwapSeat();
    }
示例#17
0
 public void UnHostile()
 {
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null)
         {
             BasePlayer mounted = mountPointInfo.mountable.GetMounted();
             if (mounted)
             {
                 NPCPlayerApex nPCPlayerApex = mounted as NPCPlayerApex;
                 if (nPCPlayerApex)
                 {
                     nPCPlayerApex.Stats.Hostility     = 0f;
                     nPCPlayerApex.Stats.Defensiveness = 0f;
                 }
             }
         }
     }
 }
示例#18
0
    public int NumMounted()
    {
        if (!this.HasMountPoints())
        {
            if (!this.IsMounted())
            {
                return(0);
            }
            return(1);
        }
        int num = 0;

        for (int i = 0; i < (int)this.mountPoints.Length; i++)
        {
            BaseVehicle.MountPointInfo mountPointInfo = this.mountPoints[i];
            if (mountPointInfo.mountable != null && mountPointInfo.mountable.GetMounted() != null)
            {
                num++;
            }
        }
        return(num);
    }
示例#19
0
    public BaseMountable GetIdealMountPoint(Vector3 pos)
    {
        if (!this.HasMountPoints())
        {
            return(this);
        }
        BaseMountable baseMountable = null;
        float         single        = Single.PositiveInfinity;

        BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
        for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
        {
            BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
            float single1 = Vector3.Distance(mountPointInfo.mountable.mountAnchor.position, pos);
            if (single1 < single && !mountPointInfo.mountable.IsMounted() && !this.IsSeatClipping(mountPointInfo.mountable, 1218511105) && this.IsSeatVisible(mountPointInfo.mountable, pos, 1218511105))
            {
                baseMountable = mountPointInfo.mountable;
                single        = single1;
            }
        }
        return(baseMountable);
    }
示例#20
0
 public void InitiateAnger()
 {
     base.CancelInvoke(new Action(this.UnHostile));
     base.Invoke(new Action(this.UnHostile), 120f);
     BaseVehicle.MountPointInfo[] mountPointInfoArray = this.mountPoints;
     for (int i = 0; i < (int)mountPointInfoArray.Length; i++)
     {
         BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[i];
         if (mountPointInfo.mountable != null)
         {
             BasePlayer mounted = mountPointInfo.mountable.GetMounted();
             if (mounted)
             {
                 NPCPlayerApex nPCPlayerApex = mounted as NPCPlayerApex;
                 if (nPCPlayerApex)
                 {
                     nPCPlayerApex.Stats.Hostility     = 1f;
                     nPCPlayerApex.Stats.Defensiveness = 1f;
                 }
             }
         }
     }
 }
示例#21
0
            void Awake()
            {
                entity = GetComponent <BaseVehicle>();
                bool    isMini      = entity is MiniCopter;
                bool    isHorse     = entity is RidableHorse;
                Vector3 emptyVector = new Vector3(0, 0, 0);

                if (isMini)
                {
                    _instance.LogDebug("Minicopter detected");
                }
                if (isHorse)
                {
                    _instance.LogDebug("Horse detected");
                }

                if (entity == null)
                {
                    Destroy(this); return;
                }

                BaseVehicle.MountPointInfo pilot = entity.mountPoints[0];
                //entity.mountPoints.Clear();

                if (entity is RidableHorse)
                {
                    _instance.LogDebug("Adding passenger seat");
                    Vector3 horseVector = new Vector3(0f, -0.32f, -0.5f);
                    BaseVehicle.MountPointInfo horseBack = _instance.CreateMount(horseVector, pilot, emptyVector);
                    //entity.mountPoints.Add(pilot);
                    entity.mountPoints.Add(horseBack);
                    entity.SendNetworkUpdateImmediate();
                }

                if (entity is MiniCopter)
                {
                    BaseVehicle.MountPointInfo pFront = entity.mountPoints[1];
                    Vector3 leftVector  = new Vector3(0.6f, 0.2f, -0.2f);
                    Vector3 rightVector = new Vector3(-0.6f, 0.2f, -0.2f);
                    Vector3 backVector  = new Vector3(0.0f, 0.4f, -1.2f);
                    Vector3 backVector2 = new Vector3(0.0f, 0.4f, -1.45f);

                    Vector3    playerOffsetVector = new Vector3(0f, 0f, -0.25f);
                    Quaternion backQuaternion     = Quaternion.Euler(0f, 180f, 0f);

                    if (_instance.config.EnableMiniSideSeats)
                    {
                        _instance.LogDebug("Adding side seats");
                        BaseVehicle.MountPointInfo pLeftSide  = _instance.CreateMount(leftVector, pFront, emptyVector);
                        BaseVehicle.MountPointInfo pRightSide = _instance.CreateMount(rightVector, pFront, emptyVector);
                        entity.mountPoints.Add(pLeftSide);
                        entity.mountPoints.Add(pRightSide);
                        _instance.AddSeat(entity, leftVector + playerOffsetVector, new Quaternion());
                        _instance.AddSeat(entity, rightVector + playerOffsetVector, new Quaternion());
                    }

                    if (_instance.config.EnableMiniBackSeat)
                    {
                        _instance.LogDebug("Adding back/rotor seat");
                        BaseVehicle.MountPointInfo pBackReverse = _instance.CreateMount(backVector2, pFront, new Vector3(0f, 180f, 0f));
                        entity.mountPoints.Add(pBackReverse);
                        _instance.AddSeat(entity, backVector, backQuaternion);
                    }
                }
            }
示例#22
0
        private void GetMyMiniMyCopterChatCommand(BasePlayer player, string command, string[] args)
        {
            if (player.IsBuildingBlocked() & !allowWhenBlocked)
            {
                PrintMsgL(player, "BlockedMsg");
                return;
            }

            bool canspawn = permission.UserHasPermission(player.UserIDString, MinicopterSpawn);
            bool canfetch = permission.UserHasPermission(player.UserIDString, MinicopterFetch);

            if (!(canspawn & canfetch))
            {
                PrintMsgL(player, "NoPermMsg");
                return;
            }
            if (storedData.playerminiID.ContainsKey(player.userID) == true)
            {
                uint findme;
                storedData.playerminiID.TryGetValue(player.userID, out findme);
                var foundit = BaseNetworkable.serverEntities.Find(findme);
                if (foundit != null)
                {
                    var ent = BaseNetworkable.serverEntities.Find(findme);

                    // Distance check
                    if (gminidistance > 0f)
                    {
                        if (Vector3.Distance(player.transform.position, ent.transform.position) > gminidistance)
                        {
                            PrintMsgL(player, "DistanceMsg", gminidistance);
                            return;
                        }
                    }

                    // Check for and dismount all players before moving the copter
                    var copter = ent as BaseVehicle;
                    List <BaseVehicle.MountPointInfo> mountpoints = copter.mountPoints;
                    for (int i = 0; i < (int)mountpoints.Count; i++)
                    {
                        BaseVehicle.MountPointInfo mountPointInfo = mountpoints[i];
                        if (mountPointInfo.mountable != null)
                        {
                            BasePlayer mounted = mountPointInfo.mountable.GetMounted();
                            if (mounted)
                            {
                                Vector3 player_pos = mounted.transform.position + new Vector3(1, 0, 1);
                                mounted.DismountObject();
                                mounted.MovePosition(player_pos);
                                mounted.SendNetworkUpdateImmediate(false);
                                mounted.ClientRPCPlayer(null, player, "ForcePositionTo", player_pos);
                                mountPointInfo.mountable._mounted = null;
                            }
                        }
                    }
                    var newLoc = new Vector3((float)(player.transform.position.x + 2f), player.transform.position.y + 2f, (float)(player.transform.position.z + 2f));
                    foundit.transform.position = newLoc;
                    PrintMsgL(player, "FoundMsg", newLoc);
                }
                return;
            }
            else
            {
                PrintMsgL(player, "NoFoundMsg");
                return;
            }
        }
示例#23
0
        public override void StateThink(float delta)
        {
            bool            flag;
            Vector3         entity  = this.brain.GetEntity().transform.position;
            CH47LandingZone closest = CH47LandingZone.GetClosest(this.brain.GetEntity().landingTarget);

            if (!closest)
            {
                return;
            }
            float single = this.brain.GetEntity().rigidBody.velocity.magnitude;

            Vector3.Distance(closest.transform.position, entity);
            float single1 = Vector3Ex.Distance2D(closest.transform.position, entity);

            Mathf.InverseLerp(1f, 20f, single1);
            bool flag1 = single1 < 100f;
            bool flag2 = (single1 <= 15f ? false : entity.y < closest.transform.position.y + 10f);

            this.brain.GetEntity().EnableFacingOverride(flag1);
            this.brain.GetEntity().SetAltitudeProtection(flag2);
            flag = (Mathf.Abs(closest.transform.position.y - entity.y) >= 3f || single1 > 5f ? false : single < 1f);
            if (flag)
            {
                this.landedForSeconds += delta;
                if (this.lastLandtime == 0f)
                {
                    this.lastLandtime = Time.time;
                }
            }
            float single2 = 1f - Mathf.InverseLerp(0f, 7f, single1);

            this.landingHeight = this.landingHeight - 4f * single2 * Time.deltaTime;
            if (this.landingHeight < -5f)
            {
                this.landingHeight = -5f;
            }
            this.brain.GetEntity().SetAimDirection(closest.transform.forward);
            this.brain.GetEntity().SetMoveTarget(this.brain.mainInterestPoint + new Vector3(0f, this.landingHeight, 0f));
            if (flag)
            {
                if (this.landedForSeconds > 1f && Time.time > this.nextDismountTime)
                {
                    BaseVehicle.MountPointInfo[] mountPointInfoArray = this.brain.GetEntity().mountPoints;
                    int num = 0;
                    while (num < (int)mountPointInfoArray.Length)
                    {
                        BaseVehicle.MountPointInfo mountPointInfo = mountPointInfoArray[num];
                        if (!mountPointInfo.mountable || !mountPointInfo.mountable.IsMounted())
                        {
                            num++;
                        }
                        else
                        {
                            this.nextDismountTime = Time.time + 0.5f;
                            mountPointInfo.mountable.DismountAllPlayers();
                            break;
                        }
                    }
                }
                if (this.landedForSeconds > 8f)
                {
                    this.brain.GetComponent <CH47AIBrain>().age = Single.PositiveInfinity;
                }
            }
        }