CODE |
using System; using Server; using Server.Items; using Server.Network; using Server.Mobiles; namespace Server.Engines.XmlSpawner2 { public class XmlData : XmlAttachment { private string m_DataValue = null; // default data [CommandProperty( AccessLevel.GameMaster )] public string Data { get{ return m_DataValue; } set { m_DataValue = value; } } // These are the various ways in which the message attachment can be constructed. // These can be called via the [addatt interface, via scripts, via the spawner ATTACH keyword. // Other overloads could be defined to handle other types of arguments // a serial constructor is REQUIRED public XmlData(ASerial serial) : base(serial) { } [Attachable] public XmlData(string name) { Name = name; Data = String.Empty; } [Attachable] public XmlData(string name, string data) { Name = name; Data = data; } [Attachable] public XmlData(string name, string data, double expiresin) { Name = name; Data = data; Expiration = TimeSpan.FromMinutes(expiresin); } public override void Serialize( GenericWriter writer ) { base.Serialize(writer); writer.Write( (int) 0 ); // version 0 writer.Write((string)m_DataValue); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 m_DataValue = reader.ReadString(); } public override string OnIdentify(Mobile from) { if(from == null || from.AccessLevel == AccessLevel.Player) return null; if(Expiration > TimeSpan.Zero) { return String.Format("{2}: Data {0} expires in {1} mins",Data,Expiration.TotalMinutes, Name); } else { return String.Format("{1}: Data {0}",Data, Name); } } } } |
CODE |
using System; using Server; using Server.Items; using Server.Network; using Server.Mobiles; namespace Server.Engines.XmlSpawner2 { public class XmlIntData : XmlAttachment { private int m_DataValue = 0; // default data [CommandProperty( AccessLevel.GameMaster )] public int Data { get{ return m_DataValue; } set { m_DataValue = value; } } // These are the various ways in which the message attachment can be constructed. // These can be called via the [addatt interface, via scripts, via the spawner ATTACH keyword. // Other overloads could be defined to handle other types of arguments // a serial constructor is REQUIRED public XmlIntData(ASerial serial) : base(serial) { } [Attachable] public XmlIntData(string name) { Name = name; } [Attachable] public XmlIntData(string name, int data) { Name = name; Data = data; } [Attachable] public XmlIntData(string name, int data, double expiresin) { Name = name; Data = data; Expiration = TimeSpan.FromMinutes(expiresin); } public override void Serialize( GenericWriter writer ) { base.Serialize(writer); writer.Write( (int) 0 ); // version 0 writer.Write((int)m_DataValue); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 m_DataValue = reader.ReadInt(); } public override string OnIdentify(Mobile from) { if(from == null || from.AccessLevel == AccessLevel.Player) return null; if(Expiration > TimeSpan.Zero) { return String.Format("{2}: Data {0} expires in {1} mins",Data,Expiration.TotalMinutes, Name); } else { return String.Format("{1}: Data {0}",Data, Name); } } } } |
CODE |
using System; using Server; namespace Server.Engines.XmlSpawner2 { public class XmlIntData : XmlAttachment { private int m_DataValue = 0; // default data [CommandProperty(AccessLevel.GameMaster)] public int Data { get { return m_DataValue; } set { m_DataValue = value; } } public XmlIntData(ASerial serial) : base(serial) { } [Attachable] public XmlIntData() { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version 0 writer.Write((int)m_DataValue); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 m_DataValue = reader.ReadInt(); } } } |
CODE |
using System; using Server; namespace Server.Engines.XmlSpawner2 { public class XmlIntArrayData : XmlAttachment { private int[] m_DataValue; // default data [CommandProperty(AccessLevel.GameMaster)] public int[] Data { get { return m_DataValue; } set { m_DataValue = value; } } public XmlIntArrayData(ASerial serial) : base(serial) { } [Attachable] public XmlIntArrayData() { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version 0 if (Data == null) { writer.Write((int)0); } else { writer.Write((int)Data.Length); for (int i = 0; i < Data.Length; i++) { writer.Write((int)Data[i]); } } } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 int count = reader.ReadInt(); Data = new int[count]; for (int i = 0; i < count; i++) { Data[i] = reader.ReadInt(); } } } } |
CODE |
using System; using Server; namespace Server.Engines.XmlSpawner2 { public class CustomPlayerProperties : XmlAttachment { private DateTime m_LastBathed; [CommandProperty(AccessLevel.GameMaster)] public DateTime LastBathed { get { return m_LastBathed; } set { m_LastBathed= value; } } public CustomPlayerProperties(ASerial serial) : base(serial) { } [Attachable] public CustomPlayerProperties() { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version 0 writer.Write(m_LastBathed); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 m_LastBathed = reader.ReadDateTime(); } } } |
CODE |
CustomPlayerProperties p = (CustomPlayerProperties) XmlAttach.FindAttachment(from, typeof(CustomPlayerProperties)); if(p != null && p.LastBathed + TimeSpan.FromDays(30) < DateTime.Now) { from.SendMessage("You really need to bathe at at least once a month!"); } |
CODE |
if(from.LastBathed + TimeSpan.FromDays(30) < DateTime.Now) { from.SendMessage("You really need to bathe at at least once a month!"); } |
CODE |
private DateTime m_LastBathed; [CommandProperty(AccessLevel.GameMaster)] public DateTime LastBathed { get { return m_LastBathed; } set { m_LastBathed = value; } } |
CODE |
public override void OnReattach() { base.OnReattach(); PlayerMobile from = AttachedTo as PlayerMobile; if (from != null) { from.LastBathed = m_LastBathed; } } |
CODE |
using System; using Server; namespace Server.Engines.XmlSpawner2 { public class CustomPlayerProperties : XmlAttachment { private DateTime m_LastBathed; [CommandProperty(AccessLevel.GameMaster)] public DateTime LastBathed { get { // get it from the attached player if available PlayerMobile from = AttachedTo as PlayerMobile; if (from != null) { return from.LastBathed; } else return m_LastBathed; } set { m_LastBathed = value; // set it on the attached player if available PlayerMobile from = AttachedTo as PlayerMobile; if (from != null) { from.LastBathed = m_LastBathed; } } } public CustomPlayerProperties(ASerial serial) : base(serial) { } [Attachable] public CustomPlayerProperties() { } public override void OnReattach() { base.OnReattach(); PlayerMobile from = AttachedTo as PlayerMobile; // restore the custom property values on the modified playermobile if (from != null) { from.LastBathed = m_LastBathed; } } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version 0 writer.Write(LastBathed); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); // version 0 m_LastBathed = reader.ReadDateTime(); } } } |
QUOTE (HellRazor @ May 04, 2007 07:50 am) |
Wow. As usual Arte, you are the MAN. You always exceed all expectations. As you can probably tell I am easing my way into learning and understanding the XML attachment system and this is all REALLY helpful. Thank you!!! P.S. Hopefully now I will be able to update that "Last Bathed" property! ![]() |