public Task SortModeAsync(GuildModel.Lobby lobby, int teamPlayers) { lobby.UserLimit = teamPlayers * 2; return(InlineReactionReplyAsync( new ReactionCallbackData( "", new EmbedBuilder { Description = "Please react with the team sorting mode you would like for this lobby:\n" + "1\u20e3 `CompleteRandom` __**Completely Random Team sorting**__\n" + "All teams are chosen completely randomly\n\n" + "2\u20e3 `Captains` __**Captains Mode**__\n" + "Two team captains are chosen, they each take turns picking players until teams are both filled.\n\n" + "3\u20e3 `SortByScore` __**Score Balance Mode**__\n" + "Players will be automatically selected and teams will be balanced based on player scores\n" + "4\u20e3 `Pick2` __**Balanced Captains Mode**__\n" + "1,2,2,1,1,2,1,2,1... pick order. Makes team balancing fairer!" }.Build(), timeout: TimeSpan.FromMinutes(2), timeoutCallback: c => SimpleEmbedAsync("Command Timed Out")) .WithCallback(new Emoji("1\u20e3"), (c, r) => CompleteLobbyCreationAsync(lobby, GuildModel.Lobby._PickMode.CompleteRandom)) .WithCallback(new Emoji("2\u20e3"), (c, r) => CompleteLobbyCreationAsync(lobby, GuildModel.Lobby._PickMode.Captains)) .WithCallback(new Emoji("3\u20e3"), (c, r) => CompleteLobbyCreationAsync(lobby, GuildModel.Lobby._PickMode.SortByScore)) .WithCallback(new Emoji("4\u20e3"), (c, r) => CompleteLobbyCreationAsync(lobby, GuildModel.Lobby._PickMode.Pick2)))); }
public async Task CreateLobbyAsync() { if (Context.Elo.Lobby != null) { throw new Exception("Channel is already a lobby"); } var lobby = new GuildModel.Lobby { ChannelID = Context.Channel.Id }; await InlineReactionReplyAsync( new ReactionCallbackData( "", new EmbedBuilder { Description = "Please react with the amount of players you would like **PER TEAM**\n" + "ie. :two: = each team has two players (4 players total)" }.Build(), timeout : TimeSpan.FromMinutes(2), timeoutCallback : c => SimpleEmbedAsync("Command Timed Out")) .WithCallback(new Emoji("1\u20e3"), (c, r) => SortModeAsync(lobby, 1)) .WithCallback(new Emoji("2\u20e3"), (c, r) => SortModeAsync(lobby, 2)) .WithCallback(new Emoji("3\u20e3"), (c, r) => SortModeAsync(lobby, 3)) .WithCallback(new Emoji("4\u20e3"), (c, r) => SortModeAsync(lobby, 4)) .WithCallback(new Emoji("5\u20e3"), (c, r) => SortModeAsync(lobby, 5)) .WithCallback(new Emoji("6\u20e3"), (c, r) => SortModeAsync(lobby, 6)) .WithCallback(new Emoji("7\u20e3"), (c, r) => SortModeAsync(lobby, 7)) .WithCallback(new Emoji("8\u20e3"), (c, r) => SortModeAsync(lobby, 8)) .WithCallback(new Emoji("9\u20e3"), (c, r) => SortModeAsync(lobby, 9))); }
public Task CompleteLobbyCreationAsync(GuildModel.Lobby lobby, GuildModel.Lobby._PickMode pickMode) { lobby.PickMode = pickMode; Context.Server.Lobbies.Add(lobby); Context.Server.Save(); return(SimpleEmbedAsync( "Success, Lobby has been created.\n" + $"`Size:` {lobby.UserLimit}\n" + $"`Team Size:` {lobby.UserLimit / 2}\n" + $"`Team Mode:` {(lobby.PickMode == GuildModel.Lobby._PickMode.Captains ? $"Captains => {lobby.CaptainSortMode}" : $"{lobby.PickMode}")}\n"
public static GuildModel.Lobby._MapInfo MapField(GuildModel.Lobby lobby) { var map = lobby.MapInfo; if (!lobby.Maps.Any()) { return(map); } if (lobby.MapMode == GuildModel.Lobby.MapSelector.None) { return(map); } if (lobby.MapMode == GuildModel.Lobby.MapSelector.Random) { var rnd = new Random(); map.LastMap = lobby.Maps.OrderByDescending(x => rnd.Next()).FirstOrDefault(); } if (lobby.MapMode == GuildModel.Lobby.MapSelector.NoRepeat) { var rnd = new Random(); map.LastMap = lobby.Maps.OrderByDescending(x => rnd.Next()).FirstOrDefault(x => x != map.LastMap) ?? map.LastMap; } if (lobby.MapMode == GuildModel.Lobby.MapSelector.Cycle) { map.LastMapIndex++; if (map.LastMapIndex >= lobby.Maps.Count) { map.LastMapIndex = 0; } try { map.LastMap = lobby.Maps[map.LastMapIndex]; } catch { map.LastMap = lobby.Maps[0]; map.LastMapIndex = 0; } } return(map); }
public static string HostField(Context context, GuildModel.Lobby lobby) { var ulongs = new List <ulong>(); ulongs.AddRange(lobby.Game.Team1.Players); ulongs.AddRange(lobby.Game.Team2.Players); var ePlayers = ulongs.Select(x => context.Server.Users.FirstOrDefault(u => u.UserID == x)).Where(x => x != null).ToList(); string player; switch (lobby.HostSelectionMode) { case GuildModel.Lobby.HostSelector.None: return(null); case GuildModel.Lobby.HostSelector.MostPoints: player = context.Guild.GetUser(ePlayers.OrderByDescending(x => x.Stats.Points).FirstOrDefault().UserID)?.Mention; break; case GuildModel.Lobby.HostSelector.MostWins: player = context.Guild.GetUser(ePlayers.OrderByDescending(x => x.Stats.Wins).FirstOrDefault().UserID)?.Mention; break; case GuildModel.Lobby.HostSelector.HighestWinLoss: player = context.Guild.GetUser(ePlayers.OrderByDescending(x => (double)x.Stats.Wins / x.Stats.Losses).FirstOrDefault().UserID)?.Mention; break; case GuildModel.Lobby.HostSelector.Random: player = context.Guild.GetUser(ePlayers.OrderByDescending(x => new Random().Next()).FirstOrDefault().UserID)?.Mention; break; default: return(null); } return(player ?? "N/A"); }
public static void Parse() { var serversave = File.ReadAllText(Servers.EloFile); Servers.ServerList = JsonConvert.DeserializeObject <List <Servers.Server> >(serversave); foreach (var server in Servers.ServerList) { try { var ranks = server.Ranks.Select(r => new GuildModel.Rank { RoleID = r.RoleId, Threshold = r.Points, LossModifier = r.LossModifier, WinModifier = r.WinModifier, IsDefault = false }).ToList(); ranks.Add(new GuildModel.Rank { RoleID = server.RegisterRole, IsDefault = true, LossModifier = 0, WinModifier = 0, Threshold = server.registerpoints }); var newObject = new GuildModel(); newObject.ID = server.ServerId; newObject.Settings = new GuildModel.GuildSettings { GameSettings = new GuildModel.GuildSettings._GameSettings { AllowNegativeScore = server.AllowNegativeScore, AnnouncementsChannel = server.AnnouncementsChannel, BlockMultiQueuing = server.BlockMultiQueueing, DMAnnouncements = true, RemoveOnAfk = server.Autoremove, UseKd = server.showkd }, Registration = new GuildModel.GuildSettings._Registration { DefaultLossModifier = server.Lossamount, DefaultWinModifier = server.Winamount, DeleteProfileOnLeave = server.DeleteProfileOnLeave, Message = server.Registermessage, RegistrationBonus = server.registerpoints }, Premium = new GuildModel.GuildSettings._Premium { Expiry = server.Expiry == DateTime.MaxValue ? DateTime.MinValue : server.Expiry, IsPremium = server.IsPremium, PremiumKeys = new List <GuildModel.GuildSettings._Premium.Key>() }, Moderation = new GuildModel.GuildSettings._Moderation { AdminRoles = new List <ulong> { server.AdminRole }, ModRoles = new List <ulong> { server.ModRole } } }; var lobbies = new List <GuildModel.Lobby>(); foreach (var q in server.Queue) { var item = new GuildModel.Lobby(); item.CaptainSortMode = Enum.TryParse(q.CaptainSortMode.ToString(), true, out GuildModel.Lobby.CaptainSort cm) ? cm : GuildModel.Lobby.CaptainSort.RandomTop4MostPoints; item.ChannelID = q.ChannelId; item.Description = q.ChannelGametype ?? "ELO LOBBY"; item.HostSelectionMode = GuildModel.Lobby.HostSelector.MostPoints; item.Maps = q.Maps?.ToList() ?? new List <string>(); item.PickMode = Enum.TryParse(q.PickMode.ToString(), true, out GuildModel.Lobby._PickMode pm) ? pm : GuildModel.Lobby._PickMode.CompleteRandom; item.Game = new GuildModel.Lobby.CurrentGame { IsPickingTeams = false, QueuedPlayerIDs = new List <ulong>(), Team1 = new GuildModel. Lobby. CurrentGame. Team(), Team2 = new GuildModel. Lobby. CurrentGame. Team() }; item.GamesPlayed = 0; item.MapMode = GuildModel.Lobby.MapSelector.Random; item.UserLimit = q.UserLimit; lobbies.Add(item); } newObject.Lobbies = lobbies; newObject.Users = server.UserList.Select(u => new GuildModel.User { UserID = u.UserId, Username = u.Username, Stats = new GuildModel.User.Score { Deaths = u.deaths, Draws = u.draws, Kills = u.kills, Losses = u.Losses, Points = u.Points, Wins = u.Wins, GamesPlayed = 0 } }).ToList(); newObject.Ranks = ranks; using (var session = DatabaseHandler.Store.OpenSession("ELO_BOT")) { var load = session.Load <GuildModel>($"{server.ServerId}"); if (session.Advanced.IsLoaded($"{server.ServerId}") && load != newObject) { session.Advanced.Evict(load); session.Store(newObject, $"{newObject.ID}"); session.SaveChanges(); Console.WriteLine("Updated " + server.ServerId); } } } catch (Exception e) { Console.WriteLine(e); } } Console.WriteLine("Complete"); }