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); }); }
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!"); }
public float Distance(RaidZone zone) { return(Vector3.Distance(position, zone.position)); }