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 ReadData(BinaryReader reader) { ammoDataEntries.Clear(); int count = reader.ReadInt32(); for (int i = 0; i < count; i++) { var newEntry = new IdentifiableAmmoData(); newEntry.Read(reader); ammoDataEntries.Add(newEntry); } segments.Clear(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { long start = reader.BaseStream.Position; var mod = new ModDataSegment(); try { mod.Read(reader); segments.Add(mod); } catch (Exception e) { Debug.Log($"Encountered exception {e}\nskipping loading {mod.modid} skipping {mod.byteLength} bytes in the stream"); reader.BaseStream.Seek(start + mod.byteLength, SeekOrigin.Begin); } } if (version >= 1) { enumTranslator = new EnumTranslator(); enumTranslator.Read(reader); if (version >= 2) { partialData.Clear(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { var id = DataIdentifier.Read(reader); var dataType = DataIdentifier.IdentifierTypeToData[id.Type]; if (PartialData.TryGetPartialData(dataType, out var data)) { data.Read(reader); partialData[id] = data; } else { Debug.LogError("No partial data for data identifier type " + id.Type); } } if (version >= 3) { try { appearancesData.Read(reader); } catch (Exception e) { throw; } } } } }