Esempio n. 1
0
        public unsafe static void DelWater(int l)
        {
            int num  = Main.liquid[l].x;
            int num2 = Main.liquid[l].y;

            fixed(Tile *ptr = &Main.tile[num, num2])
            {
                int num3 = ptr->liquid;

                if (num3 < 2)
                {
                    ptr->liquid = 0;
                    num3        = 0;
                    if (ptr[-1440].liquid == 1)
                    {
                        ptr[-1440].liquid = 0;
                    }
                    if (ptr[1440].liquid == 1)
                    {
                        ptr[1440].liquid = 0;
                    }
                    goto IL_01f1;
                }
                if (num3 < 20)
                {
                    if ((ptr[1].liquid < byte.MaxValue && (ptr[1].active == 0 || !Main.tileSolidNotSolidTop[ptr[1].type])) || (ptr[-1440].liquid < num3 && (ptr[-1440].active == 0 || !Main.tileSolidNotSolidTop[ptr[-1440].type])) || (ptr[1440].liquid < num3 && (ptr[1440].active == 0 || !Main.tileSolidNotSolidTop[ptr[1440].type])))
                    {
                        ptr->liquid = 0;
                        num3        = 0;
                    }
                    goto IL_01f1;
                }
                if (ptr[1].liquid >= byte.MaxValue || (ptr[1].active != 0 && Main.tileSolidNotSolidTop[ptr[1].type]) || stuck)
                {
                    goto IL_01f1;
                }
                Main.liquid[l].kill = 0;
                goto end_IL_0036;
IL_01f1:
                if (num3 < 250 && ptr[-1].liquid > 0)
                {
                    AddWater(num, num2 - 1);
                }
                if (num3 == 0)
                {
                    ptr->lava = 0;
                }
                else
                {
                    if ((ptr[1440].liquid > 0 && ptr[1441].liquid < 250 && ptr[1441].active == 0) || (ptr[-1440].liquid > 0 && ptr[-1439].liquid < 250 && ptr[-1439].active == 0))
                    {
                        AddWater(num - 1, num2);
                        AddWater(num + 1, num2);
                    }
                    if (ptr->lava != 0)
                    {
                        LavaCheck(num, num2);
                        for (int i = num - 1; i <= num + 1; i++)
                        {
                            for (int j = num2 - 1; j <= num2 + 1; j++)
                            {
                                if (Main.tile[i, j].active != 0)
                                {
                                    switch (Main.tile[i, j].type)
                                    {
                                    case 2:
                                    case 23:
                                    case 109:
                                        Main.tile[i, j].type = 0;
                                        WorldGen.SquareTileFrame(i, j);
                                        if (Main.netMode == 2)
                                        {
                                            NetMessage.SendTileSquare(num, num2, 3);
                                        }
                                        break;

                                    case 60:
                                    case 70:
                                        Main.tile[i, j].type = 59;
                                        WorldGen.SquareTileFrame(i, j);
                                        if (Main.netMode == 2)
                                        {
                                            NetMessage.SendTileSquare(num, num2, 3);
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                if (Main.netMode == 2)
                {
                    NetMessage.sendWater(num, num2);
                }
                numLiquid--;
                ptr->checkingLiquid = 0;
                Main.liquid[l].x    = Main.liquid[numLiquid].x;
                Main.liquid[l].y    = Main.liquid[numLiquid].y;
                Main.liquid[l].kill = Main.liquid[numLiquid].kill;
                if (ptr->type >= 82 && ptr->type <= 84)
                {
                    WorldGen.CheckAlch(num, num2);
                }
                end_IL_0036 :;
            }
        }