// Decompiled with JetBrains decompiler // Type: Terraria.Wiring // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using Terraria.Audio; using Terraria.DataStructures; using Terraria.GameContent.Events; using Terraria.GameContent.UI; using Terraria.ID; using Terraria.Localization; namespace Terraria { public static class Wiring { public static bool blockPlayerTeleportationForOneIteration; public static bool running; private static Dictionary _wireSkip; private static DoubleStack _wireList; private static DoubleStack _wireDirectionList; private static Dictionary _toProcess; private static Queue _GatesCurrent; private static Queue _LampsToCheck; private static Queue _GatesNext; private static Dictionary _GatesDone; private static Dictionary _PixelBoxTriggers; private static Vector2[] _teleport; private const int MaxPump = 20; private static int[] _inPumpX; private static int[] _inPumpY; private static int _numInPump; private static int[] _outPumpX; private static int[] _outPumpY; private static int _numOutPump; private const int MaxMech = 1000; private static int[] _mechX; private static int[] _mechY; private static int _numMechs; private static int[] _mechTime; private static int _currentWireColor; private static int CurrentUser = (int) byte.MaxValue; public static void SetCurrentUser(int plr = -1) { if (plr < 0 || plr > (int) byte.MaxValue) plr = (int) byte.MaxValue; if (Main.netMode == 0) plr = Main.myPlayer; Wiring.CurrentUser = plr; } public static void Initialize() { Wiring._wireSkip = new Dictionary(); Wiring._wireList = new DoubleStack(); Wiring._wireDirectionList = new DoubleStack(); Wiring._toProcess = new Dictionary(); Wiring._GatesCurrent = new Queue(); Wiring._GatesNext = new Queue(); Wiring._GatesDone = new Dictionary(); Wiring._LampsToCheck = new Queue(); Wiring._PixelBoxTriggers = new Dictionary(); Wiring._inPumpX = new int[20]; Wiring._inPumpY = new int[20]; Wiring._outPumpX = new int[20]; Wiring._outPumpY = new int[20]; Wiring._teleport = new Vector2[2]; Wiring._mechX = new int[1000]; Wiring._mechY = new int[1000]; Wiring._mechTime = new int[1000]; } public static void SkipWire(int x, int y) => Wiring._wireSkip[new Point16(x, y)] = true; public static void SkipWire(Point16 point) => Wiring._wireSkip[point] = true; public static void UpdateMech() { Wiring.SetCurrentUser(); for (int index1 = Wiring._numMechs - 1; index1 >= 0; --index1) { --Wiring._mechTime[index1]; if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 144) { if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameY == (short) 0) { Wiring._mechTime[index1] = 0; } else { int num = (int) Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameX / 18; switch (num) { case 0: num = 60; break; case 1: num = 180; break; case 2: num = 300; break; case 3: num = 30; break; case 4: num = 15; break; } if (Math.IEEERemainder((double) Wiring._mechTime[index1], (double) num) == 0.0) { Wiring._mechTime[index1] = 18000; Wiring.TripWire(Wiring._mechX[index1], Wiring._mechY[index1], 1, 1); } } } if (Wiring._mechTime[index1] <= 0) { if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 144) { Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameY = (short) 0; NetMessage.SendTileSquare(-1, Wiring._mechX[index1], Wiring._mechY[index1], 1); } if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 411) { Tile tile = Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]]; int num1 = (int) tile.frameX % 36 / 18; int num2 = (int) tile.frameY % 36 / 18; int tileX = Wiring._mechX[index1] - num1; int tileY = Wiring._mechY[index1] - num2; int num3 = 36; if (Main.tile[tileX, tileY].frameX >= (short) 36) num3 = -36; for (int index2 = tileX; index2 < tileX + 2; ++index2) { for (int index3 = tileY; index3 < tileY + 2; ++index3) Main.tile[index2, index3].frameX += (short) num3; } NetMessage.SendTileSquare(-1, tileX, tileY, 2); } for (int index4 = index1; index4 < Wiring._numMechs; ++index4) { Wiring._mechX[index4] = Wiring._mechX[index4 + 1]; Wiring._mechY[index4] = Wiring._mechY[index4 + 1]; Wiring._mechTime[index4] = Wiring._mechTime[index4 + 1]; } --Wiring._numMechs; } } } public static void HitSwitch(int i, int j) { if (!WorldGen.InWorld(i, j) || Main.tile[i, j] == null) return; if (Main.tile[i, j].type == (ushort) 135 || Main.tile[i, j].type == (ushort) 314 || Main.tile[i, j].type == (ushort) 423 || Main.tile[i, j].type == (ushort) 428 || Main.tile[i, j].type == (ushort) 442 || Main.tile[i, j].type == (ushort) 476) { SoundEngine.PlaySound(28, i * 16, j * 16, 0); Wiring.TripWire(i, j, 1, 1); } else if (Main.tile[i, j].type == (ushort) 440) { SoundEngine.PlaySound(28, i * 16 + 16, j * 16 + 16, 0); Wiring.TripWire(i, j, 3, 3); } else if (Main.tile[i, j].type == (ushort) 136) { Main.tile[i, j].frameY = Main.tile[i, j].frameY != (short) 0 ? (short) 0 : (short) 18; SoundEngine.PlaySound(28, i * 16, j * 16, 0); Wiring.TripWire(i, j, 1, 1); } else if (Main.tile[i, j].type == (ushort) 443) Wiring.GeyserTrap(i, j); else if (Main.tile[i, j].type == (ushort) 144) { if (Main.tile[i, j].frameY == (short) 0) { Main.tile[i, j].frameY = (short) 18; if (Main.netMode != 1) Wiring.CheckMech(i, j, 18000); } else Main.tile[i, j].frameY = (short) 0; SoundEngine.PlaySound(28, i * 16, j * 16, 0); } else if (Main.tile[i, j].type == (ushort) 441 || Main.tile[i, j].type == (ushort) 468) { int num1 = (int) Main.tile[i, j].frameX / 18 * -1; int num2 = (int) Main.tile[i, j].frameY / 18 * -1; int num3 = num1 % 4; if (num3 < -1) num3 += 2; int left = num3 + i; int top = num2 + j; SoundEngine.PlaySound(28, i * 16, j * 16, 0); Wiring.TripWire(left, top, 2, 2); } else if (Main.tile[i, j].type == (ushort) 467) { if ((int) Main.tile[i, j].frameX / 36 != 4) return; int num4 = (int) Main.tile[i, j].frameX / 18 * -1; int num5 = (int) Main.tile[i, j].frameY / 18 * -1; int num6 = num4 % 4; if (num6 < -1) num6 += 2; int left = num6 + i; int top = num5 + j; SoundEngine.PlaySound(28, i * 16, j * 16, 0); Wiring.TripWire(left, top, 2, 2); } else { if (Main.tile[i, j].type != (ushort) 132 && Main.tile[i, j].type != (ushort) 411) return; short num7 = 36; int num8 = (int) Main.tile[i, j].frameX / 18 * -1; int num9 = (int) Main.tile[i, j].frameY / 18 * -1; int num10 = num8 % 4; if (num10 < -1) { num10 += 2; num7 = (short) -36; } int index1 = num10 + i; int index2 = num9 + j; if (Main.netMode != 1 && Main.tile[index1, index2].type == (ushort) 411) Wiring.CheckMech(index1, index2, 60); for (int index3 = index1; index3 < index1 + 2; ++index3) { for (int index4 = index2; index4 < index2 + 2; ++index4) { if (Main.tile[index3, index4].type == (ushort) 132 || Main.tile[index3, index4].type == (ushort) 411) Main.tile[index3, index4].frameX += num7; } } WorldGen.TileFrame(index1, index2); SoundEngine.PlaySound(28, i * 16, j * 16, 0); Wiring.TripWire(index1, index2, 2, 2); } } public static void PokeLogicGate(int lampX, int lampY) { if (Main.netMode == 1) return; Wiring._LampsToCheck.Enqueue(new Point16(lampX, lampY)); Wiring.LogicGatePass(); } public static bool Actuate(int i, int j) { Tile tile = Main.tile[i, j]; if (!tile.actuator()) return false; if (tile.inActive()) Wiring.ReActive(i, j); else Wiring.DeActive(i, j); return true; } public static void ActuateForced(int i, int j) { if (Main.tile[i, j].inActive()) Wiring.ReActive(i, j); else Wiring.DeActive(i, j); } public static void MassWireOperation(Point ps, Point pe, Player master) { int wireCount = 0; int actuatorCount = 0; for (int index = 0; index < 58; ++index) { if (master.inventory[index].type == 530) wireCount += master.inventory[index].stack; if (master.inventory[index].type == 849) actuatorCount += master.inventory[index].stack; } int num1 = wireCount; int num2 = actuatorCount; Wiring.MassWireOperationInner(ps, pe, master.Center, master.direction == 1, ref wireCount, ref actuatorCount); int num3 = wireCount; int num4 = num1 - num3; int num5 = num2 - actuatorCount; if (Main.netMode == 2) { NetMessage.SendData(110, master.whoAmI, number: 530, number2: ((float) num4), number3: ((float) master.whoAmI)); NetMessage.SendData(110, master.whoAmI, number: 849, number2: ((float) num5), number3: ((float) master.whoAmI)); } else { for (int index = 0; index < num4; ++index) master.ConsumeItem(530); for (int index = 0; index < num5; ++index) master.ConsumeItem(849); } } private static bool CheckMech(int i, int j, int time) { for (int index = 0; index < Wiring._numMechs; ++index) { if (Wiring._mechX[index] == i && Wiring._mechY[index] == j) return false; } if (Wiring._numMechs >= 999) return false; Wiring._mechX[Wiring._numMechs] = i; Wiring._mechY[Wiring._numMechs] = j; Wiring._mechTime[Wiring._numMechs] = time; ++Wiring._numMechs; return true; } private static void XferWater() { for (int index1 = 0; index1 < Wiring._numInPump; ++index1) { int i1 = Wiring._inPumpX[index1]; int j1 = Wiring._inPumpY[index1]; int liquid1 = (int) Main.tile[i1, j1].liquid; if (liquid1 > 0) { bool lava = Main.tile[i1, j1].lava(); bool honey = Main.tile[i1, j1].honey(); for (int index2 = 0; index2 < Wiring._numOutPump; ++index2) { int i2 = Wiring._outPumpX[index2]; int j2 = Wiring._outPumpY[index2]; int liquid2 = (int) Main.tile[i2, j2].liquid; if (liquid2 < (int) byte.MaxValue) { bool flag1 = Main.tile[i2, j2].lava(); bool flag2 = Main.tile[i2, j2].honey(); if (liquid2 == 0) { flag1 = lava; flag2 = honey; } if (lava == flag1 && honey == flag2) { int num = liquid1; if (num + liquid2 > (int) byte.MaxValue) num = (int) byte.MaxValue - liquid2; Main.tile[i2, j2].liquid += (byte) num; Main.tile[i1, j1].liquid -= (byte) num; liquid1 = (int) Main.tile[i1, j1].liquid; Main.tile[i2, j2].lava(lava); Main.tile[i2, j2].honey(honey); WorldGen.SquareTileFrame(i2, j2); if (Main.tile[i1, j1].liquid == (byte) 0) { Main.tile[i1, j1].lava(false); WorldGen.SquareTileFrame(i1, j1); break; } } } } WorldGen.SquareTileFrame(i1, j1); } } } private static void TripWire(int left, int top, int width, int height) { if (Main.netMode == 1) return; Wiring.running = true; if (Wiring._wireList.Count != 0) Wiring._wireList.Clear(true); if (Wiring._wireDirectionList.Count != 0) Wiring._wireDirectionList.Clear(true); Vector2[] vector2Array1 = new Vector2[8]; int num1 = 0; Point16 back; for (int X = left; X < left + width; ++X) { for (int Y = top; Y < top + height; ++Y) { back = new Point16(X, Y); Tile tile = Main.tile[X, Y]; if (tile != null && tile.wire()) Wiring._wireList.PushBack(back); } } Wiring._teleport[0].X = -1f; Wiring._teleport[0].Y = -1f; Wiring._teleport[1].X = -1f; Wiring._teleport[1].Y = -1f; if (Wiring._wireList.Count > 0) { Wiring._numInPump = 0; Wiring._numOutPump = 0; Wiring.HitWire(Wiring._wireList, 1); if (Wiring._numInPump > 0 && Wiring._numOutPump > 0) Wiring.XferWater(); } Vector2[] vector2Array2 = vector2Array1; int index1 = num1; int num2 = index1 + 1; Vector2 vector2_1 = Wiring._teleport[0]; vector2Array2[index1] = vector2_1; Vector2[] vector2Array3 = vector2Array1; int index2 = num2; int num3 = index2 + 1; Vector2 vector2_2 = Wiring._teleport[1]; vector2Array3[index2] = vector2_2; for (int X = left; X < left + width; ++X) { for (int Y = top; Y < top + height; ++Y) { back = new Point16(X, Y); Tile tile = Main.tile[X, Y]; if (tile != null && tile.wire2()) Wiring._wireList.PushBack(back); } } Wiring._teleport[0].X = -1f; Wiring._teleport[0].Y = -1f; Wiring._teleport[1].X = -1f; Wiring._teleport[1].Y = -1f; if (Wiring._wireList.Count > 0) { Wiring._numInPump = 0; Wiring._numOutPump = 0; Wiring.HitWire(Wiring._wireList, 2); if (Wiring._numInPump > 0 && Wiring._numOutPump > 0) Wiring.XferWater(); } Vector2[] vector2Array4 = vector2Array1; int index3 = num3; int num4 = index3 + 1; Vector2 vector2_3 = Wiring._teleport[0]; vector2Array4[index3] = vector2_3; Vector2[] vector2Array5 = vector2Array1; int index4 = num4; int num5 = index4 + 1; Vector2 vector2_4 = Wiring._teleport[1]; vector2Array5[index4] = vector2_4; Wiring._teleport[0].X = -1f; Wiring._teleport[0].Y = -1f; Wiring._teleport[1].X = -1f; Wiring._teleport[1].Y = -1f; for (int X = left; X < left + width; ++X) { for (int Y = top; Y < top + height; ++Y) { back = new Point16(X, Y); Tile tile = Main.tile[X, Y]; if (tile != null && tile.wire3()) Wiring._wireList.PushBack(back); } } if (Wiring._wireList.Count > 0) { Wiring._numInPump = 0; Wiring._numOutPump = 0; Wiring.HitWire(Wiring._wireList, 3); if (Wiring._numInPump > 0 && Wiring._numOutPump > 0) Wiring.XferWater(); } Vector2[] vector2Array6 = vector2Array1; int index5 = num5; int num6 = index5 + 1; Vector2 vector2_5 = Wiring._teleport[0]; vector2Array6[index5] = vector2_5; Vector2[] vector2Array7 = vector2Array1; int index6 = num6; int num7 = index6 + 1; Vector2 vector2_6 = Wiring._teleport[1]; vector2Array7[index6] = vector2_6; Wiring._teleport[0].X = -1f; Wiring._teleport[0].Y = -1f; Wiring._teleport[1].X = -1f; Wiring._teleport[1].Y = -1f; for (int X = left; X < left + width; ++X) { for (int Y = top; Y < top + height; ++Y) { back = new Point16(X, Y); Tile tile = Main.tile[X, Y]; if (tile != null && tile.wire4()) Wiring._wireList.PushBack(back); } } if (Wiring._wireList.Count > 0) { Wiring._numInPump = 0; Wiring._numOutPump = 0; Wiring.HitWire(Wiring._wireList, 4); if (Wiring._numInPump > 0 && Wiring._numOutPump > 0) Wiring.XferWater(); } Vector2[] vector2Array8 = vector2Array1; int index7 = num7; int num8 = index7 + 1; Vector2 vector2_7 = Wiring._teleport[0]; vector2Array8[index7] = vector2_7; Vector2[] vector2Array9 = vector2Array1; int index8 = num8; int num9 = index8 + 1; Vector2 vector2_8 = Wiring._teleport[1]; vector2Array9[index8] = vector2_8; Wiring.running = false; for (int index9 = 0; index9 < 8; index9 += 2) { Wiring._teleport[0] = vector2Array1[index9]; Wiring._teleport[1] = vector2Array1[index9 + 1]; if ((double) Wiring._teleport[0].X >= 0.0 && (double) Wiring._teleport[1].X >= 0.0) Wiring.Teleport(); } Wiring.PixelBoxPass(); Wiring.LogicGatePass(); } private static void PixelBoxPass() { foreach (KeyValuePair pixelBoxTrigger in Wiring._PixelBoxTriggers) { if (pixelBoxTrigger.Value != (byte) 2) { if (pixelBoxTrigger.Value == (byte) 1) { if (Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX != (short) 0) { Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX = (short) 0; NetMessage.SendTileSquare(-1, (int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y, 1); } } else if (pixelBoxTrigger.Value == (byte) 3 && Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX != (short) 18) { Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX = (short) 18; NetMessage.SendTileSquare(-1, (int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y, 1); } } } Wiring._PixelBoxTriggers.Clear(); } private static void LogicGatePass() { if (Wiring._GatesCurrent.Count != 0) return; Wiring._GatesDone.Clear(); while (Wiring._LampsToCheck.Count > 0) { while (Wiring._LampsToCheck.Count > 0) { Point16 point16 = Wiring._LampsToCheck.Dequeue(); Wiring.CheckLogicGate((int) point16.X, (int) point16.Y); } while (Wiring._GatesNext.Count > 0) { Utils.Swap>(ref Wiring._GatesCurrent, ref Wiring._GatesNext); while (Wiring._GatesCurrent.Count > 0) { Point16 key = Wiring._GatesCurrent.Peek(); bool flag; if (Wiring._GatesDone.TryGetValue(key, out flag) && flag) { Wiring._GatesCurrent.Dequeue(); } else { Wiring._GatesDone.Add(key, true); Wiring.TripWire((int) key.X, (int) key.Y, 1, 1); Wiring._GatesCurrent.Dequeue(); } } } } Wiring._GatesDone.Clear(); if (!Wiring.blockPlayerTeleportationForOneIteration) return; Wiring.blockPlayerTeleportationForOneIteration = false; } private static void CheckLogicGate(int lampX, int lampY) { if (!WorldGen.InWorld(lampX, lampY, 1)) return; for (int index1 = lampY; index1 < Main.maxTilesY; ++index1) { Tile tile1 = Main.tile[lampX, index1]; if (!tile1.active()) break; if (tile1.type == (ushort) 420) { bool flag1; Wiring._GatesDone.TryGetValue(new Point16(lampX, index1), out flag1); int num1 = (int) tile1.frameY / 18; bool flag2 = tile1.frameX == (short) 18; bool flag3 = tile1.frameX == (short) 36; if (num1 < 0) break; int num2 = 0; int num3 = 0; bool flag4 = false; for (int index2 = index1 - 1; index2 > 0; --index2) { Tile tile2 = Main.tile[lampX, index2]; if (tile2.active() && tile2.type == (ushort) 419) { if (tile2.frameX == (short) 36) { flag4 = true; break; } ++num2; num3 += (tile2.frameX == (short) 18).ToInt(); } else break; } bool flag5; switch (num1) { case 0: flag5 = num2 == num3; break; case 1: flag5 = num3 > 0; break; case 2: flag5 = num2 != num3; break; case 3: flag5 = num3 == 0; break; case 4: flag5 = num3 == 1; break; case 5: flag5 = num3 != 1; break; default: return; } bool flag6 = !flag4 & flag3; bool flag7 = false; if (flag4 && Framing.GetTileSafely(lampX, lampY).frameX == (short) 36) flag7 = true; if (!(flag5 != flag2 | flag6 | flag7)) break; int num4 = (int) tile1.frameX % 18 / 18; tile1.frameX = (short) (18 * flag5.ToInt()); if (flag4) tile1.frameX = (short) 36; Wiring.SkipWire(lampX, index1); WorldGen.SquareTileFrame(lampX, index1); NetMessage.SendTileSquare(-1, lampX, index1, 1); bool flag8 = !flag4 | flag7; if (flag7) { if (num3 == 0 || num2 == 0) ; flag8 = (double) Main.rand.NextFloat() < (double) num3 / (double) num2; } if (flag6) flag8 = false; if (!flag8) break; if (!flag1) { Wiring._GatesNext.Enqueue(new Point16(lampX, index1)); break; } Vector2 position = new Vector2((float) lampX, (float) index1) * 16f - new Vector2(10f); Utils.PoofOfSmoke(position); NetMessage.SendData(106, number: ((int) position.X), number2: position.Y); break; } if (tile1.type != (ushort) 419) break; } } private static void HitWire(DoubleStack next, int wireType) { Wiring._wireDirectionList.Clear(true); for (int index = 0; index < next.Count; ++index) { Point16 point16 = next.PopFront(); Wiring.SkipWire(point16); Wiring._toProcess.Add(point16, (byte) 4); next.PushBack(point16); Wiring._wireDirectionList.PushBack((byte) 0); } Wiring._currentWireColor = wireType; while (next.Count > 0) { Point16 key = next.PopFront(); int num1 = (int) Wiring._wireDirectionList.PopFront(); int x = (int) key.X; int y = (int) key.Y; if (!Wiring._wireSkip.ContainsKey(key)) Wiring.HitWireSingle(x, y); for (int index = 0; index < 4; ++index) { int X; int Y; switch (index) { case 0: X = x; Y = y + 1; break; case 1: X = x; Y = y - 1; break; case 2: X = x + 1; Y = y; break; case 3: X = x - 1; Y = y; break; default: X = x; Y = y + 1; break; } if (X >= 2 && X < Main.maxTilesX - 2 && Y >= 2 && Y < Main.maxTilesY - 2) { Tile tile1 = Main.tile[X, Y]; if (tile1 != null) { Tile tile2 = Main.tile[x, y]; if (tile2 != null) { byte num2 = 3; if (tile1.type == (ushort) 424 || tile1.type == (ushort) 445) num2 = (byte) 0; if (tile2.type == (ushort) 424) { switch ((int) tile2.frameX / 18) { case 0: if (index == num1) break; continue; case 1: if (num1 == 0 && index == 3 || num1 == 3 && index == 0 || num1 == 1 && index == 2 || num1 == 2 && index == 1) break; continue; case 2: if (num1 == 0 && index == 2 || num1 == 2 && index == 0 || num1 == 1 && index == 3 || num1 == 3 && index == 1) break; continue; } } if (tile2.type == (ushort) 445) { if (index == num1) { if (Wiring._PixelBoxTriggers.ContainsKey(key)) Wiring._PixelBoxTriggers[key] |= index == 0 | index == 1 ? (byte) 2 : (byte) 1; else Wiring._PixelBoxTriggers[key] = index == 0 | index == 1 ? (byte) 2 : (byte) 1; } else continue; } bool flag; switch (wireType) { case 1: flag = tile1.wire(); break; case 2: flag = tile1.wire2(); break; case 3: flag = tile1.wire3(); break; case 4: flag = tile1.wire4(); break; default: flag = false; break; } if (flag) { Point16 point16 = new Point16(X, Y); byte num3; if (Wiring._toProcess.TryGetValue(point16, out num3)) { --num3; if (num3 == (byte) 0) Wiring._toProcess.Remove(point16); else Wiring._toProcess[point16] = num3; } else { next.PushBack(point16); Wiring._wireDirectionList.PushBack((byte) index); if (num2 > (byte) 0) Wiring._toProcess.Add(point16, num2); } } } } } } } Wiring._wireSkip.Clear(); Wiring._toProcess.Clear(); } private static void HitWireSingle(int i, int j) { Tile tile1 = Main.tile[i, j]; int type = (int) tile1.type; if (tile1.actuator()) Wiring.ActuateForced(i, j); if (!tile1.active()) return; switch (type) { case 144: Wiring.HitSwitch(i, j); WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); break; case 421: if (!tile1.actuator()) { tile1.type = (ushort) 422; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); break; } break; default: if (type == 422 && !tile1.actuator()) { tile1.type = (ushort) 421; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); break; } break; } if (type >= (int) byte.MaxValue && type <= 268) { if (tile1.actuator()) return; if (type >= 262) tile1.type -= (ushort) 7; else tile1.type += (ushort) 7; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); } else { switch (type) { case 130: if (Main.tile[i, j - 1] != null && Main.tile[i, j - 1].active() && (TileID.Sets.BasicChest[(int) Main.tile[i, j - 1].type] || TileID.Sets.BasicChestFake[(int) Main.tile[i, j - 1].type] || Main.tile[i, j - 1].type == (ushort) 88)) break; tile1.type = (ushort) 131; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); break; case 131: tile1.type = (ushort) 130; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); break; case 209: int num1 = (int) tile1.frameX % 72 / 18; int num2 = (int) tile1.frameY % 54 / 18; int num3 = i - num1; int num4 = j - num2; int angle = (int) tile1.frameY / 54; int num5 = (int) tile1.frameX / 72; int num6 = -1; if (num1 == 1 || num1 == 2) num6 = num2; int num7 = 0; if (num1 == 3) num7 = -54; if (num1 == 0) num7 = 54; if (angle >= 8 && num7 > 0) num7 = 0; if (angle == 0 && num7 < 0) num7 = 0; bool flag1 = false; if (num7 != 0) { for (int x = num3; x < num3 + 4; ++x) { for (int y = num4; y < num4 + 3; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameY += (short) num7; } } flag1 = true; } if ((num5 == 3 || num5 == 4) && (num6 == 0 || num6 == 1)) { int num8 = num5 == 3 ? 72 : -72; for (int x = num3; x < num3 + 4; ++x) { for (int y = num4; y < num4 + 3; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameX += (short) num8; } } flag1 = true; } if (flag1) NetMessage.SendTileSquare(-1, num3 + 1, num4 + 1, 4); if (num6 == -1) break; bool flag2 = true; if ((num5 == 3 || num5 == 4) && num6 < 2) flag2 = false; if (!(Wiring.CheckMech(num3, num4, 30) & flag2)) break; WorldGen.ShootFromCannon(num3, num4, angle, num5 + 1, 0, 0.0f, Wiring.CurrentUser); break; case 212: int num9 = (int) tile1.frameX % 54 / 18; int num10 = (int) tile1.frameY % 54 / 18; int i1 = i - num9; int j1 = j - num10; int num11 = (int) tile1.frameX / 54; int num12 = -1; if (num9 == 1) num12 = num10; int num13 = 0; if (num9 == 0) num13 = -54; if (num9 == 2) num13 = 54; if (num11 >= 1 && num13 > 0) num13 = 0; if (num11 == 0 && num13 < 0) num13 = 0; bool flag3 = false; if (num13 != 0) { for (int x = i1; x < i1 + 3; ++x) { for (int y = j1; y < j1 + 3; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameX += (short) num13; } } flag3 = true; } if (flag3) NetMessage.SendTileSquare(-1, i1 + 1, j1 + 1, 4); if (num12 == -1 || !Wiring.CheckMech(i1, j1, 10)) break; double num14 = 12.0 + (double) Main.rand.Next(450) * 0.00999999977648258; float num15 = (float) Main.rand.Next(85, 105); double num16 = (double) Main.rand.Next(-35, 11); int Type1 = 166; int Damage1 = 0; float KnockBack1 = 0.0f; Vector2 vector2_1 = new Vector2((float) ((i1 + 2) * 16 - 8), (float) ((j1 + 2) * 16 - 8)); if ((int) tile1.frameX / 54 == 0) { num15 *= -1f; vector2_1.X -= 12f; } else vector2_1.X += 12f; float num17 = num15; float num18 = (float) num16; double num19 = Math.Sqrt((double) num17 * (double) num17 + (double) num18 * (double) num18); float num20 = (float) (num14 / num19); float SpeedX1 = num17 * num20; float SpeedY1 = num18 * num20; Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX1, SpeedY1, Type1, Damage1, KnockBack1, Wiring.CurrentUser); break; case 215: int num21 = (int) tile1.frameX % 54 / 18; int num22 = (int) tile1.frameY % 36 / 18; int index1 = i - num21; int index2 = j - num22; int num23 = 36; if (Main.tile[index1, index2].frameY >= (short) 36) num23 = -36; for (int x = index1; x < index1 + 3; ++x) { for (int y = index2; y < index2 + 2; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameY += (short) num23; } } NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3); break; case 405: int num24 = (int) tile1.frameX % 54 / 18; int num25 = (int) tile1.frameY % 36 / 18; int index3 = i - num24; int index4 = j - num25; int num26 = 54; if (Main.tile[index3, index4].frameX >= (short) 54) num26 = -54; for (int x = index3; x < index3 + 3; ++x) { for (int y = index4; y < index4 + 2; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameX += (short) num26; } } NetMessage.SendTileSquare(-1, index3 + 1, index4 + 1, 3); break; case 406: int num27 = (int) tile1.frameX % 54 / 18; int num28 = (int) tile1.frameY % 54 / 18; int index5 = i - num27; int index6 = j - num28; int num29 = 54; if (Main.tile[index5, index6].frameY >= (short) 108) num29 = -108; for (int x = index5; x < index5 + 3; ++x) { for (int y = index6; y < index6 + 3; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameY += (short) num29; } } NetMessage.SendTileSquare(-1, index5 + 1, index6 + 1, 3); break; case 411: int num30 = (int) tile1.frameX % 36 / 18; int num31 = (int) tile1.frameY % 36 / 18; int tileX = i - num30; int tileY = j - num31; int num32 = 36; if (Main.tile[tileX, tileY].frameX >= (short) 36) num32 = -36; for (int x = tileX; x < tileX + 2; ++x) { for (int y = tileY; y < tileY + 2; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameX += (short) num32; } } NetMessage.SendTileSquare(-1, tileX, tileY, 2); break; case 419: int num33 = 18; if ((int) tile1.frameX >= num33) num33 = -num33; if (tile1.frameX == (short) 36) num33 = 0; Wiring.SkipWire(i, j); tile1.frameX += (short) num33; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); Wiring._LampsToCheck.Enqueue(new Point16(i, j)); break; case 425: int num34 = (int) tile1.frameX % 36 / 18; int num35 = (int) tile1.frameY % 36 / 18; int i2 = i - num34; int j2 = j - num35; for (int x = i2; x < i2 + 2; ++x) { for (int y = j2; y < j2 + 2; ++y) Wiring.SkipWire(x, y); } if (Main.AnnouncementBoxDisabled) break; Color pink = Color.Pink; int index7 = Sign.ReadSign(i2, j2, false); if (index7 == -1 || Main.sign[index7] == null || string.IsNullOrWhiteSpace(Main.sign[index7].text)) break; if (Main.AnnouncementBoxRange == -1) { if (Main.netMode == 0) { Main.NewTextMultiline(Main.sign[index7].text, c: pink, WidthLimit: 460); break; } if (Main.netMode != 2) break; NetMessage.SendData(107, text: NetworkText.FromLiteral(Main.sign[index7].text), number: ((int) byte.MaxValue), number2: ((float) pink.R), number3: ((float) pink.G), number4: ((float) pink.B), number5: 460); break; } switch (Main.netMode) { case 0: if ((double) Main.player[Main.myPlayer].Distance(new Vector2((float) (i2 * 16 + 16), (float) (j2 * 16 + 16))) > (double) Main.AnnouncementBoxRange) return; Main.NewTextMultiline(Main.sign[index7].text, c: pink, WidthLimit: 460); return; case 2: for (int remoteClient = 0; remoteClient < (int) byte.MaxValue; ++remoteClient) { if (Main.player[remoteClient].active && (double) Main.player[remoteClient].Distance(new Vector2((float) (i2 * 16 + 16), (float) (j2 * 16 + 16))) <= (double) Main.AnnouncementBoxRange) NetMessage.SendData(107, remoteClient, text: NetworkText.FromLiteral(Main.sign[index7].text), number: ((int) byte.MaxValue), number2: ((float) pink.R), number3: ((float) pink.G), number4: ((float) pink.B), number5: 460); } return; default: return; } case 452: int num36 = (int) tile1.frameX % 54 / 18; int num37 = (int) tile1.frameY % 54 / 18; int index8 = i - num36; int index9 = j - num37; int num38 = 54; if (Main.tile[index8, index9].frameX >= (short) 54) num38 = -54; for (int x = index8; x < index8 + 3; ++x) { for (int y = index9; y < index9 + 3; ++y) { Wiring.SkipWire(x, y); Main.tile[x, y].frameX += (short) num38; } } NetMessage.SendTileSquare(-1, index8 + 1, index9 + 1, 3); break; default: if (type == 387 || type == 386) { bool flag4 = type == 387; int num39 = WorldGen.ShiftTrapdoor(i, j, true).ToInt(); if (num39 == 0) num39 = -WorldGen.ShiftTrapdoor(i, j, false).ToInt(); if (num39 == 0) break; NetMessage.SendData(19, number: (3 - flag4.ToInt()), number2: ((float) i), number3: ((float) j), number4: ((float) num39)); break; } if (type == 389 || type == 388) { bool closing = type == 389; WorldGen.ShiftTallGate(i, j, closing); NetMessage.SendData(19, number: (4 + closing.ToInt()), number2: ((float) i), number3: ((float) j)); break; } switch (type) { case 10: int direction = 1; if (Main.rand.Next(2) == 0) direction = -1; if (!WorldGen.OpenDoor(i, j, direction)) { if (!WorldGen.OpenDoor(i, j, -direction)) return; NetMessage.SendData(19, number2: ((float) i), number3: ((float) j), number4: ((float) -direction)); return; } NetMessage.SendData(19, number2: ((float) i), number3: ((float) j), number4: ((float) direction)); return; case 11: if (!WorldGen.CloseDoor(i, j, true)) return; NetMessage.SendData(19, number: 1, number2: ((float) i), number3: ((float) j)); return; case 216: WorldGen.LaunchRocket(i, j); Wiring.SkipWire(i, j); return; default: if (type == 497 || type == 15 && (int) tile1.frameY / 40 == 1 || type == 15 && (int) tile1.frameY / 40 == 20) { int num40 = j - (int) tile1.frameY % 40 / 18; int num41 = i; Wiring.SkipWire(num41, num40); Wiring.SkipWire(num41, num40 + 1); if (!Wiring.CheckMech(num41, num40, 60)) return; Projectile.NewProjectile((float) (num41 * 16 + 8), (float) (num40 * 16 + 12), 0.0f, 0.0f, 733, 0, 0.0f, Main.myPlayer); return; } switch (type) { case 4: if (tile1.frameX < (short) 66) tile1.frameX += (short) 66; else tile1.frameX -= (short) 66; NetMessage.SendTileSquare(-1, i, j, 1); return; case 42: int num42 = (int) tile1.frameY / 18; while (num42 >= 2) num42 -= 2; int y1 = j - num42; short num43 = 18; if (tile1.frameX > (short) 0) num43 = (short) -18; Main.tile[i, y1].frameX += num43; Main.tile[i, y1 + 1].frameX += num43; Wiring.SkipWire(i, y1); Wiring.SkipWire(i, y1 + 1); NetMessage.SendTileSquare(-1, i, j, 3); return; case 93: int num44 = (int) tile1.frameY / 18; while (num44 >= 3) num44 -= 3; int y2 = j - num44; short num45 = 18; if (tile1.frameX > (short) 0) num45 = (short) -18; Main.tile[i, y2].frameX += num45; Main.tile[i, y2 + 1].frameX += num45; Main.tile[i, y2 + 2].frameX += num45; Wiring.SkipWire(i, y2); Wiring.SkipWire(i, y2 + 1); Wiring.SkipWire(i, y2 + 2); NetMessage.SendTileSquare(-1, i, y2 + 1, 3); return; case 149: if (tile1.frameX < (short) 54) tile1.frameX += (short) 54; else tile1.frameX -= (short) 54; NetMessage.SendTileSquare(-1, i, j, 1); return; case 235: int num46 = i - (int) tile1.frameX / 18; if (tile1.wall == (ushort) 87 && (double) j > Main.worldSurface && !NPC.downedPlantBoss) return; if ((double) Wiring._teleport[0].X == -1.0) { Wiring._teleport[0].X = (float) num46; Wiring._teleport[0].Y = (float) j; if (!tile1.halfBrick()) return; Wiring._teleport[0].Y += 0.5f; return; } if ((double) Wiring._teleport[0].X == (double) num46 && (double) Wiring._teleport[0].Y == (double) j) return; Wiring._teleport[1].X = (float) num46; Wiring._teleport[1].Y = (float) j; if (!tile1.halfBrick()) return; Wiring._teleport[1].Y += 0.5f; return; case 244: int num47 = (int) tile1.frameX / 18; while (num47 >= 3) num47 -= 3; int num48 = (int) tile1.frameY / 18; while (num48 >= 3) num48 -= 3; int index10 = i - num47; int index11 = j - num48; int num49 = 54; if (Main.tile[index10, index11].frameX >= (short) 54) num49 = -54; for (int x = index10; x < index10 + 3; ++x) { for (int y3 = index11; y3 < index11 + 2; ++y3) { Wiring.SkipWire(x, y3); Main.tile[x, y3].frameX += (short) num49; } } NetMessage.SendTileSquare(-1, index10 + 1, index11 + 1, 3); return; case 335: int num50 = j - (int) tile1.frameY / 18; int num51 = i - (int) tile1.frameX / 18; Wiring.SkipWire(num51, num50); Wiring.SkipWire(num51, num50 + 1); Wiring.SkipWire(num51 + 1, num50); Wiring.SkipWire(num51 + 1, num50 + 1); if (!Wiring.CheckMech(num51, num50, 30)) return; WorldGen.LaunchRocketSmall(num51, num50); return; case 338: int num52 = j - (int) tile1.frameY / 18; int num53 = i - (int) tile1.frameX / 18; Wiring.SkipWire(num53, num52); Wiring.SkipWire(num53, num52 + 1); if (!Wiring.CheckMech(num53, num52, 30)) return; bool flag5 = false; for (int index12 = 0; index12 < 1000; ++index12) { if (Main.projectile[index12].active && Main.projectile[index12].aiStyle == 73 && (double) Main.projectile[index12].ai[0] == (double) num53 && (double) Main.projectile[index12].ai[1] == (double) num52) { flag5 = true; break; } } if (flag5) return; Projectile.NewProjectile((float) (num53 * 16 + 8), (float) (num52 * 16 + 2), 0.0f, 0.0f, 419 + Main.rand.Next(4), 0, 0.0f, Main.myPlayer, (float) num53, (float) num52); return; case 429: int num54 = (int) Main.tile[i, j].frameX / 18; bool flag6 = num54 % 2 >= 1; bool flag7 = num54 % 4 >= 2; bool flag8 = num54 % 8 >= 4; bool flag9 = num54 % 16 >= 8; bool flag10 = false; short num55 = 0; switch (Wiring._currentWireColor) { case 1: num55 = (short) 18; flag10 = !flag6; break; case 2: num55 = (short) 72; flag10 = !flag8; break; case 3: num55 = (short) 36; flag10 = !flag7; break; case 4: num55 = (short) 144; flag10 = !flag9; break; } if (flag10) tile1.frameX += num55; else tile1.frameX -= num55; NetMessage.SendTileSquare(-1, i, j, 1); return; case 565: int num56 = (int) tile1.frameX / 18; while (num56 >= 2) num56 -= 2; int num57 = (int) tile1.frameY / 18; while (num57 >= 2) num57 -= 2; int index13 = i - num56; int index14 = j - num57; int num58 = 36; if (Main.tile[index13, index14].frameX >= (short) 36) num58 = -36; for (int x = index13; x < index13 + 2; ++x) { for (int y4 = index14; y4 < index14 + 2; ++y4) { Wiring.SkipWire(x, y4); Main.tile[x, y4].frameX += (short) num58; } } NetMessage.SendTileSquare(-1, index13 + 1, index14 + 1, 3); return; default: if (type == 126 || type == 95 || type == 100 || type == 173 || type == 564) { int num59 = (int) tile1.frameY / 18; while (num59 >= 2) num59 -= 2; int index15 = j - num59; int num60 = (int) tile1.frameX / 18; if (num60 > 1) num60 -= 2; int index16 = i - num60; short num61 = 36; if (Main.tile[index16, index15].frameX > (short) 0) num61 = (short) -36; Main.tile[index16, index15].frameX += num61; Main.tile[index16, index15 + 1].frameX += num61; Main.tile[index16 + 1, index15].frameX += num61; Main.tile[index16 + 1, index15 + 1].frameX += num61; Wiring.SkipWire(index16, index15); Wiring.SkipWire(index16 + 1, index15); Wiring.SkipWire(index16, index15 + 1); Wiring.SkipWire(index16 + 1, index15 + 1); NetMessage.SendTileSquare(-1, index16, index15, 3); return; } switch (type) { case 34: int num62 = (int) tile1.frameY / 18; while (num62 >= 3) num62 -= 3; int index17 = j - num62; int num63 = (int) tile1.frameX % 108 / 18; if (num63 > 2) num63 -= 3; int index18 = i - num63; short num64 = 54; if ((int) Main.tile[index18, index17].frameX % 108 > 0) num64 = (short) -54; for (int x = index18; x < index18 + 3; ++x) { for (int y5 = index17; y5 < index17 + 3; ++y5) { Main.tile[x, y5].frameX += num64; Wiring.SkipWire(x, y5); } } NetMessage.SendTileSquare(-1, index18 + 1, index17 + 1, 3); return; case 314: if (!Wiring.CheckMech(i, j, 5)) return; Minecart.FlipSwitchTrack(i, j); return; case 593: int index19 = i; int index20 = j; Wiring.SkipWire(index19, index20); short num65 = Main.tile[index19, index20].frameX != (short) 0 ? (short) -18 : (short) 18; Main.tile[index19, index20].frameX += num65; if (Main.netMode == 2) NetMessage.SendTileRange(-1, index19, index20, 1, 1); int num66 = num65 > (short) 0 ? 4 : 3; Animation.NewTemporaryAnimation(num66, (ushort) 593, index19, index20); NetMessage.SendTemporaryAnimation(-1, num66, 593, index19, index20); return; case 594: int num67 = (int) tile1.frameY / 18; while (num67 >= 2) num67 -= 2; int index21 = j - num67; int num68 = (int) tile1.frameX / 18; if (num68 > 1) num68 -= 2; int index22 = i - num68; Wiring.SkipWire(index22, index21); Wiring.SkipWire(index22, index21 + 1); Wiring.SkipWire(index22 + 1, index21); Wiring.SkipWire(index22 + 1, index21 + 1); short num69 = Main.tile[index22, index21].frameX != (short) 0 ? (short) -36 : (short) 36; for (int index23 = 0; index23 < 2; ++index23) { for (int index24 = 0; index24 < 2; ++index24) Main.tile[index22 + index23, index21 + index24].frameX += num69; } if (Main.netMode == 2) NetMessage.SendTileRange(-1, index22, index21, 2, 2); int num70 = num69 > (short) 0 ? 4 : 3; Animation.NewTemporaryAnimation(num70, (ushort) 594, index22, index21); NetMessage.SendTemporaryAnimation(-1, num70, 594, index22, index21); return; default: if (type == 33 || type == 174 || type == 49 || type == 372) { short num71 = 18; if (tile1.frameX > (short) 0) num71 = (short) -18; tile1.frameX += num71; NetMessage.SendTileSquare(-1, i, j, 3); return; } switch (type) { case 92: int num72 = j - (int) tile1.frameY / 18; short num73 = 18; if (tile1.frameX > (short) 0) num73 = (short) -18; for (int y6 = num72; y6 < num72 + 6; ++y6) { Main.tile[i, y6].frameX += num73; Wiring.SkipWire(i, y6); } NetMessage.SendTileSquare(-1, i, num72 + 3, 7); return; case 137: int num74 = (int) tile1.frameY / 18; Vector2 vector2_2 = Vector2.Zero; float SpeedX2 = 0.0f; float SpeedY2 = 0.0f; int Type2 = 0; int Damage2 = 0; switch (num74) { case 0: case 1: case 2: if (Wiring.CheckMech(i, j, 200)) { int num75 = tile1.frameX == (short) 0 ? -1 : (tile1.frameX == (short) 18 ? 1 : 0); int num76 = tile1.frameX < (short) 36 ? 0 : (tile1.frameX < (short) 72 ? -1 : 1); vector2_2 = new Vector2((float) (i * 16 + 8 + 10 * num75), (float) (j * 16 + 8 + 10 * num76)); float num77 = 3f; if (num74 == 0) { Type2 = 98; Damage2 = 20; num77 = 12f; } if (num74 == 1) { Type2 = 184; Damage2 = 40; num77 = 12f; } if (num74 == 2) { Type2 = 187; Damage2 = 40; num77 = 5f; } SpeedX2 = (float) num75 * num77; SpeedY2 = (float) num76 * num77; break; } break; case 3: if (Wiring.CheckMech(i, j, 300)) { int num78 = 200; for (int index25 = 0; index25 < 1000; ++index25) { if (Main.projectile[index25].active && Main.projectile[index25].type == Type2) { float num79 = (new Vector2((float) (i * 16 + 8), (float) (j * 18 + 8)) - Main.projectile[index25].Center).Length(); if ((double) num79 < 50.0) num78 -= 50; else if ((double) num79 < 100.0) num78 -= 15; else if ((double) num79 < 200.0) num78 -= 10; else if ((double) num79 < 300.0) num78 -= 8; else if ((double) num79 < 400.0) num78 -= 6; else if ((double) num79 < 500.0) num78 -= 5; else if ((double) num79 < 700.0) num78 -= 4; else if ((double) num79 < 900.0) num78 -= 3; else if ((double) num79 < 1200.0) num78 -= 2; else --num78; } } if (num78 > 0) { Type2 = 185; Damage2 = 40; int num80 = 0; int num81 = 0; switch ((int) tile1.frameX / 18) { case 0: case 1: num80 = 0; num81 = 1; break; case 2: num80 = 0; num81 = -1; break; case 3: num80 = -1; num81 = 0; break; case 4: num80 = 1; num81 = 0; break; } SpeedX2 = (float) (4 * num80) + (float) Main.rand.Next((num80 == 1 ? 20 : 0) - 20, 21 - (num80 == -1 ? 20 : 0)) * 0.05f; SpeedY2 = (float) (4 * num81) + (float) Main.rand.Next((num81 == 1 ? 20 : 0) - 20, 21 - (num81 == -1 ? 20 : 0)) * 0.05f; vector2_2 = new Vector2((float) (i * 16 + 8 + 14 * num80), (float) (j * 16 + 8 + 14 * num81)); break; } break; } break; case 4: if (Wiring.CheckMech(i, j, 90)) { int num82 = 0; int num83 = 0; switch ((int) tile1.frameX / 18) { case 0: case 1: num82 = 0; num83 = 1; break; case 2: num82 = 0; num83 = -1; break; case 3: num82 = -1; num83 = 0; break; case 4: num82 = 1; num83 = 0; break; } SpeedX2 = (float) (8 * num82); SpeedY2 = (float) (8 * num83); Damage2 = 60; Type2 = 186; vector2_2 = new Vector2((float) (i * 16 + 8 + 18 * num82), (float) (j * 16 + 8 + 18 * num83)); break; } break; } switch (num74 + 10) { case 0: if (Wiring.CheckMech(i, j, 200)) { int num84 = -1; if (tile1.frameX != (short) 0) num84 = 1; SpeedX2 = (float) (12 * num84); Damage2 = 20; Type2 = 98; vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7)); vector2_2.X += (float) (10 * num84); vector2_2.Y += 2f; break; } break; case 1: if (Wiring.CheckMech(i, j, 200)) { int num85 = -1; if (tile1.frameX != (short) 0) num85 = 1; SpeedX2 = (float) (12 * num85); Damage2 = 40; Type2 = 184; vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7)); vector2_2.X += (float) (10 * num85); vector2_2.Y += 2f; break; } break; case 2: if (Wiring.CheckMech(i, j, 200)) { int num86 = -1; if (tile1.frameX != (short) 0) num86 = 1; SpeedX2 = (float) (5 * num86); Damage2 = 40; Type2 = 187; vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7)); vector2_2.X += (float) (10 * num86); vector2_2.Y += 2f; break; } break; case 3: if (Wiring.CheckMech(i, j, 300)) { Type2 = 185; int num87 = 200; for (int index26 = 0; index26 < 1000; ++index26) { if (Main.projectile[index26].active && Main.projectile[index26].type == Type2) { float num88 = (new Vector2((float) (i * 16 + 8), (float) (j * 18 + 8)) - Main.projectile[index26].Center).Length(); if ((double) num88 < 50.0) num87 -= 50; else if ((double) num88 < 100.0) num87 -= 15; else if ((double) num88 < 200.0) num87 -= 10; else if ((double) num88 < 300.0) num87 -= 8; else if ((double) num88 < 400.0) num87 -= 6; else if ((double) num88 < 500.0) num87 -= 5; else if ((double) num88 < 700.0) num87 -= 4; else if ((double) num88 < 900.0) num87 -= 3; else if ((double) num88 < 1200.0) num87 -= 2; else --num87; } } if (num87 > 0) { SpeedX2 = (float) Main.rand.Next(-20, 21) * 0.05f; SpeedY2 = (float) (4.0 + (double) Main.rand.Next(0, 21) * 0.0500000007450581); Damage2 = 40; vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 16)); vector2_2.Y += 6f; Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, SpeedX2, SpeedY2, Type2, Damage2, 2f, Main.myPlayer); break; } break; } break; case 4: if (Wiring.CheckMech(i, j, 90)) { SpeedX2 = 0.0f; SpeedY2 = 8f; Damage2 = 60; Type2 = 186; vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 16)); vector2_2.Y += 10f; break; } break; } if (Type2 == 0) return; Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, SpeedX2, SpeedY2, Type2, Damage2, 2f, Main.myPlayer); return; case 443: Wiring.GeyserTrap(i, j); return; case 531: int num89 = (int) tile1.frameX / 36; int num90 = (int) tile1.frameY / 54; int i3 = i - ((int) tile1.frameX - num89 * 36) / 18; int j3 = j - ((int) tile1.frameY - num90 * 54) / 18; if (!Wiring.CheckMech(i3, j3, 900)) return; Vector2 vector2_3 = new Vector2((float) (i3 + 1), (float) j3) * 16f; vector2_3.Y += 28f; int Type3 = 99; int Damage3 = 70; float KnockBack2 = 10f; if (Type3 == 0) return; Projectile.NewProjectile((float) (int) vector2_3.X, (float) (int) vector2_3.Y, 0.0f, 0.0f, Type3, Damage3, KnockBack2, Main.myPlayer); return; default: if (type == 139 || type == 35) { WorldGen.SwitchMB(i, j); return; } if (type == 207) { WorldGen.SwitchFountain(i, j); return; } if (type == 410 || type == 480 || type == 509) { WorldGen.SwitchMonolith(i, j); return; } switch (type) { case 141: WorldGen.KillTile(i, j, noItem: true); NetMessage.SendTileSquare(-1, i, j, 1); Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.0f, 108, 500, 10f, Main.myPlayer); return; case 210: WorldGen.ExplodeMine(i, j); return; case 455: BirthdayParty.ToggleManualParty(); return; default: if (type == 142 || type == 143) { int y7 = j - (int) tile1.frameY / 18; int num91 = (int) tile1.frameX / 18; if (num91 > 1) num91 -= 2; int x = i - num91; Wiring.SkipWire(x, y7); Wiring.SkipWire(x, y7 + 1); Wiring.SkipWire(x + 1, y7); Wiring.SkipWire(x + 1, y7 + 1); if (type == 142) { for (int index27 = 0; index27 < 4 && Wiring._numInPump < 19; ++index27) { int num92; int num93; switch (index27) { case 0: num92 = x; num93 = y7 + 1; break; case 1: num92 = x + 1; num93 = y7 + 1; break; case 2: num92 = x; num93 = y7; break; default: num92 = x + 1; num93 = y7; break; } Wiring._inPumpX[Wiring._numInPump] = num92; Wiring._inPumpY[Wiring._numInPump] = num93; ++Wiring._numInPump; } return; } for (int index28 = 0; index28 < 4 && Wiring._numOutPump < 19; ++index28) { int num94; int num95; switch (index28) { case 0: num94 = x; num95 = y7 + 1; break; case 1: num94 = x + 1; num95 = y7 + 1; break; case 2: num94 = x; num95 = y7; break; default: num94 = x + 1; num95 = y7; break; } Wiring._outPumpX[Wiring._numOutPump] = num94; Wiring._outPumpY[Wiring._numOutPump] = num95; ++Wiring._numOutPump; } return; } switch (type) { case 105: int num96 = j - (int) tile1.frameY / 18; int num97 = (int) tile1.frameX / 18; int num98 = 0; while (num97 >= 2) { num97 -= 2; ++num98; } int num99 = i - num97; int num100 = i - (int) tile1.frameX % 36 / 18; int num101 = j - (int) tile1.frameY % 54 / 18; int num102 = (int) tile1.frameY / 54 % 3; int num103 = (int) tile1.frameX / 36 + num102 * 55; Wiring.SkipWire(num100, num101); Wiring.SkipWire(num100, num101 + 1); Wiring.SkipWire(num100, num101 + 2); Wiring.SkipWire(num100 + 1, num101); Wiring.SkipWire(num100 + 1, num101 + 1); Wiring.SkipWire(num100 + 1, num101 + 2); int X = num100 * 16 + 16; int Y = (num101 + 3) * 16; int index29 = -1; int num104 = -1; bool flag11 = true; bool flag12 = false; switch (num103) { case 5: num104 = 73; break; case 13: num104 = 24; break; case 30: num104 = 6; break; case 35: num104 = 2; break; case 51: num104 = (int) Utils.SelectRandom(Main.rand, (short) 299, (short) 538); break; case 52: num104 = 356; break; case 53: num104 = 357; break; case 54: num104 = (int) Utils.SelectRandom(Main.rand, (short) 355, (short) 358); break; case 55: num104 = (int) Utils.SelectRandom(Main.rand, (short) 367, (short) 366); break; case 56: num104 = (int) Utils.SelectRandom(Main.rand, (short) 359, (short) 359, (short) 359, (short) 359, (short) 360); break; case 57: num104 = 377; break; case 58: num104 = 300; break; case 59: num104 = (int) Utils.SelectRandom(Main.rand, (short) 364, (short) 362); break; case 60: num104 = 148; break; case 61: num104 = 361; break; case 62: num104 = (int) Utils.SelectRandom(Main.rand, (short) 487, (short) 486, (short) 485); break; case 63: num104 = 164; flag11 &= NPC.MechSpawn((float) X, (float) Y, 165); break; case 64: num104 = 86; flag12 = true; break; case 65: num104 = 490; break; case 66: num104 = 82; break; case 67: num104 = 449; break; case 68: num104 = 167; break; case 69: num104 = 480; break; case 70: num104 = 48; break; case 71: num104 = (int) Utils.SelectRandom(Main.rand, (short) 170, (short) 180, (short) 171); flag12 = true; break; case 72: num104 = 481; break; case 73: num104 = 482; break; case 74: num104 = 430; break; case 75: num104 = 489; break; case 76: num104 = 611; break; case 77: num104 = 602; break; case 78: num104 = (int) Utils.SelectRandom(Main.rand, (short) 595, (short) 596, (short) 599, (short) 597, (short) 600, (short) 598); break; case 79: num104 = (int) Utils.SelectRandom(Main.rand, (short) 616, (short) 617); break; } if (((num104 == -1 || !Wiring.CheckMech(num100, num101, 30) ? 0 : (NPC.MechSpawn((float) X, (float) Y, num104) ? 1 : 0)) & (flag11 ? 1 : 0)) != 0) { if (!flag12 || !Collision.SolidTiles(num100 - 2, num100 + 3, num101, num101 + 2)) { index29 = NPC.NewNPC(X, Y, num104); } else { Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f); Utils.PoofOfSmoke(position); NetMessage.SendData(106, number: ((int) position.X), number2: position.Y); } } if (index29 <= -1) { switch (num103) { case 2: if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 184) && Item.MechSpawn((float) X, (float) Y, 1735) && Item.MechSpawn((float) X, (float) Y, 1868)) { Item.NewItem(X, Y - 16, 0, 0, 184); break; } break; case 4: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 1)) { index29 = NPC.NewNPC(X, Y - 12, 1); break; } break; case 7: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 49)) { index29 = NPC.NewNPC(X - 4, Y - 6, 49); break; } break; case 8: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 55)) { index29 = NPC.NewNPC(X, Y - 12, 55); break; } break; case 9: int num105 = 46; if (BirthdayParty.PartyIsUp) num105 = 540; if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, num105)) { index29 = NPC.NewNPC(X, Y - 12, num105); break; } break; case 10: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 21)) { index29 = NPC.NewNPC(X, Y, 21); break; } break; case 16: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 42)) { if (!Collision.SolidTiles(num100 - 1, num100 + 1, num101, num101 + 1)) { index29 = NPC.NewNPC(X, Y - 12, 42); break; } Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f); Utils.PoofOfSmoke(position); NetMessage.SendData(106, number: ((int) position.X), number2: position.Y); break; } break; case 17: if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 166)) { Item.NewItem(X, Y - 20, 0, 0, 166); break; } break; case 18: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 67)) { index29 = NPC.NewNPC(X, Y - 12, 67); break; } break; case 23: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 63)) { index29 = NPC.NewNPC(X, Y - 12, 63); break; } break; case 27: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 85)) { index29 = NPC.NewNPC(X - 9, Y, 85); break; } break; case 28: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 74)) { index29 = NPC.NewNPC(X, Y - 12, (int) Utils.SelectRandom(Main.rand, (short) 74, (short) 297, (short) 298)); break; } break; case 34: for (int index30 = 0; index30 < 2; ++index30) { for (int index31 = 0; index31 < 3; ++index31) { Tile tile2 = Main.tile[num100 + index30, num101 + index31]; tile2.type = (ushort) 349; tile2.frameX = (short) (index30 * 18 + 216); tile2.frameY = (short) (index31 * 18); } } Animation.NewTemporaryAnimation(0, (ushort) 349, num100, num101); if (Main.netMode == 2) { NetMessage.SendTileRange(-1, num100, num101, 2, 3); break; } break; case 37: if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 58) && Item.MechSpawn((float) X, (float) Y, 1734) && Item.MechSpawn((float) X, (float) Y, 1867)) { Item.NewItem(X, Y - 16, 0, 0, 58); break; } break; case 40: if (Wiring.CheckMech(num100, num101, 300)) { int length = 50; int[] numArray = new int[length]; int maxValue = 0; for (int index32 = 0; index32 < 200; ++index32) { if (Main.npc[index32].active && (Main.npc[index32].type == 17 || Main.npc[index32].type == 19 || Main.npc[index32].type == 22 || Main.npc[index32].type == 38 || Main.npc[index32].type == 54 || Main.npc[index32].type == 107 || Main.npc[index32].type == 108 || Main.npc[index32].type == 142 || Main.npc[index32].type == 160 || Main.npc[index32].type == 207 || Main.npc[index32].type == 209 || Main.npc[index32].type == 227 || Main.npc[index32].type == 228 || Main.npc[index32].type == 229 || Main.npc[index32].type == 368 || Main.npc[index32].type == 369 || Main.npc[index32].type == 550 || Main.npc[index32].type == 441 || Main.npc[index32].type == 588)) { numArray[maxValue] = index32; ++maxValue; if (maxValue >= length) break; } } if (maxValue > 0) { int number = numArray[Main.rand.Next(maxValue)]; Main.npc[number].position.X = (float) (X - Main.npc[number].width / 2); Main.npc[number].position.Y = (float) (Y - Main.npc[number].height - 1); NetMessage.SendData(23, number: number); break; } break; } break; case 41: if (Wiring.CheckMech(num100, num101, 300)) { int length = 50; int[] numArray = new int[length]; int maxValue = 0; for (int index33 = 0; index33 < 200; ++index33) { if (Main.npc[index33].active && (Main.npc[index33].type == 18 || Main.npc[index33].type == 20 || Main.npc[index33].type == 124 || Main.npc[index33].type == 178 || Main.npc[index33].type == 208 || Main.npc[index33].type == 353 || Main.npc[index33].type == 633)) { numArray[maxValue] = index33; ++maxValue; if (maxValue >= length) break; } } if (maxValue > 0) { int number = numArray[Main.rand.Next(maxValue)]; Main.npc[number].position.X = (float) (X - Main.npc[number].width / 2); Main.npc[number].position.Y = (float) (Y - Main.npc[number].height - 1); NetMessage.SendData(23, number: number); break; } break; } break; case 42: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 58)) { index29 = NPC.NewNPC(X, Y - 12, 58); break; } break; case 50: if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 65)) { if (!Collision.SolidTiles(num100 - 2, num100 + 3, num101, num101 + 2)) { index29 = NPC.NewNPC(X, Y - 12, 65); break; } Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f); Utils.PoofOfSmoke(position); NetMessage.SendData(106, number: ((int) position.X), number2: position.Y); break; } break; } } if (index29 < 0) return; Main.npc[index29].value = 0.0f; Main.npc[index29].npcSlots = 0.0f; Main.npc[index29].SpawnedFromStatue = true; return; case 349: int num106 = (int) tile1.frameY / 18 % 3; int index34 = j - num106; int num107 = (int) tile1.frameX / 18; while (num107 >= 2) num107 -= 2; int index35 = i - num107; Wiring.SkipWire(index35, index34); Wiring.SkipWire(index35, index34 + 1); Wiring.SkipWire(index35, index34 + 2); Wiring.SkipWire(index35 + 1, index34); Wiring.SkipWire(index35 + 1, index34 + 1); Wiring.SkipWire(index35 + 1, index34 + 2); short num108 = Main.tile[index35, index34].frameX != (short) 0 ? (short) -216 : (short) 216; for (int index36 = 0; index36 < 2; ++index36) { for (int index37 = 0; index37 < 3; ++index37) Main.tile[index35 + index36, index34 + index37].frameX += num108; } if (Main.netMode == 2) NetMessage.SendTileRange(-1, index35, index34, 2, 3); Animation.NewTemporaryAnimation(num108 > (short) 0 ? 0 : 1, (ushort) 349, index35, index34); return; case 506: int num109 = (int) tile1.frameY / 18 % 3; int index38 = j - num109; int num110 = (int) tile1.frameX / 18; while (num110 >= 2) num110 -= 2; int index39 = i - num110; Wiring.SkipWire(index39, index38); Wiring.SkipWire(index39, index38 + 1); Wiring.SkipWire(index39, index38 + 2); Wiring.SkipWire(index39 + 1, index38); Wiring.SkipWire(index39 + 1, index38 + 1); Wiring.SkipWire(index39 + 1, index38 + 2); short num111 = Main.tile[index39, index38].frameX >= (short) 72 ? (short) -72 : (short) 72; for (int index40 = 0; index40 < 2; ++index40) { for (int index41 = 0; index41 < 3; ++index41) Main.tile[index39 + index40, index38 + index41].frameX += num111; } if (Main.netMode != 2) return; NetMessage.SendTileRange(-1, index39, index38, 2, 3); return; case 546: tile1.type = (ushort) 557; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); return; case 557: tile1.type = (ushort) 546; WorldGen.SquareTileFrame(i, j); NetMessage.SendTileSquare(-1, i, j, 1); return; default: return; } } } } } } } } } private static void GeyserTrap(int i, int j) { Tile tile = Main.tile[i, j]; if (tile.type != (ushort) 443) return; int num = (int) tile.frameX / 36; int i1 = i - ((int) tile.frameX - num * 36) / 18; int j1 = j; if (!Wiring.CheckMech(i1, j1, 200)) return; Vector2 zero = Vector2.Zero; Vector2 vector2_1 = Vector2.Zero; int Type = 654; int Damage = 20; Vector2 vector2_2; if (num < 2) { vector2_2 = new Vector2((float) (i1 + 1), (float) j1) * 16f; vector2_1 = new Vector2(0.0f, -8f); } else { vector2_2 = new Vector2((float) (i1 + 1), (float) (j1 + 1)) * 16f; vector2_1 = new Vector2(0.0f, 8f); } if (Type == 0) return; Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, vector2_1.X, vector2_1.Y, Type, Damage, 2f, Main.myPlayer); } private static void Teleport() { if ((double) Wiring._teleport[0].X < (double) Wiring._teleport[1].X + 3.0 && (double) Wiring._teleport[0].X > (double) Wiring._teleport[1].X - 3.0 && (double) Wiring._teleport[0].Y > (double) Wiring._teleport[1].Y - 3.0 && (double) Wiring._teleport[0].Y < (double) Wiring._teleport[1].Y) return; Rectangle[] rectangleArray = new Rectangle[2]; rectangleArray[0].X = (int) ((double) Wiring._teleport[0].X * 16.0); rectangleArray[0].Width = 48; rectangleArray[0].Height = 48; rectangleArray[0].Y = (int) ((double) Wiring._teleport[0].Y * 16.0 - (double) rectangleArray[0].Height); rectangleArray[1].X = (int) ((double) Wiring._teleport[1].X * 16.0); rectangleArray[1].Width = 48; rectangleArray[1].Height = 48; rectangleArray[1].Y = (int) ((double) Wiring._teleport[1].Y * 16.0 - (double) rectangleArray[1].Height); for (int index1 = 0; index1 < 2; ++index1) { Vector2 vector2_1 = new Vector2((float) (rectangleArray[1].X - rectangleArray[0].X), (float) (rectangleArray[1].Y - rectangleArray[0].Y)); if (index1 == 1) vector2_1 = new Vector2((float) (rectangleArray[0].X - rectangleArray[1].X), (float) (rectangleArray[0].Y - rectangleArray[1].Y)); if (!Wiring.blockPlayerTeleportationForOneIteration) { for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex) { if (Main.player[playerIndex].active && !Main.player[playerIndex].dead && !Main.player[playerIndex].teleporting && Wiring.TeleporterHitboxIntersects(rectangleArray[index1], Main.player[playerIndex].Hitbox)) { Vector2 vector2_2 = Main.player[playerIndex].position + vector2_1; Main.player[playerIndex].teleporting = true; if (Main.netMode == 2) RemoteClient.CheckSection(playerIndex, vector2_2); Main.player[playerIndex].Teleport(vector2_2); if (Main.netMode == 2) NetMessage.SendData(65, number2: ((float) playerIndex), number3: vector2_2.X, number4: vector2_2.Y); } } } for (int index2 = 0; index2 < 200; ++index2) { if (Main.npc[index2].active && !Main.npc[index2].teleporting && Main.npc[index2].lifeMax > 5 && !Main.npc[index2].boss && !Main.npc[index2].noTileCollide) { int type = Main.npc[index2].type; if (!NPCID.Sets.TeleportationImmune[type] && Wiring.TeleporterHitboxIntersects(rectangleArray[index1], Main.npc[index2].Hitbox)) { Main.npc[index2].teleporting = true; Main.npc[index2].Teleport(Main.npc[index2].position + vector2_1); } } } } for (int index = 0; index < (int) byte.MaxValue; ++index) Main.player[index].teleporting = false; for (int index = 0; index < 200; ++index) Main.npc[index].teleporting = false; } private static bool TeleporterHitboxIntersects(Rectangle teleporter, Rectangle entity) { Rectangle rectangle = Rectangle.Union(teleporter, entity); return rectangle.Width <= teleporter.Width + entity.Width && rectangle.Height <= teleporter.Height + entity.Height; } private static void DeActive(int i, int j) { if (!Main.tile[i, j].active() || Main.tile[i, j].type == (ushort) 226 && (double) j > Main.worldSurface && !NPC.downedPlantBoss) return; bool flag = Main.tileSolid[(int) Main.tile[i, j].type] && !TileID.Sets.NotReallySolid[(int) Main.tile[i, j].type]; switch (Main.tile[i, j].type) { case 314: case 386: case 387: case 388: case 389: case 476: flag = false; break; } if (!flag || Main.tile[i, j - 1].active() && (TileID.Sets.BasicChest[(int) Main.tile[i, j - 1].type] || Main.tile[i, j - 1].type == (ushort) 26 || Main.tile[i, j - 1].type == (ushort) 77 || Main.tile[i, j - 1].type == (ushort) 88 || Main.tile[i, j - 1].type == (ushort) 470 || Main.tile[i, j - 1].type == (ushort) 475 || Main.tile[i, j - 1].type == (ushort) 237 || Main.tile[i, j - 1].type == (ushort) 597 || !WorldGen.CanKillTile(i, j - 1))) return; Main.tile[i, j].inActive(true); WorldGen.SquareTileFrame(i, j, false); if (Main.netMode == 1) return; NetMessage.SendTileSquare(-1, i, j, 1); } private static void ReActive(int i, int j) { Main.tile[i, j].inActive(false); WorldGen.SquareTileFrame(i, j, false); if (Main.netMode == 1) return; NetMessage.SendTileSquare(-1, i, j, 1); } private static void MassWireOperationInner( Point ps, Point pe, Vector2 dropPoint, bool dir, ref int wireCount, ref int actuatorCount) { Math.Abs(ps.X - pe.X); Math.Abs(ps.Y - pe.Y); int num1 = Math.Sign(pe.X - ps.X); int num2 = Math.Sign(pe.Y - ps.Y); WiresUI.Settings.MultiToolMode toolMode = WiresUI.Settings.ToolMode; Point pt = new Point(); bool flag1 = false; Item.StartCachingType(530); Item.StartCachingType(849); bool flag2 = dir; int num3; int num4; int num5; if (flag2) { pt.X = ps.X; num3 = ps.Y; num4 = pe.Y; num5 = num2; } else { pt.Y = ps.Y; num3 = ps.X; num4 = pe.X; num5 = num1; } for (int index = num3; index != num4 && !flag1; index += num5) { if (flag2) pt.Y = index; else pt.X = index; bool? nullable = Wiring.MassWireOperationStep(pt, toolMode, ref wireCount, ref actuatorCount); if (nullable.HasValue && !nullable.Value) { flag1 = true; break; } } int num6; int num7; int num8; if (flag2) { pt.Y = pe.Y; num6 = ps.X; num7 = pe.X; num8 = num1; } else { pt.X = pe.X; num6 = ps.Y; num7 = pe.Y; num8 = num2; } for (int index = num6; index != num7 && !flag1; index += num8) { if (!flag2) pt.Y = index; else pt.X = index; bool? nullable = Wiring.MassWireOperationStep(pt, toolMode, ref wireCount, ref actuatorCount); if (nullable.HasValue && !nullable.Value) { flag1 = true; break; } } if (!flag1) Wiring.MassWireOperationStep(pe, toolMode, ref wireCount, ref actuatorCount); Item.DropCache(dropPoint, Vector2.Zero, 530); Item.DropCache(dropPoint, Vector2.Zero, 849); } private static bool? MassWireOperationStep( Point pt, WiresUI.Settings.MultiToolMode mode, ref int wiresLeftToConsume, ref int actuatorsLeftToConstume) { if (!WorldGen.InWorld(pt.X, pt.Y, 1)) return new bool?(); Tile tile = Main.tile[pt.X, pt.Y]; if (tile == null) return new bool?(); if (!mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter)) { if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Red) && !tile.wire()) { if (wiresLeftToConsume <= 0) return new bool?(false); --wiresLeftToConsume; WorldGen.PlaceWire(pt.X, pt.Y); NetMessage.SendData(17, number: 5, number2: ((float) pt.X), number3: ((float) pt.Y)); } if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Green) && !tile.wire3()) { if (wiresLeftToConsume <= 0) return new bool?(false); --wiresLeftToConsume; WorldGen.PlaceWire3(pt.X, pt.Y); NetMessage.SendData(17, number: 12, number2: ((float) pt.X), number3: ((float) pt.Y)); } if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Blue) && !tile.wire2()) { if (wiresLeftToConsume <= 0) return new bool?(false); --wiresLeftToConsume; WorldGen.PlaceWire2(pt.X, pt.Y); NetMessage.SendData(17, number: 10, number2: ((float) pt.X), number3: ((float) pt.Y)); } if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Yellow) && !tile.wire4()) { if (wiresLeftToConsume <= 0) return new bool?(false); --wiresLeftToConsume; WorldGen.PlaceWire4(pt.X, pt.Y); NetMessage.SendData(17, number: 16, number2: ((float) pt.X), number3: ((float) pt.Y)); } if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator) && !tile.actuator()) { if (actuatorsLeftToConstume <= 0) return new bool?(false); --actuatorsLeftToConstume; WorldGen.PlaceActuator(pt.X, pt.Y); NetMessage.SendData(17, number: 8, number2: ((float) pt.X), number3: ((float) pt.Y)); } } if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter)) { if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Red) && tile.wire() && WorldGen.KillWire(pt.X, pt.Y)) NetMessage.SendData(17, number: 6, number2: ((float) pt.X), number3: ((float) pt.Y)); if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Green) && tile.wire3() && WorldGen.KillWire3(pt.X, pt.Y)) NetMessage.SendData(17, number: 13, number2: ((float) pt.X), number3: ((float) pt.Y)); if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Blue) && tile.wire2() && WorldGen.KillWire2(pt.X, pt.Y)) NetMessage.SendData(17, number: 11, number2: ((float) pt.X), number3: ((float) pt.Y)); if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Yellow) && tile.wire4() && WorldGen.KillWire4(pt.X, pt.Y)) NetMessage.SendData(17, number: 17, number2: ((float) pt.X), number3: ((float) pt.Y)); if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator) && tile.actuator() && WorldGen.KillActuator(pt.X, pt.Y)) NetMessage.SendData(17, number: 9, number2: ((float) pt.X), number3: ((float) pt.Y)); } return new bool?(true); } } }