Exemplo n.º 1
0
 public async Task Vote(CommandContext ctx, [RemainingText] string args = "")
 {
     if (Game.Status == Game.GameStatus.VotingFirst)
     {
         if (Game.Players.ContainsKey(ctx.Member))
         {
             TargetCommandArgs targetCommandArgs = ParseTargetCommand(args);
             if (targetCommandArgs.Member != null)
             {
                 await Game.ProcessVoteFirst(ctx.Member, targetCommandArgs.Member);
             }
         }
     }
 }
Exemplo n.º 2
0
        // -- ПАРСИНГ КОМАНД --
        TargetCommandArgs ParseTargetCommand(string input)
        {
            TargetCommandArgs parsed = new TargetCommandArgs();

            // Сплит по пробелу
            string[] inputSplitted = input.Split(' ');

            // Проверяем число ли в нулевом и присваиваем
            if (int.TryParse(inputSplitted[0], out int value))
            {
                try
                {
                    parsed.Member = Game.Players.Keys.ElementAt(value - 1);
                }
                catch (Exception) { }
            }

            // Проверяем упоминание ли в нулевом и присваиваем
            if (parsed.Member == null)
            {
                try
                {
                    DiscordMember target = Utilities.GetPlayerByMention(inputSplitted[0]);
                    if (Game.Players.ContainsKey(target))
                    {
                        parsed.Member = target;
                    }
                }
                catch (Exception) { }
            }

            // Джойним остальные
            if (inputSplitted.Length > 1)
            {
                string[] messageSplitted = inputSplitted.Skip(1).ToArray();
                parsed.Message = String.Join(" ", messageSplitted);
            }

            return(parsed);
        }
Exemplo n.º 3
0
        async Task ProcessTargetCommand(DiscordChannel channel, Game.Action action, DiscordUser user, TargetCommandArgs targetCommandArgs)
        {
            // Проверяем ночь ли сейчас
            if (Game.Status == Game.GameStatus.Night)
            {
                DiscordMember doer = Game.FindPlayerByUser(user);
                // Проверяем является ли пользователь участником игры
                if (doer != null)
                {
                    bool authorized = true;

                    // Проверяем является ли игрок активной ролью (или ходящим мафом) или сделал ли участик ход
                    if (!Game.Active.Contains(doer) || Game.MadeAnOrder(doer))
                    {
                        authorized = false;
                    }

                    // Проверяем совпадает ли действие с ролью
                    if (authorized)
                    {
                        switch (action)
                        {
                        case Game.Action.Kill:
                            //if (!(Game.Players[doer].Role == Game.Role.Commissar || Game.Players[doer].Role == Game.Role.Mafia || Game.Players[doer].Role == Game.Role.Maniac)) ДОБАВИТЬ: возможность убийства у комиссара после введения денежной системы
                            if (!(Game.Players[doer].Role == Game.Role.Mafia || Game.Players[doer].Role == Game.Role.Maniac))
                            {
                                authorized = false;
                            }
                            break;

                        case Game.Action.Check:
                            if (!(Game.Players[doer].Role == Game.Role.Commissar))
                            {
                                authorized = false;
                            }
                            break;

                        case Game.Action.Heal:
                            if (!(Game.Players[doer].Role == Game.Role.Doctor))
                            {
                                authorized = false;
                            }
                            break;
                        }

                        // Если все ок, то вносим проверяем цель и вносим
                        if (authorized)
                        {
                            if (targetCommandArgs.Member != null)
                            {
                                // Проверка чтобы мафиози не убивал мафиози
                                if (action == Game.Action.Kill && Game.Players[doer].Role == Game.Role.Mafia && Game.Players[targetCommandArgs.Member].Role == Game.Role.Mafia && doer != targetCommandArgs.Member)
                                {
                                    await View.Send(channel, GameMessages.ShowCannotKillLogovoMember());
                                }
                                else
                                {
                                    await Game.AddNightOrder(channel, action, doer, targetCommandArgs.Member, targetCommandArgs.Message);
                                }
                            }
                            else
                            {
                                await View.Send(channel, GameMessages.ShowNoPlayer());
                            }
                        }
                    }
                }
            }
        }