示例#1
0
        public void MovePhase()
        {
            Status = (Status == GameStatus.IdlePhase) ? GameStatus.ActionPhase : GameStatus.IdlePhase;
            if (Status == GameStatus.IdlePhase)
            {
                Day++;
            }

            // arrange each role by priority
            var roles = RoleAssignments.Select(x => x.Value).OrderByDescending(x => x.PhasePriority);

            foreach (var role in roles)
            {
                if (Status == GameStatus.IdlePhase)
                {
                    role.Perform_ActionPhase();
                }
                else if (Status == GameStatus.ActionPhase)
                {
                    role.Perform_IdlePhase();
                }
            }

            // placeholder for Storymaker
            var start_embed = new EmbedBuilder().WithTitle($"{StatusNames[Status]} [Day {Day}]").WithThumbnailUrl(Links.LinkRewriteBlue1);

            Public_GvG.SendMessageAsync("", false, start_embed.Build());
            TimerStarted = DateTime.Now;
        }
示例#2
0
        public async Task <IEnumerable <IGameRole> > GenerateCivilianRoles(int count)
        {
            var everyone = GaiaMembers.Concat(GuardianMembers).Concat(OCMembers).Concat(Civilians);
            var all_ids  = new ulong[] { Occult_Club.Id, Guardian.Id, Gaia.Id };

            if (count < 4)
            {
                var random_players = (await ServerHost.GetUsersAsync())
                                     .Where((x) => !x.IsBot &&
                                            !everyone.Contains(x) &&
                                            !x.RoleIds.Any((y) => all_ids.Contains(y))
                                            );
                var random_numbers    = new int[4 - count];
                var total_non_playing = random_players.Count();
                var resultMsg         = String.Empty;
                for (int i = 0; i < 4 - count; i++)
                {
                    do
                    {
                        random_numbers[i] = Randomizer.Next(total_non_playing);
                    } while (random_numbers.Take(i).Contains(random_numbers[i]));
                    var memToAdd = random_players.ElementAt(random_numbers[i]);
                    Civilians.Add(memToAdd);
                    await memToAdd.AddRoleAsync(GvG_Player);

                    resultMsg += $"Because there are too few players, {memToAdd.Mention} is forced to join the game as a Civilian" + ((i == count - 1) ? "" : Environment.NewLine);
                }
                Public_GvG.SendMessageAsync(resultMsg);
            }
            IEnumerable <IGameRole> result = new IGameRole[] { new Kagari(), new NormalCivilian(), new NormalCivilian(), new NormalCivilian() };

            if (count > 4)
            {
                for (int i = 0; i < count - 4; i++)
                {
                    result = result.Append(new NormalCivilian());
                }
            }
            return(result.OrderBy((x) => Randomizer.Next()));
        }
示例#3
0
        internal async Task ForceJoin(IRole role, List <IGuildUser> roleMembers, int members)
        {
            var possibleMembers = (await ServerHost.GetUsersAsync()).Where((x) => x.RoleIds.Contains(role.Id) && !roleMembers.Contains(x));

            int[]  randomMembers = new int[members];
            string resultMsg     = string.Empty;

            for (int i = 0; i < members; i++)
            {
                do
                {
                    randomMembers[i] = Randomizer.Next(possibleMembers.Count());
                } while (randomMembers.Take(i).Contains(randomMembers[i]));
                var memToAdd = possibleMembers.ElementAt(randomMembers[i]);
                roleMembers.Add(memToAdd);
                resultMsg += $"Because there are too few players, {memToAdd.Mention} is forced to join the game as {role?.Mention}" + ((i == members - 1) ? "" : Environment.NewLine);
                await memToAdd.AddRoleAsync(GvG_Player);

                // force join member goes here.
            }

            await Public_GvG.SendMessageAsync(resultMsg);
        }
示例#4
0
        public async Task <EmbedBuilder> StartGame(IUser invoker)
        {
            if (invoker.Id != (Hoster?.Id ?? 0))
            {
                return(new EmbedBuilder()
                       .WithTitle("StartGameError")
                       .WithDescription("ErrorCreateGameFirst"));
            }
            // placeholder for Storymaker.
            var start_embed = new EmbedBuilder().WithTitle("Game Start!");

            await AssignRoles();

            Day++;
            Status = GameStatus.IdlePhase;
            if (PhaseTimer != null)
            {
                PhaseTimer?.Change(Phase_Interval, Phase_Interval);
            }
            else
            {
                PhaseTimer = new Timer(_ => MovePhase(), null, Phase_Interval, Phase_Interval);
                PhaseTimer.Change(Phase_Interval, Phase_Interval);
                TimerStarted = DateTime.Now;
            }

            await Public_GvG.SendMessageAsync("", false, start_embed.Build());

            await Guardian_Channel.SendMessageAsync("", false, start_embed.Build());

            await Gaia_Channel.SendMessageAsync("", false, start_embed.Build());

            await OC_Channel.SendMessageAsync("", false, start_embed.Build());

            return(null);
        }