protected Dispose ( bool disposing ) : void | ||
disposing | bool | /// true if the Dispose method was invoked by user code. /// |
return | void |
internal void Read() { try { using (FileStream fileStream = File.OpenRead(this.Name)) { using (DeflateStream deflateStream = new DeflateStream(fileStream, CompressionMode.Decompress)) { using (BinaryReader binaryReader = new BinaryReader(deflateStream)) { int num = (int)binaryReader.ReadByte(); for (int i = 0; i < num; i++) { this.AddFile(binaryReader.ReadString(), binaryReader.ReadBytes(binaryReader.ReadInt32())); } } deflateStream.Dispose(); } } } catch { this.InvalidFile = true; } }
public void Save() { if (!EnterSave()) return; Stream zip = new DeflateStream(File.Create(DataFile + ".tmp"), CompressionMode.Compress); try { zip.WriteByte(0); // version zip.WriteByte(Convert.ToByte(LightToRecalculate)); for (int x = 0; x < 16; ++x) { for (int z = 0; z < 16; ++z) { zip.WriteByte(HeightMap[x, z]); } } WriteAllBlocks(zip); zip.Flush(); } finally { try { zip.Dispose(); File.Delete(DataFile); File.Move(DataFile + ".tmp", DataFile); } catch { } finally { ExitSave(); } } }
public static Chunk Load(UniversalCoords coords, WorldManager world) { string path = world.Folder + "/x" + coords.ChunkX + "_z" + coords.ChunkZ + ".gz"; if (!CanLoad(path)) return null; Stream zip = null; Chunk chunk = new Chunk(world, coords); try { zip = new DeflateStream(File.Open(path, FileMode.Open), CompressionMode.Decompress); int version = zip.ReadByte(); switch(version) { /* When there's a new mod you do: case 1: { * dosomething * goto case 0; }*/ case 0: { chunk.LightToRecalculate = Convert.ToBoolean(zip.ReadByte()); chunk.HeightMap = new byte[16,16]; int height; chunk.MaxHeight = 0; for (int x = 0; x < 16; ++x) { for (int z = 0; z < 16; ++z) { height = chunk.HeightMap[x, z] = (byte) zip.ReadByte(); if (chunk.MaxHeight < height) chunk.MaxHeight = height; } } chunk.LoadAllBlocks(zip); break; } } } catch (Exception ex) { world.Logger.Log(ex); return null; } if (zip != null) zip.Dispose(); (BlockHelper.Instance((byte) BlockData.Blocks.Sign_Post) as BlockSignBase).LoadSignsFromDisk(chunk, world.SignsFolder); return chunk; }
public void Save() { if (!EnterSave()) return; Stream zip = new DeflateStream(File.Create(DataFile + ".tmp"), CompressionMode.Compress); try { WriteAllBlocks(zip); zip.Flush(); } finally { try { zip.Dispose(); File.Delete(DataFile); File.Move(DataFile + ".tmp", DataFile); } catch { } finally { ExitSave(); } } }
public bool Load() { if (!CanLoad()) return false; Stream zip = null; Monitor.Enter(_SavingLock); try { zip = new DeflateStream(File.Open(DataFile, FileMode.Open), CompressionMode.Decompress); LoadAllBlocks(zip); return true; } catch (Exception ex) { World.Logger.Log(ex); return false; } finally { Monitor.Exit(_SavingLock); if (zip != null) zip.Dispose(); } }
public static void SaveMap() { bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave; if (isCloudSave && SocialAPI.Cloud == null) { return; } if (!Main.mapEnabled || MapHelper.saveLock) { return; } string text = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4); lock (MapHelper.padlock) { try { MapHelper.saveLock = true; try { if (!isCloudSave) { Directory.CreateDirectory(text); } } catch { } text = string.Concat(new object[] { text, Path.DirectorySeparatorChar, Main.worldID, ".map" }); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); bool flag2 = false; if (!Main.gameMenu) { flag2 = true; } using (MemoryStream memoryStream = new MemoryStream(4000)) { using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream)) { using (DeflateStream deflateStream = new DeflateStream(memoryStream, 0)) { int num = 0; byte[] array = new byte[16384]; binaryWriter.Write(Main.curRelease); Main.MapFileMetadata.IncrementAndWrite(binaryWriter); binaryWriter.Write(Main.worldName); binaryWriter.Write(Main.worldID); binaryWriter.Write(Main.maxTilesY); binaryWriter.Write(Main.maxTilesX); binaryWriter.Write((short)(419 + Main.ulterrariaTiles));// binaryWriter.Write((short)225 + Main.ulterrariaWalls); binaryWriter.Write((short)3); binaryWriter.Write((short)256); binaryWriter.Write((short)256); binaryWriter.Write((short)256); byte b = 1; byte b2 = 0; int i; for (i = 0; i < 419 + Main.ulterrariaTiles; i++) { if (MapHelper.tileOptionCounts[i] != 1) { b2 |= b; } if (b == 128) { binaryWriter.Write(b2); b2 = 0; b = 1; } else { b = (byte)(b << 1); } } if (b != 1) { binaryWriter.Write(b2); } i = 0; b = 1; b2 = 0; while (i < 225 + Main.ulterrariaWalls) { if (MapHelper.wallOptionCounts[i] != 1) { b2 |= b; } if (b == 128) { binaryWriter.Write(b2); b2 = 0; b = 1; } else { b = (byte)(b << 1); } i++; } if (b != 1) { binaryWriter.Write(b2); } for (i = 0; i < 419 + Main.ulterrariaTiles; i++) { if (MapHelper.tileOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.tileOptionCounts[i]); } } for (i = 0; i < 225 + Main.ulterrariaWalls; i++) { if (MapHelper.wallOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.wallOptionCounts[i]); } } binaryWriter.Flush(); for (int j = 0; j < Main.maxTilesY; j++) { if (!flag2) { float num2 = (float)j / (float)Main.maxTilesY; Main.statusText = string.Concat(new object[] { Lang.gen[66], " ", (int)(num2 * 100f + 1f), "%" }); } for (int k = 0; k < Main.maxTilesX; k++) { MapTile mapTile = Main.Map[k, j]; byte b4; byte b3 = b4 = 0; bool flag3 = true; bool flag4 = true; int num3 = 0; int num4 = 0; byte b5 = 0; int num5; ushort num6; int num7; if (mapTile.Light <= 18) { flag4 = false; flag3 = false; num5 = 0; num6 = 0; num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; while (l > 0) { if (Main.Map[num8, j].Light > 18) { break; } num7++; l--; num8++; } } else { b5 = mapTile.Color; num6 = mapTile.Type; if (num6 < MapHelper.wallPosition) { num5 = 1; num6 -= MapHelper.tilePosition; } else if (num6 < MapHelper.liquidPosition) { num5 = 2; num6 -= MapHelper.wallPosition; } else if (num6 < MapHelper.skyPosition) { num5 = (int)(3 + (num6 - MapHelper.liquidPosition)); flag3 = false; } else if (num6 < MapHelper.dirtPosition) { num5 = 6; flag4 = false; flag3 = false; } else if (num6 < MapHelper.hellPosition) { num5 = 7; if (num6 < MapHelper.rockPosition) { num6 -= MapHelper.dirtPosition; } else { num6 -= MapHelper.rockPosition; } } else { num5 = 6; flag3 = false; } if (mapTile.Light == 255) { flag4 = false; } if (flag4) { num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; num3 = num8; while (l > 0) { MapTile mapTile2 = Main.Map[num8, j]; if (!mapTile.EqualsWithoutLight(ref mapTile2)) { num4 = num8; break; } l--; num7++; num8++; } } else { num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; while (l > 0) { MapTile mapTile3 = Main.Map[num8, j]; if (!mapTile.Equals(ref mapTile3)) { break; } l--; num7++; num8++; } } } if (b5 > 0) { b3 |= (byte)(b5 << 1); } if (b3 != 0) { b4 |= 1; } b4 |= (byte)(num5 << 1); if (flag3 && num6 > 255) { b4 |= 16; } if (flag4) { b4 |= 32; } if (num7 > 0) { if (num7 > 255) { b4 |= 128; } else { b4 |= 64; } } array[num] = b4; num++; if (b3 != 0) { array[num] = b3; num++; } if (flag3) { array[num] = (byte)num6; num++; if (num6 > 255) { array[num] = (byte)(num6 >> 8); num++; } } if (flag4) { array[num] = mapTile.Light; num++; } if (num7 > 0) { array[num] = (byte)num7; num++; if (num7 > 255) { array[num] = (byte)(num7 >> 8); num++; } } for (int m = num3; m < num4; m++) { array[num] = Main.Map[m, j].Light; num++; } k += num7; if (num >= 4096) { deflateStream.Write(array, 0, num); num = 0; } } } if (num > 0) { deflateStream.Write(array, 0, num); } deflateStream.Dispose(); FileUtilities.WriteAllBytes(text, memoryStream.ToArray(), isCloudSave); } } } } catch (Exception value) { using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true)) { streamWriter.WriteLine(DateTime.Now); streamWriter.WriteLine(value); streamWriter.WriteLine(""); } } MapHelper.saveLock = false; } }
/*public static void SaveMap() { bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave; if (isCloudSave && SocialAPI.Cloud == null) { return; } if (!Main.mapEnabled || MapHelper.saveLock) { return; } string text = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4); lock (MapHelper.padlock) { try { MapHelper.saveLock = true; try { if (!isCloudSave) { Directory.CreateDirectory(text); } } catch { } text = string.Concat(new object[] { text, Path.DirectorySeparatorChar, Main.worldID, ".map" }); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); bool flag2 = false; if (!Main.gameMenu) { flag2 = true; } using (MemoryStream memoryStream = new MemoryStream(4000)) { using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream)) { using (DeflateStream deflateStream = new DeflateStream(memoryStream, 0)) { int num = 0; byte[] array = new byte[16384]; binaryWriter.Write(Main.curRelease); Main.MapFileMetadata.IncrementAndWrite(binaryWriter); binaryWriter.Write(Main.worldName); binaryWriter.Write(Main.worldID); binaryWriter.Write(Main.maxTilesY); binaryWriter.Write(Main.maxTilesX); binaryWriter.Write(419); binaryWriter.Write(225); binaryWriter.Write(3); binaryWriter.Write(256); binaryWriter.Write(256); binaryWriter.Write(256); byte b = 1; byte b2 = 0; int i; for (i = 0; i < 419; i++) { if (MapHelper.tileOptionCounts[i] != 1) { b2 |= b; } if (b == 128) { binaryWriter.Write(b2); b2 = 0; b = 1; } else { b = (byte)(b << 1); } } if (b != 1) { binaryWriter.Write(b2); } i = 0; b = 1; b2 = 0; while (i < 225) { if (MapHelper.wallOptionCounts[i] != 1) { b2 |= b; } if (b == 128) { binaryWriter.Write(b2); b2 = 0; b = 1; } else { b = (byte)(b << 1); } i++; } if (b != 1) { binaryWriter.Write(b2); } for (i = 0; i < 419; i++) { if (MapHelper.tileOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.tileOptionCounts[i]); } } for (i = 0; i < 225; i++) { if (MapHelper.wallOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.wallOptionCounts[i]); } } binaryWriter.Flush(); for (int j = 0; j < Main.maxTilesY; j++) { if (!flag2) { float num2 = (float)j / (float)Main.maxTilesY; Main.statusText = string.Concat(new object[] { Lang.gen[66], " ", (int)(num2 * 100f + 1f), "%" }); } for (int k = 0; k < Main.maxTilesX; k++) { MapTile mapTile = Main.Map[k, j]; byte b4; byte b3 = b4 = 0; bool flag3 = true; bool flag4 = true; int num3 = 0; int num4 = 0; byte b5 = 0; int num5; ushort num6; int num7; if (mapTile.Light <= 18) { flag4 = false; flag3 = false; num5 = 0; num6 = 0; num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; while (l > 0) { if (Main.Map[num8, j].Light > 18) { break; } num7++; l--; num8++; } } else { b5 = mapTile.Color; num6 = mapTile.Type; if (num6 < MapHelper.wallPosition) { num5 = 1; num6 -= MapHelper.tilePosition; } else if (num6 < MapHelper.liquidPosition) { num5 = 2; num6 -= MapHelper.wallPosition; } else if (num6 < MapHelper.skyPosition) { num5 = (int)(3 + (num6 - MapHelper.liquidPosition)); flag3 = false; } else if (num6 < MapHelper.dirtPosition) { num5 = 6; flag4 = false; flag3 = false; } else if (num6 < MapHelper.hellPosition) { num5 = 7; if (num6 < MapHelper.rockPosition) { num6 -= MapHelper.dirtPosition; } else { num6 -= MapHelper.rockPosition; } } else { num5 = 6; flag3 = false; } if (mapTile.Light == 255) { flag4 = false; } if (flag4) { num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; num3 = num8; while (l > 0) { MapTile mapTile2 = Main.Map[num8, j]; if (!mapTile.EqualsWithoutLight(ref mapTile2)) { num4 = num8; break; } l--; num7++; num8++; } } else { num7 = 0; int num8 = k + 1; int l = Main.maxTilesX - k - 1; while (l > 0) { MapTile mapTile3 = Main.Map[num8, j]; if (!mapTile.Equals(ref mapTile3)) { break; } l--; num7++; num8++; } } } if (b5 > 0) { b3 |= (byte)(b5 << 1); } if (b3 != 0) { b4 |= 1; } b4 |= (byte)(num5 << 1); if (flag3 && num6 > 255) { b4 |= 16; } if (flag4) { b4 |= 32; } if (num7 > 0) { if (num7 > 255) { b4 |= 128; } else { b4 |= 64; } } array[num] = b4; num++; if (b3 != 0) { array[num] = b3; num++; } if (flag3) { array[num] = (byte)num6; num++; if (num6 > 255) { array[num] = (byte)(num6 >> 8); num++; } } if (flag4) { array[num] = mapTile.Light; num++; } if (num7 > 0) { array[num] = (byte)num7; num++; if (num7 > 255) { array[num] = (byte)(num7 >> 8); num++; } } for (int m = num3; m < num4; m++) { array[num] = Main.Map[m, j].Light; num++; } k += num7; if (num >= 4096) { deflateStream.Write(array, 0, num); num = 0; } } } if (num > 0) { deflateStream.Write(array, 0, num); } deflateStream.Dispose(); FileUtilities.WriteAllBytes(text, memoryStream.ToArray(), isCloudSave); } } } } catch (Exception value) { using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true)) { streamWriter.WriteLine(DateTime.Now); streamWriter.WriteLine(value); streamWriter.WriteLine(""); } } MapHelper.saveLock = false; } }*/ public static void SaveMap() { int i; int num; int num1; ushort type; int num2; bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave; if (isCloudSave && SocialAPI.Cloud == null) { return; } if (!Main.mapEnabled || MapHelper.saveLock) { return; } string str = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4); lock (MapHelper.padlock) { try { MapHelper.saveLock = true; try { if (!isCloudSave) { Directory.CreateDirectory(str); } } catch { } object[] directorySeparatorChar = new object[] { str, Path.DirectorySeparatorChar, Main.worldID, ".map" }; str = string.Concat(directorySeparatorChar); (new Stopwatch()).Start(); bool flag = false; if (!Main.gameMenu) { flag = true; } using (MemoryStream memoryStream = new MemoryStream(4000)) { using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream)) { using (DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress)) { int num3 = 0; byte[] light = new byte[16384]; binaryWriter.Write(Main.curRelease); Main.MapFileMetadata.IncrementAndWrite(binaryWriter); binaryWriter.Write(Main.worldName); binaryWriter.Write(Main.worldID); binaryWriter.Write(Main.maxTilesY); binaryWriter.Write(Main.maxTilesX); binaryWriter.Write((short)419); binaryWriter.Write((short)225); binaryWriter.Write((short)3); binaryWriter.Write((short)256); binaryWriter.Write((short)256); binaryWriter.Write((short)256); byte num4 = 1; byte num5 = 0; for (i = 0; i < 419; i++) { if (MapHelper.tileOptionCounts[i] != 1) { num5 = (byte)(num5 | num4); } if (num4 != 128) { num4 = (byte)(num4 << 1); } else { binaryWriter.Write(num5); num5 = 0; num4 = 1; } } if (num4 != 1) { binaryWriter.Write(num5); } i = 0; num4 = 1; num5 = 0; while (i < 225) { if (MapHelper.wallOptionCounts[i] != 1) { num5 = (byte)(num5 | num4); } if (num4 != 128) { num4 = (byte)(num4 << 1); } else { binaryWriter.Write(num5); num5 = 0; num4 = 1; } i++; } if (num4 != 1) { binaryWriter.Write(num5); } for (i = 0; i < 419; i++) { if (MapHelper.tileOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.tileOptionCounts[i]); } } for (i = 0; i < 225; i++) { if (MapHelper.wallOptionCounts[i] != 1) { binaryWriter.Write((byte)MapHelper.wallOptionCounts[i]); } } binaryWriter.Flush(); for (int j = 0; j < Main.maxTilesY; j++) { if (!flag) { float single = (float)j / (float)Main.maxTilesY; object[] objArray = new object[] { Lang.gen[66], " ", (int)(single * 100f + 1f), "%" }; Main.statusText = string.Concat(objArray); } for (int k = 0; k < Main.maxTilesX; k++) { MapTile item = Main.Map[k, j]; int num6 = 0; byte num7 = (byte)num6; byte num8 = (byte)num6; int num9 = 0; bool flag1 = true; bool flag2 = true; int num10 = 0; int num11 = 0; byte color = 0; if (item.Light > 18) { color = item.Color; type = item.Type; if (type < MapHelper.wallPosition) { num1 = 1; type = (ushort)(type - MapHelper.tilePosition); } else if (type < MapHelper.liquidPosition) { num1 = 2; type = (ushort)(type - MapHelper.wallPosition); } else if (type < MapHelper.skyPosition) { num1 = 3 + (type - MapHelper.liquidPosition); flag1 = false; } else if (type < MapHelper.dirtPosition) { num1 = 6; flag2 = false; flag1 = false; } else if (type >= MapHelper.hellPosition) { num1 = 6; flag1 = false; } else { num1 = 7; type = (type >= MapHelper.rockPosition ? (ushort)(type - MapHelper.rockPosition) : (ushort)(type - MapHelper.dirtPosition)); } if (item.Light == 255) { flag2 = false; } if (!flag2) { num9 = 0; num = k + 1; num2 = Main.maxTilesX - k - 1; while (num2 > 0) { MapTile mapTile = Main.Map[num, j]; if (!item.Equals(ref mapTile)) { break; } num2--; num9++; num++; } } else { num9 = 0; num = k + 1; num2 = Main.maxTilesX - k - 1; num10 = num; while (num2 > 0) { MapTile item1 = Main.Map[num, j]; if (!item.EqualsWithoutLight(ref item1)) { num11 = num; goto Label0; } else { num2--; num9++; num++; } } } } else { flag2 = false; flag1 = false; num1 = 0; type = 0; num9 = 0; num = k + 1; num2 = Main.maxTilesX - k - 1; while (num2 > 0) { if (Main.Map[num, j].Light > 18) { goto Label0; } num9++; num2--; num++; } } Label0: if (color > 0) { num7 = (byte)(num7 | (byte)(color << 1)); } if (num7 != 0) { num8 = (byte)(num8 | 1); } num8 = (byte)(num8 | (byte)(num1 << 1)); if (flag1 && type > 255) { num8 = (byte)(num8 | 16); } if (flag2) { num8 = (byte)(num8 | 32); } if (num9 > 0) { num8 = (num9 <= 255 ? (byte)(num8 | 64) : (byte)(num8 | 128)); } light[num3] = num8; num3++; if (num7 != 0) { light[num3] = num7; num3++; } if (flag1) { light[num3] = (byte)type; num3++; if (type > 255) { light[num3] = (byte)(type >> 8); num3++; } } if (flag2) { light[num3] = item.Light; num3++; } if (num9 > 0) { light[num3] = (byte)num9; num3++; if (num9 > 255) { light[num3] = (byte)(num9 >> 8); num3++; } } for (int l = num10; l < num11; l++) { light[num3] = Main.Map[l, j].Light; num3++; } k = k + num9; if (num3 >= 4096) { deflateStream.Write(light, 0, num3); num3 = 0; } } } if (num3 > 0) { deflateStream.Write(light, 0, num3); } deflateStream.Dispose(); FileUtilities.WriteAllBytes(str, memoryStream.ToArray(), isCloudSave); } } } } catch (Exception exception1) { Exception exception = exception1; using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true)) { streamWriter.WriteLine(DateTime.Now); streamWriter.WriteLine(exception); streamWriter.WriteLine(""); } } MapHelper.saveLock = false; } }
public bool Load() { if (!CanLoad()) return false; Stream zip = null; Monitor.Enter(_SavingLock); try { zip = new DeflateStream(File.Open(DataFile, FileMode.Open), CompressionMode.Decompress); HeightMap = new byte[16, 16]; for (int x = 0; x < 16; ++x) { for (int z = 0; z < 16; ++z) { HeightMap[x, z] = (byte)zip.ReadByte(); } } LoadAllBlocks(zip); return true; } catch (Exception ex) { World.Logger.Log(ex); return false; } finally { Monitor.Exit(_SavingLock); if (zip != null) zip.Dispose(); } }
public static int CompressTileBlock(int xStart, int yStart, short width, short height, byte[] buffer, int bufferStart) { int result; using (MemoryStream memoryStream = new MemoryStream()) { using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream)) { binaryWriter.Write(xStart); binaryWriter.Write(yStart); binaryWriter.Write(width); binaryWriter.Write(height); NetMessage.CompressTileBlock_Inner(binaryWriter, xStart, yStart, (int)width, (int)height); int num = buffer.Length; if ((long)bufferStart + memoryStream.Length > (long)num) { result = (int)((long)(num - bufferStart) + memoryStream.Length); } else { memoryStream.Position = 0L; MemoryStream memoryStream2 = new MemoryStream(); using (DeflateStream deflateStream = new DeflateStream(memoryStream2, 0, true)) { memoryStream.CopyTo(deflateStream); deflateStream.Flush(); deflateStream.Close(); deflateStream.Dispose(); } if (memoryStream.Length <= memoryStream2.Length) { memoryStream.Position = 0L; buffer[bufferStart] = 0; bufferStart++; memoryStream.Read(buffer, bufferStart, (int)memoryStream.Length); result = (int)memoryStream.Length + 1; } else { memoryStream2.Position = 0L; buffer[bufferStart] = 1; bufferStart++; memoryStream2.Read(buffer, bufferStart, (int)memoryStream2.Length); result = (int)memoryStream2.Length + 1; } } } } return result; }