示例#1
0
 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))));
 }
示例#2
0
        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)));
        }
示例#3
0
 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"
示例#4
0
        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);
        }
示例#5
0
        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");
        }
示例#6
0
        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");
        }