public static void HandleCharEnum(Packet packet) { var count = packet.ReadByte("Count"); for (var i = 0; i < count; i++) { var guid = packet.ReadGuid("GUID"); var name = packet.ReadCString("Name"); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte); packet.ReadEnum<Gender>("Gender", TypeCode.Byte); packet.ReadByte("Skin"); packet.ReadByte("Face"); packet.ReadByte("Hair Style"); packet.ReadByte("Hair Color"); packet.ReadByte("Facial Hair"); var level = packet.ReadByte("Level"); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id"); var mapId = packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); var pos = packet.ReadVector3("Position"); packet.ReadInt32("Guild Id"); packet.ReadEnum<CharacterFlag>("Character Flags", TypeCode.Int32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadEnum<CustomizationFlag>("Customization Flags", TypeCode.Int32); var firstLogin = packet.ReadBoolean("First Login"); packet.ReadInt32("Pet Display Id"); packet.ReadInt32("Pet Level"); packet.ReadEnum<CreatureFamily>("Pet Family", TypeCode.Int32); for (var j = 0; j < 19; j++) { packet.ReadInt32("Equip Display Id"); packet.ReadEnum<InventoryType>("Equip Inventory Type", TypeCode.Byte); packet.ReadInt32("Equip Aura Id"); } int bagCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3_11685) ? 4 : 1; for (var j = 0; j < bagCount; j++) { packet.ReadInt32("Bag Display Id"); packet.ReadEnum<InventoryType>("Bag Inventory Type", TypeCode.Byte); packet.ReadInt32("Bag Aura Id"); } if (firstLogin) { var startPos = new StartPosition {Map = mapId, Position = pos, Zone = zone}; packet.SniffFileInfo.Storage.StartPositions.TryAdd(new Tuple<Race, Class>(race, clss), startPos); } var playerInfo = new Player {Race = race, Class = clss, Name = name, FirstLogin = firstLogin, Level = level}; packet.SniffFileInfo.Storage.Objects.AddOrUpdate(guid, playerInfo); } }
public static void HandleCharEnum(Packet packet) { //var unkCounter = packet.ReadBits("Unk Counter", 21); packet.ReadBit("Unk bit"); var count = packet.ReadBits("Char count", 16); var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (int c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; charGuids[c][1] = packet.ReadBit(); guildGuids[c][5] = packet.ReadBit(); guildGuids[c][7] = packet.ReadBit(); guildGuids[c][6] = packet.ReadBit(); charGuids[c][5] = packet.ReadBit(); guildGuids[c][3] = packet.ReadBit(); charGuids[c][2] = packet.ReadBit(); guildGuids[c][4] = packet.ReadBit(); charGuids[c][7] = packet.ReadBit(); nameLenghts[c] = packet.ReadBits(6); firstLogins[c] = packet.ReadBit(); guildGuids[c][1] = packet.ReadBit(); charGuids[c][4] = packet.ReadBit(); guildGuids[c][2] = packet.ReadBit(); guildGuids[c][0] = packet.ReadBit(); charGuids[c][6] = packet.ReadBit(); charGuids[c][3] = packet.ReadBit(); charGuids[c][0] = packet.ReadBit(); } packet.ReadBits("RIDBIT21", 21); packet.ResetBitReader(); for (int c = 0; c < count; ++c) { packet.ReadXORByte(charGuids[c], 4); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); packet.ReadXORByte(charGuids[c], 6); packet.ReadXORByte(guildGuids[c], 1); packet.ReadByte("List Order", c); packet.ReadByte("Hair Style", c); packet.ReadXORByte(guildGuids[c], 6); packet.ReadXORByte(charGuids[c], 3); var x = packet.ReadSingle("Position X", c); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); packet.ReadXORByte(guildGuids[c], 0); packet.ReadInt32("Pet Level", c); var mapId = packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id", c); packet.ReadXORByte(guildGuids[c], 7); packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); packet.ReadXORByte(guildGuids[c], 4); packet.ReadXORByte(charGuids[c], 2); packet.ReadXORByte(charGuids[c], 5); var y = packet.ReadSingle("Position Y", c); packet.ReadInt32("Pet Family", c); var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); packet.ReadInt32("Pet Display ID", c); packet.ReadXORByte(guildGuids[c], 3); packet.ReadXORByte(charGuids[c], 7); var level = packet.ReadByte("Level", c); packet.ReadXORByte(charGuids[c], 1); packet.ReadXORByte(guildGuids[c], 2); for (int j = 0; j < 23; ++j) { packet.ReadInt32("Item EnchantID", c, j); packet.ReadInt32("Item DisplayID", c, j); packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, j); } var z = packet.ReadSingle("Position Z", c); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id", c); packet.ReadByte("Facial Hair", c); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); packet.ReadXORByte(guildGuids[c], 5); packet.ReadByte("Skin", c); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); packet.ReadByte("Face", c); packet.ReadXORByte(charGuids[c], 0); packet.ReadByte("Hair Color", c); var playerGuid = new Guid(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteGuid("Character GUID", charGuids[c], c); packet.WriteGuid("Guild GUID", guildGuids[c], c); if (firstLogins[c]) { var startPos = new StartPosition(); startPos.Map = mapId; startPos.Position = new Vector3(x, y, z); startPos.Zone = zone; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); StoreGetters.AddName(playerGuid, name); } }
public static void HandleCharEnum434(Packet packet) { //var unkCounter = packet.ReadBits("Unk Counter", 23); var unkCounter = packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); var count = packet.ReadBits("Char count", 17); var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (var c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; /* guildGuids[c][2] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][2] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][6] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); nameLenghts[c] = packet.ReadBits(7); guildGuids[c][0] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][0] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][1] = (byte)(packet.ReadBit() ? 1 : 0); firstLogins[c] = packet.ReadBit(); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][6] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][1] = (byte)(packet.ReadBit() ? 1 : 0);*/ charGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); nameLenghts[c] = packet.ReadBits(7); charGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][1] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); firstLogins[c] = packet.ReadBit(); charGuids[c][0] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][2] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][6] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); packet.ReadBit(); packet.ReadBit(); packet.ReadBit(); packet.ReadBit(); packet.ReadBit(); packet.ReadBit(); packet.ReadBit(); } //packet.ReadBit(); // no idea, not used in client if (count > 0) { for (int c = 0; c < count; ++c) { var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); for (var itm = 0; itm < 19; ++itm) { packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Item DisplayID", c, itm); packet.ReadInt32("Item EnchantID", c, itm); } for (var itm = 0; itm < 4; ++itm) { packet.ReadEnum<InventoryType>("Bag InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Bag DisplayID", c, itm); packet.ReadInt32("Bag EnchantID", c, itm); } packet.ReadInt32("Pet Family", c); packet.ReadByte("List Order", c); packet.ReadByte("Hair Style", c); packet.ReadInt32("Pet Display ID", c); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); packet.ReadByte("Hair Color", c); var mapId = packet.ReadInt32("Map", c); var z = packet.ReadSingle("Position Z", c); packet.ReadInt32("Pet Level", c); if (charGuids[c][3] != 0) charGuids[c][3] ^= packet.ReadByte(); var y = packet.ReadSingle("Position Y", c); packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); packet.ReadByte("Facial Hair", c); if (charGuids[c][7] != 0) charGuids[c][7] ^= packet.ReadByte(); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); packet.ReadByte("Face", c); if (charGuids[c][0] != 0) charGuids[c][0] ^= packet.ReadByte(); if (charGuids[c][2] != 0) charGuids[c][2] ^= packet.ReadByte(); var x = packet.ReadSingle("Position X", c); packet.ReadByte("Skin", c); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); var level = packet.ReadByte("Level", c); if (charGuids[c][1] != 0) charGuids[c][1] ^= packet.ReadByte(); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id", c); // Not ideal if (guildGuids[c][0] != 0) guildGuids[c][0] ^= packet.ReadByte(); if (guildGuids[c][1] != 0) guildGuids[c][1] ^= packet.ReadByte(); if (guildGuids[c][7] != 0) guildGuids[c][7] ^= packet.ReadByte(); if (guildGuids[c][4] != 0) guildGuids[c][4] ^= packet.ReadByte(); if (charGuids[c][4] != 0) charGuids[c][4] ^= packet.ReadByte(); if (charGuids[c][5] != 0) charGuids[c][5] ^= packet.ReadByte(); if (guildGuids[c][5] != 0) guildGuids[c][5] ^= packet.ReadByte(); if (charGuids[c][6] != 0) charGuids[c][6] ^= packet.ReadByte(); if (guildGuids[c][3] != 0) guildGuids[c][3] ^= packet.ReadByte(); if (guildGuids[c][6] != 0) guildGuids[c][6] ^= packet.ReadByte(); if (guildGuids[c][2] != 0) guildGuids[c][2] ^= packet.ReadByte(); var playerGuid = new Guid(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteLine("[{0}] Character GUID: {1}", c, playerGuid); packet.WriteLine("[{0}] Guild GUID: {1}", c, new Guid(BitConverter.ToUInt64(guildGuids[c], 0))); if (firstLogins[c]) { var startPos = new StartPosition(); startPos.Map = mapId; startPos.Position = new Vector3(x, y, z); startPos.Zone = zone; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); } for (var c = 0; c < unkCounter; c++) packet.WriteLine("Unk Loop: {0}, {1}", packet.ReadUInt32(), packet.ReadByte()); } }
public static void HandleCharEnum422(Packet packet) { packet.ReadByte("Unk Flag"); int count = packet.ReadInt32("Char Count"); packet.ReadInt32("Unk Count"); var bits = new bool[count, 17]; for (int c = 0; c < count; c++) for (int j = 0; j < 17; j++) bits[c, j] = packet.ReadBit(); for (int c = 0; c < count; c++) { var low = new byte[8]; var guild = new byte[8]; var name = packet.ReadCString("Name", c); if (bits[c, 0]) guild[5] = (byte)(packet.ReadByte() ^ 1); packet.ReadByte("Face", c); var mapId = packet.ReadInt32("Map", c); if (bits[c, 12]) low[1] = (byte)(packet.ReadByte() ^ 1); if (bits[c, 1]) low[4] = (byte)(packet.ReadByte() ^ 1); if (bits[c, 10]) guild[4] = (byte)(packet.ReadByte() ^ 1); if (bits[c, 15]) guild[0] = (byte)(packet.ReadByte() ^ 1); var pos = packet.ReadVector3("Position", c); if (bits[c, 11]) low[0] = (byte)(packet.ReadByte() ^ 1); var zone = packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id", c); packet.ReadInt32("Pet Level", c); if (bits[c, 8]) low[3] = (byte)(packet.ReadByte() ^ 1); if (bits[c, 14]) low[7] = (byte)(packet.ReadByte() ^ 1); packet.ReadByte("Facial Hair", c); packet.ReadByte("Skin", c); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); packet.ReadInt32("Pet Family", c); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); if (bits[c, 9]) low[2] = (byte)(packet.ReadByte() ^ 1); packet.ReadInt32("Pet Display ID", c); if (bits[c, 3]) guild[7] = (byte)(packet.ReadByte() ^ 1); var level = packet.ReadByte("Level", c); if (bits[c, 7]) low[6] = (byte)(packet.ReadByte() ^ 1); packet.ReadByte("Hair Style", c); if (bits[c, 13]) guild[2] = (byte)(packet.ReadByte() ^ 1); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); packet.ReadByte("Hair Color", c); if (bits[c, 5]) guild[6] = (byte)(packet.ReadByte() ^ 1); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); if (bits[c, 6]) low[5] = (byte)(packet.ReadByte() ^ 1); if (bits[c, 2]) guild[3] = (byte)(packet.ReadByte() ^ 1); packet.ReadByte("List Order", c); for (int itm = 0; itm < 19; itm++) { packet.ReadInt32("Item EnchantID", c, itm); packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Item DisplayID", c, itm); } for (int itm = 0; itm < 4; itm++) { packet.ReadInt32("Bag EnchantID", c, itm); packet.ReadEnum<InventoryType>("Bag InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Bag DisplayID", c, itm); } packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); if (bits[c, 4]) guild[1] = (byte)(packet.ReadByte() ^ 1); var playerGuid = new Guid(BitConverter.ToUInt64(low, 0)); packet.WriteLine("[{0}] Character GUID: {1}", c, playerGuid); packet.WriteLine("[{0}] Guild GUID: {1}", c, new Guid(BitConverter.ToUInt64(guild, 0))); var firstLogin = bits[c, 16]; if (firstLogin) { var startPos = new StartPosition {Map = mapId, Position = pos, Zone = zone}; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogin, Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); } }
public static void HandleCharEnum430(Packet packet) { Characters.Clear(); var count = packet.ReadBits("Char count", 17); var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (var c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; guildGuids[c][2] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][2] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][6] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][4] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); nameLenghts[c] = packet.ReadBits(7); guildGuids[c][0] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][0] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][3] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][1] = (byte)(packet.ReadBit() ? 1 : 0); firstLogins[c] = packet.ReadBit(); guildGuids[c][5] = (byte)(packet.ReadBit() ? 1 : 0); charGuids[c][7] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][6] = (byte)(packet.ReadBit() ? 1 : 0); guildGuids[c][1] = (byte)(packet.ReadBit() ? 1 : 0); } var unkCounter = packet.ReadBits("Unk Counter", 23); packet.ReadBit(); // no idea, not used in client for (int c = 0; c < count; ++c) { for (var itm = 0; itm < 19; ++itm) { packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Item DisplayID", c, itm); packet.ReadInt32("Item EnchantID", c, itm); } for (var itm = 0; itm < 4; ++itm) { packet.ReadEnum<InventoryType>("Bag InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Bag DisplayID", c, itm); packet.ReadInt32("Bag EnchantID", c, itm); } if (guildGuids[c][0] != 0) guildGuids[c][0] ^= packet.ReadByte(); if (guildGuids[c][1] != 0) guildGuids[c][1] ^= packet.ReadByte(); packet.ReadByte("Face", c); packet.ReadInt32("Pet Display ID", c); if (guildGuids[c][7] != 0) guildGuids[c][7] ^= packet.ReadByte(); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); var level = packet.ReadByte("Level", c); packet.ReadInt32("Pet Level", c); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id", c); var y = packet.ReadSingle("Position Y", c); packet.ReadInt32("Pet Family", c); packet.ReadByte("Hair Style", c); if (charGuids[c][1] != 0) charGuids[c][1] ^= packet.ReadByte(); var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); if (charGuids[c][0] != 0) charGuids[c][0] ^= packet.ReadByte(); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); packet.ReadByte("List Order", c); if (charGuids[c][7] != 0) charGuids[c][7] ^= packet.ReadByte(); var z = packet.ReadSingle("Position Z", c); var mapId = packet.ReadInt32("Map", c); if (guildGuids[c][4] != 0) guildGuids[c][4] ^= packet.ReadByte(); packet.ReadByte("Hair Color", c); if (charGuids[c][3] != 0) charGuids[c][3] ^= packet.ReadByte(); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); packet.ReadByte("Skin", c); if (charGuids[c][4] != 0) charGuids[c][4] ^= packet.ReadByte(); if (charGuids[c][5] != 0) charGuids[c][5] ^= packet.ReadByte(); if (guildGuids[c][5] != 0) guildGuids[c][5] ^= packet.ReadByte(); packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); var x = packet.ReadSingle("Position X", c); packet.ReadByte("Facial Hair", c); if (charGuids[c][6] != 0) charGuids[c][6] ^= packet.ReadByte(); if (guildGuids[c][3] != 0) guildGuids[c][3] ^= packet.ReadByte(); if (charGuids[c][2] != 0) charGuids[c][2] ^= packet.ReadByte(); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); if (guildGuids[c][6] != 0) guildGuids[c][6] ^= packet.ReadByte(); if (guildGuids[c][2] != 0) guildGuids[c][2] ^= packet.ReadByte(); var playerGuid = new Guid(BitConverter.ToUInt64(charGuids[c], 0)); packet.Writer.WriteLine("[{0}] Character GUID: {1}", c, playerGuid); packet.Writer.WriteLine("[{0}] Guild GUID: {1}", c, new Guid(BitConverter.ToUInt64(guildGuids[c], 0))); if (firstLogins[c]) { var startPos = new StartPosition(); startPos.Map = mapId; startPos.Position = new Vector3(x, y, z); startPos.Zone = zone; packet.SniffFileInfo.Stuffing.StartPositions.TryAdd(new Tuple<Race, Class>(race, clss), startPos); } var chInfo = new Player(); chInfo.Race = race; chInfo.Class = clss; chInfo.Name = name; chInfo.FirstLogin = firstLogins[c]; chInfo.Level = level; Characters.Add(playerGuid, chInfo); // TODO Remove when its usage is converted to Stuffing.Objects packet.SniffFileInfo.Stuffing.Objects.TryAdd(playerGuid, chInfo); } for (var c = 0; c < unkCounter; c++) packet.Writer.WriteLine("Unk Loop: {0}, {1}", packet.ReadUInt32(), packet.ReadByte()); }
public static void HandleCharEnum(Packet packet) { // імена не перевірено, лише послідовність типів данних var unkCounter = packet.ReadBits("Unk Counter", 21);//[DW5] var count = packet.ReadBits("Char count", 16);//[DW9] var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (int c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; guildGuids[c][4] = packet.ReadBit(); charGuids[c][0] = packet.ReadBit(); guildGuids[c][3] = packet.ReadBit(); charGuids[c][3] = packet.ReadBit(); charGuids[c][7] = packet.ReadBit(); packet.ReadBit("unk bit 124", c); //124 firstLogins[c] = packet.ReadBit(); //108 charGuids[c][6] = packet.ReadBit(); guildGuids[c][6] = packet.ReadBit(); nameLenghts[c] = packet.ReadBits(6); charGuids[c][1] = packet.ReadBit(); guildGuids[c][1] = packet.ReadBit(); guildGuids[c][0] = packet.ReadBit(); charGuids[c][4] = packet.ReadBit(); guildGuids[c][7] = packet.ReadBit(); charGuids[c][2] = packet.ReadBit(); charGuids[c][5] = packet.ReadBit(); guildGuids[c][2] = packet.ReadBit(); guildGuids[c][5] = packet.ReadBit(); }//+=416 //packet.ResetBitReader(); packet.ReadBit("UnkB16"); for (int c = 0; c < count; ++c) { packet.ReadInt32("DW132", c); packet.ReadXORByte(charGuids[c], 1);//1 packet.ReadByte("Slot", c); //57 packet.ReadByte("Hair Style", c); //63 packet.ReadXORByte(guildGuids[c], 2);//90 packet.ReadXORByte(guildGuids[c], 0);//88 packet.ReadXORByte(guildGuids[c], 6);//94 var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); packet.ReadXORByte(guildGuids[c], 3);//91 var x = packet.ReadSingle("Position X", c); //4Ch packet.ReadInt32("DW104", c); packet.ReadByte("Face", c); //62 var Class = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); //59 packet.ReadXORByte(guildGuids[c], 5); //93 for (var itm = 0; itm < 23; itm++) { packet.ReadInt32("Item EnchantID", c, itm); //140 prolly need to replace those 2 packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); //144 packet.ReadInt32("Item DisplayID", c, itm); //136 } packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); //100 packet.ReadXORByte(charGuids[c], 3); //3 packet.ReadXORByte(charGuids[c], 5); //5 packet.ReadInt32("PetFamily", c); //120 packet.ReadXORByte(guildGuids[c], 4); //92 var mapId = packet.ReadInt32("Map", c); //72 var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); //58 packet.ReadByte("Skin", c); //61 packet.ReadXORByte(guildGuids[c], 1); //89 var level = packet.ReadByte("Level", c); //66 packet.ReadXORByte(charGuids[c], 0); //0 packet.ReadXORByte(charGuids[c], 2); //2 packet.ReadByte("Hair Color", c); //64 packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); //60 packet.ReadByte("Facial Hair", c); //65 packet.ReadInt32("Pet Level", c); //116 packet.ReadXORByte(charGuids[c], 4); //4 packet.ReadXORByte(charGuids[c], 7); //7 var y = packet.ReadSingle("Position Y", c); //50h packet.ReadInt32("Pet DisplayID", c); //112 packet.ReadInt32("DW128", c); packet.ReadXORByte(charGuids[c], 6); //6 packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); //96 var zone = packet.ReadEntry<UInt32>(StoreNameType.Zone, "Zone Id", c); //68 packet.ReadXORByte(guildGuids[c], 7); //95 var z = packet.ReadSingle("Position Z", c); //54h var playerGuid = new Guid(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteGuid("Character GUID", charGuids[c], c); packet.WriteGuid("Guild GUID", guildGuids[c], c); if (firstLogins[c]) { var startPos = new StartPosition(); startPos.Map = mapId; startPos.Position = new Vector3(x, y, z); startPos.Zone = (int)zone; Storage.StartPositions.Add(new Tuple<Race, Class>(race, Class), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = Class, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); StoreGetters.AddName(playerGuid, name); } for (var i = 0; i < unkCounter; i++) { packet.ReadByte("Unk byte", i); // char_table+28+i*8 packet.ReadUInt32("Unk int", i); // char_table+24+i*8 } }
public static void HandleCharEnum(Packet packet) { packet.ReadBit("Success"); packet.ReadBit("IsDeletedCharacters"); var charsCount = packet.ReadUInt32("Characters Count"); var restrictionsCount = packet.ReadUInt32("FactionChangeRestrictionsCount"); for (uint i = 0; i < charsCount; ++i) { packet.ReadPackedGuid128("Guid", i); packet.ReadByte("ListPosition", i); var race = packet.ReadByteE<Race>("RaceID", i); var klass = packet.ReadByteE<Class>("ClassID", i); packet.ReadByte("SexID", i); packet.ReadByte("SkinID", i); packet.ReadByte("FaceID", i); packet.ReadByte("HairStyle", i); packet.ReadByte("HairColor", i); packet.ReadByte("FacialHairStyle", i); packet.ReadByte("ExperienceLevel", i); var zone = packet.ReadUInt32("ZoneID", i); var mapId = packet.ReadUInt32("MapID", i); var pos = packet.ReadVector3("PreloadPos", i); packet.ReadPackedGuid128("GuildGUID", i); packet.ReadUInt32("Flags", i); packet.ReadUInt32("Flags2", i); packet.ReadUInt32("Flags3", i); packet.ReadUInt32("PetCreatureDisplayID", i); packet.ReadUInt32("PetExperienceLevel", i); packet.ReadUInt32("PetCreatureFamilyID", i); packet.ReadUInt32("ProfessionIDs", i, 0); packet.ReadUInt32("ProfessionIDs", i, 1); for (uint j = 0; j < 23; ++j) { packet.ReadUInt32("InventoryItem DisplayID", i, j); packet.ReadUInt32("InventoryItem DisplayEnchantID", i, j); packet.ReadByteE<InventoryType>("InventoryItem InvType", i, j); } packet.ResetBitReader(); var nameLength = packet.ReadBits("Character Name Length", 6, i); var firstLogin = packet.ReadBit("FirstLogin", i); packet.ReadBit("BoostInProgress", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V6_1_0_19678)) packet.ReadBits("Unk Bits141", 5, i); packet.ReadWoWString("Character Name", nameLength, i); if (firstLogin) { var startPos = new StartPosition { Map = mapId, Position = pos, Zone = zone }; Storage.StartPositions.Add(new Tuple<Race, Class>(race, klass), startPos, packet.TimeSpan); } } for (var i = 0; i < restrictionsCount; ++i) { packet.ReadUInt32("FactionChangeRestriction Mask", i); packet.ReadByte("FactionChangeRestriction RaceID", i); } }
public static void HandleCharEnum422(Packet packet) { packet.ReadByte("Unk Flag"); int count = packet.ReadInt32("Char Count"); packet.ReadInt32("Unk Count"); var firstLogin = new bool[count]; var playerGuid = new byte[count][]; var guildGuid = new byte[count][]; for (int c = 0; c < count; c++) { playerGuid[c] = new byte[8]; guildGuid[c] = new byte[8]; guildGuid[c][5] = packet.ReadBit();//0 playerGuid[c][4] = packet.ReadBit();//1 guildGuid[c][3] = packet.ReadBit();//2 guildGuid[c][7] = packet.ReadBit();//3 guildGuid[c][1] = packet.ReadBit();//4 guildGuid[c][6] = packet.ReadBit();//5 playerGuid[c][5] = packet.ReadBit();//6 playerGuid[c][6] = packet.ReadBit();//7 playerGuid[c][3] = packet.ReadBit();//8 playerGuid[c][2] = packet.ReadBit();//9 guildGuid[c][4] = packet.ReadBit();//10 playerGuid[c][0] = packet.ReadBit();//11 playerGuid[c][1] = packet.ReadBit();//12 guildGuid[c][2] = packet.ReadBit();//13 playerGuid[c][7] = packet.ReadBit();//14 guildGuid[c][0] = packet.ReadBit();//15 firstLogin[c] = packet.ReadBit();//16 } for (int c = 0; c < count; c++) { var name = packet.ReadCString("Name", c); packet.ReadXORByte(guildGuid[c], 5); packet.ReadByte("Face", c); var mapId = packet.ReadInt32("Map", c); packet.ReadXORByte(playerGuid[c], 1); packet.ReadXORByte(playerGuid[c], 4); packet.ReadXORByte(guildGuid[c], 4); packet.ReadXORByte(guildGuid[c], 0); var pos = packet.ReadVector3("Position", c); packet.ReadXORByte(playerGuid[c], 0); var zone = packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id", c); packet.ReadInt32("Pet Level", c); packet.ReadXORByte(playerGuid[c], 3); packet.ReadXORByte(playerGuid[c], 7); packet.ReadByte("Facial Hair", c); packet.ReadByte("Skin", c); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); packet.ReadInt32("Pet Family", c); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); packet.ReadXORByte(playerGuid[c], 2); packet.ReadInt32("Pet Display ID", c); packet.ReadXORByte(guildGuid[c], 7); var level = packet.ReadByte("Level", c); packet.ReadXORByte(playerGuid[c], 6); packet.ReadByte("Hair Style", c); packet.ReadXORByte(guildGuid[c], 2); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); packet.ReadByte("Hair Color", c); packet.ReadXORByte(guildGuid[c], 6); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); packet.ReadXORByte(playerGuid[c], 5); packet.ReadXORByte(guildGuid[c], 3); packet.ReadByte("List Order", c); for (int itm = 0; itm < 19; itm++) { packet.ReadInt32("Item EnchantID", c, itm); packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Item DisplayID", c, itm); } for (int itm = 0; itm < 4; itm++) { packet.ReadInt32("Bag EnchantID", c, itm); packet.ReadEnum<InventoryType>("Bag InventoryType", TypeCode.Byte, c, itm); packet.ReadInt32("Bag DisplayID", c, itm); } packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); packet.ReadXORByte(guildGuid[c], 1); var guidPlayer = new Guid(BitConverter.ToUInt64(playerGuid[c], 0)); packet.WriteGuid("Character Guid", playerGuid[c],c); packet.WriteGuid("Guild Guid", guildGuid[c],c); if (firstLogin[c]) { var startPos = new StartPosition {Map = mapId, Position = pos, Zone = zone}; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogin[c], Level = level }; if (Storage.Objects.ContainsKey(guidPlayer)) Storage.Objects[guidPlayer] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(guidPlayer, playerInfo, packet.TimeSpan); StoreGetters.AddName(guidPlayer, name); } }
public static void HandleCharEnum433(Packet packet) { var unkCounter = packet.ReadBits("Unk Counter", 23); var count = packet.ReadBits("Char count", 17); var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (var c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; //100% pozition, and flag //%50 flag //20 nothing charGuids[c][0] = packet.ReadBit(); //100% guildGuids[c][0] = packet.ReadBit();//50% charGuids[c][2] = packet.ReadBit(); //100% guildGuids[c][2] = packet.ReadBit();//50% firstLogins[c] = packet.ReadBit(); //100% charGuids[c][3] = packet.ReadBit(); //100% charGuids[c][6] = packet.ReadBit(); //100% guildGuids[c][2] = packet.ReadBit();//20% charGuids[c][4] = packet.ReadBit(); //20% charGuids[c][5] = packet.ReadBit(); //20% nameLenghts[c] = packet.ReadBits(4); //100% guildGuids[c][3] = packet.ReadBit();//20% guildGuids[c][4] = packet.ReadBit();//50% guildGuids[c][5] = packet.ReadBit();//20% charGuids[c][1] = packet.ReadBit(); //100% packet.ReadBit(); //20% guildGuids[c][6] = packet.ReadBit();//20% charGuids[c][7] = packet.ReadBit(); //100% guildGuids[c][7] = packet.ReadBit();//50% packet.ReadBit(); //20% packet.ReadBit(); //20% } // no idea, not used in client packet.ReadByte(); for (int c = 0; c < count; ++c) { for (var itm = 0; itm < 19; ++itm) { packet.ReadInt32("Item EnchantID", c, itm); packet.ReadInt32("Item DisplayID", c, itm); packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, itm); } for (var itm = 0; itm < 4; ++itm) { packet.ReadInt32("Bag EnchantID", c, itm); packet.ReadInt32("Bag DisplayID", c, itm); packet.ReadEnum<InventoryType>("Bag InventoryType", TypeCode.Byte, c, itm); } var zone = packet.ReadEntry<UInt32>(StoreNameType.Zone, "Zone Id", c); packet.ReadInt32("Pet Level", c); packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); packet.ReadByte("Facial Hair", c); packet.ReadXORByte(guildGuids[c], 0); packet.ReadXORByte(charGuids[c], 0); packet.ReadXORByte(charGuids[c], 2); if (guildGuids[c][2] != 0) // guildGuids[c][2] ^= packet.ReadByte(); if (charGuids[c][7] != 0) charGuids[c][7] ^= packet.ReadByte(); if (guildGuids[c][7] != 0) // guildGuids[c][7] ^= packet.ReadByte(); packet.ReadByte("List Order", c); packet.ReadInt32("Pet Display ID", c); // no ideal ////////////////////////////// if (charGuids[c][4] != 0) charGuids[c][4] ^= packet.ReadByte(); if (guildGuids[c][4] != 0) // guildGuids[c][4] ^= packet.ReadByte(); if (charGuids[c][5] != 0) // charGuids[c][5] ^= packet.ReadByte(); if (guildGuids[c][5] != 0) // guildGuids[c][5] ^= packet.ReadByte(); if (guildGuids[c][1] != 0) // guildGuids[c][1] ^= packet.ReadByte(); if (guildGuids[c][3] != 0) // guildGuids[c][3] ^= packet.ReadByte(); if (guildGuids[c][6] != 0) // guildGuids[c][6] ^= packet.ReadByte(); ////////////////////////////////////////// if (charGuids[c][3] != 0) charGuids[c][3] ^= packet.ReadByte(); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); if (charGuids[c][6] != 0) charGuids[c][6] ^= packet.ReadByte(); var x = packet.ReadSingle("Position X", c); if (charGuids[c][1] != 0) charGuids[c][1] ^= packet.ReadByte(); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); packet.ReadInt32("Pet Family", c); var y = packet.ReadSingle("Position Y", c); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); packet.ReadByte("Hair Style", c); var level = packet.ReadByte("Level", c); var z = packet.ReadSingle("Position Z", c); packet.ReadEnum<CustomizationFlag>("CustomizationFlag", TypeCode.UInt32, c); packet.ReadByte("Skin", c); packet.ReadByte("Hair Color", c); packet.ReadByte("Face", c); var mapId = packet.ReadInt32("Map", c); var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); var playerGuid = new WowGuid(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteGuid("Character GUID", charGuids[c], c); packet.WriteGuid("Guild GUID", guildGuids[c], c); if (firstLogins[c]) { var startPos = new StartPosition(); startPos.Map = mapId; startPos.Position = new Vector3(x, y, z); startPos.Zone = (int) zone; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); StoreGetters.AddName(playerGuid, name); } for (var c = 0; c < unkCounter; c++) { packet.ReadUInt32("Unk1", c); packet.ReadByte("Unk2", c); } }
public static void HandleCharEnum510(Packet packet) { var unkCounter = packet.ReadBits("Unk Counter", 23); var count = packet.ReadBits("Char count", 17); var charGuids = new byte[count][]; var guildGuids = new byte[count][]; var firstLogins = new bool[count]; var nameLenghts = new uint[count]; for (int c = 0; c < count; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; charGuids[c][7] = packet.ReadBit(); charGuids[c][0] = packet.ReadBit(); charGuids[c][4] = packet.ReadBit(); guildGuids[c][2] = packet.ReadBit(); charGuids[c][5] = packet.ReadBit(); charGuids[c][3] = packet.ReadBit(); nameLenghts[c] = packet.ReadBits(7); guildGuids[c][0] = packet.ReadBit(); guildGuids[c][5] = packet.ReadBit(); guildGuids[c][3] = packet.ReadBit(); firstLogins[c] = packet.ReadBit(); guildGuids[c][6] = packet.ReadBit(); guildGuids[c][7] = packet.ReadBit(); charGuids[c][1] = packet.ReadBit(); guildGuids[c][4] = packet.ReadBit(); guildGuids[c][1] = packet.ReadBit(); charGuids[c][2] = packet.ReadBit(); charGuids[c][6] = packet.ReadBit(); } packet.ReadBit("Unk bit"); packet.ResetBitReader(); for (int c = 0; c < count; ++c) { packet.ReadInt32E<CharacterFlag>("CharacterFlag", c); packet.ReadInt32("Pet Family", c); var z = packet.ReadSingle("Position Z", c); packet.ReadXORByte(charGuids[c], 7); packet.ReadXORByte(guildGuids[c], 6); for (var itm = 0; itm < 23; ++itm) { packet.ReadInt32("Item EnchantID", c, itm); packet.ReadByteE<InventoryType>("Item InventoryType", c, itm); packet.ReadInt32("Item DisplayID", c, itm); } var x = packet.ReadSingle("Position X", c); var clss = packet.ReadByteE<Class>("Class", c); packet.ReadXORByte(charGuids[c], 5); var y = packet.ReadSingle("Position Y", c); packet.ReadXORByte(guildGuids[c], 3); packet.ReadXORByte(charGuids[c], 6); packet.ReadInt32("Pet Level", c); packet.ReadInt32("Pet Display ID", c); packet.ReadXORByte(charGuids[c], 2); packet.ReadXORByte(charGuids[c], 1); packet.ReadByte("Hair Color", c); packet.ReadByte("Facial Hair", c); packet.ReadXORByte(guildGuids[c], 2); var zone = packet.ReadUInt32<ZoneId>("Zone Id", c); packet.ReadByte("List Order", c); packet.ReadXORByte(charGuids[c], 0); packet.ReadXORByte(guildGuids[c], 1); packet.ReadByte("Skin", c); packet.ReadXORByte(charGuids[c], 4); packet.ReadXORByte(guildGuids[c], 5); var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); packet.ReadXORByte(guildGuids[c], 0); var level = packet.ReadByte("Level", c); packet.ReadXORByte(charGuids[c], 3); packet.ReadXORByte(guildGuids[c], 7); packet.ReadByte("Hair Style", c); packet.ReadXORByte(guildGuids[c], 4); packet.ReadByteE<Gender>("Gender", c); var mapId = packet.ReadInt32<MapId>("Map Id", c); packet.ReadUInt32E<CustomizationFlag>("CustomizationFlag", c); var race = packet.ReadByteE<Race>("Race", c); packet.ReadByte("Face", c); var playerGuid = new WowGuid64(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteGuid("Character GUID", charGuids[c], c); packet.WriteGuid("Guild GUID", guildGuids[c], c); if (firstLogins[c]) { var startPos = new StartPosition {Map = (uint) mapId, Position = new Vector3(x, y, z), Zone = zone}; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); StoreGetters.AddName(playerGuid, name); } for (var i = 0; i < unkCounter; ++i) { packet.ReadByte("Unk byte", i); packet.ReadUInt32("Unk int", i); } }
public static void HandleCharEnum(Packet packet) { var count = packet.ReadByte("Count"); for (var i = 0; i < count; i++) { var guid = packet.ReadGuid("GUID"); var name = packet.ReadCString("Name"); StoreGetters.AddName(guid, name); var race = packet.ReadByteE<Race>("Race"); var clss = packet.ReadByteE<Class>("Class"); packet.ReadByteE<Gender>("Gender"); packet.ReadByte("Skin"); packet.ReadByte("Face"); packet.ReadByte("Hair Style"); packet.ReadByte("Hair Color"); packet.ReadByte("Facial Hair"); var level = packet.ReadByte("Level"); var zone = packet.ReadUInt32<ZoneId>("Zone Id"); var mapId = packet.ReadInt32<MapId>("Map Id"); var pos = packet.ReadVector3("Position"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) packet.ReadGuid("Guild GUID"); else packet.ReadInt32("Guild Id"); packet.ReadInt32E<CharacterFlag>("Character Flags"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadInt32E<CustomizationFlag>("Customization Flags"); var firstLogin = packet.ReadBool("First Login"); packet.ReadInt32("Pet Display Id"); packet.ReadInt32("Pet Level"); packet.ReadInt32E<CreatureFamily>("Pet Family"); for (var j = 0; j < 19; j++) { packet.ReadInt32("Equip Display Id"); packet.ReadByteE<InventoryType>("Equip Inventory Type"); packet.ReadInt32("Equip Aura Id"); } int bagCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3_11685) ? 4 : 1; for (var j = 0; j < bagCount; j++) { packet.ReadInt32("Bag Display Id"); packet.ReadByteE<InventoryType>("Bag Inventory Type"); packet.ReadInt32("Bag Aura Id"); } if (firstLogin) { var startPos = new StartPosition {Map = (uint) mapId, Position = pos, Zone = zone}; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player {Race = race, Class = clss, Name = name, FirstLogin = firstLogin, Level = level}; if (Storage.Objects.ContainsKey(guid)) Storage.Objects[guid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(guid, playerInfo, packet.TimeSpan); StoreGetters.AddName(guid, name); } }
public static void HandleCharEnum(Packet packet) { var guidB = new byte[8]; var count2 = (int)packet.ReadBits(21); var count1 = (int)packet.ReadBits(16); var charGuids = new byte[count1][]; var guildGuids = new byte[count1][]; var firstLogins = new bool[count1]; var nameLenghts = new uint[count1]; for (int c = 0; c < count1; ++c) { charGuids[c] = new byte[8]; guildGuids[c] = new byte[8]; charGuids[c][0] = packet.ReadBit(); guildGuids[c][4] = packet.ReadBit(); charGuids[c][7] = packet.ReadBit(); guildGuids[c][3] = packet.ReadBit(); guildGuids[c][7] = packet.ReadBit(); charGuids[c][5] = packet.ReadBit(); charGuids[c][4] = packet.ReadBit(); charGuids[c][6] = packet.ReadBit(); guildGuids[c][1] = packet.ReadBit(); charGuids[c][3] = packet.ReadBit(); charGuids[c][2] = packet.ReadBit(); guildGuids[c][0] = packet.ReadBit(); guildGuids[c][2] = packet.ReadBit(); charGuids[c][1] = packet.ReadBit(); guildGuids[c][5] = packet.ReadBit(); firstLogins[c] = packet.ReadBit(); guildGuids[c][6] = packet.ReadBit(); nameLenghts[c] = packet.ReadBits(6); } packet.ReadBit("Unk bit"); for (int c = 0; c < count1; ++c) { packet.ReadInt32("Pet Level", c); // v4+112 var level = packet.ReadByte("Level", c); packet.ReadXORByte(guildGuids[c], 2); packet.ReadXORByte(guildGuids[c], 3); for (int j = 0; j < 23; ++j) { packet.ReadEnum<InventoryType>("Item InventoryType", TypeCode.Byte, c, j); packet.ReadInt32("Item EnchantID", c, j); packet.ReadInt32("Item DisplayID", c, j); } packet.ReadXORByte(guildGuids[c], 6); packet.ReadByte("List Order", c); //v4+57 packet.ReadByte("Hair Style", c); // v4+63 packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte, c); // v4+59 packet.ReadXORByte(guildGuids[c], 7); packet.ReadXORByte(charGuids[c], 0); packet.ReadInt32("Pet Family", c); // v4+116 packet.ReadXORByte(guildGuids[c], 1); packet.ReadXORByte(charGuids[c], 3); packet.ReadXORByte(charGuids[c], 7); packet.ReadXORByte(charGuids[c], 2); packet.ReadXORByte(guildGuids[c], 5); packet.ReadEnum<Gender>("Gender", TypeCode.Byte, c); //v4+60 packet.ReadInt32("Pet Display ID", c); //v4+108 var zone = packet.ReadEntry<UInt32>(StoreNameType.Zone, "Zone Id", c); packet.ReadXORByte(charGuids[c], 6); packet.ReadByte("Hair Color", c); // v4+64 packet.ReadByte("Facial Hair", c); // v4+65 var name = packet.ReadWoWString("Name", (int)nameLenghts[c], c); // v4 + 8 var race = packet.ReadEnum<Race>("Race", TypeCode.Byte, c); //v4+58 packet.ReadXORByte(guildGuids[c], 4); packet.ReadByte("Skin", c); // v4+63 var mapId = packet.ReadEntry<Int32>(StoreNameType.Map, "Map Id", c); //v4+72 packet.ReadEnum<CharacterFlag>("CharacterFlag", TypeCode.Int32, c); var y = packet.ReadSingle("Position Y", c); // v4+80 packet.ReadXORByte(guildGuids[c], 0); packet.ReadXORByte(charGuids[c], 4); packet.ReadXORByte(charGuids[c], 1); var z = packet.ReadSingle("Position Z", c); //v4+84 packet.ReadXORByte(charGuids[c], 5); packet.ReadByte("Face", c); // v4+62 var x = packet.ReadSingle("Position X", c); //v4+76 var playerGuid = new WowGuid(BitConverter.ToUInt64(charGuids[c], 0)); packet.WriteGuid("Character GUID", charGuids[c], c); packet.WriteGuid("Guild GUID", guildGuids[c], c); if (firstLogins[c]) { var startPos = new StartPosition {Map = mapId, Position = new Vector3(x, y, z), Zone = (int) zone}; Storage.StartPositions.Add(new Tuple<Race, Class>(race, clss), startPos, packet.TimeSpan); } var playerInfo = new Player { Race = race, Class = clss, Name = name, FirstLogin = firstLogins[c], Level = level }; if (Storage.Objects.ContainsKey(playerGuid)) Storage.Objects[playerGuid] = new Tuple<WoWObject, TimeSpan?>(playerInfo, packet.TimeSpan); else Storage.Objects.Add(playerGuid, playerInfo, packet.TimeSpan); StoreGetters.AddName(playerGuid, name); } for (var i = 0; i < count2; ++i) { packet.ReadUInt32("unk1", i); packet.ReadByte("unk2", i); } }