public static void strafe(ConsoleSystem.Arg arg)
        {
            RaycastHit raycastHit;
            BasePlayer basePlayer = arg.Player();

            if (!basePlayer)
            {
                return;
            }
            PatrolHelicopterAI patrolHelicopterAI = PatrolHelicopterAI.heliInstance;

            if (patrolHelicopterAI == null)
            {
                Debug.Log("no heli instance");
                return;
            }
            if (!UnityEngine.Physics.Raycast(basePlayer.eyes.HeadRay(), out raycastHit, 1000f, 1218652417))
            {
                Debug.Log("strafe ray missed");
                return;
            }
            Debug.Log(string.Concat("strafing :", raycastHit.point));
            patrolHelicopterAI.interestZoneOrigin = raycastHit.point;
            patrolHelicopterAI.ExitCurrentState();
            patrolHelicopterAI.State_Strafe_Enter(raycastHit.point, false);
        }
Exemple #2
0
        public static void strafe(ConsoleSystem.Arg arg)
        {
            BasePlayer basePlayer = arg.Player();

            if (!Object.op_Implicit((Object)basePlayer))
            {
                return;
            }
            PatrolHelicopterAI heliInstance = PatrolHelicopterAI.heliInstance;

            if (Object.op_Equality((Object)heliInstance, (Object)null))
            {
                Debug.Log((object)"no heli instance");
            }
            else
            {
                RaycastHit raycastHit;
                if (Physics.Raycast(basePlayer.eyes.HeadRay(), ref raycastHit, 1000f, 1218652417))
                {
                    Debug.Log((object)("strafing :" + (object)((RaycastHit) ref raycastHit).get_point()));
                    heliInstance.interestZoneOrigin = ((RaycastHit) ref raycastHit).get_point();
                    heliInstance.ExitCurrentState();
                    heliInstance.State_Strafe_Enter(((RaycastHit) ref raycastHit).get_point(), false);
                }
                else
                {
                    Debug.Log((object)"strafe ray missed");
                }
            }
        }
Exemple #3
0
        private void OnEntitySpawned(BaseEntity Entity)
        {
            if (Entity == null)
            {
                return;
            }
            if (Entity is BaseHelicopter)
            {
                anim = 0;
                BaseHelicopter helicopter = Entity as BaseHelicopter;
                baseent.Add(helicopter, Entity);

                var position = Entity.ServerPosition;
                baseposition.Remove(helicopter);
                baseposition.Add(helicopter, position);

                PatrolHelicopterAI AI = Entity.GetComponent <PatrolHelicopterAI>();
                baseai.Add(helicopter, AI);

                BaseCombatEntity pat = Entity as BaseCombatEntity;
                basecombat.Add(helicopter, pat);

                //GenerateMarkers(helicopter);
                DisplayBannerToAll("spawn");

                if (debug == true)
                {
                    Puts($"BEFORE TIMER - IN BasePosition : {baseposition.Count}");
                }                                                                                                       // bonus info

                AfterSpawn();
            }
        }
        public static void strafe(Arg arg)
        {
            BasePlayer basePlayer = ArgEx.Player(arg);

            if ((bool)basePlayer)
            {
                PatrolHelicopterAI heliInstance = PatrolHelicopterAI.heliInstance;
                RaycastHit         hitInfo;
                if (heliInstance == null)
                {
                    Debug.Log("no heli instance");
                }
                else if (UnityEngine.Physics.Raycast(basePlayer.eyes.HeadRay(), out hitInfo, 1000f, 1218652417))
                {
                    Debug.Log("strafing :" + hitInfo.point);
                    heliInstance.interestZoneOrigin = hitInfo.point;
                    heliInstance.ExitCurrentState();
                    heliInstance.State_Strafe_Enter(hitInfo.point);
                }
                else
                {
                    Debug.Log("strafe ray missed");
                }
            }
        }
Exemple #5
0
        private void CallHeli(int amount)
        {
            int i = 0;

            while (i < amount)
            {
                BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true);
                if (!entity)
                {
                    return;
                }
                PatrolHelicopterAI heliAI = entity.GetComponent <PatrolHelicopterAI>();
                entity.Spawn();
                currentHelis.Add(entity);

                float mapSize = (TerrainMeta.Size.x / 2) - 50f;
                entity.transform.position = new Vector3(-mapSize, 30, mapSize);
                if (heliToInit)
                {
                    if (initiator != null)
                    {
                        entity.GetComponent <PatrolHelicopterAI>().State_Move_Enter(initiator.transform.position + new Vector3(0.0f, 20f, 0.0f));
                    }
                }
                i++;
            }
        }
Exemple #6
0
        private bool CallHeliForPlayer(BasePlayer player)
        {
            var   playerPos = player.transform.position;
            float mapWidth  = (TerrainMeta.Size.x / 2) - 50f;
            var   heliPos   = new Vector3(
                playerPos.x < 0 ? -mapWidth : mapWidth,
                30,
                playerPos.z < 0 ? -mapWidth : mapWidth
                );

            BaseHelicopter heli = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true) as BaseHelicopter;

            if (!heli)
            {
                return(false);
            }
            PatrolHelicopterAI heliAI = heli.GetComponent <PatrolHelicopterAI>();

            heli.Spawn();
            heli.transform.position = heliPos;
            var component = heli.gameObject.AddComponent <PersonalHeliComponent>();

            component.Init(this, player);
            foreach (var p in BasePlayer.activePlayerList)
            {
                SendReply(p, _("PlayerCalled", p.UserIDString, $"<color=#63ff64>{player.displayName}</color>"));
            }
            return(true);
        }
 void Awake()
 {
     helicopter = GetComponent <BaseHelicopter>();
     ai         = GetComponent <PatrolHelicopterAI>();
     heliId     = CuiHelper.GetGuid();
     isDieing   = false;
     enabled    = false;
 }
Exemple #8
0
        // Hide from the patrol helicopter
        private object CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer basePlayer)
        {
            if (IsInvisible(basePlayer))
            {
                return(false);
            }

            return(null);
        }
Exemple #9
0
        // heli
        private object CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer basePlayer)
        {
            if (_data.Contains(basePlayer))
            {
                return(false);
            }

            return(null);
        }
Exemple #10
0
        private object CanHelicopterTarget(PatrolHelicopterAI heli, BaseEntity entity)
        {
            if (IsWearingBarrel(entity))
            {
                return(false);
            }

            return(null);
        }
Exemple #11
0
        private object CanHelicopterStrafeTarget(PatrolHelicopterAI entity, BasePlayer target)
        {
            if (_data.Contains(target))
            {
                return(false);
            }

            return(null);
        }
 bool CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer player)
 {
     if (player != null && permission.UserHasPermission(player.UserIDString, config.perm))
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Exemple #13
0
 public override void ServerInit()
 {
     base.ServerInit();
     this.myAI = base.GetComponent <PatrolHelicopterAI>();
     if (!this.myAI.hasInterestZone)
     {
         this.myAI.SetInitialDestination(Vector3.zero, 1.25f);
         this.myAI.targetThrottleSpeed = 1f;
         this.myAI.ExitCurrentState();
         this.myAI.State_Patrol_Enter();
     }
 }
Exemple #14
0
 public override void ServerInit()
 {
     base.ServerInit();
     this.myAI = (PatrolHelicopterAI)((Component)this).GetComponent <PatrolHelicopterAI>();
     if (this.myAI.hasInterestZone)
     {
         return;
     }
     this.myAI.SetInitialDestination(Vector3.get_zero(), 1.25f);
     this.myAI.targetThrottleSpeed = 1f;
     this.myAI.ExitCurrentState();
     this.myAI.State_Patrol_Enter();
 }
 void Awake()
 {
     Helicopter = GetComponent <BaseHelicopter>();
     AI         = Helicopter.GetComponent <PatrolHelicopterAI>();
     Helicopter.maxCratesToSpawn = 0;
     enabled = true;
     chopperSurvival.timer.Once(config.HelicopterSettings.CheckDistanceTimer, () => {
         if (this != null)
         {
             CheckDistance(GetComponent <BaseEntity>());
         }
     });
 }
Exemple #16
0
        public Entity PatrolHelicopterAt(Vector3 position, float height = 10f)
        {
            BaseEntity baseEntity = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", default(Vector3), default(Quaternion), true);

            if (baseEntity)
            {
                PatrolHelicopterAI component = baseEntity.GetComponent <PatrolHelicopterAI>();
                component.SetInitialDestination(position + new Vector3(0, height, 0), 0.25f);
                baseEntity.Spawn(true);
                return(new Entity(baseEntity));
            }
            return(null);
        }
Exemple #17
0
        private void SpawnChopper(Vector3 position)
        {
            BaseEntity entity = GameManager.server.CreateEntity(PREFAB, new Vector3(), new Quaternion());

            if (!entity)
            {
                return;
            }

            PatrolHelicopterAI helicopter = entity.GetComponent <PatrolHelicopterAI>();

            helicopter.SetInitialDestination(position);
            entity.Spawn();
        }
        private void CallHeli()
        {
            BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion());

            if (!entity)
            {
                return;
            }
            Puts($"Helicopter called to X:{_x} Z:{_z}");
            PatrolHelicopterAI helicopter = entity.GetComponent <PatrolHelicopterAI>();

            helicopter.SetInitialDestination(new Vector3(_x, 20f, _z));
            entity.Spawn();
        }
Exemple #19
0
            private void Awake()
            {
                player                  = GetComponent <BasePlayer>();
                input                   = player.serverInput;
                rocketcycletimer        = 0.0;
                reloadtimer             = 0.0;
                isReloading             = false;
                rocketNapalmReploadTime = RocketNapalmReloadTime;
                rocketMax               = RocketMax;
                hasRockets              = true;
                napalmMax               = NapalmMax;
                hasNapalm               = true;
                rocketDelay             = RocketDelay;
                bulletDamage            = BulletDamage;
                rocketcycle             = false;
                PlayerPOS               = player.transform.position + player.eyes.BodyForward() * 3f;

                string prefab = "assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab";

                helicopterBase = GameManager.server.CreateEntity(prefab);
                heliAI         = helicopterBase.GetComponent <PatrolHelicopterAI>();
                heliAI.enabled = false;

                heliturret = helicopterBase.GetComponent <HelicopterTurret>();

                heli = helicopterBase.GetComponent <BaseHelicopter>();
                heli.InitalizeWeakspots();

                if (!SpawnCrates)
                {
                    heli.maxCratesToSpawn = 0;
                }
                heli.bulletDamage = bulletDamage;

                heli.spotlightTarget = FindTarget(target);
                helicopterBase.Spawn();

                if (ShowCockpitOverlay)
                {
                    CockpitOverlay(player);
                }
                if (ShowCrosshair)
                {
                    CrosshairOverlay(player);
                }

                helicopterBase.transform.localPosition = PlayerPOS;
                helicopterBase.transform.rotation      = player.eyes.rotation;
            }
        void FindTargets(PatrolHelicopterAI heli)
        {
            List <NPCPlayer> nearbyNPCPlayers = new List <NPCPlayer>();

            Vis.Entities(heli.transform.position, config.targetRadius, nearbyNPCPlayers);

            foreach (var player in nearbyNPCPlayers)
            {
                if (player.userID.IsSteamId() && permission.UserHasPermission(player.UserIDString, config.perm))
                {
                    return;
                }

                if (player is Scientist && !config.shootScientist)
                {
                    continue;
                }
                if (player.ShortPrefabName == "scarecrow" || player.ShortPrefabName == "murderer" && !config.shootZombies)
                {
                    continue;
                }
                heli._targetList.Add(new PatrolHelicopterAI.targetinfo(player, player));
            }

            if (config.shootAnimals)
            {
                List <BaseAnimalNPC> nearbyAnimals = new List <BaseAnimalNPC>();

                Vis.Entities(heli.transform.position, 100, nearbyAnimals);

                foreach (var animal in nearbyAnimals)
                {
                    if (!config.shootAnimals)
                    {
                        continue;
                    }
                    heli.leftGun.SetTarget(animal);
                    heli.rightGun.SetTarget(animal);
                }
            }

            if (heli._targetList.Any())
            {
                heli.timeBetweenRockets = config.timeBetweenRockets;
                ServerMgr.Instance.StartCoroutine(RocketTimer(heli));
            }
        }
        IEnumerator RocketTimer(PatrolHelicopterAI heli)
        {
            float time = Time.time;
            int   i    = 0;

            while (i <= config.rocketsToFire)
            {
                if (Time.time - time > 0.5f)
                {
                    FireRocket(heli);
                    time = Time.time;
                    i++;
                }
                yield return(null);
            }
            yield break;
        }
        private void FireRocket(PatrolHelicopterAI heliAI)
        {
            if (heliAI == null || !(heliAI?.IsAlive() ?? false))
            {
                return;
            }
            if (heliAI._targetList.Count == 0)
            {
                return;
            }

            var num1         = 4f;
            var strafeTarget = heliAI._targetList[0].ply.ServerPosition;

            if (strafeTarget == Vector3.zero)
            {
                return;
            }
            var vector3   = heliAI.transform.position + heliAI.transform.forward * 1f;
            var direction = (strafeTarget - vector3).normalized;

            if (num1 > 0.0)
            {
                direction = Quaternion.Euler(UnityEngine.Random.Range((float)(-num1 * 0.5), num1 * 0.5f), UnityEngine.Random.Range((float)(-num1 * 0.5), num1 * 0.5f), UnityEngine.Random.Range((float)(-num1 * 0.5), num1 * 0.5f)) * direction;
            }
            var flag = heliAI.leftTubeFiredLast;

            heliAI.leftTubeFiredLast = !flag;
            Effect.server.Run(heliAI.helicopterBase.rocket_fire_effect.resourcePath, heliAI.helicopterBase, StringPool.Get("rocket_tube_" + (!flag ? "right" : "left")), Vector3.zero, Vector3.forward, null, true);
            var entity = GameManager.server.CreateEntity(heliAI.rocketProjectile_Napalm.resourcePath, vector3, new Quaternion(), true);

            if (entity == null)
            {
                return;
            }
            var projectile = entity.GetComponent <ServerProjectile>();

            if (projectile != null)
            {
                projectile.InitializeVelocity(direction * projectile.speed);
            }
            entity.OwnerID = 1337;             //assign ownerID so it doesn't infinitely loop on OnEntitySpawned
            entity.Spawn();
        }
 public void Update()
 {
     if (this.helicopterBase.isClient)
     {
         return;
     }
     PatrolHelicopterAI.heliInstance = this;
     this.UpdateTargetList();
     this.MoveToDestination();
     this.UpdateRotation();
     this.UpdateSpotlight();
     this.AIThink();
     this.DoMachineGuns();
     if (!this.isRetiring)
     {
         float single = Mathf.Max(this.spawnTime + PatrolHelicopter.lifetimeMinutes * 60f, this.lastDamageTime + 120f);
         if (UnityEngine.Time.realtimeSinceStartup > single)
         {
             this.Retire();
         }
     }
 }
Exemple #24
0
        private void callHeli(int num = 1)
        {
            int i = 0;

            while (i < num)
            {
                BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true);
                if (!(bool)((UnityEngine.Object)entity))
                {
                    return;
                }
                PatrolHelicopterAI heliAI = entity.GetComponent <PatrolHelicopterAI>();
                heliAI.maxSpeed = (float)HeliSpeed;     //helicopter speed
                                                        //Change the health & weakpoint(s) heath
                ((BaseCombatEntity)entity).startHealth = HeliHP;
                var weakspots = ((BaseHelicopter)entity).weakspots;
                weakspots[0].maxHealth = HeliHP / 2;
                weakspots[0].health    = HeliHP / 2;
                weakspots[1].maxHealth = HeliHPRudder;
                weakspots[1].health    = HeliHPRudder;
                entity.Spawn(true);
                i++;
            }
        }
Exemple #25
0
 private object CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer player) =>
 IsLimited(player) ? false : (object)null;
Exemple #26
0
 private object CanHelicopterStrafeTarget(PatrolHelicopterAI heli, BasePlayer player) => IsInvisible(player) ? (object)false : null;
Exemple #27
0
 private object CanHelicopterTarget(PatrolHelicopterAI heliAi, BasePlayer player)
 {
     return(InvokePersonal <PersonalHeliComponent, object>(heliAi?.helicopterBase?.gameObject, personalHeli => {
         return personalHeli.CanInterractWith(player) ? null : (object)false;
     }));
 }
Exemple #28
0
 private object CanHelicopterStrafeTarget(PatrolHelicopterAI entity, BasePlayer target) =>
 IsLimited(target) ? false : (object)null;
Exemple #29
0
        private void PatrolHUD()
        {
            int patrolnum = basemessage.Count;

            anim = anim + 1;
            double colonnegauche = 0.00;

            colonnegauche = colonnegauche + (anim * 0.16);

            if (colonnegauche > 0.89)
            {
                anim          = 0;
                colonnegauche = 0.00;
            }

            double colonnedroite = colonnegauche + 0.15;
            double lignehaut     = 0.80;
            double lignebas      = lignehaut - 0.10;

            int Round = 1;
            int round = -1;

            List <string>             messagelist = new List <string>();
            List <BaseHelicopter>     helilist    = new List <BaseHelicopter>();
            List <PatrolHelicopterAI> ailist      = new List <PatrolHelicopterAI>();


            string[]             messagearray;
            BaseHelicopter[]     heliarray;
            PatrolHelicopterAI[] aiarray;


            foreach (var paire in basemessage)
            {
                messagelist.Add(paire.Value);
                helilist.Add(paire.Key);
                if (baseai.ContainsKey(paire.Key) == true)
                {
                    PatrolHelicopterAI ai;
                    baseai.TryGetValue(paire.Key, out ai);
                    ailist.Add(ai);
                }
            }
            messagearray = messagelist.ToArray();
            heliarray    = helilist.ToArray();
            aiarray      = ailist.ToArray();

            if (debug == true)
            {
                Puts($"BaseMessage COUNT : {messagelist.Count}");
            }

            for (Round = 1; Round <= patrolnum; Round++)
            {
                round = round + 1;
                double lignedecalage   = 0.11 * round;
                var    CuiElement      = new CuiElementContainer();
                var    PatrolHUDBanner = CuiElement.Add(new CuiPanel {
                    Image = { Color = HUDcolor }, RectTransform = { AnchorMin = $"0.0 {lignebas - lignedecalage}", AnchorMax = $"0.10 {lignehaut - lignedecalage}" }, CursorEnabled = false
                });

                /*var closeButton = new CuiButton{Button ={Close = PatrolHUDBanner,Color = "0.0 0.0 0.0 0.6"},RectTransform ={AnchorMin = "0.90 0.00",AnchorMax = "0.99 1.00"},Text ={Text = "X",FontSize = 20,Align = TextAnchor.MiddleCenter}};
                 * CuiElement.Add(closeButton, PatrolHUDBanner);       */

                foreach (var player in BasePlayer.activePlayerList)
                {
                    Vector3 basepos;
                    baseposition.TryGetValue(heliarray[round], out basepos);
                    int dist = (int)Vector3.Distance(player.transform.position, basepos);

                    string finalmessage = $": <color=orange>{dist}m.</color> away.{messagearray[round]}";

                    PatrolHelicopterAI myAI = aiarray[round];

                    if (myAI.PlayerVisible(player) == true)
                    {
                        if (debug == true)
                        {
                            Puts($"PLAYER {player.displayName} IS VISIBLE !");
                        }
                        finalmessage = $"{finalmessage}\n<color=red>YOU ARE VISIBLE</color>";
                    }


                    CuiElement.Add(new CuiLabel {
                        Text = { Text = $"<color=white>#{round+1}</color> {finalmessage}", FontSize = HUDfontsize, Align = TextAnchor.MiddleLeft, Color = "0.0 0.0 0.0 1" }, RectTransform = { AnchorMin = "0.10 0.10", AnchorMax = "0.90 0.79" }
                    }, PatrolHUDBanner);

                    if (ImageLibrary == true)
                    {
                        CuiElement.Add(new CuiElement
                        {
                            Name       = CuiHelper.GetGuid(),
                            Parent     = PatrolHUDBanner,
                            Components =
                            {
                                new CuiRawImageComponent      {
                                    Png = icondapatrol
                                },
                                new CuiRectTransformComponent {
                                    AnchorMin = $"{colonnegauche} 0.80", AnchorMax = $"{colonnedroite} 0.99"
                                }
                            }
                        });
                    }

                    CuiHelper.AddUi(player, CuiElement);

                    timer.Once(5, () =>
                    {
                        CuiHelper.DestroyUi(player, PatrolHUDBanner);
                    });
                }
            }
        }