#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.Text; using Arthea.Connections.Colors; using Arthea.Connections.Players; using Arthea.Continents.Areas.Characters; using Arthea.Continents.Areas.Rooms.Exits; namespace Arthea.Commands { /// <summary> /// Implements a look command. /// </summary> public class LookCommand : Command { #region [rgn] Fields (1) private static readonly LookCommand instance = new LookCommand(); #endregion [rgn] #region [rgn] Constructors (1) /// <summary> /// Initializes a new instance of the <see cref="LookCommand"/> class. /// </summary> private LookCommand() : base("look", "looks at a room, character or item") { } #endregion [rgn] #region [rgn] Properties (1) /// <summary> /// Gets the instance. /// </summary> /// <value>The instance.</value> public static LookCommand Instance { get { return instance; } } #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) { if (player.Room.Name != null) player.WriteLine(CustomColor.RoomName + "{0}~X", player.Room.Name); if (player.Room.Description != null) player.WriteLine(player.Room.Description); if (player.Room.Exits.Count > 0) { player.WriteLine(); StringBuilder buf = new StringBuilder("Exits: ["); foreach (Exit exit in player.Room.Exits.Values) { if (!string.IsNullOrEmpty(exit.Keyword)) buf.Append(exit.Keyword); else buf.Append(exit.Direction.ToString()); buf.Append(" "); } buf.Remove(buf.Length - 1, 1); buf.Append("]"); player.WriteLine(buf.ToString()); } player.Room.Items.ShowToPlayer(player, false); foreach (Character ch in player.Room.Characters) { if (ch != player) player.WriteLine(ch.RoomDescr); } return; } Character act = player.Room.Characters.FindName(argument); if (act != null) { if (act.Description.Length == 0) { player.WriteLine("You don't see anything special about {0}.", act.ShortDescr); } else { player.WriteLine(act.Description); } return; } player.WriteLine("You can't seem to find {0}.", argument); } #endregion [rgn] } /// <summary> /// Implementation of a auto look command. /// </summary> public class AutoLookCommand : Command { #region [rgn] Constructors (1) /// <summary> /// Initializes a new instance of the <see cref="AutoLookCommand"/> class. /// </summary> public AutoLookCommand() : base("autolook", "Automatically look when you hit enter.") { } #endregion [rgn] #region [rgn] Methods (2) // [rgn] Public Methods (2) /// <summary> /// Gets the instance. /// </summary> /// <value>The instance.</value> public static void Look(Player player) { if (player.Config.Has(PlayerConfig.AutoLook)) LookCommand.Instance.Process(player, ""); else player.DisplayPrompt(); } /// <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) { player.Config.Toggle(PlayerConfig.AutoLook); player.WriteLine("Autolook {0}abled.", player.Config.Has(PlayerConfig.AutoLook) ? "en" : "dis"); } #endregion [rgn] } }