/** * It is suspected that 'cache' is a misnomer carried over from when UWE was actually doing procedurally * generated worlds. In the final release, this 'cache' has simply been baked into a final version that * we can parse. */ private void ParseCacheCells(NitroxInt3 batchId, string fileName, List <EntitySpawnPoint> spawnPoints) { using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { CellsFileHeader cellsFileHeader = serializer.Deserialize <CellsFileHeader>(stream); for (int cellCounter = 0; cellCounter < cellsFileHeader.NumCells; cellCounter++) { CellHeaderEx cellHeader = serializer.Deserialize <CellHeaderEx>(stream); byte[] serialData = new byte[cellHeader.DataLength]; stream.Read(serialData, 0, cellHeader.DataLength); ParseGameObjectsWithHeader(serialData, batchId, cellHeader.CellId, cellHeader.Level, spawnPoints, out bool wasLegacy); if (!wasLegacy) { byte[] legacyData = new byte[cellHeader.LegacyDataLength]; stream.Read(legacyData, 0, cellHeader.LegacyDataLength); ParseGameObjectsWithHeader(legacyData, batchId, cellHeader.CellId, cellHeader.Level, spawnPoints, out wasLegacy); byte[] waiterData = new byte[cellHeader.WaiterDataLength]; stream.Read(waiterData, 0, cellHeader.WaiterDataLength); ParseGameObjectsFromStream(new MemoryStream(waiterData), batchId, cellHeader.CellId, cellHeader.Level, spawnPoints); } } } }
/** * It is suspected that 'cache' is a misnomer carried over from when UWE was actually doing procedurally * generated worlds. In the final release, this 'cache' has simply been baked into a final version that * we can parse. */ private void ParseCacheCells(Int3 batchId, string fileName, List <EntitySpawnPoint> spawnPoints) { using (Stream stream = File.OpenRead(fileName)) { CellsFileHeader cellsFileHeader = serializer.Deserialize <CellsFileHeader>(stream); for (int cellCounter = 0; cellCounter < cellsFileHeader.numCells; cellCounter++) { CellHeaderEx cellHeader = serializer.Deserialize <CellHeaderEx>(stream); bool wasLegacy; byte[] serialData = new byte[cellHeader.dataLength]; stream.Read(serialData, 0, cellHeader.dataLength); ParseGameObjectsWithHeader(serialData, batchId, cellHeader.cellId, cellHeader.level, spawnPoints, out wasLegacy); if (!wasLegacy) { byte[] legacyData = new byte[cellHeader.legacyDataLength]; stream.Read(legacyData, 0, cellHeader.legacyDataLength); ParseGameObjectsWithHeader(legacyData, batchId, cellHeader.cellId, cellHeader.level, spawnPoints, out wasLegacy); byte[] waiterData = new byte[cellHeader.waiterDataLength]; stream.Read(waiterData, 0, cellHeader.waiterDataLength); ParseGameObjectsFromStream(new MemoryStream(waiterData), batchId, cellHeader.cellId, cellHeader.level, spawnPoints); } } } }