diff --git a/MudEngine/WinPC_Engine/Core/CommandSystem.cs b/MudEngine/WinPC_Engine/Core/CommandSystem.cs
index befd323..c955e65 100644
--- a/MudEngine/WinPC_Engine/Core/CommandSystem.cs
+++ b/MudEngine/WinPC_Engine/Core/CommandSystem.cs
@@ -9,8 +9,15 @@ using MudEngine.Game.Characters;
namespace MudEngine.Core
{
+ ///
+ /// The command system will process string based commands and execute any class that implements ICommand.
+ /// ICommand.Name must match the command string passed in CommandSystem.Execute()
+ ///
public class CommandSystem
{
+ ///
+ /// A collection of all command classes and their associated Name key.
+ ///
public static Dictionary Commands
{
get
@@ -26,8 +33,16 @@ namespace MudEngine.Core
}
private static Dictionary _Commands;
+ ///
+ /// A copy of the Static CommandSystem.Commands property that this instance will use.
+ ///
public Dictionary CommandCollection { get; private set; }
+ ///
+ /// Constructor that accepts a collection of Commands that have already been loaded.
+ /// Use the static method CommandSystem.LoadCommands() or CommandSystem.LoadCommandLibrary()
+ ///
+ ///
public CommandSystem(Dictionary commands)
{
this.CommandCollection = new Dictionary();
@@ -37,6 +52,10 @@ namespace MudEngine.Core
//LoadCommands();
}
+ ///
+ /// Returns a collection of Commands that this instance is currently using.
+ ///
+ ///
public List GetCommands()
{
List collection = new List();
@@ -47,6 +66,11 @@ namespace MudEngine.Core
return collection;
}
+ ///
+ /// Returns a command that is matching the supplied String.
+ ///
+ ///
+ ///
public ICommand GetCommand(string command)
{
foreach (ICommand c in CommandSystem.Commands.Values)
@@ -58,6 +82,11 @@ namespace MudEngine.Core
return null;
}
+ ///
+ /// Returns true or false if the command name supplied exists.
+ ///
+ ///
+ ///
public bool IsValidCommand(string command)
{
if (CommandSystem.Commands.ContainsKey(command))
@@ -66,17 +95,30 @@ namespace MudEngine.Core
return false;
}
+ ///
+ /// Takes the supplied string command and searches for a Command class that matches it.
+ /// If found, it will execute the command class.
+ ///
+ ///
+ ///
public void Execute(string command, StandardCharacter character)
{
+ //All Types that implement ICommand must have their class name begin with Command.
+ //We must insert the 'Command' string into the beginning of the users Command
+ //If user Types "Say" we change it to "CommandSay" and then look for a Type matching "CommandSay"
string key = command.Insert(0, "Command");
+ //Loop through each Key in the Commands collection
foreach (string k in CommandSystem.Commands.Keys)
{
+ //Check to see if the Key (Command Name) matches the Command we are looking for.
if (key.ToLower().Contains(k.ToLower()))
{
+ //Grab a reference to the Command
ICommand cmd = CommandSystem.Commands[k];
try
{
+ //Execute the command
cmd.Execute(command, character);
}
catch (Exception ex)
@@ -88,28 +130,45 @@ namespace MudEngine.Core
return;
}
}
-
- //TODO: Inform player that this was not a valid command.
+
+ //Let the player know that it was not a valid command.
+ character.SendMessage("Invalid Command Used.");
}
+ ///
+ /// Loads all of the commands found in the currently loaded assembly.
+ ///
public static void LoadCommands()
{
LoadCommandLibrary(Assembly.GetExecutingAssembly(), true);
}
+ ///
+ /// Loads all of the commands found within the assembly specified.
+ ///
+ ///
public static void LoadCommandLibrary(Assembly commandLibrary)
{
LoadCommandLibrary(commandLibrary, true);
}
+ ///
+ /// Loads all of the commands found within the assembly specified.
+ /// All existing commands will be purged. If there are existing instances of CommandSystem being used
+ /// they will need to refresh their private Command collection via the static Property CommandSystem.Commands
+ ///
+ ///
+ ///
public static void LoadCommandLibrary(Assembly commandLibrary, bool purgeLoadedCommands)
{
+ //Check if we need to purge all of the commands.
if (purgeLoadedCommands)
PurgeCommands();
if (commandLibrary == null)
return;
+ //Loop through each Type in the assembly provided.
foreach (Type type in commandLibrary.GetTypes())
{
//All commands implement the ICommand interface.
@@ -119,8 +178,11 @@ namespace MudEngine.Core
else if (type.IsAbstract)
continue;
+ //Create a instance of the Type for use.
ICommand cmd = (ICommand)Activator.CreateInstance(type);
+ //If we have a instance, lets make sure we don't already have a command
+ //with that name. If not, add it to the Commands collection.
if (cmd != null)
{
//Fail safe measures. Ensure that we always have a name assigned to the commands.
@@ -138,6 +200,10 @@ namespace MudEngine.Core
}
}
+ ///
+ /// Purges the global Command collection. This does not affect any class that is using
+ /// a Instance of this Type.
+ ///
public static void PurgeCommands()
{
Commands.Clear();
diff --git a/MudEngine/WinPC_Server/Program.cs b/MudEngine/WinPC_Server/Program.cs
index 40fe0e0..0ada462 100644
--- a/MudEngine/WinPC_Server/Program.cs
+++ b/MudEngine/WinPC_Server/Program.cs
@@ -30,7 +30,7 @@ namespace WinPC_Server
game.Description = "This is a very simple game that was created to demonstrate MUD game creation with the Mud Designer Game Engine.";
game.HiddenRoomNames = false;
game.Multiplayer = true;
- game.Server.MOTD = "Welcome to the Sample Game desmontratio server!";
+ game.Server.MOTD = "Welcome to the Sample Game demonstration server!";
game.Version = "1.0";
game.Website = "http://muddesigner.codeplex.com";