public override void PreUpdate() { if (quickSwitch) { count++; if (count >= 100) { count = 0; //Main.NewText(Liquid.numLiquid +","+ LiquidBuffer.numLiquidBuffer +","+ Liquid2.numLiquid); } Liquid.cycles = 1; Liquid.panicCounter = 0; Liquid.UpdateLiquid(); while (LiquidBuffer.numLiquidBuffer > 0 && Liquid2.numLiquid != 1000000 - 1) { //Liquid2.AddWater(Main.liquidBuffer[LiquidBuffer.numLiquidBuffer -1].x,Main.liquidBuffer[LiquidBuffer.numLiquidBuffer -1].y); //LiquidBuffer.DelBuffer(LiquidBuffer.numLiquidBuffer -1); Main.tile[Main.liquidBuffer[0].x, Main.liquidBuffer[0].y].checkingLiquid(false); Liquid2.AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y); LiquidBuffer.DelBuffer(0); } Liquid2.cycles = 1; Liquid2.panicCounter = 0; Liquid2.UpdateLiquid(); } }
public new static void UpdateLiquid() { int netMode = Main.netMode; if (Liquid2.quickSettle || Liquid2.numLiquid > 2000) { Liquid2.quickFall = true; } else { Liquid2.quickFall = false; } Liquid2.wetCounter++; int num7 = Liquid2.maxLiquid / Liquid2.cycles; int num2 = num7 * (Liquid2.wetCounter - 1); int num3 = num7 * Liquid2.wetCounter; if (Liquid2.wetCounter == Liquid2.cycles) { num3 = Liquid2.numLiquid; } if (num3 > Liquid2.numLiquid) { num3 = Liquid2.numLiquid; int netMode2 = Main.netMode; Liquid2.wetCounter = Liquid2.cycles; } if (Liquid2.quickFall) { for (int l = num2; l < num3; l++) { QuickLiquidV2.liquid2[l].delay = 10; QuickLiquidV2.liquid2[l].Update(); Main.tile[QuickLiquidV2.liquid2[l].x, QuickLiquidV2.liquid2[l].y].skipLiquid(false); } } else { for (int m = num2; m < num3; m++) { if (!Main.tile[QuickLiquidV2.liquid2[m].x, QuickLiquidV2.liquid2[m].y].skipLiquid()) { QuickLiquidV2.liquid2[m].Update(); } else { Main.tile[QuickLiquidV2.liquid2[m].x, QuickLiquidV2.liquid2[m].y].skipLiquid(false); } } } if (Liquid2.wetCounter >= Liquid2.cycles) { Liquid2.wetCounter = 0; for (int n = Liquid2.numLiquid - 1; n >= 0; n--) { if (QuickLiquidV2.liquid2[n].kill > 4) { Liquid2.DelWater(n); } } int num4 = Liquid2.maxLiquid - (Liquid2.maxLiquid - Liquid2.numLiquid); if (num4 > LiquidBuffer.numLiquidBuffer) { num4 = LiquidBuffer.numLiquidBuffer; } for (int num5 = 0; num5 < num4; num5++) { Main.tile[Main.liquidBuffer[0].x, Main.liquidBuffer[0].y].checkingLiquid(false); Liquid2.AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y); LiquidBuffer.DelBuffer(0); } if (Liquid2.numLiquid > 0 && Liquid2.numLiquid > Liquid2.stuckAmount - 50 && Liquid2.numLiquid < Liquid2.stuckAmount + 50) { Liquid2.stuckCount++; if (Liquid2.stuckCount >= 10000) { Liquid2.stuck = true; for (int num6 = Liquid2.numLiquid - 1; num6 >= 0; num6--) { Liquid2.DelWater(num6); } Liquid2.stuck = false; Liquid2.stuckCount = 0; } } else { Liquid2.stuckCount = 0; Liquid2.stuckAmount = Liquid2.numLiquid; } } /* * if (!Terraria.WorldGen.gen && Main.netMode == 2 && Liquid2._netChangeSet.Count > 0) * { * Utils.Swap<HashSet<int>>(ref Liquid2._netChangeSet, ref Liquid2._swapNetChangeSet); * NetManager.Instance.Broadcast(NetLiquid2Module.Serialize(Liquid2._swapNetChangeSet), -1); * Liquid2._swapNetChangeSet.Clear(); * } */ }
public new static void DelWater(int l) { int num = QuickLiquidV2.liquid2[l].x; int num2 = QuickLiquidV2.liquid2[l].y; Tile tile = Main.tile[num - 1, num2]; Tile tile2 = Main.tile[num + 1, num2]; Tile tile3 = Main.tile[num, num2 + 1]; Tile tile4 = Main.tile[num, num2]; byte b = 2; if (tile4.liquid < b) { tile4.liquid = 0; if (tile.liquid < b) { tile.liquid = 0; } else { Liquid2.AddWater(num - 1, num2); } if (tile2.liquid < b) { tile2.liquid = 0; } else { Liquid2.AddWater(num + 1, num2); } } else if (tile4.liquid < 20) { if ((tile.liquid < tile4.liquid && (!tile.nactive() || !Main.tileSolid[(int)tile.type] || Main.tileSolidTop[(int)tile.type])) || (tile2.liquid < tile4.liquid && (!tile2.nactive() || !Main.tileSolid[(int)tile2.type] || Main.tileSolidTop[(int)tile2.type])) || (tile3.liquid < 255 && (!tile3.nactive() || !Main.tileSolid[(int)tile3.type] || Main.tileSolidTop[(int)tile3.type]))) { tile4.liquid = 0; } } else if (tile3.liquid < 255 && (!tile3.nactive() || !Main.tileSolid[(int)tile3.type] || Main.tileSolidTop[(int)tile3.type]) && !Liquid.stuck) { QuickLiquidV2.liquid2[l].kill = 0; return; } if (tile4.liquid < 250 && Main.tile[num, num2 - 1].liquid > 0) { Liquid2.AddWater(num, num2 - 1); } if (tile4.liquid == 0) { tile4.liquidType(0); } else { if ((tile2.liquid > 0 && Main.tile[num + 1, num2 + 1].liquid < 250 && !Main.tile[num + 1, num2 + 1].active()) || (tile.liquid > 0 && Main.tile[num - 1, num2 + 1].liquid < 250 && !Main.tile[num - 1, num2 + 1].active())) { Liquid2.AddWater(num - 1, num2); Liquid2.AddWater(num + 1, num2); } if (tile4.lava()) { Liquid2.LavaCheck(num, num2); for (int i = num - 1; i <= num + 1; i++) { for (int j = num2 - 1; j <= num2 + 1; j++) { Tile tile5 = Main.tile[i, j]; if (tile5.active()) { if (tile5.type == 2 || tile5.type == 23 || tile5.type == 109 || tile5.type == 199) { tile5.type = 0; Terraria.WorldGen.SquareTileFrame(i, j, true); if (Main.netMode == 2) { NetMessage.SendTileSquare(-1, num, num2, 3, TileChangeType.None); } } else if (tile5.type == 60 || tile5.type == 70) { tile5.type = 59; Terraria.WorldGen.SquareTileFrame(i, j, true); if (Main.netMode == 2) { NetMessage.SendTileSquare(-1, num, num2, 3, TileChangeType.None); } } } } } } else if (tile4.honey()) { Liquid2.HoneyCheck(num, num2); } } if (Main.netMode == 2) { Liquid2.NetSendLiquid(num, num2); } Liquid2.numLiquid--; Main.tile[QuickLiquidV2.liquid2[l].x, QuickLiquidV2.liquid2[l].y].checkingLiquid(false); QuickLiquidV2.liquid2[l].x = QuickLiquidV2.liquid2[Liquid2.numLiquid].x; QuickLiquidV2.liquid2[l].y = QuickLiquidV2.liquid2[Liquid2.numLiquid].y; QuickLiquidV2.liquid2[l].kill = QuickLiquidV2.liquid2[Liquid2.numLiquid].kill; if (Main.tileAlch[(int)tile4.type]) { Terraria.WorldGen.CheckAlch(num, num2); } }