コード例 #1
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "You must specify a player name");
                return(null);
            }

            target = battle.GetAllUserNames().FirstOrDefault(x => x.ToLower().Contains(arguments.ToLower()));
            if (target == null)
            {
                battle.Respond(e, "Player " + arguments + " not found!");
                return(null);
            }
            if (target == battle.FounderName)
            {
                battle.Respond(e, "Cannot kick the host");
                return(null);
            }

            if (e != null && battle.spring.IsRunning && battle.spring.LobbyStartContext?.Players.Any(x => x.Name == e.User && !x.IsSpectator) == false)
            {
                battle.Respond(e, "Only players can invoke this during a game");
                return(null);
            }
            return($"Do you want to kick {target}?");
        }
コード例 #2
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            map = string.IsNullOrEmpty(arguments)
                ? MapPicker.GetRecommendedMap(battle.GetContext())
                : MapPicker.FindResources(ResourceType.Map, arguments, battle.MinimalMapSupportLevel).FirstOrDefault();


            if (map == null)
            {
                battle.Respond(e, "Cannot find such map.");
                return(null);
            }
            else if (map.InternalName == battle.MapName)
            {
                battle.Respond(e, "Already on this map.");
                return(null);
            }
            else if (!string.IsNullOrEmpty(arguments) && map.MapSupportLevel < MapSupportLevel.Supported)
            {
                alternativeMap = MapPicker.FindResources(ResourceType.Map, arguments, MapSupportLevel.Supported).FirstOrDefault();
            }


            if (map.MapSupportLevel >= MapSupportLevel.Supported)
            {
                return($"Change map to {map.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{map.ResourceID} ?");
            }
            else
            {
                return($"Change to UNSUPPORTED map {map.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{map.ResourceID} ?");
            }
        }
コード例 #3
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     foreach (var grp in ServerBattle.Commands.Values.GroupBy(x => x.Access).OrderBy(x=>x.Key))
     {
         await battle.Respond(e, $"=== {grp.Key} {grp.Key.Description()} ===");
         foreach (var com in grp.OrderBy(x=>x.Shortcut)) await battle.Respond(e, $"!{com.Shortcut} {com.Help}");
         await battle.Respond(e, $"===");
     }
 }
コード例 #4
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     if (games.Any())
     {
         await battle.Respond(e, "---");
         foreach (var map in games) await battle.Respond(e, map.ResourceID + ": " + map.InternalName);
         await battle.Respond(e, "---");
     }
     else await battle.Respond(e, "no such game found");
 }
コード例 #5
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     if (engines.Any())
     {
         await battle.Respond(e, "---");
         foreach (var eng in engines) await battle.Respond(e, eng);
         await battle.Respond(e, "---");
     }
     else await battle.Respond(e, "no such engine found");
 }
コード例 #6
0
        private static Dictionary <string, string> GetOptionsDictionary(ServerBattle battle, Say e, string s)
        {
            var ret = new Dictionary <string, string>();

            if (battle.HostedModInfo == null)
            {
                return(ret);
            }

            var pairs = s.Split(new[] { ',' });

            if (pairs.Length == 0 || pairs[0].Length == 0)
            {
                battle.Respond(e, "requires key=value format");
                return(ret);
            }
            foreach (var pair in pairs)
            {
                var parts = pair.Split(new[] { '=' }, 2);
                if (parts.Length != 2)
                {
                    battle.Respond(e, "requires key=value format");
                    return(ret);
                }
                var key = parts[0].Trim(); //Trim() to make "key = value format" ignore whitespace
                var val = parts[1].Trim();

                var found = false;
                var mod   = battle.HostedModInfo;
                foreach (var o in mod.Options)
                {
                    if (o.Key == key)
                    {
                        found = true;
                        string res;
                        if (o.GetPair(val, out res))
                        {
                            ret[key] = val;
                        }
                        else
                        {
                            battle.Respond(e, "Value " + val + " is not valid for this option");
                        }

                        break;
                    }
                }
                if (!found)
                {
                    battle.Respond(e, "No option called " + key + " found");
                    return(ret);
                }
            }
            return(ret);
        }
コード例 #7
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            foreach (var grp in ServerBattle.Commands.Values.GroupBy(x => x.Access).OrderBy(x => x.Key))
            {
                await battle.Respond(e, $"=== {grp.Key} {grp.Key.Description()} ===");

                foreach (var com in grp.OrderBy(x => x.Shortcut))
                {
                    await battle.Respond(e, $"!{com.Shortcut} {com.Help}");
                }
                await battle.Respond(e, $"===");
            }
        }
コード例 #8
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            var mod = battle.HostedModInfo;

            if (mod == null || mod.Options.Length == 0)
            {
                await battle.Respond(e, "this game has no options");
            }
            else
            {
                foreach (var opt in mod.Options)
                {
                    await battle.Respond(e, opt.ToString());
                }
            }
        }
コード例 #9
0
        //Vote for an option, one-indexed
        public async Task <bool> Vote(Say e, int vote)
        {
            if (e == null)
            {
                return(false);
            }
            string ineligibilityReason = EligiblitySelector(e.User);

            if (ineligibilityReason == null && !Ended)
            {
                userVotes[e.User] = vote - 1;

                if (yesNoVote)
                {
                    battle.SayGame(string.Format("Poll: {0} [!y={1}/{3}, !n={2}/{3}]", Topic, userVotes.Count(x => x.Value == 0), userVotes.Count(x => x.Value == 1), winCount));
                }
                await battle.server.Broadcast(battle.Users.Keys, GetBattlePoll());

                if (await CheckEnd(false))
                {
                    return(true);
                }
            }
            else
            {
                await battle.Respond(e, ineligibilityReason);

                return(false);
            }
            return(false);
        }
コード例 #10
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            var b = battle;
            Dictionary<int, double> grouping;

            using (var db = new ZkDataContext())
            {
                if (battle.IsInGame)
                    grouping = b.spring.LobbyStartContext?.Players.Where(u => !u.IsSpectator)
                        .GroupBy(u => u.AllyID)
                        .ToDictionary(x => x.Key, x => x.Average(y => Account.AccountByName(db, y.Name).EffectiveMmElo));
                else
                    grouping = b.Users.Values.Where(u => !u.IsSpectator)
                        .GroupBy(u => u.AllyNumber)
                        .ToDictionary(x => x.Key, x => x.Average(y => y.LobbyUser.EffectiveMmElo));
            }

            KeyValuePair<int, double>? oldg = null;
            foreach (var g in grouping)
            {
                if (oldg != null)
                {
                    var t1elo = oldg.Value.Value;
                    var t2elo = g.Value;
                    await
                        battle.Respond(e,
                            $"team {oldg.Value.Key + 1} has {Utils.GetWinChancePercent(t2elo - t1elo)}% chance to win over team {g.Key + 1}");
                }
                oldg = g;
            }
        }
コード例 #11
0
        public async Task <bool> Vote(Say e, bool vote)
        {
            if (e == null)
            {
                return(false);
            }
            string reason;

            if (command.GetRunPermissions(battle, e.User, out reason) >= BattleCommand.RunPermission.Vote && !Ended)
            {
                if (command.IsSpectator(battle, e.User, null))
                {
                    return(false);
                }

                userVotes[e.User] = vote;

                var yes = userVotes.Count(x => x.Value == true);
                var no  = userVotes.Count(x => x.Value == false);
                await battle.SayBattle(string.Format("Poll: {0} [!y={1}/{3}, !n={2}/{3}]", question, yes, no, winCount));

                if (await CheckEnd(false))
                {
                    return(true);
                }
            }
            else
            {
                await battle.Respond(e, reason);

                return(false);
            }
            return(false);
        }
コード例 #12
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "You must specify a player name");
                return null;
            }

            target = battle.GetAllUserNames().FirstOrDefault(x => x.Contains(arguments));
            if (target == null) target = arguments;
            if (target == battle.FounderName) {
                battle.Respond(e, "Cannot kick the host");
                return null;
            }
            return $"do you want to kick {target}?";
        }
コード例 #13
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            Map = string.IsNullOrEmpty(arguments)
                ? MapPicker.GetRecommendedMap(battle.GetContext(), (battle.MinimalMapSupportLevel > MapSupportLevel.Featured) ? battle.MinimalMapSupportLevel : MapSupportLevel.Featured)
                : MapPicker.FindResources(ResourceType.Map, arguments, battle.MinimalMapSupportLevel, true).FirstOrDefault();


            if (Map == null)
            {
                var unsupportedMap = MapPicker.FindResources(ResourceType.Map, arguments, MapSupportLevel.None).FirstOrDefault();
                if (unsupportedMap != null)
                {
                    if (battle.IsAutohost)
                    {
                        battle.Respond(e, $"The map {unsupportedMap.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{unsupportedMap.ResourceID} is not available on this autohost. Play it in a player hosted battle.");
                    }
                    else
                    {
                        battle.Respond(e, $"The map {unsupportedMap.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{unsupportedMap.ResourceID} is not supported. Unsupported maps can only be played on passworded hosts.");
                    }
                }
                else
                {
                    battle.Respond(e, "Cannot find such a map.");
                }
                return(null);
            }
            else if (Map.InternalName == battle.MapName)
            {
                battle.Respond(e, "Already on this map.");
                return(null);
            }
            else if (!string.IsNullOrEmpty(arguments) && Map.MapSupportLevel < MapSupportLevel.Supported)
            {
                alternativeMap = MapPicker.FindResources(ResourceType.Map, arguments, MapSupportLevel.Supported, true).FirstOrDefault();
            }


            if (Map.MapSupportLevel >= MapSupportLevel.Supported)
            {
                return($"Change map to {Map.InternalName}?");
            }
            else
            {
                return($"Change to UNSUPPORTED map {Map.InternalName}?");
            }
        }
コード例 #14
0
        private static Dictionary<string, string> GetOptionsDictionary(ServerBattle battle, Say e, string s)
        {
            var ret = new Dictionary<string, string>();
            if (battle.HostedModInfo == null) return ret;

            var pairs = s.Split(new[] { ',' });
            if (pairs.Length == 0 || pairs[0].Length == 0)
            {
                battle.Respond(e, "requires key=value format");
                return ret;
            }
            foreach (var pair in pairs)
            {
                var parts = pair.Split(new[] { '=' }, 2);
                if (parts.Length != 2)
                {
                    battle.Respond(e, "requires key=value format");
                    return ret;
                }
                var key = parts[0].Trim(); //Trim() to make "key = value format" ignore whitespace 
                var val = parts[1].Trim();

                var found = false;
                var mod = battle.HostedModInfo;
                foreach (var o in mod.Options)
                {
                    if (o.Key == key)
                    {
                        found = true;
                        string res;
                        if (o.GetPair(val, out res))
                        {
                            ret[key] = val;
                        }
                        else battle.Respond(e, "Value " + val + " is not valid for this option");

                        break;
                    }
                }
                if (!found)
                {
                    battle.Respond(e, "No option called " + key + " found");
                    return ret;
                }
            }
            return ret;
        }
コード例 #15
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            if (engines.Any())
            {
                await battle.Respond(e, "---");

                foreach (var eng in engines)
                {
                    await battle.Respond(e, eng);
                }
                await battle.Respond(e, "---");
            }
            else
            {
                await battle.Respond(e, "no such engine found");
            }
        }
コード例 #16
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            if (maps.Any())
            {
                await battle.Respond(e, "---");

                foreach (var map in maps)
                {
                    await battle.Respond(e, map.ResourceID + ": " + map.InternalName);
                }
                await battle.Respond(e, "---");
            }
            else
            {
                await battle.Respond(e, "no such map found");
            }
        }
コード例 #17
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     if (!battle.toNotify.Contains(e.User))
     {
         battle.toNotify.Add(e.User);
     }
     await battle.Respond(e, "I will notify you when the game ends.");
 }
コード例 #18
0
 public override string Arm(ServerBattle battle, Say e, string arguments = null)
 {
     if (string.IsNullOrEmpty(arguments))
     {
         battle.Respond(e, "Pick a command to poll, e.g. !poll map tabula");
         return null;
     }
     var parts = arguments.Split(new[] { ' ' }, 2);
     var commandName = parts[0] ?? "";
     var commandArgs = parts.Length > 1 ? parts[1] : null;
     commandToRun = battle.GetCommandByName(commandName);
     if (commandToRun.GetRunPermissions(battle, e.User) >= RunPermission.Vote)
     {
         return commandToRun.Arm(battle, e, commandArgs);
     }
     battle.Respond(e, "You cannot poll this");
     return null;
 }
コード例 #19
0
 public override string Arm(ServerBattle battle, Say e, string arguments = null)
 {
     if (!battle.IsMatchMakerBattle)
     {
         battle.Respond(e, "Not a matchmaker battle, cannot predict");
         return(null);
     }
     return(string.Empty);
 }
コード例 #20
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            this.gameName = arguments;

            if ((battle.Mode != AutohostMode.None || !battle.IsPassworded) && arguments != "zk:stable")
            {
                battle.Respond(e, $"You can only do this on custom passworded hosts.");
                return(null);
            }

            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "Please specify game name.");
                return(null);
            }

            return($"Force change game to ?");
        }
コード例 #21
0
 public override string Arm(ServerBattle battle, Say e, string arguments = null)
 {
     if (battle.IsMatchMakerBattle || battle.ApplicableRating != RatingCategory.Casual)
     {
         battle.Respond(e, "Only casual battles may have clan balance toggled");
         return(null);
     }
     return(string.Empty);
 }
コード例 #22
0
 public override string Arm(ServerBattle battle, Say e, string arguments = null)
 {
     if (battle.IsMatchMakerBattle || battle.ApplicableRating != RatingCategory.Casual)
     {
         battle.Respond(e, "Only casual battles be repurposed as autohosts");
         return(null);
     }
     return(string.Empty);
 }
コード例 #23
0
 public override string Arm(ServerBattle battle, Say e, string arguments = null)
 {
     if (!battle.IsMatchMakerBattle)
     {
         battle.Respond(e, "Not a matchmaker battle, cannot predict");
         return null;
     }
     return string.Empty;
 }
コード例 #24
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "Pick a command to poll, e.g. !poll map tabula");
                return(null);
            }
            var parts       = arguments.Split(new[] { ' ' }, 2);
            var commandName = parts[0] ?? "";
            var commandArgs = parts.Length > 1 ? parts[1] : null;

            commandToRun = battle.GetCommandByName(commandName);
            if (commandToRun.GetRunPermissions(battle, e.User) >= RunPermission.Vote && commandToRun.Access != AccessType.NoCheck)
            {
                return(commandToRun.Arm(battle, e, commandArgs));
            }
            battle.Respond(e, "You cannot poll this");
            return(null);
        }
コード例 #25
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (DateTime.UtcNow.Subtract(battle.spring.IngameStartTime ?? DateTime.UtcNow).TotalSeconds < GlobalConst.MinDurationForElo)
            {
                battle.Respond(e, "You cannot resign so early");
                return null;
            }

            var voteStarter = battle.spring.LobbyStartContext?.Players.FirstOrDefault(x => x.Name == e.User && !x.IsSpectator);
            if (voteStarter != null)
            {
                alliance = voteStarter.AllyID;
                return $"Resign team {voteStarter.AllyID + 1}?";
            }
            else
            {
                battle.Respond(e, "Only players can invoke this");
            }
            return null;
        }
コード例 #26
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "You must specify a player name");
                return(null);
            }

            target = battle.GetAllUserNames().FirstOrDefault(x => x.Contains(arguments));
            if (target == null)
            {
                target = arguments;
            }
            if (target == battle.FounderName)
            {
                battle.Respond(e, "Cannot kick the host");
                return(null);
            }
            return($"do you want to kick {target}?");
        }
コード例 #27
0
        public async Task <bool> Vote(Say e, bool vote)
        {
            string reason;

            if (command.GetRunPermissions(battle, e.User, out reason) >= BattleCommand.RunPermission.Vote && !ended)
            {
                if (command.IsSpectator(battle, e.User, null))
                {
                    return(false);
                }

                userVotes[e.User] = vote;
                var yes = userVotes.Count(x => x.Value == true);
                var no  = userVotes.Count(x => x.Value == false);

                if (yes >= winCount)
                {
                    ended = true;
                }

                await battle.SayBattle(string.Format("Poll: {0} [!y={1}/{3}, !n={2}/{3}]", question, yes, no, winCount));

                if (yes >= winCount)
                {
                    ended = true;
                    await battle.SayBattle($"Poll: {question} [END:SUCCESS]");

                    if (command.Access == BattleCommand.AccessType.NotIngame && battle.spring.IsRunning)
                    {
                        return(true);
                    }
                    if (command.Access == BattleCommand.AccessType.Ingame && !battle.spring.IsRunning)
                    {
                        return(true);
                    }
                    await command.ExecuteArmed(battle, Creator);

                    return(true);
                }
                else if (no >= winCount)
                {
                    await End();

                    return(true);
                }
            }
            else
            {
                await battle.Respond(e, reason);

                return(false);
            }
            return(false);
        }
コード例 #28
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (DateTime.UtcNow.Subtract(battle.spring.IngameStartTime ?? DateTime.UtcNow).TotalSeconds < GlobalConst.MinDurationForElo)
            {
                battle.Respond(e, "You cannot resign so early");
                return(null);
            }

            var voteStarter = battle.spring.LobbyStartContext?.Players.FirstOrDefault(x => x.Name == e.User && !x.IsSpectator);

            if (voteStarter != null)
            {
                alliance = voteStarter.AllyID;
                return($"Resign team {voteStarter.AllyID + 1}?");
            }
            else
            {
                battle.Respond(e, "Only players can invoke this");
            }
            return(null);
        }
コード例 #29
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "Pick a command to poll, e.g. !poll map tabula");
                return(null);
            }
            var parts       = arguments.Split(new[] { ' ' }, 2);
            var commandName = parts[0] ?? "";
            var commandArgs = parts.Length > 1 ? parts[1] : null;

            commandToRun = battle.GetCommandByName(commandName);
            string reason;

            if (commandToRun.GetRunPermissions(battle, e.User, out reason) >= RunPermission.Vote && commandToRun.Access != AccessType.NoCheck && commandToRun.Access != AccessType.Admin && !(commandToRun.Access == AccessType.NotIngameNotAutohost && battle.IsAutohost))
            {
                return(commandToRun.Arm(battle, e, commandArgs));
            }
            battle.Respond(e, reason);
            return(null);
        }
コード例 #30
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "please specify options");
                return null;
            }

            optionsAsString = arguments;
            options = GetOptionsDictionary(battle, e, arguments);
            if (options.Count == 0) return null;
            return $"Set options {arguments} ?";
        }
コード例 #31
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                arguments = battle.server.Game ?? GlobalConst.DefaultZkTag;
            }
            game = MapPicker.FindResources(ResourceType.Mod, arguments).FirstOrDefault();

            if ((battle.Mode != AutohostMode.None || !battle.IsPassworded) && arguments != "zk:stable" && !battle.IsAutohost)
            {
                battle.Respond(e, $"You can only do this on custom passworded hosts.");
                return(null);
            }

            if (game == null)
            {
                battle.Respond(e, "Cannot find such game.");
                return(null);
            }

            return($"Change game to {game.RapidTag} {game.InternalName}?");
        }
コード例 #32
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments)) arguments = battle.server.Game ?? "zk:stable";
            game = MapPicker.FindResources(ResourceType.Mod, arguments).FirstOrDefault();

            if (game == null)
            {
                battle.Respond(e, "Cannot find such game.");
                return null;
            }

            return $"Change game to {game.RapidTag} {game.InternalName}?";
        }
コード例 #33
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            engine = string.IsNullOrEmpty(arguments) ? battle.server.Engine : arguments;

            if ((battle.Mode != AutohostMode.None || !battle.IsPassworded) && engine != battle.server.Engine)
            {
                battle.Respond(e, $"You cannot change engine to version other than {battle.server.Engine} here, use custom passworded room");
                return(null);
            }

            if (!battle.server.SpringPaths.HasEngineVersion(engine))
            {
                var serv = GlobalConst.GetContentService(); // TODO this can be done directly, we are in server
                if (!serv.GetEngineList(null).Any(x => x == engine))
                {
                    battle.Respond(e, "Engine not found");
                    return(null);
                }
                battle.server.Downloader.GetResource(DownloadType.ENGINE, engine);
            }

            return($"Change engine to {engine}?");
        }
コード例 #34
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            engine = string.IsNullOrEmpty(arguments) ? battle.server.Engine : arguments;
            if (battle.Mode != AutohostMode.None && engine != battle.server.Engine)
            {
                battle.Respond(e, $"You cannot change engine to version other than {battle.server.Engine} here, use custom room");
                return null;
            }

            if (!battle.server.SpringPaths.HasEngineVersion(engine))
            {
                var serv = GlobalConst.GetContentService(); // TODO this can be done directly, we are in server
                if (!serv.GetEngineList(null).Any(x => x == engine))
                {
                    battle.Respond(e, "Engine not found");
                    return null;
                }
                battle.server.Downloader.GetResource(DownloadType.ENGINE, engine);
            }

            return $"Change engine to {engine}?";
           
        }
コード例 #35
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            map = string.IsNullOrEmpty(arguments)
                ? MapPicker.GetRecommendedMap(battle.GetContext())
                : MapPicker.FindResources(ResourceType.Map, arguments).FirstOrDefault();
            
            if (map == null)
            {
                battle.Respond(e, "Cannot find such map.");
                return null;
            }

            return $"Change map to {map.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{map.ResourceID} ?";
        }
コード例 #36
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            map = string.IsNullOrEmpty(arguments)
                ? MapPicker.GetRecommendedMap(battle.GetContext())
                : MapPicker.FindResources(ResourceType.Map, arguments).FirstOrDefault();

            if (map == null)
            {
                battle.Respond(e, "Cannot find such map.");
                return(null);
            }

            return($"Change map to {map.InternalName} {GlobalConst.BaseSiteUrl}/Maps/Detail/{map.ResourceID} ?");
        }
コード例 #37
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (battle.Mode != AutohostMode.None)
            {
                battle.Respond(e, $"Balance is only for custom hosts, this host is {battle.Mode.Description()}");
                return null;
            }
            if (arguments != null)
            {
                int tc;
                if (int.TryParse(arguments, out tc)) teamCount = tc;
            }

            return $"Do you want to balance {teamCount}";
        }
コード例 #38
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                battle.Respond(e, "please specify options");
                return(null);
            }

            optionsAsString = arguments;
            options         = GetOptionsDictionary(battle, e, arguments);
            if (options.Count == 0)
            {
                return(null);
            }
            return($"Set options {arguments} ?");
        }
コード例 #39
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                target = null;
                return($"do you want to spectate AFK?");
            }

            target = battle.GetAllUserNames().FirstOrDefault(x => x.Contains(arguments));
            if (target == null)
            {
                battle.Respond(e, "Player not found");
                return(null);
            }
            return($"do you want to spectate {target}?");
        }
コード例 #40
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (string.IsNullOrEmpty(arguments))
            {
                target = null;
                return $"do you want to spectate AFK?";
            }

            target = battle.GetAllUserNames().FirstOrDefault(x => x.Contains(arguments));
            if (target == null)
            {
                battle.Respond(e, "Player not found");
                return null;
            }
            return $"do you want to spectate {target}?";
        }
コード例 #41
0
        public override string Arm(ServerBattle battle, Say e, string arguments = null)
        {
            if (battle.Mode != AutohostMode.None)
            {
                battle.Respond(e, $"Balance is only for custom hosts, this host is {battle.Mode.Description()}");
                return(null);
            }
            if (arguments != null)
            {
                int tc;
                if (int.TryParse(arguments, out tc))
                {
                    teamCount = tc;
                }
            }

            return($"Do you want to balance {teamCount} ?");
        }
コード例 #42
0
        public override async Task ExecuteArmed(ServerBattle battle, Say e)
        {
            var b = battle;
            Dictionary <int, double> grouping;

            using (var db = new ZkDataContext())
            {
                if (battle.IsInGame)
                {
                    grouping = b.spring.LobbyStartContext?.Players.Where(u => !u.IsSpectator)
                               .GroupBy(u => u.AllyID)
                               .ToDictionary(x => x.Key, x => x.Average(y => RatingSystems.DisableRatingSystems ? Account.AccountByName(db, y.Name).BestEffectiveElo : Account.AccountByName(db, y.Name).GetBestRating().Elo));
                }
                else
                {
                    grouping = b.Users.Values.Where(u => !u.IsSpectator)
                               .GroupBy(u => u.AllyNumber)
                               .ToDictionary(x => x.Key, x => x.Average(y => Math.Max(y.LobbyUser.EffectiveMmElo, y.LobbyUser.EffectiveElo)));
                }
            }

            KeyValuePair <int, double>?oldg = null;

            foreach (var g in grouping)
            {
                if (oldg != null)
                {
                    var t1elo = oldg.Value.Value;
                    var t2elo = g.Value;
                    await
                    battle.Respond(e,
                                   $"team {oldg.Value.Key + 1} has {Utils.GetWinChancePercent(t2elo - t1elo)}% chance to win over team {g.Key + 1}");
                }
                oldg = g;
            }
        }
コード例 #43
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     
     if (!battle.toNotify.Contains(e.User)) battle.toNotify.Add(e.User);
     await battle.Respond(e, "I will notify you when the game ends.");
 }
コード例 #44
0
 public override async Task ExecuteArmed(ServerBattle battle, Say e)
 {
     var mod = battle.HostedModInfo;
     if (mod == null || mod.Options.Length == 0) await battle.Respond(e, "this game has no options");
     else foreach (var opt in mod.Options) await battle.Respond(e, opt.ToString());
 }