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; }); }
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()); } }
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()); } }
// 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()); } }