public static void DelWater(int liquidIndex) { int x = Main.liquid[liquidIndex].x; int y = Main.liquid[liquidIndex].y; if (Main.tile.At(x, y).Liquid < 2) { Main.tile.At(x, y).SetLiquid(0); } else if (Main.tile.At(x, y).Liquid < 20) { if ((Main.tile.At(x - 1, y).Liquid < Main.tile.At(x, y).Liquid&& (!Main.tile.At(x - 1, y).Active || !Main.tileSolid[(int)Main.tile.At(x - 1, y).Type] || Main.tileSolidTop[(int)Main.tile.At(x - 1, y).Type])) || (Main.tile.At(x + 1, y).Liquid < Main.tile.At(x, y).Liquid&& (!Main.tile.At(x + 1, y).Active || !Main.tileSolid[(int)Main.tile.At(x + 1, y).Type] || Main.tileSolidTop[(int)Main.tile.At(x + 1, y).Type])) || (Main.tile.At(x, y + 1).Liquid < 255 && (!Main.tile.At(x, y + 1).Active || !Main.tileSolid[(int)Main.tile.At(x, y + 1).Type] || Main.tileSolidTop[(int)Main.tile.At(x, y + 1).Type]))) { Main.tile.At(x, y).SetLiquid(0); } } else if (Main.tile.At(x, y + 1).Liquid < 255 && (!Main.tile.At(x, y + 1).Active || !Main.tileSolid[(int)Main.tile.At(x, y + 1).Type] || Main.tileSolidTop[(int)Main.tile.At(x, y + 1).Type]) && !Liquid.stuck) { Main.liquid[liquidIndex].kill = 0; return; } if (Main.tile.At(x, y).Liquid < 250 && Main.tile.At(x, y - 1).Liquid > 0) { Liquid.AddWater(x, y - 1); } if (Main.tile.At(x, y).Liquid == 0) { Main.tile.At(x, y).SetLava(false); } else { if (Main.tile.At(x + 1, y).Liquid > 0 && Main.tile.At(x + 1, y + 1).Liquid < 250 && !Main.tile.At(x + 1, y + 1).Active) { Liquid.AddWater(x + 1, y); } if (Main.tile.At(x - 1, y).Liquid > 0 && Main.tile.At(x - 1, y + 1).Liquid < 250 && !Main.tile.At(x - 1, y + 1).Active) { Liquid.AddWater(x - 1, y); } if (Main.tile.At(x, y).Lava) { Liquid.LavaCheck(x, y); for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { if (Main.tile.At(i, j).Active) { if (Main.tile.At(i, j).Type == 2 || Main.tile.At(i, j).Type == 23) { Main.tile.At(i, j).SetType(0); WorldModify.SquareTileFrame(i, j, true); NetMessage.SendTileSquare(-1, x, y, 3); } else if (Main.tile.At(i, j).Type == 60 || Main.tile.At(i, j).Type == 70) { Main.tile.At(i, j).SetType(59); WorldModify.SquareTileFrame(i, j, true); NetMessage.SendTileSquare(-1, x, y, 3); } } } } } } NetMessage.SendWater(x, y); Liquid.numLiquid--; Main.tile.At(Main.liquid[liquidIndex].x, Main.liquid[liquidIndex].y).SetCheckingLiquid(false); Main.liquid[liquidIndex].x = Main.liquid[Liquid.numLiquid].x; Main.liquid[liquidIndex].y = Main.liquid[Liquid.numLiquid].y; Main.liquid[liquidIndex].kill = Main.liquid[Liquid.numLiquid].kill; if (Main.tileAlch[(int)Main.tile.At(x, y).Type]) { WorldModify.CheckAlch(x, y); } }
public static void UpdateLiquid() { Liquid.cycles = 25; Liquid.maxLiquid = 5000; if (!WorldModify.gen) { if (!Liquid.panicMode) { if (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > 4000) { Liquid.panicCounter++; if (Liquid.panicCounter > 1800 || Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > 13500) { Liquid.StartPanic(); } } else { Liquid.panicCounter = 0; } } if (Liquid.panicMode) { try { Terraria_Server.Networking.LiquidUpdateBuffer.ClearQueue(); NetMessage.DisableLiquidUpdates = true; int num = 0; while (Liquid.panicY >= 3 && num < 5) { num++; Liquid.QuickWater(0, Liquid.panicY, Liquid.panicY); Liquid.panicY--; if (Liquid.panicY < 3) { ProgramLog.Log("Water has been settled."); Liquid.panicCounter = 0; Liquid.panicMode = false; using (var prog = new ProgressLogger(Main.maxTilesX - 2, "Performing water check")) WorldModify.WaterCheck(prog); for (int i = 0; i < 255; i++) { for (int j = 0; j < Main.maxSectionsX; j++) { for (int k = 0; k < Main.maxSectionsY; k++) { NetPlay.slots[i].tileSection[j, k] = false; } } } } } return; } finally { NetMessage.DisableLiquidUpdates = false; } } } if (Liquid.quickSettle || Liquid.numLiquid > 2000) { Liquid.quickFall = true; } else { Liquid.quickFall = false; } Liquid.wetCounter++; int num2 = Liquid.maxLiquid / Liquid.cycles; int num3 = num2 * (Liquid.wetCounter - 1); int num4 = num2 * Liquid.wetCounter; if (Liquid.wetCounter == Liquid.cycles) { num4 = Liquid.numLiquid; } if (num4 > Liquid.numLiquid) { num4 = Liquid.numLiquid; Liquid.wetCounter = Liquid.cycles; } if (Liquid.quickFall) { for (int l = num3; l < num4; l++) { Main.liquid[l].delay = 10; Main.liquid[l].Update(); Main.tile.At(Main.liquid[l].x, Main.liquid[l].y).SetSkipLiquid(false); } } else { for (int m = num3; m < num4; m++) { if (!Main.tile.At(Main.liquid[m].x, Main.liquid[m].y).SkipLiquid) { Main.liquid[m].Update(); } else { Main.tile.At(Main.liquid[m].x, Main.liquid[m].y).SetSkipLiquid(false); } } } if (Liquid.wetCounter >= Liquid.cycles) { Liquid.wetCounter = 0; for (int n = Liquid.numLiquid - 1; n >= 0; n--) { if (Main.liquid[n].kill > 3) { Liquid.DelWater(n); } } int num5 = Liquid.maxLiquid - (Liquid.maxLiquid - Liquid.numLiquid); if (num5 > LiquidBuffer.numLiquidBuffer) { num5 = LiquidBuffer.numLiquidBuffer; } for (int num6 = 0; num6 < num5; num6++) { Main.tile.At(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y).SetCheckingLiquid(false); Liquid.AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y); LiquidBuffer.DelBuffer(0); } if (Liquid.numLiquid > 0 && Liquid.numLiquid > Liquid.stuckAmount - 50 && Liquid.numLiquid < Liquid.stuckAmount + 50) { Liquid.stuckCount++; if (Liquid.stuckCount >= 10000) { Liquid.stuck = true; for (int num7 = Liquid.numLiquid - 1; num7 >= 0; num7--) { Liquid.DelWater(num7); } Liquid.stuck = false; Liquid.stuckCount = 0; return; } } else { Liquid.stuckCount = 0; Liquid.stuckAmount = Liquid.numLiquid; } } }
public void Update() { if (Main.tile.At(this.x, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x, this.y).Type]) { if (Main.tile.At(this.x, this.y).Type != 10) { Main.tile.At(this.x, this.y).SetLiquid(0); } this.kill = 9; return; } byte liquid = Main.tile.At(this.x, this.y).Liquid; float num = 0f; if (this.y > Main.maxTilesY - 200 && !Main.tile.At(this.x, this.y).Lava&& Main.tile.At(this.x, this.y).Liquid > 0) { byte b = 2; if (Main.tile.At(this.x, this.y).Liquid < b) { b = Main.tile.At(this.x, this.y).Liquid; } TileRef expr_16F = Main.tile.At(this.x, this.y); expr_16F.AddLiquid(-b); } if (Main.tile.At(this.x, this.y).Liquid == 0) { this.kill = 9; return; } if (Main.tile.At(this.x, this.y).Lava) { Liquid.LavaCheck(this.x, this.y); if (!Liquid.quickFall) { if (this.delay < 5) { this.delay++; return; } this.delay = 0; } } else { if (Main.tile.At(this.x - 1, this.y).Lava) { Liquid.AddWater(this.x - 1, this.y); } if (Main.tile.At(this.x + 1, this.y).Lava) { Liquid.AddWater(this.x + 1, this.y); } if (Main.tile.At(this.x, this.y - 1).Lava) { Liquid.AddWater(this.x, this.y - 1); } if (Main.tile.At(this.x, this.y + 1).Lava) { Liquid.AddWater(this.x, this.y + 1); } } if ((!Main.tile.At(this.x, this.y + 1).Active || !Main.tileSolid[(int)Main.tile.At(this.x, this.y + 1).Type] || Main.tileSolidTop[(int)Main.tile.At(this.x, this.y + 1).Type]) && (Main.tile.At(this.x, this.y + 1).Liquid <= 0 || Main.tile.At(this.x, this.y + 1).Lava == Main.tile.At(this.x, this.y).Lava) && Main.tile.At(this.x, this.y + 1).Liquid < 255) { num = (float)(255 - Main.tile.At(this.x, this.y + 1).Liquid); if (num > (float)Main.tile.At(this.x, this.y).Liquid) { num = (float)Main.tile.At(this.x, this.y).Liquid; } TileRef expr_42E = Main.tile.At(this.x, this.y); expr_42E.AddLiquid(-(byte)num); TileRef expr_455 = Main.tile.At(this.x, this.y + 1); expr_455.AddLiquid(+(byte)num); Main.tile.At(this.x, this.y + 1).SetLava(Main.tile.At(this.x, this.y).Lava); Liquid.AddWater(this.x, this.y + 1); Main.tile.At(this.x, this.y + 1).SetSkipLiquid(true); Main.tile.At(this.x, this.y).SetSkipLiquid(true); if (Main.tile.At(this.x, this.y).Liquid > 250) { Main.tile.At(this.x, this.y).SetLiquid(255); } else { Liquid.AddWater(this.x - 1, this.y); Liquid.AddWater(this.x + 1, this.y); } } if (Main.tile.At(this.x, this.y).Liquid > 0) { bool flag = true; bool flag2 = true; bool flag3 = true; bool flag4 = true; if (Main.tile.At(this.x - 1, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x - 1, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x - 1, this.y).Type]) { flag = false; } else if (Main.tile.At(this.x - 1, this.y).Liquid > 0 && Main.tile.At(this.x - 1, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag = false; } else if (Main.tile.At(this.x - 2, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x - 2, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x - 2, this.y).Type]) { flag3 = false; } else if (Main.tile.At(this.x - 2, this.y).Liquid == 0) { flag3 = false; } else if (Main.tile.At(this.x - 2, this.y).Liquid > 0 && Main.tile.At(this.x - 2, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag3 = false; } if (Main.tile.At(this.x + 1, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x + 1, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x + 1, this.y).Type]) { flag2 = false; } else { if (Main.tile.At(this.x + 1, this.y).Liquid > 0 && Main.tile.At(this.x + 1, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag2 = false; } else { if (Main.tile.At(this.x + 2, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x + 2, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x + 2, this.y).Type]) { flag4 = false; } else { if (Main.tile.At(this.x + 2, this.y).Liquid == 0) { flag4 = false; } else { if (Main.tile.At(this.x + 2, this.y).Liquid > 0 && Main.tile.At(this.x + 2, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag4 = false; } } } } } int num2 = 0; if (Main.tile.At(this.x, this.y).Liquid < 3) { num2 = -1; } if (flag && flag2) { if (flag3 && flag4) { bool flag5 = true; bool flag6 = true; if (Main.tile.At(this.x - 3, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x - 3, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x - 3, this.y).Type]) { flag5 = false; } else { if (Main.tile.At(this.x - 3, this.y).Liquid == 0) { flag5 = false; } else { if (Main.tile.At(this.x - 3, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag5 = false; } } } if (Main.tile.At(this.x + 3, this.y).Active&& Main.tileSolid[(int)Main.tile.At(this.x + 3, this.y).Type] && !Main.tileSolidTop[(int)Main.tile.At(this.x + 3, this.y).Type]) { flag6 = false; } else { if (Main.tile.At(this.x + 3, this.y).Liquid == 0) { flag6 = false; } else { if (Main.tile.At(this.x + 3, this.y).Lava != Main.tile.At(this.x, this.y).Lava) { flag6 = false; } } } if (flag5 && flag6) { num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x - 2, this.y).Liquid + Main.tile.At(this.x + 2, this.y).Liquid + Main.tile.At(this.x - 3, this.y).Liquid + Main.tile.At(this.x + 3, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 7f)); int num3 = 0; Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } else { num3++; } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } else { num3++; } Main.tile.At(this.x - 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 2, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 2, this.y); Main.tile.At(this.x - 2, this.y).SetLiquid((byte)num); } else { num3++; } Main.tile.At(this.x + 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 2, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 2, this.y); Main.tile.At(this.x + 2, this.y).SetLiquid((byte)num); } else { num3++; } Main.tile.At(this.x - 3, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 3, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 3, this.y); Main.tile.At(this.x - 3, this.y).SetLiquid((byte)num); } else { num3++; } Main.tile.At(this.x + 3, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 3, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 3, this.y); Main.tile.At(this.x + 3, this.y).SetLiquid((byte)num); } else { num3++; } if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); } if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); } if (Main.tile.At(this.x - 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 2, this.y); } if (Main.tile.At(this.x + 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 2, this.y); } if (Main.tile.At(this.x - 3, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 3, this.y); } if (Main.tile.At(this.x + 3, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 3, this.y); } if (num3 != 6 || Main.tile.At(this.x, this.y - 1).Liquid <= 0) { Main.tile.At(this.x, this.y).SetLiquid((byte)num); } } else { int num4 = 0; num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x - 2, this.y).Liquid + Main.tile.At(this.x + 2, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 5f)); Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } else { num4++; } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } else { num4++; } Main.tile.At(this.x - 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 2, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 2, this.y); Main.tile.At(this.x - 2, this.y).SetLiquid((byte)num); } else { num4++; } Main.tile.At(this.x + 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 2, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 2, this.y); Main.tile.At(this.x + 2, this.y).SetLiquid((byte)num); } else { num4++; } if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); } if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); } if (Main.tile.At(this.x - 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 2, this.y); } if (Main.tile.At(this.x + 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 2, this.y); } if (num4 != 4 || Main.tile.At(this.x, this.y - 1).Liquid <= 0) { Main.tile.At(this.x, this.y).SetLiquid((byte)num); } } } else { if (flag3) { num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x - 2, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 4f) + 0.001); Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x - 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Main.tile.At(this.x - 2, this.y).SetLiquid((byte)num); Liquid.AddWater(this.x - 2, this.y); } Main.tile.At(this.x, this.y).SetLiquid((byte)num); } else { if (flag4) { num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x + 2, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 4f) + 0.001); Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x + 2, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 2, this.y).Liquid != (byte)num || Main.tile.At(this.x, this.y).Liquid != (byte)num) { Main.tile.At(this.x + 2, this.y).SetLiquid((byte)num); Liquid.AddWater(this.x + 2, this.y); } Main.tile.At(this.x, this.y).SetLiquid((byte)num); } else { num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 3f) + 0.001); Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } if (Main.tile.At(this.x, this.y).Liquid != (byte)num || Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } if (Main.tile.At(this.x, this.y).Liquid != (byte)num || Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); } Main.tile.At(this.x, this.y).SetLiquid((byte)num); } } } } else { if (flag) { num = (float)((int)(Main.tile.At(this.x - 1, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 2f) + 0.001); if (Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Main.tile.At(this.x - 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x - 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x, this.y).Liquid != (byte)num || Main.tile.At(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x - 1, this.y); } Main.tile.At(this.x, this.y).SetLiquid((byte)num); } else { if (flag2) { num = (float)((int)(Main.tile.At(this.x + 1, this.y).Liquid + Main.tile.At(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 2f) + 0.001); if (Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Main.tile.At(this.x + 1, this.y).SetLiquid((byte)num); } Main.tile.At(this.x + 1, this.y).SetLava(Main.tile.At(this.x, this.y).Lava); if (Main.tile.At(this.x, this.y).Liquid != (byte)num || Main.tile.At(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(this.x + 1, this.y); } Main.tile.At(this.x, this.y).SetLiquid((byte)num); } } } } if (Main.tile.At(this.x, this.y).Liquid == liquid) { this.kill++; return; } if (Main.tile.At(this.x, this.y).Liquid == 254 && liquid == 255) { Main.tile.At(this.x, this.y).SetLiquid(255); this.kill++; return; } Liquid.AddWater(this.x, this.y - 1); this.kill = 0; }
public static void DelWater(Func <Int32, Int32, ITile> TileRefs, ISandbox sandbox, int id) { if (TileRefs == null) { TileRefs = TileCollection.ITileAt; } int x = Main.liquid[id].x; int y = Main.liquid[id].y; if (TileRefs(x, y).Liquid < 2) { TileRefs(x, y).SetLiquid(0); if (TileRefs(x - 1, y).Liquid < 2) { TileRefs(x - 1, y).SetLiquid(0); } if (TileRefs(x + 1, y).Liquid < 2) { TileRefs(x + 1, y).SetLiquid(0); } } else if (TileRefs(x, y).Liquid < 20) { if ((TileRefs(x - 1, y).Liquid < TileRefs(x, y).Liquid&& (!TileRefs(x - 1, y).Active || !Main.tileSolid[(int)TileRefs(x - 1, y).Type] || Main.tileSolidTop[(int)TileRefs(x - 1, y).Type])) || (TileRefs(x + 1, y).Liquid < TileRefs(x, y).Liquid&& (!TileRefs(x + 1, y).Active || !Main.tileSolid[(int)TileRefs(x + 1, y).Type] || Main.tileSolidTop[(int)TileRefs(x + 1, y).Type])) || (TileRefs(x, y + 1).Liquid < 255 && (!TileRefs(x, y + 1).Active || !Main.tileSolid[(int)TileRefs(x, y + 1).Type] || Main.tileSolidTop[(int)TileRefs(x, y + 1).Type]))) { TileRefs(x, y).SetLiquid(0); } } else if (TileRefs(x, y + 1).Liquid < 255 && (!TileRefs(x, y + 1).Active || !Main.tileSolid[(int)TileRefs(x, y + 1).Type] || Main.tileSolidTop[(int)TileRefs(x, y + 1).Type]) && !Liquid.stuck) { Main.liquid[id].kill = 0; return; } if (TileRefs(x, y).Liquid < 250 && TileRefs(x, y - 1).Liquid > 0) { Liquid.AddWater(TileRefs, sandbox, x, y - 1); } if (TileRefs(x, y).Liquid == 0) { TileRefs(x, y).SetLava(false); } else { if ((TileRefs(x + 1, y).Liquid > 0 && TileRefs(x + 1, y + 1).Liquid < 250 && !TileRefs(x + 1, y + 1).Active) || (TileRefs(x - 1, y).Liquid > 0 && TileRefs(x - 1, y + 1).Liquid < 250 && !TileRefs(x - 1, y + 1).Active)) { Liquid.AddWater(TileRefs, sandbox, x - 1, y); Liquid.AddWater(TileRefs, sandbox, x + 1, y); } if (TileRefs(x, y).Lava) { Liquid.LavaCheck(TileRefs, sandbox, x, y); for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { if (TileRefs(i, j).Active) { if (TileRefs(i, j).Type == 2 || TileRefs(i, j).Type == 23 || TileRefs(i, j).Type == 109) { TileRefs(i, j).SetType(0); WorldModify.SquareTileFrame(TileRefs, sandbox, i, j, true); NetMessage.SendTileSquare(-1, x, y, 3); } else if (TileRefs(i, j).Type == 60 || TileRefs(i, j).Type == 70) { TileRefs(i, j).SetType(59); WorldModify.SquareTileFrame(TileRefs, sandbox, i, j, true); NetMessage.SendTileSquare(-1, x, y, 3); } } } } } } NetMessage.SendWater(x, y); Liquid.numLiquid--; TileRefs(Main.liquid[id].x, Main.liquid[id].y).SetCheckingLiquid(false); Main.liquid[id].x = Main.liquid[Liquid.numLiquid].x; Main.liquid[id].y = Main.liquid[Liquid.numLiquid].y; Main.liquid[id].kill = Main.liquid[Liquid.numLiquid].kill; if (Main.tileAlch[(int)TileRefs(x, y).Type]) { WorldModify.CheckAlch(TileRefs, sandbox, x, y); } }
public static void UpdateLiquid(Func <Int32, Int32, ITile> TileRefs, ISandbox sandbox) { if (TileRefs == null) { TileRefs = TileCollection.ITileAt; } //{ //Liquid.cycles = 30; // Liquid.maxLiquid = 6000; //} if (!WorldModify.gen) { if (!Liquid.panicMode) { if (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > 4000) { Liquid.panicCounter++; if (Liquid.panicCounter > 1800 || Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > 13500) { Liquid.StartPanic(); } } else { Liquid.panicCounter = 0; } } if (Liquid.panicMode) { int num = 0; while (Liquid.panicY >= 3 && num < 5) { num++; Liquid.QuickWater(TileRefs, sandbox, 0, Liquid.panicY, Liquid.panicY); Liquid.panicY--; if (Liquid.panicY < 3) { ProgramLog.Log(Languages.Water_WaterHasBeenSettled); Liquid.panicCounter = 0; Liquid.panicMode = false; using (var prog = new ProgressLogger(Main.maxTilesX - 2, Languages.Water_PerformingWaterCheck)) WorldModify.WaterCheck(TileRefs, sandbox, prog); for (int i = 0; i < 255; i++) { for (int j = 0; j < Main.maxSectionsX; j++) { for (int k = 0; k < Main.maxSectionsY; k++) { NetPlay.slots[i].tileSection[j, k] = false; } } } } } return; } } Liquid.quickFall = Liquid.quickSettle || Liquid.numLiquid > 2000; Liquid.wetCounter++; int num2 = Liquid.maxLiquid / Liquid.cycles; int num3 = num2 * (Liquid.wetCounter - 1); int num4 = num2 * Liquid.wetCounter; if (Liquid.wetCounter == Liquid.cycles) { num4 = Liquid.numLiquid; } if (num4 > Liquid.numLiquid) { num4 = Liquid.numLiquid; Liquid.wetCounter = Liquid.cycles; } if (Liquid.quickFall) { for (int l = num3; l < num4; l++) { Main.liquid[l].delay = 10; Main.liquid[l].Update(TileRefs, sandbox); TileRefs(Main.liquid[l].x, Main.liquid[l].y).SetSkipLiquid(false); } } else { for (int m = num3; m < num4; m++) { if (!TileRefs(Main.liquid[m].x, Main.liquid[m].y).SkipLiquid) { Main.liquid[m].Update(TileRefs, sandbox); } else { TileRefs(Main.liquid[m].x, Main.liquid[m].y).SetSkipLiquid(false); } } } if (Liquid.wetCounter >= Liquid.cycles) { Liquid.wetCounter = 0; for (int n = Liquid.numLiquid - 1; n >= 0; n--) { if (Main.liquid[n].kill > 3) { Liquid.DelWater(TileRefs, sandbox, n); } } int num5 = Liquid.maxLiquid - (Liquid.maxLiquid - Liquid.numLiquid); if (num5 > LiquidBuffer.numLiquidBuffer) { num5 = LiquidBuffer.numLiquidBuffer; } for (int num6 = 0; num6 < num5; num6++) { TileRefs(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y).SetCheckingLiquid(false); Liquid.AddWater(TileRefs, sandbox, Main.liquidBuffer[0].x, Main.liquidBuffer[0].y); LiquidBuffer.DelBuffer(0); } if (Liquid.numLiquid > 0 && Liquid.numLiquid > Liquid.stuckAmount - 50 && Liquid.numLiquid < Liquid.stuckAmount + 50) { Liquid.stuckCount++; if (Liquid.stuckCount >= 10000) { Liquid.stuck = true; for (int num7 = Liquid.numLiquid - 1; num7 >= 0; num7--) { Liquid.DelWater(TileRefs, sandbox, num7); } Liquid.stuck = false; Liquid.stuckCount = 0; return; } } else { Liquid.stuckCount = 0; Liquid.stuckAmount = Liquid.numLiquid; } } }
public void Update(Func <Int32, Int32, ITile> TileRefs, ISandbox sandbox) { if (TileRefs == null) { TileRefs = TileCollection.ITileAt; } if (TileRefs(this.x, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x, this.y).Type]) { this.kill = 9; return; } byte liquid = TileRefs(this.x, this.y).Liquid; float num = 0f; if (this.y > Main.maxTilesY - 200 && !TileRefs(this.x, this.y).Lava&& TileRefs(this.x, this.y).Liquid > 0) { byte b = 2; if (TileRefs(this.x, this.y).Liquid < b) { b = TileRefs(this.x, this.y).Liquid; } TileRefs(this.x, this.y).AddLiquid(-b); } if (TileRefs(this.x, this.y).Liquid == 0) { this.kill = 9; return; } if (TileRefs(this.x, this.y).Lava) { Liquid.LavaCheck(TileRefs, sandbox, this.x, this.y); if (!Liquid.quickFall) { if (this.delay < 5) { this.delay++; return; } this.delay = 0; } } else { if (TileRefs(this.x - 1, this.y).Lava) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); } if (TileRefs(this.x + 1, this.y).Lava) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } if (TileRefs(this.x, this.y - 1).Lava) { Liquid.AddWater(TileRefs, sandbox, this.x, this.y - 1); } if (TileRefs(this.x, this.y + 1).Lava) { Liquid.AddWater(TileRefs, sandbox, this.x, this.y + 1); } } if ((!TileRefs(this.x, this.y + 1).Active || !Main.tileSolid[(int)TileRefs(this.x, this.y + 1).Type] || Main.tileSolidTop[(int)TileRefs(this.x, this.y + 1).Type]) && (TileRefs(this.x, this.y + 1).Liquid <= 0 || TileRefs(this.x, this.y + 1).Lava == TileRefs(this.x, this.y).Lava) && TileRefs(this.x, this.y + 1).Liquid < 255) { num = (float)(255 - TileRefs(this.x, this.y + 1).Liquid); if (num > (float)TileRefs(this.x, this.y).Liquid) { num = (float)TileRefs(this.x, this.y).Liquid; } TileRefs(this.x, this.y).AddLiquid(-(byte)num); TileRefs(this.x, this.y + 1).AddLiquid((byte)num); TileRefs(this.x, this.y + 1).SetLava(TileRefs(this.x, this.y).Lava); Liquid.AddWater(TileRefs, sandbox, this.x, this.y + 1); TileRefs(this.x, this.y + 1).SetSkipLiquid(true); TileRefs(this.x, this.y).SetSkipLiquid(true); if (TileRefs(this.x, this.y).Liquid > 250) { TileRefs(this.x, this.y).SetLiquid(255); } else { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } } if (TileRefs(this.x, this.y).Liquid > 0) { bool flag = true; bool flag2 = true; bool flag3 = true; bool flag4 = true; if (TileRefs(this.x - 1, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x - 1, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x - 1, this.y).Type]) { flag = false; } else if (TileRefs(this.x - 1, this.y).Liquid > 0 && TileRefs(this.x - 1, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag = false; } else if (TileRefs(this.x - 2, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x - 2, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x - 2, this.y).Type]) { flag3 = false; } else if (TileRefs(this.x - 2, this.y).Liquid == 0) { flag3 = false; } else if (TileRefs(this.x - 2, this.y).Liquid > 0 && TileRefs(this.x - 2, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag3 = false; } if (TileRefs(this.x + 1, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x + 1, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x + 1, this.y).Type]) { flag2 = false; } else if (TileRefs(this.x + 1, this.y).Liquid > 0 && TileRefs(this.x + 1, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag2 = false; } else if (TileRefs(this.x + 2, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x + 2, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x + 2, this.y).Type]) { flag4 = false; } else if (TileRefs(this.x + 2, this.y).Liquid == 0) { flag4 = false; } else if (TileRefs(this.x + 2, this.y).Liquid > 0 && TileRefs(this.x + 2, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag4 = false; } int num2 = 0; if (TileRefs(this.x, this.y).Liquid < 3) { num2 = -1; } if (flag && flag2) { if (flag3 && flag4) { bool flag5 = true; bool flag6 = true; if (TileRefs(this.x - 3, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x - 3, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x - 3, this.y).Type]) { flag5 = false; } else if (TileRefs(this.x - 3, this.y).Liquid == 0) { flag5 = false; } else if (TileRefs(this.x - 3, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag5 = false; } if (TileRefs(this.x + 3, this.y).Active&& Main.tileSolid[(int)TileRefs(this.x + 3, this.y).Type] && !Main.tileSolidTop[(int)TileRefs(this.x + 3, this.y).Type]) { flag6 = false; } else if (TileRefs(this.x + 3, this.y).Liquid == 0) { flag6 = false; } else if (TileRefs(this.x + 3, this.y).Lava != TileRefs(this.x, this.y).Lava) { flag6 = false; } if (flag5 && flag6) { num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x - 2, this.y).Liquid + TileRefs(this.x + 2, this.y).Liquid + TileRefs(this.x - 3, this.y).Liquid + TileRefs(this.x + 3, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 7f)); int num3 = 0; TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } else { num3++; } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } else { num3++; } TileRefs(this.x - 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 2, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 2, this.y); TileRefs(this.x - 2, this.y).SetLiquid((byte)num); } else { num3++; } TileRefs(this.x + 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 2, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 2, this.y); TileRefs(this.x + 2, this.y).SetLiquid((byte)num); } else { num3++; } TileRefs(this.x - 3, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 3, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 3, this.y); TileRefs(this.x - 3, this.y).SetLiquid((byte)num); } else { num3++; } TileRefs(this.x + 3, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 3, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 3, this.y); TileRefs(this.x + 3, this.y).SetLiquid((byte)num); } else { num3++; } if (TileRefs(this.x - 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); } if (TileRefs(this.x + 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } if (TileRefs(this.x - 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 2, this.y); } if (TileRefs(this.x + 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 2, this.y); } if (TileRefs(this.x - 3, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 3, this.y); } if (TileRefs(this.x + 3, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 3, this.y); } if (num3 != 6 || TileRefs(this.x, this.y - 1).Liquid <= 0) { TileRefs(this.x, this.y).SetLiquid((byte)num); } } else { int num4 = 0; num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x - 2, this.y).Liquid + TileRefs(this.x + 2, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 5f)); TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } else { num4++; } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } else { num4++; } TileRefs(this.x - 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 2, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 2, this.y); TileRefs(this.x - 2, this.y).SetLiquid((byte)num); } else { num4++; } TileRefs(this.x + 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 2, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 2, this.y); TileRefs(this.x + 2, this.y).SetLiquid((byte)num); } else { num4++; } if (TileRefs(this.x - 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); } if (TileRefs(this.x + 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } if (TileRefs(this.x - 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 2, this.y); } if (TileRefs(this.x + 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 2, this.y); } if (num4 != 4 || TileRefs(this.x, this.y - 1).Liquid <= 0) { TileRefs(this.x, this.y).SetLiquid((byte)num); } } } else { if (flag3) { num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x - 2, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 4f) + 0.001); TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } TileRefs(this.x - 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { TileRefs(this.x - 2, this.y).SetLiquid((byte)num); Liquid.AddWater(TileRefs, sandbox, this.x - 2, this.y); } TileRefs(this.x, this.y).SetLiquid((byte)num); } else { if (flag4) { num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x + 2, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 4f) + 0.001); TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } TileRefs(this.x + 2, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 2, this.y).Liquid != (byte)num || TileRefs(this.x, this.y).Liquid != (byte)num) { TileRefs(this.x + 2, this.y).SetLiquid((byte)num); Liquid.AddWater(TileRefs, sandbox, this.x + 2, this.y); } TileRefs(this.x, this.y).SetLiquid((byte)num); } else { num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 3f) + 0.001); TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num) { TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } if (TileRefs(this.x, this.y).Liquid != (byte)num || TileRefs(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num) { TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } if (TileRefs(this.x, this.y).Liquid != (byte)num || TileRefs(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } TileRefs(this.x, this.y).SetLiquid((byte)num); } } } } else { if (flag) { num = (float)((int)(TileRefs(this.x - 1, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 2f) + 0.001); if (TileRefs(this.x - 1, this.y).Liquid != (byte)num) { TileRefs(this.x - 1, this.y).SetLiquid((byte)num); } TileRefs(this.x - 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x, this.y).Liquid != (byte)num || TileRefs(this.x - 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x - 1, this.y); } TileRefs(this.x, this.y).SetLiquid((byte)num); } else { if (flag2) { num = (float)((int)(TileRefs(this.x + 1, this.y).Liquid + TileRefs(this.x, this.y).Liquid) + num2); num = (float)Math.Round((double)(num / 2f) + 0.001); if (TileRefs(this.x + 1, this.y).Liquid != (byte)num) { TileRefs(this.x + 1, this.y).SetLiquid((byte)num); } TileRefs(this.x + 1, this.y).SetLava(TileRefs(this.x, this.y).Lava); if (TileRefs(this.x, this.y).Liquid != (byte)num || TileRefs(this.x + 1, this.y).Liquid != (byte)num) { Liquid.AddWater(TileRefs, sandbox, this.x + 1, this.y); } TileRefs(this.x, this.y).SetLiquid((byte)num); } } } } if (TileRefs(this.x, this.y).Liquid == liquid) { this.kill++; return; } if (TileRefs(this.x, this.y).Liquid == 254 && liquid == 255) { TileRefs(this.x, this.y).SetLiquid(255); this.kill++; return; } Liquid.AddWater(TileRefs, sandbox, this.x, this.y - 1); this.kill = 0; }