コード例 #1
0
ファイル: ParseResources.cs プロジェクト: mpermana/mitaru
            /// <summary>
            /// Generic loader for loading Item names
            /// </summary>
            /// <param name="filetype">FileTypes enum to indicate which file to load.</param>
            /// <param name="language">Preferred language as an Languages enum.</param>
            private void LoadItemFile(FileTypes filetype, Languages language)
            {
                String Path = GetFilePath(filetype, language);
                if (!String.IsNullOrEmpty(Path))
                {
                    FileInfo fi = new FileInfo(Path);
                    Boolean file_error = false;
                    if (!fi.Exists)
                        return;
                    if ((fi.Length % 0xC00) != 0)
                        return;

                    int items_in_file = (int)(fi.Length / 0xC00);
                    BinaryReader iteminfo = null;
                    try
                    {
                        iteminfo = new BinaryReader(File.Open(Path, FileMode.Open, FileAccess.Read));
                    }
                    catch (IOException e)
                    {
                        // this line isn't necessary, but it avoids the annoying (e is assigned but never used)
                        Path = e.Message;
                        file_error = true;
                    }
                    if (file_error == true)
                        return;  // Attempt a Sanity Check
                    for (int item_counter = 0; item_counter < items_in_file; item_counter++)
                    {
                        iteminfo.BaseStream.Position = 0xC00 * item_counter;
                        byte[] readbytes = DecodeBlock(iteminfo.ReadBytes(0x200), 5);
                        BinaryReader data = new BinaryReader(new MemoryStream(readbytes, false));
                        itemFormat itemObjects = new itemFormat(data);
                        // INSERT ITEM CHECK DATA HERE
                        data.Close();
                        //if ((itemObjects.itemHeader.ID < 0xFFFF) && (itemObjects.itemHeader.ID > 0x6FFF))
                        //    continue;
                        if (String.IsNullOrEmpty(itemObjects.text) || String.IsNullOrEmpty(itemObjects.text.Trim('.')))
                            continue;
                        if ((itemObjects.itemHeader.Flags & (ushort)ItemFlags.Nothing) == (ushort)ItemFlags.Nothing)
                            continue;
                        if (itemObjects.itemHeader.ID == 0x00)
                            continue;

                        // 0x0100 0x0040 0x1000
                        /* UINT32 ID
                         * UINT16 Flags
                         * UINT16 Stack Size
                         * UINT16 Type
                         * UINT16 ResourceID
                         * UINT16 ValidTargets
                         * 14 Bytes - Common Header Size
                         */

                        if (String.IsNullOrEmpty(itemObjects.text))
                            continue;
                        else if (Char.IsSymbol(itemObjects.text[0]))
                            continue;
                        ResourcesCache.Add((int)itemObjects.itemHeader.ID, itemObjects.text);
                        // or itemObjects.logtext

                    }
                    iteminfo.Close();
                }
            }
コード例 #2
0
ファイル: ATPhraseLoader.cs プロジェクト: Mykezero/ffximev2
        /// <summary>
        /// Generic loader for loading Item names into a permanent array for use by GetPhrases().
        /// </summary>
        /// <param name="file_num">File number to load (OBJ, ITEMS, PUPP, ARMR, WEPN, GIL)</param>
        private void LoadItemFile(int file_num, int language)
        {
            if (_fileNumberArrayList == null)
                return;
            else if ((file_num < 0) || (file_num >= _fileNumberArrayList.Length))
                return;

            FileInfo fi = new FileInfo(_fileNumberArrayList[file_num]);
            Boolean file_error = false;

            if (!fi.Exists) return;
            if ((fi.Length % 0xC00) != 0) return;

            int items_in_file = (int)(fi.Length / 0xC00);
            BinaryReader iteminfo = null;
            try
            {
                iteminfo = new BinaryReader(File.Open(_fileNumberArrayList[file_num], FileMode.Open, FileAccess.Read));
            }
            catch (IOException e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message + "\r\nSome Auto-Translate phrases may not be available.");
                file_error = true;
            }
            if (file_error == true) return;  // Attempt a Sanity Check
            for (int item_counter = 0; item_counter < items_in_file; item_counter++)
            {
                SplashScreen.SetStatus(String.Empty, 7); // 49 * 10 = 490/10000 = 5%
                iteminfo.BaseStream.Position = 0xC00 * item_counter;
                byte[] readbytes = DecodeBlock(iteminfo.ReadBytes(0x200), 5);
                BinaryReader data = new BinaryReader(new MemoryStream(readbytes, false));
                itemFormat itemObjects = new itemFormat(data, FFXIConvert);
                // INSERT ITEM CHECK DATA HERE
                data.Close();
                //if ((itemObjects.itemHeader.ID < 0xFFFF) && (itemObjects.itemHeader.ID > 0x6FFF))
                //    continue;
                //else if (itemObjects.text == String.Empty)
                //    continue;
                //else
                if ((itemObjects.itemHeader.Flags & (ushort)ItemFlags.Nothing) == (ushort)ItemFlags.Nothing)
                    continue;
                else if (itemObjects.itemHeader.ID == 0x00)
                    continue;

                // 0x0100 0x0040 0x1000
                /* UINT32 ID
                 * UINT16 Flags
                 * UINT16 Stack Size
                 * UINT16 Type
                 * UINT16 ResourceID
                 * UINT16 ValidTargets
                 * 14 Bytes - Common Header Size
                 */
                int atp = 0;

                if (_ATKeys_Items == null)
                    _ATKeys_Items = new FFXIATPhrase[1];
                else Array.Resize(ref _ATKeys_Items, (int)(_ATKeys_Items.Length + 1));

                atp = _ATKeys_Items.Length - 1;

                _ATKeys_Items[atp] = new FFXIATPhrase();
                _ATKeys_Items[atp].StringResource = 0x07;
                _ATKeys_Items[atp].Language = (byte)language;
                _ATKeys_Items[atp].GroupID = (byte)((itemObjects.itemHeader.ID & 0xFF00) >> 8);
                _ATKeys_Items[atp].MessageID = (byte)(itemObjects.itemHeader.ID & 0x00FF);
                _ATKeys_Items[atp].Flags = itemObjects.itemHeader.Flags;
                _ATKeys_Items[atp].ActualType = itemObjects.itemHeader.Type;
                if ((itemObjects.itemHeader.ID >= 0x0000) && (itemObjects.itemHeader.ID <= 0x0FFF))
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.ITEMS;
                else if ((itemObjects.itemHeader.ID >= 0x1000) && (itemObjects.itemHeader.ID <= 0x1FFF))
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.OBJS;
                else if ((itemObjects.itemHeader.ID >= 0x2000) && (itemObjects.itemHeader.ID <= 0x2FFF))
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.PUPP;
                else if ((itemObjects.itemHeader.ID >= 0x2C00) && (itemObjects.itemHeader.ID <= 0x3FFF))
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.ARMR;
                else if ((itemObjects.itemHeader.ID >= 0x4000) && (itemObjects.itemHeader.ID <= 0x6FFF))
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.WPNS;
                else if (itemObjects.itemHeader.ID == 0xFFFF) // Gil
                    _ATKeys_Items[atp].BaseType = (ushort)FFXIATPhraseLoader.ffxiFileTypes.GIL;

                if (itemObjects.itemHeader.Type != 0)  // if it's nothing, categorize at as something else
                {
                    _ATKeys_Items[atp].Type = itemObjects.itemHeader.Type;
                }
                else
                {
                    if ((itemObjects.itemHeader.ID <= 0x2FFF) && (itemObjects.itemHeader.ID >= 0x2000))
                        _ATKeys_Items[atp].Type = 13; // Puppet Items
                    else if ((itemObjects.itemHeader.ID <= 0x3FFF) && (itemObjects.itemHeader.ID >= 0x3000))
                        _ATKeys_Items[atp].Type = 5; // Armor Items
                    else if ((itemObjects.itemHeader.ID <= 0x6FFF) && (itemObjects.itemHeader.ID >= 0x4000))
                        _ATKeys_Items[atp].Type = 4; // Weapon Items
                }
                _ATKeys_Items[atp].value = itemObjects.text;
                _ATKeys_Items[atp].shortvalue = itemObjects.logtext; // misleading i know
            }
            iteminfo.Close();
        }