Esempio n. 1
0
 // Token: 0x0600010F RID: 271 RVA: 0x0000B85C File Offset: 0x00009A5C
 public static void WriteMenuFile(string filepath, ACCMenu menu)
 {
     try
     {
         bool flag;
         using (BinaryReader binaryReader = new BinaryReader(FileUtilEx.Instance.GetStream(menu.srcfilename, out flag), Encoding.UTF8))
         {
             string text = binaryReader.ReadString();
             if (flag || binaryReader.BaseStream.Position > 0L)
             {
                 if (text == FileConst.HEAD_MENU)
                 {
                     ACCMenu.WriteMenuFile(binaryReader, text, filepath, menu);
                     return;
                 }
                 StringBuilder stringBuilder = ACCMenu.headerError(text, menu.srcfilename);
                 throw new ACCException(stringBuilder.ToString());
             }
         }
         using (BinaryReader binaryReader2 = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(menu.srcfilename), false), Encoding.UTF8))
         {
             string text2 = binaryReader2.ReadString();
             if (text2 == FileConst.HEAD_MATE)
             {
                 ACCMenu.WriteMenuFile(binaryReader2, text2, filepath, menu);
             }
             StringBuilder stringBuilder2 = ACCMenu.headerError(text2, menu.srcfilename);
             throw new ACCException(stringBuilder2.ToString());
         }
     }
     catch (ACCException)
     {
         throw;
     }
     catch (Exception ex)
     {
         string text3 = "menuファイルの作成に失敗しました。 file=" + filepath;
         LogUtil.Error(new object[]
         {
             text3,
             ex
         });
         throw new ACCException(text3, ex);
     }
 }
Esempio n. 2
0
        public static ACCMenu Load(string filename)
        {
            var menu = new ACCMenu();

            LogUtil.Debug("loading menu file", filename);
            menu.srcfilename = filename;
            menu.editfile    = Path.GetFileNameWithoutExtension(filename);

            try {
                bool onBuffer;
                using (var reader = new BinaryReader(FileUtilEx.Instance.GetStream(menu.srcfilename, out onBuffer), Encoding.UTF8)) {
                    var header = reader.ReadString();
                    if (onBuffer || reader.BaseStream.Position > 0)
                    {
                        if (header == FileConst.HEAD_MENU)
                        {
                            Load(reader, menu.srcfilename, menu);
                            LogUtil.Debug("menu loaded");
                            return(menu);
                        }
                        headerError(header, filename);
                        return(null);
                    }
                }

                // arc内のファイルがロードできない場合の回避策: Sybaris 0410向け対策. 一括読み込み
                using (var reader = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(menu.srcfilename), false), Encoding.UTF8)) {
                    var header = reader.ReadString(); // hader
                    if (header == FileConst.HEAD_MENU)
                    {
                        Load(reader, menu.srcfilename, menu);
                        LogUtil.Debug("menu loaded");
                        return(menu);
                    }
                    headerError(header, filename);
                    return(null);
                }
            } catch (Exception e) {
                LogUtil.Error("アイテムメニューファイルが読み込めませんでした。", filename, e);
                return(null);
            }
        }
Esempio n. 3
0
        public static void WriteMenuFile(string filepath, ACCMenu menu)
        {
            try {
                bool onBuffer;
                using (var reader = new BinaryReader(FileUtilEx.Instance.GetStream(menu.srcfilename, out onBuffer), Encoding.UTF8)) {
                    var header = reader.ReadString();

                    if (onBuffer || reader.BaseStream.Position > 0)
                    {
                        if (header == FileConst.HEAD_MENU)
                        {
                            WriteMenuFile(reader, header, filepath, menu);
                            return;
                        }
                        var msg = headerError(header, menu.srcfilename);
                        throw new ACCException(msg.ToString());
                    }
                }
                // arc内のファイルがロードできない場合の回避策: Sybaris 0410向け対策. 一括読み込み
                using (var reader = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(menu.srcfilename), false), Encoding.UTF8)) {
                    var header = reader.ReadString(); // hader
                    if (header == FileConst.HEAD_MATE)
                    {
                        WriteMenuFile(reader, header, filepath, menu);
                    }
                    var msg = headerError(header, menu.srcfilename);
                    throw new ACCException(msg.ToString());
                }
            } catch (ACCException) {
                throw;
            } catch (Exception e) {
                var msg = "menuファイルの作成に失敗しました。 file=" + filepath;
                LogUtil.Error(msg, e);
                throw new ACCException(msg, e);
            }
        }
 public Dictionary<TBody.SlotID, Item> Load(string filename) {
     trgtMenu = ACCMenu.Load(filename);
     nameInterlocked = false;
     if (trgtMenu != null) {
         showDialog = true;
         return trgtMenu.itemSlots;
     } else {
         // エラー確認用処理
         AFileBase aFileBase = global::GameUty.FileOpen(filename);
         if (aFileBase.IsValid()) {
             //const int BUFFER_SIZE = 8192;
             
             string dir = OutputUtil.Instance.GetExportDirectory();
             string outfile = Path.Combine(dir, filename);
             LogUtil.Error("MENUファイルを出力します。", outfile);
             using ( var writer = new BinaryWriter(File.OpenWrite(outfile)) ) {
                 writer.Write(aFileBase.ReadAll());
             }
         }
     }
     return null;
 }
        public bool SaveFiles(ACCMenu menu) {
            var outDir = fileUtil.GetACCDirectory(trgtMenu.editfile);
            if (!Directory.Exists(outDir)) Directory.CreateDirectory(outDir);

            LogUtil.Debug("output path:", outDir);
            string filepath = Path.Combine(outDir, menu.EditFileName());

            // menu出力
            ACCMenu.WriteMenuFile(filepath, menu);

            var writeFiles = new HashSet<string>();

            // filterがあれば、適用しアイコンを変更
            string iconfilepath = Path.Combine(outDir, menu.EditIconFileName());
            writeFiles.Add(iconfilepath);
            string icontxt = settings.txtPrefixTex + iconfilepath;
            fileUtil.CopyTex(menu.icon, iconfilepath, icontxt, null);
            LogUtil.Debug("tex file:", iconfilepath);

            // model 出力 (additem)
            foreach (var pair in menu.itemFiles) {
                string infile = pair.Key;
                Item item = pair.Value;
                if (item.needUpdate) {
                    string filename = item.EditFileName();
                    if (HasAlreadyWritten(writeFiles, filename)) continue;

                    string modelfilepath = Path.Combine(outDir, filename);
    
                    // modelファイルのスロットのマテリアル/テクスチャ情報を抽出
                    SlotMaterials slotMat = menu.slotMaterials[item.slot];
                    // onlyModelでない場合はshader変更のみとしておく
                    // material slotとmatNoで特定
                    // texture  propName
                    // 必要に応じてtex出力
                    fileUtil.WriteModelFile(infile, modelfilepath, slotMat);
                    LogUtil.Debug("model file:", modelfilepath);
                }
            }

            // mate出力
            foreach (var tm in menu.slotMaterials.Values) {
                foreach(var trgtMat in tm.materials) {
                    // マテリアル変更が指定された場合 => TODO 切り替え可能とする場合:menuにマテリアル変更を追加する必要あり
                    if (!trgtMat.onlyModel) {
                        var filename = trgtMat.EditFileName();
                        if (HasAlreadyWritten(writeFiles, filename)) continue;
    
                        string matefilepath = Path.Combine(outDir, filename);
                        fileUtil.WriteMateFile(trgtMat.filename, matefilepath, trgtMat);
                        LogUtil.Debug("mate file:", matefilepath);

                        if (trgtMat.needPmatChange) {
                            var name = Path.GetFileNameWithoutExtension(filename);
                            var pmatfile = name + FileConst.EXT_PMAT;
                            string pmatfilepath = Path.Combine(outDir, pmatfile);
                            fileUtil.WritePmat(pmatfilepath, trgtMat.editname, 
                                              trgtMat.RenderQueue(), trgtMat.ShaderName());
                            LogUtil.Debug("pmat file:", pmatfilepath);
                        }
                    }

                    // テクスチャ出力
                    foreach (var trgtTex in trgtMat.texDic.Values) {
                        if (!trgtTex.needOutput) continue;

                        var tex2d = trgtTex.tex as Texture2D;
                        if (tex2d == null) {
                            LogUtil.Debug("tex is not Texture2D", trgtTex.editname);
                            continue;
                            // TODO RenderTexの場合は無理やりTexture2Dに変換も可能だが…
                        }
                        var texfilename = trgtTex.EditFileName();
                        if (HasAlreadyWritten(writeFiles, texfilename)) continue;
                            
                        string texfilepath = Path.Combine(outDir, texfilename);
                        fileUtil.WriteTexFile(texfilepath, trgtTex.EditTxtPath(), tex2d.EncodeToPNG());
                        LogUtil.Debug("tex file:", texfilepath);
                    }
                }
            }

            // めくれ、ずらし用menuファイルの出力
            foreach (var res in menu.resFiles.Values) {

                // 各モデルファイルで出力が必要となるファイルについて、
                // 元が同名のファイルを参照している場合でも関係なく出力
                // 設定が違う場合もある上、editnameはすべて別名になるはず
                var filename = res.EditFileName();
                if (HasAlreadyWritten(writeFiles, filename)) continue;


                string menufilepath = Path.Combine(outDir, filename);
                var toCreateFiles = fileUtil.WriteMenuFile(res.filename, menufilepath, res);
                LogUtil.Debug("menu file:", menufilepath);

                foreach (var toCreate in toCreateFiles) {
                    // modelを出力
                    if (toCreate.item != null) {
                        var filename0 = toCreate.replaced;
                        if (HasAlreadyWritten(writeFiles, filename0)) continue;

                        string modelfilepath = Path.Combine(outDir, filename0);
                        SlotMaterials slotMat = menu.slotMaterials[toCreate.item.slot];
                        // TODO リプレースが想定される情報であるかチェック 
                        fileUtil.WriteModelFile(toCreate.source, modelfilepath, slotMat);
                        
                    // .mate出力
                    } else if (toCreate.material != null) {
                        TargetMaterial trgtMat = toCreate.material;
                        var filename0 = toCreate.replaced;
                        if (HasAlreadyWritten(writeFiles, filename0)) continue;

                        // mate出力==別のtexファイルを出力する可能性有り
                        string matefilepath = Path.Combine(outDir, filename0);
                        fileUtil.WriteMateFile(toCreate.source, matefilepath, trgtMat);
                        // マテリアル名は上位と同じにして、同一pmatを使用する
                        //if (trgtMat.needPmatChange) {
                        //    var name = Path.GetFileNameWithoutExtension(filename);
                        //    var pmatfile = name + FileConst.EXT_PMAT;
                        //    string pmatfilepath = Path.Combine(outDir, pmatfile);
                        //    outUtil.WritePmat(pmatfilepath, trgtMat.editname, 
                        //                      trgtMat.RenderQueue(), trgtMat.ShaderName());
                        //    LogUtil.DebugLog("pmatファイルを出力しました。", pmatfilepath);
                        //}

                        foreach (var tex in trgtMat.texDic.Values) {
                            if (!tex.needOutput) continue;

                            var tex2d = tex.tex as Texture2D;
                            if (tex2d == null) {
                                LogUtil.Debug("tex is not 2D", tex.editname);
                                continue;
                            }
                            var texfilename = tex.EditFileName();
                            if (HasAlreadyWritten(writeFiles, texfilename)) continue;

                            // テクスチャをロードし、フィルタを適用
                            Texture2D loadedTex   = null;
                            Texture2D filteredTex = null;
                            if (!tex.fileChanged) { // texファイル変更済の場合はロードされたデータ済みから出力(そのままtex2dを使用)
                                loadedTex = new Texture2D(1, 1, TextureFormat.RGBA32, false);
                                string texfile = tex.workfilename + FileConst.EXT_TEXTURE;
                                if (!fileUtil.Exists(texfile)) {
                                    LogUtil.LogF("リソース参照で使用されているtexファイル({0})が見つかりません。texファイルを出力できません。", texfile);
                                    continue;
                                }
                                loadedTex.LoadImage( ImportCM.LoadTexture(texfile) );
                                tex2d = loadedTex;
                            }

                            if (tex.colorChanged) {
                                filteredTex = ACCTexturesView.Filter(tex2d, tex.filter);
                                tex2d = filteredTex;
                            }
                            string texfilepath = Path.Combine(outDir, texfilename);
                            fileUtil.WriteTexFile(texfilepath, tex.EditTxtPath(), tex2d.EncodeToPNG());
                            LogUtil.Debug("tex file:", texfilepath);

                            if (loadedTex != null)   UnityEngine.Object.DestroyImmediate(loadedTex);
                            if (filteredTex != null) UnityEngine.Object.DestroyImmediate(filteredTex);
                        }
                    }
                }
            }
            return true;
        }
        // TODO ファイル名となりうるフィールドの文字列検証(入力フィールドの変更時に行う)
        //private bool isSavable;
        // private void CheckFileName(string filename) {
        //     isSavable &= filename.IndexOfAny(INVALID_FILENAMECHARS) < 0;
        //}

        // ファイルの重複確認
        private bool IsWritable(ACCMenu menu, bool ignoreExists) {
            if (menu.editfile.Length == 0) return false;

            bool registed = false;;

            string outDir = fileUtil.GetACCDirectory();
            outDir = Path.Combine(outDir, trgtMenu.editfile);
            if (!ignoreExists && Directory.Exists(outDir)) {
                LogUtil.Debug("output directory already exist :", outDir);
                menu.editfileExist = true;
                return false;
            }
            
            bool hasDuplicate = false;
            // 別々の情報ファイルが重複しないか + 登録済みファイルが存在するかをチェック 
            var writeFiles = new HashSet<string> ();

            var menufile = menu.EditFileName();
            writeFiles.Add(menufile);
            menu.editfileExist = false;
            if (fileUtil.Exists(menufile)) {
                LogUtil.Debug("already exist:", menufile);
                registed = true;
                menu.editfileExist = true;
            }

            // icon
            menu.editiconExist = false;
            string iconfilepath = menu.EditIconFileName();
            if (fileUtil.Exists(iconfilepath)) {
                LogUtil.Debug("already exist:", iconfilepath);
                registed = true;
                menu.editiconExist = true;
            }
            writeFiles.Add(iconfilepath);

            // modelファイル
            foreach (var pair in menu.itemFiles) {
                Item item = pair.Value;
                if (item.needUpdate) {
                    item.editnameExist = false; // clear
                    string filename = item.EditFileName();
                    if (HasAlreadyWritten(writeFiles, filename)) {
                        hasDuplicate = true;
                        item.editnameExist = true; // フラグを分けるべきか?
                        continue;
                    }
                    if (fileUtil.Exists(filename)) {
                        LogUtil.Debug("already exist:", filename);
                        registed = true;
                        item.editnameExist = true;
                    }
                }
            }
            // mateファイル
            foreach (var tm in menu.slotMaterials.Values) {
                foreach(var trgtMat in tm.materials) {
                    // modelファイルのみの場合は好み ⇒変更する場合はmenuにマテリアル変更を追加する必要あり
                    if (trgtMat.onlyModel) continue;

                    trgtMat.editfileExist = false;
                    var filename = trgtMat.EditFileName();
                    if (HasAlreadyWritten(writeFiles, filename)) {
                        hasDuplicate = true;
                        trgtMat.editfileExist = true; // フラグを分けるべきか?
                        continue;                        
                    }
                    if (fileUtil.Exists(filename)) {
                        LogUtil.Debug("already exist:", filename);
                        registed = true;
                        trgtMat.editfileExist = true;
                    }
                    // pmat
                    if (trgtMat.needPmatChange) {
                        var name = Path.GetFileNameWithoutExtension(filename);
                        var pmatfile = name + FileConst.EXT_PMAT;
                        if (HasAlreadyWritten(writeFiles, pmatfile)) {
                            hasDuplicate = true;
                            trgtMat.editfileExist = true; // フラグを分けるべきか?
                            continue;                        
                        }
                        if (fileUtil.Exists(pmatfile)) {
                            LogUtil.Debug("already exist:", pmatfile);
                            registed = true;
                            trgtMat.editfileExist = true;
                        }
                    }

                    // texファイル
                    foreach (var trgtTex in trgtMat.texDic.Values) {
                        if (!trgtTex.needOutput) continue;
                        trgtTex.editnameExist = false;

                        var texfilename = trgtTex.EditFileName();
                        if (HasAlreadyWritten(writeFiles, texfilename)) {
                            hasDuplicate = true;
                            trgtTex.editnameExist = true; // フラグを分けるべきか?
                            continue;                        
                        }
                        if (fileUtil.Exists(texfilename)) {
                            LogUtil.Debug("already exist:", texfilename);
                            registed = true;
                            trgtTex.editnameExist = true;
                        }
                    }
                }
            }

            // めくれ、ずらし用menuファイルの出力
            foreach (var res in menu.resFiles.Values) {

                res.editfileExist = false;
                var filename = res.EditFileName();
                if (HasAlreadyWritten(writeFiles, filename)) {
                    hasDuplicate = true;
                    res.editfileExist = true; // フラグを分けるべきか?
                    continue;                        
                }
                if (fileUtil.Exists(filename)) {
                    LogUtil.Debug("already exist:", filename);
                    registed = true;
                    res.editfileExist = true;
                }
            }
            // 出力ファイルの重複は無視できない
            if (hasDuplicate) return false;
            return ignoreExists || !registed;
        }
Esempio n. 7
0
        private static void Load(BinaryReader reader, string filename, ACCMenu menu)
        {
            menu.version = reader.ReadInt32();
            menu.txtpath = reader.ReadString();
            // 未使用
            var headerName     = reader.ReadString();
            var headerCategory = reader.ReadString();
            var headerSetumei  = reader.ReadString().Replace(FileConst.RET, "\n");

            var num2 = reader.ReadInt32();

            while (true)
            {
                var size = (int)reader.ReadByte();
                if (size == 0)
                {
                    break;
                }

                var key   = reader.ReadString();
                var param = new string[size - 1];
                for (var i = 0; i < size - 1; i++)
                {
                    param[i] = reader.ReadString();
                }
                switch (key)
                {
                case "category":
                    menu.category = param[0];
                    break;

                //                            case "メニューフォルダ":
                //                                menu.menuFolder = param[0];
                //                                break;
                //                            case "catno":
                //                                menu.catno = param[0];
                //                                break;
                case "属性追加":
                    break;

                case "priority":
                    menu.priority = param[0];
                    break;

                case "name":
                    menu.name = param[0];
                    break;

                case "setumei":
                    menu.desc = param[0].Replace(FileConst.RET, "\n");
                    break;

                case "icon":
                case "icons":
                    menu.icon     = param[0];
                    menu.editicon = Path.GetFileNameWithoutExtension(menu.icon);
                    break;

                case "アイテムパラメータ":
                    if (param.Length == 3)
                    {
                        menu.itemParam = param;
                        //Array.Copy(param, 0, itemParam, 0, param.Length);
                    }
                    break;

                case "アイテム":
                    menu.items.Add(Path.GetFileNameWithoutExtension(param[0]));
                    break;

                case "additem":
                    if (param.Length >= 1)
                    {
                        var item = new Item(param);
                        if (!menu.itemFiles.TryGetValue(item.filename, out item.link))
                        {
                            menu.itemFiles[item.filename] = item;
                        }
                        menu.addItems.Add(item);
                        try {
                            if (item.slot != null)
                            {
                                var slotId = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), item.slot, true);
                                menu.itemSlots[slotId] = item;
                            }
                        } catch (Exception e) {
                            LogUtil.Debug("failed to parse additem slot", item.slot, e);
                        }
                    }
                    break;

                case "maskitem":
                    if (param.Length >= 1)
                    {
                        menu.maskItems.Add(param[0]);
                    }
                    break;

                case "delitem":
                    var slot0 = menu.category;
                    if (param.Length >= 1)
                    {
                        slot0 = param[0];
                    }
                    menu.delItems.Add(slot0);
                    break;

                case "マテリアル変更":
                    var slot  = param[0];
                    var matNo = int.Parse(param[1]);
                    var file  = param[2];
                    menu.AddSlotMaterial(new TargetMaterial(slot, matNo, file));

                    break;

                case "node消去":
                    menu.delNodes.Add(param[0]);
                    break;

                case "node表示":
                    menu.showNodes.Add(param[0]);
                    break;

                case "パーツnode消去":
                    menu.delPartsNodes.Add(param);
                    break;

                case "パーツnode表示":
                    menu.showPartsNodes.Add(param);
                    break;

                case "リソース参照":
                    var resRef1 = new ResourceRef(param[0], param[1]);
                    resRef1.menu = menu;
                    menu.resources.Add(resRef1);
                    if (!menu.resFiles.TryGetValue(resRef1.filename, out resRef1.link))
                    {
                        menu.resFiles[resRef1.filename] = resRef1;
                    }
                    break;

                case "半脱ぎ":
                    var resRef2 = new ResourceRef(key, param[0]);
                    resRef2.menu = menu;
                    menu.resources.Add(resRef2);
                    if (!menu.resFiles.TryGetValue(resRef2.filename, out resRef2.link))
                    {
                        menu.resFiles[resRef2.filename] = resRef2;
                    }
                    break;

                case "color_set":
                    break;
                    //case "アタッチポイントの設定":
                    //    break;
                    //case "tex":
                    //case "テクスチャ変更":
                    //    break;
                    //case "テクスチャ合成":
                    //    break;
                    //case "unsetitem":
                    //    break;
                    //case "commenttype":
                    //    break;
                    //case "color_set"
                    // break;
                }
            }
        }
Esempio n. 8
0
        private static void WriteMenuFile(BinaryReader reader, string header, string filepath, ACCMenu menu)
        {
            using (var dataStream = new MemoryStream())
                using (var dataWriter = new BinaryWriter(dataStream))
                    using (var writer = new BinaryWriter(File.OpenWrite(filepath))) {
                        writer.Write(header);
                        writer.Write(reader.ReadInt32());

                        // txtpath
                        reader.ReadString();
                        var txtpath = menu.txtpath;
                        if (!txtpath.EndsWith(FileConst.EXT_TXT, StringComparison.OrdinalIgnoreCase))
                        {
                            txtpath += FileConst.EXT_TXT;
                        }
                        writer.Write(txtpath);
                        // name, category, 説明
                        reader.ReadString();
                        reader.ReadString();
                        reader.ReadString();
                        writer.Write(menu.name);
                        writer.Write(menu.category);
                        var desc = menu.desc.Replace("\n", FileConst.RET);
                        writer.Write(desc);

                        // readBytes
                        var num = reader.ReadInt32();

                        var priorityWritten = false;
                        while (true)
                        {
                            var size = (int)reader.ReadByte();
                            if (size == 0)
                            {
                                dataWriter.Write((byte)0);
                                break;
                            }

                            var key   = reader.ReadString();
                            var param = new string[size - 1];
                            for (var i = 0; i < size - 1; i++)
                            {
                                param[i] = reader.ReadString();
                            }
                            // パラメータ数が変更される場合があれば…
                            // string[] writeParams = null;

                            // 特定のパラメータを置き換え
                            switch (key)
                            {
                            case "priority":
                                param[0]        = menu.priority;
                                priorityWritten = true;
                                break;

                            case "name":
                                param[0] = menu.name;
                                break;

                            case "setumei":
                                param[0] = desc;
                                break;

                            case "icon":
                            case "icons":
                                param[0] = menu.EditIconFileName();
                                break;

                            case "additem":
                                var modelfile = param[0];
                                param[0] = menu.itemFiles[modelfile].EditFileName();
                                LogUtil.Debug("modelfile replaces ", modelfile, "=>", param[0]);
                                break;

                            case "マテリアル変更":
                                var slot  = param[0];
                                var matNo = int.Parse(param[1]);
                                var tm    = menu.GetMaterial(slot, matNo);
                                param[2] = tm.EditFileName();
                                break;

                            case "リソース参照":
                                param[1] = menu.resFiles[param[1]].EditFileName();
                                break;

                            case "半脱ぎ":
                                param[0] = menu.resFiles[param[0]].EditFileName();
                                break;
                            }
                            // if (writeParams == null) writeParams = param;
                            dataWriter.Write((byte)(param.Length + 1));
                            dataWriter.Write(key);
                            foreach (var wparam in param)
                            {
                                dataWriter.Write(wparam);
                            }
                        }

                        if (!priorityWritten)
                        {
                            dataWriter.Write((byte)2);
                            dataWriter.Write("priority");
                            dataWriter.Write(menu.priority);
                        }
                        writer.Write((int)dataStream.Length);
                        writer.Write(dataStream.ToArray());
                    }
        }
Esempio n. 9
0
        // Token: 0x06000113 RID: 275 RVA: 0x0000BF84 File Offset: 0x0000A184
        private static void Load(BinaryReader reader, string filename, ACCMenu menu)
        {
            menu.version = reader.ReadInt32();
            menu.txtpath = reader.ReadString();
            reader.ReadString();
            reader.ReadString();
            reader.ReadString().Replace(FileConst.RET, "\n");
            reader.ReadInt32();
            for (;;)
            {
                int num = (int)reader.ReadByte();
                if (num == 0)
                {
                    break;
                }
                string   text  = reader.ReadString();
                string[] array = new string[num - 1];

                for (int i = 0; i < num - 1; i++)
                {
                    array[i] = reader.ReadString();
                }
                // 뭔 스위치가 이따위로 디컴파일 되냐;;


                switch (text)
                {
                case "category":
                    menu.category = array[0];
                    continue;

                case "属性追加":
                case "color_set":
                    continue;

                case "priority":
                    menu.priority = array[0];
                    continue;

                case "name":
                    menu.name = array[0];
                    continue;

                case "setumei":
                    menu.desc = array[0].Replace(FileConst.RET, "\n");
                    continue;

                case "icon":
                case "icons":
                    menu.icon     = array[0];
                    menu.editicon = Path.GetFileNameWithoutExtension(menu.icon);
                    continue;

                case "アイテムパラメータ":
                    if (array.Length == 3)
                    {
                        menu.itemParam = array;
                        continue;
                    }
                    continue;

                case "アイテム":
                    menu.items.Add(Path.GetFileNameWithoutExtension(array[0]));
                    continue;

                case "additem":
                {
                    if (array.Length < 1)
                    {
                        continue;
                    }
                    Item item = new Item(array);
                    if (!menu.itemFiles.TryGetValue(item.filename, out item.link))
                    {
                        menu.itemFiles[item.filename] = item;
                    }
                    menu.addItems.Add(item);
                    try
                    {
                        if (item.slot != null)
                        {
                            TBody.SlotID key2 = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), item.slot, true);
                            menu.itemSlots[key2] = item;
                        }
                        continue;
                    }
                    catch (Exception ex)
                    {
                        LogUtil.Debug(new object[]
                            {
                                "failed to parse additem slot",
                                item.slot,
                                ex
                            });
                        continue;
                    }
                    break;
                }

                case "maskitem":
                    break;

                case "delitem":
                {
                    string item2 = menu.category;
                    if (array.Length >= 1)
                    {
                        item2 = array[0];
                    }
                    menu.delItems.Add(item2);
                    continue;
                }

                case "マテリアル変更":
                {
                    string slot      = array[0];
                    int    matNo     = int.Parse(array[1]);
                    string filename2 = array[2];
                    menu.AddSlotMaterial(new TargetMaterial(slot, matNo, filename2));
                    continue;
                }

                case "node消去":
                    menu.delNodes.Add(array[0]);
                    continue;

                case "node表示":
                    menu.showNodes.Add(array[0]);
                    continue;

                case "パーツnode消去":
                    menu.delPartsNodes.Add(array);
                    continue;

                case "パーツnode表示":
                    menu.showPartsNodes.Add(array);
                    continue;

                case "リソース参照":
                {
                    ResourceRef resourceRef = new ResourceRef(array[0], array[1]);
                    resourceRef.menu = menu;
                    menu.resources.Add(resourceRef);
                    if (!menu.resFiles.TryGetValue(resourceRef.filename, out resourceRef.link))
                    {
                        menu.resFiles[resourceRef.filename] = resourceRef;
                        continue;
                    }
                    continue;
                }

                case "半脱ぎ":
                {
                    ResourceRef resourceRef2 = new ResourceRef(text, array[0]);
                    resourceRef2.menu = menu;
                    menu.resources.Add(resourceRef2);
                    if (!menu.resFiles.TryGetValue(resourceRef2.filename, out resourceRef2.link))
                    {
                        menu.resFiles[resourceRef2.filename] = resourceRef2;
                        continue;
                    }
                    continue;
                }

                default:
                    continue;
                }
                if (array.Length >= 1)
                {
                    menu.maskItems.Add(array[0]);
                }
            }
        }
Esempio n. 10
0
        // Token: 0x06000111 RID: 273 RVA: 0x0000BD60 File Offset: 0x00009F60
        public static ACCMenu Load(string filename)
        {
            ACCMenu accmenu = new ACCMenu();

            LogUtil.Debug(new object[]
            {
                "loading menu file",
                filename
            });
            accmenu.srcfilename = filename;
            accmenu.editfile    = Path.GetFileNameWithoutExtension(filename);
            ACCMenu result;

            try
            {
                bool flag;
                using (BinaryReader binaryReader = new BinaryReader(FileUtilEx.Instance.GetStream(accmenu.srcfilename, out flag), Encoding.UTF8))
                {
                    string text = binaryReader.ReadString();
                    if (flag || binaryReader.BaseStream.Position > 0L)
                    {
                        if (text == FileConst.HEAD_MENU)
                        {
                            ACCMenu.Load(binaryReader, accmenu.srcfilename, accmenu);
                            LogUtil.Debug(new object[]
                            {
                                "menu loaded"
                            });
                            return(accmenu);
                        }
                        ACCMenu.headerError(text, filename);
                        return(null);
                    }
                }
                using (BinaryReader binaryReader2 = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(accmenu.srcfilename), false), Encoding.UTF8))
                {
                    string text2 = binaryReader2.ReadString();
                    if (text2 == FileConst.HEAD_MENU)
                    {
                        ACCMenu.Load(binaryReader2, accmenu.srcfilename, accmenu);
                        LogUtil.Debug(new object[]
                        {
                            "menu loaded"
                        });
                        result = accmenu;
                    }
                    else
                    {
                        ACCMenu.headerError(text2, filename);
                        result = null;
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(new object[]
                {
                    "アイテムメニューファイルが読み込めませんでした。",
                    filename,
                    ex
                });
                result = null;
            }
            return(result);
        }
Esempio n. 11
0
        // Token: 0x06000110 RID: 272 RVA: 0x0000B9B8 File Offset: 0x00009BB8
        private static void WriteMenuFile(BinaryReader reader, string header, string filepath, ACCMenu menu)
        {
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
                {
                    using (BinaryWriter binaryWriter2 = new BinaryWriter(File.OpenWrite(filepath)))
                    {
                        binaryWriter2.Write(header);
                        binaryWriter2.Write(reader.ReadInt32());
                        reader.ReadString();
                        string text = menu.txtpath;
                        if (!text.EndsWith(FileConst.EXT_TXT, StringComparison.OrdinalIgnoreCase))
                        {
                            text += FileConst.EXT_TXT;
                        }
                        binaryWriter2.Write(text);
                        reader.ReadString();
                        reader.ReadString();
                        reader.ReadString();
                        binaryWriter2.Write(menu.name);
                        binaryWriter2.Write(menu.category);
                        string text2 = menu.desc.Replace("\n", FileConst.RET);
                        binaryWriter2.Write(text2);
                        reader.ReadInt32();
                        bool flag = false;
                        for (;;)
                        {
                            int num = (int)reader.ReadByte();
                            if (num == 0)
                            {
                                break;
                            }
                            string   text3 = reader.ReadString();
                            string[] array = new string[num - 1];
                            for (int i = 0; i < num - 1; i++)
                            {
                                array[i] = reader.ReadString();
                            }
                            string key;
                            switch (key = text3)
                            {
                            case "priority":
                                array[0] = menu.priority;
                                flag     = true;
                                break;

                            case "name":
                                array[0] = menu.name;
                                break;

                            case "setumei":
                                array[0] = text2;
                                break;

                            case "icon":
                            case "icons":
                                array[0] = menu.EditIconFileName();
                                break;

                            case "additem":
                            {
                                string text4 = array[0];
                                array[0] = menu.itemFiles[text4].EditFileName();
                                LogUtil.Debug(new object[]
                                    {
                                        "modelfile replaces ",
                                        text4,
                                        "=>",
                                        array[0]
                                    });
                                break;
                            }

                            case "マテリアル変更":
                            {
                                string         slot     = array[0];
                                int            matNo    = int.Parse(array[1]);
                                TargetMaterial material = menu.GetMaterial(slot, matNo);
                                array[2] = material.EditFileName();
                                break;
                            }

                            case "リソース参照":
                                array[1] = menu.resFiles[array[1]].EditFileName();
                                break;

                            case "半脱ぎ":
                                array[0] = menu.resFiles[array[0]].EditFileName();
                                break;
                            }
                            binaryWriter.Write((byte)(array.Length + 1));
                            binaryWriter.Write(text3);
                            foreach (string value in array)
                            {
                                binaryWriter.Write(value);
                            }
                        }
                        binaryWriter.Write(0);
                        if (!flag)
                        {
                            binaryWriter.Write(2);
                            binaryWriter.Write("priority");
                            binaryWriter.Write(menu.priority);
                        }
                        binaryWriter2.Write((int)memoryStream.Length);
                        binaryWriter2.Write(memoryStream.ToArray());
                    }
                }
            }
        }
Esempio n. 12
0
        private static void WriteMenuFile(BinaryReader reader, string header, string filepath, ACCMenu menu)
        {
            using (var dataStream = new MemoryStream())
                using (var dataWriter = new BinaryWriter(dataStream))
                    using (var writer = new BinaryWriter(File.OpenWrite(filepath))) {
                        writer.Write(header);
                        writer.Write(reader.ReadInt32());

                        // txtpath
                        reader.ReadString();
                        string txtpath = menu.txtpath;
                        if (!txtpath.EndsWith(FileConst.EXT_TXT, StringComparison.OrdinalIgnoreCase))
                        {
                            txtpath += FileConst.EXT_TXT;
                        }
                        writer.Write(txtpath);
                        // name, category, 説明
                        reader.ReadString();
                        reader.ReadString();
                        reader.ReadString();
                        writer.Write(menu.name);
                        writer.Write(menu.category);
                        string desc = menu.desc.Replace("\n", FileConst.RET);
                        writer.Write(desc);

                        // readBytes
                        int num = (int)reader.ReadInt32();

                        bool priorityWritten = false;
                        while (true)
                        {
                            int size = (int)reader.ReadByte();
                            if (size == 0)
                            {
                                dataWriter.Write((byte)0);
                                break;
                            }

                            string key   = reader.ReadString();
                            var    param = new string[size - 1];
                            for (int i = 0; i < size - 1; i++)
                            {
                                param[i] = reader.ReadString();
                            }
                            // パラメータ数が変更される場合があれば…
                            // string[] writeParams = null;

                            switch (key)
                            {
                            case "priority":
                                param[0]        = menu.priority;
                                priorityWritten = true;
                                break;

                            case "name":
                                param[0] = menu.name;
                                break;

                            case "setumei":
                                param[0] = desc;
                                break;

                            case "icon":
                            case "icons":
                                param[0] = menu.EditIconFileName();
                                break;

                            case "additem":
                                var modelfile = param[0];
                                param[0] = menu.itemFiles[modelfile].EditFileName();
                                LogUtil.Debug("modelfile replaces ", modelfile, "=>", param[0]);
                                break;

                            case "マテリアル変更":
                                string slot  = param[0];
                                int    matNo = int.Parse(param[1]);
                                var    tm    = menu.GetMaterial(slot, matNo);
                                param[2] = tm.EditFileName();
                                break;

                            case "リソース参照":
                                param[1] = menu.resFiles[param[1]].EditFileName();
                                break;

                            case "半脱ぎ":
                                param[0] = menu.resFiles[param[0]].EditFileName();
                                break;
                                //case "color_set":
                                //    break;
//                            case "maskitem":
//                                // slot=param[0]
//                                // menu.maskItems.Add(slot0);
//                                break;
//
//                            case "delitem":
//                                // slot=param[0]
//                                // menu.delItems.Add(slot0);
//                                break;
//
//                            case "node消去":
//                                // menu.delNodes.Add(param[0]);
//                                break;
//                            case "node表示":
//                                // menu.showNodes.Add(param[0]);
//                                break;
//                            case "パーツnode消去":
//                                // menu.delPartsNodes.Add(param);
//                                break;
//                            case "パーツnode表示":
//                                // menu.showPartsNodes.Add(param);
//                                break;
                                //case "メニューフォルダ":
                                //    menu.menuFolder = param[0];
                                //    break;
                                //case "category":
                                //    menu.category = param[0];
                                //    break;
                                //case "catno":
                                //    menu.catno = param[0];
                                //    break;
                                //case "属性追加":
                                //    break;
                                //case "アタッチポイントの設定":
                                //    break;
                                //case "tex":
                                //case "テクスチャ変更":
                                //    break;
                                //case "テクスチャ合成":
                                //    break;
                                //case "unsetitem":
                                //    break;
                                //case "commenttype":
                                //    break;
                                //case "アイテムパラメータ":
                                //    if (param.Length == 3) {
                                //        param = ;
                                //        //Array.Copy(param, 0, itemParam, 0, param.Length);
                                //    }
                                //    break;
                                //case "アイテム":
                                //    menu.items.Add(Path.GetFileNameWithoutExtension(param[0]));
                                //    break;
                            }
                            // if (writeParams == null) writeParams = param;
                            dataWriter.Write((byte)(param.Length + 1));
                            dataWriter.Write(key);
                            foreach (string wparam in param)
                            {
                                dataWriter.Write(wparam);
                            }
                        }
                        if (!priorityWritten)
                        {
                            dataWriter.Write((byte)2);
                            dataWriter.Write("priority");
                            dataWriter.Write(menu.priority);
                        }
                        writer.Write((int)dataStream.Length);
                        writer.Write(dataStream.ToArray());
                    }
        }
     private static void Load(BinaryReader reader, string filename, ACCMenu menu) {
         menu.version = reader.ReadInt32();
         menu.txtpath = reader.ReadString();
         // 未使用
         var headerName = reader.ReadString();
         var headerCategory = reader.ReadString();
         var headerSetumei  = reader.ReadString().Replace(FileConst.RET, "\n");
 
         int num2 = (int)reader.ReadInt32();
         while (true) {
             int size = (int) reader.ReadByte();
             if (size == 0) break;
 
             string key = reader.ReadString();
             var param = new string[size-1];
             for (int i = 0; i < size-1; i++) {
                 param[i] = reader.ReadString();
             }
             switch (key) {
                 case "category":
                     menu.category = param[0];
                     break;
 //                            case "メニューフォルダ":
 //                                menu.menuFolder = param[0];
 //                                break;
 //                            case "catno":
 //                                menu.catno = param[0];
 //                                break;
                 case "属性追加":
                     break;
                 case "priority":
                     menu.priority = param[0];
                     break;
                 case "name":
                     menu.name = param[0];
                     break;
                 case "setumei":
                     menu.desc = param[0].Replace(FileConst.RET, "\n");
                     break;
                 case "icon":
                 case "icons":
                     menu.icon = param[0];
                     menu.editicon = Path.GetFileNameWithoutExtension(menu.icon);
                     break;
                 case "アイテムパラメータ":
                     if (param.Length == 3) {
                         menu.itemParam = param;
                         //Array.Copy(param, 0, itemParam, 0, param.Length);
                     }
                     break;
                 case "アイテム":
                     menu.items.Add(Path.GetFileNameWithoutExtension(param[0]));
                     break;
 
                 case "additem":
                     if (param.Length >= 1) {
                         var item = new Item(param);
                         if (!menu.itemFiles.TryGetValue(item.filename, out item.link)) {
                             menu.itemFiles[item.filename] = item;
                         }
                         menu.addItems.Add(item);
                         try {
                             if (item.slot != null) {
                                 var slotId = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), item.slot, true);
                                 menu.itemSlots[slotId] = item;
                             }
                             
                         } catch(Exception e) {
                             LogUtil.Debug("failed to parse additem slot", item.slot, e);
                         }
                     }
                     break;
 
                 case "maskitem":
                     if (param.Length >= 1) menu.maskItems.Add(param[0]);
                     break;
 
                 case "delitem":
                     string slot0 = menu.category;
                     if (param.Length >= 1) slot0 = param[0];
                     menu.delItems.Add(slot0);
                     break;
 
                 case "マテリアル変更":
                     string slot = param[0];
                     int matNo = int.Parse(param[1]);
                     string file = param[2];
                     menu.AddSlotMaterial(new TargetMaterial(slot, matNo, file));
 
                     break;
                 case "node消去":
                     menu.delNodes.Add(param[0]);
                     break;
                 case "node表示":
                     menu.showNodes.Add(param[0]);
                     break;
                 case "パーツnode消去":
                     menu.delPartsNodes.Add(param);
                     break;
                 case "パーツnode表示":
                     menu.showPartsNodes.Add(param);
                     break;
                 case "リソース参照":
                     var resRef1 = new ResourceRef(param[0], param[1]);
                     resRef1.menu = menu;
                     menu.resources.Add(resRef1);
                     if (!menu.resFiles.TryGetValue(resRef1.filename, out resRef1.link)) {
                         menu.resFiles[resRef1.filename] = resRef1;
                     }
                     break;
                 case "半脱ぎ":
                     var resRef2 = new ResourceRef(key, param[0]);
                     resRef2.menu = menu;
                     menu.resources.Add(resRef2);
                     if (!menu.resFiles.TryGetValue(resRef2.filename, out resRef2.link)) {
                         menu.resFiles[resRef2.filename] = resRef2;
                     }
                     break;
                 case "color_set":
                     break;
                 //case "アタッチポイントの設定":
                 //    break;
                 //case "tex":
                 //case "テクスチャ変更":
                 //    break;
                 //case "テクスチャ合成":
                 //    break;
                 //case "unsetitem":
                 //    break;
                 //case "commenttype":
                 //    break;
                 //case "color_set"
                 // break;
             }
         }
     }
        public static ACCMenu Load(string filename) {
            var menu = new ACCMenu();

            LogUtil.Debug("loading menu file", filename);
            menu.srcfilename = filename;
            menu.editfile = Path.GetFileNameWithoutExtension(filename);

            try {
                bool onBuffer;
                using (var reader = new BinaryReader(FileUtilEx.Instance.GetStream(menu.srcfilename, out onBuffer), Encoding.UTF8)) {
                    string header = reader.ReadString();
                    if (onBuffer || reader.BaseStream.Position > 0) {
                        if (header == FileConst.HEAD_MENU) {
                            Load(reader, menu.srcfilename, menu);
                            LogUtil.Debug("menu loaded");
                            return menu;
                        }
                        headerError(header, filename);
                        return null;
                    }
                }
               
                // arc内のファイルがロードできない場合の回避策: Sybaris 0410向け対策. 一括読み込み
                using (var reader = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(menu.srcfilename), false), Encoding.UTF8)) {
                    string header = reader.ReadString(); // hader
                    if (header == FileConst.HEAD_MENU) {
                        Load(reader, menu.srcfilename, menu);
                        LogUtil.Debug("menu loaded");
                        return menu;
                    }
                    headerError(header, filename);
                    return null;
                }

            } catch (Exception e) {
                LogUtil.Error("アイテムメニューファイルが読み込めませんでした。", filename, e);
                return null;
            }
        }
        private static void WriteMenuFile(BinaryReader reader, string header, string filepath, ACCMenu menu) {
            using (var dataStream = new MemoryStream())
            using (var dataWriter = new BinaryWriter(dataStream))
            using (var writer = new BinaryWriter(File.OpenWrite(filepath))) {

                writer.Write(header);
                writer.Write(reader.ReadInt32());
                
                // txtpath
                reader.ReadString();
                string txtpath = menu.txtpath;
                if (!txtpath.EndsWith(FileConst.EXT_TXT, StringComparison.OrdinalIgnoreCase)) {
                    txtpath += FileConst.EXT_TXT;
                }
                writer.Write(txtpath);
                // name, category, 説明
                reader.ReadString();
                reader.ReadString();
                reader.ReadString();
                writer.Write(menu.name);
                writer.Write(menu.category);
                string desc = menu.desc.Replace("\n", FileConst.RET);
                writer.Write(desc);

                // readBytes
                int num = (int)reader.ReadInt32();

                bool priorityWritten = false;
                while (true) {
                    int size = (int) reader.ReadByte();
                    if (size == 0) {
                        dataWriter.Write((byte)0);
                        break;
                    }

                    string key = reader.ReadString();
                    var param = new string[size-1];
                    for (int i = 0; i < size-1; i++) {
                        param[i] = reader.ReadString();
                    }
                    // パラメータ数が変更される場合があれば…
                    // string[] writeParams = null;

                    switch (key) {
                        case "priority":
                            param[0] = menu.priority;
                            priorityWritten = true;
                            break;
                        case "name":
                            param[0] = menu.name;
                            break;
                        case "setumei":
                            param[0] = desc;
                            break;
                        case "icon":
                        case "icons":
                            param[0] = menu.EditIconFileName();
                            break;

                        case "additem":
                            var modelfile = param[0];
                            param[0] = menu.itemFiles[modelfile].EditFileName();
                            LogUtil.Debug("modelfile replaces ", modelfile, "=>",  param[0]);
                            break;
                        case "マテリアル変更":
                            string slot = param[0];
                            int matNo = int.Parse(param[1]);
                            var tm = menu.GetMaterial(slot, matNo);
                            param[2] = tm.EditFileName();
                            break;
                        case "リソース参照":
                            param[1] = menu.resFiles[param[1]].EditFileName();
                            break;
                        case "半脱ぎ":
                            param[0] = menu.resFiles[param[0]].EditFileName();
                            break;
                        //case "color_set":
                        //    break;
//                            case "maskitem":
//                                // slot=param[0]
//                                // menu.maskItems.Add(slot0);
//                                break;
//
//                            case "delitem":
//                                // slot=param[0]
//                                // menu.delItems.Add(slot0);
//                                break;
//
//                            case "node消去":
//                                // menu.delNodes.Add(param[0]);
//                                break;
//                            case "node表示":
//                                // menu.showNodes.Add(param[0]);
//                                break;
//                            case "パーツnode消去":
//                                // menu.delPartsNodes.Add(param);
//                                break;
//                            case "パーツnode表示":
//                                // menu.showPartsNodes.Add(param);
//                                break;
                        //case "メニューフォルダ":
                        //    menu.menuFolder = param[0];
                        //    break;
                        //case "category":
                        //    menu.category = param[0];
                        //    break;
                        //case "catno":
                        //    menu.catno = param[0];
                        //    break;
                        //case "属性追加":
                        //    break;
                        //case "アタッチポイントの設定":
                        //    break;
                        //case "tex":
                        //case "テクスチャ変更":
                        //    break;
                        //case "テクスチャ合成":
                        //    break;
                        //case "unsetitem":
                        //    break;
                        //case "commenttype":
                        //    break;
                        //case "アイテムパラメータ":
                        //    if (param.Length == 3) {
                        //        param = ;
                        //        //Array.Copy(param, 0, itemParam, 0, param.Length);
                        //    }
                        //    break;
                        //case "アイテム":
                        //    menu.items.Add(Path.GetFileNameWithoutExtension(param[0]));
                        //    break;
                    }
                    // if (writeParams == null) writeParams = param;
                    dataWriter.Write((byte) (param.Length+1));
                    dataWriter.Write(key);
                    foreach (string wparam in param) {
                        dataWriter.Write(wparam);
                    }
                }
                if (!priorityWritten) {
                    dataWriter.Write((byte) 2);
                    dataWriter.Write("priority");
                    dataWriter.Write(menu.priority);
                }
                writer.Write((int)dataStream.Length);
                writer.Write(dataStream.ToArray());
            }
        }
        public static void WriteMenuFile(string filepath, ACCMenu menu) {

            try {
                bool onBuffer;
                using (var reader = new BinaryReader(FileUtilEx.Instance.GetStream(menu.srcfilename, out onBuffer), Encoding.UTF8)) {
                    string header = reader.ReadString();

                    if (onBuffer || reader.BaseStream.Position > 0) {
                        if (header == FileConst.HEAD_MENU) {
                            WriteMenuFile(reader, header, filepath, menu);
                            return; 
                        }
                        var msg = headerError(header, menu.srcfilename);
                        throw new ACCException(msg.ToString());
                    }
                }
                // arc内のファイルがロードできない場合の回避策: Sybaris 0410向け対策. 一括読み込み
                using (var reader = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(menu.srcfilename), false), Encoding.UTF8)) {
                    string header = reader.ReadString(); // hader
                    if (header == FileConst.HEAD_MATE) {
                        WriteMenuFile(reader, header, filepath, menu);
                    }
                    var msg = headerError(header, menu.srcfilename);
                    throw new ACCException(msg.ToString());
                }

            } catch (ACCException) {
                throw;
            } catch (Exception e) {
                string msg = "menuファイルの作成に失敗しました。 file="+ filepath;
                LogUtil.Error(msg, e);
                throw new ACCException(msg, e);
            }
        }