Пример #1
0
        static void HookStats()
        {
            if (TopStat.Stats.Contains(statMostInfected))
            {
                return;                                           // don't duplicate
            }
            statMostInfected = new TopStat("Infected", "ZombieStats", "TotalInfected",
                                           () => "Most players infected", TopStat.FormatInteger);
            statMaxInfected = new TopStat("Survived", "ZombieStats", "TotalRounds",
                                          () => "Most rounds survived", TopStat.FormatInteger);
            statMostSurvived = new TopStat("ConsecutiveInfected", "ZombieStats", "MaxInfected",
                                           () => "Most consecutive infections", TopStat.FormatInteger);
            statMaxSurvived = new TopStat("ConsecutiveSurvived", "ZombieStats", "MaxRounds",
                                          () => "Most consecutive rounds survived", TopStat.FormatInteger);

            infectedToken = new ChatToken("$infected", "Total number of players infected",
                                          p => Get(p).TotalInfected.ToString());
            survivedToken = new ChatToken("$survived", "Total number of rounds survived",
                                          p => Get(p).TotalRoundsSurvived.ToString());

            offlineZSStats = PrintOfflineZSStats;
            onlineZSStats  = PrintOnlineZSStats;
            OfflineStat.Stats.Add(offlineZSStats);
            OnlineStat.Stats.Add(onlineZSStats);
            ChatTokens.Standard.Add(infectedToken);
            ChatTokens.Standard.Add(survivedToken);

            TopStat.Stats.Add(statMostInfected);
            TopStat.Stats.Add(statMostSurvived);
            TopStat.Stats.Add(statMaxInfected);
            TopStat.Stats.Add(statMaxSurvived);
        }
Пример #2
0
        public override void Use(Player p, string message, CommandData data)
        {
            string[] args = message.SplitSpaces();
            if (args.Length < 2)
            {
                Help(p); return;
            }

            int maxResults = 0, offset = 0;

            if (!CommandParser.GetInt(p, args[0], "Max results", ref maxResults, 1, 15))
            {
                return;
            }

            TopStat stat = FindTopStat(args[1]);

            if (stat == null)
            {
                p.Message("%WUnrecognised type \"{0}\".", args[1]); return;
            }

            if (args.Length > 2)
            {
                if (!CommandParser.GetInt(p, args[2], "Offset", ref offset, 0))
                {
                    return;
                }
            }

            string          limit = " LIMIT " + offset + "," + maxResults;
            List <string[]> stats = Database.GetRows(stat.Table, "DISTINCT Name, " + stat.Column,
                                                     "ORDER BY" + stat.OrderBy + limit);

            p.Message("&a{0}:", stat.Title());
            for (int i = 0; i < stats.Count; i++)
            {
                string nick  = p.FormatNick(stats[i][0]);
                string value = stat.Formatter(stats[i][1]);
                p.Message("{0}) {1} %S- {2}", offset + (i + 1), nick, value);
            }
        }
Пример #3
0
        public override void Use(Player p, string message)
        {
            string[] args = message.SplitSpaces();
            if (args.Length < 2)
            {
                Help(p); return;
            }

            int offset = ParseOffset(p, args);
            int limit  = ParseLimit(p, args);

            if (limit == -1 || offset == -1)
            {
                return;
            }

            TopStat stat = FindTopStat(args[0]);

            if (stat == null)
            {
                Player.Message(p, "/Top: Unrecognised type \"{0}\".", args[0]);
                return;
            }

            string    strLimit = " LIMIT " + offset + "," + limit;
            DataTable db       = Database.Backend.GetRows(stat.Table, "DISTINCT Name, " + stat.Column,
                                                          "ORDER BY" + stat.OrderBy + strLimit);

            Player.Message(p, "&a{0}:", stat.Title());
            for (int i = 0; i < db.Rows.Count; i++)
            {
                string player = PlayerInfo.GetColoredName(p, db.Rows[i]["Name"].ToString());
                string item   = db.Rows[i][stat.Column].ToString();
                Player.Message(p, "{0}) {1} %S- {2}", offset + (i + 1), player, stat.Formatter(item));
            }
            db.Dispose();
        }