protected override void WriteData(ESPWriter writer)
 {
     writer.Write((UInt32)MagicEffectFlags);
     writer.Write(BaseCost);
     AssociatedItem.WriteBinary(writer);
     writer.Write((Int32)MagicSchool);
     writer.Write((Int32)ResistanceType);
     writer.Write(Unknown);
     if (Unused == null)
     {
         writer.Write(new byte[2]);
     }
     else
     {
         writer.Write(Unused);
     }
     Light.WriteBinary(writer);
     writer.Write(ProjectileSpeed);
     EffectShader.WriteBinary(writer);
     ObjectDisplayShader.WriteBinary(writer);
     EffectSound.WriteBinary(writer);
     BoltSound.WriteBinary(writer);
     HitSound.WriteBinary(writer);
     AreaSound.WriteBinary(writer);
     writer.Write(ConstantEffectEnchantmentFactor);
     writer.Write(ConstantEffectBarterFactor);
     writer.Write((UInt32)Archetype);
     writer.Write((Int32)ActorValue);
 }
        protected override void WriteDataXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            ele.TryPathTo("Flags", true, out subEle);
            subEle.Value = MagicEffectFlags.ToString();

            ele.TryPathTo("BaseCost", true, out subEle);
            subEle.Value = BaseCost.ToString("G15");

            ele.TryPathTo("AssociatedItem", true, out subEle);
            AssociatedItem.WriteXML(subEle, master);

            ele.TryPathTo("MagicSchool", true, out subEle);
            subEle.Value = MagicSchool.ToString();

            ele.TryPathTo("ResistanceType", true, out subEle);
            subEle.Value = ResistanceType.ToString();

            ele.TryPathTo("Unknown", true, out subEle);
            subEle.Value = Unknown.ToString();

            WriteUnusedXML(ele, master);

            ele.TryPathTo("Light", true, out subEle);
            Light.WriteXML(subEle, master);

            ele.TryPathTo("ProjectileSpeed", true, out subEle);
            subEle.Value = ProjectileSpeed.ToString("G15");

            ele.TryPathTo("EffectShader", true, out subEle);
            EffectShader.WriteXML(subEle, master);

            ele.TryPathTo("ObjectDisplayShader", true, out subEle);
            ObjectDisplayShader.WriteXML(subEle, master);

            ele.TryPathTo("EffectSound", true, out subEle);
            EffectSound.WriteXML(subEle, master);

            ele.TryPathTo("BoltSound", true, out subEle);
            BoltSound.WriteXML(subEle, master);

            ele.TryPathTo("HitSound", true, out subEle);
            HitSound.WriteXML(subEle, master);

            ele.TryPathTo("AreaSound", true, out subEle);
            AreaSound.WriteXML(subEle, master);

            ele.TryPathTo("ConstantEffectEnchantmentFactor", true, out subEle);
            subEle.Value = ConstantEffectEnchantmentFactor.ToString("G15");

            ele.TryPathTo("ConstantEffectBarterFactor", true, out subEle);
            subEle.Value = ConstantEffectBarterFactor.ToString("G15");

            ele.TryPathTo("Archetype", true, out subEle);
            subEle.Value = Archetype.ToString();

            ele.TryPathTo("ActorValue", true, out subEle);
            subEle.Value = ActorValue.ToString();
        }
 protected override void ReadData(ESPReader reader)
 {
     using (MemoryStream stream = new MemoryStream(reader.ReadBytes(size)))
         using (ESPReader subReader = new ESPReader(stream, reader.Plugin))
         {
             try
             {
                 MagicEffectFlags = subReader.ReadEnum <MagicEffectFlags>();
                 BaseCost         = subReader.ReadSingle();
                 AssociatedItem.ReadBinary(subReader);
                 MagicSchool    = subReader.ReadEnum <MagicSchool>();
                 ResistanceType = subReader.ReadEnum <ActorValues>();
                 Unknown        = subReader.ReadUInt16();
                 Unused         = subReader.ReadBytes(2);
                 Light.ReadBinary(subReader);
                 ProjectileSpeed = subReader.ReadSingle();
                 EffectShader.ReadBinary(subReader);
                 ObjectDisplayShader.ReadBinary(subReader);
                 EffectSound.ReadBinary(subReader);
                 BoltSound.ReadBinary(subReader);
                 HitSound.ReadBinary(subReader);
                 AreaSound.ReadBinary(subReader);
                 ConstantEffectEnchantmentFactor = subReader.ReadSingle();
                 ConstantEffectBarterFactor      = subReader.ReadSingle();
                 Archetype  = subReader.ReadEnum <MagicEffectArchetype>();
                 ActorValue = subReader.ReadEnum <ActorValues>();
             }
             catch
             {
                 return;
             }
         }
 }
        protected override void ReadDataXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            if (ele.TryPathTo("Flags", false, out subEle))
            {
                MagicEffectFlags = subEle.ToEnum <MagicEffectFlags>();
            }

            if (ele.TryPathTo("BaseCost", false, out subEle))
            {
                BaseCost = subEle.ToSingle();
            }

            if (ele.TryPathTo("AssociatedItem", false, out subEle))
            {
                AssociatedItem.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("MagicSchool", false, out subEle))
            {
                MagicSchool = subEle.ToEnum <MagicSchool>();
            }

            if (ele.TryPathTo("ResistanceType", false, out subEle))
            {
                ResistanceType = subEle.ToEnum <ActorValues>();
            }

            if (ele.TryPathTo("Unknown", false, out subEle))
            {
                Unknown = subEle.ToUInt16();
            }

            ReadUnusedXML(ele, master);

            if (ele.TryPathTo("Light", false, out subEle))
            {
                Light.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("ProjectileSpeed", false, out subEle))
            {
                ProjectileSpeed = subEle.ToSingle();
            }

            if (ele.TryPathTo("EffectShader", false, out subEle))
            {
                EffectShader.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("ObjectDisplayShader", false, out subEle))
            {
                ObjectDisplayShader.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("EffectSound", false, out subEle))
            {
                EffectSound.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("BoltSound", false, out subEle))
            {
                BoltSound.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("HitSound", false, out subEle))
            {
                HitSound.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("AreaSound", false, out subEle))
            {
                AreaSound.ReadXML(subEle, master);
            }

            if (ele.TryPathTo("ConstantEffectEnchantmentFactor", false, out subEle))
            {
                ConstantEffectEnchantmentFactor = subEle.ToSingle();
            }

            if (ele.TryPathTo("ConstantEffectBarterFactor", false, out subEle))
            {
                ConstantEffectBarterFactor = subEle.ToSingle();
            }

            if (ele.TryPathTo("Archetype", false, out subEle))
            {
                Archetype = subEle.ToEnum <MagicEffectArchetype>();
            }

            if (ele.TryPathTo("ActorValue", false, out subEle))
            {
                ActorValue = subEle.ToEnum <ActorValues>();
            }
        }