fCraft.InfoCommands.PrintPlayerInfo C# (CSharp) Method

PrintPlayerInfo() public static method

public static PrintPlayerInfo ( [ player, [ info ) : void
player [
info [
return void
        public static void PrintPlayerInfo( [NotNull] Player player, [NotNull] PlayerInfo info )
        {
            if ( player == null )
                throw new ArgumentNullException( "player" );
            if ( info == null )
                throw new ArgumentNullException( "info" );
            Player target = info.PlayerObject;

            // hide online status when hidden
            if ( target != null && !player.CanSee( target ) ) {
                target = null;
            }

            if ( info.LastIP.Equals( IPAddress.None ) ) {
                player.Message( "About {0}&S: Never seen before.", info.ClassyName );
            } else {
                if ( target != null ) {
                    TimeSpan idle = target.IdleTime;
                    if ( info.IsHidden ) {
                        if ( idle.TotalMinutes > 2 ) {
                            if ( player.Can( Permission.ViewPlayerIPs ) ) {
                                player.Message( "About {0}&S: HIDDEN from {1} (idle {2})",
                                                info.ClassyName,
                                                info.LastIP,
                                                idle.ToMiniString() );
                            } else {
                                player.Message( "About {0}&S: HIDDEN (idle {1})",
                                                info.ClassyName,
                                                idle.ToMiniString() );
                            }
                        } else {
                            if ( player.Can( Permission.ViewPlayerIPs ) ) {
                                player.Message( "About {0}&S: HIDDEN. Online from {1}",
                                                info.ClassyName,
                                                info.LastIP );
                            } else {
                                player.Message( "About {0}&S: HIDDEN.",
                                                info.ClassyName );
                            }
                        }
                    } else {
                        if ( idle.TotalMinutes > 1 ) {
                            if ( player.Can( Permission.ViewPlayerIPs ) ) {
                                player.Message( "About {0}&S: Online now from {1} (idle {2})",
                                                info.ClassyName,
                                                info.LastIP,
                                                idle.ToMiniString() );
                            } else {
                                player.Message( "About {0}&S: Online now (idle {1})",
                                                info.ClassyName,
                                                idle.ToMiniString() );
                            }
                        } else {
                            if ( player.Can( Permission.ViewPlayerIPs ) ) {
                                player.Message( "About {0}&S: Online now from {1}",
                                                info.ClassyName,
                                                info.LastIP );
                            } else {
                                player.Message( "About {0}&S: Online now.",
                                                info.ClassyName );
                            }
                        }
                    }
                } else {
                    if ( player.Can( Permission.ViewPlayerIPs ) ) {
                        if ( info.LeaveReason != LeaveReason.Unknown ) {
                            player.Message( "About {0}&S: Last seen {1} ago from {2} ({3}).",
                                            info.ClassyName,
                                            info.TimeSinceLastSeen.ToMiniString(),
                                            info.LastIP,
                                            info.LeaveReason );
                        } else {
                            player.Message( "About {0}&S: Last seen {1} ago from {2}.",
                                            info.ClassyName,
                                            info.TimeSinceLastSeen.ToMiniString(),
                                            info.LastIP );
                        }
                    } else {
                        if ( info.LeaveReason != LeaveReason.Unknown ) {
                            player.Message( "About {0}&S: Last seen {1} ago ({2}).",
                                            info.ClassyName,
                                            info.TimeSinceLastSeen.ToMiniString(),
                                            info.LeaveReason );
                        } else {
                            player.Message( "About {0}&S: Last seen {1} ago.",
                                            info.ClassyName,
                                            info.TimeSinceLastSeen.ToMiniString() );
                        }
                    }
                }
                // Show login information
                player.Message( "  Logged in {0} time(s) since {1:d MMM yyyy}.",
                                info.TimesVisited,
                                info.FirstLoginDate );
            }

            if ( info.IsFrozen ) {
                player.Message( "  Frozen {0} ago by {1}",
                                info.TimeSinceFrozen.ToMiniString(),
                                info.FrozenByClassy );
            }

            if ( info.IsMuted ) {
                player.Message( "  Muted for {0} by {1}",
                                info.TimeMutedLeft.ToMiniString(),
                                info.MutedByClassy );
                float blocks = ( ( info.BlocksBuilt + info.BlocksDrawn ) - info.BlocksDeleted );
                if ( blocks < 0 )
                    player.Message( "  &CWARNING! {0}&S has deleted more than built!", info.ClassyName );//<---- GlennMR on Au70 Galaxy
            }

            // Show ban information
            IPBanInfo ipBan = IPBanList.Get( info.LastIP );
            switch ( info.BanStatus ) {
                case BanStatus.Banned:
                    if ( ipBan != null ) {
                        player.Message( "  Account and IP are &CBANNED&S. See &H/BanInfo" );
                    } else {
                        player.Message( "  Account is &CBANNED&S. See &H/BanInfo" );
                    }
                    break;

                case BanStatus.IPBanExempt:
                    if ( ipBan != null ) {
                        player.Message( "  IP is &CBANNED&S, but account is exempt. See &H/BanInfo" );
                    } else {
                        player.Message( "  IP is not banned, and account is exempt. See &H/BanInfo" );
                    }
                    break;

                case BanStatus.NotBanned:
                    if ( ipBan != null ) {
                        player.Message( "  IP is &CBANNED&S. See &H/BanInfo" );
                    }
                    break;
            }

            if ( !info.LastIP.Equals( IPAddress.None ) ) {
                // Show alts
                List<PlayerInfo> altNames = new List<PlayerInfo>();
                int bannedAltCount = 0;
                foreach ( PlayerInfo playerFromSameIP in PlayerDB.FindPlayers( info.LastIP ) ) {
                    if ( playerFromSameIP == info )
                        continue;
                    altNames.Add( playerFromSameIP );
                    if ( playerFromSameIP.IsBanned ) {
                        bannedAltCount++;
                    }
                }

                if ( altNames.Count > 0 ) {
                    altNames.Sort( new PlayerInfoComparer( player ) );
                    if ( altNames.Count > MaxAltsToPrint ) {
                        if ( bannedAltCount > 0 ) {
                            player.MessagePrefixed( "&S  ",
                                                    "&S  Over {0} accounts ({1} banned) on IP: {2}  &Setc",
                                                    MaxAltsToPrint,
                                                    bannedAltCount,
                                                    altNames.Take( 15 ).ToArray().JoinToClassyString() );
                        } else {
                            player.MessagePrefixed( "&S  ",
                                                    "&S  Over {0} accounts on IP: {1} &Setc",
                                                    MaxAltsToPrint,
                                                    altNames.Take( 15 ).ToArray().JoinToClassyString() );
                        }
                    } else {
                        if ( bannedAltCount > 0 ) {
                            player.MessagePrefixed( "&S  ",
                                                    "&S  {0} accounts ({1} banned) on IP: {2}",
                                                    altNames.Count,
                                                    bannedAltCount,
                                                    altNames.ToArray().JoinToClassyString() );
                        } else {
                            player.MessagePrefixed( "&S  ",
                                                    "&S  {0} accounts on IP: {1}",
                                                    altNames.Count,
                                                    altNames.ToArray().JoinToClassyString() );
                        }
                    }
                }
            }

            // Stats
            if ( info.BlocksDrawn > 500000000 ) {
                player.Message( "  Built {0} and deleted {1} blocks, drew {2}M blocks, wrote {3} messages.",
                                info.BlocksBuilt,
                                info.BlocksDeleted,
                                info.BlocksDrawn / 1000000,
                                info.MessagesWritten );
            } else if ( info.BlocksDrawn > 500000 ) {
                player.Message( "  Built {0} and deleted {1} blocks, drew {2}K blocks, wrote {3} messages.",
                                info.BlocksBuilt,
                                info.BlocksDeleted,
                                info.BlocksDrawn / 1000,
                                info.MessagesWritten );
            } else if ( info.BlocksDrawn > 0 ) {
                player.Message( "  Built {0} and deleted {1} blocks, drew {2} blocks, wrote {3} messages.",
                                info.BlocksBuilt,
                                info.BlocksDeleted,
                                info.BlocksDrawn,
                                info.MessagesWritten );
            } else {
                player.Message( "  Built {0} and deleted {1} blocks, wrote {2} messages.",
                                info.BlocksBuilt,
                                info.BlocksDeleted,
                                info.MessagesWritten );
            }

            // More stats
            if ( info.TimesBannedOthers > 0 || info.TimesKickedOthers > 0 || info.PromoCount > 0 ) {
                player.Message( "  Kicked {0}, Promoted {1} and banned {2} players.", info.TimesKickedOthers, info.PromoCount, info.TimesBannedOthers );
            }

            if ( info.TimesKicked > 0 ) {
                if ( info.LastKickDate != DateTime.MinValue ) {
                    player.Message( "  Got kicked {0} times. Last kick {1} ago by {2}",
                                    info.TimesKicked,
                                    info.TimeSinceLastKick.ToMiniString(),
                                    info.LastKickByClassy );
                } else {
                    player.Message( "  Got kicked {0} times.", info.TimesKicked );
                }
                if ( info.LastKickReason != null ) {
                    player.Message( "  Kick reason: {0}", info.LastKickReason );
                }
            }

            // Promotion/demotion
            if ( info.PreviousRank == null ) {
                if ( info.RankChangedBy == null ) {
                    player.Message( "  Rank is {0}&S (default).",
                                    info.Rank.ClassyName );
                } else {
                    player.Message( "  Promoted to {0}&S by {1}&S {2} ago.",
                                    info.Rank.ClassyName,
                                    info.RankChangedByClassy,
                                    info.TimeSinceRankChange.ToMiniString() );
                    if ( info.RankChangeReason != null ) {
                        player.Message( "  Promotion reason: {0}", info.RankChangeReason );
                    }
                }
            } else if ( info.PreviousRank <= info.Rank ) {
                player.Message( "  Promoted from {0}&S to {1}&S by {2}&S {3} ago.",
                                info.PreviousRank.ClassyName,
                                info.Rank.ClassyName,
                                info.RankChangedByClassy,
                                info.TimeSinceRankChange.ToMiniString() );
                if ( info.RankChangeReason != null ) {
                    player.Message( "  Promotion reason: {0}", info.RankChangeReason );
                }
            } else {
                player.Message( "  Demoted from {0}&S to {1}&S by {2}&S {3} ago.",
                                info.PreviousRank.ClassyName,
                                info.Rank.ClassyName,
                                info.RankChangedByClassy,
                                info.TimeSinceRankChange.ToMiniString() );
                if ( info.RankChangeReason != null ) {
                    player.Message( "  Demotion reason: {0}", info.RankChangeReason );
                }
            }

            if ( !info.LastIP.Equals( IPAddress.None ) ) {
                // Time on the server
                TimeSpan totalTime = info.TotalTime;
                if ( target != null ) {
                    totalTime = totalTime.Add( info.TimeSinceLastLogin );
                }
                player.Message( "  Spent a total of {0:F1} hours ({1:F1} minutes) here.",
                                totalTime.TotalHours,
                                totalTime.TotalMinutes );
            }
        }