public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); downedSky = flags[0]; }
/*public override void SetDefaults(Item item) * { * List<ItemProperties> itemConfig = ItemConfig.Instance.ItemChanges; * int index = itemConfig.FindIndex(prop => prop.Type == item.type); * if (index != -1) * { * item.CopyItemProperties(itemConfig[index]); * } * }*/ public override void NetSend(Item item, BinaryWriter writer) { Item defaultItem = new Item(); defaultItem.SetDefaults(item.type); BitsByte flags1 = new BitsByte(); BitsByte flags2 = new BitsByte(); BitsByte flags3 = new BitsByte(); BitsByte flags4 = new BitsByte(); BitsByte flags5 = new BitsByte(); if (item.autoReuse != defaultItem.autoReuse) { flags2[0] = true; } if (item.consumable != defaultItem.consumable) { flags2[1] = true; } if (item.potion != defaultItem.potion) { flags2[2] = true; } if (item.accessory != defaultItem.accessory) { flags2[3] = true; } int damageType = item.DamageType(); if (damageType != defaultItem.DamageType()) { flags2[4] = true; } if (item.damage != defaultItem.damage) { flags2[5] = true; } if (item.knockBack != defaultItem.knockBack) { flags2[6] = true; } if (item.crit != defaultItem.crit) { flags2[7] = true; } if (item.shoot != defaultItem.shoot) { flags3[0] = true; } if (item.shootSpeed != defaultItem.shootSpeed) { flags3[1] = true; } if (item.createTile != defaultItem.createTile) { flags3[2] = true; } if (item.tileBoost != defaultItem.tileBoost) { flags3[3] = true; } if (item.buffType != defaultItem.buffType) { flags3[4] = true; } if (item.buffTime != defaultItem.buffTime) { flags3[5] = true; } if (item.healLife != defaultItem.healLife) { flags3[6] = true; } if (item.healMana != defaultItem.healMana) { flags3[7] = true; } if (item.axe != defaultItem.axe) { flags4[0] = true; } if (item.pick != defaultItem.pick) { flags4[1] = true; } if (item.hammer != defaultItem.hammer) { flags4[2] = true; } if (item.maxStack != defaultItem.maxStack) { flags4[3] = true; } if (item.useAnimation != defaultItem.useAnimation) { flags4[4] = true; } if (item.useTime != defaultItem.useTime) { flags4[5] = true; } if (item.defense != defaultItem.defense) { flags4[6] = true; } if (item.fishingPole != defaultItem.fishingPole) { flags4[7] = true; } if (item.scale != defaultItem.scale) { flags5[0] = true; } if (item.useStyle != defaultItem.useStyle) { flags5[1] = true; } if (item.mana != defaultItem.mana) { flags5[2] = true; } if (flags2 != 0) { flags1[0] = true; } if (flags3 != 0) { flags1[1] = true; } if (flags4 != 0) { flags1[2] = true; } if (flags5 != 0) { flags1[3] = true; } writer.Write(flags1); if (flags1 != 0) { if (flags1[0]) { writer.Write(flags2); if (flags2[0]) { writer.Write(item.autoReuse); } if (flags2[1]) { writer.Write(item.consumable); } if (flags2[2]) { writer.Write(item.potion); } if (flags2[3]) { writer.Write(item.accessory); } if (flags2[4]) { writer.Write((byte)damageType); } if (flags2[5]) { writer.Write(item.damage); } if (flags2[6]) { writer.Write(item.knockBack); } if (flags2[7]) { writer.Write((ushort)item.crit); } } if (flags1[1]) { writer.Write(flags3); if (flags3[0]) { writer.Write((ushort)item.shoot); } if (flags3[1]) { writer.Write(item.shootSpeed); } if (flags3[2]) { writer.Write((ushort)(item.createTile + 1)); } if (flags3[3]) { writer.Write((sbyte)item.tileBoost); } if (flags3[4]) { writer.Write((ushort)item.buffType); } if (flags3[5]) { writer.Write(item.buffTime); } if (flags3[6]) { writer.Write((ushort)item.healLife); } if (flags3[7]) { writer.Write((ushort)item.healMana); } } if (flags1[2]) { writer.Write(flags4); if (flags4[0]) { writer.Write((ushort)item.axe); } if (flags4[1]) { writer.Write((ushort)item.pick); } if (flags4[2]) { writer.Write((ushort)item.hammer); } if (flags4[3]) { writer.Write(item.maxStack); } if (flags4[4]) { writer.Write((ushort)item.useAnimation); } if (flags4[5]) { writer.Write((ushort)item.useTime); } if (flags4[6]) { writer.Write(item.defense); } if (flags4[7]) { writer.Write((ushort)item.fishingPole); } } if (flags1[3]) { writer.Write(flags5); if (flags5[0]) { writer.Write(item.scale); } if (flags5[1]) { writer.Write((byte)item.useStyle); } if (flags5[2]) { writer.Write((ushort)item.mana); } } } }
private void OnGetData(GetDataEventArgs args) { // TshockではGhostへのタイル送信が行われないため、プレイヤーが移動するPlayerUpdateパケットで送信する if (!args.Handled && args.MsgID == PacketTypes.PlayerUpdate) { if (Main.player[args.Msg.whoAmI].ghost) { BinaryReader reader = new BinaryReader(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length)); int playerIndex = reader.ReadByte(); if (playerIndex != Main.myPlayer || Main.ServerSideCharacter) { // Update Player Player player = Main.player[playerIndex]; BitsByte bitsByte10 = reader.ReadByte(); BitsByte bitsByte11 = reader.ReadByte(); BitsByte bitsByte12 = reader.ReadByte(); BitsByte bitsByte13 = reader.ReadByte(); player.controlUp = bitsByte10[0]; player.controlDown = bitsByte10[1]; player.controlLeft = bitsByte10[2]; player.controlRight = bitsByte10[3]; player.controlJump = bitsByte10[4]; player.controlUseItem = bitsByte10[5]; player.direction = (bitsByte10[6] ? 1 : (-1)); if (bitsByte11[0]) { player.pulley = true; player.pulleyDir = (byte)((!bitsByte11[1]) ? 1 : 2); } else { player.pulley = false; } player.vortexStealthActive = bitsByte11[3]; player.gravDir = (bitsByte11[4] ? 1 : (-1)); player.TryTogglingShield(bitsByte11[5]); player.ghost = bitsByte11[6]; player.selectedItem = reader.ReadByte(); player.position = reader.ReadVector2(); if (bitsByte11[2]) { player.velocity = reader.ReadVector2(); } else { player.velocity = Vector2.Zero; } if (bitsByte12[6]) { player.PotionOfReturnOriginalUsePosition = reader.ReadVector2(); player.PotionOfReturnHomePosition = reader.ReadVector2(); } else { player.PotionOfReturnOriginalUsePosition = null; player.PotionOfReturnHomePosition = null; } player.tryKeepingHoveringUp = bitsByte12[0]; player.IsVoidVaultEnabled = bitsByte12[1]; player.sitting.isSitting = bitsByte12[2]; player.downedDD2EventAnyDifficulty = bitsByte12[3]; player.isPettingAnimal = bitsByte12[4]; player.isTheAnimalBeingPetSmall = bitsByte12[5]; player.tryKeepingHoveringDown = bitsByte12[7]; player.sleeping.SetIsSleepingAndAdjustPlayerRotation(player, bitsByte13[0]); RemoteClient.CheckSection(playerIndex, player.position); } } // ひとまずGhostと同じ処理 if (!Main.player[args.Msg.whoAmI].active) { BinaryReader reader = new BinaryReader(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length)); int playerIndex = reader.ReadByte(); if (playerIndex != Main.myPlayer || Main.ServerSideCharacter) { // Update Player Player player = Main.player[playerIndex]; BitsByte bitsByte10 = reader.ReadByte(); BitsByte bitsByte11 = reader.ReadByte(); BitsByte bitsByte12 = reader.ReadByte(); BitsByte bitsByte13 = reader.ReadByte(); player.controlUp = bitsByte10[0]; player.controlDown = bitsByte10[1]; player.controlLeft = bitsByte10[2]; player.controlRight = bitsByte10[3]; player.controlJump = bitsByte10[4]; player.controlUseItem = bitsByte10[5]; player.direction = (bitsByte10[6] ? 1 : (-1)); if (bitsByte11[0]) { player.pulley = true; player.pulleyDir = (byte)((!bitsByte11[1]) ? 1 : 2); } else { player.pulley = false; } player.vortexStealthActive = bitsByte11[3]; player.gravDir = (bitsByte11[4] ? 1 : (-1)); player.TryTogglingShield(bitsByte11[5]); player.ghost = bitsByte11[6]; player.selectedItem = reader.ReadByte(); player.position = reader.ReadVector2(); if (bitsByte11[2]) { player.velocity = reader.ReadVector2(); } else { player.velocity = Vector2.Zero; } if (bitsByte12[6]) { player.PotionOfReturnOriginalUsePosition = reader.ReadVector2(); player.PotionOfReturnHomePosition = reader.ReadVector2(); } else { player.PotionOfReturnOriginalUsePosition = null; player.PotionOfReturnHomePosition = null; } player.tryKeepingHoveringUp = bitsByte12[0]; player.IsVoidVaultEnabled = bitsByte12[1]; player.sitting.isSitting = bitsByte12[2]; player.downedDD2EventAnyDifficulty = bitsByte12[3]; player.isPettingAnimal = bitsByte12[4]; player.isTheAnimalBeingPetSmall = bitsByte12[5]; player.tryKeepingHoveringDown = bitsByte12[7]; player.sleeping.SetIsSleepingAndAdjustPlayerRotation(player, bitsByte13[0]); RemoteClient.CheckSection(playerIndex, player.position); } } } }
//in Terraria.NetMessage.SendData at end of case 27 call // ProjectileLoader.SendExtraAI(projectile, writer, ref bb14); public static byte[] SendExtraAI(Projectile projectile, ref BitsByte flags) { if (projectile.modProjectile != null) { byte[] data; using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter modWriter = new BinaryWriter(stream)) { projectile.modProjectile.SendExtraAI(modWriter); modWriter.Flush(); data = stream.ToArray(); } } if (data.Length > 0) { flags[Projectile.maxAI + 1] = true; } return data; } return new byte[0]; }
public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); DownedCloudBoss = flags[0]; }
public bool Read(int bufferId, int start, int length) { var buffer = NetMessage.buffer[bufferId]; int identity = (int)buffer.reader.ReadInt16(); Vector2 position = buffer.reader.ReadVector2(); Vector2 velocity = buffer.reader.ReadVector2(); float knockBack = buffer.reader.ReadSingle(); int damage = (int)buffer.reader.ReadInt16(); int owner = (int)buffer.reader.ReadByte(); int type = (int)buffer.reader.ReadInt16(); BitsByte flags = buffer.reader.ReadByte(); float[] ai = new float[Projectile.maxAI]; for (int i = 0; i < Projectile.maxAI; i++) { if (flags[i]) { ai[i] = buffer.reader.ReadSingle(); } else { ai[i] = 0; } } int uuid = (int)(flags[Projectile.maxAI] ? buffer.reader.ReadInt16() : -1); if (uuid >= 1000) { uuid = -1; } if (Main.netMode == 2) { owner = bufferId; if (Main.projHostile[type]) { return(true); } } int index = 1000; for (int i = 0; i < 1000; i++) { if (Main.projectile[i].owner == owner && Main.projectile[i].identity == identity && Main.projectile[i].active) { index = i; break; } } if (index == 1000) { for (int i = 0; i < 1000; i++) { if (!Main.projectile[i].active) { index = i; break; } } } var player = Main.player[bufferId]; var ctx = new HookContext { Connection = player.Connection.Socket, Player = player, Sender = player, }; var args = new TDSMHookArgs.ProjectileReceived { Position = position, Velocity = velocity, Id = identity, Owner = bufferId, Knockback = knockBack, Damage = damage, Type = type, AI = ai, ExistingIndex = index < 1000 ? index : -1 }; TDSMHookPoints.ProjectileReceived.Invoke(ref ctx, ref args); if (ctx.Result == HookResult.DEFAULT) { if (index > -1 && index < 1000) { Projectile projectile = Main.projectile[index]; if (!projectile.active || projectile.type != type) { projectile.SetDefaults(type); if (Main.netMode == 2) { Netplay.Clients[bufferId].SpamProjectile += 1; } } projectile.identity = identity; projectile.position = position; projectile.velocity = velocity; projectile.type = type; projectile.damage = damage; projectile.knockBack = knockBack; projectile.owner = owner; for (int i = 0; i < Projectile.maxAI; i++) { projectile.ai[i] = ai[i]; } if (uuid >= 0) { projectile.projUUID = uuid; Main.projectileIdentity[owner, uuid] = index; } projectile.ProjectileFixDesperation(); if (Main.netMode == 2) { NetMessage.SendData(27, -1, bufferId, "", index, 0, 0, 0, 0, 0, 0); } } } return(true); }
void OnSendBytes(SendBytesEventArgs e) { if (TShock.Players[e.Socket.Id] == null) { return; } bool build = TShock.Players[e.Socket.Id].GetData <bool>("buildmode"); switch (e.Buffer[2]) { case (byte)PacketTypes.WorldInfo: //7 using (var writer = new BinaryWriter(new MemoryStream(e.Buffer, 3, e.Count - 3))) { writer.Write(build ? 27000 : (int)Main.time); BitsByte bb = 0; bb[0] = build ? true : Main.dayTime; bb[1] = build ? false : Main.bloodMoon; bb[2] = build ? false : Main.eclipse; writer.Write(bb); writer.BaseStream.Position += 9; writer.Write(build ? (short)Main.maxTilesY : (short)Main.worldSurface); writer.Write(build ? (short)Main.maxTilesY : (short)Main.rockLayer); writer.BaseStream.Position += 4; writer.Write(Main.worldName); writer.Write(Main.ActiveWorldFileData.UniqueId.ToString()); writer.BaseStream.Position += 49; writer.Write(build ? 0f : Main.maxRaining); } break; case (byte)PacketTypes.TimeSet: //18 using (var writer = new BinaryWriter(new MemoryStream(e.Buffer, 3, e.Count - 3))) { writer.Write(build ? true : Main.dayTime); writer.Write(build ? 27000 : (int)Main.time); } break; case (byte)PacketTypes.MassWireOperationPay: TSPlayer tsplr = TShock.Players[e.Buffer[7]]; if (tsplr.GetData <bool>("buildmode")) { e.Handled = true; //Will never decrement wires/actuators in inventory } break; case (byte)PacketTypes.NpcUpdate: //23 NPC npc = Main.npc[BitConverter.ToInt16(e.Buffer, 3)]; if (!npc.friendly) { Buffer.BlockCopy(BitConverter.GetBytes(build ? 0f : npc.position.X), 0, e.Buffer, 5, 4); Buffer.BlockCopy(BitConverter.GetBytes(build ? 0f : npc.position.Y), 0, e.Buffer, 9, 4); } break; case (byte)PacketTypes.ProjectileNew: //27 short id = BitConverter.ToInt16(e.Buffer, 3); int owner = e.Buffer[21]; Projectile proj = Main.projectile[TShock.Utils.SearchProjectile(id, owner)]; if (!proj.friendly) { Buffer.BlockCopy(BitConverter.GetBytes((short)(build ? 0 : proj.type)), 0, e.Buffer, 22, 2); } break; } }
public static void GetData(GetDataEventArgs args) { var plr = Main.player[args.Msg.whoAmI]; var tsp = plr.TSPlayer(); using (MemoryStream reader = new MemoryStream(args.Msg.readBuffer, args.Index, args.Length - 1)) { switch (args.MsgID) { case PacketTypes.ItemOwner: int item = reader.ReadInt16(); int ID = (int)reader.ReadByte(); if (item == 0) { StatusSender.GetPingPakcet(args.Msg.whoAmI); } break; case PacketTypes.PlayerHp: reader.ReadByte(); int life = reader.ReadInt16(); args.Handled = PlayerHeal(plr, life); break; case PacketTypes.PlayerHurtV2: reader.ReadByte(); PlayerDeathReason playerDeathReason = new PlayerDeathReason(); BitsByte bitsByte = (BitsByte)reader.ReadByte(); if (bitsByte[0]) { playerDeathReason._sourcePlayerIndex = (int)reader.ReadInt16(); } if (bitsByte[1]) { playerDeathReason._sourceNPCIndex = (int)reader.ReadInt16(); } if (bitsByte[2]) { playerDeathReason._sourceProjectileIndex = (int)reader.ReadInt16(); } if (bitsByte[3]) { playerDeathReason._sourceOtherIndex = (int)reader.ReadByte(); } if (bitsByte[4]) { playerDeathReason._sourceProjectileType = (int)reader.ReadInt16(); } if (bitsByte[5]) { playerDeathReason._sourceItemType = (int)reader.ReadInt16(); } if (bitsByte[6]) { playerDeathReason._sourceItemPrefix = (int)reader.ReadByte(); } if (bitsByte[7]) { playerDeathReason._sourceCustomReason = reader.ReadString(); } int damage = reader.ReadInt16(); args.Handled = PlayerDamage(plr, damage); break; } } if (args.MsgID == PacketTypes.PlayerUpdate) { if (plr.controlUseItem && (plr.HeldItem.useStyle == 2 || plr.HeldItem.useStyle == 9 || plr.HeldItem.netID == 5) && UserManager.TryGetEPlayeFromName(plr.name, out Account.EPlayer eplr) && eplr.HungrValue < 34200 && eplr.CanEat) { HungrSystem.OnEat(eplr, plr.HeldItem.buffTime); } } }
public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); downedRajahsRevenge = flags[0]; }
/// <summary> /// Modify the world data packet so that it sends serversidecharacter information /// </summary> /// <param name="writer"></param> public static void ModifyWorldData(ref BinaryWriter writer) { writer.Write((int)Main.time); BitsByte bb7 = (byte)0; bb7[0] = Main.dayTime; bb7[1] = Main.bloodMoon; bb7[2] = Main.eclipse; writer.Write(bb7); 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); writer.Write(Main.ActiveWorldFileData.UniqueId.ToByteArray()); writer.Write(Main.ActiveWorldFileData.WorldGeneratorVersion); 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 (var l = 0; l < 3; l++) { writer.Write(Main.treeX[l]); } for (var m = 0; m < 4; m++) { writer.Write((byte)Main.treeStyle[m]); } for (var n = 0; n < 3; n++) { writer.Write(Main.caveBackX[n]); } for (var num9 = 0; num9 < 4; num9++) { writer.Write((byte)Main.caveBackStyle[num9]); } if (!Main.raining) { Main.maxRaining = 0f; } writer.Write(Main.maxRaining); BitsByte bb8 = 0; bb8[0] = WorldGen.shadowOrbSmashed; bb8[1] = NPC.downedBoss1; bb8[2] = NPC.downedBoss2; bb8[3] = NPC.downedBoss3; bb8[4] = Main.hardMode; bb8[5] = NPC.downedClown; bb8[6] = true; // ssc mode here bb8[7] = NPC.downedPlantBoss; writer.Write(bb8); BitsByte bb9 = 0; bb9[0] = NPC.downedMechBoss1; bb9[1] = NPC.downedMechBoss2; bb9[2] = NPC.downedMechBoss3; bb9[3] = NPC.downedMechBossAny; bb9[4] = (Main.cloudBGActive >= 1f); bb9[5] = WorldGen.crimson; bb9[6] = Main.pumpkinMoon; bb9[7] = Main.snowMoon; writer.Write(bb9); BitsByte bb10 = 0; bb10[0] = Main.expertMode; bb10[1] = Main.fastForwardTime; bb10[2] = Main.slimeRain; bb10[3] = NPC.downedSlimeKing; bb10[4] = NPC.downedQueenBee; bb10[5] = NPC.downedFishron; bb10[6] = NPC.downedMartians; bb10[7] = NPC.downedAncientCultist; writer.Write(bb10); BitsByte bb11 = 0; bb11[0] = NPC.downedMoonlord; bb11[1] = NPC.downedHalloweenKing; bb11[2] = NPC.downedHalloweenTree; bb11[3] = NPC.downedChristmasIceQueen; bb11[4] = NPC.downedChristmasSantank; bb11[5] = NPC.downedChristmasTree; bb11[6] = NPC.downedGolemBoss; bb11[7] = BirthdayParty.PartyIsUp; writer.Write(bb11); BitsByte bb12 = 0; bb12[0] = NPC.downedPirates; bb12[1] = NPC.downedFrost; bb12[2] = NPC.downedGoblins; bb12[3] = Sandstorm.Happening; bb12[4] = DD2Event.Ongoing; bb12[5] = DD2Event.DownedInvasionT1; bb12[6] = DD2Event.DownedInvasionT2; bb12[7] = DD2Event.DownedInvasionT3; writer.Write(bb12); writer.Write((sbyte)Main.invasionType); if (!ModNet.AllowVanillaClients) { // We have to call `WorldIO.SendModData(binaryWriter)` using reflection var type = typeof(Main).Assembly.GetType("Terraria.ModLoader.IO.WorldIO"); var method = type.GetMethod("SendModData", new[] { typeof(BinaryWriter) }); if (method != null) { method.Invoke(null, new object[] { writer }); } } writer.Write(SocialAPI.Network != null ? SocialAPI.Network.GetLobbyId() : 0uL); writer.Write(Sandstorm.IntendedSeverity); }
//Sync downed data public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); downedDungueonInvasion = flags[0]; }
public override void NetSend(BinaryWriter writer) { BitsByte gems = new BitsByte(natureJewelActivated, tideJewelActivated, forgeJewelActivated); writer.Write(gems); }
public void Pack(Stream stream) { var bits = new BitsByte(); if ((Active) && (!Inactive)) { bits[0] = true; } if (HasWall) { bits[2] = true; } if (HasLiquid) { bits[3] = true; } if (Wire) { bits[4] = true; } if (IsHalf) { bits[5] = true; } if (IsActuator) { bits[6] = true; } if (Inactive) { bits[7] = true; } stream.WriteInt8((byte)bits); bits = new BitsByte(); if ((Wire2)) { bits[0] = true; } if (Wire3) { bits[1] = true; } if (HasColor) { bits[2] = true; } if (HasWallColor) { bits[3] = true; } if (Slope) { bits[4] = true; } if (Slope2) { bits[5] = true; } if (Slope3) { bits[6] = true; } stream.WriteInt8((byte)bits); if (HasColor) { stream.WriteByte(TileColor); } if (HasWallColor) { stream.WriteByte(WallColor); } if (Active) { stream.WriteInt16((short)Type); if (FrameImportant) { stream.WriteInt16(FrameX); stream.WriteInt16(FrameY); } } if (HasWall) { stream.WriteInt8(Wall); } if (HasLiquid) { stream.WriteInt8(Liquid); stream.WriteInt8(LiquidType); } }
/// <summary></summary> /// <param name="writer"></param> /// <param name="tile"></param> /// <param name="forceFrames"></param> /// <param name="forceWallFrames"></param> /// <param name="forceLiquids"></param> public static void ToStream( BinaryWriter writer, Tile tile, bool forceFrames = false, bool forceWallFrames = false, bool forceLiquids = false) { BitsByte bits1 = 0; BitsByte bits2 = 0; byte fColor = 0; byte wColor = 0; bits1[0] = tile.active(); bits1[2] = tile.wall > 0; bits1[3] = tile.liquid > 0 && Main.netMode == NetmodeID.Server; bits1[5] = tile.halfBrick(); bits1[6] = tile.actuator(); bits1[7] = tile.inActive(); bits1[4] = tile.wire(); bits2[0] = tile.wire2(); bits2[1] = tile.wire3(); bits2[7] = tile.wire4(); if (tile.active() && tile.color() > 0) { bits2[2] = true; fColor = tile.color(); } if (tile.wall > 0 && tile.wallColor() > 0) { bits2[3] = true; wColor = tile.wallColor(); } bits2 += (byte)(tile.slope() << 4); writer.Write((byte)bits1); writer.Write((byte)bits2); if (fColor > 0) { writer.Write((byte)fColor); } if (wColor > 0) { writer.Write((byte)wColor); } if (tile.active()) { writer.Write((ushort)tile.type); if (forceFrames || Main.tileFrameImportant[(int)tile.type]) { writer.Write((short)tile.frameX); writer.Write((short)tile.frameY); } } if (tile.wall > 0) { if (ModNet.AllowVanillaClients) { writer.Write((byte)tile.wall); } else { writer.Write((ushort)tile.wall); } if (forceWallFrames) { writer.Write((short)tile.wallFrameX()); writer.Write((short)tile.wallFrameY()); } } if (forceLiquids || (tile.liquid > 0 && Main.netMode == NetmodeID.Server)) { writer.Write((byte)tile.liquid); writer.Write((byte)tile.liquidType()); } }
/// <summary></summary> /// <param name="reader"></param> /// <param name="tile"></param> /// <param name="forceFrames"></param> /// <param name="forceWallFrames"></param> /// <param name="forceLiquids"></param> public static void FromStream( BinaryReader reader, ref Tile tile, bool forceFrames = false, bool forceWallFrames = false, bool forceLiquids = false) { BitsByte bits1 = 0; BitsByte bits2 = 0; bool wasActive = tile.active(); bits1 = reader.ReadByte(); bits2 = reader.ReadByte(); tile.active(bits1[0]); tile.wall = (byte)(bits1[2] ? 1 : 0); bool isLiquid = bits1[3]; if (forceLiquids || Main.netMode != NetmodeID.Server) { tile.liquid = (byte)(isLiquid ? 1 : 0); } tile.halfBrick(bits1[5]); tile.actuator(bits1[6]); tile.inActive(bits1[7]); tile.wire(bits1[4]); tile.wire2(bits2[0]); tile.wire3(bits2[1]); tile.wire4(bits2[7]); if (bits2[2]) { tile.color(reader.ReadByte()); } if (bits2[3]) { tile.wallColor(reader.ReadByte()); } if (tile.active()) { int oldTileType = (int)tile.type; tile.type = reader.ReadUInt16(); if (forceFrames || Main.tileFrameImportant[(int)tile.type]) { tile.frameX = reader.ReadInt16(); tile.frameY = reader.ReadInt16(); } else if (!wasActive || (int)tile.type != oldTileType) { tile.frameX = -1; tile.frameY = -1; } byte slope = 0; if (bits2[4]) { slope += 1; } if (bits2[5]) { slope += 2; } if (bits2[6]) { slope += 4; } tile.slope(slope); } if (tile.wall > 0) { tile.wall = ModNet.AllowVanillaClients ? reader.ReadByte() : reader.ReadUInt16(); if (forceWallFrames) { tile.wallFrameX((int)reader.ReadInt16()); tile.wallFrameY((int)reader.ReadInt16()); } } if (isLiquid) { tile.liquid = reader.ReadByte(); tile.liquidType((int)reader.ReadByte()); } }
public override void ReceiveExtraAI(BinaryReader reader) { flags = reader.ReadByte(); attached = reader.ReadInt16(); }
public override void ReceiveCustomBiomes(BinaryReader reader) { BitsByte flags = reader.ReadByte(); TheFortress = flags[0]; }
// static long sameTiles = 0; // static long diffTiles = 0; public override void Process(int whoAmI, byte[] readBuffer, int length, int num) { short size = ReadInt16(readBuffer); int startX = (int)ReadInt16(readBuffer); int startY = (int)ReadInt16(readBuffer); //TODO implement the old methods var player = Main.player[whoAmI]; var ctx = new HookContext { Sender = player, Player = player, Connection = player.Connection }; var args = new HookArgs.TileSquareReceived { X = startX, Y = startY, Size = size, readBuffer = readBuffer, start = num, }; HookPoints.TileSquareReceived.Invoke(ref ctx, ref args); if (args.applied > 0) { WorldGen.RangeFrame(startX, startY, startX + (int)size, startY + (int)size); NewNetMessage.SendData((int)Packet.TILE_SQUARE, -1, whoAmI, String.Empty, (int)size, (float)startX, (float)startY, 0f, 0); } if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE) { return; } // args.ForEach (player, this.EachTile); BitsByte bitsByte6 = 0; BitsByte bitsByte7 = 0; for (int num46 = startX; num46 < startX + (int)size; num46++) { for (int num47 = startY; num47 < startY + (int)size; num47++) { if (Main.tile[num46, num47] == null) { Main.tile[num46, num47] = new Tile(); } Tile tile = Main.tile[num46, num47]; bool flag5 = tile.active(); bitsByte6 = ReadByte(readBuffer); bitsByte7 = ReadByte(readBuffer); tile.active(bitsByte6[0]); tile.wall = (byte)(bitsByte6[2] ? 1 : 0); bool flag6 = bitsByte6[3]; if (Main.netMode != 2) { tile.liquid = (byte)(flag6 ? 1 : 0); } tile.wire(bitsByte6[4]); tile.halfBrick(bitsByte6[5]); tile.actuator(bitsByte6[6]); tile.inActive(bitsByte6[7]); tile.wire2(bitsByte7[0]); tile.wire3(bitsByte7[1]); if (bitsByte7[2]) { tile.color(ReadByte(readBuffer)); } if (bitsByte7[3]) { tile.wallColor(ReadByte(readBuffer)); } if (tile.active()) { int type2 = (int)tile.type; tile.type = ReadUInt16(readBuffer); if (Main.tileFrameImportant[(int)tile.type]) { tile.frameX = ReadInt16(readBuffer); tile.frameY = ReadInt16(readBuffer); } else { if (!flag5 || (int)tile.type != type2) { tile.frameX = -1; tile.frameY = -1; } } byte b4 = 0; if (bitsByte7[4]) { b4 += 1; } if (bitsByte7[5]) { b4 += 2; } if (bitsByte7[6]) { b4 += 4; } tile.slope(b4); } if (tile.wall > 0) { tile.wall = ReadByte(readBuffer); } if (flag6) { tile.liquid = ReadByte(readBuffer); tile.liquidType((int)ReadByte(readBuffer)); } } } WorldGen.RangeFrame(startX, startY, startX + (int)size, startY + (int)size); NewNetMessage.SendData((int)Packet.TILE_SQUARE, -1, whoAmI, String.Empty, (int)size, (float)startX, (float)startY, 0f, 0); }
public override void HandlePacket(BinaryReader reader, int whoAmI) { ModMessageType msgType = (ModMessageType)reader.ReadByte(); switch (msgType) { case ModMessageType.ArrowMessage: int identity = reader.ReadInt32(); byte owner = reader.ReadByte(); int realIdentity = Projectile.GetByUUID(owner, identity); if (realIdentity != -1) { Main.projectile[realIdentity].GetGlobalProjectile <arrowHoming>().B4HomingArrow = true; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.ArrowMessage); packet.Write(identity); packet.Write(owner); packet.Send(); } break; case ModMessageType.FinnedRandomSwimMessage: int identity2 = reader.ReadInt32(); byte owner2 = reader.ReadByte(); float randomSwim = reader.Read(); int realIdentity2 = Projectile.GetByUUID(owner2, identity2); if (realIdentity2 != -1) { Main.projectile[realIdentity2].ai[1] = randomSwim; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.FinnedRandomSwimMessage); packet.Write(identity2); packet.Write(owner2); packet.Write(randomSwim); packet.Send(); } break; case ModMessageType.ScaleMessage: int identity3 = reader.ReadInt32(); byte owner3 = reader.ReadByte(); int realIdentity3 = Projectile.GetByUUID(owner3, identity3); if (realIdentity3 != -1) { Main.projectile[realIdentity3].scale = 3; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.ScaleMessage); packet.Write(identity3); packet.Write(owner3); packet.Send(); } break; case ModMessageType.UpdateClassBools: int identity4 = reader.ReadInt32(); byte owner4 = reader.ReadByte(); int realIdentity4 = Projectile.GetByUUID(owner4, identity4); if (realIdentity4 != -1) { BitsByte flags = reader.ReadByte(); Main.projectile[realIdentity4].melee = flags[0]; Main.projectile[realIdentity4].ranged = flags[1]; Main.projectile[realIdentity4].magic = flags[2]; Main.projectile[realIdentity4].minion = flags[3]; Main.projectile[realIdentity4].thrown = flags[4]; Main.projectile[realIdentity4].GetGlobalProjectile <MorphProjectile>().morph = flags[5]; } if (Main.netMode == 2) { UpdateProjectileClass(Main.projectile[realIdentity4]); } break; case ModMessageType.UpdateLocalCursor: byte playerIndex = reader.ReadByte(); Vector2 Cursor = reader.ReadVector2(); LocalCursor[playerIndex] = Cursor; if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.UpdateLocalCursor); // Message type, you would need to create an enum for this packet.Write(playerIndex); packet.WriteVector2(Cursor); packet.Send(); } break; case ModMessageType.UpdatePlayerVelocity: byte playerIndex2 = reader.ReadByte(); Vector2 vel = reader.ReadVector2(); Main.player[playerIndex2].velocity = vel; if (Main.netMode == 2) { UpdatePlayerVelocity(playerIndex2, vel); NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex2); } break; case ModMessageType.UpdatePlayerPosition: byte playerIndex3 = reader.ReadByte(); Vector2 pos = reader.ReadVector2(); Main.player[playerIndex3].position = pos; if (Main.netMode == 2) { UpdatePlayerPosition(playerIndex3, pos); NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex3); } break; case ModMessageType.ProjectileAIUpdate: int identity6 = reader.ReadInt32(); byte owner6 = reader.ReadByte(); int realIdentity6 = Projectile.GetByUUID(owner6, identity6); float ai0 = reader.ReadSingle(); float ai1 = reader.ReadSingle(); if (realIdentity6 != -1) { Main.projectile[realIdentity6].ai[0] = ai0; Main.projectile[realIdentity6].ai[1] = ai1; if (Main.netMode == 2) { ProjectileAIUpdate(Main.projectile[realIdentity6]); } } break; case ModMessageType.DivineCall: QwertyWorld.FortressBossQuotes(); Vector2 summonAt = reader.ReadVector2(); int npcID = NPC.NewNPC((int)summonAt.X, (int)summonAt.Y, NPCType("FortressBoss")); break; case ModMessageType.StartDinoEvent: QwertyWorld.DinoEvent = true; QwertyWorld.DinoKillCount = 0; if (Main.netMode == NetmodeID.Server) { NetMessage.SendData(MessageID.WorldData); // Immediately inform clients of new world state. } break; } }
public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); flags[0] = DownedEmeraldSlime; }
//in Terraria.MessageBuffer.GetData for case 27 after reading all data add // byte[] extraAI = ProjectileLoader.ReadExtraAI(reader, bitsByte14); public static byte[] ReadExtraAI(BinaryReader reader, BitsByte flags) { if (flags[Projectile.maxAI + 1]) { return reader.ReadBytes(reader.ReadByte()); } return new byte[0]; }
// should love quake private bool ShouldDropPacket(byte[] buffer, int offset, int count, byte receiver) { if (count < 3) { return(false); } var bOffset = offset + 3; switch (buffer[offset + 2]) { case 4: case 5: case 12: case 13: case 14: case 16: case 30: case 35: case 36: case 40: case 41: case 42: case 43: case 45: case 50: case 51: case 55: case 58: case 62: case 66: case 80: case 84: case 96: case 99: case 102: case 115: case 117: case 118: if (count <= bOffset) { return(false); } if (!ShouldSeeUser(buffer[bOffset], receiver)) { return(true); } break; case 22: case 24: case 29: case 70: if (count <= bOffset + 2) { return(false); } if (!ShouldSeeUser(buffer[bOffset + 2], receiver)) { return(true); } break; case 20: case 61: if (count <= bOffset + 1) { return(false); } if (!ShouldSeeUser((byte)BitConverter.ToUInt16(buffer, bOffset), receiver)) { return(true); } break; case 23: if (count < bOffset + 19) { return(false); } if (!ShouldSeeUser((byte)BitConverter.ToUInt16(buffer, bOffset + 18), receiver)) { return(true); } break; case 27: if (count < bOffset + 24) { return(false); } if (!ShouldSeeUser(buffer[bOffset + 24], receiver)) { return(true); } break; case 65: if (count < bOffset + 2) { return(false); } BitsByte flag = buffer[bOffset]; if (flag[0] || flag[2]) { if (!ShouldSeeUser((byte)BitConverter.ToUInt16(buffer, bOffset + 1), receiver)) { return(true); } } break; case 108: if (count < bOffset + 14) { return(false); } if (!ShouldSeeUser(buffer[bOffset + 14], receiver)) { return(true); } break; case 110: if (count < bOffset + 4) { return(false); } if (!ShouldSeeUser(buffer[bOffset + 4], receiver)) { return(true); } break; case 21: if (_ignoredPlayerIndexes[receiver]) { return(true); } break; } return(false); }
public static void Update() { life = player.statLife; lifeM = player.statLifeMax + player.statLifeMax2; mana = player.statMana; manaM = player.statManaMax + player.statManaMax2; def = player.statDefense; minions = player.slotsMinions; minionsM = player.maxMinions; string expert; string HardMode; if (Main.expertMode) { expert = "Expert"; } else { expert = "Normal"; } if (Main.hardMode) { HardMode = "Hardmode"; } else { HardMode = "Pre-Hardmode"; } Timer += 1; if (Timer / 1.5 >= 3) { Presence1 = false; } if (Timer / 1.5 >= 6) { Presence1 = true; Timer = 0; } zone1 = player.zone1; zone2 = player.zone2; zone3 = player.zone3; item = player.HeldItem; if (!dead) { if (!Presence1) { RPControl.presence.state = string.Format("HP: {0}/{1} MP: {2}/{3} DEF: {4} (Debug {10})", life, lifeM, mana, manaM, def, minions, minionsM, player.position.X, player.position.Y, Class, (Timer / 1.5)); } else { RPControl.presence.state = string.Format("Minions: {5}/{6} Class: {9} (Debug {10})", life, lifeM, mana, manaM, def, minions, minionsM, player.position.X, player.position.Y, Class, (Timer / 1.5)); } } else { RPControl.presence.state = string.Format("Dead, Class: {0}", Class); } GetItemStat(); //bossNPC = Main.npc.Take(200).Where(npc => npc.active && (bossID.Contains(npc.type) || npc.boss)).LastOrDefault(); GetBiome(); //if (bossNPC == null) // GetBiome(); //else // GetBoss(); RPControl.Update(); }
public override void NetSend(BinaryWriter writer) { BitsByte adventurerQuests = new BitsByte(zombieQuestStart); writer.Write(adventurerQuests); }
public override void NetSend(BinaryWriter writer) { BitsByte flags = new BitsByte(downedScarabeus, downedAncientFlier, downedAtlas, downedInfernon, downedDusking, downedIlluminantMaster, downedOverseer); writer.Write(flags); }
public override void NetReceive(BinaryReader reader) { BitsByte adventurerQuests = reader.ReadByte(); zombieQuestStart = adventurerQuests[0]; }
public override void NetReceive(Item item, BinaryReader reader) { BitsByte flags1 = reader.ReadByte(); if (flags1 == 0) { return; } if (flags1[0]) { BitsByte flags2 = reader.ReadByte(); if (flags2[0]) { item.autoReuse = reader.ReadBoolean(); } if (flags2[1]) { item.consumable = reader.ReadBoolean(); } if (flags2[2]) { item.potion = reader.ReadBoolean(); } if (flags2[3]) { item.accessory = reader.ReadBoolean(); } if (flags2[4]) { item.SetDamageType(reader.ReadByte()); } if (flags2[5]) { item.damage = reader.ReadInt32(); } if (flags2[6]) { item.knockBack = reader.ReadSingle(); } if (flags2[7]) { item.crit = reader.ReadUInt16(); } } if (flags1[1]) { BitsByte flags3 = reader.ReadByte(); if (flags3[0]) { item.shoot = reader.ReadUInt16(); } if (flags3[1]) { item.shootSpeed = reader.ReadSingle(); } if (flags3[2]) { item.createTile = reader.ReadUInt16() - 1; } if (flags3[3]) { item.tileBoost = reader.ReadSByte(); } if (flags3[4]) { item.buffType = reader.ReadUInt16(); } if (flags3[5]) { item.buffTime = reader.ReadInt32(); } if (flags3[6]) { item.healLife = reader.ReadUInt16(); } if (flags3[7]) { item.healMana = reader.ReadUInt16(); } } if (flags1[2]) { BitsByte flags4 = reader.ReadByte(); if (flags4[0]) { item.axe = reader.ReadUInt16(); } if (flags4[1]) { item.pick = reader.ReadUInt16(); } if (flags4[2]) { item.hammer = reader.ReadUInt16(); } if (flags4[3]) { item.maxStack = reader.ReadInt32(); } if (flags4[4]) { item.useAnimation = reader.ReadUInt16(); } if (flags4[5]) { item.useTime = reader.ReadUInt16(); } if (flags4[6]) { item.defense = reader.ReadInt32(); } if (flags4[7]) { item.fishingPole = reader.ReadUInt16(); } } if (flags1[3]) { BitsByte flags5 = reader.ReadByte(); if (flags5[0]) { item.scale = reader.ReadSingle(); } if (flags5[1]) { item.useStyle = reader.ReadByte(); } if (flags5[2]) { item.mana = reader.ReadUInt16(); } } }
public override void NetSend(BinaryWriter writer) { BitsByte flags = new BitsByte(); flags[0] = foundAglet; flags[1] = foundClimbingClaws; flags[2] = foundAnklet; flags[3] = foundShoeSpikes; flags[4] = foundBalloon; flags[5] = foundHermesBoots; flags[6] = foundFlippers; flags[7] = foundFrogLeg; writer.Write(flags); BitsByte flags2 = new BitsByte(); flags2[0] = foundCloud; flags2[1] = foundBlizzard; flags2[2] = foundSandstorm; flags2[3] = foundPuffer; flags2[4] = foundTsunami; flags2[5] = foundWWB; flags2[6] = foundIceSkates; flags2[7] = foundLavaCharm; writer.Write(flags2); BitsByte flags3 = new BitsByte(); flags3[0] = foundHorseshoe; flags3[1] = foundCMagnet; flags3[2] = foundPStone; flags3[3] = foundHTFL; flags3[4] = foundAnglerEarring; flags3[5] = foundTackleBox; flags3[6] = foundJFNeck; flags3[7] = foundFlowerBoots; writer.Write(flags3); BitsByte flags4 = new BitsByte(); flags4[0] = foundTabi; flags4[1] = foundGoldRing; flags4[2] = foundLuckyCoin; flags4[3] = foundDiscountCard; flags4[4] = foundNeptuneShell; flags4[5] = foundString; flags4[6] = foundGreenCW; flags4[7] = foundYoyoGlove; writer.Write(flags4); BitsByte flags5 = new BitsByte(); flags5[0] = foundArmorPolish; flags5[1] = foundVitamins; flags5[2] = foundBezoar; flags5[3] = foundAdhesiveBandage; flags5[4] = foundFastClock; flags5[5] = foundTrifoldMap; flags5[6] = foundMegaphone; flags5[7] = foundNazar; writer.Write(flags5); BitsByte flags6 = new BitsByte(); flags6[0] = foundBlindfold; flags6[1] = foundSorcE; flags6[2] = foundWE; flags6[3] = foundRE; flags6[4] = foundSumE; flags6[5] = foundFeralClaw; flags6[6] = foundTitanGlove; flags6[7] = foundMagmaStone; writer.Write(flags6); BitsByte flags7 = new BitsByte(); flags7[0] = foundSharkTooth; flags7[1] = foundBlackBelt; flags7[2] = foundMoonCharm; flags7[3] = foundMoonStone; flags7[4] = foundRifleScope; flags7[5] = foundPaladinShield; flags7[6] = foundFrozenTurtleShell; flags7[7] = foundPutridScent; writer.Write(flags7); BitsByte flags8 = new BitsByte(); flags8[0] = foundFleshKnuckles; flags8[1] = foundMagicQuiver; flags8[2] = foundCobaltShield; flags8[3] = foundPanicNecklace; flags8[4] = foundCrossNecklace; flags8[5] = foundStarCloak; flags8[6] = foundNecromanticScroll; flags8[7] = foundObsidianRose; writer.Write(flags8); BitsByte flags9 = new BitsByte(); flags9[0] = foundShackle; flags9[1] = foundSunStone; flags9[2] = foundHerculesBeetle; flags9[3] = foundPygmyNecklace; flags9[4] = foundMP7; flags9[5] = foundT1; flags9[6] = foundT2; flags9[7] = foundT3; writer.Write(flags9); BitsByte flags10 = new BitsByte(); flags10[0] = foundPHD; flags10[1] = foundAntiBuffMode; flags10[2] = foundFlyingCarpet; writer.Write(flags10); BitsByte flags11 = new BitsByte(); flags11[0] = downedDOGPumpking; flags11[1] = downedDOGIceQueen; flags11[2] = downedSandElemental; writer.Write(flags11); }
public override void ReceiveCustomBiomes(BinaryReader reader) { BitsByte flags = reader.ReadByte(); zoneBiome = flags[0]; }
public override void NetReceive(BinaryReader reader) { BitsByte flags = reader.ReadByte(); foundAglet = flags[0]; foundClimbingClaws = flags[1]; foundAnklet = flags[2]; foundShoeSpikes = flags[3]; foundBalloon = flags[4]; foundHermesBoots = flags[5]; foundFlippers = flags[6]; foundFrogLeg = flags[7]; BitsByte flags2 = reader.ReadByte(); foundCloud = flags2[0]; foundBlizzard = flags2[1]; foundSandstorm = flags2[2]; foundPuffer = flags2[3]; foundTsunami = flags2[4]; foundWWB = flags2[5]; foundIceSkates = flags2[6]; foundLavaCharm = flags2[7]; BitsByte flags3 = reader.ReadByte(); foundHorseshoe = flags3[0]; foundCMagnet = flags3[1]; foundPStone = flags3[2]; foundHTFL = flags3[3]; foundAnglerEarring = flags3[4]; foundTackleBox = flags3[5]; foundJFNeck = flags3[6]; foundFlowerBoots = flags3[7]; BitsByte flags4 = reader.ReadByte(); foundTabi = flags4[0]; foundGoldRing = flags4[1]; foundLuckyCoin = flags4[2]; foundDiscountCard = flags4[3]; foundNeptuneShell = flags4[4]; foundString = flags4[5]; foundGreenCW = flags4[6]; foundYoyoGlove = flags4[7]; BitsByte flags5 = reader.ReadByte(); foundArmorPolish = flags5[0]; foundVitamins = flags5[1]; foundBezoar = flags5[2]; foundAdhesiveBandage = flags5[3]; foundFastClock = flags5[4]; foundTrifoldMap = flags5[5]; foundMegaphone = flags5[6]; foundNazar = flags5[7]; BitsByte flags6 = reader.ReadByte(); foundBlindfold = flags6[0]; foundSorcE = flags6[1]; foundWE = flags6[2]; foundRE = flags6[3]; foundSumE = flags6[4]; foundFeralClaw = flags6[5]; foundTitanGlove = flags6[6]; foundMagmaStone = flags6[7]; BitsByte flags7 = reader.ReadByte(); foundSharkTooth = flags7[0]; foundBlackBelt = flags7[1]; foundMoonCharm = flags7[2]; foundMoonStone = flags7[3]; foundRifleScope = flags7[4]; foundPaladinShield = flags7[5]; foundFrozenTurtleShell = flags7[6]; foundPutridScent = flags7[7]; BitsByte flags8 = reader.ReadByte(); foundFleshKnuckles = flags8[0]; foundMagicQuiver = flags8[1]; foundCobaltShield = flags8[2]; foundPanicNecklace = flags8[3]; foundCrossNecklace = flags8[4]; foundStarCloak = flags8[5]; foundNecromanticScroll = flags8[6]; foundObsidianRose = flags8[7]; BitsByte flags9 = reader.ReadByte(); foundShackle = flags9[0]; foundSunStone = flags9[1]; foundHerculesBeetle = flags9[2]; foundPygmyNecklace = flags9[3]; foundMP7 = flags9[4]; foundT1 = flags9[5]; foundT2 = flags9[6]; foundT3 = flags9[7]; BitsByte flags10 = reader.ReadByte(); foundPHD = flags10[0]; foundAntiBuffMode = flags10[1]; foundFlyingCarpet = flags10[2]; BitsByte flags11 = reader.ReadByte(); downedDOGPumpking = flags11[0]; downedDOGIceQueen = flags11[1]; downedSandElemental = flags11[2]; // As mentioned in NetSend, BitBytes can contain 8 values. If you have more, be sure to read the additional data: // BitsByte flags2 = reader.ReadByte(); // downed9thBoss = flags[0]; }
public override void Pack(Stream stream) { BinaryWriter writer = new BinaryWriter(stream); writer.Write(Time); BitsByte worldinfo = new BitsByte(DayTime, BloodMoon, Eclipse); writer.Write(worldinfo); writer.Write(MoonPhase); writer.Write(MaxTilesX); writer.Write(MaxTilesY); writer.Write(SpawnX); writer.Write(SpawnY); writer.Write(WorldSurface); writer.Write(RockLayer); writer.Write(WorldID); writer.Write(WorldName); writer.Write(MoonType); writer.Write(SetBG0); writer.Write(SetBG1); writer.Write(SetBG2); writer.Write(SetBG3); writer.Write(SetBG4); writer.Write(SetBG5); writer.Write(SetBG6); writer.Write(SetBG7); writer.Write(IceBackStyle); writer.Write(JungleBackStyle); writer.Write(HellBackStyle); writer.Write(WindSpeed); writer.Write(NumberOfClouds); writer.Write(TreeX0); writer.Write(TreeX1); writer.Write(TreeX2); writer.Write(TreeStyle0); writer.Write(TreeStyle1); writer.Write(TreeStyle2); writer.Write(TreeStyle3); writer.Write(CaveBackX0); writer.Write(CaveBackX1); writer.Write(CaveBackX2); writer.Write(CaveBackStyle0); writer.Write(CaveBackStyle1); writer.Write(CaveBackStyle2); writer.Write(CaveBackStyle3); writer.Write(Rain); BitsByte bosses1 = new BitsByte((BossFlags & BossFlags.OrbSmashed) == BossFlags.OrbSmashed, (BossFlags & BossFlags.DownedBoss1) == BossFlags.DownedBoss1, (BossFlags & BossFlags.DownedBoss2) == BossFlags.DownedBoss2, (BossFlags & BossFlags.DownedBoss3) == BossFlags.DownedBoss3, (BossFlags & BossFlags.HardMode) == BossFlags.HardMode, (BossFlags & BossFlags.DownedClown) == BossFlags.DownedClown, (BossFlags & BossFlags.ServerSideCharacter) == BossFlags.ServerSideCharacter, (BossFlags & BossFlags.DownedPlantBoss) == BossFlags.DownedPlantBoss); writer.Write(bosses1); BitsByte bosses2 = new BitsByte((BossFlags2 & BossFlags2.DownedMechBoss1) == BossFlags2.DownedMechBoss1, (BossFlags2 & BossFlags2.DownedMechBoss2) == BossFlags2.DownedMechBoss2, (BossFlags2 & BossFlags2.DownedMechBoss3) == BossFlags2.DownedMechBoss3, (BossFlags2 & BossFlags2.DownedMechBossAny) == BossFlags2.DownedMechBossAny, (BossFlags2 & BossFlags2.CloudBg) == BossFlags2.CloudBg, (BossFlags2 & BossFlags2.Crimson) == BossFlags2.Crimson, (BossFlags2 & BossFlags2.PumpkinMoon) == BossFlags2.PumpkinMoon, (BossFlags2 & BossFlags2.SnowMoon) == BossFlags2.SnowMoon); writer.Write(bosses2); BitsByte bosses3 = new BitsByte((BossFlags3 & BossFlags3.ExpertMode) == BossFlags3.ExpertMode, (BossFlags3 & BossFlags3.FastForwardTime) == BossFlags3.FastForwardTime, (BossFlags3 & BossFlags3.SlimeRain) == BossFlags3.SlimeRain, (BossFlags3 & BossFlags3.DownedKingSlime) == BossFlags3.DownedKingSlime, (BossFlags3 & BossFlags3.DownedQueenBee) == BossFlags3.DownedQueenBee, (BossFlags3 & BossFlags3.DownedFishron) == BossFlags3.DownedFishron, (BossFlags3 & BossFlags3.DownedMartians) == BossFlags3.DownedMartians, (BossFlags3 & BossFlags3.DownedAncientCultist) == BossFlags3.DownedAncientCultist); writer.Write(bosses3); BitsByte bosses4 = new BitsByte((BossFlags4 & BossFlags4.DownedMoonLord) == BossFlags4.DownedMoonLord, (BossFlags4 & BossFlags4.DownedHalloweenKing) == BossFlags4.DownedHalloweenKing, (BossFlags4 & BossFlags4.DownedHalloweenTree) == BossFlags4.DownedHalloweenTree, (BossFlags4 & BossFlags4.DownedChristmasIceQueen) == BossFlags4.DownedChristmasIceQueen, (BossFlags4 & BossFlags4.DownedChristmasSantank) == BossFlags4.DownedChristmasSantank, (BossFlags4 & BossFlags4.DownedChristmasTree) == BossFlags4.DownedChristmasTree); writer.Write(bosses4); writer.Write((sbyte)Main.invasionType); writer.Write(Main.LobbyId); }
public override void NetReceive(BinaryReader reader) { BitsByte flags1 = reader.ReadByte(); downedAqueous = flags1[0]; downedVoidLeviathan = flags1[1]; downedInfernace = flags1[2]; downedScourgeFighter = flags1[3]; downedRegaroth = flags1[4]; downedCelestial = flags1[5]; downedWasteland = flags1[6]; downedPermafrost = flags1[7]; BitsByte flags2 = reader.ReadByte(); downedGuardian = flags2[0]; downedEye = flags2[1]; downedAncientWyrm = flags2[2]; downedObsidious = flags2[3]; downedShadeWyrm = flags2[4]; downedVolcanox = flags2[5]; downedVoidEvent = flags2[6]; downedToySlime = flags2[7]; BitsByte flags3 = reader.ReadByte(); downedAzana = flags3[0]; downedAncients = flags3[1]; downedCosmicObserver = flags3[2]; // lab gen & drive obtained BitsByte flags4 = reader.ReadByte(); generatedLabs = flags4[0]; aqueousDrive = flags4[1]; azanaDrive = flags4[2]; celestialDrive = flags4[3]; guardianDrive = flags4[4]; infernaceDrive = flags4[5]; obsidiousDrive = flags4[6]; permafrostDrive = flags4[7]; BitsByte flags5 = reader.ReadByte(); regarothDrive = flags5[0]; scourgeFighterDrive = flags5[1]; voidLeviathanDrive = flags5[2]; volcanoxDrive = flags5[3]; wastelandDrive = flags5[4]; // essence notifacations BitsByte flags6 = reader.ReadByte(); desertText = flags6[0]; fireText = flags6[1]; skyText = flags6[2]; frostText = flags6[3]; waterText = flags6[4]; voidText = flags6[5]; //random BitsByte flags7 = reader.ReadByte(); awakenedMode = flags7[0]; }