public override List<ZoneEntryStruct> GetSpawns() { List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>(); List<byte[]> SpawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient); foreach (byte[] SpawnPacket in SpawnPackets) { ZoneEntryStruct newSpawn = new ZoneEntryStruct(); ByteStream buffer = new ByteStream(SpawnPacket); newSpawn.SpawnName = buffer.ReadString(true); newSpawn.SpawnName = Utils.MakeCleanName(newSpawn.SpawnName); newSpawn.SpawnID = buffer.ReadUInt32(); newSpawn.Level = buffer.ReadByte(); float UnkSize = buffer.ReadSingle(); newSpawn.IsNPC = buffer.ReadByte(); UInt32 Bitfield = buffer.ReadUInt32(); newSpawn.Gender = (Bitfield & 3); Byte OtherData = buffer.ReadByte(); buffer.SkipBytes(8); // Skip 8 unknown bytes newSpawn.DestructableString1 = ""; newSpawn.DestructableString2 = ""; newSpawn.DestructableString3 = ""; if ((newSpawn.IsNPC > 0) && ((OtherData & 1) > 0)) { // Destructable Objects newSpawn.DestructableString1 = buffer.ReadString(false); newSpawn.DestructableString2 = buffer.ReadString(false); newSpawn.DestructableString3 = buffer.ReadString(false); buffer.SkipBytes(53); } if ((OtherData & 4) > 0) { // Auras buffer.ReadString(false); buffer.ReadString(false); buffer.SkipBytes(54); } newSpawn.PropCount = buffer.ReadByte(); if (newSpawn.PropCount > 0) newSpawn.BodyType = buffer.ReadUInt32(); else newSpawn.BodyType = 0; for (int j = 1; j < newSpawn.PropCount; ++j) buffer.SkipBytes(4); buffer.SkipBytes(1); // Skip HP % newSpawn.HairColor = buffer.ReadByte(); newSpawn.BeardColor = buffer.ReadByte(); newSpawn.EyeColor1 = buffer.ReadByte(); newSpawn.EyeColor2 = buffer.ReadByte(); newSpawn.HairStyle = buffer.ReadByte(); newSpawn.Beard = buffer.ReadByte(); newSpawn.DrakkinHeritage = buffer.ReadUInt32(); newSpawn.DrakkinTattoo = buffer.ReadUInt32(); newSpawn.DrakkinDetails = buffer.ReadUInt32(); newSpawn.EquipChest2 = buffer.ReadByte(); bool UseWorn = (newSpawn.EquipChest2 == 255); buffer.SkipBytes(2); // 2 Unknown bytes; newSpawn.Helm = buffer.ReadByte(); newSpawn.Size = buffer.ReadSingle(); newSpawn.Face = buffer.ReadByte(); newSpawn.WalkSpeed = buffer.ReadSingle(); newSpawn.RunSpeed = buffer.ReadSingle(); newSpawn.Race = buffer.ReadUInt32(); buffer.SkipBytes(1); // Skip Holding newSpawn.Deity = buffer.ReadUInt32(); buffer.SkipBytes(8); // Skip GuildID and GuildRank newSpawn.Class = buffer.ReadByte(); buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode newSpawn.LastName = buffer.ReadString(true); buffer.SkipBytes(6); newSpawn.PetOwnerID = buffer.ReadUInt32(); buffer.SkipBytes(25); newSpawn.MeleeTexture1 = 0; newSpawn.MeleeTexture2 = 0; if ((newSpawn.IsNPC == 0) || NPCType.IsPlayableRace(newSpawn.Race)) { for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) newSpawn.SlotColour[ColourSlot] = buffer.ReadUInt32(); for (int i = 0; i < 9; ++i) { newSpawn.Equipment[i] = buffer.ReadUInt32(); UInt32 Equip3 = buffer.ReadUInt32(); UInt32 Equip2 = buffer.ReadUInt32(); UInt32 Equip1 = buffer.ReadUInt32(); UInt32 Equip0 = buffer.ReadUInt32(); } if (newSpawn.Equipment[Constants.MATERIAL_CHEST] > 0) { newSpawn.EquipChest2 = (byte)newSpawn.Equipment[Constants.MATERIAL_CHEST]; } newSpawn.ArmorTintRed = (byte)((newSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff); newSpawn.ArmorTintGreen = (byte)((newSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff); newSpawn.ArmorTintBlue = (byte)(newSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff); if (newSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0) newSpawn.MeleeTexture1 = newSpawn.Equipment[Constants.MATERIAL_PRIMARY]; if (newSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0) newSpawn.MeleeTexture2 = newSpawn.Equipment[Constants.MATERIAL_SECONDARY]; if (UseWorn) newSpawn.Helm = (byte)newSpawn.Equipment[Constants.MATERIAL_HEAD]; else newSpawn.Helm = 0; } else { // Non playable race buffer.SkipBytes(20); newSpawn.MeleeTexture1 = buffer.ReadUInt32(); buffer.SkipBytes(16); newSpawn.MeleeTexture2 = buffer.ReadUInt32(); buffer.SkipBytes(16); } if (newSpawn.EquipChest2 == 255) newSpawn.EquipChest2 = 0; if (newSpawn.Helm == 255) newSpawn.Helm = 0; UInt32 Position1 = buffer.ReadUInt32(); UInt32 Position2 = buffer.ReadUInt32(); UInt32 Position3 = buffer.ReadUInt32(); UInt32 Position4 = buffer.ReadUInt32(); UInt32 Position5 = buffer.ReadUInt32(); newSpawn.YPos = Utils.EQ19ToFloat((Int32)((Position1 >> 12) & 0x7FFFF)); newSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position2) & 0x7FFFF); newSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 13) & 0x7FFFF); newSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position3 >> 13) & 0xFFF); if ((OtherData & 16) > 0) { newSpawn.Title = buffer.ReadString(false); } if ((OtherData & 32) > 0) { newSpawn.Suffix = buffer.ReadString(false); } // unknowns buffer.SkipBytes(8); newSpawn.IsMercenary = buffer.ReadByte(); buffer.SkipBytes(54); var expectedLength = buffer.Length(); var currentPoint = buffer.GetPosition(); Debug.Assert(currentPoint == expectedLength, "Length mismatch while parsing zone spawns"); ZoneSpawns.Add(newSpawn); } return ZoneSpawns; }
public override List<ZoneEntryStruct> GetSpawns() { List<ZoneEntryStruct> zoneSpawns = new List<ZoneEntryStruct>(); List<byte[]> spawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient); foreach (var spawnPacket in spawnPackets) { var newSpawn = new ZoneEntryStruct(); var buffer = new ByteStream(spawnPacket); newSpawn.SpawnName = buffer.ReadString(true); newSpawn.SpawnName = Utils.MakeCleanName(newSpawn.SpawnName); newSpawn.SpawnID = buffer.ReadUInt32(); newSpawn.Level = buffer.ReadByte(); buffer.SkipBytes(4); newSpawn.IsNPC = buffer.ReadByte(); var bitfield=buffer.ReadUInt32(); newSpawn.Gender = (bitfield & 3); var otherData = buffer.ReadByte(); buffer.SkipBytes(8); if ((otherData & 1) > 0) { newSpawn.DestructableString1 = buffer.ReadString(false); newSpawn.DestructableString2 = buffer.ReadString(false); newSpawn.DestructableString3 = buffer.ReadString(false); buffer.SkipBytes(53); } if ((otherData & 4) > 0) { buffer.ReadString(false); buffer.ReadString(false); buffer.SkipBytes(54); } newSpawn.PropCount = buffer.ReadByte(); if (newSpawn.PropCount > 0) newSpawn.BodyType = buffer.ReadUInt32(); else newSpawn.BodyType = 0; for (var i = 1; i < newSpawn.PropCount; ++i) buffer.SkipBytes(4); buffer.SkipBytes(1); // Skip HP % newSpawn.Beard = buffer.ReadByte(); //Beardstyle newSpawn.HairColor = buffer.ReadByte(); newSpawn.EyeColor1 = buffer.ReadByte(); newSpawn.EyeColor2 = buffer.ReadByte(); newSpawn.HairStyle = buffer.ReadByte(); newSpawn.BeardColor = buffer.ReadByte(); newSpawn.DrakkinHeritage = buffer.ReadUInt32(); // vsab: an_unemployed_mercenary's and some newer npc's seem to have newSpawn.DrakkinHeritage set to 255, then have invalid numbers for the next ones if (newSpawn.DrakkinHeritage == 255) { newSpawn.DrakkinHeritage = 0; newSpawn.DrakkinTattoo = 0; newSpawn.DrakkinDetails = 0; buffer.SkipBytes(8); } else { newSpawn.DrakkinTattoo = buffer.ReadUInt32(); newSpawn.DrakkinDetails = buffer.ReadUInt32(); } newSpawn.EquipChest2 = buffer.ReadByte(); var useWorn = (newSpawn.EquipChest2 == 255); buffer.SkipBytes(2); // 2 Unknown bytes; newSpawn.Helm= buffer.ReadByte(); newSpawn.Size = buffer.ReadSingle(); newSpawn.Face = buffer.ReadByte(); newSpawn.WalkSpeed = buffer.ReadSingle(); newSpawn.RunSpeed = buffer.ReadSingle(); newSpawn.Race = buffer.ReadUInt32(); buffer.SkipBytes(1); // Skip Holding newSpawn.Deity = buffer.ReadUInt32(); buffer.SkipBytes(8); // Skip GuildID and GuildRank newSpawn.Class = buffer.ReadUInt32(); buffer.SkipBytes(1); // Skip PVP, Standstate, Light, Flymode newSpawn.StandState = buffer.ReadByte(); //110 is sitting, 100 is standing, 120 is FD/corpse, mounts show as 102 buffer.SkipBytes(2); newSpawn.LastName = buffer.ReadString(true); buffer.SkipBytes(6); newSpawn.PetOwnerID = buffer.ReadUInt32(); newSpawn.MeleeTexture1 = 0; newSpawn.MeleeTexture2 = 0; buffer.SkipBytes(newSpawn.IsNPC == 1 ? 37 : 25); if (newSpawn.IsNPC == 0 || NPCType.IsPlayableRace(newSpawn.Race)) { var posn = buffer.GetPosition(); for (var colourSlot = 0; colourSlot < 9; ++colourSlot) newSpawn.SlotColour[colourSlot] = buffer.ReadUInt32(); var diff = buffer.GetPosition() - posn; Debug.Assert(diff == 36, "Colour slots wrong!"); for (var i = 0; i < 9; ++i) { newSpawn.Equipment[i] = buffer.ReadUInt32(); var equip3 = buffer.ReadUInt32(); var equip2 = buffer.ReadUInt32(); var equip1 = buffer.ReadUInt32(); var equip0 = buffer.ReadUInt32(); } if (newSpawn.Equipment[Constants.MATERIAL_CHEST] > 0) { newSpawn.EquipChest2 = (byte)newSpawn.Equipment[Constants.MATERIAL_CHEST]; } //vsab: unverified..... newSpawn.ArmorTintRed = (byte)((newSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff); newSpawn.ArmorTintGreen = (byte)((newSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff); newSpawn.ArmorTintBlue = (byte)(newSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff); if (newSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0) newSpawn.MeleeTexture1 = newSpawn.Equipment[Constants.MATERIAL_PRIMARY]; if (newSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0) newSpawn.MeleeTexture2 = newSpawn.Equipment[Constants.MATERIAL_SECONDARY]; if (useWorn) newSpawn.Helm = (byte)newSpawn.Equipment[Constants.MATERIAL_HEAD]; else newSpawn.Helm = 0; } else { buffer.SkipBytes(20); newSpawn.MeleeTexture1 = buffer.ReadUInt32(); buffer.SkipBytes(16); newSpawn.MeleeTexture2 = buffer.ReadUInt32(); buffer.SkipBytes(16); } if (newSpawn.EquipChest2 == 255) newSpawn.EquipChest2 = 0; if (newSpawn.Helm == 255) newSpawn.Helm = 0; var position1 = buffer.ReadUInt32(); var position2 = buffer.ReadUInt32(); //not valid this patch var position3 = buffer.ReadUInt32(); var position4 = buffer.ReadUInt32(); var position5 = buffer.ReadUInt32(); newSpawn.XPos = Utils.EQ19ToFloat((Int32)((position4 >> 13) & 0x7FFFF)); newSpawn.YPos = Utils.EQ19ToFloat((Int32)(position1 >> 12) & 0x7FFFF); newSpawn.ZPos = Utils.EQ19ToFloat((Int32)(position3) & 0x7FFFF); newSpawn.Heading = Utils.EQ19ToFloat((Int32)(position5) & 0x7FF); if ((otherData & 16) > 1) { newSpawn.Title = buffer.ReadString(false); } if ((otherData & 32) > 1) { newSpawn.Suffix = buffer.ReadString(false); } // unknowns buffer.SkipBytes(8); newSpawn.IsMercenary = buffer.ReadByte(); buffer.SkipBytes(54); var expectedLength = buffer.Length(); var currentPoint = buffer.GetPosition(); Debug.Assert(currentPoint == expectedLength, "Length mismatch while parsing zone spawns"); zoneSpawns.Add(newSpawn); } return zoneSpawns; }
public override void ExploreZoneEntry(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { if (direction != PacketDirection.ServerToClient) return; try { var firstName = buffer.ReadString(false); //verified outputStream.WriteLine("Name = {0}", firstName); //File.WriteAllBytes(string.Format("{0}.bin",Utils.MakeCleanName(firstName)),buffer.Buffer); var spawnId = buffer.ReadUInt32();//verified outputStream.WriteLine("SpawnID = {0}", spawnId); var level = buffer.ReadByte();//verified outputStream.WriteLine("Level = {0}", level); buffer.SkipBytes(4); var isNpc = buffer.ReadByte();//verified outputStream.WriteLine("IsNPC = {0}", isNpc); var bitfield = buffer.ReadUInt32(); outputStream.WriteLine("Name: {0}, Bitfield: {1}", firstName, Convert.ToString(bitfield, 2)); outputStream.WriteLine("Gender: {0}", (bitfield & 3));//verified var otherData = buffer.ReadByte(); outputStream.WriteLine("OtherData = {0}", otherData); buffer.SkipBytes(8); // otherdata stuff is unverified if ((otherData & 1) > 0) { outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); buffer.SkipBytes(53); } if ((otherData & 4) > 0) { outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); buffer.SkipBytes(54); } //properties unverified in the sense that I don't know if they represent anything useful other than bodytype var properties = buffer.ReadByte(); outputStream.WriteLine("Properties = {0}, Offset now {1}", properties, buffer.GetPosition()); UInt32 bodyType = 0; if (properties > 0) bodyType = buffer.ReadUInt32(); //verified outputStream.WriteLine("Bodytype = {0}", bodyType); if (properties != 1) outputStream.WriteLine("XXXX Properties is {0}", properties); for (var i = 1; i < properties; ++i) outputStream.WriteLine(" Prop: {0}", buffer.ReadUInt32()); var hp = buffer.ReadByte(); //not 100% sure this is HP. I got 47% on my character when her hp at 100%. Poss mana? //Below here is verified var beardStyle = buffer.ReadByte(); outputStream.WriteLine("Beardstyle is {0}", beardStyle); var hairColor = buffer.ReadByte(); outputStream.WriteLine("Hair color is {0}", hairColor); var eye1 = buffer.ReadByte(); outputStream.WriteLine("Eye1 is {0}", eye1); var eye2 = buffer.ReadByte(); outputStream.WriteLine("Eye2 is {0}", eye2); var hairStyle = buffer.ReadByte(); outputStream.WriteLine("Hair style is {0}", hairStyle); var beardColor = buffer.ReadByte(); outputStream.WriteLine("Beard color is {0}", beardColor); var drakkinHeritage=buffer.ReadUInt32(); outputStream.WriteLine("Drakkin Heritage is {0}", drakkinHeritage); // an_unemployed_mercenary's and some newer npc's seem to have this set to 255, then have invalid numbers for the next ones if(drakkinHeritage==255) { outputStream.WriteLine("We should set drakkinHeritage to 0 as well as the other Drakkin stuff."); outputStream.WriteLine("Drakkin Heritage is 0"); outputStream.WriteLine("Drakkin Tattoo is 0"); outputStream.WriteLine("Drakkin Details is 0"); buffer.SkipBytes(8); } else { outputStream.WriteLine("Drakkin Tattoo is {0}", buffer.ReadUInt32()); outputStream.WriteLine("Drakkin Details is {0}", buffer.ReadUInt32()); } var equipChest2 = buffer.ReadByte(); //AKA texture var useWorn = equipChest2 == 255; buffer.SkipBytes(2); var helm = buffer.ReadByte(); //unverified var size = buffer.ReadSingle(); //verified var face = buffer.ReadByte(); // Probably correct var walkSpeed = buffer.ReadSingle(); //dunno valid ranges for this so this is anyone's guess :P var runSpeed = buffer.ReadSingle(); // verified var race = buffer.ReadUInt32(); //verified //dunno about bits below here outputStream.WriteLine("Holding = {0}", buffer.ReadByte()); outputStream.WriteLine("Deity = {0}", buffer.ReadUInt32()); //verified outputStream.WriteLine("GuildID = {0}", buffer.ReadUInt32());//unverified outputStream.WriteLine("Guildstatus = {0}", buffer.ReadUInt32());//unverified outputStream.WriteLine("Class = {0}", buffer.ReadUInt32());//verified outputStream.WriteLine("Size: {0}, Face: {1}, Walkspeed: {2}, RunSpeed: {3}, Race: {4}", size, face,walkSpeed, runSpeed, race); buffer.SkipBytes(1); //PVP-//unverified outputStream.WriteLine("Stand State = {0}", buffer.ReadByte());//unverified outputStream.WriteLine("Light = {0}", buffer.ReadByte());//unverified buffer.SkipBytes(1); //Flymode! //unverified var lastName = buffer.ReadString(false); outputStream.WriteLine("LastName = {0}", lastName); //verified buffer.SkipBytes(6); outputStream.WriteLine("PetOwnerId = {0}", buffer.ReadUInt32());//unverified buffer.SkipBytes(isNpc == 1 ? 37 : 25); if (isNpc == 0 || NPCType.IsPlayableRace(race)) { var posn = buffer.GetPosition(); for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) outputStream.WriteLine("Color {0} is {1}", ColourSlot, buffer.ReadUInt32()); var diff = buffer.GetPosition() - posn; Debug.Assert(diff==36, "Colour slots wrong!"); //Player equip verified for (var i = 0; i < 9; ++i) { var equip3 = buffer.ReadUInt32(); var equipx = buffer.ReadUInt32(); var equip2 = buffer.ReadUInt32(); var equip1 = buffer.ReadUInt32(); var equip0 = buffer.ReadUInt32(); outputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i, equip0, equip1, equip2, equipx, equip3); } } else { //vsab at this point this section is 100% untested // Non playable race // Melee Texture 1 is 20 bytes in // Melee Texture 1 is 40 bytes in // This whole segment is 28 + 24 + 8 = 60 // Skip 20, Read m1, skip 16, read m2, skip 16 /* OutputStream.WriteLine("None playable race, offset now {0}", Buffer.GetPosition()); Buffer.SkipBytes(28); UInt32 MeleeTexture1 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); UInt32 MeleeTexture2 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); */ outputStream.WriteLine("None playable race, offset now {0}", buffer.GetPosition()); buffer.SkipBytes(20); var meleeTexture1 = buffer.ReadUInt32(); buffer.SkipBytes(16); var meleeTexture2 = buffer.ReadUInt32(); buffer.SkipBytes(16); } //positions verified! outputStream.WriteLine("Position starts at offset {0}", buffer.GetPosition()); var position1 = buffer.ReadUInt32(); outputStream.WriteLine("Position1 untreated {0}", position1); var position2 = buffer.ReadUInt32(); outputStream.WriteLine("Position2 untreated {0}", position2); var position3 = buffer.ReadUInt32(); outputStream.WriteLine("Position3 untreated {0}", position3); var position4 = buffer.ReadUInt32(); outputStream.WriteLine("Position4 untreated {0}", position4); var position5 = buffer.ReadUInt32(); outputStream.WriteLine("Position5 untreated {0}", position5); var xPos = Utils.EQ19ToFloat((Int32)((position4 >> 13) & 0x7FFFF)); var yPos = Utils.EQ19ToFloat((Int32)(position1 >> 12) & 0x7FFFF); var zPos = Utils.EQ19ToFloat((Int32)(position3) & 0x7FFFF); var heading = Utils.EQ19ToFloat((Int32)(position5) & 0x7FF); outputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", xPos, yPos, zPos, heading); if ((otherData & 16) > 1) outputStream.WriteLine("Title: {0}", buffer.ReadString(false)); //verified if ((otherData & 32) > 1) outputStream.WriteLine("Suffix: {0}", buffer.ReadString(false)); //verified buffer.SkipBytes(8); var isMerc = buffer.ReadByte(); //verified outputStream.WriteLine("IsMerc: {0}", isMerc); buffer.SkipBytes(54); var expectedLength = buffer.Length(); var currentPoint = buffer.GetPosition(); outputStream.WriteLine("Buffer Length: {0}, Current Position: {1}",expectedLength,currentPoint); Debug.Assert(currentPoint == expectedLength, "Length mismatch while parsing zone spawns"); outputStream.WriteLine(""); } catch (Exception) { } }
//See SpawnShell.cpp int32_t SpawnShell::fillSpawnStruct(spawnStruct *spawn, const uint8_t *data, size_t len, bool checkLen)? public override void ExploreZoneEntry(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { if (direction != PacketDirection.ServerToClient) return; try { string FirstName = buffer.ReadString(false); outputStream.WriteLine("Name = {0}", FirstName); UInt32 SpawnID = buffer.ReadUInt32(); outputStream.WriteLine("SpawnID = {0}", SpawnID); byte Level = buffer.ReadByte(); outputStream.WriteLine("Level = {0}", Level); buffer.SkipBytes(4); byte IsNPC = buffer.ReadByte(); outputStream.WriteLine("IsNPC = {0}", IsNPC); UInt32 Bitfield = buffer.ReadUInt32(); outputStream.WriteLine("Name: {0}, Bitfield: {1}", FirstName, Convert.ToString(Bitfield, 2)); byte OtherData = buffer.ReadByte(); outputStream.WriteLine("OtherData = {0}", OtherData); buffer.SkipBytes(8); if ((OtherData & 1) > 0) { outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); buffer.SkipBytes(53); } if ((OtherData & 4) > 0) { outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); buffer.SkipBytes(54); } byte Properties = buffer.ReadByte(); outputStream.WriteLine("Properties = {0}, Offset now {1}", Properties, buffer.GetPosition()); UInt32 BodyType = 0; if (Properties > 0) BodyType = buffer.ReadUInt32(); outputStream.WriteLine("Bodytype = {0}", BodyType); if (Properties != 1) outputStream.WriteLine("XXXX Properties is {0}", Properties); for (int i = 1; i < Properties; ++i) outputStream.WriteLine(" Prop: {0}", buffer.ReadUInt32()); outputStream.WriteLine("Position is now {0}", buffer.GetPosition()); byte HP = buffer.ReadByte(); byte HairColor = buffer.ReadByte(); byte BeardColor = buffer.ReadByte(); byte Eye1 = buffer.ReadByte(); byte Eye2 = buffer.ReadByte(); byte HairStyle = buffer.ReadByte(); byte BeardStyle = buffer.ReadByte(); outputStream.WriteLine("Beardstyle is {0}", BeardStyle); buffer.SkipBytes(12); // Drakkin stuff byte EquipChest2 = buffer.ReadByte(); buffer.SkipBytes(2); byte Helm = buffer.ReadByte(); float Size = buffer.ReadSingle(); byte Face = buffer.ReadByte(); float WalkSpeed = buffer.ReadSingle(); float RunSpeed = buffer.ReadSingle(); UInt32 Race = buffer.ReadUInt32(); outputStream.WriteLine("Size: {0}, Face: {1}, Walkspeed: {2}, RunSpeed: {3}, Race: {4}", Size, Face, WalkSpeed, RunSpeed, Race); //MooftaL above here is correct, below is incorrect time to get from seq... outputStream.WriteLine("Holding = {0}", buffer.ReadByte()); outputStream.WriteLine("Deity = {0}", buffer.ReadUInt32()); outputStream.WriteLine("GuildID = {0}", buffer.ReadUInt32()); outputStream.WriteLine("Guildstatus = {0}", buffer.ReadUInt32()); outputStream.WriteLine("Classs? = {0}", buffer.ReadUInt32()); buffer.SkipBytes(1); outputStream.WriteLine("State = {0}", buffer.ReadByte()); outputStream.WriteLine("Light = {0}", buffer.ReadByte()); buffer.SkipBytes(1); outputStream.WriteLine("LastName = {0}", buffer.ReadString(false)); buffer.SkipBytes(6); outputStream.WriteLine("PetOwnerId = {0}", buffer.ReadUInt32()); if (IsNPC==1) { buffer.SkipBytes(37); } else { buffer.SkipBytes(25); } if (IsNPC == 0 || NPCType.IsPlayableRace(Race)) { //for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) // outputStream.WriteLine("Color {0} is {1}", ColourSlot, buffer.ReadUInt32()); buffer.SkipBytes(36); for (int i = 0; i < 9; ++i) { UInt32 Equip3 = buffer.ReadUInt32(); UInt32 Equipx = buffer.ReadUInt32(); UInt32 Equip2 = buffer.ReadUInt32(); UInt32 Equip1 = buffer.ReadUInt32(); UInt32 Equip0 = buffer.ReadUInt32(); outputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i, Equip0, Equip1, Equip2, Equipx, Equip3); } } else { //Moofta at this point this section is 100% untested // Non playable race // Melee Texture 1 is 20 bytes in // Melee Texture 1 is 40 bytes in // This whole segment is 28 + 24 + 8 = 60 // Skip 20, Read m1, skip 16, read m2, skip 16 /* OutputStream.WriteLine("None playable race, offset now {0}", Buffer.GetPosition()); Buffer.SkipBytes(28); UInt32 MeleeTexture1 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); UInt32 MeleeTexture2 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); */ outputStream.WriteLine("None playable race, offset now {0}", buffer.GetPosition()); buffer.SkipBytes(20); UInt32 MeleeTexture1 = buffer.ReadUInt32(); buffer.SkipBytes(16); UInt32 MeleeTexture2 = buffer.ReadUInt32(); buffer.SkipBytes(16); } outputStream.WriteLine("Position starts at offset {0}", buffer.GetPosition()); /* * union { struct { unsigned pitch:12; signed deltaX:13; // change in x unsigned padding01:7; signed z:19; // z coord (3rd loc value) signed deltaHeading:10; // change in heading unsigned padding02:3; signed x:19; // x coord (1st loc value) signed deltaZ:13; // change in z unsigned heading:12; // heading signed deltaY:13; // change in y unsigned padding03:7; signed animation:10; // velocity signed y:19; // y coord (2nd loc value) unsigned padding04:3; }; int32_t posData[5]; };*/ UInt32 Position1 = buffer.ReadUInt32(); outputStream.WriteLine("Position1 untreated {0}", Position1); UInt32 Position2 = buffer.ReadUInt32(); outputStream.WriteLine("Position2 untreated {0}", Position2); UInt32 Position3 = buffer.ReadUInt32(); outputStream.WriteLine("Position3 untreated {0}", Position3); //verified as X position UInt32 Position4 = buffer.ReadUInt32(); outputStream.WriteLine("Position4 untreated {0}", Position4); UInt32 Position5 = buffer.ReadUInt32(); //verified as Y position float XPos = Utils.EQ19ToFloat((Int32)(Position3) & 0x7FFFF); //Verified float YPos = Utils.EQ19ToFloat((Int32) (Position5 >> 10) & 0x7FFFF); //Verified float ZPos = Utils.EQ19ToFloat((Int32) ((Position2) & 0x7FFFF)); //thanks Demonstar55 //heading is definitely NOT Position3 float Heading = Utils.EQ19ToFloat((Int32)(Position4) & 0xFFF); //can't verify //for(var i = 0; i < 32; ++i) // OutputStream.WriteLine("Pos3 << {0} = {1}", i, Utils.EQ19ToFloat((Int32)(Position3 >> i) & 0x3FF)); outputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", XPos, YPos, ZPos, Heading); if ((OtherData & 16) > 1) outputStream.WriteLine("Title: {0}", buffer.ReadString(false)); if ((OtherData & 32) > 1) outputStream.WriteLine("Suffix: {0}", buffer.ReadString(false)); buffer.SkipBytes(8); byte IsMerc = buffer.ReadByte(); outputStream.WriteLine("IsMerc: {0}", IsMerc); buffer.SkipBytes(54); outputStream.WriteLine("Buffer Length: {0}, Current Position: {1}", buffer.Length(), buffer.GetPosition()); if (buffer.Length() != buffer.GetPosition()) outputStream.WriteLine("PARSE ERROR"); outputStream.WriteLine(""); } catch (Exception) { } }
public override void ExploreSpawnDoor(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { uint DoorCount = buffer.Length() / 96; outputStream.WriteLine("Door Count: {0}", DoorCount); for (int d = 0; d < DoorCount; ++d) { string DoorName = buffer.ReadFixedLengthString(32, false); float YPos = buffer.ReadSingle(); float XPos = buffer.ReadSingle(); float ZPos = buffer.ReadSingle(); float Heading = buffer.ReadSingle(); UInt32 Incline = buffer.ReadUInt32(); Int32 Size = buffer.ReadInt32(); buffer.SkipBytes(4); // Skip Unknown Byte DoorID = buffer.ReadByte(); Byte OpenType = buffer.ReadByte(); Byte StateAtSpawn = buffer.ReadByte(); Byte InvertState = buffer.ReadByte(); Int32 DoorParam = buffer.ReadInt32(); outputStream.WriteLine(" Name: {0} ID: {1} OT: {2} SAS: {3} IS: {4} DP: {5}", DoorName, DoorID, OpenType, StateAtSpawn, InvertState, DoorParam); // Skip past the trailing unknowns in the door struct, moving to the next door in the packet. buffer.SkipBytes(28); } }
/* * from seq source int32_t ZoneMgr::fillProfileStruct(charProfileStruct *player, const uint8_t *data, size_t len, bool checkLen) * * */ public override void ExplorePlayerProfile(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { outputStream.WriteLine("MooDump"); outputStream.WriteLine("{0, -5}: Checksum = {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(12); outputStream.WriteLine(""); outputStream.WriteLine("{0, -5}: Gender = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Race = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Class = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Level = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Level1 = {1}", buffer.GetPosition(), buffer.ReadByte()); // Bind points int BindCount = buffer.ReadInt32(); outputStream.WriteLine("{0, -5}: BindCount = {1}", buffer.GetPosition() - 4, BindCount); //not sure if this is right tbh for (int i = 0; i < BindCount; ++i) { outputStream.WriteLine("{0, -5}: Bind: {1} Zone: {2} XYZ: {3},{4},{5} Heading: {6}", buffer.GetPosition(), i, buffer.ReadUInt32(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle()); } outputStream.WriteLine(""); outputStream.WriteLine("{0, -5}: Deity = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Intoxication = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine(""); // Spell slot refresh int spellRefreshCount = buffer.ReadInt32(); outputStream.WriteLine("{0, -5}: SpellRefreshCount = {1}", buffer.GetPosition() - 4, spellRefreshCount); for (int i = 0; i < spellRefreshCount; i++) { outputStream.WriteLine("{0, -5}: SpellRefreshCount{1} = {2}", buffer.GetPosition(), i, buffer.ReadUInt32()); } // Equipment uint EquipmentCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: EquipmentCount = {1}", buffer.GetPosition() - 4, EquipmentCount); for (int i = 0; i < EquipmentCount; ++i) { outputStream.Write("{0, -5}: Equip: {1} Values: ", buffer.GetPosition(), i); for (int j = 0; j < 5; ++j) { outputStream.Write(j != 3 ? "{0} " : " ItemId {0} ", buffer.ReadUInt32()); } outputStream.WriteLine(""); } // Something (9 ints) var sCount = buffer.ReadUInt32(); for (var i = 0; i < sCount; i++) { buffer.SkipBytes(20); } // Something (9 ints) var sCount1 = buffer.ReadUInt32(); for (var i = 0; i < sCount1; i++) { buffer.SkipBytes(4); } // Something (9 ints) var sCount2 = buffer.ReadUInt32(); for (var i = 0; i < sCount2; i++) { buffer.SkipBytes(4); } int preposn = buffer.GetPosition(); outputStream.WriteLine("{0, -5}: Hair Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Beard Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Eye1 Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Eye2 Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Hairstyle = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Beard = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Face = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Drakkin Heritage = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Drakkin Tattoo = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Drakkin Details = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Height = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Primary = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Secondary = {1}", buffer.GetPosition(), buffer.ReadUInt32()); int diff = buffer.GetPosition() - preposn; outputStream.WriteLine("Diff should be 52: {0}", diff); // Looks like face, haircolor, beardcolor, eyes, etc. Skipping over it. //Buffer.SkipBytes(52); outputStream.WriteLine("{0, -5}: Unspent Skill Points = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Mana = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Current HP = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: STR = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: STA = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: CHA = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: DEX = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: INT = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AGI = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: WIS = {1}", buffer.GetPosition(), buffer.ReadUInt32()); buffer.SkipBytes(28); //Buffer.SkipBytes(28); UInt32 AACount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: AA Count = {1}", buffer.GetPosition() - 4, AACount); for (int i = 0; i < AACount; ++i) { outputStream.WriteLine(" AA: {0}, Value: {1}, Unknown08: {2}", buffer.ReadUInt32(), buffer.ReadUInt32(), buffer.ReadUInt32()); //Buffer.SkipBytes(12); } // Something (100 ints) uint sCount3 = buffer.ReadUInt32(); for (int i = 0; i < sCount3; i++) { buffer.SkipBytes(4); } // Something (25 ints) uint sCount4 = buffer.ReadUInt32(); for (int i = 0; i < sCount4; i++) { buffer.SkipBytes(4); } // Something (300 ints) uint sCount5 = buffer.ReadUInt32(); for (int i = 0; i < sCount5; i++) { buffer.SkipBytes(4); } // Something (20 ints) uint sCount6 = buffer.ReadUInt32(); for (int i = 0; i < sCount6; i++) { buffer.SkipBytes(4); } // Something (20 floats) uint sCount7 = buffer.ReadUInt32(); for (int i = 0; i < sCount7; i++) { buffer.SkipBytes(4); } // Something (100 floats) uint sCount8 = buffer.ReadUInt32(); for (int i = 0; i < sCount8; i++) { buffer.SkipBytes(4); } UInt32 SpellBookSlots = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: SpellBookSlot Count = {1}", buffer.GetPosition() - 4, SpellBookSlots); for (int i = 0; i < SpellBookSlots; ++i) { buffer.SkipBytes(4); } UInt32 SpellMemSlots = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Spell Mem Count = {1}", buffer.GetPosition() - 4, SpellMemSlots); for (int i = 0; i < SpellMemSlots; ++i) { buffer.SkipBytes(4); } // Something (13 ints) uint sCount9 = buffer.ReadUInt32(); for (int i = 0; i < sCount9; i++) { buffer.SkipBytes(4); } // Unknown buffer.SkipBytes(1); UInt32 BuffCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Buff Count = {1}", buffer.GetPosition() - 4, BuffCount); for (int i = 0; i < BuffCount; ++i) { buffer.ReadByte(); float UnkFloat = buffer.ReadSingle(); UInt32 PlayerID = buffer.ReadUInt32(); Byte UnkByte = buffer.ReadByte(); UInt32 Counters1 = buffer.ReadUInt32(); UInt32 Duration = buffer.ReadUInt32(); Byte Level = buffer.ReadByte(); UInt32 SpellID = buffer.ReadUInt32(); UInt32 SlotID = buffer.ReadUInt32(); buffer.SkipBytes(5); UInt32 Counters2 = buffer.ReadUInt32(); outputStream.WriteLine( "Sl: {0}, UF: {1}, PID: {2}, UByte: {3}, Cnt1: {4}, Dur: {5}, Lvl: {6} SpellID: {7}, SlotID: {8}, Cnt2: {9}", i, UnkFloat, PlayerID, UnkByte, Counters1, Duration, Level, SpellID, SlotID, Counters2); buffer.SkipBytes(44); } outputStream.WriteLine("{0, -5}: Plat = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Gold = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Silver = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Copper = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Plat Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Gold Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Silver Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Copper Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(20); outputStream.WriteLine("{0, -5}: AA Spent = {1}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(4); outputStream.WriteLine("{0, -5}: AA Assigned = {1}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(16); outputStream.WriteLine("{0, -5}: AA Unspent = {1}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(2); /* // Bandolier Buffer.SkipBytes(1319); // Potion Belt Buffer.SkipBytes(160); */ //this could be wrong we could just skip UInt32 BandolierCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Bandolier Count = {1}", buffer.GetPosition() - 4, BandolierCount); for (int i = 0; i < BandolierCount; ++i) { buffer.ReadString(false); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); } UInt32 PotionCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Potion Count = {1}", buffer.GetPosition() - 4, PotionCount); for (int i = 0; i < PotionCount; ++i) { buffer.ReadString(false); buffer.SkipBytes(8); } // Unknown buffer.SkipBytes(84); outputStream.WriteLine("{0, -5}: Endurance= {1}", buffer.GetPosition(), buffer.ReadUInt32()); // Unknown buffer.SkipBytes(8); UInt32 NameLength = buffer.ReadUInt32(); var posn = buffer.GetPosition(); outputStream.WriteLine("{0, -5}: Name Length: {1}", buffer.GetPosition() - 4, NameLength); var name = buffer.ReadString(false); outputStream.WriteLine("{0, -5}: Name: {1}", buffer.GetPosition(), name); int CurrentPosition = buffer.GetPosition(); diff = CurrentPosition - posn; var skip = (int) NameLength - diff; outputStream.WriteLine("Diff is {0}. If it is not 0, then we will go overboard when setting posn. Skipping {1} bytes", diff, skip); buffer.SkipBytes(skip); UInt32 LastNameLength = buffer.ReadUInt32(); posn = buffer.GetPosition(); outputStream.WriteLine("{0, -5}: LastName Length: {1}", buffer.GetPosition() - 4, LastNameLength); name = buffer.ReadString(false); outputStream.WriteLine("{0, -5}: Last Name: {1}", buffer.GetPosition(), name); CurrentPosition = buffer.GetPosition(); diff = CurrentPosition - posn; skip = (int)LastNameLength - diff; outputStream.WriteLine("Diff is {0}. If it is not 0, then we will go overboard when setting posn. Skipping {1} bytes", diff, skip); buffer.SkipBytes(skip); // Unknown //Buffer.SkipBytes(4); outputStream.WriteLine("{0, -5}: Birthday {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Account start date {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Last Save Date {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Time played in Minutes {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Time Entitled On Account {1}", buffer.GetPosition(),buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Expansions {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 LanguageCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Language Count = {1}", buffer.GetPosition() - 4, LanguageCount); for (int i = 0; i < LanguageCount; ++i) { buffer.SkipBytes(1); } outputStream.WriteLine("{0, -5}: Zone ID {1}", buffer.GetPosition(), buffer.ReadUInt16()); outputStream.WriteLine("{0, -5}: Zone Instance {1}", buffer.GetPosition(), buffer.ReadUInt16()); outputStream.WriteLine("{0, -5}: Y,X,Z {1},{2},{3} Heading: {4}", buffer.GetPosition(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle()); //Moofta all above here is verified outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: GuildID? {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Experience {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Bank Plat {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Gold {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Silver {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Copper {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Shared plat? {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 Unknown42 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown, value 42? {1}", buffer.GetPosition() - 4, Unknown42); buffer.SkipBytes((int)(Unknown42 * 8)); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Career Tribute Favour {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Current Tribute Favour {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); UInt32 PersonalTributeCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Personal Tribute Count {1}", buffer.GetPosition() - 4, PersonalTributeCount); buffer.SkipBytes((int)(PersonalTributeCount * 8)); UInt32 GuildTributeCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Guild Tribute Count {1}", buffer.GetPosition() - 4, GuildTributeCount); buffer.SkipBytes((int)(GuildTributeCount * 8)); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 121 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(121); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Position now {0}", buffer.GetPosition()); UInt32 Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 320 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(320); outputStream.WriteLine("Skipping 343 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(343); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); UInt32 Unknown6 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown6 {1} LDON Stuff then why have the count before it?", buffer.GetPosition() - 4, Unknown6); //for (int i = 0; i < Unknown6; ++i) //{ // OutputStream.WriteLine("{0, -5}: Unknown LDON? {1}", Buffer.GetPosition(), Buffer.ReadUInt32()); //} outputStream.WriteLine("{0, -5}: Ldon GUK points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Ldon MIR points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Ldon mmc points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Ldon ruj points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Ldon tak points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Ldon available points? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64 * 4); // Air remaining ? outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); // Next 7 could be PVP stats, outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); // PVP LastKill struct ? outputStream.WriteLine("Skipping string + 24 bytes starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(25); Byte b; do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); // PVP LastDeath struct ? outputStream.WriteLine("Skipping string + 24 bytes starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(25); do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); // PVP Number of Kills in Last 24 hours ? outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 Unknown50 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown50 {1}", buffer.GetPosition() - 4, Unknown50); // PVP Recent Kills ? outputStream.WriteLine("Pss pvp recent kills Skipping 50 x (String + 24 bytes) starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(1338); for (int i = 0; i < 50; ++i) { do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); } // outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Group autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Raid autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Guild autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Level3? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Showhelm? {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: RestTimer? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 1028 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(1028); //outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); //outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Pointer is {0} bytes from end.", buffer.Length() - buffer.GetPosition()); }
public override void ExploreNPCMoveUpdate(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { BitStream bs = new BitStream(buffer.Buffer, buffer.Length()); UInt32 SpawnID = bs.readUInt(16); UInt32 Unknown = bs.readUInt(16); UInt32 VFlags = bs.readUInt(6); float y = (float)bs.readInt(19) / (float)(1 << 3); float x = (float)bs.readInt(19) / (float)(1 << 3); float z = (float)bs.readInt(19) / (float)(1 << 3); float heading = (float)bs.readInt(12) / (float)(1 << 3); outputStream.WriteLine("Spawn: {0} Flags: {1}, XYZ: {2}, {3}, {4}, Heading: {5}", SpawnID, VFlags, x, y, z, heading); }
public override void ExplorePlayerProfile(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { outputStream.WriteLine("{0, -5}: Checksum = {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: ChecksumSize = {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine(""); outputStream.WriteLine("{0, -5}: Gender = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Race = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Class = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Level = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Level1 = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine(""); UInt32 BindCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: BindCount = {1}", buffer.GetPosition() - 4, BindCount); for (int i = 0; i < BindCount; ++i) { outputStream.WriteLine("{0, -5}: Bind: {1} Zone: {2} XYZ: {3},{4},{5} Heading: {6}", buffer.GetPosition(), i, buffer.ReadUInt32(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle()); } outputStream.WriteLine(""); outputStream.WriteLine("{0, -5}: Deity = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Intoxication = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine(""); //Buffer.SkipBytes(8); // Deity, intoxication UInt32 UnknownCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown Count = {1}", buffer.GetPosition() - 4, UnknownCount); for (int i = 0; i < UnknownCount; ++i) { outputStream.WriteLine("{0, -5}: Unknown : {1}, Value = {2}", buffer.GetPosition(), i, buffer.ReadUInt32()); //Buffer.SkipBytes(4); } UInt32 EquipmentCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: EquipmentCount = {1}", buffer.GetPosition() - 4, EquipmentCount); for (int i = 0; i < EquipmentCount; ++i) { outputStream.Write("{0, -5}: Equip: {1} Values: ", buffer.GetPosition(), i); for (int j = 0; j < 5; ++j) outputStream.Write("{0} ", buffer.ReadUInt32()); outputStream.WriteLine(""); //Buffer.SkipBytes(20); } UInt32 EquipmentCount2 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: EquipmentCount2 = {1}", buffer.GetPosition() - 4, EquipmentCount2); for (int i = 0; i < EquipmentCount2; ++i) { outputStream.Write("{0, -5}: Equip2: {1} Values: ", buffer.GetPosition(), i); for (int j = 0; j < 5; ++j) outputStream.Write("{0} ", buffer.ReadUInt32()); outputStream.WriteLine(""); //Buffer.SkipBytes(20); } UInt32 TintCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: TintCount = {1}", buffer.GetPosition() - 4, TintCount); for (int i = 0; i < TintCount; ++i) { outputStream.WriteLine("{0, -5}: TintCount : {1}, Value = {2}", buffer.GetPosition(), i, buffer.ReadUInt32()); //Buffer.SkipBytes(4); } UInt32 TintCount2 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: TintCount2 = {1}", buffer.GetPosition() - 4, TintCount2); for (int i = 0; i < TintCount; ++i) { outputStream.WriteLine("{0, -5}: TintCount2 : {1}, Value = {2}", buffer.GetPosition(), i, buffer.ReadUInt32()); //Buffer.SkipBytes(4); } outputStream.WriteLine("{0, -5}: Hair Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Beard Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Eye1 Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Eye2 Color = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Hairstyle = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Beard = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Face = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Drakkin Heritage = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Drakkin Tattoo = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Drakkin Details = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Height = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Primary = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Secondary = {1}", buffer.GetPosition(), buffer.ReadUInt32()); //Buffer.SkipBytes(52); // Per SEQ, this looks like face, haircolor, beardcolor etc. outputStream.WriteLine("{0, -5}: Unspent Skill Points = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Mana = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Current HP = {1}", buffer.GetPosition(), buffer.ReadUInt32()); //UInt32 Points = Buffer.ReadUInt32(); //UInt32 Mana = Buffer.ReadUInt32(); //UInt32 CurHP = Buffer.ReadUInt32(); //OutputStream.WriteLine("Points, Mana, CurHP = {0}, {1}, {2}", Points, Mana, CurHP); outputStream.WriteLine("{0, -5}: STR = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: STA = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: CHA = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: DEX = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: INT = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AGI = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: WIS = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); //Buffer.SkipBytes(28); //Buffer.SkipBytes(28); UInt32 AACount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: AA Count = {1}", buffer.GetPosition() - 4, AACount); for (int i = 0; i < AACount; ++i) { outputStream.WriteLine(" AA: {0}, Value: {1}, Unknown08: {2}", buffer.ReadUInt32(), buffer.ReadUInt32(), buffer.ReadUInt32()); //Buffer.SkipBytes(12); } UInt32 SkillCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Skill Count = {1}", buffer.GetPosition() - 4, SkillCount); for (int i = 0; i < SkillCount; ++i) { buffer.SkipBytes(4); } UInt32 SomethingCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Something Count = {1}", buffer.GetPosition() - 4, SomethingCount); for (int i = 0; i < SomethingCount; ++i) { //Buffer.SkipBytes(4); outputStream.WriteLine("Something {0} : {1}", i, buffer.ReadUInt32()); } UInt32 DisciplineCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Discipline Count = {1}", buffer.GetPosition() - 4, DisciplineCount); for (int i = 0; i < DisciplineCount; ++i) { buffer.SkipBytes(4); } UInt32 TimeStampCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: TimeStamp Count = {1}", buffer.GetPosition() - 4, TimeStampCount); for (int i = 0; i < TimeStampCount; ++i) { //Buffer.SkipBytes(4); outputStream.WriteLine("Timestamp {0} : {1}", i, buffer.ReadUInt32()); } System.DateTime dateTime; UInt32 RecastCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Recast Count = {1}", buffer.GetPosition() - 4, RecastCount); for (int i = 0; i < RecastCount; ++i) { //Buffer.SkipBytes(4); UInt32 TimeStamp = buffer.ReadUInt32(); dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); dateTime = dateTime.AddSeconds(TimeStamp); outputStream.WriteLine("Recast {0} : {1} {2}", i, TimeStamp, dateTime.ToString()); } UInt32 TimeStamp2Count = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: TimeStamp2 Count = {1}", buffer.GetPosition() - 4, TimeStamp2Count); for (int i = 0; i < TimeStamp2Count; ++i) { //Buffer.SkipBytes(4); UInt32 TimeStamp = buffer.ReadUInt32(); dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); dateTime = dateTime.AddSeconds(TimeStamp); outputStream.WriteLine("Timestamp {0} : {1} {2}", i, TimeStamp, dateTime.ToString()); } UInt32 SpellBookSlots = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: SpellBookSlot Count = {1}", buffer.GetPosition() - 4, SpellBookSlots); for (int i = 0; i < SpellBookSlots; ++i) { buffer.SkipBytes(4); } UInt32 SpellMemSlots = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Spell Mem Count = {1}", buffer.GetPosition() - 4, SpellMemSlots); for (int i = 0; i < SpellMemSlots; ++i) { buffer.SkipBytes(4); } SomethingCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown Count = {1}", buffer.GetPosition() - 4, SomethingCount); for (int i = 0; i < SomethingCount; ++i) { //Buffer.SkipBytes(4); outputStream.WriteLine("Unknown {0} : {1}", i, buffer.ReadUInt32()); } outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadByte()); UInt32 BuffCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Buff Count = {1}", buffer.GetPosition() - 4, BuffCount); for (int i = 0; i < BuffCount; ++i) { buffer.ReadByte(); float UnkFloat = buffer.ReadSingle(); UInt32 PlayerID = buffer.ReadUInt32(); Byte UnkByte = buffer.ReadByte(); UInt32 Counters1 = buffer.ReadUInt32(); UInt32 Duration = buffer.ReadUInt32(); Byte Level = buffer.ReadByte(); UInt32 SpellID = buffer.ReadUInt32(); UInt32 SlotID = buffer.ReadUInt32(); buffer.SkipBytes(5); UInt32 Counters2 = buffer.ReadUInt32(); outputStream.WriteLine("Sl: {0}, UF: {1}, PID: {2}, UByte: {3}, Cnt1: {4}, Dur: {5}, Lvl: {6} SpellID: {7}, SlotID: {8}, Cnt2: {9}", i, UnkFloat, PlayerID, UnkByte, Counters1, Duration, Level, SpellID, SlotID, Counters2); buffer.SkipBytes(44); } outputStream.WriteLine("{0, -5}: Plat = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Gold = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Silver = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Copper = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Plat Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Gold Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Silver Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Copper Cursor = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Toxicity? = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Thirst? = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Hunger? = {1}", buffer.GetPosition(), buffer.ReadUInt32()); //Buffer.SkipBytes(20); outputStream.WriteLine("{0, -5}: AA Spent = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Point Count? = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Assigned = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Spent General = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Spent Archetype = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Spent Class = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Spent Special = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: AA Unspent = {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown", buffer.GetPosition(), buffer.ReadUInt16()); //Buffer.SkipBytes(30); UInt32 BandolierCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Bandolier Count = {1}", buffer.GetPosition() - 4, BandolierCount); for (int i = 0; i < BandolierCount; ++i) { buffer.ReadString(false); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); buffer.ReadString(false); buffer.SkipBytes(8); } UInt32 PotionCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Potion Count = {1}", buffer.GetPosition() - 4, PotionCount); for (int i = 0; i < PotionCount; ++i) { buffer.ReadString(false); buffer.SkipBytes(8); } outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadInt32()); outputStream.WriteLine("{0, -5}: Item HP Total? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Endurance Total? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Mana Total? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Expansion Count {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 NameLength = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Name Length: {1}", buffer.GetPosition() - 4, NameLength); int CurrentPosition = buffer.GetPosition(); outputStream.WriteLine("{0, -5}: Name: {1}", buffer.GetPosition(), buffer.ReadString(false)); buffer.SetPosition(CurrentPosition + (int)NameLength); UInt32 LastNameLength = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: LastName Length: {1}", buffer.GetPosition() - 4, LastNameLength); CurrentPosition = buffer.GetPosition(); outputStream.WriteLine("{0, -5}: Last Name: {1}", buffer.GetPosition(), buffer.ReadString(false)); buffer.SetPosition(CurrentPosition + (int)LastNameLength); outputStream.WriteLine("{0, -5}: Birthday {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Account Start Date {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Last Login Date {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Time Played Minutes {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Time Entitled On Account {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Expansions {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 LanguageCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Language Count = {1}", buffer.GetPosition() - 4, LanguageCount); for (int i = 0; i < LanguageCount; ++i) { buffer.SkipBytes(1); } outputStream.WriteLine("{0, -5}: Zone ID {1}", buffer.GetPosition(), buffer.ReadUInt16()); outputStream.WriteLine("{0, -5}: Zone Instance {1}", buffer.GetPosition(), buffer.ReadUInt16()); outputStream.WriteLine("{0, -5}: Y,X,Z {1},{2},{3} Heading: {4}", buffer.GetPosition(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle(), buffer.ReadSingle()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: GuildID? {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Experience {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Bank Plat {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Gold {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Silver {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Bank Copper {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 Unknown42 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown, value 42? {1}", buffer.GetPosition() - 4, Unknown42); buffer.SkipBytes((int)(Unknown42 * 8)); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Career Tribute Favour {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Current Tribute Favour {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); UInt32 PersonalTributeCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Personal Tribute Count {1}", buffer.GetPosition() - 4, PersonalTributeCount); buffer.SkipBytes((int)(PersonalTributeCount * 8)); UInt32 GuildTributeCount = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Guild Tribute Count {1}", buffer.GetPosition() - 4, GuildTributeCount); buffer.SkipBytes((int)(GuildTributeCount * 8)); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 121 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(121); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Position now {0}", buffer.GetPosition()); UInt32 Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 320 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(320); outputStream.WriteLine("Skipping 343 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(343); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); UInt32 Unknown6 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown6 {1} LDON Stuff ?", buffer.GetPosition() - 4, Unknown6); for (int i = 0; i < Unknown6; ++i) outputStream.WriteLine("{0, -5}: Unknown LDON? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); Unknown64 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown64 {1}", buffer.GetPosition() - 4, Unknown64); buffer.SkipBytes((int)Unknown64 * 4); // Air remaining ? outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); // Next 7 could be PVP stats, outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); // PVP LastKill struct ? outputStream.WriteLine("Skipping string + 24 bytes starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(25); Byte b; do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); // PVP LastDeath struct ? outputStream.WriteLine("Skipping string + 24 bytes starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(25); do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); // PVP Number of Kills in Last 24 hours ? outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); UInt32 Unknown50 = buffer.ReadUInt32(); outputStream.WriteLine("{0, -5}: Unknown50 {1}", buffer.GetPosition() - 4, Unknown50); // PVP Recent Kills ? outputStream.WriteLine("Skipping 50 x (String + 24 bytes) starting at offset {0}", buffer.GetPosition()); //Buffer.SkipBytes(1338); for (int i = 0; i < 50; ++i) { do { b = buffer.ReadByte(); } while (b != 0); buffer.SkipBytes(24); } // outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Group autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Raid autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Guild autoconsent? {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: Level3? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Showhelm? {1}", buffer.GetPosition(), buffer.ReadByte()); outputStream.WriteLine("{0, -5}: RestTimer? {1}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Skipping 1028 bytes starting at offset {0}", buffer.GetPosition()); buffer.SkipBytes(1028); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("{0, -5}: Unknown {1:X}", buffer.GetPosition(), buffer.ReadUInt32()); outputStream.WriteLine("Pointer is {0} bytes from end.", buffer.Length() - buffer.GetPosition()); }
public override void ExploreInventory(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { if (buffer.Length() < 4) return; UInt32 Count = buffer.ReadUInt32(); for (int i = 0; i < Count; ++i) { try { DecodeItemPacket(outputStream, buffer, direction); } catch { return; } } }
public override void ExploreZoneEntry(StreamWriter outputStream, ByteStream buffer, PacketDirection direction) { if (direction != PacketDirection.ServerToClient) return; string FirstName = buffer.ReadString(false); outputStream.WriteLine("Name = {0}", FirstName); UInt32 SpawnID = buffer.ReadUInt32(); outputStream.WriteLine("SpawnID = {0}", SpawnID); byte Level = buffer.ReadByte(); outputStream.WriteLine("Level = {0}", Level); buffer.SkipBytes(4); byte IsNPC = buffer.ReadByte(); outputStream.WriteLine("IsNPC = {0}", IsNPC); UInt32 Bitfield = buffer.ReadUInt32(); outputStream.WriteLine("Name: {0}, Bitfield: {1}", FirstName, Convert.ToString(Bitfield, 2)); byte OtherData = buffer.ReadByte(); outputStream.WriteLine("OtherData = {0}", OtherData); buffer.SkipBytes(8); if ((OtherData & 1) > 0) { outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); outputStream.WriteLine("OD: {0}", buffer.ReadString(false)); buffer.SkipBytes(53); } if ((OtherData & 4) > 0) { outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); outputStream.WriteLine("Aura: {0}", buffer.ReadString(false)); buffer.SkipBytes(54); } byte Properties = buffer.ReadByte(); outputStream.WriteLine("Properties = {0}, Offset now {1}", Properties, buffer.GetPosition()); UInt32 BodyType = 0; if(Properties > 0) BodyType = buffer.ReadUInt32(); outputStream.WriteLine("Bodytype = {0}", BodyType); if (Properties != 1) outputStream.WriteLine("XXXX Properties is {0}", Properties); for (int i = 1; i < Properties; ++i) outputStream.WriteLine(" Prop: {0}", buffer.ReadUInt32()); outputStream.WriteLine("Position is now {0}", buffer.GetPosition()); byte HP = buffer.ReadByte(); byte HairColor = buffer.ReadByte(); byte BeardColor = buffer.ReadByte(); byte Eye1 = buffer.ReadByte(); byte Eye2 = buffer.ReadByte(); byte HairStyle = buffer.ReadByte(); byte BeardStyle = buffer.ReadByte(); outputStream.WriteLine("Beardstyle is {0}", BeardStyle); buffer.SkipBytes(12); // Drakkin stuff byte EquipChest2 = buffer.ReadByte(); buffer.SkipBytes(2); byte Helm = buffer.ReadByte(); float Size = buffer.ReadSingle(); byte Face = buffer.ReadByte(); float WalkSpeed = buffer.ReadSingle(); float RunSpeed = buffer.ReadSingle(); UInt32 Race = buffer.ReadUInt32(); outputStream.WriteLine("Size: {0}, Face: {1}, Walkspeed: {2}, RunSpeed: {3}, Race: {4}", Size, Face, WalkSpeed, RunSpeed, Race); //Buffer.SkipBytes(18); buffer.SkipBytes(5); UInt32 GuildID = buffer.ReadUInt32(); UInt32 GuildRank = buffer.ReadUInt32(); buffer.SkipBytes(5); outputStream.WriteLine("GuildID: {0}, Guild Rank: {1}", GuildID, GuildRank); buffer.ReadString(false); buffer.SkipBytes(35); if ((IsNPC == 0) || NPCType.IsPlayableRace(Race)) { for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) outputStream.WriteLine("Color {0} is {1}", ColourSlot, buffer.ReadUInt32()); for (int i = 0; i < 9; ++i) { UInt32 Equip3 = buffer.ReadUInt32(); UInt32 Equipx = buffer.ReadUInt32(); UInt32 Equip2 = buffer.ReadUInt32(); UInt32 Equip1 = buffer.ReadUInt32(); UInt32 Equip0 = buffer.ReadUInt32(); outputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i, Equip0, Equip1, Equip2, Equipx, Equip3); } } else { // Non playable race // Melee Texture 1 is 20 bytes in // Melee Texture 1 is 40 bytes in // This whole segment is 28 + 24 + 8 = 60 // Skip 20, Read m1, skip 16, read m2, skip 16 /* OutputStream.WriteLine("None playable race, offset now {0}", Buffer.GetPosition()); Buffer.SkipBytes(28); UInt32 MeleeTexture1 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); UInt32 MeleeTexture2 = Buffer.ReadUInt32(); Buffer.SkipBytes(12); */ outputStream.WriteLine("None playable race, offset now {0}", buffer.GetPosition()); buffer.SkipBytes(20); UInt32 MeleeTexture1 = buffer.ReadUInt32(); buffer.SkipBytes(16); UInt32 MeleeTexture2 = buffer.ReadUInt32(); buffer.SkipBytes(16); } outputStream.WriteLine("Position starts at offset {0}", buffer.GetPosition()); UInt32 Position1 = buffer.ReadUInt32(); UInt32 Position2 = buffer.ReadUInt32(); UInt32 Position3 = buffer.ReadUInt32(); UInt32 Position4 = buffer.ReadUInt32(); UInt32 Position5 = buffer.ReadUInt32(); float YPos = Utils.EQ19ToFloat((Int32)(Position1 >> 12)); float ZPos = Utils.EQ19ToFloat((Int32)(Position3 >> 13) & 0x7FFFF); float XPos = Utils.EQ19ToFloat((Int32)(Position4) & 0x7FFFF); float Heading = Utils.EQ19ToFloat((Int32)(Position5) & 0x7FFFF); outputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", XPos, YPos, ZPos, Heading); if((OtherData & 16) > 1) outputStream.WriteLine("Title: {0}", buffer.ReadString(false)); if ((OtherData & 32) > 1) outputStream.WriteLine("Suffix: {0}", buffer.ReadString(false)); buffer.SkipBytes(8); byte IsMerc = buffer.ReadByte(); outputStream.WriteLine("IsMerc: {0}", IsMerc); buffer.SkipBytes(54); outputStream.WriteLine("Buffer Length: {0}, Current Position: {1}", buffer.Length(), buffer.GetPosition()); if (buffer.Length() != buffer.GetPosition()) outputStream.WriteLine("PARSE ERROR"); outputStream.WriteLine(""); }