Пример #1
0
        void CreateRaidZone(Vector3 position)
        {
            string zoneid = position.ToString();

            RaidZone zone;

            if (zones.TryGetValue(zoneid, out zone))
            {
                zone.ResetTimer().timer = timer.In(raidDuration, delegate()
                {
                    ZoneManager.CallHook("EraseZone", zoneid);
                    zones.Remove(zoneid);
                });
                return;
            }
            else
            {
                foreach (var nearbyZone in zones)
                {
                    if (nearbyZone.Value.Distance(position) < (raidDistance / 2))
                    {
                        nearbyZone.Value.ResetTimer().timer = timer.In(raidDuration, delegate()
                        {
                            ZoneManager.CallHook("EraseZone", zoneid);
                            zones.Remove(zoneid);
                        });
                        return;
                    }
                }
            }

            ZoneManager.CallHook("CreateOrUpdateZone", zoneid, new string[] {
                "radius",
                raidDistance.ToString()
            }, position);

            zone = new RaidZone(zoneid, position);

            zones.Add(zoneid, zone);

            zone.timer = timer.In(raidDuration, delegate()
            {
                ZoneManager.CallHook("EraseZone", zoneid);
                zones.Remove(zoneid);
            });
        }
Пример #2
0
        public void CreateRaidZone(Vector3 position, float distance = 50f, int timer = 60 * 5)
        {
            bool found = false;

            int timestamp = Helper.Timestamp();

            foreach (RaidZone zone in raidZones)
            {
                Vector3 difference = zone.position - position;
                if (difference.magnitude <= distance)
                {
                    zone.expires = Helper.Timestamp() + timer;
                    found        = true;
                }

                foreach (BasePlayer player in BasePlayer.activePlayerList)
                {
                    if (playerZones.ContainsKey(player) && playerZones[player] == zone)
                    {
                        Notifications.AddTimedNotification(player, "raid_block", "Raid Block", zone.expires - timestamp, ".7 0 0 1");
                    }
                }
            }

            if (found)
            {
                return;
            }

            RaidZone newZone = new RaidZone()
            {
                position = position,
                distance = distance,
                expires  = Helper.Timestamp() + timer,
            };

            raidZones.Add(newZone);
            Puts($"New raid started!");
        }
Пример #3
0
 public float Distance(RaidZone zone)
 {
     return(Vector3.Distance(position, zone.position));
 }