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; }
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())); }
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); }
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); }