#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 Arthea.Connections.Players;
using Arthea.Continents;
using Arthea.Continents.Areas;
using Arthea.Environment;
namespace Arthea.Commands.Admin
{
/// <summary>
/// Implementation of a edit command.
/// </summary>
public class EditCommand : Command
{
#region [rgn] Constructors (1)
/// <summary>
/// Initializes a new instance of the <see cref="EditCommand"/> class.
/// </summary>
public EditCommand() : base("edit", "Entry point for on-line creation", Levels.Admin)
{
}
#endregion [rgn]
#region [rgn] Methods (1)
// [rgn] Public Methods (1)
/// <summary>
/// Processes the command for a player.
/// </summary>
/// <param name="player">The player.</param>
/// <param name="argument">The argument.</param>
public override void Process(Player player, String argument)
{
if (argument.Empty())
{
Syntax(player, "create <type> [args]", "room [id]", "item <id|name>",
"character <id|name>", "area <name>", "continent <name>",
"help <keyword>", "social <name>", "script <id>");
return;
}
String arg = argument.FirstArg();
if (arg == "create")
{
new CreateCommand().Process(player, argument);
return;
}
if (arg.IsPrefixOf("room"))
{
uint id;
if (uint.TryParse(argument, out id) && Lists.Rooms.ContainsKey(id))
{
player.Connection.Edit(Lists.Rooms[id]);
}
else
{
player.Connection.Edit(player.Room);
}
}
else if (arg.IsPrefixOf("item"))
{
uint id;
if (uint.TryParse(argument, out id) && Lists.ItemIndexes.ContainsKey(id))
{
player.Connection.Edit(Lists.ItemIndexes[id]);
}
else
{
player.Connection.Edit(Lists.Items.FindName(argument));
}
}
else if (arg.IsPrefixOf("character"))
{
uint id;
if (!uint.TryParse(argument, out id) || !Lists.CharIndexes.ContainsKey(id))
{
player.Connection.Edit(Lists.Characters.FindName(argument));
}
else
{
player.Connection.Edit(Lists.CharIndexes[id]);
}
}
else if (arg.IsPrefixOf("area"))
{
Area area = Lists.Areas.FindName(argument);
if (area == null)
{
area = player.Room.Area;
}
player.Connection.Edit(area);
}
else if (arg.IsPrefixOf("continent"))
{
Continent cont = Lists.Continents.FindName(argument);
if (cont == null)
{
cont = player.Room.Area.Continent;
}
player.Connection.Edit(cont);
}
else if (arg.IsPrefixOf("help"))
{
player.Connection.Edit(Lists.Helps.FindKeyword(argument));
}
else if (arg.IsPrefixOf("social"))
{
player.Connection.Edit(Lists.Socials.FindName(argument));
}
else if (arg.IsPrefixOf("script"))
{
uint id;
if (uint.TryParse(argument, out id) && Lists.Scripts.ContainsKey(id))
{
player.Connection.Edit(Lists.Scripts[id]);
}
}
else
{
Process(player, string.Empty);
return;
}
if (player.Connection.Editing == null)
{
player.WriteLine("No such object.");
}
}
#endregion [rgn]
}
}