public void AddPoint(ROUND_END_STATUS status) { switch (status) { case ROUND_END_STATUS.CI_VICTORY: this.Chaos_Victory++; break; case ROUND_END_STATUS.SCP_CI_VICTORY: this.SCP_Chaos_Victory++; break; case ROUND_END_STATUS.SCP_VICTORY: this.SCP_Victory++; break; case ROUND_END_STATUS.MTF_VICTORY: this.MTF_Victory++; break; case ROUND_END_STATUS.OTHER_VICTORY: this.Other_Victory++; break; case ROUND_END_STATUS.NO_VICTORY: this.No_Victory++; break; case ROUND_END_STATUS.FORCE_END: this.Forced_Round_End++; break; } }
public override void EventStart(RoundStartEvent ev) { updateRate = 1f / Config <int>("update_rate"); previousUpdate = 0f; nextUpdate = 0f; unlockTime = Config <int>("hunters_wait_time"); unlocked = false; props.Clear(); hunters.Clear(); end_status = ROUND_END_STATUS.ON_GOING; var all_players = ev.Server.GetPlayers(); int hunters_count = Mathf.RoundToInt((Config <int>("hunters_percent") / 100f) * all_players.Count); if (hunters_count == 0) { ev.Server.Map.Broadcast(5, Translation("not_enough_players"), false); return; } foreach (Player player in all_players) { if (!QueuePoints.ContainsKey(player.UserId)) { QueuePoints.Add(player.UserId, 0); } QueuePoints[player.UserId]++; } var queue = (from player in QueuePoints orderby player.Value descending select player).ToList(); var now_queue = queue.Where(x => all_players.Select(y => y.UserId).Contains(x.Key)).ToArray(); for (int i = 0; i < all_players.Count; i++) { if (i < hunters_count) { Player hunter = all_players.Find(x => x.UserId == now_queue[0].Key); if (hunter != null) { hunters.Add(hunter); } } } foreach (Player player in hunters) { QueuePoints[player.UserId] = 0; } List <Door> doors = ev.Server.Map.GetDoors(); doors.Find(x => x.Name == "CHECKPOINT_LCZ_A").Locked = true; doors.Find(x => x.Name == "CHECKPOINT_LCZ_B").Locked = true; SCP012 = doors.Find(x => x.Name == "012"); foreach (Door door in doors) { Vector vec = door.Position; int rng = Random.Range(Config <int>("min_items_in_room"), Config <int>("max_items_in_room")); for (int i = 0; i < rng; i++) { float x = Random.Range(vec.x - 15f, vec.x + 15f); float z = Random.Range(vec.z - 15f, vec.z + 15f); float y = vec.y + 1f; Vector spanw_pos = new Vector(x, y, z); System.Array values = System.Enum.GetValues(typeof(Props)); ItemType item = (ItemType)values.GetValue(Random.Range(0, values.Length)); ev.Server.Map.SpawnItem(item, spanw_pos, Vector.Zero); } } foreach (Player player in all_players) { if (hunters.Contains(player)) { player.ChangeRole(RoleType.FACILITY_GUARD); player.ClearInventory(); player.GiveItem(ItemType.MP7); player.SetAmmo(AmmoType.AMMO9MM, 1000); for (int i = 0; i < 7; i++) { player.GiveItem(ItemType.COIN); } player.PersonalBroadcast(30, Translation("hunters_wait"), false); } else { player.PersonalBroadcast(30, Translation("props_start"), false); player.ChangeRole(RoleType.CLASSD); player.ClearInventory(); for (int i = 0; i < 7; i++) { player.GiveItem(ItemType.COIN); } try_again: System.Array values = System.Enum.GetValues(typeof(Props)); ItemType itemtype = (ItemType)values.GetValue(Random.Range(0, values.Length)); var items = ev.Server.Map.GetItems(itemtype, true); Item item = items[Random.Range(0, items.Count)]; if (props.Values.Contains(item)) { goto try_again; } item.SetKinematic(false); props.Add(player, item); } } }
public override void EventEnd(RoundEndEvent ev) { end_status = ev.Status; }