public static void SendWater(int x, int y) { if (disableLiquidUpdates) { return; } if (useLiquidUpdateBuffer) { LiquidUpdateBuffer.QueueUpdate(x, y); return; } byte[] bytes = null; for (int i = 0; i < 255; i++) { if (NetPlay.slots[i].state >= SlotState.PLAYING && NetPlay.slots[i].Connected) { int X = x / 200; int Y = y / 150; if (X < (Main.maxTilesX / 200) && Y < (Main.maxTilesY / 150)) { if (NetPlay.slots[i].tileSection[X, Y]) { if (bytes == null) { var msg = NetMessage.PrepareThreadInstance(); msg.FlowLiquid(x, y); bytes = msg.Output; } NetPlay.slots[i].Send(bytes); } } else { ProgramLog.Error.Log("Water Index out of Bounds:"); ProgramLog.Error.Log(string.Format("X: {0} Y: {1}, Axis: {2}, {3}", X, Y, Main.maxTilesX, Main.maxTilesY)); } } } }
public static void clearWorld() { Statics.WorldLoaded = false; Main.trashItem = new Item(); WorldModify.spawnEye = false; WorldModify.spawnNPC = 0; WorldModify.shadowOrbCount = 0; Main.helpText = 0; Main.dungeonX = 0; Main.dungeonY = 0; NPC.downedBoss1 = false; NPC.downedBoss2 = false; NPC.downedBoss3 = false; WorldModify.shadowOrbSmashed = false; WorldModify.spawnMeteor = false; WorldModify.stopDrops = false; Main.invasionDelay = 0; Main.invasionType = 0; Main.invasionSize = 0; Main.invasionWarn = 0; Main.invasionX = 0.0; WorldModify.noLiquidCheck = false; Liquid.numLiquid = 0; LiquidBuffer.numLiquidBuffer = 0; // if (WorldModify.lastMaxTilesX > Main.maxTilesX || WorldModify.lastMaxTilesY > Main.maxTilesY) // { // using (var prog = new ProgressLogger(WorldModify.lastMaxTilesX - 1, "Freeing unused resources")) // for (int i = 0; i < WorldModify.lastMaxTilesX; i++) // { // prog.Value = i; // for (int j = 0; j < WorldModify.lastMaxTilesY; j++) // { // Main.tile.CreateTileAt(i, j); // } // } // } WorldModify.lastMaxTilesX = Main.maxTilesX; WorldModify.lastMaxTilesY = Main.maxTilesY; if (Main.tile == null || Main.tile.SizeX != Main.maxTilesX || Main.tile.SizeY != Main.maxTilesY) { Main.tile = null; GC.Collect(); Main.tile = new TileCollection(Main.maxTilesX, Main.maxTilesY); } else { using (var prog = new ProgressLogger(Main.maxTilesX - 1, "Clearing world tiles")) for (int k = 0; k < Main.maxTilesX; k++) { prog.Value = k; for (int l = 0; l < Main.maxTilesY; l++) { Main.tile.CreateTileAt(k, l); // for testing // if ((l == 25 || l == 26) && k > 4000 && k < 5000) // { // Main.tile.At(k, l).SetLiquid (250); // Liquid.AddWater (k, l); // } } } } using (var prog = new ProgressLogger(12212 + Liquid.resLiquid - 1, "Resetting game objects")) { for (int num3 = 0; num3 < 201; num3++) { Main.item[num3] = null; Main.npcs[num3] = null; } prog.Value++; for (int num4 = 0; num4 < 1000; num4++) { Main.projectile[num4] = null; Main.chest[num4] = null; Main.sign[num4] = null; } prog.Value++; // for (int num8 = 0; num8 < Liquid.resLiquid; num8++) // { // Main.liquid[num8] = null; // } // prog.Value++; // for (int num9 = 0; num9 < 10000; num9++) // { // Main.liquidBuffer[num9] = null; // } // prog.Value += 10; GC.Collect(); prog.Value += 10; for (int num3 = 0; num3 < 201; num3++) { Main.item[num3] = new Item(); Main.npcs[num3] = new NPC(); prog.Value++; } for (int num4 = 0; num4 < 1001; num4++) { prog.Value++; } // for (int num5 = 0; num5 < 1000; num5++) // { // Main.projectile[num5] = new Projectile(); // prog.Value++; // } Projectile.ResetProjectiles(); prog.Value += 1000; for (int num8 = 0; num8 < Liquid.resLiquid; num8++) { Main.liquid[num8] = new Liquid(); prog.Value++; } for (int num9 = 0; num9 < 10000; num9++) { Main.liquidBuffer[num9] = new LiquidBuffer(); prog.Value++; } } setWorldSize(); LiquidUpdateBuffer.Initialize(Main.maxSectionsX, Main.maxSectionsY); worldCleared = true; }