public override bool Parse()
        {
            ResetPosition();

            var playername = new WoW.CacheObjects.PlayerName();

            if (ClientBuildAmount > 9551)
            {
                playername.Guid = ReadPackedWoWGuid("Guid");
                playername.Unk = ReadByte("Unk"); // added in 3.1
                if (playername.Unk != 1)
                {
                    playername.Name = ReadCString("Name"); // 6898 = Name comes first
                    playername.BGRealm = ReadCString("BGRealm"); // realm name for cross realm BG usage
                    playername.Race = ReadEnum<Race>("Race", TypeCode.Byte);
                    playername.Gender = ReadEnum<Gender>("Gender", TypeCode.Byte);
                    playername.Class = ReadEnum<Class>("Class", TypeCode.Byte);
                }
            }
            else
            {
                playername.Guid = ReadWoWGuid("guid");

                if (ClientBuildAmount > 6803)
                {
                    playername.Name = ReadCString("Name"); // 6898 = Name comes first
                    playername.BGRealm = ReadCString("BGRealm"); // realm name for cross realm BG usage
                }
                else
                {
                    playername.BGRealm = ReadCString("BGRealm"); // realm name for cross realm BG usage
                    playername.Name = ReadCString("Name"); // 6898 = Name comes first
                }

                playername.Race = ReadEnum<Race>("Race", TypeCode.UInt32);
                playername.Gender = ReadEnum<Gender>("Gender", TypeCode.UInt32);
                playername.Class = ReadEnum<Class>("Class", TypeCode.UInt32);
            }

            if (ClientBuildAmount > 7799 && playername.Unk != 1)
            {
                playername.Declined = ReadByte("Declined");

                if (playername.Declined == 1)
                {
                    for (int i = 0; i < 5; ++i) //MAX_DECLINED_NAME_CASES
                    {
                        playername.DeclinedNames.Add(ReadCString("declinename" + i));
                    }
                }
            }

            Core.Cache.AddPlayerName(playername);

            return Validate();
        }
        public override bool Parse()
        {
            ResetPosition();

            var playername = new WoW.CacheObjects.PlayerName();

            if (ClientBuildAmount > 9551)
            {
                playername.guid = ReadPackedWoWGuid("guid");
                playername.unk = ReadByte("unk"); // added in 3.1
                if (playername.unk != 1)
                {
                    playername.name = ReadCString("name"); // 6898 = Name comes first
                    playername.bgrealm = ReadCString("bgrealm"); // realm name for cross realm BG usage
                    playername.race = ReadByte("race");
                    playername.gender = ReadByte("gender");
                    playername.class_ = ReadByte("class");
                }
            }
            else
            {
                playername.guid = ReadWoWGuid("guid");

                if (ClientBuildAmount > 6803)
                {
                    playername.name = ReadCString("name"); // 6898 = Name comes first
                    playername.bgrealm = ReadCString("bgrealm"); // realm name for cross realm BG usage
                }
                else
                {
                    playername.bgrealm = ReadCString("bgrealm"); // realm name for cross realm BG usage
                    playername.name = ReadCString("name"); // 6898 = Name comes first
                }
                playername.race = (byte)ReadUInt32("race");
                playername.gender = (byte)ReadUInt32("gender");
                playername.class_ = (byte)ReadUInt32("class_");
            }

            if (ClientBuildAmount > 7799)
            {
                playername.declined = ReadByte("declined");

                if (playername.declined == 1)
                {
                    for (int i = 0; i < 5; ++i) //MAX_DECLINED_NAME_CASES
                    {
                        playername.declinename.Add(ReadCString("declinename" + i));
                    }
                }
            }

            Core.Cache.AddPlayerName(playername);

            return Validate();
        }