Example #1
0
        /// <summary>
        /// Updates a stored player's stats
        /// </summary>
        /// <param name="player"></param>
        /// <param name="StoredPlayer"></param>
        public static void PopulateStoredStats(SPlayer player, StoredPlayer StoredPlayer)
        {
            if (player != null && StoredPlayer != null)
            {
                StoredPlayer.totalTime     = player.TimePlayed;
                StoredPlayer.firstLogin    = player.firstLogin;
                StoredPlayer.lastSeen      = DateTime.Now.ToString("G");
                StoredPlayer.loginCount    = player.loginCount;
                StoredPlayer.knownAccounts = player.knownAccounts;
                StoredPlayer.knownIPs      = player.knownIPs;

                StoredPlayer.kills     = player.kills;
                StoredPlayer.deaths    = player.deaths;
                StoredPlayer.mobkills  = player.mobkills;
                StoredPlayer.bosskills = player.bosskills;
            }
        }
Example #2
0
        /// <summary>
        /// Fills out a player's stats
        /// </summary>
        /// <param name="player"></param>
        /// <param name="StoredPlayer"></param>
        public static void PopulatePlayerStats(SPlayer player, StoredPlayer StoredPlayer)
        {
            if (StoredPlayer != null && player != null)
            {
                player.TimePlayed    = StoredPlayer.totalTime;
                player.firstLogin    = StoredPlayer.firstLogin;
                player.lastSeen      = DateTime.UtcNow.ToString("G");
                player.loginCount    = StoredPlayer.loginCount + 1;
                player.knownAccounts = StoredPlayer.knownAccounts;
                player.knownIPs      = StoredPlayer.knownIPs;

                player.kills     = StoredPlayer.kills;
                player.deaths    = StoredPlayer.deaths;
                player.mobkills  = StoredPlayer.mobkills;
                player.bosskills = StoredPlayer.bosskills;
            }
        }
Example #3
0
        /// <summary>
        /// Returns the amount of time a player has collected
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public static string TimePlayed(this SPlayer player)
        {
            double time  = player.timePlayed;
            var    weeks = (int)Math.Floor(time / 604800);
            var    days  = (int)Math.Floor(((time / 604800) - weeks) * 7);

            var ts = new TimeSpan(0, 0, 0, (int)time);

            var sb = new StringBuilder();

            if (weeks > 0)
            {
                sb.Append(string.Format("{0} week{1}{2}", weeks, weeks.Suffix(),
                                        days > 0 || ts.Hours > 0 || ts.Minutes > 0 || ts.Seconds > 0 ? ", " : ""));
            }
            if (days > 0)
            {
                sb.Append(string.Format("{0} day{1}{2}", days, days.Suffix(),
                                        ts.Hours > 0 || ts.Minutes > 0 || ts.Seconds > 0 ? ", " : ""));
            }
            if (ts.Hours > 0)
            {
                sb.Append(string.Format("{0} hour{1}{2}", ts.Hours, ts.Hours.Suffix(),
                                        ts.Minutes > 0 || ts.Seconds > 0 ? ", " : ""));
            }

            if (ts.Minutes > 0)
            {
                sb.Append(string.Format("{0} minute{1}{2}", ts.Minutes, ts.Minutes.Suffix(),
                                        ts.Seconds > 0 ? ", " : ""));
            }

            if (ts.Seconds > 0)
            {
                sb.Append(string.Format("{0} second{1}", ts.Seconds, ts.Seconds.Suffix()));
            }

            if (sb.Length == 0)
            {
                return(player.storage.TimePlayed());
            }

            return(sb.ToString());
        }
Example #4
0
        /// <summary>
        /// Used on logging in. Syncs a player's stats with stored values matching the player
        /// </summary>
        /// <param name="player"></param>
        public static void SyncStats(this SPlayer player)
        {
            if (player.storage == null)
            {
                return;
            }

            player.timePlayed    = player.storage.totalTime;
            player.firstLogin    = player.storage.firstLogin;
            player.lastSeen      = DateTime.UtcNow.ToString("G");
            player.loginCount    = player.storage.loginCount + 1;
            player.knownAccounts = player.storage.knownAccounts;
            player.knownIPs      = player.storage.knownIPs;

            player.kills     = player.storage.kills;
            player.deaths    = player.storage.deaths;
            player.mobkills  = player.storage.mobkills;
            player.bosskills = player.storage.bosskills;
        }
Example #5
0
        /// <summary>
        /// Saves a player's stats into stored values
        /// </summary>
        /// <param name="player"></param>
        public static void SaveStats(this SPlayer player)
        {
            if (player == null || player.storage == null)
            {
                return;
            }

            player.storage.totalTime     = player.timePlayed;
            player.storage.firstLogin    = player.firstLogin;
            player.storage.lastSeen      = DateTime.Now.ToString("G");
            player.storage.loginCount    = player.loginCount;
            player.storage.knownAccounts = player.knownAccounts;
            player.storage.knownIPs      = player.knownIPs;

            player.storage.kills     = player.kills;
            player.storage.deaths    = player.deaths;
            player.storage.mobkills  = player.mobkills;
            player.storage.bosskills = player.bosskills;
            Statistics.database.SaveUser(player.storage);
        }
Example #6
0
        public static void CmdUic(CommandArgs args)
        {
            if (args.Parameters.Count < 1)
            {
                args.Player.SendErrorMessage("Invalid syntax. Try /uix [playerName]");
                return;
            }

            if (args.Parameters[0] == "self")
            {
                SPlayer player = Statistics.Tools.GetPlayer(args.Player.Index);
                if (player == null)
                {
                    return;
                }

                if (player.TsPlayer.IsLoggedIn)
                {
                    int pageNumber;
                    if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
                    {
                        return;
                    }

                    Tools.SendUic(args.Player, player, pageNumber);
                }
                else
                {
                    args.Player.SendErrorMessage("You must be logged in to use this on yourself");
                }
            }
            else
            {
                string name;
                var    needNumber = false;
                if (args.Parameters.Count > 1)
                {
                    var newArgs = new List <string>(args.Parameters);
                    newArgs.RemoveAt(newArgs.Count - 1);
                    name       = string.Join(" ", newArgs);
                    needNumber = true;
                }
                else
                {
                    name = string.Join(" ", args.Parameters);
                }

                int pageNumber;
                if (!PaginationTools.TryParsePageNumber(args.Parameters,
                                                        needNumber ? args.Parameters.Count - 1 : args.Parameters.Count + 1, args.Player, out pageNumber))
                {
                    return;
                }

                IPAddress ip;
                if (IPAddress.TryParse(name, out ip))
                {
                    var players = Statistics.Tools.GetPlayersByIp(ip.ToString());

                    if (players.Count > 1)
                    {
                        TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name));
                        return;
                    }

                    if (players.Count == 0)
                    {
                        var splayers = Statistics.Tools.GetStoredPlayersByIp(ip.ToString());

                        if (splayers.Count > 1)
                        {
                            TShock.Utils.SendMultipleMatchError(args.Player, splayers.Select(p => p.name));
                            return;
                        }
                        if (splayers.Count == 0)
                        {
                            args.Player.SendErrorMessage("No matches found for query '{0}'", name);
                            return;
                        }

                        var splayer = splayers[0];
                        Tools.SendUic(args.Player, splayer, pageNumber);

                        return;
                    }

                    var player = players[0];

                    Tools.SendUix(args.Player, player, pageNumber);
                    return;
                }

                var players2 = Statistics.Tools.GetPlayers(name);

                if (players2.Count > 1)
                {
                    TShock.Utils.SendMultipleMatchError(args.Player, players2.Select(p => p.Name));
                    return;
                }
                if (players2.Count == 0)
                {
                    args.Player.SendErrorMessage(
                        "Invalid player. Try /check name {0} to make sure you're using the right username",
                        name);
                    return;
                }

                var player2 = players2[0];

                Tools.SendUic(args.Player, player2, pageNumber);
            }
        }
Example #7
0
        private static void PostLogin(TShockAPI.Hooks.PlayerPostLoginEventArgs args)
        {
            SPlayer player = Tools.GetPlayer(args.Player.Index);

            if (player == null)
            {
                Players.Add(new SPlayer(args.Player.Index));
                PostLogin(new TShockAPI.Hooks.PlayerPostLoginEventArgs(args.Player));
                return;
            }

            var storage = Tools.GetStoredPlayerExact(args.Player.UserAccountName);

            if (storage == null)
            {
                Log.ConsoleInfo("{0} has been registered to Statistics", args.Player.UserAccountName);

                player.storage = StoredPlayers.AddAndReturn(new StoredPlayer(args.Player.UserAccountName,
                                                                             DateTime.Now.ToString("G"), DateTime.Now.ToString("G"), 0, 1,
                                                                             args.Player.UserAccountName, args.Player.IP, 0, 0, 0, 0));

                database.AddUser(player.storage);
                player.SyncStats();

                HighScores.highScores.Add(new HighScore(player.Name, player.kills, player.mobkills, player.deaths,
                                                        player.bosskills, player.timePlayed));

                return;
            }

            player.storage = storage;

            if (player.storage.knownIPs.Length > 0)
            {
                if (!player.storage.knownIPs.Contains(args.Player.IP))
                {
                    player.storage.knownIPs += ", " + args.Player.IP;
                }
            }
            else
            {
                player.storage.knownIPs = args.Player.IP;
            }

            if (player.storage.knownAccounts.Length > 0)
            {
                if (!player.storage.knownAccounts.Contains(args.Player.UserAccountName))
                {
                    player.storage.knownAccounts += ", " + args.Player.UserAccountName;
                }
            }
            else
            {
                player.storage.knownAccounts = args.Player.UserAccountName;
            }

            player.SyncStats();

            Log.ConsoleInfo("Successfully linked account {0} with stored player {1}",
                            args.Player.UserAccountName, player.storage.name);
        }
Example #8
0
        public static void Check_Kills(CommandArgs args)
        {
            if (args.Parameters.Count == 1)
            {
                if (STools.GetPlayer(args.Player.Index) != null)
                {
                    SPlayer player = STools.GetPlayer(args.Player.Index);

                    if (player.TSPlayer.IsLoggedIn)
                    {
                        args.Player.SendInfoMessage("You have killed {0} player{4}, {1} mob{5}, {2} boss{6} and died {3} time{7}.", player.kills, player.mobkills, player.bosskills, player.deaths, STools.Suffix(player.kills), STools.Suffix(player.mobkills), STools.Suffix2(player.bosskills), STools.Suffix(player.deaths));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("You must be logged in to use this on yourself.");
                    }
                }
                else if (TSServerPlayer.Server.Name == args.Player.Name)
                {
                    args.Player.SendErrorMessage("The console has no stats to check.");
                }
                else
                {
                    args.Player.SendErrorMessage("Something broke. Please try again later.");
                }
            }

            if (args.Parameters.Count > 1)
            {
                args.Parameters.RemoveAt(0); // fixes command fail when checking another player's kills
                string name = string.Join(" ", args.Parameters);

                if (STools.GetPlayer(name).Count == 1)
                {
                    SPlayer player = STools.GetPlayer(name)[0];
                    if (player.TSPlayer.IsLoggedIn)
                    {
                        args.Player.SendInfoMessage("{0} has killed {1} player{5}, {2} mob{6}, {3} boss{7} and died {4} time{8}.", player.TSPlayer.Account.Name, player.kills, player.mobkills, player.bosskills, player.deaths, STools.Suffix(player.kills), STools.Suffix(player.mobkills), STools.Suffix2(player.bosskills), STools.Suffix(player.deaths));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("{0} is not logged in.", player.Name);
                    }
                }
                else if (STools.GetPlayer(name).Count > 1)
                {
                    args.Player.SendMultipleMatchError(STools.GetPlayer(name).Select(p => p.Name));
                }
                else
                {
                    if (STools.GetStoredPlayer(name).Count == 1)
                    {
                        StoredPlayer StoredPlayer = STools.GetStoredPlayer(name)[0];
                        args.Player.SendInfoMessage("{0} has killed {1} player{5}, {2} mob{6}, {3} boss{7} and died {4} time{8}.", StoredPlayer.name, StoredPlayer.kills, StoredPlayer.mobkills, StoredPlayer.bosskills, StoredPlayer.deaths, STools.Suffix(StoredPlayer.kills), STools.Suffix(StoredPlayer.mobkills), STools.Suffix2(StoredPlayer.bosskills), STools.Suffix(StoredPlayer.deaths));
                    }
                    else if (STools.GetStoredPlayer(name).Count > 1)
                    {
                        args.Player.SendMultipleMatchError(STools.GetStoredPlayer(name).Select(p => p.name));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("Player {0} is not in the database.", name);
                    }
                }
            }
        }
Example #9
0
        /* ------------------ */

        #region Check Time
        public static void Check_Time(CommandArgs args)
        {
            if (args.Parameters.Count == 1)
            {
                if (STools.GetPlayer(args.Player.Index) != null)
                {
                    SPlayer player = STools.GetPlayer(args.Player.Index);
                    if (player.TSPlayer.IsLoggedIn)
                    {
                        args.Player.SendInfoMessage("You have played for {0}.", STools.TimePlayed(player.TimePlayed));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("You must be logged in to use this command.");
                    }
                }
                else if (TSServerPlayer.Server.Name == args.Player.Name)
                {
                    args.Player.SendErrorMessage("The console has no stats to check.");
                }
                else
                {
                    args.Player.SendErrorMessage("Something broke. Please try again later.");
                }
            }

            if (args.Parameters.Count > 1 && args.Parameters.Count != 1)
            {
                args.Parameters.RemoveAt(0);
                string name = string.Join(" ", args.Parameters);

                if (STools.GetPlayer(name).Count == 1)
                {
                    SPlayer player = STools.GetPlayer(name)[0];
                    if (player.TSPlayer.IsLoggedIn)
                    {
                        args.Player.SendInfoMessage("{0} has played for {1}.", player.TSPlayer.Account.Name, STools.TimePlayed(player.TimePlayed));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("{0} is not logged in.", player.Name);
                    }
                }
                else if (STools.GetPlayer(name).Count > 1)
                {
                    args.Player.SendMultipleMatchError(STools.GetPlayer(name).Select(p => p.Name));
                }
                else
                {
                    if (STools.GetStoredPlayer(name).Count == 1)
                    {
                        StoredPlayer StoredPlayer = STools.GetStoredPlayer(name)[0];
                        args.Player.SendInfoMessage("{0} has played for {1}.", StoredPlayer.name, STools.TimePlayed(StoredPlayer.totalTime));
                    }
                    else if (STools.GetStoredPlayer(name).Count > 1)
                    {
                        args.Player.SendMultipleMatchError(STools.GetStoredPlayer(name).Select(p => p.name));
                    }
                    else
                    {
                        args.Player.SendErrorMessage("Player {0} is not in the database.", name);
                    }
                }
            }
        }
Example #10
0
        public static void UI_Character(CommandArgs args)
        {
            if (args.Parameters.Count > 0)
            {
                if (args.Parameters[0] == "self")
                {
                    if (STools.GetPlayer(args.Player.Index) != null)
                    {
                        SPlayer player = STools.GetPlayer(args.Player.Index);

                        if (player.TSPlayer.IsLoggedIn)
                        {
                            int pageNumber;
                            if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
                            {
                                return;
                            }
                            else
                            {
                                var uicInfo = new List <string>();
                                var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                                uicInfo.Add(string.Format("Character info for {0}.", args.Parameters[0]));

                                uicInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                          player.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uicInfo.Add("Last seen: Now");

                                uicInfo.Add(string.Format("Logged in {0} times since registering.  Overall play time: {1}.",
                                                          player.loginCount, STools.TimePlayed(player.TimePlayed)));

                                PaginationTools.SendPage(args.Player, pageNumber, uicInfo, new PaginationTools.Settings
                                {
                                    HeaderFormat    = "Character Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uic {0} {1} for more.", args.Parameters[0], pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                        }
                        else
                        {
                            args.Player.SendErrorMessage("You must be logged in to use this on yourself.");
                        }
                    }
                    else
                    {
                        args.Player.SendErrorMessage("Something broke. Please try again later.");
                    }
                }

                else
                {
                    string name       = "";
                    bool   needNumber = false;
                    if (args.Parameters.Count > 1)
                    {
                        var newArgs = new List <string>(args.Parameters);
                        newArgs.RemoveAt(newArgs.Count - 1);
                        name       = string.Join(" ", newArgs);
                        needNumber = true;
                    }
                    else
                    {
                        name = string.Join(" ", args.Parameters);
                    }

                    int pageNumber;
                    if (!PaginationTools.TryParsePageNumber(args.Parameters,
                                                            needNumber ? args.Parameters.Count - 1 : args.Parameters.Count + 1, args.Player, out pageNumber))
                    {
                        return;
                    }

                    IPAddress IP;
                    if (IPAddress.TryParse(name, out IP))
                    {
                        if (STools.GetPlayerByIP(IP.ToString()).Count == 1)
                        {
                            SPlayer player = STools.GetPlayerByIP(IP.ToString())[0];

                            var uicInfo = new List <string>();
                            var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                            uicInfo.Add(string.Format("Character info for {0}.", player.Name));

                            uicInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                      player.firstLogin, STools.TimeSpanPlayed(time_1)));

                            uicInfo.Add("Last seen: Now");

                            uicInfo.Add(string.Format("Logged in {0} times since registering.  Overall play time: {1}.",
                                                      player.loginCount, STools.TimePlayed(player.TimePlayed)));

                            PaginationTools.SendPage(args.Player, pageNumber, uicInfo, new PaginationTools.Settings
                            {
                                HeaderFormat    = "Extended User Information ({0}/{1})",
                                HeaderTextColor = Color.Lime,
                                LineTextColor   = Color.White,
                                FooterFormat    = string.Format("Type /uic {0} {1} for more.", player.Name, pageNumber + 1),
                                FooterTextColor = Color.Lime
                            });
                        }
                        else if (STools.GetPlayerByIP(IP.ToString()).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player,
                            args.Player.SendMultipleMatchError(
                                STools.GetPlayerByIP(IP.ToString()).Select(p => p.Name));
                        }
                        else
                        if (STools.GetStoredPlayerByIP(IP.ToString()).Count == 1)
                        {
                            StoredPlayer StoredPlayer = STools.GetStoredPlayerByIP(IP.ToString())[0];
                            var          uicInfo      = new List <string>();
                            var          time_1       = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.firstLogin));
                            var          time_2       = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.lastSeen));

                            uicInfo.Add(string.Format("Character info for {0}.", StoredPlayer.name));

                            uicInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                      StoredPlayer.firstLogin, STools.TimeSpanPlayed(time_1)));

                            uicInfo.Add(string.Format("Last seen: {0} ({1} ago).", StoredPlayer.lastSeen,
                                                      STools.TimeSpanPlayed(time_2)));

                            uicInfo.Add(string.Format("Logged in {0} times since registering.  Overall play time: {1}.",
                                                      StoredPlayer.loginCount, STools.TimePlayed(StoredPlayer.totalTime)));

                            PaginationTools.SendPage(args.Player, pageNumber, uicInfo, new PaginationTools.Settings
                            {
                                HeaderFormat    = "Character Information ({0}/{1})",
                                HeaderTextColor = Color.Lime,
                                LineTextColor   = Color.White,
                                FooterFormat    = string.Format("Type /uic {0} {1} for more.", StoredPlayer.name, pageNumber + 1),
                                FooterTextColor = Color.Lime
                            });
                        }

                        else if (STools.GetStoredPlayerByIP(IP.ToString()).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player,
                            args.Player.SendMultipleMatchError(
                                STools.GetStoredPlayerByIP(IP.ToString()).Select(p => p.name));
                        }

                        else
                        {
                            args.Player.SendErrorMessage("Invalid IP address! Try /check ip \"{0}\".",
                                                         name);
                        }
                    }
                    else
                    {
                        if (STools.GetPlayer(name).Count == 1)
                        {
                            SPlayer player = STools.GetPlayer(name)[0];

                            var uicInfo = new List <string>();
                            var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                            uicInfo.Add(string.Format("Character info for {0}.", player.Name));

                            uicInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                      player.firstLogin, STools.TimeSpanPlayed(time_1)));

                            uicInfo.Add("Last seen: Now");

                            uicInfo.Add(string.Format("Logged in {0} times since registering.  Overall play time: {1}.",
                                                      player.loginCount, STools.TimePlayed(player.TimePlayed)));

                            PaginationTools.SendPage(args.Player, pageNumber, uicInfo, new PaginationTools.Settings
                            {
                                HeaderFormat    = "Extended User Information ({0}/{1})",
                                HeaderTextColor = Color.Lime,
                                LineTextColor   = Color.White,
                                FooterFormat    = string.Format("Type /uic {0} {1} for more.", player.Name, pageNumber + 1),
                                FooterTextColor = Color.Lime
                            });
                        }
                        else if (STools.GetPlayer(name).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player, STools.GetPlayer(name).Select(p => p.Name));
                            args.Player.SendMultipleMatchError(STools.GetPlayer(name).Select(p => p.Name));
                        }
                        else
                        {
                            if (STools.GetStoredPlayer(name).Count == 1)
                            {
                                StoredPlayer StoredPlayer = STools.GetStoredPlayer(name)[0];

                                var uicInfo = new List <string>();
                                var time_1  = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.firstLogin));
                                var time_2  = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.lastSeen));

                                uicInfo.Add(string.Format("Character info for {0}.", StoredPlayer.name));

                                uicInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                          StoredPlayer.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uicInfo.Add(string.Format("Last seen: {0} ({1} ago).", StoredPlayer.lastSeen,
                                                          STools.TimeSpanPlayed(time_2)));

                                uicInfo.Add(string.Format("Logged in {0} times since registering.  Overall play time: {1}.",
                                                          StoredPlayer.loginCount, STools.TimePlayed(StoredPlayer.totalTime)));

                                PaginationTools.SendPage(args.Player, pageNumber, uicInfo, new PaginationTools.Settings
                                {
                                    HeaderFormat    = "Character Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uic {0} {1} for more.", StoredPlayer.name, pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                            else if (STools.GetStoredPlayer(name).Count > 1)
                            {
                                //TShock.Utils.SendMultipleMatchError(args.Player, STools.GetStoredPlayer(name).Select(
                                args.Player.SendMultipleMatchError(STools.GetStoredPlayer(name).Select(
                                                                       p => p.name));
                            }
                            else
                            {
                                args.Player.SendErrorMessage("Invalid player! Try /check name {0}.",
                                                             name);
                            }
                        }
                    }
                }
            }
            else
            {
                //args.Player.SendErrorMessage("Invalid syntax. Try /uic [playerName]");
                args.Player.SendErrorMessage("Invalid syntax! Try /uic <player/self>");
            }
        }
Example #11
0
        /* Yama's suggestions */

        #region UI Extended
        public static void UI_Extended(CommandArgs args)
        {
            if (args.Parameters.Count > 0)
            {
                if (args.Parameters[0] == "self")
                {
                    if (STools.GetPlayer(args.Player.Index) != null)
                    {
                        SPlayer player = STools.GetPlayer(args.Player.Index);

                        if (player.TSPlayer.IsLoggedIn)
                        {
                            int pageNumber;
                            if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
                            {
                                return;
                            }
                            else
                            {
                                var uixInfo = new List <string>();
                                var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                                uixInfo.Add(string.Format("UIX info for {0}.", player.Name));

                                //uixInfo.Add(string.Format("{0} is a member of group {1}.", player.Name, player.TSPlayer.Group.Name));
                                uixInfo.Add(string.Format("Group: {0}.", player.TSPlayer.Group.Name));

                                uixInfo.Add(string.Format("First login: {0} ({1}ago).",
                                                          player.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uixInfo.Add("Last seen: Now");
                                uixInfo.Add(string.Format("Overall play time: {0}.", STools.TimePlayed(player.TimePlayed)));
                                uixInfo.Add(string.Format("Logged in {0} times since registering.", player.loginCount));
                                try
                                {
                                    uixInfo.Add(string.Format("Known accounts: {0}.", player.knownAccounts));
                                }
                                catch { uixInfo.Add("No known accounts found."); }
                                try
                                {
                                    uixInfo.Add(string.Format("Known IPs: {0}.", player.knownIPs));
                                }
                                catch { uixInfo.Add("No known IPs found."); }

                                PaginationTools.SendPage(args.Player, pageNumber, uixInfo, new PaginationTools.Settings
                                {
                                    //HeaderFormat = "Extended User Information [Page {0} of {1}]",
                                    HeaderFormat    = "Extended User Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uix {0} {1} for more.", args.Parameters[0], pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                        }
                        else
                        {
                            args.Player.SendErrorMessage("You must be logged in to use this on yourself.");
                        }
                    }
                    else
                    {
                        args.Player.SendErrorMessage("Something broke. Please try again later.");
                    }
                }
                else
                {
                    string name       = "";
                    bool   needNumber = false;
                    if (args.Parameters.Count > 1)
                    {
                        var newArgs = new List <string>(args.Parameters);
                        newArgs.RemoveAt(newArgs.Count - 1);
                        name       = string.Join(" ", newArgs);
                        needNumber = true;
                    }
                    else
                    {
                        name = string.Join(" ", args.Parameters);
                    }

                    int pageNumber;
                    if (!PaginationTools.TryParsePageNumber(args.Parameters,
                                                            needNumber ? args.Parameters.Count - 1 : args.Parameters.Count + 1, args.Player, out pageNumber))
                    {
                        return;
                    }

                    IPAddress IP;
                    if (IPAddress.TryParse(name, out IP))
                    {
                        if (STools.GetPlayerByIP(IP.ToString()).Count == 1)
                        {
                            SPlayer player = STools.GetPlayerByIP(IP.ToString())[0];

                            if (player.TSPlayer.IsLoggedIn)
                            {
                                var uixInfo = new List <string>();
                                var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                                uixInfo.Add(string.Format("UIX info for {0}.", player.Name));
                                uixInfo.Add(string.Format("Group: {0}.", player.TSPlayer.Group.Name));
                                uixInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                          player.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uixInfo.Add("Last seen: Now");
                                uixInfo.Add(string.Format("Overall play time: {0}.", STools.TimePlayed(player.TimePlayed)));
                                uixInfo.Add(string.Format("Logged in {0} times since registering.", player.loginCount));
                                try
                                {
                                    uixInfo.Add(string.Format("Known accounts: {0}.", string.Join(", ", player.knownAccounts.Split(','))));
                                }
                                catch { uixInfo.Add("No known accounts found."); }
                                try
                                {
                                    uixInfo.Add(string.Format("Known IPs: {0}.", string.Join(", ", player.knownIPs.Split(','))));
                                }
                                catch { uixInfo.Add("No known IPs found."); }

                                PaginationTools.SendPage(args.Player, pageNumber, uixInfo, new PaginationTools.Settings
                                {
                                    HeaderFormat    = "Extended User Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uix {0} {1} for more.", player.Name, pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                            else
                            {
                                args.Player.SendErrorMessage("{0} is not logged in.", player.Name);
                            }
                        }
                        else if (STools.GetPlayerByIP(IP.ToString()).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player,
                            args.Player.SendMultipleMatchError(
                                STools.GetPlayerByIP(IP.ToString()).Select(p => p.Name));
                        }
                        else
                        if (STools.GetStoredPlayerByIP(IP.ToString()).Count == 1)
                        {
                            StoredPlayer StoredPlayer = STools.GetStoredPlayerByIP(IP.ToString())[0];
                            var          uixInfo      = new List <string>();
                            var          time_1       = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.firstLogin));

                            uixInfo.Add(string.Format("UIX info for {0}.", StoredPlayer.name));
                            //uixInfo.Add(string.Format("{0} is a member of group {1}", StoredPlayer.name, TShock.Users.GetUserByName(StoredPlayer.name).Group));
                            uixInfo.Add(string.Format("Group: {0}.", TShock.UserAccounts.GetUserAccountByName(StoredPlayer.name).Group));
                            uixInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                      StoredPlayer.firstLogin, STools.TimeSpanPlayed(time_1)));

                            uixInfo.Add(string.Format("Last seen: {0} ({1} ago).", StoredPlayer.lastSeen,
                                                      STools.TimeSpanPlayed(DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.lastSeen)))));

                            uixInfo.Add(string.Format("Overall play time: {0}.", STools.TimePlayed(StoredPlayer.totalTime)));

                            uixInfo.Add(string.Format("Logged in {0} times since registering.", StoredPlayer.loginCount));
                            try
                            {
                                uixInfo.Add(string.Format("Known accounts: {0}.", string.Join(", ", StoredPlayer.knownAccounts.Split(','))));
                            }
                            catch { uixInfo.Add("No known accounts found."); }
                            try
                            {
                                uixInfo.Add(string.Format("Known IPs: {0}.", string.Join(", ", StoredPlayer.knownIPs.Split(','))));
                            }
                            catch { uixInfo.Add("No known IPs found."); }

                            PaginationTools.SendPage(args.Player, pageNumber, uixInfo, new PaginationTools.Settings
                            {
                                HeaderFormat    = "Extended User Information ({0}/{1})",
                                HeaderTextColor = Color.Lime,
                                LineTextColor   = Color.White,
                                FooterFormat    = string.Format("Type /uix {0} {1} for more.", StoredPlayer.name, pageNumber + 1),
                                FooterTextColor = Color.Lime
                            });
                        }

                        else if (STools.GetStoredPlayerByIP(IP.ToString()).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player,
                            args.Player.SendMultipleMatchError(
                                STools.GetStoredPlayerByIP(IP.ToString()).Select(p => p.name));
                        }

                        else
                        {
                            //args.Player.SendErrorMessage("Invalid IP address. Try /check ip {0} to make sure you're using the right IP address", name);
                            args.Player.SendErrorMessage("Invalid IP address. Try /check ip {0}.", name);
                        }
                    }

                    else
                    {
                        if (STools.GetPlayer(name).Count == 1)
                        {
                            SPlayer player = STools.GetPlayer(name)[0];

                            if (player.TSPlayer.IsLoggedIn)
                            {
                                var uixInfo = new List <string>();
                                var time_1  = DateTime.Now.Subtract(DateTime.Parse(player.firstLogin));

                                uixInfo.Add(string.Format("UIX info for {0}.", player.Name));
                                uixInfo.Add(string.Format("Group: {0}.", player.TSPlayer.Group.Name));

                                uixInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                          player.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uixInfo.Add("Last seen: Now");

                                uixInfo.Add(string.Format("Logged in {0} times since registering.", player.loginCount));
                                try
                                {
                                    uixInfo.Add(string.Format("Known accounts: {0}.", string.Join(", ", player.knownAccounts.Split(','))));
                                }
                                catch { uixInfo.Add("No known accounts found."); }
                                try
                                {
                                    uixInfo.Add(string.Format("Known IPs: {0}.", string.Join(", ", player.knownIPs.Split(','))));
                                }
                                catch { uixInfo.Add("No known IPs found."); }

                                PaginationTools.SendPage(args.Player, pageNumber, uixInfo, new PaginationTools.Settings
                                {
                                    HeaderFormat    = "Extended User Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uix {0} {1} for more.", player.Name, pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                            else
                            {
                                args.Player.SendErrorMessage("{0} is not logged in.", player.Name);
                            }
                        }
                        else if (STools.GetPlayer(name).Count > 1)
                        {
                            //TShock.Utils.SendMultipleMatchError(args.Player, STools.GetPlayer(name).Select(p => p.Name));
                            args.Player.SendMultipleMatchError(STools.GetPlayer(name).Select(p => p.Name));
                        }
                        else
                        {
                            if (STools.GetStoredPlayer(name).Count == 1)
                            {
                                StoredPlayer StoredPlayer = STools.GetStoredPlayer(name)[0];
                                var          uixInfo      = new List <string>();
                                var          time_1       = DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.firstLogin));

                                uixInfo.Add(string.Format("UIX info for {0}.", StoredPlayer.name));
                                //uixInfo.Add(string.Format("{0} is a member of group {1}", StoredPlayer.name, TShock.Users.GetUserByName(StoredPlayer.name).Group));
                                uixInfo.Add(string.Format("Group: {0}.", TShock.UserAccounts.GetUserAccountByName(StoredPlayer.name).Group));
                                uixInfo.Add(string.Format("First login: {0} ({1} ago).",
                                                          StoredPlayer.firstLogin, STools.TimeSpanPlayed(time_1)));

                                uixInfo.Add(string.Format("Last seen: {0} ({1} ago).", StoredPlayer.lastSeen,
                                                          STools.TimeSpanPlayed(DateTime.Now.Subtract(DateTime.Parse(StoredPlayer.lastSeen)))));

                                uixInfo.Add(string.Format("Overall play time: {0}.", STools.TimePlayed(StoredPlayer.totalTime)));

                                uixInfo.Add(string.Format("Logged in {0} times since registering.", StoredPlayer.loginCount));
                                try
                                {
                                    uixInfo.Add(string.Format("Known accounts: {0}.", string.Join(", ", StoredPlayer.knownAccounts.Split(','))));
                                }
                                catch { uixInfo.Add("No known accounts found."); }
                                try
                                {
                                    uixInfo.Add(string.Format("Known IPs: {0}.", string.Join(", ", StoredPlayer.knownIPs.Split(','))));
                                }
                                catch { uixInfo.Add("No known IPs found."); }

                                PaginationTools.SendPage(args.Player, pageNumber, uixInfo, new PaginationTools.Settings
                                {
                                    HeaderFormat    = "Extended User Information ({0}/{1})",
                                    HeaderTextColor = Color.Lime,
                                    LineTextColor   = Color.White,
                                    FooterFormat    = string.Format("Type /uix {0} {1} for more.", StoredPlayer.name, pageNumber + 1),
                                    FooterTextColor = Color.Lime
                                });
                            }
                            else if (STools.GetStoredPlayer(name).Count > 1)
                            {
                                args.Player.SendMultipleMatchError(STools.GetStoredPlayer(name).Select(
                                                                       p => p.name));
                            }
                            else
                            {
                                args.Player.SendErrorMessage("Invalid player! Try /check name {0}.",
                                                             name);
                            }
                        }
                    }
                }
            }
            else
            {
                //args.Player.SendErrorMessage("Invalid syntax. Try /uix [playerName]");
                args.Player.SendErrorMessage("Invalid syntax! Try /uix <player/self>");
            }
        }