public static void WriteCommand <C>(TextWriter writer, BaseCommand <C> cmd, string indent) where C : ICmdArgs { writer.WriteLine(indent + cmd.Name); indent += "\t"; writer.WriteLine(indent + "Aliases: {0}", cmd.Aliases.ToString(", ")); writer.WriteLine(indent + "Usage: {0}", cmd.CreateUsage()); writer.WriteLine(indent + "Description: {0}", cmd.GetDescription(null)); var command = cmd as RealmServerCommand; if (command != null) { writer.WriteLine(indent + "Needs Char: {0}", command.RequiresCharacter); writer.WriteLine(indent + "Required Targets: {0}", command.TargetTypes); } writer.WriteLine(); if (cmd.SubCommands.Count > 0) { writer.WriteLine(indent + "SubCommands:"); writer.WriteLine(); indent += "\t"; foreach (var subCmd in cmd.SubCommands) { WriteCommand(writer, subCmd, indent); } } }