#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.Abilities.Spells; using Arthea.Abilities.Spells.Enums; using Arthea.Connections.Players; using Arthea.Environment; namespace Arthea.Commands { /// <summary> /// Implements a cast command. /// </summary> public class CastCommand : Command { #region [rgn] Constructors (1) /// <summary> /// Initializes a new instance of the <see cref="CastCommand"/> class. /// </summary> public CastCommand() : base("cast", "casts a spell") { } #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) { player.WriteLine("Cast what?"); return; } String arg = argument.FirstArg(); Spell spell = Lists.Abilities.FindSpell(arg); if (spell == null) { player.WriteLine("No such spell."); return; } if (spell.Level[player.Class] == 0 || player.Learned[Name] == 0 || spell.Level[player.Class] > player.Level) { player.WriteLine("You don't know how to cast that."); return; } object obj = null; switch (spell.Target) { case SpellTarget.Offensive: obj = player.Room.Characters.FindName(argument); if (obj == null) { player.WriteLine("They aren't here."); return; } break; case SpellTarget.Defensive: obj = player.Room.Characters.FindName(argument); if (obj == null) { player.WriteLine("They aren't here."); return; } break; case SpellTarget.Ignore: break; case SpellTarget.Self: obj = player; break; case SpellTarget.Item: obj = player.Carrying.FindName(argument); if (obj == null) obj = player.Room.Items.FindName(argument); if (obj == null) { player.WriteLine("You can't find that item."); return; } break; } if (spell.Mana > player.Mana) { player.WriteLine("You don't have enough mana."); return; } player.Mana -= spell.Mana; spell.Process(player, obj); player.Connection.Wait = spell.WaitTime; } #endregion [rgn] } }