diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/README.md" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/README.md" index b9cdc94..5b270df 100644 --- "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/README.md" +++ "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/README.md" @@ -1,6 +1,6 @@ # **Vault Patcher Tool** -作者及版权方:晴笙墨染(墨安)、KlparetlR、捂脸Wulian +作者及版权方:晴笙墨染(墨安)、KlparetlR、捂脸Wulian, 技术辅助:XDawned ## 专门为[Vault Patcher模组](https://github.com/3093FengMing/VaultPatcher)而生的配置编写工具 @@ -14,7 +14,7 @@ ttk UI用了sv-ttk模块,没有会自己下载 ## 支持VP模组的移植[Fabric版](https://github.com/LocalizedMC/HardcodePatcher),(在选择模组加载器格式窗口单击Fabric) -提出支持Fabric的是TexTrue,编写这部分的是KlparetlR,他自己也写了[移植版](https://gist.github.com/TexBlock/e54a48ad59e9d8b8e9c411015943efa9) +提出支持Fabric的是TexTrue,编写这部分的是KlparetlR ## 支持的语言 Supported languages @@ -110,12 +110,18 @@ Researches #### 包名匹配(`@bm;`) +注意:1.2.10版本及以下的 类匹配 和 包名匹配 都与 堆键深度 绑定,不填写没效果 + 在`功能前缀`部分填入`@bm;`即可。不兼容`类匹配`,如果你两个功能都开了,工具也不会报错,它设定`类匹配`的优先级最高,处理时,`包名匹配`不会体现。 包名如何获取:打开你要汉化硬编码的模组.jar文件,找到其中放有大量`.class`文件的文件夹(最好能看见与模组名相关的`.class`文件,比如模组名:XPCoins,找到XPCoins.class文件所在的目录),将这个文件夹的地址复制,大致是XXX.jar\ `com\coldspell\xpcoins`,不同模组存`.class`文件的文件夹名可能不同(没有com文件夹),要自己辨别,接着把`\`全部改成`.`并把`XXX.jar\`删掉,最后在原始文件中的第一行输入`@文件夹地址`,比如`@com.coldspell.xpcoins`或者`@iskallia.vault` +PS:相当于java中的package,所以他不单单是上面的`@com.coldspell.xpcoins`或者`@iskallia.vault`,还可以像内容根地址一样深入一些,比如`@iskallia.vault.core.vault.player` + #### 类匹配(`#内容根地址`+`#END`) +注意:1.2.10版本及以下的 类匹配 和 包名匹配 都与 堆键深度 绑定,不填写没效果 + 类匹配的开启比较特殊,它相当于开关,输入`#内容根地址`后,下一行开始都会属于这个类匹配的影响范围,要控制这个范围,需要你在这个key的下一行单独输入`#END`,再下一行就是正常的key了。 内容根地址如何获取:与包名获取相同,找到那个文件夹(这里称它为`内容根初始地址`),里面的文件夹和.class文件是可以作为内容根地址,越深入,匹配范围越小。一般来说,你要用类匹配,就要知道这个key来源于哪个文件和文件夹,从`内容根初始地址`到某个文件夹或文件的地址,再把`\`全部改成`.`,并删除文件后缀,就是`内容根地址`,然后在前面加上`#`即可。 @@ -128,6 +134,14 @@ Researches `&;`,这里的``部分就是`方法名` +PS:有时候不一定有方法名 + +#### 堆键深度 + +如何获取:开debug模式仅游戏,把要填加深度的key进行一个现象重现,然后看日志(log文件夹),找到与key相同的那一行信息,可能有一个key替换不同位置,这个时候要两种信息都复制出来,单独放在一个文本中,数`,`有几个,然后+1,就是堆键深度,把它填入`stack_depth` + +注意:1.2.10版本及以下的 类匹配 和 包名匹配 都与 堆键深度 绑定,不填写没效果 + ### 全功能配置文件 ```txt @iskallia.vault diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/000.ico" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/000.ico" new file mode 100644 index 0000000..962a0fc Binary files /dev/null and "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/000.ico" differ diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__init__.py" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__init__.py" new file mode 100644 index 0000000..9484676 --- /dev/null +++ "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__init__.py" @@ -0,0 +1,2 @@ +from .zh_cn import zhlangtext +from .custom_lang import zdylangtext,zdyconfig \ No newline at end of file diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/__init__.cpython-311.pyc" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/__init__.cpython-311.pyc" new file mode 100644 index 0000000..03c6df2 Binary files /dev/null and "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/__init__.cpython-311.pyc" differ diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/custom_lang.cpython-311.pyc" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/custom_lang.cpython-311.pyc" new file mode 100644 index 0000000..09fd340 Binary files /dev/null and "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/custom_lang.cpython-311.pyc" differ diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/en_us.cpython-311.pyc" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/en_us.cpython-311.pyc" new file mode 100644 index 0000000..a3afac8 Binary files /dev/null and "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/en_us.cpython-311.pyc" differ diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/zh_cn.cpython-311.pyc" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/zh_cn.cpython-311.pyc" new file mode 100644 index 0000000..f8f323a Binary files /dev/null and "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/__pycache__/zh_cn.cpython-311.pyc" differ diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/custom_lang.py" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/custom_lang.py" new file mode 100644 index 0000000..fb1e51e --- /dev/null +++ "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/custom_lang.py" @@ -0,0 +1,29 @@ +def zdyconfig(): + zdy = "繁体中文" + a0 = "0x404" + return zdy,a0 +def zdylangtext(): + info = "*-*<適配版本:1.2.10+>*-*\n項目地址:github-/KlparetlR/Vault-Patcher-Grocery-Store \n專門為VP模組而生的配寘編寫工具github-3093FengMing/VaultPatcher \n作者及版權方:晴笙墨染(莫安)、KlparetlR、捂脸Wulian,科技輔助:XDawned\nFabric通用:github-LocalizedMC/HardcodeTextPatcher-Fabric \n彈窗使用github-rdbende/Sun-Valley-messageboxes" + a1 ="處理的檔案" + a2 ="選擇要保存的資料夾地址" + a3 ="(必填)" + a4 ="(選填)" + a5 ="你需要選擇一個txt檔案和一個資料夾。" + a6 ="你需要選擇一個txt檔案。" + a7 ="你需要選擇一個資料夾。" + a8 ="GUI語言" + a9 ="保存的資料夾" + a10 ="選擇" + a11 ="翻譯作者-署名" + a12 ="此翻譯名稱" + a13 ="此翻譯描述" + a14 ="翻譯的模組" + a15 ="選定" + a16 ="生成" + vp1 ="硬編碼配寘" + vp2 ="轉換時出現錯誤!請檢查類匹配的#END有沒有漏!\nERROR for <%s>" + vp3 ="轉換時出現問題!方法名不在類匹配的範圍內!\nERROR for <&%s;>,是否繼續轉化?" + vp4 ="錯誤!檔案路徑遺失!" + vp5 ="VPtool成功將 %s.txt 檔案轉換為 VP或HP模組 的配寘格式。\n並儲存在%s目錄中。" + vp6 = "轉換時出現問題!堆鍵深度值不在類匹配的範圍內!\nERROR for <&%s;>,是否繼續轉化?" + return info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 \ No newline at end of file diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/zh_cn.py" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/zh_cn.py" new file mode 100644 index 0000000..e1dac8b --- /dev/null +++ "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/LANG/zh_cn.py" @@ -0,0 +1,25 @@ +def zhlangtext(): + info = "*-*<适配版本:1.2.10+>*-*\n项目地址:github-KlparetlR/Vault-Patcher-Grocery-Store \n专门为VP模组而生的配置编写工具github-3093FengMing/VaultPatcher\n作者及版权方:晴笙墨染(莫安)、KlparetlR、捂脸Wulian, 技术辅助:XDawned\nFabric通用github-LocalizedMC/HardcodeTextPatcher-Fabric\n弹窗使用github-rdbende/Sun-Valley-messageboxes" + a1 = "处理的文件" + a2 = "选择要保存的文件夹地址" + a3 = "(必填)" + a4 = "(选填)" + a5 = "你需要选择一个txt文件和一个文件夹。" + a6 = "你需要选择一个txt文件。" + a7 = "你需要选择一个文件夹。" + a8 = "GUI语言" + a9 = "保存的文件夹" + a10 = "选择" + a11 = "翻译作者-署名" + a12 = "此翻译名称" + a13 = "此翻译描述" + a14 = "翻译的模组" + a15 = "选定" + a16 = "生成" + vp1 = "硬编码配置" + vp2 = "转换时出现错误!请检查类匹配的#END有没有漏!\nERROR for <%s>" + vp3 = "转换时出现问题!方法名不在类匹配的范围内!\nERROR for <&%s;>,是否继续转化?" + vp4 = "错误!文件路径丢失!" + vp5 = "VPtool 成功将 %s.txt 文件转换为 VP或HP模组 的配置格式。\n并储存在 %s 目录中。" + vp6 = "转换时出现问题!堆键深度值不在类匹配的范围内!\nERROR for <&%s;>,是否继续转化?" + return info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.10/dialogs.py" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/dialogs.py" similarity index 100% rename from "VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.10/dialogs.py" rename to "VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/dialogs.py" diff --git "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.10/main.py" "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/main.py" similarity index 65% rename from "VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.10/main.py" rename to "VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/main.py" index ffd7d41..bdb786f 100644 --- "a/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.10/main.py" +++ "b/VPtool\347\274\226\345\206\231\345\267\245\345\205\267/VPtool-2.11/main.py" @@ -2,34 +2,78 @@ *-*<适配版本:1.2.10+>*-* 项目地址:https://github.com/KlparetlR/Vault-Patcher-Grocery-Store/blob/main/VPtool%E7%BC%96%E5%86%99%E5%B7%A5%E5%85%B7/ 专门为VP模组而生的配置编写工具(https://github.com/3093FengMing/VaultPatcher ) -作者及版权方:晴笙墨染(莫安)、KlparetlR、捂脸Wulian +作者及版权方:晴笙墨染(莫安)、KlparetlR、捂脸Wulian, 技术辅助:XDawned Fabric通用(https://github.com/LocalizedMC/HardcodeTextPatcher-Fabric ) 弹窗使用https://github.com/rdbende/Sun-Valley-messageboxes -ttk UI用了sv-ttk模块,没有会自己下载 """ +from tkinter import filedialog, StringVar, Tk, ttk +from tkinter.ttk import Button, Label, Entry,Combobox +import os,codecs,copy,json,dialogs,sys,subprocess,re,sv_ttk,ctypes,LANG +from LANG import zhlangtext,zdyconfig,zdylangtext + if __name__ == "__main__": - from tkinter import filedialog, StringVar, Tk, ttk - from tkinter.ttk import Button, Label, Entry - import os,codecs,copy,json,dialogs,sys,subprocess,re - try: - import sv_ttk - except ImportError: - os.system("pip install sv-ttk") + vaulelang = hex(ctypes.windll.kernel32.GetSystemDefaultUILanguage()) + def updateGui(): + file_lb.config(text=a1) + savelangButton.config(text=a15) + saveButton.config(text=a16) + mods_lb.config(text=a14) + desc_lb.config(text=a13) + name_lb.config(text=a12) + authors_lb.config(text=a11) + packButton.config(text=a10) + icon_lb.config(text=a9) + IconButton.config(text=a10) + cGuilang_lb.config(text=a8) + mods_vaule.set(a3) + desc_vaule.set(a3) + name_vaule.set(a4) + authors_vaule.set(a4) + icon_var.set(a4) + FileGUI.set(a4) + def runlangGui(): + global zdy,a0,info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6,langcurrent + zdy,a0 = zdyconfig() + if vaulelang == "0x804": + info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 = zhlangtext() + def langcurrent(): + cGuilang_entry.current(0) + if vaulelang == f"{a0}": + info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 = zdylangtext() + def langcurrent(): + cGuilang_entry.current(2) + runlangGui() + def runclangGui(): + global zdy,a0,info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 + zdy,a0 = zdyconfig() + if cGuilang_entry.get() == "中文简体": + info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 = zhlangtext() + if cGuilang_entry.get() == f"{zdy}": + info,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,vp1,vp2,vp3,vp4,vp5,vp6 = zdylangtext() + updateGui() + root.update() def browseStruct(): - FileGUI.set(filedialog.askopenfilename(filetypes=(("处理的文件", "*.txt *.TXT"),),initialdir=os.path.abspath(os.path.dirname(__file__)))) + FileGUI.set(filedialog.askopenfilename(filetypes=(("%s" % (a1), "*.txt *.TXT"),),initialdir=os.path.abspath(os.path.dirname(__file__)))) def browseIcon(): - icon_var.set(filedialog.askdirectory(title='选择要保存的文件夹地址',initialdir=os.path.abspath(os.path.dirname(__file__)))) + icon_var.set(filedialog.askdirectory(title="%s" % (a2),initialdir=os.path.abspath(os.path.dirname(__file__)))) def box_checked(): saveButton.grid_forget() r = 0 + cGuilang_lb.grid(row=r, column=0,pady=5) + langcurrent() + cGuilang_entry.grid(row=r, column=1,pady=5) + savelangButton.grid(row=r, column=2,pady=5,padx=20) + r += 1 + empty_lb.grid(row=r, column=1,pady=5) + r += 1 file_lb.grid(row=r, column=0,pady=5) file_entry.grid(row=r, column=1,pady=5) packButton.grid(row=r, column=2,pady=5) r += 1 icon_lb.grid(row=r, column=0,pady=5,padx=20) icon_entry.grid(row=r, column=1,pady=5) - IconButton.grid(row=r, column=2,pady=5,padx=10) + IconButton.grid(row=r, column=2,pady=5,padx=20) r += 1 authors_lb.grid(row=r, column=0,pady=5,padx=20) authors_entry.grid(row=r, column=1,pady=5,padx=20) @@ -43,42 +87,45 @@ def box_checked(): mods_lb.grid(row=r, column=0,pady=5,padx=20) mods_entry.grid(row=r, column=1,pady=5,padx=20) r += 1 - saveButton.grid(row=r, column=2,pady=5,padx=10) + saveButton.grid(row=r, column=2,pady=5,padx=20) r += 1 def runFromGui(): - global pack_name - if FileGUI.get() and icon_var.get() == "(必填)" or len(FileGUI.get() and icon_var.get()) == 0: - dialogs.show_message("错误", "你需要选择一个txt文件和一个文件夹。") + if FileGUI.get() and icon_var.get() == "%s" % (a3) or len(FileGUI.get() and icon_var.get()) == 0: + dialogs.show_message("ERROR", "%s" % (a5)) else: - if FileGUI.get() == "(必填)" or len(FileGUI.get()) == 0: - dialogs.show_message("错误", "你需要选择一个txt文件。") - if icon_var.get() == "(必填)" or len(icon_var.get()) == 0: - dialogs.show_message("错误", "你需要选择一个文件夹。") + if FileGUI.get() == "%s" % (a3) or len(FileGUI.get()) == 0: + dialogs.show_message("ERROR", "%s" % (a6)) + if icon_var.get() == "%s" % (a3) or len(icon_var.get()) == 0: + dialogs.show_message("ERROR", "%s" % (a7)) vp() root = Tk() - root.title("VPtool 2.9") - FileGUI = StringVar(value="(必填)") - packName = StringVar() - icon_var = StringVar(value="(必填)") - authors_vaule = StringVar(value="(选填)") - name_vaule = StringVar(value="(选填)") - desc_vaule = StringVar(value="(选填)") - mods_vaule = StringVar(value="(选填)") + root.title("VPtool 2.11") + cGuilang_lb = Label(root, text="%s" % (a8)) + combo_list = ["中文简体",f"{zdy}"] + empty_lb = Label(root, text="") + cGuilang_entry = Combobox(root,state="readonly", values=combo_list) + FileGUI = StringVar(value="%s" % (a3)) + icon_var = StringVar(value="%s" % (a3)) + authors_vaule = StringVar(value="%s" % (a4)) + name_vaule = StringVar(value="%s" % (a4)) + desc_vaule = StringVar(value="%s" % (a4)) + mods_vaule = StringVar(value="%s" % (a4)) file_entry = Entry(root, textvariable=FileGUI) - icon_lb = Label(root, text="保存的文件夹") + icon_lb = Label(root, text="%s" % (a9)) icon_entry = Entry(root, textvariable=icon_var) - IconButton = Button(root, text="选择", command=browseIcon) - file_lb = Label(root, text="处理的文件") - packButton = Button(root, text="选择", command=browseStruct) - authors_lb = Label(root, text="汉化作者-署名") + IconButton = Button(root, text="%s" % (a10), command=browseIcon) + file_lb = Label(root, text="%s" % (a1)) + packButton = Button(root, text="%s" % (a10), command=browseStruct) + authors_lb = Label(root, text="%s" % (a11)) authors_entry = Entry(root, textvariable=authors_vaule) - name_lb = Label(root, text="此汉化名称") + name_lb = Label(root, text="%s" % (a12)) name_entry = Entry(root, textvariable=name_vaule) - desc_lb = Label(root, text="此汉化描述") + desc_lb = Label(root, text="%s" % (a13)) desc_entry = Entry(root, textvariable=desc_vaule) - mods_lb = Label(root, text="汉化的模组") + mods_lb = Label(root, text="%s" % (a14)) mods_entry = Entry(root, textvariable=mods_vaule) - saveButton = Button(root, text="生成", command=runFromGui) + saveButton = Button(root, text="%s" % (a16), command=runFromGui) + savelangButton = Button(root, text="%s" % (a15), command=runclangGui) box_checked() sv_ttk.use_light_theme() root.update_idletasks() @@ -88,10 +135,11 @@ def runFromGui(): y = (root.winfo_screenheight() // 2) - (height // 2) - 200 root.geometry('{}x{}+{}+{}'.format(width,height,x,y)) root.resizable(False, False) + dialogs.show_message('VPtool-welcome',info) def vp(): # 文件地址 filePath = FileGUI.get() - folderpath = icon_var.get()+'/硬编码配置/' + folderpath = icon_var.get()+'/%s/' % (vp1) fileName = os.path.basename(os.path.splitext(filePath)[0]) # 文件初始内容 fileTxtList = [] @@ -102,8 +150,10 @@ def vp(): # 类名 className = '' tempclassName = ' ' + # 堆键 + Reactordepth = '' # 包名备份 - packName = '' + packname = '' # 汉化占位基础文本 valueTxt = '' # 基础字典模板 @@ -121,7 +171,7 @@ def restart(): # 逐行读取加入列表 fileTxtList = f.read().splitlines() # nametype - packName = fileTxtList[0] + packname = fileTxtList[0] # value基础值 valueTxt = fileTxtList[1] # 起始值 @@ -136,6 +186,7 @@ def restart(): # 判断开始 print(tempFileTxt) methoddata = "" + Reactordata = "" # 先判断 是否启动类匹配开关 if tempFileTxt[0] == '#' and tempFileTxt[1:4] != 'END': if tempclassName == ' ': @@ -147,7 +198,7 @@ def restart(): elif tempclassName != ' ': if tempclassName[0] == '#' and tempFileTxt[1:4] != 'END': print ("ERROR for <"+tempclassName+">") - dialogs.show_message('VPtool',f'转换时出现错误!请检查类匹配的#END有没有漏!\nERROR for <{tempclassName}>') + dialogs.show_message('VPtool',f'{vp2}' % (tempclassName)) restart() else: isClass = True @@ -167,12 +218,24 @@ def restart(): tempFileTxt = tempFileTxt.replace("&"+methoddata+";","") if methoddata != "" and isClass == False: print ("ERROR for <&"+methoddata+";>") - yan1 = dialogs.ask_yes_no('VPtool',f'转换时出现问题!方法名不在类匹配的范围内!\nERROR for <&{methoddata};>,是否继续转化?') + yan1 = dialogs.ask_yes_no('VPtool',f'{vp3}' % (methoddata)) if yan1 == True: tempFileTxt = tempFileTxt.replace("&"+methoddata+";","") methoddata = "" else: restart() + # 判断 堆键深度有没有 + Reactordata = "".join(re.findall(r":(.+?);",tempFileTxt)) + if Reactordata != "" and isClass != False: + tempFileTxt = tempFileTxt.replace(":"+Reactordata+";","") + if Reactordata != "" and isClass == False: + print ("ERROR for <:"+Reactordata+";>") + yan1 = dialogs.ask_yes_no('VPtool',f'{vp6}' % (Reactordata)) + if yan1 == True: + tempFileTxt = tempFileTxt.replace(":"+Reactordata+";","") + Reactordata = "" + else: + restart() # 开启包名 和 半匹配 和 有类匹配(优先) if "@bm;" in tempFileTxt and "@;" in tempFileTxt and isClass: txtResult['key'] = tempTxt = tempFileTxt.split(';')[2] @@ -186,7 +249,7 @@ def restart(): resultList2[tempTxt3] = tempTxt # 开启包名 和 半匹配 和 无类匹配 elif "@bm;" in tempFileTxt and "@;" in tempFileTxt and isClass != True: - targetClass['name'] = packName + targetClass['name'] = packname txtResult['key'] = tempTxt = tempFileTxt.split(';')[2] txtResult['value'] = tempTxt2 = "@" + valueTxt + str(valueIndex) tempTxt3 = valueTxt + str(valueIndex) @@ -207,7 +270,7 @@ def restart(): resultList2[tempTxt2] = tempTxt # 开启包名 和 无类匹配 elif "@bm;" in tempFileTxt and "@;" not in tempFileTxt and isClass != True: - targetClass['name'] = packName + targetClass['name'] = packname txtResult['key'] = tempTxt = tempFileTxt.split(';')[1] txtResult['value'] = tempTxt2 = valueTxt + str(valueIndex) tempTargetClass = copy.deepcopy(targetClass) @@ -252,8 +315,9 @@ def restart(): resultList.append(txtResult) resultList2[tempTxt2] = tempTxt targetClass['method'] = methoddata + targetClass['stack_depth'] = Reactordata methoddata = "" - methodResult = "" + Reactordata = "" index += 1 valueIndex += 1 # 确保目标文件夹存在 @@ -284,11 +348,11 @@ def open_folder(folderpath): if os.path.exists(folderpath): os.startfile(folderpath) else: - print ("ERROR 文件路径丢失!") - dialogs.show_message('VPtool','错误!文件路径丢失!') + print ("ERROR: File path lost!") + dialogs.show_message('VPtool',f'{vp4}') subprocess.Popen([sys.executable] + sys.argv) sys.exit() open_folder(folderpath) # 成功提示 - dialogs.show_message('VPtool',f'VPtool 成功将 {fileName}.txt 文件转换为 VP或HP模组 的配置格式。\n并储存在 {folderpath} 目录中。') - root.mainloop() + dialogs.show_message('VPtool',f'{vp5}' % (fileName,folderpath)) + root.mainloop() \ No newline at end of file