Exemple #1
0
        public Func <string, string[], string[]> ReplaceMenuFunc()
        {
            replaceFiles = new List <ReplacedInfo>();
            // menuファイル中のmodelとmateを更新する
            // それ以外はそのまま出力
            return((key, param) => {
                switch (key)
                {
                case "additem":
                    if (param.Length >= 2)
                    {
                        var slot0 = param[1];
                        try {
                            var slot = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), slot0, false);
                            var item = menu.itemSlots[slot];

                            // 対応するスロットのアイテムが更新される場合にのみ出力
                            if (item.needUpdate)
                            {
                                var filename0 = param[0];
                                string editfile;
                                // 元のmodelファイルが同一であれば、すでに出力済みと見なす
                                if (item.filename == filename0)
                                {
                                    item.worksuffix = null;
                                    editfile = item.EditFileName();
                                }
                                else
                                {
                                    item.worksuffix = suffix;
                                    editfile = item.EditFileName();
                                    replaceFiles.Add(new ReplacedInfo(filename0, editfile, this, item));
                                }
                                param[0] = editfile;
                            }
                        } catch (Exception e) {
                            LogUtil.Debug("failed to parse SlotID:", slot0, e);
                            // LogUtil.DebugLog("failed to parse additem slot", slot0, e);
                        }
                    }
                    break;

                case "マテリアル変更":
                    var slotName = param[0];
                    var matNo = int.Parse(param[1]);
                    var filename1 = param[2];
                    var tm = menu.GetMaterial(slotName, matNo);
                    // 上位menuと同名ファイルであれば、出力済のファイル名を指定 (上位側が変更されていなければそのまま)
                    tm.worksuffix = null;
                    if (tm.filename == filename1)
                    {
                        param[2] = tm.EditFileName();
                    }
                    else
                    {
                        if (tm.shaderChanged || tm.hasParamChanged || tm.hasTexFileChanged || tm.hasTexColorChanged)
                        {
                            tm.worksuffix = suffix;
                            var editfile = tm.EditFileName();
                            param[2] = editfile;
                            var replaced = new ReplacedInfo(filename1, editfile, this, tm);
                            replaceFiles.Add(replaced);
                        }
                        // マテリアルの内容が変更されていない場合は変更しない
                    }
                    break;
                }
                return param;
            });
        }
Exemple #2
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());
                    }
        }
Exemple #3
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());
                    }
        }
Exemple #4
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());
                    }
                }
            }
        }
        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());
            }
        }