Dispose() protected method

Dispose the stream.

This may or may not result in a Close() call on the captive stream. See the constructors that have a leaveOpen parameter for more information.

Application code won't call this code directly. This method may be invoked in two distinct scenarios. If disposing == true, the method has been called directly or indirectly by a user's code, for example via the public Dispose() method. In this case, both managed and unmanaged resources can be referenced and disposed. If disposing == false, the method has been called by the runtime from inside the object finalizer and this method should not reference other objects; in that case only unmanaged resources must be referenced or disposed.

protected Dispose ( bool disposing ) : void
disposing bool /// true if the Dispose method was invoked by user code. ///
return void
Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
        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();
                }
            }
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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();
                }
            }
        }
Beispiel #5
0
        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;
			}
		}
Beispiel #7
0
 /*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;
     }
 }
Beispiel #8
0
        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;
		}