#region Arthea License
/***********************************************************************
* Arthea MUD by R. Jennings (2007) http://arthea.googlecode.com/ *
* By using this code you comply with the Artistic and GPLv2 Licenses. *
***********************************************************************/
#endregion
using System;
using System.Collections.Generic;
using Arthea.Commands.Admin;
using Arthea.Commands.Communication;
using Arthea.Commands.Information;
using Arthea.Commands.ItemCommands;
using Arthea.Commands.PlayerCommands;
using Arthea.Connections.Players;
using Arthea.Continents.Areas.Rooms.Enums;
using Arthea.Environment;
namespace Arthea.Commands
{
/// <summary>
/// Maintains a list of commands.
/// </summary>
public class CommandList : List<Command>
{
#region [rgn] Constructors (1)
/// <summary>
/// Initializes a new instance of the <see cref="CommandList"/> class.
/// </summary>
public CommandList()
{
Log.Info("Initializing commands..");
foreach (string direction in Enum.GetNames(typeof (Direction)))
Add(new MoveCommand(direction.ToLower()));
Add(new QuitCommand());
Add(new SayCommand());
Add(new ShutdownCommand());
Add(new WhoCommand());
Add(new TitleCommand());
Add(new SaveCommand());
Add(LookCommand.Instance);
Add(new HelpCommand());
Add(new LockDownCommand());
Add(new AutoLookCommand());
Add(new ColorCommand());
Add(new GetCommand());
Add(new InventoryCommand());
Add(new PromptCommand());
Add(new DropCommand());
Add(new EquipmentCommand());
Add(new WearCommand());
Add(new RemoveCommand());
Add(new KillCommand());
Add(new PeaceCommand());
Add(new EditCommand());
Add(new ExitsCommand());
Add(new RebootCommand());
Add(new GrantCommand());
Add(new CastCommand());
Add(new CreateCommand());
Add(new CommandsCommand());
Add(new AreasCommand());
Add(new PasswordCommand());
Add(new GotoCommand());
Add(new ListCommand());
Add(new DeleteCommand());
Add(new AfkCommand());
Add(new CompressCommand());
}
#endregion [rgn]
#region [rgn] Methods (4)
// [rgn] Public Methods (4)
/// <summary>
/// Finds the admin.
/// </summary>
/// <returns>an array of admin commands</returns>
public Command[] FindAdmin()
{
List<Command> commands = new List<Command>();
foreach (Command cmd in this)
{
if (cmd.Level == Levels.Admin)
{
commands.Add(cmd);
}
}
return commands.ToArray();
}
/// <summary>
/// Finds the name.
/// </summary>
/// <param name="name">The name.</param>
/// <returns>a command</returns>
public Command FindName(String name)
{
if (!name) return null;
return Find(delegate(Command cmd) { return name == cmd.Name; });
}
/// <summary>
/// Looks up a command in the list for a player
/// </summary>
/// <param name="name">the name of the command</param>
/// <param name="player">the player invoking the lookup</param>
/// <returns>a command</returns>
public Command Lookup(String name, Player player)
{
foreach (Command cmd in this)
{
if (name.IsPrefixOf(cmd.Name)
|| name.IsPrefixOf(cmd.Alias))
{
if (cmd.Level == Levels.Admin && !player.Powers[cmd])
{
return new RestrictedCommand(cmd.Name);
}
else if (cmd.Level > player.Level)
{
return new RestrictedCommand(cmd.Name, cmd.Level);
}
else
{
return cmd;
}
}
}
return new UnknownCommand(name);
}
/// <summary>
/// Returns an array of commands for a player.
/// </summary>
/// <param name="player">The player.</param>
/// <returns>an array of c ommands</returns>
public Command[] ToArray(Player player)
{
List<Command> cmds = new List<Command>();
foreach (Command cmd in this)
{
if ((cmd.Level == Levels.Admin && !player.Powers[cmd])
|| cmd.Level > player.Level)
{
continue;
}
cmds.Add(cmd);
}
return cmds.ToArray();
}
#endregion [rgn]
}
}