Terraria.Wiring.HitWireSingle C# (CSharp) Method

HitWireSingle() private static method

private static HitWireSingle ( int i, int j ) : void
i int
j int
return void
        private static void HitWireSingle(int i, int j)
        {
            Tile tile1 = Main.tile[i, j];
            int num1 = (int)tile1.type;
            if (tile1.active() && num1 >= (int)byte.MaxValue && num1 <= 268)
            {
                if (num1 >= 262)
                    tile1.type -= (ushort)7;
                else
                    tile1.type += (ushort)7;
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            if (tile1.k_HasWireFlags(k_WireFlags.WIRE_ACTUATOR) && (num1 != 226 || (double)j <= Main.worldSurface || NPC.downedPlantBoss))
            {
                if (tile1.inActive())
                    Wiring.ReActive(i, j);
                else
                    Wiring.DeActive(i, j);
            }
            if (!tile1.active())
                return;
            if (num1 == 144)
            {
                Wiring.HitSwitch(i, j);
                WorldGen.SquareTileFrame(i, j, true);
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            else if (num1 == 406)
            {
                int num2 = (int)tile1.frameX % 54 / 18;
                int num3 = (int)tile1.frameY % 54 / 18;
                int index1 = i - num2;
                int index2 = j - num3;
                int num4 = 54;
                if ((int)Main.tile[index1, index2].frameY >= 108)
                    num4 = -108;
                for (int x = index1; x < index1 + 3; ++x)
                {
                    for (int y = index2; y < index2 + 3; ++y)
                    {
                        Wiring.SkipWire(x, y);
                        Main.tile[x, y].frameY = (short)((int)Main.tile[x, y].frameY + num4);
                    }
                }
                NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3);
            }
            else if (num1 == 411)
            {
                int num2 = (int)tile1.frameX % 36 / 18;
                int num3 = (int)tile1.frameY % 36 / 18;
                int tileX = i - num2;
                int tileY = j - num3;
                int num4 = 36;
                if ((int)Main.tile[tileX, tileY].frameX >= 36)
                    num4 = -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)((int)Main.tile[x, y].frameX + num4);
                    }
                }
                NetMessage.SendTileSquare(-1, tileX, tileY, 2);
            }
            else if (num1 == 405)
            {
                int num2 = (int)tile1.frameX % 54 / 18;
                int num3 = (int)tile1.frameY % 36 / 18;
                int index1 = i - num2;
                int index2 = j - num3;
                int num4 = 54;
                if ((int)Main.tile[index1, index2].frameX >= 54)
                    num4 = -54;
                for (int x = index1; x < index1 + 3; ++x)
                {
                    for (int y = index2; y < index2 + 2; ++y)
                    {
                        Wiring.SkipWire(x, y);
                        Main.tile[x, y].frameX = (short)((int)Main.tile[x, y].frameX + num4);
                    }
                }
                NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3);
            }
            else if (num1 == 215)
            {
                int num2 = (int)tile1.frameX % 54 / 18;
                int num3 = (int)tile1.frameY % 36 / 18;
                int index1 = i - num2;
                int index2 = j - num3;
                int num4 = 36;
                if ((int)Main.tile[index1, index2].frameY >= 36)
                    num4 = -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)((int)Main.tile[x, y].frameY + num4);
                    }
                }
                NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3);
            }
            else if (num1 == 130)
            {
                if (Main.tile[i, j - 1] != null && Main.tile[i, j - 1].active() && ((int)Main.tile[i, j - 1].type == 21 || (int)Main.tile[i, j - 1].type == 88))
                    return;
                tile1.type = (ushort)131;
                WorldGen.SquareTileFrame(i, j, true);
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            else if (num1 == 131)
            {
                tile1.type = (ushort)130;
                WorldGen.SquareTileFrame(i, j, true);
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            else if (num1 == 387 || num1 == 386)
            {
                bool flag = num1 == 387;
                int num2 = Utils.ToInt(WorldGen.ShiftTrapdoor(i, j, true, -1));
                if (num2 == 0)
                    num2 = -Utils.ToInt(WorldGen.ShiftTrapdoor(i, j, false, -1));
                if (num2 == 0)
                    return;
                NetMessage.SendData(19, -1, -1, "", 2 + Utils.ToInt(flag), (float)i, (float)j, (float)num2, 0, 0, 0);
            }
            else if (num1 == 389 || num1 == 388)
            {
                bool closing = num1 == 389;
                WorldGen.ShiftTallGate(i, j, closing);
                NetMessage.SendData(19, -1, -1, "", 4 + Utils.ToInt(closing), (float)i, (float)j, 0.0f, 0, 0, 0);
            }
            else if (num1 == 11)
            {
                if (!WorldGen.CloseDoor(i, j, true))
                    return;
                NetMessage.SendData(19, -1, -1, "", 1, (float)i, (float)j, 0.0f, 0, 0, 0);
            }
            else if (num1 == 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, -1, -1, "", 0, (float)i, (float)j, (float)-direction, 0, 0, 0);
                }
                else
                    NetMessage.SendData(19, -1, -1, "", 0, (float)i, (float)j, (float)direction, 0, 0, 0);
            }
            else if (num1 == 216)
            {
                WorldGen.LaunchRocket(i, j);
                Wiring.SkipWire(i, j);
            }
            else if (num1 == 335)
            {
                int num2 = j - (int)tile1.frameY / 18;
                int num3 = i - (int)tile1.frameX / 18;
                Wiring.SkipWire(num3, num2);
                Wiring.SkipWire(num3, num2 + 1);
                Wiring.SkipWire(num3 + 1, num2);
                Wiring.SkipWire(num3 + 1, num2 + 1);
                if (!Wiring.CheckMech(num3, num2, 30))
                    return;
                WorldGen.LaunchRocketSmall(num3, num2);
            }
            else if (num1 == 338)
            {
                int num2 = j - (int)tile1.frameY / 18;
                int num3 = i - (int)tile1.frameX / 18;
                Wiring.SkipWire(num3, num2);
                Wiring.SkipWire(num3, num2 + 1);
                if (!Wiring.CheckMech(num3, num2, 30))
                    return;
                bool flag = false;
                for (int index = 0; index < 1000; ++index)
                {
                    if (Main.projectile[index].active && Main.projectile[index].aiStyle == 73 && ((double)Main.projectile[index].ai[0] == (double)num3 && (double)Main.projectile[index].ai[1] == (double)num2))
                    {
                        flag = true;
                        break;
                    }
                }
                if (flag)
                    return;
                Projectile.NewProjectile((float)(num3 * 16 + 8), (float)(num2 * 16 + 2), 0.0f, 0.0f, 419 + Main.rand.Next(4), 0, 0.0f, Main.myPlayer, (float)num3, (float)num2);
            }
            else if (num1 == 235)
            {
                int num2 = i - (int)tile1.frameX / 18;
                if ((int)tile1.wall == 87 && (double)j > Main.worldSurface && !NPC.downedPlantBoss)
                    return;
                if ((double)Wiring._teleport[0].X == -1.0)
                {
                    Wiring._teleport[0].X = (float)num2;
                    Wiring._teleport[0].Y = (float)j;
                    if (!tile1.halfBrick())
                        return;
                    Wiring._teleport[0].Y += 0.5f;
                }
                else
                {
                    if ((double)Wiring._teleport[0].X == (double)num2 && (double)Wiring._teleport[0].Y == (double)j)
                        return;
                    Wiring._teleport[1].X = (float)num2;
                    Wiring._teleport[1].Y = (float)j;
                    if (!tile1.halfBrick())
                        return;
                    Wiring._teleport[1].Y += 0.5f;
                }
            }
            else if (num1 == 4)
            {
                if ((int)tile1.frameX < 66)
                    tile1.frameX += (short)66;
                else
                    tile1.frameX -= (short)66;
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            else if (num1 == 149)
            {
                if ((int)tile1.frameX < 54)
                    tile1.frameX += (short)54;
                else
                    tile1.frameX -= (short)54;
                NetMessage.SendTileSquare(-1, i, j, 1);
            }
            else if (num1 == 244)
            {
                int num2 = (int)tile1.frameX / 18;
                while (num2 >= 3)
                    num2 -= 3;
                int num3 = (int)tile1.frameY / 18;
                while (num3 >= 3)
                    num3 -= 3;
                int index1 = i - num2;
                int index2 = j - num3;
                int num4 = 54;
                if ((int)Main.tile[index1, index2].frameX >= 54)
                    num4 = -54;
                for (int x = index1; x < index1 + 3; ++x)
                {
                    for (int y = index2; y < index2 + 2; ++y)
                    {
                        Wiring.SkipWire(x, y);
                        Main.tile[x, y].frameX = (short)((int)Main.tile[x, y].frameX + num4);
                    }
                }
                NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3);
            }
            else if (num1 == 42)
            {
                int num2 = (int)tile1.frameY / 18;
                while (num2 >= 2)
                    num2 -= 2;
                int y = j - num2;
                short num3 = (short)18;
                if ((int)tile1.frameX > 0)
                    num3 = (short)-18;
                Main.tile[i, y].frameX += num3;
                Main.tile[i, y + 1].frameX += num3;
                Wiring.SkipWire(i, y);
                Wiring.SkipWire(i, y + 1);
                NetMessage.SendTileSquare(-1, i, j, 2);
            }
            else if (num1 == 93)
            {
                int num2 = (int)tile1.frameY / 18;
                while (num2 >= 3)
                    num2 -= 3;
                int y = j - num2;
                short num3 = (short)18;
                if ((int)tile1.frameX > 0)
                    num3 = (short)-18;
                Main.tile[i, y].frameX += num3;
                Main.tile[i, y + 1].frameX += num3;
                Main.tile[i, y + 2].frameX += num3;
                Wiring.SkipWire(i, y);
                Wiring.SkipWire(i, y + 1);
                Wiring.SkipWire(i, y + 2);
                NetMessage.SendTileSquare(-1, i, y + 1, 3);
            }
            else if (num1 == 126 || num1 == 95 || (num1 == 100 || num1 == 173))
            {
                int num2 = (int)tile1.frameY / 18;
                while (num2 >= 2)
                    num2 -= 2;
                int index1 = j - num2;
                int num3 = (int)tile1.frameX / 18;
                if (num3 > 1)
                    num3 -= 2;
                int index2 = i - num3;
                short num4 = (short)36;
                if ((int)Main.tile[index2, index1].frameX > 0)
                    num4 = (short)-36;
                Main.tile[index2, index1].frameX += num4;
                Main.tile[index2, index1 + 1].frameX += num4;
                Main.tile[index2 + 1, index1].frameX += num4;
                Main.tile[index2 + 1, index1 + 1].frameX += num4;
                Wiring.SkipWire(index2, index1);
                Wiring.SkipWire(index2 + 1, index1);
                Wiring.SkipWire(index2, index1 + 1);
                Wiring.SkipWire(index2 + 1, index1 + 1);
                NetMessage.SendTileSquare(-1, index2, index1, 3);
            }
            else if (num1 == 34)
            {
                int num2 = (int)tile1.frameY / 18;
                while (num2 >= 3)
                    num2 -= 3;
                int index1 = j - num2;
                int num3 = (int)tile1.frameX / 18;
                if (num3 > 2)
                    num3 -= 3;
                int index2 = i - num3;
                short num4 = (short)54;
                if ((int)Main.tile[index2, index1].frameX > 0)
                    num4 = (short)-54;
                for (int x = index2; x < index2 + 3; ++x)
                {
                    for (int y = index1; y < index1 + 3; ++y)
                    {
                        Main.tile[x, y].frameX += num4;
                        Wiring.SkipWire(x, y);
                    }
                }
                NetMessage.SendTileSquare(-1, index2 + 1, index1 + 1, 3);
            }
            else if (num1 == 314)
            {
                if (!Wiring.CheckMech(i, j, 5))
                    return;
                Minecart.FlipSwitchTrack(i, j);
            }
            else if (num1 == 33 || num1 == 174)
            {
                short num2 = (short)18;
                if ((int)tile1.frameX > 0)
                    num2 = (short)-18;
                tile1.frameX += num2;
                NetMessage.SendTileSquare(-1, i, j, 3);
            }
            else if (num1 == 92)
            {
                int num2 = j - (int)tile1.frameY / 18;
                short num3 = (short)18;
                if ((int)tile1.frameX > 0)
                    num3 = (short)-18;
                for (int y = num2; y < num2 + 6; ++y)
                {
                    Main.tile[i, y].frameX += num3;
                    Wiring.SkipWire(i, y);
                }
                NetMessage.SendTileSquare(-1, i, num2 + 3, 7);
            }
            else if (num1 == 137)
            {
                int num2 = (int)tile1.frameY / 18;
                Vector2 vector2 = Vector2.Zero;
                float SpeedX = 0.0f;
                float SpeedY = 0.0f;
                int Type = 0;
                int Damage = 0;
                switch (num2)
                {
                    case 0:
                        if (Wiring.CheckMech(i, j, 200))
                        {
                            int num3 = -1;
                            if ((int)tile1.frameX != 0)
                                num3 = 1;
                            SpeedX = (float)(12 * num3);
                            Damage = 20;
                            Type = 98;
                            vector2 = new Vector2((float)(i * 16 + 8), (float)(j * 16 + 7));
                            vector2.X += (float)(10 * num3);
                            vector2.Y += 2f;
                            break;
                        }
                        break;
                    case 1:
                        if (Wiring.CheckMech(i, j, 200))
                        {
                            int num3 = -1;
                            if ((int)tile1.frameX != 0)
                                num3 = 1;
                            SpeedX = (float)(12 * num3);
                            Damage = 40;
                            Type = 184;
                            vector2 = new Vector2((float)(i * 16 + 8), (float)(j * 16 + 7));
                            vector2.X += (float)(10 * num3);
                            vector2.Y += 2f;
                            break;
                        }
                        break;
                    case 2:
                        if (Wiring.CheckMech(i, j, 200))
                        {
                            int num3 = -1;
                            if ((int)tile1.frameX != 0)
                                num3 = 1;
                            SpeedX = (float)(5 * num3);
                            Damage = 40;
                            Type = 187;
                            vector2 = new Vector2((float)(i * 16 + 8), (float)(j * 16 + 7));
                            vector2.X += (float)(10 * num3);
                            vector2.Y += 2f;
                            break;
                        }
                        break;
                    case 3:
                        if (Wiring.CheckMech(i, j, 300))
                        {
                            Type = 185;
                            int num3 = 200;
                            for (int index = 0; index < 1000; ++index)
                            {
                                if (Main.projectile[index].active && Main.projectile[index].type == Type)
                                {
                                    float num4 = (new Vector2((float)(i * 16 + 8), (float)(j * 18 + 8)) - Main.projectile[index].Center).Length();
                                    if ((double)num4 < 50.0)
                                        num3 -= 50;
                                    else if ((double)num4 < 100.0)
                                        num3 -= 15;
                                    else if ((double)num4 < 200.0)
                                        num3 -= 10;
                                    else if ((double)num4 < 300.0)
                                        num3 -= 8;
                                    else if ((double)num4 < 400.0)
                                        num3 -= 6;
                                    else if ((double)num4 < 500.0)
                                        num3 -= 5;
                                    else if ((double)num4 < 700.0)
                                        num3 -= 4;
                                    else if ((double)num4 < 900.0)
                                        num3 -= 3;
                                    else if ((double)num4 < 1200.0)
                                        num3 -= 2;
                                    else
                                        --num3;
                                }
                            }
                            if (num3 > 0)
                            {
                                SpeedX = (float)Main.rand.Next(-20, 21) * 0.05f;
                                SpeedY = (float)(4.0 + (double)Main.rand.Next(0, 21) * 0.0500000007450581);
                                Damage = 40;
                                vector2 = new Vector2((float)(i * 16 + 8), (float)(j * 16 + 16));
                                vector2.Y += 6f;
                                Projectile.NewProjectile((float)(int)vector2.X, (float)(int)vector2.Y, SpeedX, SpeedY, Type, Damage, 2f, Main.myPlayer, 0.0f, 0.0f);
                                break;
                            }
                            break;
                        }
                        break;
                    case 4:
                        if (Wiring.CheckMech(i, j, 90))
                        {
                            SpeedX = 0.0f;
                            SpeedY = 8f;
                            Damage = 60;
                            Type = 186;
                            vector2 = new Vector2((float)(i * 16 + 8), (float)(j * 16 + 16));
                            vector2.Y += 10f;
                            break;
                        }
                        break;
                }
                if (Type == 0)
                    return;
                Projectile.NewProjectile((float)(int)vector2.X, (float)(int)vector2.Y, SpeedX, SpeedY, Type, Damage, 2f, Main.myPlayer, 0.0f, 0.0f);
            }
            else if (num1 == 139 || num1 == 35)
                WorldGen.SwitchMB(i, j);
            else if (num1 == 207)
                WorldGen.SwitchFountain(i, j);
            else if (num1 == 410)
                WorldGen.SwitchMonolith(i, j);
            else if (num1 == 141)
            {
                WorldGen.KillTile(i, j, false, false, 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, 0.0f, 0.0f);
            }
            else if (num1 == 210)
                WorldGen.ExplodeMine(i, j);
            else if (num1 == 142 || num1 == 143)
            {
                int y = j - (int)tile1.frameY / 18;
                int num2 = (int)tile1.frameX / 18;
                if (num2 > 1)
                    num2 -= 2;
                int x = i - num2;
                Wiring.SkipWire(x, y);
                Wiring.SkipWire(x, y + 1);
                Wiring.SkipWire(x + 1, y);
                Wiring.SkipWire(x + 1, y + 1);
                if (num1 == 142)
                {
                    for (int index = 0; index < 4 && Wiring._numInPump < 19; ++index)
                    {
                        int num3;
                        int num4;
                        if (index == 0)
                        {
                            num3 = x;
                            num4 = y + 1;
                        }
                        else if (index == 1)
                        {
                            num3 = x + 1;
                            num4 = y + 1;
                        }
                        else if (index == 2)
                        {
                            num3 = x;
                            num4 = y;
                        }
                        else
                        {
                            num3 = x + 1;
                            num4 = y;
                        }
                        Wiring._inPumpX[Wiring._numInPump] = num3;
                        Wiring._inPumpY[Wiring._numInPump] = num4;
                        ++Wiring._numInPump;
                    }
                }
                else
                {
                    for (int index = 0; index < 4 && Wiring._numOutPump < 19; ++index)
                    {
                        int num3;
                        int num4;
                        if (index == 0)
                        {
                            num3 = x;
                            num4 = y + 1;
                        }
                        else if (index == 1)
                        {
                            num3 = x + 1;
                            num4 = y + 1;
                        }
                        else if (index == 2)
                        {
                            num3 = x;
                            num4 = y;
                        }
                        else
                        {
                            num3 = x + 1;
                            num4 = y;
                        }
                        Wiring._outPumpX[Wiring._numOutPump] = num3;
                        Wiring._outPumpY[Wiring._numOutPump] = num4;
                        ++Wiring._numOutPump;
                    }
                }
            }
            else if (num1 == 105)
            {
                int num2 = j - (int)tile1.frameY / 18;
                int num3 = (int)tile1.frameX / 18;
                int num4 = 0;
                while (num3 >= 2)
                {
                    num3 -= 2;
                    ++num4;
                }
                int num5 = i - num3;
                Wiring.SkipWire(num5, num2);
                Wiring.SkipWire(num5, num2 + 1);
                Wiring.SkipWire(num5, num2 + 2);
                Wiring.SkipWire(num5 + 1, num2);
                Wiring.SkipWire(num5 + 1, num2 + 1);
                Wiring.SkipWire(num5 + 1, num2 + 2);
                int X = num5 * 16 + 16;
                int Y = (num2 + 3) * 16;
                int index1 = -1;
                if (num4 == 4)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 1))
                        index1 = NPC.NewNPC(X, Y - 12, 1, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 7)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 49))
                        index1 = NPC.NewNPC(X - 4, Y - 6, 49, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 8)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 55))
                        index1 = NPC.NewNPC(X, Y - 12, 55, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 9)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 46))
                        index1 = NPC.NewNPC(X, Y - 12, 46, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 10)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 21))
                        index1 = NPC.NewNPC(X, Y, 21, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 18)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 67))
                        index1 = NPC.NewNPC(X, Y - 12, 67, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 23)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 63))
                        index1 = NPC.NewNPC(X, Y - 12, 63, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 27)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 85))
                        index1 = NPC.NewNPC(X - 9, Y, 85, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 28)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 74))
                        index1 = NPC.NewNPC(X, Y - 12, 74, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 34)
                {
                    for (int index2 = 0; index2 < 2; ++index2)
                    {
                        for (int index3 = 0; index3 < 3; ++index3)
                        {
                            Tile tile2 = Main.tile[num5 + index2, num2 + index3];
                            tile2.type = (ushort)349;
                            tile2.frameX = (short)(index2 * 18 + 216);
                            tile2.frameY = (short)(index3 * 18);
                        }
                    }
                    Animation.NewTemporaryAnimation(0, (ushort)349, num5, num2);
                    if (Main.netMode == 2)
                        NetMessage.SendTileRange(-1, num5, num2, 2, 3);
                }
                else if (num4 == 42)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 58))
                        index1 = NPC.NewNPC(X, Y - 12, 58, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 37)
                {
                    if (Wiring.CheckMech(num5, num2, 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, 1, false, 0, false);
                }
                else if (num4 == 50)
                {
                    if (Wiring.CheckMech(num5, num2, 30) && NPC.MechSpawn((float)X, (float)Y, 65) && !Collision.SolidTiles(num5 - 2, num5 + 3, num2, num2 + 2))
                        index1 = NPC.NewNPC(X, Y - 12, 65, 0, 0.0f, 0.0f, 0.0f, 0.0f, (int)byte.MaxValue);
                }
                else if (num4 == 2)
                {
                    if (Wiring.CheckMech(num5, num2, 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, 1, false, 0, false);
                }
                else if (num4 == 17)
                {
                    if (Wiring.CheckMech(num5, num2, 600) && Item.MechSpawn((float)X, (float)Y, 166))
                        Item.NewItem(X, Y - 20, 0, 0, 166, 1, false, 0, false);
                }
                else if (num4 == 40)
                {
                    if (Wiring.CheckMech(num5, num2, 300))
                    {
                        int[] numArray = new int[10];
                        int maxValue = 0;
                        for (int index2 = 0; index2 < 200; ++index2)
                        {
                            if (Main.npc[index2].active && (Main.npc[index2].type == 17 || Main.npc[index2].type == 19 || (Main.npc[index2].type == 22 || Main.npc[index2].type == 38) || (Main.npc[index2].type == 54 || Main.npc[index2].type == 107 || (Main.npc[index2].type == 108 || Main.npc[index2].type == 142)) || (Main.npc[index2].type == 160 || Main.npc[index2].type == 207 || (Main.npc[index2].type == 209 || Main.npc[index2].type == 227) || (Main.npc[index2].type == 228 || Main.npc[index2].type == 229 || (Main.npc[index2].type == 358 || Main.npc[index2].type == 369)))))
                            {
                                numArray[maxValue] = index2;
                                ++maxValue;
                                if (maxValue >= 9)
                                    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, -1, -1, "", number, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                        }
                    }
                }
                else if (num4 == 41 && Wiring.CheckMech(num5, num2, 300))
                {
                    int[] numArray = new int[10];
                    int maxValue = 0;
                    for (int index2 = 0; index2 < 200; ++index2)
                    {
                        if (Main.npc[index2].active && (Main.npc[index2].type == 18 || Main.npc[index2].type == 20 || (Main.npc[index2].type == 124 || Main.npc[index2].type == 178) || (Main.npc[index2].type == 208 || Main.npc[index2].type == 353)))
                        {
                            numArray[maxValue] = index2;
                            ++maxValue;
                            if (maxValue >= 9)
                                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, -1, -1, "", number, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                    }
                }
                if (index1 < 0)
                    return;
                Main.npc[index1].value = 0.0f;
                Main.npc[index1].npcSlots = 0.0f;
            }
            else
            {
                if (num1 != 349)
                    return;
                int index1 = j - (int)tile1.frameY / 18;
                int num2 = (int)tile1.frameX / 18;
                while (num2 >= 2)
                    num2 -= 2;
                int index2 = i - num2;
                Wiring.SkipWire(index2, index1);
                Wiring.SkipWire(index2, index1 + 1);
                Wiring.SkipWire(index2, index1 + 2);
                Wiring.SkipWire(index2 + 1, index1);
                Wiring.SkipWire(index2 + 1, index1 + 1);
                Wiring.SkipWire(index2 + 1, index1 + 2);
                short num3 = (int)Main.tile[index2, index1].frameX != 0 ? (short)-216 : (short)216;
                for (int index3 = 0; index3 < 2; ++index3)
                {
                    for (int index4 = 0; index4 < 3; ++index4)
                        Main.tile[index2 + index3, index1 + index4].frameX += num3;
                }
                if (Main.netMode == 2)
                    NetMessage.SendTileRange(-1, index2, index1, 2, 3);
                Animation.NewTemporaryAnimation((int)num3 > 0 ? 0 : 1, (ushort)349, index2, index1);
            }
        }