예제 #1
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();
            }
        }
예제 #2
0
        private void SpawnHelicopter(int num)
        {
            bool lifetime = false;

            if (ConVar.PatrolHelicopter.lifetimeMinutes == 0)
            {
                ConVar.PatrolHelicopter.lifetimeMinutes = 1;
                lifetime = true;
            }

            for (int i = 0; i < num; i++)
            {
                BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true);
                if (entity)
                {
                    BaseHelicopter heli = entity.GetComponent <BaseHelicopter>();
                    entity.Invoke("CS_Helicopter", 3600f);
                    entity.Spawn();
                    var csHeli = heli.gameObject.AddComponent <CS_Helicopter>();
                    CSHelicopters.Add(csHeli);
                    csHeli.UIHealth = CSHelicopters.Count - 1;

                    heli.GetComponent <CS_Helicopter>().enabled = true;
                    MoveToArena(entity);
                    _spawnTime.SetValue(entity.GetComponent <PatrolHelicopterAI>(), UnityEngine.Time.realtimeSinceStartup * 10);
                }
            }
            if (lifetime)
            {
                timer.Once(5f, () => ConVar.PatrolHelicopter.lifetimeMinutes = 0);
            }
        }
예제 #3
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);
        }
예제 #4
0
            private IEnumerator SpawnRoundHelicopters()
            {
                int helicoptersToSpawn = Mathf.Max(1, Mathf.RoundToInt((float)maxHelicopters * ((float)currentRound / (float)rounds)));

                for (int i = 0; i < helicoptersToSpawn; i++)
                {
                    Vector3 destination = _spawnSelectorA.GetSpawnPoint();
                    Vector2 random      = (UnityEngine.Random.insideUnitCircle.normalized * Configuration.MaxTravelDistance);

                    Vector3 position = destination + new Vector3(random.x, 50f, random.y);

                    BaseHelicopter baseHelicopter = GameManager.server.CreateEntity(HELICOPTER_PREFAB, position) as BaseHelicopter;
                    baseHelicopter.enableSaving = false;
                    baseHelicopter.Spawn();

                    EventHelicopter eventHelicopter = baseHelicopter.gameObject.AddComponent <EventHelicopter>();
                    eventHelicopter.OnHelicopterSpawned(this, i + 1);

                    eventHelicopter.Entity.health = heliHealth;
                    eventHelicopter.Entity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);

                    eventHelicopters.Add(eventHelicopter);

                    yield return(CoroutineEx.waitForSeconds(1f));

                    eventHelicopter.SetPositionDestination(position, destination);
                }
            }
예제 #5
0
            public void CreateForDebrisField(BaseHelicopter helicopter)
            {
                Vector3 position = helicopter.transform.position;
                float   radius   = Instance.Options.Zones.EventZoneRadius;

                Create(ZoneType.Debris, "Debris Field", helicopter, radius, GetEventEndTime());
            }
예제 #6
0
        private void SpawnHelicopter(int num)
        {
            bool lifetime = false;

            if (ConVar.PatrolHelicopter.lifetimeMinutes == 0)
            {
                ConVar.PatrolHelicopter.lifetimeMinutes = 1;
                lifetime = true;
            }

            for (int i = 0; i < num; i++)
            {
                BaseHelicopter entity = (BaseHelicopter)GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true);
                entity.enableSaving = false;
                entity.Spawn();
                var component = entity.gameObject.AddComponent <CSHelicopter>();
                component.SpawnHelicopter(GetDestination(), adjMainRotorHealth, adjTailRotorHealth, adjEngineHealth, adjHeliHealth, adjHeliBulletDamage);
                CSHelicopters.Add(component);
                if (entity == null)
                {
                    Puts("null heli");
                }
            }
            if (lifetime)
            {
                timer.Once(5f, () => ConVar.PatrolHelicopter.lifetimeMinutes = 0);
            }
            ConVar.PatrolHelicopter.bulletAccuracy = adjHeliAccuracy;
        }
예제 #7
0
 void Awake()
 {
     helicopter = GetComponent <BaseHelicopter>();
     ai         = GetComponent <PatrolHelicopterAI>();
     heliId     = CuiHelper.GetGuid();
     isDieing   = false;
     enabled    = false;
 }
예제 #8
0
 private void OnEntitySpawned(BaseHelicopter heli)
 {
     if (config.bulletDamage > 0.0)
     {
         heli.bulletDamage = config.bulletDamage;
     }
     heli.InvokeRepeating(() => FindTargets(heli.myAI), 5, 10);
 }
예제 #9
0
        private void OnEntityKill(BaseHelicopter heli)
        {
            if (!_activeHelis.Remove(heli))
            {
                return;
            }

            CheckEvent();
        }
예제 #10
0
        private void OnEntitySpawned(BaseHelicopter heli)
        {
            if (!CanShowPanel(heli))
            {
                return;
            }

            _activeHelis.Add(heli);
            CheckHelicopter();
        }
예제 #11
0
        private bool CanShowPanel(BaseHelicopter heli)
        {
            object result = Interface.Call("MagicPanelCanShow", Name, heli);

            if (result is bool)
            {
                return((bool)result);
            }

            return(true);
        }
예제 #12
0
 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>());
         }
     });
 }
예제 #13
0
 void MarkerDisplayingDelete(BaseHelicopter delpatrol)
 {
     if (baseradius.ContainsKey(delpatrol) == true)
     {
         MapMarkerGenericRadius delmarker;
         baseradius.TryGetValue(delpatrol, out delmarker);
         delmarker.Kill();
         delmarker.SendUpdate();
         if (debug == true)
         {
             Puts($"PATROL MAPMARKER KILLED");
         }
     }
 }
예제 #14
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;
            }
예제 #15
0
        private void OnEntityTakeDamage(BaseHelicopter baseHelicopter, HitInfo hitInfo)
        {
            if (baseHelicopter == null || hitInfo == null)
            {
                return;
            }

            if (baseHelicopter.GetComponent <EventHelicopter>())
            {
                if (EventManager.GetUser(hitInfo.InitiatorPlayer) == null)
                {
                    EventManager.ClearDamage(hitInfo);
                }
            }
        }
예제 #16
0
        ////////////////////////////////////////////////////////////
        // HeliCopter Spawn ////////////////////////////////////////
        ////////////////////////////////////////////////////////////
        #region Helicopter
        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity == null)
            {
                return;
            }

            //994850627 is the prefabID of a heli.
            if (entity.prefabID == 994850627)
            {
                BaseHelicopter heli = (BaseHelicopter)entity;
                heli.maxCratesToSpawn = 2;
                heli.bulletDamage     = 10f;
                typeof(PatrolHelicopterAI).GetField("maxRockets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(entity.GetComponent <PatrolHelicopterAI>(), 20);
            }
        }
예제 #17
0
        void OnEntitySpawned(BaseHelicopter heli)
        {
            if (!configData.alerts.patrolHeli)
            {
                return;
            }

            NextTick(() =>
            {
                if (heli == null)
                {
                    return;
                }

                SendMsg(Lang("PatrolHeli", null, GetLocation(heli.transform.position, null, null), GetLocationDest(heli.GetComponentInParent <PatrolHelicopterAI>().destination)));
            });
        }
예제 #18
0
        void OnEntityKill(BaseCombatEntity Entity, HitInfo info)
        {
            if (Entity == null)
            {
                return;
            }
            if (Entity is BaseHelicopter)
            {
                BaseHelicopter helicopterkilled = Entity as BaseHelicopter;

                if (baseent.ContainsKey(helicopterkilled) == true)
                {
                    DisplayBannerToAll("killed");
                    MarkerDisplayingDelete(helicopterkilled);

                    baseradius.Remove(helicopterkilled);
                    basemessage.Remove(helicopterkilled);
                    baseposition.Remove(helicopterkilled);
                    baseai.Remove(helicopterkilled);
                    basecombat.Remove(helicopterkilled);
                    baseent.Remove(helicopterkilled);

                    if (baseent.Count == 0)
                    {
                        patrolrefresh.Destroy();
                        patrolrefresh = null;
                        if (debug == true)
                        {
                            Puts($"PATROL IS NO MORE. TIMER DESTROYED");
                        }


                        baseradius.Clear();
                        basemessage.Clear();
                        baseposition.Clear();
                        baseai.Clear();
                        basecombat.Clear();
                        baseent.Clear();
                    }
                }
            }
        }
예제 #19
0
 void OnEntitySpawned(BaseNetworkable entity)
 {
     if (entity.name.Contains("patrolhelicopter.prefab"))
     {
         string thing = entity.PrefabName;
         switch (thing)
         {
         case "patrolhelicopter.prefab":
             if (SpawnedHeli == true)
             {
                 BaseHelicopter Chopper = (BaseHelicopter)entity;
                 PrintToChat("<color=Red> [Coptor Tracker]</color>  Patrol Helicopter Has Spawned Look Out!!");
                 SpawnedHeli = false;
             }
             else
             {
                 KillCoptor(entity);
             }
             break;
         }
     }
 }
예제 #20
0
        private void OnEntitySpawned(BaseHelicopter heli)
        {
            if (!_init)
            {
                return;
            }

            //Need double for HeliRefuel panel
            NextTick(() =>
            {
                NextTick(() =>
                {
                    if (!CanShowPanel(heli))
                    {
                        return;
                    }

                    _activeHelis.Add(heli);
                    CheckEvent();
                });
            });
        }
예제 #21
0
        void OnEntitySpawned(BaseHelicopter heli)
        {
            if (!configData.Alerts.PatrolHeli)
            {
                return;
            }
            if (heli == null)
            {
                return;
            }
            var    srcPos  = heli.transform.position;
            var    destPos = heli.GetComponentInParent <PatrolHelicopterAI>().destination;
            string msg     = Lang("PatrolHeli", null, GetLocation(srcPos, null, null), GetLocationDest(destPos));

            Server.Broadcast(msg);
            if (configData.Misc.LogToConsole)
            {
                Puts(msg);
            }
            if (configData.Misc.LogToFile)
            {
                LogToFile("log", $"[{DateTime.Now.ToString("HH:mm:ss")}] {msg}", this);
            }
        }
예제 #22
0
 private void OnEntitySpawned(BaseHelicopter entity)
 {
     NextTick(() => {
         HandleEntity(entity);
     });
 }
예제 #23
0
 private void KillHeli(BaseHelicopter heli)
 {
     heli.maxCratesToSpawn = 0; heli.DieInstantly();
 }
예제 #24
0
        void AfterSpawn()
        {
            if (patrolrefresh == null)
            {
                if (debug == true)
                {
                    Puts($"TIMER IS NULL");
                }

                patrolrefresh = timer.Repeat(5, 0, () =>
                {
                    AfterSpawn();
                });
            }

            if (debug == true)
            {
                Puts($"VOID AFTERSPAWN");
            }                                                           // bonus info



            foreach (var paire in baseent)
            {
                if (debug == true)
                {
                    Puts($"AI COUNT : {baseent.Count}");
                }                                                                               // bonus info

                BaseEntity Entity2;
                Entity2 = paire.Value;

                BaseHelicopter helicopter = paire.Key;

                PatrolHelicopterAI myAI;
                baseai.TryGetValue(helicopter, out myAI);

                BaseCombatEntity patrol;
                basecombat.TryGetValue(helicopter, out patrol);

                var position2 = Entity2.ServerPosition;
                if (debug == true)
                {
                    Puts($"ENTITY NEW POSITION : {position2} - SPEED {myAI.moveSpeed}");
                }

                baseposition.Remove(helicopter);
                baseposition.Add(helicopter, position2);

                if (debug == true)
                {
                    Puts($"Left Rockets : {myAI.numRocketsLeft}");
                }
                if (debug == true)
                {
                    Puts($"DESTINATION : {myAI.destination}");
                }
                if (debug == true)
                {
                    Puts($"SPAWNTIME : {myAI.spawnTime}");
                }

                string names   = "";
                string message = "";

                foreach (BasePlayer player in BasePlayer.activePlayerList)
                {
                    List <int> distlist = new List <int>();
                    message = $"\nSpeed : <size=11><color=cyan>{myAI.moveSpeed}</color></size>\nLeft Rockets : <size=11><color=cyan>{myAI.numRocketsLeft}</color></size>";

                    basemessage.Remove(helicopter);
                    basemessage.Add(helicopter, message);
                }
            }
            GenerateMarkers();
            PatrolHUD();
        }
예제 #25
0
 public void BeginEvent(BaseHelicopter heli)
 {
     Instance.Puts($"Beginning patrol helicopter event, heli at @ {heli.transform.position}");
     PatrolHelicopters.Add(heli);
 }
예제 #26
0
 private bool IsPersonal(BaseHelicopter heli) => InvokePersonal <PersonalHeliComponent, object>(heli?.gameObject, (comp) => true) == null ? false : true;
예제 #27
0
 private void Awake()
 {
     Heli = this.GetComponent <BaseHelicopter>();
 }
        public static bool ExecuteCommand(BasePlayer player, string command)
        {
            string[] args = command.Split(' ');

            if (player == null || args.Length == 0 || !playerInfo.ContainsKey(player.userID))
            {
                return(false);
            }

            PlayerInfo info = playerInfo[player.userID];

            switch (args[0])
            {
            // Add subscriptions
            // syntax: subscription <name> <duration in seconds>
            case "subscription":
                if (args.Length != 3)
                {
                    return(false);
                }

                info.AddSubscription(Convert.ToString(args[1]), Convert.ToInt32(args[2]));
                break;

            // Give item
            // syntax: give <itemname> [amount] [inventory]
            case "give":
                if (args.Length == 1)
                {
                    return(false);
                }

                // Parameters
                int           amount    = args.Length == 3 ? Convert.ToInt32(args[2]) : 1;
                ItemContainer inventory = player.inventory.containerMain;
                if (args.Length == 4 && Convert.ToString(args[3]) == "belt")
                {
                    inventory = player.inventory.containerBelt;
                }
                else if (args.Length == 4 && Convert.ToString(args[3]) == "wear")
                {
                    inventory = player.inventory.containerWear;
                }

                ItemDefinition definition = ItemManager.FindItemDefinition(Convert.ToString(args[1]));
                if (definition == null)
                {
                    return(false);
                }

                Item item = ItemManager.CreateByItemID(definition.itemid, amount);

                if (inventory.itemList.Count >= 24)
                {
                    item.Drop(player.transform.position, new Vector3(0, 1f, 0));
                }
                else
                {
                    player.inventory.GiveItem(ItemManager.CreateByItemID(definition.itemid, amount), inventory);
                }
                break;

            // Call the helicopter to the caller
            // syntax: helicopter
            case "helicopter":
                BaseHelicopter helicopter = (BaseHelicopter)GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true);
                if (helicopter == null)
                {
                    return(false);
                }

                var ai = helicopter?.GetComponent <PatrolHelicopterAI>() ?? null;
                if (ai == null)
                {
                    return(false);
                }

                ai.SetInitialDestination(player.transform.position + new Vector3(0, 25f, 0));

                helicopter.Spawn();
                break;
            }

            return(true);
        }