private static void RankInfoHandler( Player player, Command cmd )
{
Rank rank;
string rankName = cmd.Next();
if ( cmd.HasNext ) {
CdRankInfo.PrintUsage( player );
return;
}
if ( rankName == null ) {
rank = player.Info.Rank;
} else {
rank = RankManager.FindRank( rankName );
if ( rank == null ) {
player.Message( "No such rank: \"{0}\". See &H/Ranks", rankName );
return;
}
}
List<Permission> permissions = new List<Permission>();
for ( int i = 0; i < rank.Permissions.Length; i++ ) {
if ( rank.Permissions[i] ) {
permissions.Add( ( Permission )i );
}
}
Permission[] sortedPermissionNames =
permissions.OrderBy( s => s.ToString(), StringComparer.OrdinalIgnoreCase ).ToArray();
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat( "Players of rank {0}&S can: ", rank.ClassyName );
bool first = true;
foreach (Permission p in sortedPermissionNames)
{
if ( !first )
sb.Append( ',' ).Append( ' ' );
Rank permissionLimit = rank.PermissionLimits[( int )p];
sb.Append( p );
if ( permissionLimit != null ) {
sb.AppendFormat( "({0}&S)", permissionLimit.ClassyName );
}
first = false;
}
player.Message( sb.ToString() );
}
if ( rank.Can( Permission.Draw ) ) {
StringBuilder sb = new StringBuilder();
if ( rank.DrawLimit > 0 ) {
sb.AppendFormat( "Draw limit: {0} blocks.", rank.DrawLimit );
} else {
sb.AppendFormat( "Draw limit: None (unlimited)." );
}
if ( rank.Can( Permission.CopyAndPaste ) ) {
sb.AppendFormat( " Copy/paste slots: {0}", rank.CopySlots );
}
player.Message( sb.ToString() );
}
if ( rank.IdleKickTimer > 0 ) {
player.Message( "Idle kick after {0}", TimeSpan.FromMinutes( rank.IdleKickTimer ).ToMiniString() );
}
}