ReadString() публичный Метод

public ReadString ( int numChars ) : string
numChars int
Результат string
Пример #1
0
    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!");
    }
Пример #2
0
        /// <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;
                }
            }
        }
Пример #3
0
    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);
        }
    }
Пример #4
0
        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);
        }
Пример #5
0
        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());
        }
Пример #10
0
        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("");
        }
Пример #11
0
 string GetChunkType(ByteStream stream)
 {
     long pos = stream.Position;
     string type = stream.ReadString(4);
     stream.SeekSet(pos);
     return type;
 }