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; }
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; } }
public void SaveSuspendedState(BinaryWriter writer) { writer.Write((int)bitmapFormat); writer.WriteByteArray(bitmapData); writer.WriteVector2(Size); writer.WriteCollection(Edits, edit => edit.SaveSuspendedState(writer)); }
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; } } }