public ReadString ( int numChars ) : string | ||
numChars | int | |
Результат | string |
void ExtractMIDI(ByteStream stream) { if (stream.ReadString(4) != "MIDI") { throw new InvalidDataException("Not a GMD file!"); } stream.Skip(4); string type; while ((type = GetChunkType(stream)) != null) { if (type == "MThd") { long size = stream.Length - stream.Position; _midiData = stream.Read((int)size); return; } if (!SkipChunk(stream)) { break; } } throw new InvalidDataException("Could not locate midi track header!"); }
/// <summary> /// Creates a new <see cref="ChatRoom"/> from a received <see cref="ByteStream"/> /// </summary> public ChatRoom(ByteStream stream) { exchangeNumber = stream.ReadUshort(); fullName = stream.ReadString(stream.ReadByte(), Encoding.ASCII); instance = stream.ReadUshort(); // A small chat room info block will only contain the bare essentials: // exchange number, chat room name, and instance number. // The chat room class really wants a display name, so parse one here. if (stream.HasMoreData) { detailLevel = stream.ReadByte(); unknownCode = stream.ReadUshort(); // No idea what this is using (TlvBlock block = new TlvBlock(stream.ReadByteArrayToEnd())) { flags = block.ReadUshort(CHATROOM_FLAGS); if (block.HasTlv(CHATROOM_CREATION_TIME)) { creationTime = block.ReadDateTime(CHATROOM_CREATION_TIME); } maxMessageLength = block.ReadUshort(CHATROOM_MESSAGE_LENGTH); maxOccupants = block.ReadUshort(CHATROOM_MAX_OCCUPANTS); displayName = block.ReadString(CHATROOM_DISPLAYNAME, Encoding.ASCII); creationPermissions = block.ReadByte(CHATROOM_PERMISSIONS); string charset = block.ReadString(CHATROOM_CHARSET1, Encoding.ASCII); if (!String.IsNullOrEmpty(charset)) { charSet1 = Encoding.GetEncoding(charset); } language1 = block.ReadString(CHATROOM_LANGUAGE1, Encoding.ASCII); charset = block.ReadString(CHATROOM_CHARSET2, Encoding.ASCII); if (!String.IsNullOrEmpty(charset)) { charSet2 = Encoding.GetEncoding(charset); } language2 = block.ReadString(CHATROOM_LANGUAGE2, Encoding.ASCII); contentType = block.ReadString(CHATROOM_CONTENTTYPE, Encoding.ASCII); } } // Make sure there's a display name to show if (String.IsNullOrEmpty(displayName)) { Match match = AolUriParser.Match(fullName); if (match.Success) { //displayName = UtilityMethods.DeHexUri(match.Groups["roomname"].Value); int lastDashBeforeName = fullName.IndexOf('-', 16); displayName = fullName.Substring(lastDashBeforeName + 1); } else { displayName = fullName; } } }
private void ParseBitmap(ByteStream stream, CreateArgs createArgs) { if ((stream.ReadString(3) != "BM ") || (stream.ReadByte() != 0x1e)){ throw new InvalidDataException("Not a BM file."); } Header header = ReadHeader(stream, EHeaderType.FileHeader); DebugCheck.Assert(stream.Position == 32); if ((header.W == 1) && (header.H != 1)) { // multiple bitmaps in this file. _fps = stream.ReadByte(); stream.Skip(1); long baseOfs = stream.Position; int[] offsets = new int[header.IY]; for (int i = 0; i < offsets.Length; ++i) { offsets[i] = stream.ReadLittleInt32(); } for (int i = 0; i < offsets.Length; ++i) { stream.SeekSet(offsets[i] + baseOfs); Header subHeader = ReadHeader(stream, EHeaderType.SubHeader); Frame frame = ReadColumns(stream, subHeader, null, createArgs); _frames.Add(frame); } } else { int[] columnOffsets = null; if (header.Compressed != 0) { // read column offsets. stream.SeekSet(header.DataSize); columnOffsets = new int[header.W]; for (int i = 0; i < columnOffsets.Length; ++i) { columnOffsets[i] = stream.ReadLittleInt32() + 32; } } Frame frame = ReadColumns(stream, header, columnOffsets, createArgs); _frames.Add(frame); } }
override public 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.Showname = (Bitfield >> 28) & 1; NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1; NewSpawn.Targetable = (Bitfield >> 26) & 1; NewSpawn.ShowHelm = (Bitfield >> 24) & 1; NewSpawn.Gender = (Bitfield >> 20) & 3; Byte OtherData = Buffer.ReadByte(); Buffer.SkipBytes(8); // Skip 8 unknown bytes NewSpawn.DestructableString1 = ""; NewSpawn.DestructableString2 = ""; NewSpawn.DestructableString3 = ""; if ((OtherData & 1) > 0) { //SQLOut(String.Format("-- OBJECT FOUND SpawnID {0}", SpawnID.ToString("x"))); //Console.WriteLine("Otherdata is {0} Skipping Stuff.", OtherData.ToString("x")); NewSpawn.DestructableString1 = Buffer.ReadString(false); NewSpawn.DestructableString2 = Buffer.ReadString(false); NewSpawn.DestructableString3 = Buffer.ReadString(false); NewSpawn.DestructableUnk1 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk2 = Buffer.ReadUInt32(); NewSpawn.DestructableID1 = Buffer.ReadUInt32(); NewSpawn.DestructableID2 = Buffer.ReadUInt32(); NewSpawn.DestructableID3 = Buffer.ReadUInt32(); NewSpawn.DestructableID4 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk3 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk4 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk5 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk6 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk7 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk8 = Buffer.ReadUInt32(); NewSpawn.DestructableUnk9 = Buffer.ReadUInt32(); NewSpawn.DestructableByte = Buffer.ReadByte(); //SQLOut(String.Format("-- DES: {0,8:x} {1,8:x} {2,8:d} {3,8:d} {4,8:d} {5,8:d} {6,8:x} {7,8:x} {8,8:x} {9,8:x} {10,8:x} {11,8:x} {12,8:x} {13,2:x} {14} {15} {16}", // DestructableUnk1, DestructableUnk2, DestructableID1, DestructableID2, DestructableID3, DestructableID4, // DestructableUnk3, DestructableUnk4, DestructableUnk5, DestructableUnk6, DestructableUnk7, DestructableUnk8, // DestructableUnk9, DestructableByte, DestructableString1, DestructableString2, DestructableString3)); } NewSpawn.Size = Buffer.ReadSingle(); NewSpawn.Face = Buffer.ReadByte(); NewSpawn.WalkSpeed = Buffer.ReadSingle(); NewSpawn.RunSpeed = Buffer.ReadSingle(); NewSpawn.Race = Buffer.ReadUInt32(); NewSpawn.PropCount = Buffer.ReadByte(); NewSpawn.BodyType = 0; if (NewSpawn.PropCount >= 1) { NewSpawn.BodyType = Buffer.ReadUInt32(); 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(); 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.EquipChest2 = Buffer.ReadByte(); bool UseWorn = (NewSpawn.EquipChest2 == 255); Buffer.SkipBytes(2); // 2 Unknown bytes; NewSpawn.Helm = Buffer.ReadByte(); NewSpawn.LastName = Buffer.ReadString(false); Buffer.SkipBytes(5); // AATitle + unknown byte NewSpawn.PetOwnerID = Buffer.ReadUInt32(); Buffer.SkipBytes(25); // Unknown byte + 6 unknown uint32 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)(Position3 & 0x7FFFF)); NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF)); NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF); NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF)); for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) { NewSpawn.SlotColour[ColourSlot] = Buffer.ReadUInt32(); } NewSpawn.MeleeTexture1 = 0; NewSpawn.MeleeTexture2 = 0; if (NPCType.IsPlayableRace(NewSpawn.Race)) { for (int i = 0; i < 9; ++i) { NewSpawn.Equipment[i] = 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 NewSpawn.MeleeTexture1 = NewSpawn.SlotColour[3]; NewSpawn.MeleeTexture2 = NewSpawn.SlotColour[6]; } if (NewSpawn.EquipChest2 == 255) { NewSpawn.EquipChest2 = 0; } if (NewSpawn.Helm == 255) { NewSpawn.Helm = 0; } if ((OtherData & 4) > 0) { NewSpawn.Title = Buffer.ReadString(false); } if ((OtherData & 8) > 0) { NewSpawn.Suffix = Buffer.ReadString(false); } // unknowns Buffer.SkipBytes(8); NewSpawn.IsMercenary = Buffer.ReadByte(); ZoneSpawns.Add(NewSpawn); } return(ZoneSpawns); }
override public MerchantManager GetMerchantData(NPCSpawnList NPCSL) { List <EQApplicationPacket> PacketList = Packets.PacketList; UInt32 OP_ShopRequest = OpManager.OpCodeNameToNumber("OP_ShopRequest"); UInt32 OP_ShopEnd = OpManager.OpCodeNameToNumber("OP_ShopEnd"); UInt32 OP_ItemPacket = OpManager.OpCodeNameToNumber("OP_ItemPacket"); MerchantManager mm = new MerchantManager(); for (int i = 0; i < PacketList.Count; ++i) { EQApplicationPacket p = PacketList[i]; if ((p.Direction == PacketDirection.ServerToClient) && (p.OpCode == OP_ShopRequest)) { ByteStream Buffer = new ByteStream(p.Buffer); UInt32 MerchantSpawnID = Buffer.ReadUInt32(); NPCSpawn npc = NPCSL.GetNPC(MerchantSpawnID); UInt32 NPCTypeID; if (npc != null) { NPCTypeID = npc.NPCTypeID; } else { NPCTypeID = 0; } mm.AddMerchant(MerchantSpawnID); for (int j = i + 1; j < PacketList.Count; ++j) { p = PacketList[j]; if (p.OpCode == OP_ShopEnd) { break; } if (p.OpCode == OP_ItemPacket) { Buffer = new ByteStream(p.Buffer); UInt32 StackSize = Buffer.ReadUInt32(); Buffer.SkipBytes(4); UInt32 Slot = Buffer.ReadUInt32(); UInt32 MerchantSlot = Buffer.ReadUInt32(); UInt32 Price = Buffer.ReadUInt32(); Int32 Quantity = Buffer.ReadInt32(); Buffer.SetPosition(68); // Point to item name string ItemName = Buffer.ReadString(true); string Lore = Buffer.ReadString(true); string IDFile = Buffer.ReadString(true); UInt32 ItemID = Buffer.ReadUInt32(); //if (Quantity == -1) mm.AddMerchantItem(MerchantSpawnID, ItemID, ItemName, MerchantSlot, Quantity); } } } } return(mm); }
public 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.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)((Position4 >> 13) & 0x7FFFF)); float ZPos = Utils.EQ19ToFloat((Int32)(Position5 >> 10) & 0x7FFFF); float XPos = Utils.EQ19ToFloat((Int32)(Position2 >> 10) & 0x7FFFF); //float Heading = Utils.EQ19ToFloat((Int32)(Position1 >> 13) & 0x3FF); //float Heading = Utils.EQ19ToFloat((Int32)(Position2) & 0x3FF); float Heading = Utils.EQ19ToFloat((Int32)(Position3) & 0x3FF); //for(int 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(""); }
override public 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)((Position4 >> 13) & 0x7FFFF)); NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 >> 10) & 0x7FFFF); NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position2 >> 10) & 0x7FFFF); NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position3) & 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); Debug.Assert(Buffer.GetPosition() == Buffer.Length(), "Length mismatch while parsing zone spawns"); ZoneSpawns.Add(NewSpawn); } return(ZoneSpawns); }
//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); if (FirstName == "Emperor_Crush00") { outputStream.WriteLine("Sample marker"); } 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); //vsabL 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 { //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); 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) { } }
/* * 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()); //vsab 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 void ExploreZoneEntry(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction) { if (Direction != PacketDirection.ServerToClient) { return; } string SpawnName = Buffer.ReadString(true); UInt32 SpawnID = Buffer.ReadUInt32(); byte Level = Buffer.ReadByte(); float UnkSize = Buffer.ReadSingle(); byte IsNPC = Buffer.ReadByte(); UInt32 Bitfield = Buffer.ReadUInt32(); /* * NewSpawn.Showname = (Bitfield >> 28) & 1; * NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1; * NewSpawn.Targetable = (Bitfield >> 26) & 1; * * NewSpawn.ShowHelm = (Bitfield >> 24) & 1; * NewSpawn.Gender = (Bitfield >> 20) & 3; * * NewSpawn.Padding5 = (Bitfield >> 4) & 1; * NewSpawn.Padding7 = (Bitfield >> 6) & 2047; * NewSpawn.Padding26 = (Bitfield >> 25) & 1; */ Byte OtherData = Buffer.ReadByte(); Buffer.SkipBytes(8); // Skip 8 unknown bytes //NewSpawn.DestructableString1 = ""; //NewSpawn.DestructableString2 = ""; //NewSpawn.DestructableString3 = ""; if ((IsNPC > 0) && ((OtherData & 3) > 0)) { // Destructable Objects. Not handled yet // //SQLOut(String.Format("-- OBJECT FOUND SpawnID {0}", SpawnID.ToString("x"))); Buffer.ReadString(false); Buffer.ReadString(false); Buffer.ReadString(false); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadUInt32(); Buffer.ReadByte(); } OutputStream.WriteLine("Size starts at offset {0}", Buffer.GetPosition()); float Size = Buffer.ReadSingle(); byte Face = Buffer.ReadByte(); float WalkSpeed = Buffer.ReadSingle(); float RunSpeed = Buffer.ReadSingle(); UInt32 Race = Buffer.ReadUInt32(); byte PropCount = Buffer.ReadByte(); UInt32 BodyType = 0; if (PropCount >= 1) { BodyType = Buffer.ReadUInt32(); for (int j = 1; j < PropCount; ++j) { Buffer.SkipBytes(4); } } Buffer.SkipBytes(1); // Skip HP % byte HairColor = Buffer.ReadByte(); byte BeardColor = Buffer.ReadByte(); byte EyeColor1 = Buffer.ReadByte(); byte EyeColor2 = Buffer.ReadByte(); byte HairStyle = Buffer.ReadByte(); byte Beard = Buffer.ReadByte(); UInt32 DrakkinHeritage = Buffer.ReadUInt32(); UInt32 DrakkinTattoo = Buffer.ReadUInt32(); UInt32 DrakkinDetails = Buffer.ReadUInt32(); Buffer.SkipBytes(1); // Skip Holding UInt32 Deity = Buffer.ReadUInt32(); Buffer.SkipBytes(8); // Skip GuildID and GuildRank byte Class = Buffer.ReadByte(); Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode byte EquipChest2 = Buffer.ReadByte(); bool UseWorn = (EquipChest2 == 255); Buffer.SkipBytes(2); // 2 Unknown bytes; byte Helm = Buffer.ReadByte(); string LastName = Buffer.ReadString(true); Buffer.SkipBytes(5); // AATitle + unknown byte UInt32 PetOwnerID = Buffer.ReadUInt32(); Buffer.SkipBytes(26); // Unknown byte + 6 unknown uint32 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)(Position3 & 0x7FFFF)); float Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF)); float XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF); float ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF)); OutputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", XPos, YPos, ZPos, Heading); if (NPCType.IsPlayableRace(Race)) { for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot) { OutputStream.WriteLine("Color {0} is {1}", ColourSlot, Buffer.ReadUInt32()); } } OutputStream.WriteLine(""); }
string GetChunkType(ByteStream stream) { long pos = stream.Position; string type = stream.ReadString(4); stream.SeekSet(pos); return type; }