Exemplo n.º 1
0
 private static int SaveNPCs(BinaryWriter writer)
 {
     for (int i = 0; i < Main.npc.Length; i++)
     {
         NPC nPC = Main.npc[i];
         if (nPC.active && nPC.townNPC && nPC.type != 368)
         {
             writer.Write(nPC.active);
             writer.Write(nPC.name);
             writer.Write(nPC.displayName);
             writer.Write(nPC.position.X);
             writer.Write(nPC.position.Y);
             writer.Write(nPC.homeless);
             writer.Write(nPC.homeTileX);
             writer.Write(nPC.homeTileY);
         }
     }
     writer.Write(false);
     for (int j = 0; j < Main.npc.Length; j++)
     {
         NPC nPC2 = Main.npc[j];
         if (nPC2.active && NPCID.Sets.SavesAndLoads[nPC2.type])
         {
             writer.Write(nPC2.active);
             writer.Write(nPC2.name);
             writer.WriteVector2(nPC2.position);
         }
     }
     writer.Write(false);
     return (int)writer.BaseStream.Position;
 }
Exemplo n.º 2
0
        public static void SendData(int msgType, int remoteClient = -1, int ignoreClient = -1, string text = "",
            int number = 0, float number2 = 0f, float number3 = 0f, float number4 = 0f, int number5 = 0, int number6 = 0,
            int number7 = 0)
        {
            if (Main.netMode == 0)
            {
                return;
            }
            int num = 256;
            if (Main.netMode == 2 && remoteClient >= 0)
            {
                num = remoteClient;
            }

            if (text == null)
            {
                text = "";
            }

            if (ServerApi.Hooks.InvokeNetSendData(ref msgType, ref remoteClient, ref ignoreClient, ref text, ref number,
                ref number2, ref number3, ref number4, ref number5))
            {
                return;
            }

            MemoryStream ms = new MemoryStream(16384);
            BinaryWriter writer = new BinaryWriter(ms);
            writer.BaseStream.Position = 2L;
            long position = 0L;
            writer.Write((byte) msgType);

            if (text == null)
            {
                text = "";
            }

            switch (msgType)
            {
                case 1:
                    writer.Write("Terraria" + Main.curRelease);
                    break;
                case 2:
                    writer.Write(text);
                    if (Main.dedServ)
                    {
                        Console.WriteLine(Netplay.Clients[num].Socket.GetRemoteAddress().ToString() + " was booted: " + text);
                    }
                    break;
                case 3:
                    writer.Write((byte) remoteClient);
                    break;
                case 4:
                {
                    Player player = Main.player[number];
                    writer.Write((byte) number);
                    writer.Write((byte) player.skinVariant);
                    writer.Write((byte) player.hair);
                    writer.Write(text);
                    writer.Write(player.hairDye);
                    BitsByte hideVisual = 0;
                    for (int i = 0; i < 8; i++)
                        hideVisual[i] = player.hideVisual[i];
                    writer.Write(hideVisual);
                    hideVisual = 0;
                    for (int i = 0; i < 2; i++)
                        hideVisual[i] = player.hideVisual[i + 8];
                    writer.Write(hideVisual);
                    writer.Write(player.hideMisc);
                    writer.WriteRGB(player.hairColor);
                    writer.WriteRGB(player.skinColor);
                    writer.WriteRGB(player.eyeColor);
                    writer.WriteRGB(player.shirtColor);
                    writer.WriteRGB(player.underShirtColor);
                    writer.WriteRGB(player.pantsColor);
                    writer.WriteRGB(player.shoeColor);

                    BitsByte bb2 = 0;
                    if (player.difficulty == 1)
                    {
                        bb2[0] = true;
                    }
                    else if (player.difficulty == 2)
                    {
                        bb2[1] = true;
                    }
                    bb2[2] = player.extraAccessory;
                    writer.Write(bb2);
                    break;
                }
                case 5:
                {
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    Player player2 = Main.player[number];
                    Item item;
                    if (number2 >
                        (float)
                            (58 + player2.armor.Length + player2.dye.Length + player2.miscEquips.Length + player2.miscDyes.Length +
                             player2.bank.item.Length + player2.bank2.item.Length))
                    {
                        item = player2.trashItem;
                    }
                    else if (number2 >
                             (float)
                                 (58 + player2.armor.Length + player2.dye.Length + player2.miscEquips.Length + player2.miscDyes.Length +
                                  player2.bank.item.Length))
                    {
                        item =
                            player2.bank2.item[
                                (int) number2 - 58 -
                                (player2.armor.Length + player2.dye.Length + player2.miscEquips.Length + player2.miscDyes.Length +
                                 player2.bank.item.Length) - 1];
                    }
                    else if (number2 >
                             (float)
                                 (58 + player2.armor.Length + player2.dye.Length + player2.miscEquips.Length + player2.miscDyes.Length))
                    {
                        item =
                            player2.bank.item[
                                (int) number2 - 58 -
                                (player2.armor.Length + player2.dye.Length + player2.miscEquips.Length + player2.miscDyes.Length) - 1];
                    }
                    else if (number2 > (float) (58 + player2.armor.Length + player2.dye.Length + player2.miscEquips.Length))
                    {
                        item =
                            player2.miscDyes[
                                (int) number2 - 58 - (player2.armor.Length + player2.dye.Length + player2.miscEquips.Length) - 1];
                    }
                    else if (number2 > (float) (58 + player2.armor.Length + player2.dye.Length))
                    {
                        item = player2.miscEquips[(int) number2 - 58 - (player2.armor.Length + player2.dye.Length) - 1];
                    }
                    else if (number2 > (float) (58 + player2.armor.Length))
                    {
                        item = player2.dye[(int) number2 - 58 - player2.armor.Length - 1];
                    }
                    else if (number2 > 58f)
                    {
                        item = player2.armor[(int) number2 - 58 - 1];
                    }
                    else
                    {
                        item = player2.inventory[(int) number2];
                    }
                    if (item.name == "" || item.stack == 0 || item.type == 0)
                    {
                        item.SetDefaults(0, false);
                    }
                    int num2 = item.stack;
                    int netID = item.netID;
                    if (num2 < 0)
                    {
                        num2 = 0;
                    }
                    writer.Write((short) num2);
                    writer.Write((byte) number3);
                    writer.Write((short) netID);
                    break;
                }
                case 7:
                {
                    writer.Write((int) Main.time);
                    BitsByte bb3 = 0;
                    bb3[0] = Main.dayTime;
                    bb3[1] = Main.bloodMoon;
                    bb3[2] = Main.eclipse;
                    writer.Write(bb3);
                    writer.Write((byte) Main.moonPhase);
                    writer.Write((short) Main.maxTilesX);
                    writer.Write((short) Main.maxTilesY);
                    writer.Write((short) Main.spawnTileX);
                    writer.Write((short) Main.spawnTileY);
                    writer.Write((short) Main.worldSurface);
                    writer.Write((short) Main.rockLayer);
                    writer.Write(Main.worldID);
                    writer.Write(Main.worldName); //possibly null?
                    writer.Write((byte) Main.moonType);
                    writer.Write((byte) WorldGen.treeBG);
                    writer.Write((byte) WorldGen.corruptBG);
                    writer.Write((byte) WorldGen.jungleBG);
                    writer.Write((byte) WorldGen.snowBG);
                    writer.Write((byte) WorldGen.hallowBG);
                    writer.Write((byte) WorldGen.crimsonBG);
                    writer.Write((byte) WorldGen.desertBG);
                    writer.Write((byte) WorldGen.oceanBG);
                    writer.Write((byte) Main.iceBackStyle);
                    writer.Write((byte) Main.jungleBackStyle);
                    writer.Write((byte) Main.hellBackStyle);
                    writer.Write(Main.windSpeedSet);
                    writer.Write((byte) Main.numClouds);
                    for (int k = 0; k < 3; k++)
                    {
                        writer.Write(Main.treeX[k]);
                    }
                    for (int l = 0; l < 4; l++)
                    {
                        writer.Write((byte) Main.treeStyle[l]);
                    }
                    for (int m = 0; m < 3; m++)
                    {
                        writer.Write(Main.caveBackX[m]);
                    }
                    for (int n = 0; n < 4; n++)
                    {
                        writer.Write((byte) Main.caveBackStyle[n]);
                    }
                    if (!Main.raining)
                    {
                        Main.maxRaining = 0f;
                    }
                    writer.Write(Main.maxRaining);
                    BitsByte bb4 = 0;
                    bb4[0] = WorldGen.shadowOrbSmashed;
                    bb4[1] = NPC.downedBoss1;
                    bb4[2] = NPC.downedBoss2;
                    bb4[3] = NPC.downedBoss3;
                    bb4[4] = Main.hardMode;
                    bb4[5] = NPC.downedClown;
                    bb4[6] = Main.ServerSideCharacter;
                    bb4[7] = NPC.downedPlantBoss;
                    writer.Write(bb4);
                    BitsByte bb5 = 0;
                    bb5[0] = NPC.downedMechBoss1;
                    bb5[1] = NPC.downedMechBoss2;
                    bb5[2] = NPC.downedMechBoss3;
                    bb5[3] = NPC.downedMechBossAny;
                    bb5[4] = (Main.cloudBGActive >= 1f);
                    bb5[5] = WorldGen.crimson;
                    bb5[6] = Main.pumpkinMoon;
                    bb5[7] = Main.snowMoon;
                    writer.Write(bb5);
                    BitsByte bb6 = 0;
                    bb6[0] = Main.expertMode;
                    bb6[1] = Main.fastForwardTime;
                    bb6[2] = Main.slimeRain;
                    bb6[3] = NPC.downedSlimeKing;
                    bb6[4] = NPC.downedQueenBee;
                    bb6[5] = NPC.downedFishron;
                    bb6[6] = NPC.downedMartians;
                    bb6[7] = NPC.downedAncientCultist;
                    writer.Write(bb6);
                    BitsByte bb7 = 0;
                    bb7[0] = NPC.downedMoonlord;
                    bb7[1] = NPC.downedHalloweenKing;
                    bb7[2] = NPC.downedHalloweenTree;
                    bb7[3] = NPC.downedChristmasIceQueen;
                    bb7[4] = NPC.downedChristmasSantank;
                    bb7[5] = NPC.downedChristmasTree;
                    writer.Write(bb7);
                    writer.Write((sbyte) Main.invasionType);
                    writer.Write(Main.LobbyId);
                    break;
                }
                case 8:
                    writer.Write(number);
                    writer.Write((int) number2);
                    break;
                case 9:
                    writer.Write(number);
                    writer.Write(text);
                    break;
                case 10:
                {
                    byte[] array = new byte[MessageBuffer.writeBufferMax];
                    int num3 = NetMessage.CompressTileBlock(number, (int) number2, (short) number3, (short) number4,
                        array, 0);
                    writer.Write(array, 0, num3);
                    //writer.BaseStream.Position += (long)num3;
                    break;
                }
                case 11:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    break;
                case 12:
                    writer.Write((byte) number);
                    writer.Write((short) Main.player[number].SpawnX);
                    writer.Write((short) Main.player[number].SpawnY);
                    break;
                case 13:
                {
                    Player player3 = Main.player[number];
                    writer.Write((byte) number);
                    BitsByte bb8 = 0;
                    bb8[0] = player3.controlUp;
                    bb8[1] = player3.controlDown;
                    bb8[2] = player3.controlLeft;
                    bb8[3] = player3.controlRight;
                    bb8[4] = player3.controlJump;
                    bb8[5] = player3.controlUseItem;
                    bb8[6] = (player3.direction == 1);
                    writer.Write(bb8);
                    BitsByte bb9 = 0;
                    bb9[0] = player3.pulley;
                    bb9[1] = (player3.pulley && player3.pulleyDir == 2);
                    bb9[2] = (player3.velocity != Vector2.Zero);
                    bb9[3] = player3.vortexStealthActive;
                    bb9[4] = (player3.gravDir == 1f);
                    writer.Write(bb9);
                    writer.Write((byte) player3.selectedItem);
                    writer.WriteVector2(player3.position);
                    if (bb9[2])
                    {
                        writer.WriteVector2(player3.velocity);
                    }
                    else
                    {
                        writer.WriteVector2(Vector2.Zero);
                    }
                    break;
                }
                case 14:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    break;
                case 16:
                    writer.Write((byte) number);
                    writer.Write((short) Main.player[number].statLife);
                    writer.Write((short) Main.player[number].statLifeMax);
                    break;
                case 17:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    writer.Write((byte) number5);
                    break;
                case 18:
                    writer.Write((byte) (Main.dayTime ? 1 : 0));
                    writer.Write((int) Main.time);
                    writer.Write(Main.sunModY);
                    writer.Write(Main.moonModY);
                    break;
                case 19:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((number4 == 1f) ? 1 : 0);
                    break;
                case 20:
                {
                    int num4 = (int) number2;
                    int num5 = (int) number3;
                    if (num4 < number)
                    {
                        num4 = number;
                    }
                    if (num4 >= Main.maxTilesX + number)
                    {
                        num4 = Main.maxTilesX - number - 1;
                    }
                    if (num5 < number)
                    {
                        num5 = number;
                    }
                    if (num5 >= Main.maxTilesY + number)
                    {
                        num5 = Main.maxTilesY - number - 1;
                    }
                    writer.Write((short) number);
                    writer.Write((short) num4);
                    writer.Write((short) num5);
                    for (int num6 = num4; num6 < num4 + number; num6++)
                    {
                        for (int num7 = num5; num7 < num5 + number; num7++)
                        {
                            BitsByte bb10 = 0;
                            BitsByte bb11 = 0;
                            byte b = 0;
                            byte b2 = 0;
                            Tile tile = Main.tile[num6, num7];
                            bb10[0] = tile.active();
                            bb10[2] = (tile.wall > 0);
                            bb10[3] = (tile.liquid > 0 && Main.netMode == 2);
                            bb10[4] = tile.wire();
                            bb10[5] = tile.halfBrick();
                            bb10[6] = tile.actuator();
                            bb10[7] = tile.inActive();
                            bb11[0] = tile.wire2();
                            bb11[1] = tile.wire3();
                            if (tile.active() && tile.color() > 0)
                            {
                                bb11[2] = true;
                                b = tile.color();
                            }
                            if (tile.wall > 0 && tile.wallColor() > 0)
                            {
                                bb11[3] = true;
                                b2 = tile.wallColor();
                            }
                            bb11 += (byte) (tile.slope() << 4);
                            writer.Write(bb10);
                            writer.Write(bb11);
                            if (b > 0)
                            {
                                writer.Write(b);
                            }
                            if (b2 > 0)
                            {
                                writer.Write(b2);
                            }
                            if (tile.active())
                            {
                                writer.Write(tile.type);
                                if (Main.tileFrameImportant[(int) tile.type])
                                {
                                    writer.Write(tile.frameX);
                                    writer.Write(tile.frameY);
                                }
                            }
                            if (tile.wall > 0)
                            {
                                writer.Write(tile.wall);
                            }
                            if (tile.liquid > 0 && Main.netMode == 2)
                            {
                                writer.Write(tile.liquid);
                                writer.Write(tile.liquidType());
                            }
                        }
                    }
                    break;
                }
                case 21:
                case 90:
                {
                    Item item2 = Main.item[number];
                    writer.Write((short) number);
                    writer.WriteVector2(item2.position);
                    writer.WriteVector2(item2.velocity);
                    writer.Write((short) item2.stack);
                    writer.Write(item2.prefix);
                    writer.Write((byte) number2);
                    short value = 0;
                    if (item2.active && item2.stack > 0)
                    {
                        value = (short) item2.netID;
                    }
                    writer.Write(value);
                    break;
                }
                case 22:
                    writer.Write((short) number);
                    writer.Write((byte) Main.item[number].owner);
                    break;
                case 23:
                {
                    if (number > Main.npc.Length || number < 0)
                    {
                        return;
                    }

                    NPC nPC = Main.npc[number];

                    if (nPC == null)
                    {
                        return;
                    }

                    writer.Write((short) number);
                    writer.WriteVector2(nPC.position);
                    writer.WriteVector2(nPC.velocity);
                    writer.Write((byte) nPC.target);
                    int num8 = nPC.life;
                    if (!nPC.active)
                    {
                        num8 = 0;
                    }
                    if (!nPC.active || nPC.life <= 0)
                    {
                        nPC.netSkip = 0;
                    }
                    if (nPC.name == null)
                    {
                        nPC.name = "";
                    }
                    short value2 = (short) nPC.netID;
                    bool[] array = new bool[4];
                    BitsByte bb12 = 0;
                    bb12[0] = (nPC.direction > 0);
                    bb12[1] = (nPC.directionY > 0);
                    bb12[2] = (array[0] = (nPC.ai[0] != 0f));
                    bb12[3] = (array[1] = (nPC.ai[1] != 0f));
                    bb12[4] = (array[2] = (nPC.ai[2] != 0f));
                    bb12[5] = (array[3] = (nPC.ai[3] != 0f));
                    bb12[6] = (nPC.spriteDirection > 0);
                    bb12[7] = (num8 == nPC.lifeMax);
                    writer.Write(bb12);
                    for (int num9 = 0; num9 < NPC.maxAI; num9++)
                    {
                        if (array[num9])
                        {
                            writer.Write(nPC.ai[num9]);
                        }
                    }
                    writer.Write(value2);
                    if (!bb12[7])
                    {
                        if (Main.npcLifeBytes.ContainsKey(nPC.netID) == false)
                        {
                            break;
                        }
                        byte b3 = Main.npcLifeBytes[nPC.netID];
                        writer.Write(b3);
                        if (b3 == 2)
                        {
                            writer.Write((short) num8);
                        }
                        else if (b3 == 4)
                        {
                            writer.Write(num8);
                        }
                        else
                        {
                            writer.Write((sbyte) num8);
                        }
                    }
                    if (Main.npcCatchable[nPC.type])
                    {
                        writer.Write((byte) nPC.releaseOwner);
                    }
                    break;
                }
                case 24:
                    writer.Write((short) number);
                    writer.Write((byte) number2);
                    break;
                case 25:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    writer.Write((byte) number3);
                    writer.Write((byte) number4);
                    writer.Write(text);
                    break;
                case 26:
                {
                    writer.Write((byte) number); //player id
                    writer.Write((byte) (number2 + 1f)); //hit direction
                    writer.Write((short) number3); //damage
                    writer.Write(text); //death text
                    BitsByte bb13 = 0;
                    bb13[0] = (number4 == 1f); //pvp
                    bb13[1] = (number5 == 1); //critical hit
                    writer.Write(bb13);
                    break;
                }
                case 27:
                {
                    Projectile projectile = Main.projectile[number];
                    writer.Write((short) projectile.identity);
                    writer.WriteVector2(projectile.position);
                    writer.WriteVector2(projectile.velocity);
                    writer.Write(projectile.knockBack);
                    writer.Write((short) projectile.damage);
                    writer.Write((byte) projectile.owner);
                    writer.Write((short) projectile.type);
                    BitsByte bb14 = 0;
                    for (int num10 = 0; num10 < Projectile.maxAI; num10++)
                    {
                        if (projectile.ai[num10] != 0f)
                        {
                            bb14[num10] = true;
                        }
                    }
                    writer.Write(bb14);
                    for (int num11 = 0; num11 < Projectile.maxAI; num11++)
                    {
                        if (bb14[num11])
                        {
                            writer.Write(projectile.ai[num11]);
                        }
                    }
                    break;
                }
                case 28:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write(number3);
                    writer.Write((byte) (number4 + 1f));
                    writer.Write((byte) number5);
                    break;
                case 29:
                    writer.Write((short) number);
                    writer.Write((byte) number2);
                    break;
                case 30:
                    writer.Write((byte) number);
                    writer.Write(Main.player[number].hostile);
                    break;
                case 31:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    break;
                case 32:
                {
                    Item item3 = Main.chest[number].item[(int) ((byte) number2)];
                    writer.Write((short) number);
                    writer.Write((byte) number2);
                    short value3 = (short) item3.netID;
                    if (item3.name == null)
                    {
                        value3 = 0;
                    }
                    writer.Write((short) item3.stack);
                    writer.Write(item3.prefix);
                    writer.Write(value3);
                    break;
                }
                case 33:
                {
                    int num12 = 0;
                    int num13 = 0;
                    int num14 = 0;
                    string text2 = null;
                    if (number > -1)
                    {
                        num12 = Main.chest[number].x;
                        num13 = Main.chest[number].y;
                    }
                    if (number2 == 1f)
                    {
                        num14 = (int) ((byte) text.Length);
                        if (num14 == 0 || num14 > 20)
                        {
                            num14 = 255;
                        }
                        else
                        {
                            text2 = text;
                        }
                    }
                    writer.Write((short) number);
                    writer.Write((short) num12);
                    writer.Write((short) num13);
                    writer.Write((byte) num14);
                    if (text2 != null)
                    {
                        writer.Write(text2);
                    }
                    break;
                }
                case 34:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    if (Main.netMode == 2)
                    {
                        Netplay.GetSectionX((int) number2);
                        Netplay.GetSectionY((int) number3);
                        writer.Write((short) number5);
                    }
                    break;
                case 35:
                case 66:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    break;
                case 36:
                {
                    Player player4 = Main.player[number];
                    writer.Write((byte) number);
                    writer.Write(player4.zone1);
                    writer.Write(player4.zone2);
                    break;
                }
                case 38:
                    writer.Write(text);
                    break;
                case 39:
                    writer.Write((short) number);
                    break;
                case 40:
                    writer.Write((byte) number);
                    writer.Write((short) Main.player[number].talkNPC);
                    break;
                case 41:
                    writer.Write((byte) number);
                    writer.Write(Main.player[number].itemRotation);
                    writer.Write((short) Main.player[number].itemAnimation);
                    break;
                case 42:
                    writer.Write((byte) number);
                    writer.Write((short) Main.player[number].statMana);
                    writer.Write((short) Main.player[number].statManaMax);
                    break;
                case 43:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    break;
                case 44:
                    writer.Write((byte) number);
                    writer.Write((byte) (number2 + 1f));
                    writer.Write((short) number3);
                    writer.Write((byte) number4);
                    writer.Write(text);
                    break;
                case 45:
                    writer.Write((byte) number);
                    writer.Write((byte) Main.player[number].team);
                    break;
                case 46:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    break;
                case 47:
                    writer.Write((short) number);
                    writer.Write((short) Main.sign[number].x);
                    writer.Write((short) Main.sign[number].y);
                    writer.Write(Main.sign[number].text); //possibly null?
                    writer.Write((byte) number2);
                    break;
                case 48:
                {
                    Tile tile2 = Main.tile[number, (int) number2];
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write(tile2.liquid);
                    writer.Write(tile2.liquidType());
                    break;
                }
                case 50:
                    writer.Write((byte) number);
                    for (int num15 = 0; num15 < 22; num15++)
                    {
                        writer.Write((byte) Main.player[number].buffType[num15]);
                    }
                    break;
                case 51:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    break;
                case 52:
                    writer.Write((byte) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    break;
                case 53:
                    writer.Write((short) number);
                    writer.Write((byte) number2);
                    writer.Write((short) number3);
                    break;
                case 54:
                    writer.Write((short) number);
                    for (int num16 = 0; num16 < 5; num16++)
                    {
                        writer.Write((byte) Main.npc[number].buffType[num16]);
                        writer.Write((short) Main.npc[number].buffTime[num16]);
                    }
                    break;
                case 55:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    writer.Write((short) number3);
                    break;
                case 56:
                {
                    string value4 = "";
                    if (Main.netMode == 2)
                    {
                        value4 = Main.npc[number].displayName;
                    }
                    writer.Write((short) number);
                    writer.Write(value4);
                    break;
                }
                case 57:
                    writer.Write(WorldGen.tGood);
                    writer.Write(WorldGen.tEvil);
                    writer.Write(WorldGen.tBlood);
                    break;
                case 58:
                    writer.Write((byte) number);
                    writer.Write(number2);
                    break;
                case 59:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    break;
                case 60:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((byte) number4);
                    break;
                case 61:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    break;
                case 62:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    break;
                case 63:
                case 64:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((byte) number3);
                    break;
                case 65:
                {
                    BitsByte bb15 = 0;
                    bb15[0] = ((number & 1) == 1);
                    bb15[1] = ((number & 2) == 2);
                    bb15[2] = ((number5 & 1) == 1);
                    bb15[3] = ((number5 & 2) == 2);
                    writer.Write(bb15);
                    writer.Write((short) number2);
                    writer.Write(number3);
                    writer.Write(number4);
                    break;
                }
                case 68:
                    writer.Write(Main.clientUUID);
                    break;
                case 69:
                    Netplay.GetSectionX((int) number2);
                    Netplay.GetSectionY((int) number3);
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write(text);
                    break;
                case 70:
                    writer.Write((short) number);
                    writer.Write((byte) number2);
                    break;
                case 71:
                    writer.Write(number);
                    writer.Write((int) number2);
                    writer.Write((short) number3);
                    writer.Write((byte) number4);
                    break;
                case 72:
                    for (int num17 = 0; num17 < 40; num17++)
                    {
                        writer.Write((short) Main.travelShop[num17]);
                    }
                    break;
                case 74:
                {
                    writer.Write((byte) Main.anglerQuest);
                    bool value5 = Main.anglerWhoFinishedToday.Contains(text);
                    writer.Write(value5);
                    break;
                }
                case 76:
                    writer.Write((byte) number);
                    writer.Write(Main.player[number].anglerQuestsFinished);
                    break;
                case 77:
                    if (Main.netMode != 2)
                    {
                        return;
                    }
                    writer.Write((short) number);
                    writer.Write((ushort) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    break;
                case 78:
                    writer.Write(number);
                    writer.Write((int) number2);
                    writer.Write((sbyte) number3);
                    writer.Write((sbyte) number4);
                    break;
                case 79:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((short) number3);
                    writer.Write((short) number4);
                    writer.Write((byte) number5);
                    writer.Write((sbyte) number6);
                    writer.Write(number7 == 1);
                    break;
                case 80:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    break;
                case 81:
                {
                    writer.Write(number2);
                    writer.Write(number3);
                    Color c = default(Color);
                    c.PackedValue = (uint) number;
                    writer.WriteRGB(c);
                    writer.Write(text);
                    break;
                }
                case 83:
                {
                    int num18 = number;
                    if (num18 < 0 && num18 >= 251)
                    {
                        num18 = 1;
                    }
                    int value6 = NPC.killCount[num18];
                    writer.Write((short) num18);
                    writer.Write(value6);
                    break;
                }
                case 84:
                {
                    byte b3 = (byte) number;
                    float stealth = Main.player[(int) b3].stealth;
                    writer.Write(b3);
                    writer.Write(stealth);
                    break;
                }
                case 85:
                {
                    byte value7 = (byte) number;
                    writer.Write(value7);
                    break;
                }
                case 86:
                {
                    writer.Write(number);
                    bool flag2 = TileEntity.ByID.ContainsKey(number);
                    writer.Write(flag2);
                    if (flag2)
                    {
                        TileEntity.Write(writer, TileEntity.ByID[number]);
                    }
                    break;
                }
                case 87:
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    writer.Write((byte) number3);
                    break;
                case 88:
                {
                    BitsByte bb16 = (byte) number2;
                    BitsByte bb17 = (byte) number3;
                    writer.Write((short) number);
                    writer.Write(bb16);
                    Item item4 = Main.item[number];
                    if (bb16[0])
                    {
                        writer.Write(item4.color.PackedValue);
                    }
                    if (bb16[1])
                    {
                        writer.Write((ushort) item4.damage);
                    }
                    if (bb16[2])
                    {
                        writer.Write(item4.knockBack);
                    }
                    if (bb16[3])
                    {
                        writer.Write((ushort) item4.useAnimation);
                    }
                    if (bb16[4])
                    {
                        writer.Write((ushort) item4.useTime);
                    }
                    if (bb16[5])
                    {
                        writer.Write((short) item4.shoot);
                    }
                    if (bb16[6])
                    {
                        writer.Write(item4.shootSpeed);
                    }
                    if (bb16[7])
                    {
                        writer.Write(bb17);
                        if (bb17[0])
                        {
                            writer.Write((ushort) item4.width);
                        }
                        if (bb17[1])
                        {
                            writer.Write((ushort) item4.height);
                        }
                        if (bb17[2])
                        {
                            writer.Write(item4.scale);
                        }
                        if (bb17[3])
                        {
                            writer.Write((short) item4.ammo);
                        }
                        if (bb17[4])
                        {
                            writer.Write((short) item4.useAmmo);
                        }
                        if (bb17[5])
                        {
                            writer.Write(item4.notAmmo);
                        }
                    }
                    break;
                }
                case 89:
                {
                    writer.Write((short) number);
                    writer.Write((short) number2);
                    Item item5 = Main.player[(int) number4].inventory[(int) number3];
                    writer.Write((short) item5.netID);
                    writer.Write(item5.prefix);
                    writer.Write(item5.stack);
                    break;
                }
                case 91:
                    writer.Write(number);
                    writer.Write((byte) number2);
                    if (number2 != 255f)
                    {
                        writer.Write((ushort) number3);
                        writer.Write((byte) number4);
                        writer.Write((byte) number5);
                        if (number5 < 0)
                        {
                            writer.Write((short) number6);
                        }
                    }
                    break;
                case 92:
                    writer.Write((short) number);
                    writer.Write(number2);
                    writer.Write(number3);
                    writer.Write(number4);
                    break;
                case 95:
                    writer.Write((ushort) number);
                    break;
                case 96:
                {
                    writer.Write((byte) number);
                    Player player5 = Main.player[number];
                    writer.Write((short) number4);
                    writer.Write(number2);
                    writer.Write(number3);
                    writer.WriteVector2(player5.velocity);
                    break;
                }
                case 97:
                    writer.Write((short) number);
                    break;
                case 98:
                    writer.Write((short) number);
                    break;
                case 99:
                    writer.Write((byte) number);
                    writer.WriteVector2(Main.player[number].MinionTargetPoint);
                    break;
                case 100:
                {
                    writer.Write((ushort) number);
                    NPC nPC2 = Main.npc[number];
                    writer.Write((short) number4);
                    writer.Write(number2);
                    writer.Write(number3);
                    writer.WriteVector2(nPC2.velocity);
                    break;
                }
                case 101:
                    writer.Write((ushort) NPC.ShieldStrengthTowerSolar);
                    writer.Write((ushort) NPC.ShieldStrengthTowerVortex);
                    writer.Write((ushort) NPC.ShieldStrengthTowerNebula);
                    writer.Write((ushort) NPC.ShieldStrengthTowerStardust);
                    break;
                case 102:
                    writer.Write((byte) number);
                    writer.Write((byte) number2);
                    writer.Write(number3);
                    writer.Write(number4);
                    break;
                case 103:
                    writer.Write(NPC.MoonLordCountdown);
                    break;
                case 104:
                    writer.Write((byte) number);
                    writer.Write((short) number2);
                    writer.Write(((short) number3 < 0) ? 0f : number3);
                    writer.Write((byte) number4);
                    writer.Write(number5);
                    writer.Write((byte) number6);
                    break;
            }
            int num19 = (int) writer.BaseStream.Position;
            writer.BaseStream.Position = position;
            writer.Write((short) num19);
            writer.BaseStream.Position = (long) num19;

            byte[] packetContents = ms.ToArray();
            ms.Dispose();
            writer.Dispose();

            if (remoteClient == -1)
            {
                if (msgType == 34 || msgType == 69)
                {
                    for (int num20 = 0; num20 < 256; num20++)
                    {
                        if (num20 != ignoreClient && NetMessage.buffer[num20].broadcast && Netplay.Clients[num20].Socket.IsConnected())
                        {
                            try
                            {
                                NetMessage.buffer[num20].spamCount++;
                                Main.txMsg++;
                                Main.txData += num19;

                                var seg = Netplay.Clients[num20].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                Netplay.Clients[num20].sendQueue.Enqueue(seg);

                                //Netplay.Clients[num20].Socket.AsyncSend(packetContents, 0, num19,
                                //	new SocketSendCallback(Netplay.Clients[num20].ServerWriteCallBack), null);
                            }
                            catch (Exception ex)
                            {
            #if DEBUG
                                        Console.WriteLine(ex);
                                        System.Diagnostics.Debugger.Break();

            #endif
                            }
                        }
                    }
                }
                else if (msgType == 20)
                {
                    for (int num21 = 0; num21 < 256; num21++)
                    {
                        if (num21 != ignoreClient && NetMessage.buffer[num21].broadcast && Netplay.Clients[num21].Socket.IsConnected() &&
                            Netplay.Clients[num21].SectionRange(number, (int) number2, (int) number3))
                        {
                            try
                            {
                                NetMessage.buffer[num21].spamCount++;
                                Main.txMsg++;
                                Main.txData += num19;

                                var seg = Netplay.Clients[num21].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                Netplay.Clients[num21].sendQueue.Enqueue(seg);
                                ;

                                //Netplay.Clients[num21].Socket.AsyncSend(packetContents, 0, num19,
                                //	new SocketSendCallback(Netplay.Clients[num21].ServerWriteCallBack), null);
                            }
                            catch (Exception ex)
                            {
            #if DEBUG
                                        Console.WriteLine(ex);
                                        System.Diagnostics.Debugger.Break();

            #endif
                            }
                        }
                    }
                }
                else if (msgType == 23)
                {
                    NPC nPC3 = Main.npc[number];
                    for (int num22 = 0; num22 < 256; num22++)
                    {
                        if (num22 != ignoreClient && NetMessage.buffer[num22].broadcast && Netplay.Clients[num22].Socket.IsConnected())
                        {
                            bool flag3 = false;
                            if (nPC3.boss || nPC3.netAlways || nPC3.townNPC || !nPC3.active)
                            {
                                flag3 = true;
                            }
                            else if (nPC3.netSkip <= 0)
                            {
                                Rectangle rect = Main.player[num22].getRect();
                                Rectangle rect2 = nPC3.getRect();
                                rect2.X -= 2500;
                                rect2.Y -= 2500;
                                rect2.Width += 5000;
                                rect2.Height += 5000;
                                if (rect.Intersects(rect2))
                                {
                                    flag3 = true;
                                }
                            }
                            else
                            {
                                flag3 = true;
                            }
                            if (flag3)
                            {
                                try
                                {
                                    NetMessage.buffer[num22].spamCount++;
                                    Main.txMsg++;
                                    Main.txData += num19;

                                    var seg = Netplay.Clients[num22].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                    Netplay.Clients[num22].sendQueue.Enqueue(seg);

                                    //Netplay.Clients[num22].Socket.AsyncSend(packetContents, 0, num19,
                                    //	new SocketSendCallback(Netplay.Clients[num22].ServerWriteCallBack), null);
                                }
                                catch (Exception ex)
                                {
            #if DEBUG
                                            Console.WriteLine(ex);
                                            System.Diagnostics.Debugger.Break();

            #endif
                                }
                            }
                        }
                    }
                    nPC3.netSkip++;
                    if (nPC3.netSkip > 4)
                    {
                        nPC3.netSkip = 0;
                    }
                }
                else if (msgType == 28)
                {
                    NPC nPC4 = Main.npc[number];
                    for (int num23 = 0; num23 < 256; num23++)
                    {
                        if (num23 != ignoreClient && NetMessage.buffer[num23].broadcast && Netplay.Clients[num23].Socket.IsConnected())
                        {
                            bool flag4 = false;
                            if (nPC4.life <= 0)
                            {
                                flag4 = true;
                            }
                            else
                            {
                                Rectangle rect3 = Main.player[num23].getRect();
                                Rectangle rect4 = nPC4.getRect();
                                rect4.X -= 3000;
                                rect4.Y -= 3000;
                                rect4.Width += 6000;
                                rect4.Height += 6000;
                                if (rect3.Intersects(rect4))
                                {
                                    flag4 = true;
                                }
                            }
                            if (flag4)
                            {
                                try
                                {
                                    NetMessage.buffer[num23].spamCount++;
                                    Main.txMsg++;
                                    Main.txData += num19;

                                    var seg = Netplay.Clients[num23].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                    Netplay.Clients[num23].sendQueue.Enqueue(seg);
                                    //	Netplay.Clients[num23].Socket.AsyncSend(packetContents, 0, num19,
                                    //		new SocketSendCallback(Netplay.Clients[num23].ServerWriteCallBack), null);
                                }
                                catch (Exception ex)
                                {
            #if DEBUG
                                            Console.WriteLine(ex);
                                            System.Diagnostics.Debugger.Break();

            #endif
                                }
                            }
                        }
                    }
                }
                else if (msgType == 13)
                {
                    for (int num24 = 0; num24 < 256; num24++)
                    {
                        if (num24 != ignoreClient && NetMessage.buffer[num24].broadcast && Netplay.Clients[num24].Socket.IsConnected())
                        {
                            try
                            {
                                NetMessage.buffer[num24].spamCount++;
                                Main.txMsg++;
                                Main.txData += num19;

                                var seg = Netplay.Clients[num24].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                Netplay.Clients[num24].sendQueue.Enqueue(seg);

                                //Netplay.Clients[num24].Socket.AsyncSend(packetContents, 0, num19,
                                //	new SocketSendCallback(Netplay.Clients[num24].ServerWriteCallBack), null);
                            }
                            catch (Exception ex)
                            {
            #if DEBUG
                                        Console.WriteLine(ex);
                                        System.Diagnostics.Debugger.Break();

            #endif
                            }
                        }
                    }
                    Main.player[number].netSkip++;
                    if (Main.player[number].netSkip > 2)
                    {
                        Main.player[number].netSkip = 0;
                    }
                }
                else if (msgType == 27)
                {
                    Projectile projectile2 = Main.projectile[number];
                    for (int num25 = 0; num25 < 256; num25++)
                    {
                        if (num25 != ignoreClient && NetMessage.buffer[num25].broadcast && Netplay.Clients[num25].Socket.IsConnected())
                        {
                            bool flag5 = false;
                            if (projectile2.type == 12 || Main.projPet[projectile2.type] || projectile2.aiStyle == 11 ||
                                projectile2.netImportant)
                            {
                                flag5 = true;
                            }
                            else
                            {
                                Rectangle rect5 = Main.player[num25].getRect();
                                Rectangle rect6 = projectile2.getRect();
                                rect6.X -= 5000;
                                rect6.Y -= 5000;
                                rect6.Width += 10000;
                                rect6.Height += 10000;
                                if (rect5.Intersects(rect6))
                                {
                                    flag5 = true;
                                }
                            }
                            if (flag5)
                            {
                                try
                                {
                                    NetMessage.buffer[num25].spamCount++;
                                    Main.txMsg++;
                                    Main.txData += num19;

                                    var seg = Netplay.Clients[num25].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                    Netplay.Clients[num25].sendQueue.Enqueue(seg);

                                    //Netplay.Clients[num25].Socket.AsyncSend(packetContents, 0, num19,
                                    //	new SocketSendCallback(Netplay.Clients[num25].ServerWriteCallBack), null);
                                }
                                catch (Exception ex)
                                {
            #if DEBUG
                                            Console.WriteLine(ex);
                                            System.Diagnostics.Debugger.Break();

            #endif
                                }
                            }
                        }
                    }
                }
                else
                {
                    for (int num26 = 0; num26 < 256; num26++)
                    {
                        if (num26 != ignoreClient &&
                            (NetMessage.buffer[num26].broadcast || (Netplay.Clients[num26].State >= 3 && msgType == 10)) &&
                            Netplay.Clients[num26].Socket.IsConnected())
                        {
                            try
                            {
                                NetMessage.buffer[num26].spamCount++;
                                Main.txMsg++;
                                Main.txData += num19;

                                var seg = Netplay.Clients[num26].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                                Netplay.Clients[num26].sendQueue.Enqueue(seg);

                                //Netplay.Clients[num26].Socket.AsyncSend(packetContents, 0, num19,
                                //	new SocketSendCallback(Netplay.Clients[num26].ServerWriteCallBack), null);
                            }
                            catch (Exception ex)
                            {
            #if DEBUG
                                        Console.WriteLine(ex);
                                        System.Diagnostics.Debugger.Break();

            #endif
                            }
                        }
                    }
                }
            }
            else if (Netplay.Clients[remoteClient].Socket.IsConnected())
            {
                try
                {
                    NetMessage.buffer[remoteClient].spamCount++;
                    Main.txMsg++;
                    Main.txData += num19;

                    var seg = Netplay.Clients[remoteClient].sendQueue.AllocAndCopy(ref packetContents, 0, packetContents.Length);
                    Netplay.Clients[remoteClient].sendQueue.Enqueue(seg);

                    //Netplay.Clients[remoteClient].Socket.AsyncSend(packetContents, 0, num19,
                    //	new SocketSendCallback(Netplay.Clients[remoteClient].ServerWriteCallBack), null);
                }
                catch (Exception ex)
                {
            #if DEBUG
                            Console.WriteLine(ex);
                            System.Diagnostics.Debugger.Break();

            #endif
                }
            }
            if (msgType == 2 && Main.netMode == 2)
            {
                Netplay.Clients[num].PendingTermination = true;
            }
        }
Exemplo n.º 3
0
        public void SaveSuspendedState(BinaryWriter writer)
        {
            writer.Write((int)bitmapFormat);
            writer.WriteByteArray(bitmapData);

            writer.WriteVector2(Size);

            writer.WriteCollection(Edits, edit => edit.SaveSuspendedState(writer));
        }
Exemplo n.º 4
0
		public static void SendData(int msgType, int remoteClient = -1, int ignoreClient = -1, string text = "", int number = 0, float number2 = 0f, float number3 = 0f, float number4 = 0f, int number5 = 0)
		{
			if (Main.netMode == 0)
			{
				return;
			}
			int num = 256;
			if (Main.netMode == 2 && remoteClient >= 0)
			{
				num = remoteClient;
			}
			lock (NetMessage.buffer[num])
			{
				MemoryStream output = new MemoryStream(NetMessage.buffer[num].writeBuffer);
				BinaryWriter binaryWriter = new BinaryWriter(output);
				long position = binaryWriter.BaseStream.Position;
				binaryWriter.BaseStream.Position += 2L;
				binaryWriter.Write((byte)msgType);
				switch (msgType)
				{
				case 1:
					binaryWriter.Write("Terraria" + Main.curRelease);
					break;
				case 2:
					binaryWriter.Write(text);
					if (Main.dedServ)
					{
						Console.WriteLine(Netplay.serverSock[num].tcpClient.Client.RemoteEndPoint.ToString() + " was booted: " + text);
					}
					break;
				case 3:
					binaryWriter.Write((byte)remoteClient);
					break;
				case 4:
				{
					Player player = Main.player[number];
					binaryWriter.Write((byte)number);
					binaryWriter.Write(player.male ? 0 : 1);
					binaryWriter.Write((byte)player.hair);
					binaryWriter.Write(text);
					binaryWriter.Write(player.hairDye);
					binaryWriter.Write(player.hideVisual);
					binaryWriter.WriteRGB(player.hairColor);
					binaryWriter.WriteRGB(player.skinColor);
					binaryWriter.WriteRGB(player.eyeColor);
					binaryWriter.WriteRGB(player.shirtColor);
					binaryWriter.WriteRGB(player.underShirtColor);
					binaryWriter.WriteRGB(player.pantsColor);
					binaryWriter.WriteRGB(player.shoeColor);
					binaryWriter.Write(player.difficulty);
					break;
				}
				case 5:
				{
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					Player player2 = Main.player[number];
					Item item;
					if (number2 < 59f)
					{
						item = player2.inventory[(int)number2];
					}
					else
					{
						if (number2 >= 75f && number2 <= 82f)
						{
							item = player2.dye[(int)number2 - 58 - 17];
						}
						else
						{
							item = player2.armor[(int)number2 - 58 - 1];
						}
					}
					if (item.name == "" || item.stack == 0 || item.type == 0)
					{
						item.SetDefaults(0, false);
					}
					int num2 = item.stack;
					int netID = item.netID;
					if (num2 < 0)
					{
						num2 = 0;
					}
					binaryWriter.Write((short)num2);
					binaryWriter.Write((byte)number3);
					binaryWriter.Write((short)netID);
					break;
				}
				case 7:
				{
					binaryWriter.Write((int)Main.time);
					BitsByte bb = 0;
					bb[0] = Main.dayTime;
					bb[1] = Main.bloodMoon;
					bb[2] = Main.eclipse;
					binaryWriter.Write(bb);
					binaryWriter.Write((byte)Main.moonPhase);
					binaryWriter.Write((short)Main.maxTilesX);
					binaryWriter.Write((short)Main.maxTilesY);
					binaryWriter.Write((short)Main.spawnTileX);
					binaryWriter.Write((short)Main.spawnTileY);
					binaryWriter.Write((short)Main.worldSurface);
					binaryWriter.Write((short)Main.rockLayer);
					binaryWriter.Write(Main.worldID);
					binaryWriter.Write(Main.worldName);
					binaryWriter.Write((byte)Main.moonType);
					binaryWriter.Write((byte)WorldGen.treeBG);
					binaryWriter.Write((byte)WorldGen.corruptBG);
					binaryWriter.Write((byte)WorldGen.jungleBG);
					binaryWriter.Write((byte)WorldGen.snowBG);
					binaryWriter.Write((byte)WorldGen.hallowBG);
					binaryWriter.Write((byte)WorldGen.crimsonBG);
					binaryWriter.Write((byte)WorldGen.desertBG);
					binaryWriter.Write((byte)WorldGen.oceanBG);
					binaryWriter.Write((byte)Main.iceBackStyle);
					binaryWriter.Write((byte)Main.jungleBackStyle);
					binaryWriter.Write((byte)Main.hellBackStyle);
					binaryWriter.Write(Main.windSpeedSet);
					binaryWriter.Write((byte)Main.numClouds);
					for (int i = 0; i < 3; i++)
					{
						binaryWriter.Write(Main.treeX[i]);
					}
					for (int j = 0; j < 4; j++)
					{
						binaryWriter.Write((byte)Main.treeStyle[j]);
					}
					for (int k = 0; k < 3; k++)
					{
						binaryWriter.Write(Main.caveBackX[k]);
					}
					for (int l = 0; l < 4; l++)
					{
						binaryWriter.Write((byte)Main.caveBackStyle[l]);
					}
					if (!Main.raining)
					{
						Main.maxRaining = 0f;
					}
					binaryWriter.Write(Main.maxRaining);
					BitsByte bb2 = 0;
					bb2[0] = WorldGen.shadowOrbSmashed;
					bb2[1] = NPC.downedBoss1;
					bb2[2] = NPC.downedBoss2;
					bb2[3] = NPC.downedBoss3;
					bb2[4] = Main.hardMode;
					bb2[5] = NPC.downedClown;
					bb2[7] = NPC.downedPlantBoss;
					binaryWriter.Write(bb2);
					BitsByte bb3 = 0;
					bb3[0] = NPC.downedMechBoss1;
					bb3[1] = NPC.downedMechBoss2;
					bb3[2] = NPC.downedMechBoss3;
					bb3[3] = NPC.downedMechBossAny;
					bb3[4] = (Main.cloudBGActive >= 1f);
					bb3[5] = WorldGen.crimson;
					bb3[6] = Main.pumpkinMoon;
					bb3[7] = Main.snowMoon;
					binaryWriter.Write(bb3);
					break;
				}
				case 8:
					binaryWriter.Write(number);
					binaryWriter.Write((int)number2);
					break;
				case 9:
					binaryWriter.Write(number);
					binaryWriter.Write(text);
					break;
				case 10:
				{
					int num3 = NetMessage.CompressTileBlock(number, (int)number2, (short)number3, (short)number4, NetMessage.buffer[num].writeBuffer, (int)binaryWriter.BaseStream.Position, true);
					binaryWriter.BaseStream.Position += (long)num3;
					break;
				}
				case 11:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((short)number4);
					break;
				case 12:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)Main.player[number].SpawnX);
					binaryWriter.Write((short)Main.player[number].SpawnY);
					break;
				case 13:
				{
					Player player3 = Main.player[number];
					binaryWriter.Write((byte)number);
					BitsByte bb4 = 0;
					bb4[0] = player3.controlUp;
					bb4[1] = player3.controlDown;
					bb4[2] = player3.controlLeft;
					bb4[3] = player3.controlRight;
					bb4[4] = player3.controlJump;
					bb4[5] = player3.controlUseItem;
					bb4[6] = (player3.direction == 1);
					binaryWriter.Write(bb4);
					BitsByte bb5 = 0;
					bb5[0] = player3.pulley;
					bb5[1] = (player3.pulley && player3.pulleyDir == 2);
					bb5[2] = (player3.velocity != Vector2.Zero);
					binaryWriter.Write(bb5);
					binaryWriter.Write((byte)player3.selectedItem);
					binaryWriter.WriteVector2(player3.position);
					binaryWriter.WriteVector2(player3.velocity);
					break;
				}
				case 14:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					break;
				case 16:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)Main.player[number].statLife);
					binaryWriter.Write((short)Main.player[number].statLifeMax);
					break;
				case 17:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((short)number4);
					binaryWriter.Write((byte)number5);
					break;
				case 18:
					binaryWriter.Write(Main.dayTime ? 1 : 0);
					binaryWriter.Write((int)Main.time);
					binaryWriter.Write(Main.sunModY);
					binaryWriter.Write(Main.moonModY);
					break;
				case 19:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((number4 == 1f) ? 1 : 0);
					break;
				case 20:
				{
					int num4 = (int)number2;
					int num5 = (int)number3;
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)num4);
					binaryWriter.Write((short)num5);
					for (int m = num4; m < num4 + number; m++)
					{
						for (int n = num5; n < num5 + number; n++)
						{
							BitsByte bb6 = 0;
							BitsByte bb7 = 0;
							byte b = 0;
							byte b2 = 0;
							Tile tile = Main.tile[m, n];
							bb6[0] = tile.active();
							bb6[2] = (tile.wall > 0);
							bb6[3] = (tile.liquid > 0 && Main.netMode == 2);
							bb6[4] = tile.wire();
							bb6[5] = tile.halfBrick();
							bb6[6] = tile.actuator();
							bb6[7] = tile.inActive();
							bb7[0] = tile.wire2();
							bb7[1] = tile.wire3();
							if (tile.active() && tile.color() > 0)
							{
								bb7[2] = true;
								b = tile.color();
							}
							if (tile.wall > 0 && tile.wallColor() > 0)
							{
								bb7[3] = true;
								b2 = tile.wallColor();
							}
							bb7 += (byte)(tile.slope() << 4);
							binaryWriter.Write(bb6);
							binaryWriter.Write(bb7);
							if (b > 0)
							{
								binaryWriter.Write(b);
							}
							if (b2 > 0)
							{
								binaryWriter.Write(b2);
							}
							if (tile.active())
							{
								binaryWriter.Write(tile.type);
								if (Main.tileFrameImportant[(int)tile.type])
								{
									binaryWriter.Write(tile.frameX);
									binaryWriter.Write(tile.frameY);
								}
							}
							if (tile.wall > 0)
							{
								binaryWriter.Write(tile.wall);
							}
							if (tile.liquid > 0 && Main.netMode == 2)
							{
								binaryWriter.Write(tile.liquid);
								binaryWriter.Write(tile.liquidType());
							}
						}
					}
					break;
				}
				case 21:
				{
					Item item2 = Main.item[number];
					binaryWriter.Write((short)number);
					binaryWriter.WriteVector2(item2.position);
					binaryWriter.WriteVector2(item2.velocity);
					binaryWriter.Write((short)item2.stack);
					binaryWriter.Write(item2.prefix);
					binaryWriter.Write((byte)number2);
					short value = 0;
					if (item2.active && item2.stack > 0)
					{
						value = (short)item2.netID;
					}
					binaryWriter.Write(value);
					break;
				}
				case 22:
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)Main.item[number].owner);
					break;
				case 23:
				{
					NPC nPC = Main.npc[number];
					binaryWriter.Write((short)number);
					binaryWriter.WriteVector2(nPC.position);
					binaryWriter.WriteVector2(nPC.velocity);
					binaryWriter.Write((byte)nPC.target);
					int num6 = nPC.life;
					if (!nPC.active)
					{
						num6 = 0;
					}
					if (!nPC.active || nPC.life <= 0)
					{
						nPC.netSkip = 0;
					}
					if (nPC.name == null)
					{
						nPC.name = "";
					}
					short value2 = (short)nPC.netID;
					bool[] array = new bool[4];
					BitsByte bb8 = 0;
					bb8[0] = (nPC.direction > 0);
					bb8[1] = (nPC.directionY > 0);
					bb8[2] = (array[0] = (nPC.ai[0] != 0f));
					bb8[3] = (array[1] = (nPC.ai[1] != 0f));
					bb8[4] = (array[2] = (nPC.ai[2] != 0f));
					bb8[5] = (array[3] = (nPC.ai[3] != 0f));
					bb8[6] = (nPC.spriteDirection > 0);
					bb8[7] = (num6 == nPC.lifeMax);
					binaryWriter.Write(bb8);
					for (int num7 = 0; num7 < NPC.maxAI; num7++)
					{
						if (array[num7])
						{
							binaryWriter.Write(nPC.ai[num7]);
						}
					}
					binaryWriter.Write(value2);
					if (!bb8[7])
					{
						if (Main.npcLifeBytes[nPC.netID] == 2)
						{
							binaryWriter.Write((short)num6);
						}
						else
						{
							if (Main.npcLifeBytes[nPC.netID] == 4)
							{
								binaryWriter.Write(num6);
							}
							else
							{
								binaryWriter.Write((sbyte)num6);
							}
						}
					}
					if (Main.npcCatchable[nPC.type])
					{
						binaryWriter.Write((byte)nPC.releaseOwner);
					}
					break;
				}
				case 24:
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)number2);
					break;
				case 25:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					binaryWriter.Write((byte)number3);
					binaryWriter.Write((byte)number4);
					binaryWriter.Write(text);
					break;
				case 26:
				{
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)(number2 + 1f));
					binaryWriter.Write((short)number3);
					binaryWriter.Write(text);
					BitsByte bb9 = 0;
					bb9[0] = (number4 == 1f);
					bb9[1] = (number5 == 1);
					binaryWriter.Write(bb9);
					break;
				}
				case 27:
				{
					Projectile projectile = Main.projectile[number];
					binaryWriter.Write((short)projectile.identity);
					binaryWriter.WriteVector2(projectile.position);
					binaryWriter.WriteVector2(projectile.velocity);
					binaryWriter.Write(projectile.knockBack);
					binaryWriter.Write((short)projectile.damage);
					binaryWriter.Write((byte)projectile.owner);
					binaryWriter.Write((short)projectile.type);
					BitsByte bb10 = 0;
					for (int num8 = 0; num8 < Projectile.maxAI; num8++)
					{
						if (projectile.ai[num8] != 0f)
						{
							bb10[num8] = true;
						}
					}
					binaryWriter.Write(bb10);
					for (int num9 = 0; num9 < Projectile.maxAI; num9++)
					{
						if (bb10[num9])
						{
							binaryWriter.Write(projectile.ai[num9]);
						}
					}
					break;
				}
				case 28:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write(number3);
					binaryWriter.Write((byte)(number4 + 1f));
					binaryWriter.Write((byte)number5);
					break;
				case 29:
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)number2);
					break;
				case 30:
					binaryWriter.Write((byte)number);
					binaryWriter.Write(Main.player[number].hostile);
					break;
				case 31:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					break;
				case 32:
				{
					Item item3 = Main.chest[number].item[(int)((byte)number2)];
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)number2);
					short value3 = (short)item3.netID;
					if (item3.name == null)
					{
						value3 = 0;
					}
					binaryWriter.Write((short)item3.stack);
					binaryWriter.Write(item3.prefix);
					binaryWriter.Write(value3);
					break;
				}
				case 33:
				{
					int num10 = 0;
					int num11 = 0;
					int num12 = 0;
					string text2 = null;
					if (number > -1)
					{
						num10 = Main.chest[number].x;
						num11 = Main.chest[number].y;
					}
					if (number2 == 1f)
					{
						num12 = (int)((byte)text.Length);
						if (num12 == 0 || num12 > 20)
						{
							num12 = 255;
						}
						else
						{
							text2 = text;
						}
					}
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)num10);
					binaryWriter.Write((short)num11);
					binaryWriter.Write((byte)num12);
					if (text2 != null)
					{
						binaryWriter.Write(text2);
					}
					break;
				}
				case 34:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((short)number4);
					if (Main.netMode == 2)
					{
						Netplay.GetSectionX((int)number2);
						Netplay.GetSectionY((int)number3);
						binaryWriter.Write((short)number5);
					}
					break;
				case 35:
				case 66:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)number2);
					break;
				case 36:
				{
					Player player4 = Main.player[number];
					binaryWriter.Write((byte)number);
					BitsByte bb11 = 0;
					bb11[0] = player4.zoneEvil;
					bb11[1] = player4.zoneMeteor;
					bb11[2] = player4.zoneDungeon;
					bb11[3] = player4.zoneJungle;
					bb11[4] = player4.zoneHoly;
					bb11[5] = player4.zoneSnow;
					bb11[6] = player4.zoneBlood;
					bb11[7] = player4.zoneCandle;
					binaryWriter.Write(bb11);
					break;
				}
				case 38:
					binaryWriter.Write(text);
					break;
				case 39:
					binaryWriter.Write((short)number);
					break;
				case 40:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)Main.player[number].talkNPC);
					break;
				case 41:
					binaryWriter.Write((byte)number);
					binaryWriter.Write(Main.player[number].itemRotation);
					binaryWriter.Write((short)Main.player[number].itemAnimation);
					break;
				case 42:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)Main.player[number].statMana);
					binaryWriter.Write((short)Main.player[number].statManaMax);
					break;
				case 43:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((short)number2);
					break;
				case 44:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)(number2 + 1f));
					binaryWriter.Write((short)number3);
					binaryWriter.Write((byte)number4);
					binaryWriter.Write(text);
					break;
				case 45:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)Main.player[number].team);
					break;
				case 46:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					break;
				case 47:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)Main.sign[number].x);
					binaryWriter.Write((short)Main.sign[number].y);
					binaryWriter.Write(Main.sign[number].text);
					break;
				case 48:
				{
					Tile tile2 = Main.tile[number, (int)number2];
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write(tile2.liquid);
					binaryWriter.Write(tile2.liquidType());
					break;
				}
				case 50:
					binaryWriter.Write((byte)number);
					for (int num13 = 0; num13 < 22; num13++)
					{
						binaryWriter.Write((byte)Main.player[number].buffType[num13]);
					}
					break;
				case 51:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					break;
				case 52:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((short)number4);
					break;
				case 53:
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)number2);
					binaryWriter.Write((short)number3);
					break;
				case 54:
					binaryWriter.Write((short)number);
					for (int num14 = 0; num14 < 5; num14++)
					{
						binaryWriter.Write((byte)Main.npc[number].buffType[num14]);
						binaryWriter.Write((short)Main.npc[number].buffTime[num14]);
					}
					break;
				case 55:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					binaryWriter.Write((short)number3);
					break;
				case 56:
				{
					string value4 = null;
					if (Main.netMode == 2)
					{
						value4 = Main.npc[number].displayName;
					}
					else
					{
						if (Main.netMode == 1)
						{
							value4 = text;
						}
					}
					binaryWriter.Write((short)number);
					binaryWriter.Write(value4);
					break;
				}
				case 57:
					binaryWriter.Write(WorldGen.tGood);
					binaryWriter.Write(WorldGen.tEvil);
					binaryWriter.Write(WorldGen.tBlood);
					break;
				case 58:
					binaryWriter.Write((byte)number);
					binaryWriter.Write(number2);
					break;
				case 59:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					break;
				case 60:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((byte)number4);
					break;
				case 61:
					binaryWriter.Write(number);
					binaryWriter.Write((int)number2);
					break;
				case 62:
					binaryWriter.Write((byte)number);
					binaryWriter.Write((byte)number2);
					break;
				case 63:
				case 64:
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((byte)number3);
					break;
				case 65:
				{
					BitsByte bb12 = 0;
					bb12[0] = ((number & 1) == 1);
					bb12[1] = ((number & 2) == 2);
					bb12[2] = ((number5 & 1) == 1);
					bb12[3] = ((number5 & 2) == 2);
					binaryWriter.Write(bb12);
					binaryWriter.Write((short)number2);
					binaryWriter.Write(number3);
					binaryWriter.Write(number4);
					break;
				}
				case 68:
					binaryWriter.Write(Main.clientUUID);
					break;
				case 69:
					Netplay.GetSectionX((int)number2);
					Netplay.GetSectionY((int)number3);
					binaryWriter.Write((short)number);
					binaryWriter.Write((short)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write(text);
					break;
				case 70:
					binaryWriter.Write((short)number);
					binaryWriter.Write((byte)number2);
					break;
				case 71:
					binaryWriter.Write(number);
					binaryWriter.Write((int)number2);
					binaryWriter.Write((short)number3);
					binaryWriter.Write((byte)number4);
					break;
				case 72:
					for (int num15 = 0; num15 < Chest.maxItems; num15++)
					{
						binaryWriter.Write((short)Main.travelShop[num15]);
					}
					break;
				case 74:
				{
					binaryWriter.Write((byte)Main.anglerQuest);
					bool value5 = Main.anglerWhoFinishedToday.Contains(text);
					binaryWriter.Write(value5);
					break;
				}
				case 76:
					binaryWriter.Write((byte)number);
					binaryWriter.Write(Main.player[number].anglerQuestsFinished);
					break;
				}
				int num16 = (int)binaryWriter.BaseStream.Position;
				binaryWriter.BaseStream.Position = position;
				binaryWriter.Write((short)num16);
				binaryWriter.BaseStream.Position = (long)num16;
				if (Main.netMode == 1)
				{
					if (!Netplay.clientSock.tcpClient.Connected)
					{
						goto IL_22E9;
					}
					try
					{
						NetMessage.buffer[num].spamCount++;
						Main.txMsg++;
						Main.txData += num16;
						Main.txMsgType[msgType]++;
						Main.txDataType[msgType] += num16;
						Netplay.clientSock.networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.clientSock.ClientWriteCallBack), Netplay.clientSock.networkStream);
						goto IL_22E9;
					}
					catch
					{
						goto IL_22E9;
					}
				}
				if (remoteClient == -1)
				{
					if (msgType == 34 || msgType == 69)
					{
						for (int num17 = 0; num17 < 256; num17++)
						{
							if (num17 != ignoreClient && NetMessage.buffer[num17].broadcast && Netplay.serverSock[num17].tcpClient.Connected)
							{
								try
								{
									NetMessage.buffer[num17].spamCount++;
									Main.txMsg++;
									Main.txData += num16;
									Main.txMsgType[msgType]++;
									Main.txDataType[msgType] += num16;
									Netplay.serverSock[num17].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num17].ServerWriteCallBack), Netplay.serverSock[num17].networkStream);
								}
								catch
								{
								}
							}
						}
					}
					else
					{
						if (msgType == 20)
						{
							for (int num18 = 0; num18 < 256; num18++)
							{
								if (num18 != ignoreClient && NetMessage.buffer[num18].broadcast && Netplay.serverSock[num18].tcpClient.Connected && Netplay.serverSock[num18].SectionRange(number, (int)number2, (int)number3))
								{
									try
									{
										NetMessage.buffer[num18].spamCount++;
										Main.txMsg++;
										Main.txData += num16;
										Main.txMsgType[msgType]++;
										Main.txDataType[msgType] += num16;
										Netplay.serverSock[num18].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num18].ServerWriteCallBack), Netplay.serverSock[num18].networkStream);
									}
									catch
									{
									}
								}
							}
						}
						else
						{
							if (msgType == 23)
							{
								NPC nPC2 = Main.npc[number];
								for (int num19 = 0; num19 < 256; num19++)
								{
									if (num19 != ignoreClient && NetMessage.buffer[num19].broadcast && Netplay.serverSock[num19].tcpClient.Connected)
									{
										bool flag2 = false;
										if (nPC2.boss || nPC2.netAlways || nPC2.townNPC || !nPC2.active)
										{
											flag2 = true;
										}
										else
										{
											if (nPC2.netSkip <= 0)
											{
												Rectangle rect = Main.player[num19].getRect();
												Rectangle rect2 = nPC2.getRect();
												rect2.X -= 2500;
												rect2.Y -= 2500;
												rect2.Width += 5000;
												rect2.Height += 5000;
												if (rect.Intersects(rect2))
												{
													flag2 = true;
												}
											}
											else
											{
												flag2 = true;
											}
										}
										if (flag2)
										{
											try
											{
												NetMessage.buffer[num19].spamCount++;
												Main.txMsg++;
												Main.txData += num16;
												Main.txMsgType[msgType]++;
												Main.txDataType[msgType] += num16;
												Netplay.serverSock[num19].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num19].ServerWriteCallBack), Netplay.serverSock[num19].networkStream);
											}
											catch
											{
											}
										}
									}
								}
								nPC2.netSkip++;
								if (nPC2.netSkip > 4)
								{
									nPC2.netSkip = 0;
								}
							}
							else
							{
								if (msgType == 28)
								{
									NPC nPC3 = Main.npc[number];
									for (int num20 = 0; num20 < 256; num20++)
									{
										if (num20 != ignoreClient && NetMessage.buffer[num20].broadcast && Netplay.serverSock[num20].tcpClient.Connected)
										{
											bool flag3 = false;
											if (nPC3.life <= 0)
											{
												flag3 = true;
											}
											else
											{
												Rectangle rect3 = Main.player[num20].getRect();
												Rectangle rect4 = nPC3.getRect();
												rect4.X -= 3000;
												rect4.Y -= 3000;
												rect4.Width += 6000;
												rect4.Height += 6000;
												if (rect3.Intersects(rect4))
												{
													flag3 = true;
												}
											}
											if (flag3)
											{
												try
												{
													NetMessage.buffer[num20].spamCount++;
													Main.txMsg++;
													Main.txData += num16;
													Main.txMsgType[msgType]++;
													Main.txDataType[msgType] += num16;
													Netplay.serverSock[num20].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num20].ServerWriteCallBack), Netplay.serverSock[num20].networkStream);
												}
												catch
												{
												}
											}
										}
									}
								}
								else
								{
									if (msgType == 13)
									{
										for (int num21 = 0; num21 < 256; num21++)
										{
											if (num21 != ignoreClient && NetMessage.buffer[num21].broadcast && Netplay.serverSock[num21].tcpClient.Connected)
											{
												try
												{
													NetMessage.buffer[num21].spamCount++;
													Main.txMsg++;
													Main.txData += num16;
													Main.txMsgType[msgType]++;
													Main.txDataType[msgType] += num16;
													Netplay.serverSock[num21].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num21].ServerWriteCallBack), Netplay.serverSock[num21].networkStream);
												}
												catch
												{
												}
											}
										}
										Main.player[number].netSkip++;
										if (Main.player[number].netSkip > 2)
										{
											Main.player[number].netSkip = 0;
										}
									}
									else
									{
										if (msgType == 27)
										{
											Projectile projectile2 = Main.projectile[number];
											for (int num22 = 0; num22 < 256; num22++)
											{
												if (num22 != ignoreClient && NetMessage.buffer[num22].broadcast && Netplay.serverSock[num22].tcpClient.Connected)
												{
													bool flag4 = false;
													if (projectile2.type == 12 || Main.projPet[projectile2.type] || projectile2.aiStyle == 11 || projectile2.netImportant)
													{
														flag4 = true;
													}
													else
													{
														Rectangle rect5 = Main.player[num22].getRect();
														Rectangle rect6 = projectile2.getRect();
														rect6.X -= 5000;
														rect6.Y -= 5000;
														rect6.Width += 10000;
														rect6.Height += 10000;
														if (rect5.Intersects(rect6))
														{
															flag4 = true;
														}
													}
													if (flag4)
													{
														try
														{
															NetMessage.buffer[num22].spamCount++;
															Main.txMsg++;
															Main.txData += num16;
															Main.txMsgType[msgType]++;
															Main.txDataType[msgType] += num16;
															Netplay.serverSock[num22].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num22].ServerWriteCallBack), Netplay.serverSock[num22].networkStream);
														}
														catch
														{
														}
													}
												}
											}
										}
										else
										{
											for (int num23 = 0; num23 < 256; num23++)
											{
												if (num23 != ignoreClient && (NetMessage.buffer[num23].broadcast || (Netplay.serverSock[num23].state >= 3 && msgType == 10)) && Netplay.serverSock[num23].tcpClient.Connected)
												{
													try
													{
														NetMessage.buffer[num23].spamCount++;
														Main.txMsg++;
														Main.txData += num16;
														Main.txMsgType[msgType]++;
														Main.txDataType[msgType] += num16;
														Netplay.serverSock[num23].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[num23].ServerWriteCallBack), Netplay.serverSock[num23].networkStream);
													}
													catch
													{
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
				else
				{
					if (Netplay.serverSock[remoteClient].tcpClient.Connected)
					{
						try
						{
							NetMessage.buffer[remoteClient].spamCount++;
							Main.txMsg++;
							Main.txData += num16;
							Main.txMsgType[msgType]++;
							Main.txDataType[msgType] += num16;
							Netplay.serverSock[remoteClient].networkStream.BeginWrite(NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[remoteClient].ServerWriteCallBack), Netplay.serverSock[remoteClient].networkStream);
						}
						catch
						{
						}
					}
				}
				IL_22E9:
				if (Main.verboseNetplay)
				{
					for (int num24 = 0; num24 < num16; num24++)
					{
					}
					for (int num25 = 0; num25 < num16; num25++)
					{
						byte arg_2315_0 = NetMessage.buffer[num].writeBuffer[num25];
					}
				}
				NetMessage.buffer[num].writeLocked = false;
				if (msgType == 19 && Main.netMode == 1)
				{
					NetMessage.SendTileSquare(num, (int)number2, (int)number3, 5);
				}
				if (msgType == 2 && Main.netMode == 2)
				{
					Netplay.serverSock[num].kill = true;
				}
			}
		}