protected override void ReadData(ESPReader reader) { using (MemoryStream stream = new MemoryStream(reader.ReadBytes(size))) using (ESPReader subReader = new ESPReader(stream, reader.Plugin)) { try { DamageMultiplier = subReader.ReadSingle(); Flags = subReader.ReadEnum <BodyPartDataFlags>(); Type = subReader.ReadEnum <BodyPartType>(); HealthPercent = subReader.ReadByte(); ActorValue = subReader.ReadEnum <ActorValuesByte>(); ToHitChance = subReader.ReadByte(); ExplosionChance = subReader.ReadByte(); ExplosionDebrisCount = subReader.ReadUInt16(); ExplosionDebris.ReadBinary(subReader); Explosion.ReadBinary(subReader); TrackingMaxAngle = subReader.ReadSingle(); ExplosionDebrisScale = subReader.ReadSingle(); SeverableDebrisCount = subReader.ReadInt32(); SeverableDebris.ReadBinary(subReader); SeverableExplosion.ReadBinary(subReader); SeverableDebrisScale = subReader.ReadSingle(); GoreEffectsTranslateX = subReader.ReadSingle(); GoreEffectsTranslateY = subReader.ReadSingle(); GoreEffectsTranslateZ = subReader.ReadSingle(); GoreEffectsRotationX = subReader.ReadSingle(); GoreEffectsRotationY = subReader.ReadSingle(); GoreEffectsRotationZ = subReader.ReadSingle(); SeverableImpactDataSet.ReadBinary(subReader); ExplosionImpactDataSet.ReadBinary(subReader); SeverableDecalCount = subReader.ReadByte(); ExplosionDecalCount = subReader.ReadByte(); Unused = subReader.ReadBytes(2); LimbReplacementScale = subReader.ReadSingle(); } catch { return; } } }
protected override void WriteData(ESPWriter writer) { writer.Write(DamageMultiplier); writer.Write((Byte)Flags); writer.Write((Byte)Type); writer.Write(HealthPercent); writer.Write((SByte)ActorValue); writer.Write(ToHitChance); writer.Write(ExplosionChance); writer.Write(ExplosionDebrisCount); ExplosionDebris.WriteBinary(writer); Explosion.WriteBinary(writer); writer.Write(TrackingMaxAngle); writer.Write(ExplosionDebrisScale); writer.Write(SeverableDebrisCount); SeverableDebris.WriteBinary(writer); SeverableExplosion.WriteBinary(writer); writer.Write(SeverableDebrisScale); writer.Write(GoreEffectsTranslateX); writer.Write(GoreEffectsTranslateY); writer.Write(GoreEffectsTranslateZ); writer.Write(GoreEffectsRotationX); writer.Write(GoreEffectsRotationY); writer.Write(GoreEffectsRotationZ); SeverableImpactDataSet.WriteBinary(writer); ExplosionImpactDataSet.WriteBinary(writer); writer.Write(SeverableDecalCount); writer.Write(ExplosionDecalCount); if (Unused == null) { writer.Write(new byte[2]); } else { writer.Write(Unused); } writer.Write(LimbReplacementScale); }
protected override void ReadDataXML(XElement ele, ElderScrollsPlugin master) { XElement subEle; if (ele.TryPathTo("DamageMultiplier", false, out subEle)) { DamageMultiplier = subEle.ToSingle(); } if (ele.TryPathTo("Flags", false, out subEle)) { Flags = subEle.ToEnum <BodyPartDataFlags>(); } if (ele.TryPathTo("Type", false, out subEle)) { Type = subEle.ToEnum <BodyPartType>(); } if (ele.TryPathTo("HealthPercent", false, out subEle)) { HealthPercent = subEle.ToByte(); } if (ele.TryPathTo("ActorValue", false, out subEle)) { ActorValue = subEle.ToEnum <ActorValuesByte>(); } if (ele.TryPathTo("ToHitChance", false, out subEle)) { ToHitChance = subEle.ToByte(); } if (ele.TryPathTo("Explodable/ExplosionChance", false, out subEle)) { ExplosionChance = subEle.ToByte(); } if (ele.TryPathTo("Explodable/DebrisCount", false, out subEle)) { ExplosionDebrisCount = subEle.ToUInt16(); } if (ele.TryPathTo("Explodable/Debris", false, out subEle)) { ExplosionDebris.ReadXML(subEle, master); } if (ele.TryPathTo("Explodable/Explosion", false, out subEle)) { Explosion.ReadXML(subEle, master); } if (ele.TryPathTo("TrackingMaxAngle", false, out subEle)) { TrackingMaxAngle = subEle.ToSingle(); } if (ele.TryPathTo("Explodable/DebrisScale", false, out subEle)) { ExplosionDebrisScale = subEle.ToSingle(); } if (ele.TryPathTo("Severable/DebrisCount", false, out subEle)) { SeverableDebrisCount = subEle.ToInt32(); } if (ele.TryPathTo("Severable/Debris", false, out subEle)) { SeverableDebris.ReadXML(subEle, master); } if (ele.TryPathTo("Severable/Explosion", false, out subEle)) { SeverableExplosion.ReadXML(subEle, master); } if (ele.TryPathTo("Severable/DebrisScale", false, out subEle)) { SeverableDebrisScale = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Translate/X", false, out subEle)) { GoreEffectsTranslateX = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Translate/Y", false, out subEle)) { GoreEffectsTranslateY = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Translate/Z", false, out subEle)) { GoreEffectsTranslateZ = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Rotation/X", false, out subEle)) { GoreEffectsRotationX = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Rotation/Y", false, out subEle)) { GoreEffectsRotationY = subEle.ToSingle(); } if (ele.TryPathTo("GoreEffects/Rotation/Z", false, out subEle)) { GoreEffectsRotationZ = subEle.ToSingle(); } if (ele.TryPathTo("Severable/ImpactDataSet", false, out subEle)) { SeverableImpactDataSet.ReadXML(subEle, master); } if (ele.TryPathTo("Explodable/ImpactDataSet", false, out subEle)) { ExplosionImpactDataSet.ReadXML(subEle, master); } if (ele.TryPathTo("Severable/DecalCount", false, out subEle)) { SeverableDecalCount = subEle.ToByte(); } if (ele.TryPathTo("Explodable/DecalCount", false, out subEle)) { ExplosionDecalCount = subEle.ToByte(); } ReadUnusedXML(ele, master); if (ele.TryPathTo("LimbReplacementScale", false, out subEle)) { LimbReplacementScale = subEle.ToSingle(); } }
protected override void WriteDataXML(XElement ele, ElderScrollsPlugin master) { XElement subEle; ele.TryPathTo("DamageMultiplier", true, out subEle); subEle.Value = DamageMultiplier.ToString("G15"); ele.TryPathTo("Flags", true, out subEle); subEle.Value = Flags.ToString(); ele.TryPathTo("Type", true, out subEle); subEle.Value = Type.ToString(); ele.TryPathTo("HealthPercent", true, out subEle); subEle.Value = HealthPercent.ToString(); ele.TryPathTo("ActorValue", true, out subEle); subEle.Value = ActorValue.ToString(); ele.TryPathTo("ToHitChance", true, out subEle); subEle.Value = ToHitChance.ToString(); ele.TryPathTo("Explodable/ExplosionChance", true, out subEle); subEle.Value = ExplosionChance.ToString(); ele.TryPathTo("Explodable/DebrisCount", true, out subEle); subEle.Value = ExplosionDebrisCount.ToString(); ele.TryPathTo("Explodable/Debris", true, out subEle); ExplosionDebris.WriteXML(subEle, master); ele.TryPathTo("Explodable/Explosion", true, out subEle); Explosion.WriteXML(subEle, master); ele.TryPathTo("TrackingMaxAngle", true, out subEle); subEle.Value = TrackingMaxAngle.ToString("G15"); ele.TryPathTo("Explodable/DebrisScale", true, out subEle); subEle.Value = ExplosionDebrisScale.ToString("G15"); ele.TryPathTo("Severable/DebrisCount", true, out subEle); subEle.Value = SeverableDebrisCount.ToString(); ele.TryPathTo("Severable/Debris", true, out subEle); SeverableDebris.WriteXML(subEle, master); ele.TryPathTo("Severable/Explosion", true, out subEle); SeverableExplosion.WriteXML(subEle, master); ele.TryPathTo("Severable/DebrisScale", true, out subEle); subEle.Value = SeverableDebrisScale.ToString("G15"); ele.TryPathTo("GoreEffects/Translate/X", true, out subEle); subEle.Value = GoreEffectsTranslateX.ToString("G15"); ele.TryPathTo("GoreEffects/Translate/Y", true, out subEle); subEle.Value = GoreEffectsTranslateY.ToString("G15"); ele.TryPathTo("GoreEffects/Translate/Z", true, out subEle); subEle.Value = GoreEffectsTranslateZ.ToString("G15"); ele.TryPathTo("GoreEffects/Rotation/X", true, out subEle); subEle.Value = GoreEffectsRotationX.ToString("G15"); ele.TryPathTo("GoreEffects/Rotation/Y", true, out subEle); subEle.Value = GoreEffectsRotationY.ToString("G15"); ele.TryPathTo("GoreEffects/Rotation/Z", true, out subEle); subEle.Value = GoreEffectsRotationZ.ToString("G15"); ele.TryPathTo("Severable/ImpactDataSet", true, out subEle); SeverableImpactDataSet.WriteXML(subEle, master); ele.TryPathTo("Explodable/ImpactDataSet", true, out subEle); ExplosionImpactDataSet.WriteXML(subEle, master); ele.TryPathTo("Severable/DecalCount", true, out subEle); subEle.Value = SeverableDecalCount.ToString(); ele.TryPathTo("Explodable/DecalCount", true, out subEle); subEle.Value = ExplosionDecalCount.ToString(); WriteUnusedXML(ele, master); ele.TryPathTo("LimbReplacementScale", true, out subEle); subEle.Value = LimbReplacementScale.ToString("G15"); }