public static void AddWater(Func <Int32, Int32, ITile> TileRefs, ISandbox sandbox, int x, int y) { if (TileRefs == null) { TileRefs = TileCollection.ITileAt; } if (TileRefs(x, y).CheckingLiquid || (x >= Main.maxTilesX - 5 || y >= Main.maxTilesY - 5) || (x < 5 || y < 5) || TileRefs(x, y).Liquid == 0) { return; } if (Liquid.numLiquid >= Liquid.maxLiquid - 1) { LiquidBuffer.AddBuffer(TileRefs, x, y); return; } TileRefs(x, y).SetCheckingLiquid(true); Main.liquid[Liquid.numLiquid].kill = 0; Main.liquid[Liquid.numLiquid].x = x; Main.liquid[Liquid.numLiquid].y = y; Main.liquid[Liquid.numLiquid].delay = 0; TileRefs(x, y).SetSkipLiquid(false); Liquid.numLiquid++; if (Liquid.numLiquid < Liquid.maxLiquid / 3) { NetMessage.SendWater(x, y); } if (TileRefs(x, y).Active&& (Main.tileWaterDeath[(int)TileRefs(x, y).Type] || (TileRefs(x, y).Lava&& Main.tileLavaDeath[(int)TileRefs(x, y).Type]))) { if (TileRefs(x, y).Type == 4 && TileRefs(x, y).FrameY == 176) { return; } if (WorldModify.gen) { TileRefs(x, y).SetActive(false); return; } WorldModify.KillTile(TileRefs, sandbox, x, y); NetMessage.SendData(17, -1, -1, "", 0, (float)x, (float)y); } }
public static void AddWater(int x, int y) { if (Main.tile.At(x, y).CheckingLiquid) { return; } if (x >= Main.maxTilesX - 5 || y >= Main.maxTilesY - 5) { return; } if (x < 5 || y < 5) { return; } if (Main.tile.At(x, y).Liquid == 0) { return; } if (Liquid.numLiquid >= Liquid.maxLiquid - 1) { LiquidBuffer.AddBuffer(x, y); return; } Main.tile.At(x, y).SetCheckingLiquid(true); Main.liquid[Liquid.numLiquid].kill = 0; Main.liquid[Liquid.numLiquid].x = x; Main.liquid[Liquid.numLiquid].y = y; Main.liquid[Liquid.numLiquid].delay = 0; Main.tile.At(x, y).SetSkipLiquid(false); Liquid.numLiquid++; NetMessage.SendWater(x, y); if (Main.tile.At(x, y).Active&& (Main.tileWaterDeath[(int)Main.tile.At(x, y).Type] || (Main.tile.At(x, y).Lava&& Main.tileLavaDeath[(int)Main.tile.At(x, y).Type]))) { if (WorldModify.gen) { Main.tile.At(x, y).SetActive(false); return; } WorldModify.KillTile(x, y, false, false, false); NetMessage.SendData(17, -1, -1, "", 0, (float)x, (float)y); } }
public static void Initialize() { if (Program.properties != null) { stopSpawns = Program.properties.StopNPCSpawning; SpawnsOverride = Program.properties.NPCSpawnsOverride; } NPC.ClearNames(); NPC.SetNames(); //foreach (var buff in new int[] { 20, 24, 31, 39 }) // pvpBuff[buff] = true; foreach (var buff in new int[] { 20, 21, 22, 23, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }) { debuff[buff] = true; } foreach (var i in new int[] { 3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 24, 26, 27, 28, 29, 31, 33, 34, 35, 36, 42, 50, 55, 61, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 110, 113, 114, 125, 126, 128, 129, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 149 }) { tileFrameImportant[i] = true; } foreach (var i in new int[] { 63, 64, 65, 66, 67, 68, 130, 131 }) { tileStone[i] = true; } foreach (var i in new int[] { 0, 1, 2, 6, 7, 8, 9, 10, 22, 23, 25, 30, 32, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 52, 53, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 70, 75, 76, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 130, 131, 137, 138, 140, 145, 146, 147, 148 }) { tileBlockLight[i] = true; } foreach (var i in new int[] { 0, 1, 2, 6, 7, 8, 9, 10, 19, 22, 23, 25, 30, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 53, 54, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 70, 75, 76, 107, 108, 109, 111, 112, 116, 117, 118, 119, 120, 121, 122, 123, 127, 130, 137, 138, 140, 145, 146, 147, 148 }) { tileSolid[i] = true; } foreach (var i in new int[] { 1, 6, 7, 8, 9, 22, 25, 30, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 53, 56, 107, 108, 111, 112, 116, 117, 118, 119, 120, 121, 122, 123, 140, 145, 146, 147, 148 }) { tileMergeDirt[i] = true; } foreach (var i in new int[] { 3, 24, 28, 32, 51, 52, 61, 62, 69, 71, 73, 74, 82, 83, 84, 110, 113, 115 }) { tileCut[i] = true; } foreach (var i in new int[] { 3, 4, 24, 32, 50, 61, 69, 73, 74, 82, 83, 84, 110, 113 }) { tileNoFail[i] = true; } foreach (var i in new int[] { 1, 4, 5, 6, 10, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31 }) { wallHouse[i] = true; } foreach (var i in new int[] { 82, 83, 84 }) { tileAlch[i] = true; } foreach (var i in new int[] { 3, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 27, 28, 29, 32, 33, 34, 35, 36, 42, 49, 50, 52, 55, 61, 62, 69, 71, 72, 73, 74, 79, 80, 81, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 110, 113, 115, 125, 126 }) { tileLavaDeath[i] = true; } foreach (var i in new int[] { 3, 4, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 27, 50, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 110, 114 }) { tileNoAttach[i] = true; } foreach (var i in new int[] { 41, 43, 44 }) { tileDungeon[i] = true; } foreach (var i in new int[] { 14, 18, 19, 87, 88, 101, 114 }) { tileTable[i] = true; } foreach (var i in new int[] { 4, 51, 93, 98 }) { tileWaterDeath[i] = true; } foreach (var i in new int[] { 8, 12 }) { tileShine[i] = 1000; } foreach (var i in new int[] { 9 }) { tileShine[i] = 1050; } foreach (var i in new int[] { 7 }) { tileShine[i] = 1100; } foreach (var i in new int[] { 6, 22 }) { tileShine[i] = 1150; } foreach (var i in new int[] { 21 }) { tileShine[i] = 1200; } foreach (var i in new int[] { 122 }) { tileShine[i] = 1800; } foreach (var i in new int[] { 121 }) { tileShine[i] = 1850; } foreach (var i in new int[] { 45 }) { tileShine[i] = 1900; } foreach (var i in new int[] { 46 }) { tileShine[i] = 2000; } foreach (var i in new int[] { 47 }) { tileShine[i] = 2100; } foreach (var i in new int[] { 63, 64, 65, 66, 67, 68, 108 }) { tileShine[i] = 900; } foreach (var i in new int[] { 111 }) { tileShine[i] = 850; } foreach (var i in new int[] { 107 }) { tileShine[i] = 950; } foreach (var i in new int[] { 129 }) { tileShine[i] = 300; } foreach (var i in new int[] { 109, 110, 117, 116 }) { tileShine[i] = 9000; } foreach (var i in new int[] { 118 }) { tileShine[i] = 8000; } foreach (var i in new int[] { 125 }) { tileShine[i] = 600; } foreach (var i in new int[] { 14, 16, 18, 19, 87, 88, 101, 114 }) { tileSolidTop[i] = true; } for (int l = 0; l < Item.MAX_ITEMS + 1; l++) { item[l] = new Item(); } for (int m = 0; m < NPC.MAX_NPCS + 1; m++) { npcs[m] = new NPC(); npcs[m].whoAmI = m; } for (int i = 0; i < MAX_PLAYERS + 1; i++) { players[i] = new Player(); } for (int num2 = 0; num2 < 1001; num2++) { projectile[num2] = new Projectile(); } for (int num10 = 0; num10 < Liquid.resLiquid; num10++) { liquid[num10] = new Liquid(); } for (int num11 = 0; num11 < 10000; num11++) { liquidBuffer[num11] = new LiquidBuffer(); } teamColor[0] = new Color(255, 255, 255); teamColor[1] = new Color(230, 40, 20); teamColor[2] = new Color(20, 200, 30); teamColor[3] = new Color(75, 90, 255); teamColor[4] = new Color(200, 180, 0); NetPlay.Init(); }
public static void Initialize() { if (Program.properties != null) { stopSpawns = Program.properties.StopNPCSpawning; SpawnsOverride = Program.properties.NPCSpawnsOverride; } NPC.ClearNames(); NPC.SetNames(); //foreach (var buff in new int[] { 20, 24, 31, 39 }) // pvpBuff[buff] = true; foreach (var buff in new int[] { 20, 21, 22, 23, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }) debuff[buff] = true; foreach (var i in new int[] { 3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 24, 26, 27, 28, 29, 31, 33, 34, 35, 36, 42, 50, 55, 61, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 110, 113, 114, 125, 126, 128, 129, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 149 }) tileFrameImportant[i] = true; foreach (var i in new int[] { 63, 64, 65, 66, 67, 68, 130, 131 }) tileStone[i] = true; foreach (var i in new int[] { 0, 1, 2, 6, 7, 8, 9, 10, 22, 23, 25, 30, 32, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 52, 53, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 70, 75, 76, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 130, 131, 137, 138, 140, 145, 146, 147, 148 }) tileBlockLight[i] = true; foreach (var i in new int[] { 0, 1, 2, 6, 7, 8, 9, 10, 19, 22, 23, 25, 30, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 53, 54, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 70, 75, 76, 107, 108, 109, 111, 112, 116, 117, 118, 119, 120, 121, 122, 123, 127, 130, 137, 138, 140, 145, 146, 147, 148 }) tileSolid[i] = true; foreach (var i in new int[] { 1, 6, 7, 8, 9, 22, 25, 30, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 53, 56, 107, 108, 111, 112, 116, 117, 118, 119, 120, 121, 122, 123, 140, 145, 146, 147, 148 }) tileMergeDirt[i] = true; foreach (var i in new int[] { 3, 24, 28, 32, 51, 52, 61, 62, 69, 71, 73, 74, 82, 83, 84, 110, 113, 115 }) tileCut[i] = true; foreach (var i in new int[] { 3, 4, 24, 32, 50, 61, 69, 73, 74, 82, 83, 84, 110, 113 }) tileNoFail[i] = true; foreach (var i in new int[] { 1, 4, 5, 6, 10, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31 }) wallHouse[i] = true; foreach (var i in new int[] { 82, 83, 84 }) tileAlch[i] = true; foreach (var i in new int[] { 3, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 27, 28, 29, 32, 33, 34, 35, 36, 42, 49, 50, 52, 55, 61, 62, 69, 71, 72, 73, 74, 79, 80, 81, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 110, 113, 115, 125, 126 }) tileLavaDeath[i] = true; foreach (var i in new int[] { 3, 4, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 27, 50, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 110, 114 }) tileNoAttach[i] = true; foreach (var i in new int[] { 41, 43, 44 }) tileDungeon[i] = true; foreach (var i in new int[] { 14, 18, 19, 87, 88, 101, 114 }) tileTable[i] = true; foreach (var i in new int[] { 4, 51, 93, 98 }) tileWaterDeath[i] = true; foreach (var i in new int[] { 8, 12 }) tileShine[i] = 1000; foreach (var i in new int[] { 9 }) tileShine[i] = 1050; foreach (var i in new int[] { 7 }) tileShine[i] = 1100; foreach (var i in new int[] { 6, 22 }) tileShine[i] = 1150; foreach (var i in new int[] { 21 }) tileShine[i] = 1200; foreach (var i in new int[] { 122 }) tileShine[i] = 1800; foreach (var i in new int[] { 121 }) tileShine[i] = 1850; foreach (var i in new int[] { 45 }) tileShine[i] = 1900; foreach (var i in new int[] { 46 }) tileShine[i] = 2000; foreach (var i in new int[] { 47 }) tileShine[i] = 2100; foreach (var i in new int[] { 63, 64, 65, 66, 67, 68, 108 }) tileShine[i] = 900; foreach (var i in new int[] { 111 }) tileShine[i] = 850; foreach (var i in new int[] { 107 }) tileShine[i] = 950; foreach (var i in new int[] { 129 }) tileShine[i] = 300; foreach (var i in new int[] { 109, 110, 117, 116 }) tileShine[i] = 9000; foreach (var i in new int[] { 118 }) tileShine[i] = 8000; foreach (var i in new int[] { 125 }) tileShine[i] = 600; foreach (var i in new int[] { 14, 16, 18, 19, 87, 88, 101, 114 }) tileSolidTop[i] = true; for (int l = 0; l < Item.MAX_ITEMS + 1; l++) item[l] = new Item(); for (int m = 0; m < NPC.MAX_NPCS + 1; m++) { npcs[m] = new NPC(); npcs[m].whoAmI = m; } for (int i = 0; i < MAX_PLAYERS + 1; i++) players[i] = new Player(); for (int num2 = 0; num2 < 1001; num2++) projectile[num2] = new Projectile(); for (int num10 = 0; num10 < Liquid.resLiquid; num10++) liquid[num10] = new Liquid(); for (int num11 = 0; num11 < 10000; num11++) liquidBuffer[num11] = new LiquidBuffer(); teamColor[0] = new Color(255, 255, 255); teamColor[1] = new Color(230, 40, 20); teamColor[2] = new Color(20, 200, 30); teamColor[3] = new Color(75, 90, 255); teamColor[4] = new Color(200, 180, 0); NetPlay.Init(); }
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 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; } } }