internal static void Commands(Player player, Command cmd)
{
string param = cmd.Next();
CommandDescriptor[] cd;
if (param == null)
{
player.Message("List of available commands:");
cd = CommandManager.GetCommands(false);
}
else if (param.StartsWith("@"))
{
string rankName = param.Substring(1);
Rank rank = RankManager.FindRank(rankName);
if (rank == null)
{
player.Message("Unknown rank: {0}", rankName);
return;
}
else
{
player.Message("List of commands available to {0}&S:", rank.GetClassyName());
cd = CommandManager.GetCommands(rank, true);
}
}
else if (param.Equals("all", StringComparison.OrdinalIgnoreCase))
{
player.Message("List of ALL commands:");
cd = CommandManager.GetCommands();
}
else if (param.Equals("hidden", StringComparison.OrdinalIgnoreCase))
{
player.Message("List of hidden commands:");
cd = CommandManager.GetCommands(true);
}
else if (Enum.GetNames(typeof(CommandCategory)).Contains(param, StringComparer.OrdinalIgnoreCase))
{
CommandCategory category = (CommandCategory)Enum.Parse(typeof(CommandCategory), param, true);
player.Message("List of {0} commands:", category);
cd = CommandManager.GetCommands(category, false);
}
else if (Enum.GetNames(typeof(Permission)).Contains(param, StringComparer.OrdinalIgnoreCase))
{
Permission permission = (Permission)Enum.Parse(typeof(Permission), param, true);
player.Message("List of commands that need {0} permission:", permission);
cd = CommandManager.GetCommands(permission, true);
}
else
{
cdCommands.PrintUsage(player);
return;
}
string[] commandNames = cd.Select(desc => desc.Name).ToArray();
player.MessagePrefixed("&S ", "&S " + String.Join(", ", commandNames));
}