Ejemplo n.º 1
0
        private void OnPlayerConnecting([FromSource] Player player, string name, CallbackDelegate kickReason, ExpandoObject deferrals)
        {
            try
            {
                DebugLog($"Connecting: {player.Name}  {player.Identifiers["steam"]}");
                // Check if in queue
                DebugLog($"Currently in queue: {string.Join(", ", _queue.Select(q => q.SteamId))}");
                QueuePlayer queuePlayer = _queue.FirstOrDefault(p => p.SteamId == player.Identifiers["steam"]);

                if (queuePlayer != null)
                {
                    // Player had a slot in the queue, give them it back.
                    DebugLog($"Player found in queue: {queuePlayer.Name}");
                    queuePlayer.Handle      = int.Parse(player.Handle);
                    queuePlayer.Status      = QueueStatus.Queued;
                    queuePlayer.ConnectTime = new DateTime();
                    queuePlayer.JoinCount++;
                    queuePlayer.Deferrals = deferrals;

                    ((CallbackDelegate)queuePlayer.Deferrals.ToList()[0].Value)();
                    ((CallbackDelegate)queuePlayer.Deferrals.ToList()[2].Value)("Connecting");

                    return;
                }

                // Slot available, don't bother with the queue.
                if (this.Players.Count() < _config.MaxClients && !_config.QueueWhenNotFull)
                {
                    return;
                }

                // Check if the player is in the priority list
                PriorityPlayer priorityPlayer = _config.PriorityPlayers.FirstOrDefault(p => p.SteamId == player.Identifiers["steam"]);

                // Add to queue
                queuePlayer = new QueuePlayer()
                {
                    Handle    = int.Parse(player.Handle),
                    SteamId   = player.Identifiers["steam"],
                    Name      = player.Name,
                    JoinCount = 1,
                    JoinTime  = DateTime.UtcNow,
                    Deferrals = deferrals,
                    Priority  = priorityPlayer?.Priority ?? 100
                };

                AddToQueue(queuePlayer);
            }
            catch (Exception e)
            {
                Log(e.Message);
                API.CancelEvent();
            }
        }
Ejemplo n.º 2
0
        private void OnRconCommand(string command, List <object> objargs)
        {
            if (command.ToLowerInvariant() != "queue")
            {
                return;
            }
            Function.Call(Hash.CANCEL_EVENT);
            List <string> args = objargs.Cast <string>().ToList();

            if (args.Count == 0)
            {
                args.Add("help");
            }
            switch (args.First().ToLowerInvariant())
            {
            case "reload":
                string initServerName = _config.ServerName;
                _config            = Config.Load(_configPath);
                _config.ServerName = initServerName;
                break;

            case "clear":
                foreach (QueuePlayer playerToClear in _queue)
                {
                    ((CallbackDelegate)playerToClear.Deferrals?.ToList()[1].Value)?.Invoke("Queue reset");
                }
                _queue.Clear();
                Log("Queue cleared!");
                break;

            case "add":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to add to the queue");
                    return;
                }
                // Check if the player is in the priority list
                PriorityPlayer priorityPlayer = _config.PriorityPlayers.FirstOrDefault(p => p.SteamId == args[1]);
                // Add to queue
                AddToQueue(new QueuePlayer
                {
                    SteamId        = args[1],
                    Name           = $"Manual Player - {args[1]}",
                    JoinCount      = 1,
                    JoinTime       = DateTime.UtcNow,
                    DisconnectTime = DateTime.UtcNow,
                    Status         = QueueStatus.Disconnected,
                    Priority       = priorityPlayer?.Priority ?? 100
                }
                           );
                break;

            case "remove":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to remove from the queue");
                    return;
                }
                QueuePlayer playerToRemove = _queue.FirstOrDefault(p => p.SteamId == args[1]);
                if (playerToRemove == null)
                {
                    Log("Player not found in queue");
                    return;
                }

                ((CallbackDelegate)playerToRemove.Deferrals?.ToList()[1].Value)?.Invoke("Force removed from queue.");
                _queue.Remove(playerToRemove);
                Log($"Player {playerToRemove.Name} ({playerToRemove.SteamId}) removed from queue");
                break;

            case "status":
                Log("Queue:");
                foreach (QueuePlayer queuePlayer in _queue)
                {
                    Log($"{_queue.IndexOf(queuePlayer) + 1}: " +
                        $"{queuePlayer.Name} - {queuePlayer.SteamId} " +
                        $"[Priority: {queuePlayer.Priority}] " +
                        $"[Status: {Enum.GetName(typeof(QueueStatus), queuePlayer.Status)}] " +
                        $"[Joined: {queuePlayer.JoinTime.ToLocalTime()}]");
                }
                break;

            case "move":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to move");
                    return;
                }

                QueuePlayer playerToMove = _queue.FirstOrDefault(p => p.SteamId == args[1]);
                if (playerToMove == null)
                {
                    Log("Player not found in queue");
                    return;
                }

                if (args.Count < 3)
                {
                    args.Add("1");                     // Default to first in queue
                }
                _queue.Remove(playerToMove);
                _queue.Insert(int.Parse(args[2]) - 1, playerToMove);

                Log($"Moved player {playerToMove.Name} ({playerToMove.SteamId}) to position {args[2]}");

                break;

            case "help":
                Log("IgiCore - Queue: Help" + Environment.NewLine +
                    "                   reload: Reload the queue config file" + Environment.NewLine +
                    "                    clear: Force remove all currently queued players" + Environment.NewLine +
                    "            add <steamid>: Manually insert a steamid into the queue (useful for debugging purposes)" + Environment.NewLine +
                    "         remove <steamid>: Remove a specific steamid from the queue" + Environment.NewLine +
                    "move <steamid> [position]: Move a specific steamid to a position in the queue (defaults to 1st in queue if not passed a position)" + Environment.NewLine +
                    "                   status: Display the current list of players in the queue"
                    );
                break;

            default:
                Log("No such command exists, please type 'queue help' for help.");
                break;
            }
        }
Ejemplo n.º 3
0
        private void OnRconCommand(string command, List <object> objargs)
        {
            if (command.ToLowerInvariant() != "queue")
            {
                return;
            }
            List <string> args = objargs.Cast <string>().ToList();

            switch (args[0].ToLowerInvariant())
            {
            case "reload":
                string initServerName = _config.ServerName;
                _config            = Config.Load(_configPath);
                _config.ServerName = initServerName;
                break;

            case "clear":
                foreach (QueuePlayer playerToClear in _queue)
                {
                    ((CallbackDelegate)playerToClear.Deferrals?.ToList()[1].Value)?.Invoke("Queue reset");
                }
                _queue.Clear();
                Log("Queue cleared!");
                break;

            case "add":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to add to the queue");
                    return;
                }
                // Check if the player is in the priority list
                PriorityPlayer priorityPlayer = _config.PriorityPlayers.FirstOrDefault(p => p.SteamId == args[1]);
                // Add to queue
                AddToQueue(new QueuePlayer
                {
                    SteamId        = args[1],
                    Name           = $"Manual Player - {args[1]}",
                    ConnectCount   = 1,
                    ConnectTime    = DateTime.UtcNow,
                    DisconnectTime = DateTime.UtcNow,
                    Status         = QueueStatus.Disconnected,
                    Priority       = priorityPlayer?.Priority ?? 100
                }
                           );
                break;

            case "remove":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to remove from the queue");
                    return;
                }
                QueuePlayer playerToRemove = _queue.FirstOrDefault(p => p.SteamId == args[1]);
                if (playerToRemove == null)
                {
                    Log("Player not found in queue");
                    return;
                }

                ((CallbackDelegate)playerToRemove.Deferrals?.ToList()[1].Value)?.Invoke("Force removed from queue.");
                _queue.Remove(playerToRemove);
                Log($"Player {playerToRemove.Name} ({playerToRemove.SteamId}) removed from queue");
                break;

            case "status":
                Log("Queue:");
                foreach (QueuePlayer queuePlayer in _queue)
                {
                    Log($"{_queue.IndexOf(queuePlayer) + 1}: " +
                        $"{queuePlayer.Name} - {queuePlayer.SteamId} " +
                        $"[Priority: {queuePlayer.Priority}] " +
                        $"[Status: {Enum.GetName(typeof(QueueStatus), queuePlayer.Status)}] " +
                        $"[Connected: {queuePlayer.ConnectTime.ToLocalTime()}]");
                }
                break;

            case "move":
                if (args.Count < 2)
                {
                    Log("Please pass a steam ID to move");
                    return;
                }

                QueuePlayer playerToMove = _queue.FirstOrDefault(p => p.SteamId == args[1]);
                if (playerToMove == null)
                {
                    Log("Player not found in queue");
                    return;
                }

                if (args.Count < 3)
                {
                    args.Add("1");                     // Default to first in queue
                }
                _queue.Remove(playerToMove);
                _queue.Insert(int.Parse(args[2]) - 1, playerToMove);

                Log($"Moved player {playerToMove.Name} ({playerToMove.SteamId}) to position {args[2]}");

                break;

            default:
                Log("No such command exists");
                break;
            }

            Function.Call(Hash.CANCEL_EVENT);
        }