#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.Collections.Generic;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using Arthea.Connections.Players;
using Arthea.Creation;
using Arthea.Environment;
using Arthea.Interfaces;
namespace Arthea.Abilities.Skills
{
/// <summary>
/// Implementation of a skill level.
/// </summary>
public class SkillValues : Dictionary<string, ushort>, IXmlSerializable, CustomEditType
{
#region [rgn] Properties (1)
/// <summary>
/// Gets the <see cref="System.Int16"/> with the specified by skill name.
/// </summary>
/// <value>the skill value</value>
public new ushort this[string skill]
{
get
{
try
{
return base[skill];
}
catch
{
return 0;
}
}
set
{
if (value == 0)
{
Remove(skill);
}
else if (ContainsKey(skill))
{
base[skill] = value;
}
else
{
Add(skill, value);
}
}
}
#endregion [rgn]
#region CustomEditType Members
/// <summary>
/// Sets the value of a skill level.
/// </summary>
/// <param name="player">The player.</param>
/// <param name="editer">Information from the editer.</param>
/// <param name="argument">The argument.</param>
public void CustomEdit(Player player, OlcField editer, String argument)
{
String arg = argument.FirstArg();
Ability skill = Lists.Abilities.FindName(arg);
ushort level;
if (!ushort.TryParse(argument, out level))
{
player.WriteLine("That is not a valid level for a skill.");
return;
}
this[skill.Name] = level;
player.WriteLine("{0} set to {1}.", skill.Name, level);
}
#endregion
#region IXmlSerializable Members
///<summary>
///This property is reserved, apply the <see cref="T:System.Xml.Serialization.XmlSchemaProviderAttribute"></see> to the class instead.
///</summary>
///
///<returns>
///An <see cref="T:System.Xml.Schema.XmlSchema"></see> that describes the XML representation of the object that is produced by the <see cref="M:System.Xml.Serialization.IXmlSerializable.WriteXml(System.Xml.XmlWriter)"></see> method and consumed by the <see cref="M:System.Xml.Serialization.IXmlSerializable.ReadXml(System.Xml.XmlReader)"></see> method.
///</returns>
///
XmlSchema IXmlSerializable.GetSchema()
{
return null;
}
///<summary>
///Generates an object from its XML representation.
///</summary>
///
///<param name="reader">The <see cref="T:System.Xml.XmlReader"></see> stream from which the object is deserialized. </param>
void IXmlSerializable.ReadXml(XmlReader reader)
{
if (reader.IsEmptyElement)
return;
reader.ReadStartElement();
while (reader.IsStartElement())
{
Add(reader.GetAttribute("name"),
ushort.Parse(reader.GetAttribute("value")));
reader.ReadStartElement();
}
reader.ReadEndElement();
}
///<summary>
///Converts an object into its XML representation.
///</summary>
///
///<param name="writer">The <see cref="T:System.Xml.XmlWriter"></see> stream to which the object is serialized. </param>
void IXmlSerializable.WriteXml(XmlWriter writer)
{
if (Count == 0)
return;
foreach (KeyValuePair<string, ushort> entry in this)
{
writer.WriteStartElement("Skill");
writer.WriteAttributeString("name", entry.Key);
writer.WriteAttributeString("value", entry.Value.ToString());
writer.WriteEndElement();
}
}
#endregion
}
}