示例#1
0
        /// <summary>
        /// Parses an instinct item.
        /// </summary>
        /// <param name="data"></param>
        private void ParseInstinct(byte[] data)
        {
            // Convert the item to a weapon structure entry..
            var item = ArrayToStruct <FFXiTypes.ItemInstinct>(data);

            if (item.ItemId == 0)
            {
                return;
            }

            // Build the item wrapper..
            var wrap = new FFXiTypes.ItemWrapper
            {
                ItemId       = item.ItemId,
                Flags        = item.Flags,
                StackSize    = item.StackSize,
                ItemType     = item.ItemType,
                ResourceId   = item.ResourceID,
                ValidTargets = item.ValidTargets,
                ImageSize    = item.ImageSize,
                ImageType    = item.ImageType,

                ImageName = Encoding.ASCII.GetString(item.ImageName.Take(8).ToArray()).Trim(),
                Bitmap    = GenerateBitmap(data)
            };

            ParseStrings(wrap, item.StringData);

            // Add the item to the cache..
            _itemCache[item.ItemId] = wrap;
        }
示例#2
0
        /// <summary>
        /// Parses a weapon item entry.
        /// </summary>
        /// <param name="data"></param>
        private void ParseWeapon(byte[] data)
        {
            // Convert the item to a weapon structure entry..
            var item = ArrayToStruct <FFXiTypes.ItemWeapon>(data);

            if (item.ItemId == 0)
            {
                return;
            }

            // Build the item wrapper..
            var wrap = new FFXiTypes.ItemWrapper
            {
                ItemId       = item.ItemId,
                Flags        = item.Flags,
                StackSize    = item.StackSize,
                ItemType     = item.ItemType,
                ResourceId   = item.ResourceId,
                ValidTargets = item.ValidTargets,
                Level        = item.Level,
                Slot         = item.Slot,
                Races        = item.Races,
                Jobs         = item.Jobs,
                Damage       = item.Damage,
                Delay        = item.Delay,
                Dps          = item.Dps,
                Skill        = item.Skill,
                JugSize      = item.JugSize,
                MaxCharges   = item.MaxCharges,
                CastTime     = item.CastTime,
                UseDelay     = item.UseDelay,
                ReuseDelay   = item.ReuseDelay,
                ImageSize    = item.ImageSize,
                ImageType    = item.ImageType,

                ImageName = Encoding.ASCII.GetString(item.ImageName.Take(8).ToArray()).Trim(),
                Bitmap    = GenerateBitmap(data)
            };

            ParseStrings(wrap, item.StringData);

            // Add the item to the cache..
            _itemCache[item.ItemId] = wrap;
        }
示例#3
0
        /// <summary>
        /// Parses the strings of the given item.
        /// </summary>
        /// <param name="wrapper"></param>
        /// <param name="stringData"></param>
        private static void ParseStrings(FFXiTypes.ItemWrapper wrapper, byte[] stringData)
        {
            var stringCount  = BitConverter.ToUInt32(stringData, 0);
            var stringOffset = BitConverter.ToUInt32(stringData, 4);

            if (stringCount > 9 || stringCount <= 0)
            {
                return;
            }

            var length = GetStringLength(stringData, stringOffset + 28);

            if (length < 1)
            {
                return;
            }

            // Read the item name..
            wrapper.Name = GetString(stringData, stringOffset + 28);

            switch (stringCount)
            {
            case 2:     // Japense
            {
                // Read the description..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 1));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.Description = GetString(stringData, stringOffset + 28);
                }

                break;
            }

            case 5:     // English
            {
                // Read the log name (singular)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 2));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNameSingular = GetString(stringData, stringOffset + 28);
                }

                // Read the log name (plural)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 3));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNamePlural = GetString(stringData, stringOffset + 28);
                }

                // Read the description..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 4));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.Description = GetString(stringData, stringOffset + 28);
                }

                break;
            }

            case 6:     // French
            {
                // Read the log name (singular)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 3));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNameSingular = GetString(stringData, stringOffset + 28);
                }

                // Read the log name (plural)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 4));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNamePlural = GetString(stringData, stringOffset + 28);
                }

                // Read the description..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 5));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.Description = GetString(stringData, stringOffset + 28);
                }

                break;
            }

            case 9:     // German
            {
                // Read the log name (singular)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 4));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNameSingular = GetString(stringData, stringOffset + 28);
                }

                // Read the log name (plural)..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 7));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.LogNamePlural = GetString(stringData, stringOffset + 28);
                }

                // Read the description..
                stringOffset = BitConverter.ToUInt32(stringData, 4 + (8 * 8));
                length       = GetStringLength(stringData, stringOffset + 28);
                if (length > 2)
                {
                    wrapper.Description = GetString(stringData, stringOffset + 28);
                }

                break;
            }

            default:
                return;
            }
        }