public void Read(BinaryReader reader) { version = reader.ReadInt32(); modid = reader.ReadString(); byteLength = reader.ReadInt64(); if (!(SRModLoader.GetMod(modid) is SRMod mod)) { throw new Exception($"Unrecognized mod id: {modid}"); } var saveInfo = SaveRegistry.GetSaveInfo(mod); identifiableData.Clear(); int count = reader.ReadInt32(); for (int i = 0; i < count; i++) { var e = new IdentifiedData(); e.Read(reader, saveInfo); identifiableData.Add(e); } extendedData.Clear(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { var e = new ExtendedDataTree(); e.Read(reader); extendedData.Add(e); } if (version >= 1) { playerData.Read(reader); pediaData.Read(reader); enumTranslator = new EnumTranslator(); enumTranslator.Read(reader); BinaryUtils.ReadDictionary(reader, customAmmo, (x) => AmmoIdentifier.Read(x), (x) => { var list = new List <VanillaAmmoData>(); int ammoCount = x.ReadInt32(); for (int i = 0; i < ammoCount; i++) { if (x.ReadBoolean()) { var newData = new VanillaAmmoData(); newData.Load(x.BaseStream); list.Add(newData); } else { list.Add(null); } } return(list); }); } }
public void Write(BinaryWriter writer) { version = DATA_VERSION; var start = writer.BaseStream.Position; writer.Write(version); writer.Write(modid); var overwritePosition = writer.BaseStream.Position; writer.Write((long)0); if (!(SRModLoader.GetMod(modid) is SRMod mod)) { throw new Exception($"Unrecognized mod id: {modid}"); } var saveInfo = SaveRegistry.GetSaveInfo(mod); writer.Write(identifiableData.Count); foreach (var data in identifiableData) { data.Write(writer, saveInfo); } writer.Write(extendedData.Count); foreach (var data in extendedData) { data.Write(writer); } playerData.Write(writer); pediaData.Write(writer); BinaryUtils.WriteDictionary(writer, customAmmo, (x, y) => AmmoIdentifier.Write(y, x), (x, y) => { x.Write(y.Count); foreach (var v in y) { x.Write(v != null); if (v != null) { v.Write(x.BaseStream); } } }); DataPiece.Serialize(writer, extendedWorldData); worldData.Write(writer); var cur = writer.BaseStream.Position; writer.BaseStream.Seek(overwritePosition, SeekOrigin.Begin); byteLength = cur - (start); writer.Write(byteLength); writer.BaseStream.Seek(cur, SeekOrigin.Begin); }
public static VanillaActorData ActorCreator(GameModel gameModel, int typeId, long actorId, ActorModel actorModel) { var mod = SaveRegistry.ModForModelType(actorModel.GetType()); if (mod != null) { var info = SaveRegistry.GetSaveInfo(mod).GetRegistryFor <CustomActorData>(); var newmodel = info.GetDataForID(info.GetIDForModel(actorModel.GetType())); newmodel.PullCustomModel(actorModel); return((VanillaActorData)newmodel); } return(new VanillaActorData()); }