public static void SendWater(int x, int y)
        {
            if (disableLiquidUpdates)
            {
                return;
            }

            if (useLiquidUpdateBuffer)
            {
                LiquidUpdateBuffer.QueueUpdate(x, y);
                return;
            }

            byte[] bytes = null;

            for (int i = 0; i < 255; i++)
            {
                if (NetPlay.slots[i].state >= SlotState.PLAYING && NetPlay.slots[i].Connected)
                {
                    int X = x / 200;
                    int Y = y / 150;
                    if (X < (Main.maxTilesX / 200) && Y < (Main.maxTilesY / 150))
                    {
                        if (NetPlay.slots[i].tileSection[X, Y])
                        {
                            if (bytes == null)
                            {
                                var msg = NetMessage.PrepareThreadInstance();
                                msg.FlowLiquid(x, y);
                                bytes = msg.Output;
                            }
                            NetPlay.slots[i].Send(bytes);
                        }
                    }
                    else
                    {
                        ProgramLog.Error.Log("Water Index out of Bounds:");
                        ProgramLog.Error.Log(string.Format("X: {0} Y: {1}, Axis: {2}, {3}", X, Y, Main.maxTilesX, Main.maxTilesY));
                    }
                }
            }
        }
Esempio n. 2
0
        public static void clearWorld()
        {
            Statics.WorldLoaded = false;

            Main.trashItem             = new Item();
            WorldModify.spawnEye       = false;
            WorldModify.spawnNPC       = 0;
            WorldModify.shadowOrbCount = 0;
            Main.helpText   = 0;
            Main.dungeonX   = 0;
            Main.dungeonY   = 0;
            NPC.downedBoss1 = false;
            NPC.downedBoss2 = false;
            NPC.downedBoss3 = false;
            WorldModify.shadowOrbSmashed = false;
            WorldModify.spawnMeteor      = false;
            WorldModify.stopDrops        = false;
            Main.invasionDelay           = 0;
            Main.invasionType            = 0;
            Main.invasionSize            = 0;
            Main.invasionWarn            = 0;
            Main.invasionX               = 0.0;
            WorldModify.noLiquidCheck    = false;
            Liquid.numLiquid             = 0;
            LiquidBuffer.numLiquidBuffer = 0;

//			if (WorldModify.lastMaxTilesX > Main.maxTilesX || WorldModify.lastMaxTilesY > Main.maxTilesY)
//			{
//				using (var prog = new ProgressLogger(WorldModify.lastMaxTilesX - 1, "Freeing unused resources"))
//					for (int i = 0; i < WorldModify.lastMaxTilesX; i++)
//					{
//						prog.Value = i;
//						for (int j = 0; j < WorldModify.lastMaxTilesY; j++)
//						{
//							Main.tile.CreateTileAt(i, j);
//						}
//					}
//			}
            WorldModify.lastMaxTilesX = Main.maxTilesX;
            WorldModify.lastMaxTilesY = Main.maxTilesY;

            if (Main.tile == null || Main.tile.SizeX != Main.maxTilesX || Main.tile.SizeY != Main.maxTilesY)
            {
                Main.tile = null;
                GC.Collect();
                Main.tile = new TileCollection(Main.maxTilesX, Main.maxTilesY);
            }
            else
            {
                using (var prog = new ProgressLogger(Main.maxTilesX - 1, "Clearing world tiles"))
                    for (int k = 0; k < Main.maxTilesX; k++)
                    {
                        prog.Value = k;
                        for (int l = 0; l < Main.maxTilesY; l++)
                        {
                            Main.tile.CreateTileAt(k, l);
// for testing
//							if ((l == 25 || l == 26) && k > 4000 && k < 5000)
//							{
//								Main.tile.At(k, l).SetLiquid (250);
//								Liquid.AddWater (k, l);
//							}
                        }
                    }
            }

            using (var prog = new ProgressLogger(12212 + Liquid.resLiquid - 1, "Resetting game objects"))
            {
                for (int num3 = 0; num3 < 201; num3++)
                {
                    Main.item[num3] = null;
                    Main.npcs[num3] = null;
                }
                prog.Value++;

                for (int num4 = 0; num4 < 1000; num4++)
                {
                    Main.projectile[num4] = null;
                    Main.chest[num4]      = null;
                    Main.sign[num4]       = null;
                }
                prog.Value++;

//				for (int num8 = 0; num8 < Liquid.resLiquid; num8++)
//				{
//					Main.liquid[num8] = null;
//				}
//				prog.Value++;

//				for (int num9 = 0; num9 < 10000; num9++)
//				{
//					Main.liquidBuffer[num9] = null;
//				}
//				prog.Value += 10;

                GC.Collect();
                prog.Value += 10;

                for (int num3 = 0; num3 < 201; num3++)
                {
                    Main.item[num3] = new Item();
                    Main.npcs[num3] = new NPC();
                    prog.Value++;
                }
                for (int num4 = 0; num4 < 1001; num4++)
                {
                    prog.Value++;
                }
//				for (int num5 = 0; num5 < 1000; num5++)
//				{
//					Main.projectile[num5] = new Projectile();
//					prog.Value++;
//				}
                Projectile.ResetProjectiles();
                prog.Value += 1000;
                for (int num8 = 0; num8 < Liquid.resLiquid; num8++)
                {
                    Main.liquid[num8] = new Liquid();
                    prog.Value++;
                }
                for (int num9 = 0; num9 < 10000; num9++)
                {
                    Main.liquidBuffer[num9] = new LiquidBuffer();
                    prog.Value++;
                }
            }
            setWorldSize();

            LiquidUpdateBuffer.Initialize(Main.maxSectionsX, Main.maxSectionsY);

            worldCleared = true;
        }