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;
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
 public override void EventEnd(RoundEndEvent ev)
 {
     end_status = ev.Status;
 }