From 908f622433ff7a180a9ab69c7d435b92cb1d2b37 Mon Sep 17 00:00:00 2001 From: bgArray <474037765@qq.com> Date: Wed, 19 Jan 2022 10:46:20 +0800 Subject: [PATCH] initial commit --- Musicreater.py | 828 +- languages/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 182 bytes languages/__pycache__/enGB.cpython-39.pyc | Bin 0 -> 5364 bytes languages/__pycache__/lang.cpython-39.pyc | Bin 0 -> 492 bytes languages/__pycache__/zhCN.cpython-39.pyc | Bin 0 -> 5844 bytes languages/lang.py | 9 +- languages/zhCN.py | 278 +- log/2022-01-18 21_43_16.msct.log | 6 + log/2022-01-18 21_45_55.msct.log | 7903 +++++++++++++++++ log/2022-01-18 21_49_21.msct.log | 8 + log/2022-01-18 21_50_44.msct.log | 3 + log/2022-01-18 21_51_22.msct.log | 4 + log/2022-01-19 10_05_27.msct.log | 7896 ++++++++++++++++ log/2022-01-19 10_10_25.msct.log | 6 + log/2022-01-19 10_12_45.msct.log | 4 + logs/amulet_core.log | 0 logs/pymctranslate.log | 1 + msctspt/__pycache__/__init__.cpython-39.pyc | Bin 149 -> 180 bytes .../__pycache__/bugReporter.cpython-39.pyc | Bin 2524 -> 4363 bytes .../__pycache__/threadOpera.cpython-39.pyc | Bin 1035 -> 1066 bytes nmcsup/__pycache__/__init__.cpython-39.pyc | Bin 152 -> 179 bytes nmcsup/__pycache__/const.cpython-39.pyc | Bin 6682 -> 6713 bytes nmcsup/__pycache__/log.cpython-39.pyc | Bin 757 -> 820 bytes nmcsup/__pycache__/nmcreader.cpython-39.pyc | Bin 2670 -> 2701 bytes nmcsup/__pycache__/trans.cpython-39.pyc | Bin 7231 -> 7022 bytes nmcsup/__pycache__/vers.cpython-39.pyc | Bin 2048 -> 2172 bytes 26 files changed, 16361 insertions(+), 585 deletions(-) create mode 100644 languages/__pycache__/__init__.cpython-39.pyc create mode 100644 languages/__pycache__/enGB.cpython-39.pyc create mode 100644 languages/__pycache__/lang.cpython-39.pyc create mode 100644 languages/__pycache__/zhCN.cpython-39.pyc create mode 100644 log/2022-01-18 21_43_16.msct.log create mode 100644 log/2022-01-18 21_45_55.msct.log create mode 100644 log/2022-01-18 21_49_21.msct.log create mode 100644 log/2022-01-18 21_50_44.msct.log create mode 100644 log/2022-01-18 21_51_22.msct.log create mode 100644 log/2022-01-19 10_05_27.msct.log create mode 100644 log/2022-01-19 10_10_25.msct.log create mode 100644 log/2022-01-19 10_12_45.msct.log create mode 100644 logs/amulet_core.log create mode 100644 logs/pymctranslate.log diff --git a/Musicreater.py b/Musicreater.py index 1f3f0f3..bc1a33b 100644 --- a/Musicreater.py +++ b/Musicreater.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -#! python3 +# ! python3 # W-YI 金羿 @@ -10,7 +10,7 @@ # 若需转载或借鉴 请附作者 -''' +""" Copyright 2022 Eilles Wan (金羿) Licensed under the Apache License, Version 2.0 (the 'License') @@ -24,11 +24,26 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -''' - +""" # 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开 +# -----------------------------分割线----------------------------- +# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日 +# 统计:致命(三级)错误:0个;警告(二级)错误:15个;语法(一级)错误:597个 +# 目前我的Pycharm并没有显示任何错误,有错误可以向 +# bgArray 诸葛亮与八卦阵 +# QQ 474037765 或最好加入:音·创 开发交流群 861684859 +# ------------------------- split line----------------------------- +# Zhuge Liang and Bagua array help to modify the grammar date: -- January 19, 2022 +# Statistics: fatal (Level 3) errors: 0; Warning (Level 2) errors: 15; Syntax (Level 1) error: 597 +# At present, my Pycham does not display any errors. If there are errors, you can report them to me +# Bgarray Zhuge Liang and Bagua array +# QQ 474037765 or better join: Musicreater development exchange group 861684859 +# ------------------------- split line----------------------------- + +# 下面为正文 + import json import os @@ -44,24 +59,14 @@ from languages.lang import * from msctspt.threadOpera import NewThread from nmcsup.vers import VER -__version__ = VER[1]+VER[0] +__version__ = VER[1] + VER[0] __author__ = 'W-YI (金羿)' - - - - - - - - - - +dire = "" +begp = "" +endp = "" print('建立变量,存入内存,载入字典常量函数') - - - # 主体部分 # 支持多文件同时操作 @@ -101,8 +106,6 @@ dataset=[ ] ''' - - dataset = [ { 'mainset': { @@ -127,7 +130,6 @@ dataset = [ }, ] - is_new_file = True is_save = True ProjectName = '' @@ -152,108 +154,81 @@ def DMM(): # 反回字典用于编辑 print('完成') - - - - - - - - - def __main__(): - '''音·创 本体\n + """音·创 本体\n W-YI 金羿\n QQ 2647547478\n 音·创 开发交流群 861684859\n Email EillesWan2006@163.com W-YI_DoctorYI@outlook.com\n 版权所有 Team-Ryoun 金羿\n 若需转载或借鉴 请附作者\n - ''' + """ print('音·创 正在启动……') - - print('载入日志功能...') from nmcsup.log import log print('完成!') - - print('更新执行位置...') if sys.platform == 'win32': try: - os.chdir(__file__[:len(__file__)-__file__[len(__file__)::-1].index('\\')]) + os.chdir(__file__[:len(__file__) - __file__[len(__file__)::-1].index('\\')]) log('更新执行位置,当前文件位置 {}'.format(__file__)) - except: + except FileNotFoundError: # 程序规范修改:根据新的语法标准:except后面不能没有错误类型,所以既然是pass就随便填一个错误 pass else: try: - os.chdir(__file__[:len(__file__)-__file__[len(__file__)::-1].index('/')]) - except: + os.chdir(__file__[:len(__file__) - __file__[len(__file__)::-1].index('/')]) + except FileNotFoundError: pass - log('其他平台:{} 更新执行位置,当前文件位置 {}'.format(sys.platform,__file__)) + log('其他平台:{} 更新执行位置,当前文件位置 {}'.format(sys.platform, __file__)) print('完成!') - - - # 读取文件 - print('载入文件读取函数') - def ReadFile(fn:str) -> list: + def ReadFile(fn: str): # -> list from nmcsup.nmcreader import ReadFile as fileRead k = fileRead(fn) - if k == False : + if k is False: tk.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[105].format(fn)) return else: return k - - def ReadMidi(midfile:str) -> str: + def ReadMidi(midfile: str): # -> str from nmcsup.nmcreader import ReadMidi as midiRead k = midiRead(midfile) - if k == False : + if k is False: tk.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[105].format(midfile)) return else: return k - print('完成!') - - - # 菜单命令 print('加载菜单命令...') def exitapp(): global is_save - if is_save != True: + if is_save is not True: if tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106]): SaveProject() log('程序正常退出') - - - try: global dataset del dataset global root root.destroy() del root - except: + except FileNotFoundError: # 程序规范修改:根据新的语法标准:except后面不能没有错误类型,所以既然是pass就随便填一个错误 pass - - - if clearLog : + if clearLog: print(READABLETEXT[2]) try: if os.path.exists('./log/'): @@ -262,17 +237,13 @@ def __main__(): shutil.rmtree('./logs/') if os.path.exists('./cache/'): shutil.rmtree('./cache/') - except: + except ZeroDivisionError: # 程序规范修改:根据新的语法标准:except后面不能没有错误类型,所以既然是pass就随便填一个错误 print(READABLETEXT[3]) - - + exit() - print('退出命令加载完成!') - - def SaveProject(): if is_new_file: # 新的项目相等于另存为 @@ -287,57 +258,60 @@ def __main__(): global is_save is_save = True - print('保存项目命令加载完成!') - def SaveAsProject(): # 另存为项目 - fn = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[5], initialdir=r'./', filetypes=[(READABLETEXT[108], '.msct'), (READABLETEXT[109], '*')], defaultextension='Noname.msct') - if fn == None or fn =='': + fn = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[5], initialdir=r'./', + filetypes=[(READABLETEXT[108], '.msct'), (READABLETEXT[109], '*')], + defaultextension='Noname.msct') + if fn is None or fn == '': return - ProjectName = fn - with open(ProjectName, 'w', encoding='utf-8') as f: + Project_Name = fn + with open(Project_Name, 'w', encoding='utf-8') as f: json.dump(dataset[0], f) - tkinter.messagebox.showinfo(title=READABLETEXT[4], message=READABLETEXT[107].format(ProjectName)) + tkinter.messagebox.showinfo(title=READABLETEXT[4], message=READABLETEXT[107].format(Project_Name)) global is_save is_save = True - print('另存项目命令加载完成!') - def openOldProject(): global is_save - if is_save != True: + if is_save is not True: result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106]) if result: SaveProject() - fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[6], initialdir=r'./', filetypes=[(READABLETEXT[110], '.ry.nfc'), (READABLETEXT[111], '.ry.mfm'), (READABLETEXT[112], '*')], multiple=True) - if fn == None or fn == '': + fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[6], initialdir=r'./', + filetypes=[(READABLETEXT[110], '.ry.nfc'), + (READABLETEXT[111], '.ry.mfm'), (READABLETEXT[112], '*')], + multiple=True) + if fn is None or fn == '': return else: fn = fn[0] from nmcsup.nmcreader import ReadOldProject dataset[0] = ReadOldProject(fn) - - def openProject(): global is_save - if is_save != True: + if is_save is not True: result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106]) if result: SaveProject() - fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[7], initialdir=r'./', filetypes=[(READABLETEXT[108], '.msct'),(READABLETEXT[112], '*')], multiple=True) - if fn == None or fn == '': + fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[7], initialdir=r'./', + filetypes=[(READABLETEXT[108], '.msct'), (READABLETEXT[112], '*')], + multiple=True) + if fn is None or fn == '': return else: fn = fn[0] try: - with open(fn, 'r', encoding='UTF-8') as c: - dataset[0] = json.load(c) - except: + with open(fn, 'r', encoding='UTF-8') as C: + dataset[0] = json.load(C) + + except json.decoder.JSONDecodeError: # 程序规范修改:根据新的语法标准:except后面不能没有错误类型,测试后改为: + # json.decoder.JSONDecodeError print(READABLETEXT[8].format(fn)) log('无法打开{}'.format(fn)) return @@ -352,42 +326,39 @@ def __main__(): print('打开项目命令加载完成!') - - def appabout(): aabw = tk.Tk() aabw.title(READABLETEXT[9]) aabw.geometry('550x600') # 像素 tk.Label(aabw, text='', font=('', 15)).pack() tk.Label(aabw, text=READABLETEXT[10], font=('', 35)).pack() - tk.Label(aabw, text=READABLETEXT[11].format(VER[1]+VER[0]), font=('', 15)).pack() + tk.Label(aabw, text=READABLETEXT[11].format(VER[1] + VER[0]), font=('', 15)).pack() # pack 的side可以赋值为LEFT RTGHT TOP BOTTOM # grid 的row 是列数、column是行排,注意,这是针对空间控件本身大小来的,即是指向当前控件的第几个。 # place的 x、y是(x,y)坐标 - #pic = tk.PhotoImage(file='./bin/pics/Ryoun_S.png') - #tk.Label(aabw, image=pic, width=200, height=200).pack() - #del pic + # pic = tk.PhotoImage(file='./bin/pics/Ryoun_S.png') + # tk.Label(aabw, image=pic, width=200, height=200).pack() + # del pic tk.Label(aabw, text='', font=('', 5)).pack() tk.Label(aabw, text=READABLETEXT[12], font=('', 20)).pack() tk.Label(aabw, text='', font=('', 15)).pack() for i in READABLETEXT[15]: - tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15,'bold' if i[1] else '')).pack() + tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15, 'bold' if i[1] else '')).pack() tk.Label(aabw, text='', font=('', 5)).pack() if DEFAULTLANGUAGE != 'zh-CN': tk.Label(aabw, text=READABLETEXT[16], font=('', 15)).pack() for i in READABLETEXT['Translator']: - tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15,'bold' if i[1] else '')).pack() + tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15, 'bold' if i[1] else '')).pack() + def exitAboutWindow(): aabw.destroy() - - tk.Button(aabw,text=READABLETEXT[13],command=exitAboutWindow).pack() - + + tk.Button(aabw, text=READABLETEXT[13], command=exitAboutWindow).pack() + aabw.mainloop() - print('关于命令加载完成!') - def apphelp(): ahpw = tk.Tk() ahpw.title(READABLETEXT[19]) @@ -397,12 +368,12 @@ def __main__(): print('帮助命令加载完成!') - - def FromMP3(): log('从MP3导入音乐') - mp3file = tkinter.filedialog.askopenfilename(title=READABLETEXT[20], initialdir=r'./', filetypes=[(READABLETEXT[113], '.mp3 .m4a'), (READABLETEXT[112], '*')], multiple=True) - if mp3file == None or mp3file == '': + mp3file = tkinter.filedialog.askopenfilename(title=READABLETEXT[20], initialdir=r'./', + filetypes=[(READABLETEXT[113], '.mp3 .m4a'), + (READABLETEXT[112], '*')], multiple=True) + if mp3file is None or mp3file == '': log('取消') return else: @@ -411,32 +382,35 @@ def __main__(): from nmcsup.trans import Mp32Mid if not os.path.exists('./Temp/'): os.makedirs('./Temp/') - Mp32Mid(mp3file,'./Temp/Trans.mid') + Mp32Mid(mp3file, './Temp/Trans.mid') log('打开midi文件./Temp/Trans.mid') th = NewThread(ReadMidi, ('./Temp/Trans.mid',)) th.start() del mp3file - def midiSPT(th): - for i in th.getResult(): + + def midiSPT(th_): + for i in th_.getResult(): datas = DMM() datas['notes'] = i dataset[0]['musics'].append(datas) - del th + del th_ global is_save is_save = False global NowMusic RefreshMain() RefreshMusic(NowMusic) + threading.Thread(target=midiSPT, args=(th,)).start() del th print('读MP3加载完成') - def FromMidi(): log('从midi导入音乐') - midfile = tkinter.filedialog.askopenfilename(title=READABLETEXT[21], initialdir=r'./', filetypes=[(READABLETEXT[114], '.mid .midi'), (READABLETEXT[112], '*')], multiple=True) - if midfile == None or midfile == '': + midfile = tkinter.filedialog.askopenfilename(title=READABLETEXT[21], initialdir=r'./', + filetypes=[(READABLETEXT[114], '.mid .midi'), + (READABLETEXT[112], '*')], multiple=True) + if midfile is None or midfile == '': log('取消') return else: @@ -444,55 +418,57 @@ def __main__(): th = NewThread(ReadMidi, (midfile,)) th.start() del midfile - def midiSPT(th): - for i in th.getResult(): + + def midiSPT(th_): + for i in th_.getResult(): datas = DMM() datas['notes'] = i dataset[0]['musics'].append(datas) - del th + del th_ global is_save is_save = False global NowMusic RefreshMain() RefreshMusic(NowMusic) + threading.Thread(target=midiSPT, args=(th,)).start() del th - print('读midi命令加载完成!') - def FromForm(): log('从文本读入音轨') - fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[22], initialdir=r'./', filetypes=[(READABLETEXT[115], '.txt'), (READABLETEXT[112], '*')], multiple=True) - if fn == None or fn =='': + fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[22], initialdir=r'./', + filetypes=[(READABLETEXT[115], '.txt'), (READABLETEXT[112], '*')], + multiple=True) + if fn is None or fn == '': log('取消') return else: fn = fn[0] th = NewThread(ReadFile, (fn,)) th.start() - def midiSPT(th): - for i in th.getResult(): + + def midiSPT(th_): + for i in th_.getResult(): datas = DMM() datas['notes'] = i dataset[0]['musics'].append(datas) - del th + del th_ global is_save is_save = False global NowMusic RefreshMain() RefreshMusic(NowMusic) + threading.Thread(target=midiSPT, args=(th,)).start() - print('读txt命令加载完成!') - def FromText(): log('写入音符至音轨') dat = tkinter.simpledialog.askstring(title=READABLETEXT[23], prompt=READABLETEXT[14], initialvalue='`1 .2 C') - if dat == None: + if dat is None: return datas = [] for i in dat.split(' '): @@ -509,43 +485,39 @@ def __main__(): RefreshMain() RefreshMusic(NowMusic) - print('写入命令加载完成!') - - def ShowCMD(): log('展示指令') global NowMusic from nmcsup.trans import Note2Cmd - RefreshCMDList(Note2Cmd(dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['ScoreboardName'],dataset[0]['musics'][NowMusic]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'])) - + RefreshCMDList( + Note2Cmd(dataset[0]['musics'][NowMusic]['notes'], dataset[0]['musics'][NowMusic]['set']['ScoreboardName'], + dataset[0]['musics'][NowMusic]['set']['Instrument'], dataset[0]['mainset']['PlayerSelect'])) def MakeCMD(): log('生成文件') from msctspt.funcOpera import makeFuncFiles file = tkinter.filedialog.askdirectory(title=READABLETEXT[25], initialdir=r'./') - if file == None or file =='': + if file is None or file == '': log('取消') return else: - makeFuncFiles(dataset[0], file+'/') - + makeFuncFiles(dataset[0], file + '/') def MakeCMDdir(): log('生成函数包') from msctspt.funcOpera import makeFunDir file = tkinter.filedialog.askdirectory(title=READABLETEXT[26], initialdir=r'./') - if file == None or file =='': + if file is None or file == '': log('取消') return else: - makeFunDir(dataset[0], file+'/') - + makeFunDir(dataset[0], file + '/') def MakePackFile(): file = tkinter.filedialog.askdirectory(title=READABLETEXT[27], initialdir=r'./') - if file == None or file =='': + if file is None or file == '': log('取消') return import zipfile @@ -556,194 +528,204 @@ def __main__(): os.makedirs('./temp/') makeFunDir(dataset[0], './temp/') - shutil.move('./temp/{}Pack/behavior_packs/{}/functions'.format(dataset[0]['mainset']['PackName'],dataset[0]['mainset']['PackName']),'./') + shutil.move('./temp/{}Pack/behavior_packs/{}/functions'.format(dataset[0]['mainset']['PackName'], + dataset[0]['mainset']['PackName']), './') - shutil.move('./temp/{}Pack/behavior_packs/{}/manifest.json'.format(dataset[0]['mainset']['PackName'],dataset[0]['mainset']['PackName']),'./') + shutil.move('./temp/{}Pack/behavior_packs/{}/manifest.json'.format(dataset[0]['mainset']['PackName'], + dataset[0]['mainset']['PackName']), './') - with zipfile.ZipFile('{}/{}.mcpack'.format(file,dataset[0]['mainset']['PackName']), 'w') as zipobj: + with zipfile.ZipFile('{}/{}.mcpack'.format(file, dataset[0]['mainset']['PackName']), 'w') as zipobj: for i in os.listdir('./functions/'): zipobj.write('./functions/{}'.format(i)) zipobj.write('./manifest.json') - shutil.move('./functions','./temp/') - shutil.move('./manifest.json','./temp/') + shutil.move('./functions', './temp/') + shutil.move('./manifest.json', './temp/') shutil.rmtree('./temp/') - - - - - - #转为空方块世界 + # 转为空方块世界 def ToBlockWorldEpt(): import zipfile + global dire from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': log('取消') return else: - Outdire = '{}/{}/'.format(Outdire[0],dataset[0]['mainset']['PackName']) - with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: + Outdire = '{}/{}/'.format(Outdire[0], dataset[0]['mainset']['PackName']) + with zipfile.ZipFile('./nmcsup/EptWorld.zip') as zipobj: # , 'r' (参数等于默认时不写) zipobj.extractall(Outdire) NoteData = [] for i in dataset[0]['musics']: NoteData.append(i['notes']) - Datas2BlkWorld(NoteData,Outdire,dire) + Datas2BlkWorld(NoteData, Outdire, dire) del NoteData for i in range(len(dataset[0]['musics'])): - Cmd2World(Notes2Player(dataset[0]['musics'][i]['notes'],[dire[0],dire[1],dire[2]+i],{'Ent':dataset[0]['musics'][i]['set']['EntityName'],'Pls':dataset[0]['mainset']['PlayerSelect'],'Ins':dataset[0]['musics'][i]['set']['Instrument']}),Outdire,[dire[0]-5-i,dire[1],dire[2]]) + Cmd2World(Notes2Player(dataset[0]['musics'][i]['notes'], [dire[0], dire[1], dire[2] + i], + {'Ent': dataset[0]['musics'][i]['set']['EntityName'], + 'Pls': dataset[0]['mainset']['PlayerSelect'], + 'Ins': dataset[0]['musics'][i]['set']['Instrument']}), Outdire, + [dire[0] - 5 - i, dire[1], dire[2]]) del dire, Outdire - - - - #转为已存在的方块世界 + # 转为已存在的方块世界 def ToBlockWorld(): from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player + global dire while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': log('取消') return else: - Outdire+='/' + Outdire += '/' NoteData = [] for i in dataset[0]['musics']: NoteData.append(i['notes']) - Datas2BlkWorld(NoteData,Outdire,dire) + Datas2BlkWorld(NoteData, Outdire, dire) del NoteData for i in range(len(dataset[0]['musics'])): - Cmd2World(Notes2Player(dataset[0]['musics'][i]['notes'],[dire[0],dire[1],dire[2]+i],{'Ent':dataset[0]['musics'][i]['set']['EntityName'],'Pls':dataset[0]['mainset']['PlayerSelect'],'Ins':dataset[0]['musics'][i]['set']['Instrument']}),Outdire,[dire[0]-5-i,dire[1],dire[2]]) + Cmd2World(Notes2Player(dataset[0]['musics'][i]['notes'], [dire[0], dire[1], dire[2] + i], + {'Ent': dataset[0]['musics'][i]['set']['EntityName'], + 'Pls': dataset[0]['mainset']['PlayerSelect'], + 'Ins': dataset[0]['musics'][i]['set']['Instrument']}), Outdire, + [dire[0] - 5 - i, dire[1], dire[2]]) del dire, Outdire - - - - #生成函数播放器 + # 生成函数播放器 def MakeFuncPlayer(): + global dire while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[30], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire = '{}/{}/'.format(Outdire,dataset[0]['mainset']['PackName']) + Outdire = '{}/{}/'.format(Outdire, dataset[0]['mainset']['PackName']) from nmcsup.trans import Notes2Player for i in range(len(dataset[0]['musics'])): - open(Outdire+dataset[0]['musics'][i]['set']['FileName']+'_'+str(i)+'.mcfunction','w',encoding='utf-8').writelines(Notes2Player(dataset[0]['musics'][i]['notes'],[dire[0],dire[1],dire[2]+i],{'Ent':dataset[0]['musics'][i]['set']['EntityName'],'Pls':dataset[0]['mainset']['PlayerSelect'],'Ins':dataset[0]['musics'][i]['set']['Instrument']})) - + open(Outdire + dataset[0]['musics'][i]['set']['FileName'] + '_' + str(i) + '.mcfunction', 'w', + encoding='utf-8').writelines( + Notes2Player(dataset[0]['musics'][i]['notes'], [dire[0], dire[1], dire[2] + i], + {'Ent': dataset[0]['musics'][i]['set']['EntityName'], + 'Pls': dataset[0]['mainset']['PlayerSelect'], + 'Ins': dataset[0]['musics'][i]['set']['Instrument']})) - - - - #转为空指令世界 + # 转为空指令世界 def ToCmdWorldEpt(): import zipfile + global dire from nmcsup.trans import Cmd2World, Note2Cmd while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue - break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire+='/'+dataset[0]['mainset']['PackName']+'/' - with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: + Outdire += '/' + dataset[0]['mainset']['PackName'] + '/' + with zipfile.ZipFile('./nmcsup/EptWorld.zip') as zipobj: # , 'r' (默认参数不用设置) zipobj.extractall(Outdire) for i in range(len(dataset[0]['musics'])): - Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['ScoreboardName'],dataset[0]['musics'][i]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'],True),Outdire,[dire[0],dire[1],dire[2]+i]) - del dire,Outdire - + Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'], dataset[0]['musics'][i]['set']['ScoreboardName'], + dataset[0]['musics'][i]['set']['Instrument'], dataset[0]['mainset']['PlayerSelect'], + True), Outdire, [dire[0], dire[1], dire[2] + i]) + del dire, Outdire - - #转为已存在的指令世界 + # 转为已存在的指令世界 def ToCmdWorld(): + global dire from nmcsup.trans import Cmd2World, Note2Cmd while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire+='/' + Outdire += '/' for i in range(len(dataset[0]['musics'])): - Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['ScoreboardName'],dataset[0]['musics'][i]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'],True),Outdire,[dire[0],dire[1],dire[2]+i]) - del dire,Outdire - + Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'], dataset[0]['musics'][i]['set']['ScoreboardName'], + dataset[0]['musics'][i]['set']['Instrument'], dataset[0]['mainset']['PlayerSelect'], + True), Outdire, [dire[0], dire[1], dire[2] + i]) + del dire, Outdire - - - - #函数输入指令块 + # 函数输入指令块 def func2World(): from nmcsup.trans import Cmd2World + global dire while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire+='/' - Cmd2World(open(tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[(READABLETEXT[118], '.mcfunction'), (READABLETEXT[112], '*')], multiple=True)[0],'r',encoding='utf-8').readlines(),Outdire,dire) + Outdire += '/' + Cmd2World(open(tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', + filetypes=[(READABLETEXT[118], '.mcfunction'), + (READABLETEXT[112], '*')], multiple=True)[0], 'r', + encoding='utf-8').readlines(), Outdire, dire) - - - - #大函数分割并载入执行链 + # 大函数分割并载入执行链 def bigFunc2World(): log('分割大函数') + global dire import uuid from msctspt.funcOpera import funSplit @@ -751,293 +733,287 @@ def __main__(): from nmcsup.trans import Cmd2World while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[119],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[119], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[120]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': log('取消') return else: - Outdire+='/' - log('获得地图地址:'+Outdire) - fileName = tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[(READABLETEXT[118], '.mcfunction'), (READABLETEXT[112], '*')], multiple=True) - if fileName == None or fileName == '': + Outdire += '/' + log('获得地图地址:' + Outdire) + fileName = tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', + filetypes=[(READABLETEXT[118], '.mcfunction'), + (READABLETEXT[112], '*')], multiple=True) + if fileName is None or fileName == '': log('取消') return else: fileName = fileName[0] - log('获得文件名:'+fileName) - bigFile = open(fileName,'r',encoding='utf-8') + log('获得文件名:' + fileName) + bigFile = open(fileName, 'r', encoding='utf-8') parts = funSplit(bigFile) if parts == -1: tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[121]) return log('创建函数文件夹') - packName = fileName[len(fileName)-fileName[::-1].index('/'):fileName.index('.')] + packName = fileName[len(fileName) - fileName[::-1].index('/'):fileName.index('.')] packDire = hans2pinyin(packName) try: - os.makedirs(Outdire+'behavior_packs/'+packDire+'/functions/') - except: + os.makedirs(Outdire + 'behavior_packs/' + packDire + '/functions/') + except FileExistsError: log('已存在文件夹') log('创建manifest.json以及world_behavior_packs.json') behaviorUuid = uuid.uuid4() - if os.path.exists(Outdire+'world_behavior_packs.json'): - with open(Outdire+'world_behavior_packs.json', 'r') as f: + if os.path.exists(Outdire + 'world_behavior_packs.json'): + with open(Outdire + 'world_behavior_packs.json', 'r') as f: have = json.load(f) - have.append({'pack_id': str(behaviorUuid), 'version': [ 0, 0, 1 ]}) - with open(Outdire+'world_behavior_packs.json', 'w',encoding='utf-8') as f: - json.dump(have,f) + have.append({'pack_id': str(behaviorUuid), 'version': [0, 0, 1]}) + with open(Outdire + 'world_behavior_packs.json', 'w', encoding='utf-8') as f: + json.dump(have, f) del have else: - with open(Outdire+'world_behavior_packs.json', 'w',encoding='utf-8') as f: - f.write('[\n {\'pack_id\': \'' + str(behaviorUuid) +'\',\n \'version\': [ 0, 0, 1 ]}\n]') - with open(Outdire+'behavior_packs/'+packDire+'/manifest.json', 'w') as f: - f.write('{\n \'format_version\': 1,\n \'header\': {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'version\': [ 0, 0, 1 ],\n \'name\': \''+packName+'Pack\',\n \'uuid\': \'' + str(behaviorUuid) + '\'\n },\n \'modules\': [\n {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'type\': \'data\',\n \'version\': [ 0, 0, 1 ],\n \'uuid\': \'' + str(uuid.uuid4()) + '\'\n }\n ]\n}') + with open(Outdire + 'world_behavior_packs.json', 'w', encoding='utf-8') as f: + f.write('[\n {\'pack_id\': \'' + str(behaviorUuid) + '\',\n \'version\': [ 0, 0, 1 ]}\n]') + with open(Outdire + 'behavior_packs/' + packDire + '/manifest.json', 'w') as f: + f.write( + '{\n \'format_version\': 1,\n \'header\': {\n \'description\': \'' + packName + + ' Pack : behavior pack\',\n \'version\': [ 0, 0, 1 ],\n \'name\': \'' + packName + + 'Pack\',\n \'uuid\': \'' + str( + behaviorUuid) + '\'\n },\n \'modules\': [\n {\n \'description\': \'' + packName + + ' Pack : behavior pack\',\n \'type\': ' + '\'data\',\n \'version\': [ 0, 0, 1 ],\n \'uuid\': \'' + str( + uuid.uuid4()) + '\'\n }\n ]\n}') # 要求文段不能过长 cmdlist = [] - for i in parts : - open(Outdire+'behavior_packs/'+packDire+'/functions/'+packDire+str(parts.index(i)+1)+'.mcfunction','w',encoding='utf-8').writelines(i) - cmdlist.append('function '+packDire+str(parts.index(i)+1)) - Cmd2World(cmdlist,Outdire,dire) - del cmdlist,behaviorUuid,Outdire,fileName,bigFile,parts,dire,packName,packDire - - - + for i in parts: + open(Outdire + 'behavior_packs/' + packDire + '/functions/' + packDire + str( + parts.index(i) + 1) + '.mcfunction', 'w', encoding='utf-8').writelines(i) + cmdlist.append('function ' + packDire + str(parts.index(i) + 1)) + Cmd2World(cmdlist, Outdire, dire) + del cmdlist, behaviorUuid, Outdire, fileName, bigFile, parts, dire, packName, packDire def toScbBDXfile(): from msctspt.transfer import note2bdx + global dire while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[122],initialvalue = '0 0 0') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[122], + initialvalue='0 0 0') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[120]) continue break - - fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[32], initialdir=r'./', filetypes=[(READABLETEXT[123], '.bdx'), (READABLETEXT[112], '*')], defaultextension=dataset[0]['mainset']['PackName']+'.bdx',initialfile=dataset[0]['mainset']['PackName']+'.bdx') - if fileName == None or fileName == '': + + fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[32], initialdir=r'./', + filetypes=[(READABLETEXT[123], '.bdx'), + (READABLETEXT[112], '*')], + defaultextension=dataset[0]['mainset']['PackName'] + '.bdx', + initialfile=dataset[0]['mainset']['PackName'] + '.bdx') + if fileName is None or fileName == '': log('取消') return - - log('获得文件名:'+fileName) - - res = note2bdx(fileName,dire,dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['ScoreboardName'],dataset[0]['musics'][NowMusic]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect']) - log('转换结束!\n'+str(res)) - tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[124].format(str(res))) - + log('获得文件名:' + fileName) + res = note2bdx(fileName, dire, dataset[0]['musics'][NowMusic]['notes'], + dataset[0]['musics'][NowMusic]['set']['ScoreboardName'], + dataset[0]['musics'][NowMusic]['set']['Instrument'], dataset[0]['mainset']['PlayerSelect']) + log('转换结束!\n' + str(res)) + tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[124].format(str(res))) def wsPlay(): from msctspt.transfer import note2webs - spd = tkinter.simpledialog.askfloat(READABLETEXT[34],prompt=READABLETEXT[125],initialvalue = '5.0') + spd = tkinter.simpledialog.askfloat(READABLETEXT[34], prompt=READABLETEXT[125], initialvalue='5.0') tkinter.messagebox.showinfo(title=READABLETEXT[35], message=READABLETEXT[126]) - note2webs(dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['Instrument'],spd,dataset[0]['mainset']['PlayerSelect']) - - - - + note2webs(dataset[0]['musics'][NowMusic]['notes'], dataset[0]['musics'][NowMusic]['set']['Instrument'], spd, + dataset[0]['mainset']['PlayerSelect']) def toRSworldEPT(): import zipfile + global dire + dire = "" from msctspt.transfer import note2RSworld while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire+='/'+dataset[0]['mainset']['PackName']+'/' - with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: + Outdire += '/' + dataset[0]['mainset']['PackName'] + '/' + with zipfile.ZipFile('./nmcsup/EptWorld.zip') as zipobj: # , 'r'(默认参数不用写) zipobj.extractall(Outdire) for i in range(len(dataset[0]['musics'])): - note2RSworld(Outdire,dire,dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['Instrument']) - - del dire,Outdire - + note2RSworld(Outdire, dire, dataset[0]['musics'][i]['notes'], dataset[0]['musics'][i]['set']['Instrument']) + del dire, Outdire def toRSworld(): from msctspt.transfer import note2RSworld + global dire + dire = "" while True: try: - dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16') - if dire == None or dire == '': + dire = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[116], + initialvalue='16 4 16') + if dire is None or dire == '': return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./') - if Outdire == None or Outdire == '': + if Outdire is None or Outdire == '': return else: - Outdire+='/' + Outdire += '/' for i in range(len(dataset[0]['musics'])): - note2RSworld(Outdire,dire,dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['Instrument']) - del dire,Outdire - - - + note2RSworld(Outdire, dire, dataset[0]['musics'][i]['notes'], dataset[0]['musics'][i]['set']['Instrument']) + del dire, Outdire def world2RyStruct(): + global begp + global endp outdir = tkinter.filedialog.askdirectory(title=READABLETEXT[36], initialdir=r'./') - if outdir == None or outdir == '': + if outdir is None or outdir == '': return else: - outdir+='/' + outdir += '/' while True: try: - begp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[127],initialvalue = '16 4 16') - if begp == None or begp == '': + begp = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[127], + initialvalue='16 4 16') + if begp is None or begp == '': return begp = [int(begp.split(' ')[0]), int(begp.split(' ')[1]), int(begp.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break while True: try: - endp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[128],initialvalue = '16 4 16') - if endp == None or endp == '': + endp = tkinter.simpledialog.askstring(title=READABLETEXT[28], prompt=READABLETEXT[128], + initialvalue='16 4 16') + if endp is None or endp == '': return endp = [int(endp.split(' ')[0]), int(endp.split(' ')[1]), int(endp.split(' ')[2])] - except: + except ValueError: # 测试完为ValueError,故修改语法 tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117]) continue break - isAir = tkinter.messagebox.askyesno(READABLETEXT[37],READABLETEXT[129]) - fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[38], initialdir=r'./', filetypes=[(READABLETEXT[130], '.RyStruct'), (READABLETEXT[112], '*')], defaultextension='*.RyStruct',initialfile='*.RyStruct') - if fileName == None or fileName == '': + isAir = tkinter.messagebox.askyesno(READABLETEXT[37], READABLETEXT[129]) + fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[38], initialdir=r'./', + filetypes=[(READABLETEXT[130], '.RyStruct'), + (READABLETEXT[112], '*')], + defaultextension='*.RyStruct', initialfile='*.RyStruct') + if fileName is None or fileName == '': log('取消') return from msctspt.transfer import ryStruct rys = ryStruct(outdir) - rys.world2Rys(begp,endp,isAir) + rys.world2Rys(begp, endp, isAir) + error1 = True try: - with open(fileName,'w',encoding='utf-8') as f: - json.dump(rys.RyStruct,f,sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False) - tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[131].format(fileName)) - except: - tkinter.messagebox.showerror(READABLETEXT[39],READABLETEXT[132].format(fileName,str(rys.RyStruct))) + with open(fileName, 'w', encoding='utf-8') as f: + json.dump(rys.RyStruct, f, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False) + tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[131].format(fileName)) + error1 = False + except FileNotFoundError: + tkinter.messagebox.showerror(READABLETEXT[39], READABLETEXT[132].format(fileName, str(rys.RyStruct))) rys.closeLevel() - - + finally: + if error1 is True: + tkinter.messagebox.showerror(READABLETEXT[39], READABLETEXT[132].format(fileName, str(rys.RyStruct))) + rys.closeLevel() def world2BDX(): - tkinter.messagebox.showerror(READABLETEXT[0],READABLETEXT[133]) + tkinter.messagebox.showerror(READABLETEXT[0], READABLETEXT[133]) - - - - - - - - - - - - - - #使用邮件反馈bug + # 使用邮件反馈bug def sendBugReport(): from msctspt.bugReporter import report - name = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[134]) - contact = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[135]) - describetion = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[136]) - report(name,contact,describetion).emailReport() - del name,contact,describetion - - - - - - - - - - + name = tkinter.simpledialog.askstring(title=READABLETEXT[40], prompt=READABLETEXT[134]) + contact = tkinter.simpledialog.askstring(title=READABLETEXT[40], prompt=READABLETEXT[135]) + describetion = tkinter.simpledialog.askstring(title=READABLETEXT[40], prompt=READABLETEXT[136]) + report(name, contact, describetion).emailReport() + del name, contact, describetion def ClearLog(): global clearLog clearLog = not clearLog if clearLog: - tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[137]) + tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[137]) else: - tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[138]) - - - + tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[138]) print('生成部分及其余命令加载完成!') - print('完成!') # 窗口部分 print('增加窗口元素...') global root - root.title(READABLETEXT[41].format(VER[1]+VER[0])) + root.title(READABLETEXT[41].format(VER[1] + VER[0])) root.geometry('900x900') # 像素 print('完成!') - print('加载点击与页面更新命令...') # 音轨菜单被点击 - def MusicList_selected(event): global NowMusic NowMusic = ListMusicList.get(ListMusicList.curselection()) - log('刷新音轨'+str(NowMusic)) + log('刷新音轨' + str(NowMusic)) RefreshMusic(NowMusic) - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) # 音符菜单被点击 def NoteList_selected(event): + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) pass # 编辑音符操作 - def CMDList_selected(event): + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) pass # 命令编辑操作 + CMDList_selected("") # 保证函数使用 + # !!!!!上面这行在写完这个函数之后记得删!!!! print('菜单点击命令加载完成!') - # 刷新音轨部分 def RefreshMusic(Music=0): LabelEntityName['text'] = READABLETEXT[42].format(dataset[0]['musics'][Music]['set']['EntityName']) - LabelScoreboardName['text']=READABLETEXT[43].format(dataset[0]['musics'][Music]['set']['ScoreboardName']) + LabelScoreboardName['text'] = READABLETEXT[43].format(dataset[0]['musics'][Music]['set']['ScoreboardName']) LabelInstrument['text'] = READABLETEXT[44].format(dataset[0]['musics'][Music]['set']['Instrument']) LabelFileName['text'] = READABLETEXT[45].format(dataset[0]['musics'][Music]['set']['FileName']) NoteList_var.set(()) # 为列表框设置新值 for i in dataset[0]['musics'][Music]['notes']: ListNoteList.insert(tk.END, str(i)) - # 刷新主要部分 def RefreshMain(): LabelPackName['text'] = READABLETEXT[46].format(str(dataset[0]['mainset']['PackName'])) @@ -1050,69 +1026,71 @@ def __main__(): global NowMusic NowMusic = 0 - def RefreshCMDList(CMDList): ListCMDList.delete(tk.END) for i in CMDList: ListCMDList.insert(tk.END, str(i)) - print('页面刷新函数加载完成!') - def changePackName(event): a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[139], initialvalue='Ryoun') - if a == None: + if a is None: return dataset[0]['mainset']['PackName'] = a - del a + del a RefreshMain() - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeMusicTitle(event): a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[140], initialvalue='Noname') - if a == None: + if a is None: return - dataset[0]['mainset']['MusicTitle'] = a + dataset[0]['mainset']['MusicTitle'] = a RefreshMain() - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeIsRepeat(event): dataset[0]['mainset']['IsRepeat'] = not dataset[0]['mainset']['IsRepeat'] RefreshMain() - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changePlayerSelect(event): - dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[141], initialvalue='') - if dataset[0]['mainset']['PlayerSelect'] == None: + dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title=READABLETEXT[50], + prompt=READABLETEXT[141], + initialvalue='') + if dataset[0]['mainset']['PlayerSelect'] is None: dataset[0]['mainset']['PlayerSelect'] = '' RefreshMain() - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeEntityName(event): global NowMusic - a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[142], initialvalue='musicSupport') - if a == None: + a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[142], + initialvalue='musicSupport') + if a is None: return - dataset[0]['musics'][NowMusic]['set']['EntityName'] = a + dataset[0]['musics'][NowMusic]['set']['EntityName'] = a RefreshMusic(NowMusic) - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeScoreboardName(event): global NowMusic - a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[143], initialvalue='musicSupport') - if a == None: + a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[143], + initialvalue='musicSupport') + if a is None: return - dataset[0]['musics'][NowMusic]['set']['ScoreboardName'] = a + dataset[0]['musics'][NowMusic]['set']['ScoreboardName'] = a RefreshMusic(NowMusic) - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeInstrument(event): from nmcsup.const import Instuments as inst global NowMusic - while(True): - instemp = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[144], initialvalue='note.harp') - if not instemp in inst.keys(): + while True: # 改正:(True) + instemp = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[144], + initialvalue='note.harp') + if instemp not in inst.keys(): # 改正:not instemp in inst.keys() ,not in 为固定写法 if tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[145]): dataset[0]['musics'][NowMusic]['set']['Instrument'] = instemp del instemp @@ -1120,7 +1098,7 @@ def __main__(): else: smsg = READABLETEXT[52] for i, j in inst.items(): - smsg += i+' : '+j+'\n' + smsg += i + ' : ' + j + '\n' tkinter.messagebox.showinfo(title=READABLETEXT[1], message=smsg) del smsg else: @@ -1128,26 +1106,24 @@ def __main__(): del instemp break RefreshMusic(NowMusic) - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) def changeFileName(event): global NowMusic a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[146], initialvalue='Music') - if a == None: + if a is None: return dataset[0]['musics'][NowMusic]['set']['FileName'] = a RefreshMusic(NowMusic) - + print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event) print('标签点击命令加载完成!') - def ResetSetting(): global dataset - dataset[0]['mainset'] = {'PackName': 'Ryoun','MusicTitle': 'Noname','IsRepeat': False,'PlayerSelect': ''} + dataset[0]['mainset'] = {'PackName': 'Ryoun', 'MusicTitle': 'Noname', 'IsRepeat': False, 'PlayerSelect': ''} RefreshMain() - def DelNowMusic(): global NowMusic del dataset[0]['musics'][NowMusic] @@ -1155,20 +1131,17 @@ def __main__(): RefreshMain() RefreshMusic(NowMusic) - from nmcsup.vers import resetver print('按钮点击命令加载完成!') print('完成!') - print('加载菜单与页面...') # 创建一个菜单 main_menu_bar = tk.Menu(root) - # 创建文件菜单 filemenu = tk.Menu(main_menu_bar, tearoff=0) @@ -1184,7 +1157,6 @@ def __main__(): # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[58], menu=filemenu) - # 创建编辑菜单 editmenu = tk.Menu(main_menu_bar, tearoff=0) editmenu.add_command(label=READABLETEXT[59], command=FromMP3) @@ -1194,9 +1166,7 @@ def __main__(): # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[63], menu=editmenu) - - - #创建函数菜单 + # 创建函数菜单 funcmenu = tk.Menu(main_menu_bar, tearoff=0) funcmenu.add_command(label=READABLETEXT[64], command=MakeCMD) funcmenu.add_command(label=READABLETEXT[65], command=MakeCMDdir) @@ -1204,10 +1174,7 @@ def __main__(): # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[67], menu=funcmenu) - - - - #创建世界菜单 + # 创建世界菜单 worldmenu = tk.Menu(main_menu_bar, tearoff=0) worldmenu.add_command(label=READABLETEXT[68], command=ToBlockWorldEpt) worldmenu.add_command(label=READABLETEXT[69], command=ToBlockWorld) @@ -1220,7 +1187,6 @@ def __main__(): # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[74], menu=worldmenu) - # 创建其他功能菜单 otherMenu = tk.Menu(main_menu_bar, tearoff=0) otherMenu.add_command(label=READABLETEXT[75], command=MakeFuncPlayer) @@ -1234,7 +1200,6 @@ def __main__(): main_menu_bar.add_cascade(label=READABLETEXT[81], menu=otherMenu) - # 创建实验功能菜单 trymenu = tk.Menu(main_menu_bar, tearoff=0) trymenu.add_command(label=READABLETEXT[82], command=ShowCMD) @@ -1242,12 +1207,6 @@ def __main__(): # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[84], menu=trymenu) - - - - - - # 创建帮助菜单 helpmenu = tk.Menu(main_menu_bar, tearoff=0) helpmenu.add_command(label=READABLETEXT[85], command=ClearLog) @@ -1257,25 +1216,22 @@ def __main__(): helpmenu.add_command(label=READABLETEXT[87], command=apphelp) helpmenu.add_command(label=READABLETEXT[88], command=appabout) - helpmenu.add_command(label=READABLETEXT[89],command=sendBugReport) + helpmenu.add_command(label=READABLETEXT[89], command=sendBugReport) # 将子菜单加入到菜单条中 main_menu_bar.add_cascade(label=READABLETEXT[90], menu=helpmenu) - # 窗口内容 - - #上半部分框 + # 上半部分框 UpFrame = tk.Frame(root) - - #左边的框(音乐总设置) + # 左边的框(音乐总设置) UpLeftFrame = tk.Frame(UpFrame, bg='white') # 大标题 tk.Label(UpLeftFrame, text=READABLETEXT[91], font=('', 20)).pack() # 按钮式文本 LabelPackName = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[46], font=('', 15)) - LabelMusicTitle = tk.Label(UpLeftFrame, bg='white',text=READABLETEXT[47], font=('', 15)) + LabelMusicTitle = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[47], font=('', 15)) LabelIsRepeat = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[48], font=('', 15)) LabelPlayerSelect = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[49], font=('', 15)) # 绑定按钮 @@ -1290,12 +1246,9 @@ def __main__(): LabelPlayerSelect.pack() # 按钮:重置项目设置 tk.Button(UpLeftFrame, text=READABLETEXT[96], command=ResetSetting).pack() - #装入窗口 + # 装入窗口 UpLeftFrame.pack(side='left') - - - # 中间的框容器 UpMidleFrame = tk.Frame(UpFrame, bg='blue') # 列表 @@ -1304,21 +1257,19 @@ def __main__(): ListMusicList.bind('', MusicList_selected) # 设置选中响应函数 ListMusicList.pack(side='left') # 滑块 - tk.Scrollbar(UpMidleFrame,command=ListMusicList.yview).pack(side='left',fill='y') - #装入窗口 + tk.Scrollbar(UpMidleFrame, command=ListMusicList.yview).pack(side='left', fill='y') + # 装入窗口 UpMidleFrame.pack(side='left') - - - #右边的框容器 + # 右边的框容器 UpRightFrame = tk.Frame(UpFrame, bg='white') # 大标题 tk.Label(UpRightFrame, text=READABLETEXT[97], font=('', 20)).pack() # 按钮式文本 - LabelEntityName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[42], font=('', 15)) + LabelEntityName = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[42], font=('', 15)) LabelScoreboardName = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[43], font=('', 15)) - LabelInstrument = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[44], font=('', 15)) - LabelFileName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[45], font=('', 15)) + LabelInstrument = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[44], font=('', 15)) + LabelFileName = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[45], font=('', 15)) # 绑定按钮 LabelEntityName.bind('', changeEntityName) LabelScoreboardName.bind('', changeScoreboardName) @@ -1331,21 +1282,20 @@ def __main__(): LabelFileName.pack() # 按钮:删除选中音轨 tk.Button(UpRightFrame, text=READABLETEXT[102], command=DelNowMusic).pack() - #装入窗口 + # 装入窗口 UpRightFrame.pack(side='left') - #上半部分框容器装入窗口 + # 上半部分框容器装入窗口 UpFrame.pack() - - # 下半部分框容器 DownFrame = tk.Frame(root, bg='blue') - #经典名言语录 + # 经典名言语录 import random - texts = open('./resources/myWords.txt','r',encoding='utf-8').readlines() - tk.Label(DownFrame,text=texts[random.randint(0,len(texts)-1)].replace('\n','').replace('\\n','\n'),fg='white',bg='black',font=('DengXian Light',20)).pack(fill='x') + texts = open('./resources/myWords.txt', 'r', encoding='utf-8').readlines() + tk.Label(DownFrame, text=texts[random.randint(0, len(texts) - 1)].replace('\n', '').replace('\\n', '\n'), + fg='white', bg='black', font=('DengXian Light', 20)).pack(fill='x') del texts # 音符列表菜单 @@ -1354,42 +1304,45 @@ def __main__(): ListNoteList.bind('', NoteList_selected) # 设置选中响应函数 ListNoteList.pack(side='left') # 音符列表滑块 - tk.Scrollbar(DownFrame,command=ListNoteList.yview).pack(side='left',fill='y') - + tk.Scrollbar(DownFrame, command=ListNoteList.yview).pack(side='left', fill='y') # 指令列表菜单 - ListCMDList = tk.Text(DownFrame,height=37,width=40) + ListCMDList = tk.Text(DownFrame, height=37, width=40) ListCMDList.pack(side='left') # 指令列表滑块 - tk.Scrollbar(DownFrame,command=ListCMDList.yview).pack(fill='y',side='left') + tk.Scrollbar(DownFrame, command=ListCMDList.yview).pack(fill='y', side='left') # 下半部分容器载入窗口 DownFrame.pack() - RefreshMain() - # 将菜单添加到主窗口中 root.config(menu=main_menu_bar) print('完成!') - log('启动root.mainloop(窗口)') - if len(sys.argv) != 1: - log('初始化打开音·创项目'+sys.argv[1]) + log('初始化打开音·创项目' + sys.argv[1]) global is_save + global dataset is_save = True + error = True try: with open(sys.argv[1], 'r', encoding='UTF-8') as c: dataset[0] = json.load(c) - except: + error = False + except OSError: print(READABLETEXT[8].format(sys.argv[1])) - log('无法打开'+sys.argv[1]) + log('无法打开' + sys.argv[1]) return + finally: + if error is True: + print(READABLETEXT[8].format(sys.argv[1])) + log('无法打开' + sys.argv[1]) + return global is_new_file global ProjectName is_new_file = False @@ -1398,7 +1351,6 @@ def __main__(): RefreshMain() RefreshMusic(NowMusic) - # 进入窗口消息循环 root.mainloop() log('退出') @@ -1409,5 +1361,3 @@ def __main__(): if __name__ == '__main__': __main__() - - diff --git a/languages/__pycache__/__init__.cpython-39.pyc b/languages/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f925bdd73c690410c3173e5228a92cf82d522e38 GIT binary patch literal 182 zcmYe~<>g`kf@1GSi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o1Tj$n~*`F$m8u z%1QApEzV4KE=o--NiEX#b@L5Y$V)9(NKMHs$;{7-dA6|a*}QErWd?eNdIq|A`6UXu yl?tT=DTyVCF*%8O>7|M3sl_qz@tJv+iMlWap literal 0 HcmV?d00001 diff --git a/languages/__pycache__/enGB.cpython-39.pyc b/languages/__pycache__/enGB.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81ade0e8e5425f978b1b28e0c4dd6e3d5dd80972 GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/languages/__pycache__/lang.cpython-39.pyc b/languages/__pycache__/lang.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ae2ac3b70a88f5315eab4b95059130080602bc2 GIT binary patch literal 492 zcmYe~<>g`kf@g)#6Av*mFgylvkO4E0;{e3PHb5eUA&Mb|F@-6Gc@9$)V=9oJ%~Yh4 z!ji(8!<5S$#mvZ%Cjt~@1BzOJMOh%CDeS=vnjF7at1@(*{WO_MC4pu=U)S(t@8l;t z);^oot^lN-&ffcU$?}&o+p3g;Gjj`aGSf0sQxu#tGV@Z4Q+2?MLwU#wrN0Mz|tNAJ^)=`R;8sFHIk$}Gt&&QNg8OV0t)ItuPZsfi^DAYq^x znoLDN&ocaCP0iDFcX|nAGH5d1;t6tfba8a@aSd^e2q|I$3i@fX-r{$0b#n~$3Gs3C za}RZNca7qKv3xv(L!$VA?ny6AOiwM=tIBZpD`Ej^Ll#WUb9Y+FP{all1`}UHfGi)Y z7=!TqqMQ`p(&EfyXOPoUi*$Y6e1jG8Qp*)mQ-F@o&x?7su_0SOjnCKjgOY}_1-e2g57099?6 AqyPW_ literal 0 HcmV?d00001 diff --git a/languages/__pycache__/zhCN.cpython-39.pyc b/languages/__pycache__/zhCN.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ed1447a03126e686688fde0bf962bc6a24b6e71 GIT binary patch literal 5844 zcmcIoTUT4v77o;EMeF^3jrXDwsrG{P*1J|qwJlmN^&BG;D;7uvwzaL*KnqC-5NIiB zOK6~StEU7i+J=O{80Y*8A8XdWoR^-L^M2;H)+QuSJ3J54(QhPs%{A9tbItj!Z^ylK zX@P_P^sf!~J@+{rzvD~xUkiU(%m3>h%5yl#L3xxa=t+8to~CDL85PpA^c+1; zMdYFvsF;@1i}Vt$pp~?WR#OSROl#;BdX-+I*Xa#fOY3MoZJ>>`i8j-l^cHQQx9J_) zN~N@o-lg|wJMEyIR7UU92egYmq>t!h`h<4Vr}Q`aJAFoO`kcy%sDi$rJ@h42(pR*X zs;HW3$V2<+YpSI>swa)Uq5bqN9iW4Bh`yu4^gaDRUTUC5IzmUOiJHkrehNeaA3LaJ zr=u`fm{*vu-Nm`Ge4WPhjB`_ERaHfuQ?y5ok(n~>MvQcwGRMX)_qNJ!dZ@z~NL=m> zYfti+9&fTv4ODsdT$%FgqXQx|n2xuZsg!6M)Wd^fCVXWopgjh|aGySLLYb=(5o$@t zf6>Di^=@A}c~LqSmwpzbCq?6kb`R!skBel&X+g!upv?&Q^~ia- zinfKF2w!VD(W(18IqY=2+c?q6p@>kY=s9bhj28SWT%at>Sicbq>yd;=bQxVEW@?O6 zm2IkB&)zsR5j(Bj${%?HDq;@PI6qW)9Ut#fe$K(l1x#;~vuLyZFz3w63iA)%t&V?} zyJoFNtFQ8S_PWYF)ogxn>Gti;7gw!Vy>i9s6{|}&+dhq%q&e0peabADu@N(tFs29A zI7?P7UsbZAWaY~Xk`|ANmUFUtGN))AJ8N|OB7Pi4)O?W9iS%TLT^Dz&U8&=CmTuX& z#c7W`oHL>}%tM^$S&KVh(SAvUy47fUreALun>{ejkA7lYZ;OfMQ+&pU4r`BOdsM3! zT~XcNfn!Rw8L5~o=1knmL<~&Mw|Xkuk*m6VpSyhT)%_tv(c7W-`BZSGtT*kMYzL}B z{%|q$S0*IkOYx>eYt#IY9?G_Ia!g-nHRbh{o|@TYJ)Uh~MZD%vL&k^ebNW`Tulh9B z%1OB#>C$9|Rf`-O)w`xGZ&W0Pl##!O+czB_z2;{0fLBCD=JE^1;mvSKo3Q~6hp&Qg z?KrTrzE&%*&kkeYg89oJn2B!zht(KEbA;NgA%9LT!6khDibRT>cGVX-`M|+^dSKY> zZxyjKX>QeyHr1pUNT+7dbFqHmZ`ONf<_0)s9ze{K9pco;+<h4=ZavnSPbJXMTi`P#%lRv1S6IT5?4>OZp@dObZ8)4L|q@uV4>MrqDHGg}(% zXV1ZHJg)mgqPdBURK#MaF&z)`!klSUaAxoVC$>Pl7xt1EXEUZ))#Y-@vsPnzczEvd z%`%i;CT^R6@j!%z_(3|Jz(jDA<@E|*LVmPQ5NDQ7wyWMReeWePHpN}2lBeCN2CFNn zGUqwSpC_>kZgb@*XI!#{tVedl4Q~1-Y>$#Cr@GDQPPq|PRmuY!AqT7 z>(o)v(#OY{GgBV1Y`kSWR4B%T%4*VIXS%&kSf@iV=P+2p2j$Os?v)8tr?-~hL%%v4&^2bLaI{cYF;q-7D zsdVd-K)AxO+2!_H-T)JbIzi+yYbQ1>WQYl~9+m4{P&q?g_!2n592>|MqicapF1^4R z>XTEWf>WDQ+rglnH!(15*NVSc1b!Bi7n$;me*_h$SjVSfi+(VtoA}lfEm8AGO4gsa zaDsJ|+JuojuAhl$8?m6A&UXz9iz-jKyXs3%UHzJp;*#QYyoFP>zvA;cPx;=8dOgx6 zTKYL#Ds4;;nM6q&D;%Xz_qP0~ zbdO9>sMGQ`D2X_$>p;LN200}iZ#TL-t#C}kg{^u*_u8bjOmT){t3sI>=07H??B|*j z>q{Y}NWebb$_=~qUKnVRe{>xf1)SPDiVGR zwv8jUW}8)%tV(UFO*QM0pHya8EGoJdO?=yc{pPJIL*{VX6?85degmbJxO{JxqON(8_u2t&va>gYYH;q_F zMr?1GuuyMVXFKiX@oH7dw3`(Tf6TD0Jfh6Cp_B`6NVYhq&XnBC^`rMqiK&nt3Glmv z64rdKtmu`&m8k|Pwz3tl-Q04c_Tsj(QFAgqWizN0P5=MWzk3@s`<&;fN4|ofLTn+v(M%7Nf^2pDcw0IZfiqjGT{TFfCoaaA`*GDHR9vr{-F5Zr zwaO~0sFjU>)ZVO=QmONL+gUvBjdG3(Sfa=qFYYylk8vE9yiv?w$Azy?53)#zYGv$F zZ{_X}D$OK1+S!mbmAdws6_k!C_tex>uzZpfYR;U|+Xr(A2D92GL}*MgO76ZyYeGb$ zN`xS7{4y~doZDAU4(8da-OSmpLcjqp`+^}~i;}1DA}C+Dl=9@3GEST_&L#BmE_Hii zuTW*20@*VQa;MUWUXzj?xdTI~$ExcyBbmX-dBu-n{4`oyz9ZpK(KcMpyj5d(Ty##! zvR4nxhAv|wiJ+!JQZs-t#wMBISj?gFLm_i!Tzi>4K-rE2MIvP9prf5Hlx!BB_Y$mR zE7pJGk7jd`rl(H-DIbzZq()ToQ|>`AnW`hDKV_uq@jR(npihi24RImzy8z1`zJj=% z^x%0Bx^&qa`Q+2f-d=fwsM*XB?3bl4l8`H^uV$4|(Z=wYQrN22WyBd@%1X&r?NfCs z<}AtBYIgFX)q7^4%0=JGk}{IRMsk!Tdp1Fd(J+e?%03OLq+XtZ!f7GBV;TL6&o z)@=Z=fdv(8$)blgwd9KoD8xcxTlk^FlDCZHbiCkM@`}Z4tOYG(IRV&{g||EF2>=9; zg%?!oX#iT+S_UWtK;&6?Yp|XNK)G2izzcw40JNF)BH$&!3cyMLI@?+eC;^}YtTljF z0IvdG1H2AEgj3Kk8vu|&)+WGaz?%RNwzUQDHsBq=RzN9W8{l2Qdw}hL9e|wx z5Tx}!-~+%ez=wd303QQB0el8<1HJ%M0=@$51ylj50W|;*U?1RXKrNsSP!G@m-vIUl zz6Bfr90VK!dW<34+sES06{=2pbgLt2mv|(oq%Hu z+Y0l3yLrc^bsN{M-@2)6(}!i}9JQD#;lIez)-}6}cX?{7NdAbmLH&wV#NuM7v!-Id zvw|w|d%(!t;xAQhZB`Gn1W*QWHy3i*$Y6e1jG8 uQp*)mQ!-03^Ydb!Eo^%>Z(B^6fu5nBfo@)Yi9&9rLTN!tVoBn}Jaqsg+aFQ@ delta 62 zcmdnOIF*q*k(ZZ?0SMxGI45%3sG9?sZdNhjx{;nS0Y&-gMTxn&nR)3kFXwMQwEbzv Q?3m{(x}WaqpV+Go0Q$`qXaE2J diff --git a/msctspt/__pycache__/bugReporter.cpython-39.pyc b/msctspt/__pycache__/bugReporter.cpython-39.pyc index 035dcbe50b7105af12120fa10d83b8e01b16a115..81e0ce238b893acb2a90aeb9e638b0d4db4040ca 100644 GIT binary patch delta 2717 zcmaJ@|8Eq>6`$E}x3_mT#yFfE3~UU6T*@78X#=Gw4FaW=5-ilTBCK3(mYW5yy}Ngr zoyGNOk25-x21k)Whtew0#+MY8RxP4R)h|F2sg)|VQvZQde`DtPtH&?H|-M#gj z?#Kwt7{)!>D+Iw{`P8T@q@L-C%?N=5netE!CpN&Iew;0U2-Z6oYDzu zTg;|~Q!k%-P513t-6jrm%Kl`x^;Y-if0(>DUi@ltyx^Ca?#=08g;>mLj*8#KrR!Tq z>IcA|jSLJwKp+^lm$4;2hYvSIz1dbj(oEP9d0dJhy2uH|7kpL7&B2eI_QLu~j^k^Cf&y#qTh_F2=tij5o z6^mM)&Lh}#!t!jrx6!rvE1hfauKx0#rY8?r);CN~lznEE*oO7mcm2bkc9)jcKD$SEz!vBzkO{gAXkKbdf$g5BySZNHnj>tA}Ahvi2 znGEqzte-qZw!_H13p%Y)>ZcrLxXjf{~!^%f)s)I%VQUBIy4r&_4R!^&hYUwj7nMFw9>+&o4#4IGZb?6WKvX$_o1J*%^b2sQ1J=4-w0I2z|Z_VL+EsY`04EDw|YJah~K z&xPNF<68Noc}D*0?m=MJKlu1Bf9$+{Q!nVBZQn(&nssb~HoBxW!jE;qhY6u`jy6`Cs)|@dzk`7l9x_#o1)2 zm=8r5!2QCYZ~*vzydCIZ^NsX~RUJ&KIo{v*VoaIHiyO^DcY?coinoOiEo_=?%{09- z30=--P4msra+8^qX_9iuH0eQDL-%lUsChS?tJ9}}e-7S20it3F5B0~o5{R1~5u}&k z4S4r$f<(cPII`cuF{(=dh%uf6AacY>w^J8w8UP67HAC_oQideL8Q83vvFb5XD3z&Q z)q2{3e~uYDD~{!tO-3!BgGhyA2sHnBo7#TKHq^>o#qsAH-^f&e2F!9@n;LRu?r@bF z+N^ypD3@kz78o)s)6!I4sLJC-0D40{X}ipt$YT!EEUZ(16G(8tcnq&YATR(>4z2Ko zzBJ(?gP(*a@&e^Y+D^O9IcibI4)VBH0|{tBf;nczsdj;h(+h_$s<=9kXOAT2p|<;3vWJHrV+^MfO?sOi`!|k(r;|^TrlqVk!N3FOPJ71>WL|dM9 z{6k-Br;eXKee(GCk5~I9<7>Tlt51g64R`mO|9SX+b$exwO~H**@brpP(Ua=Xs|WOg zqfaqb3635-$m^%bLceYmS>X5=rb4S|ldxFw4+f4`acx6(9Y6e0RS!Z^)~yOFT(H?= zXT1=I3J{>W`%5j@Om**<7}O6H*o@=D|C8!yY?gR_a`(_hVlWrbZ^5sP(WtEiQz3I) zC}WRN+iokcKij`Zk8%rs*MY@cz-%us_X_jzQu=K^iyeNy){|S7A4+>5$ZVZ7VvO<<7$9m9ILcsWN~%)QCUCfCZD2T2OsnsoV>tEyh+|bsU8-c?N(=MBLPwBvvt zFoJHd9S3#MkX(@?jtF9dYjac&xf13Q%bh@jxFIL#5C}D>gSV<@i4(+2@1<&%K-eL1 z0+BeuatBsJzU&APZL^)oa#-y`PtnKl9N%QZB6PC`wgNrSixz*zBP-Y{#)lfz4>t+) zL4SjHWf*W|7{pFPs97g)7{z25-ft!E%O#lH!&!&-BTeEej^cN~NV}%^QAomQlVStK z@5DH{%;A__P10mdMHpje7l?UMAP#>kw#hxPIpV6QH;C0EcDJK8@EUAaYJn^gpsu>A zn)05XCeutL#mcLpRoRjJ9`CyNeTe;@?TxM7M~{EKe*62$`$R2K! zTO+Kb?v+-wB50PCM5-m5#!|Ib$>{jhMv<@twlTQZ)$`@WRM;9~{9y*e48|EG7%4BUr>TWclgy=gs~^2J sz+jLSgqBz+KzXT9u=*G|!C=aJ9*xIaQr0L#P1j~Al2tahAjy;e0GXlI1ONa4 diff --git a/msctspt/__pycache__/threadOpera.cpython-39.pyc b/msctspt/__pycache__/threadOpera.cpython-39.pyc index d42baa19d2546dea3af173489d2d879c965b34e8..47fc30445d2f2a99a48f8ef76cad5a4428c8b514 100644 GIT binary patch delta 96 zcmeC?SjEAe$ji&c00hO}k2Z48VRVZGvVE*#48rq^a#DOti!+m*i&7IyQj2tb-F$-; x@>0tcQd2TZGV}9do-J&9Hg8)@nSq|6o`G&&eu+YEr9x>zN@7Xk=5vg;OaPB9AZq{s delta 65 zcmZ3*(aph~$ji&c00fI{OE+@QVN|yQvfZp=!gV7(V*-lu(~A;wb2IbOV_weRd}#aA Tj@dEKS9Cw!)xY^Iqb(BvaAO!@ diff --git a/nmcsup/__pycache__/__init__.cpython-39.pyc b/nmcsup/__pycache__/__init__.cpython-39.pyc index ab1ed7f808b168aa01635fe2aec5ebf397338aa9..50caa78094ad5a2961984f37647fcf408b1fe833 100644 GIT binary patch delta 93 zcmbQixS5eVk(ZZ?0SJn{A5G-8aSH`9eXL>(!t;xAQhZB`Gn1W*QWHy3i*$Y6e1jG8 uQp*)mQ!-03^Ydb!Eo^%>Z(B^6fu5nBfo@)Yi9&9rLTN!tVoBn}A~gUcRUcLW delta 66 zcmdnYID?Tpk(ZZ?0SMxGI45%3Xj=i9ZdNhjx{;nS0Y&-gMTxn&nR)3kPj*auKDFoN U{LN20X2(2V(fxE+|HNK30AVN@F#rGn diff --git a/nmcsup/__pycache__/const.cpython-39.pyc b/nmcsup/__pycache__/const.cpython-39.pyc index bf7c4fad02b55bc8d953698657c21192f018ce2f..67d62770d59218183e748ed7f441e708a84128f4 100644 GIT binary patch delta 120 zcmbPbveSe+k(ZZ?0SJn{A8q9B6lRRtJXKhn5lF2S>0}P*1NawB3Nzl?JXKhn5lF2S>0~zS2g($Ih_A*#!p$lsTsP7) nCZH%ky(lp^H#09i=H>j&hqgcMm>u(cMfcNP{hQk)HZuYM!%HBg diff --git a/nmcsup/__pycache__/log.cpython-39.pyc b/nmcsup/__pycache__/log.cpython-39.pyc index 9d4bdfda7b386b611b14862817ff9ab272587039..386b007129a7876677a37acbd0d63526f9940542 100644 GIT binary patch delta 351 zcmey$x`mB5k(ZZ?0SJn{A0-A% znaRqGYAiL3MYAS*GCrw;0n_G89PySziNygpXB>L3n;qPKs}7ab~h} zQEFmIYLTw5n{Ti}UTV2QYD#8FW`17GvxRNX=5329Gte{CGtkY;FHy*?R46S-Ni0c> z$;(YHE-i@3$xqiSsJz7tq(R;+<^d86OgxNSj1tj|Zj3C9Mbbb4O{O9iAQhs?d5b+h zJ|#anKE6m4C{V-;B1Axh7?8NdUX)splbD=ZBn0BIB<1Jlfc1l2jzmaJzR4s50G{<% A@Bjb+ delta 287 zcmdnO_LY@4k(ZZ?0SHu<#w99G7&4;!>?U)_&d`0)uUHvh6 zxyi+)1u;4K>3Ri~x0r!6$i2m2M>Fv-axqFUx-k|>0mU>Ki&#Ju$1V2w_>}zQ`1m3b pAiszQNaz&_gP5W~;ud>RYC%q7a%zzvNC>18>>?yWa0tcQd2TZGV}9do-J&9Hg8)@nSq|6o`G&&eu+YEr9x>zN@7Xk<|j;D>;Sp$Ax8iJ delta 65 zcmeAbeJ8@5$ji&c00gEh>Naw3Vp2B;vfZp=!gV7(V*-lu(~A;wb2IbOV_weRd}#aA Tj@dEKS9Cw!)xVjUxr-eDi7OaI diff --git a/nmcsup/__pycache__/trans.cpython-39.pyc b/nmcsup/__pycache__/trans.cpython-39.pyc index 762587c5a1d133babc5d6afaf3b6851d4d4dfb7c..2be7a568d57aec60039979a833cd7f527b5b6c0f 100644 GIT binary patch delta 1323 zcmYL}&u<$=6vt;~f7po~*VvKm#7^V}l++|ONm>C)ofL&ODwITsQjoSz(~Wl>HgR^- z*>ytFHI|wPf{;MzT&RRlbLfExaj}HNi30}?^dG?DfB;3}QX#mZs^Yy(OV*mtzW3(M z+wYs*@%Jx3d@-hXb#)TB+{?e|H=f;#maN;>y2)L=wy0#j%g%=`~HQ z>J`ggYRjvRVe)D5DE=qa#NjiO5lyNXHU2`Np_n++tEG-hF4mmN%7STombb}uaVs%T z6XNH@AocDfhdM*BMuOpfEyj}R=EuaK4cU`D#gM*WACW3GWJB4BHWZ&-AoE5;^{Juu z5JOE9BebG$4f7#J6@t;1pje6ciZA)9L3<#Ea{*zMFQ?HD_mCxNn^EGaz6^OV1Jydx zWcvgZyE(o~?uGUVCA&mCNamUa)>eWh+R~ciRv4&#dZBs+MiPe00p9WRSP$7|W!7K~ z2?|o5`H~^+OGj!!tL(FGlEHk)1W!Vbk%rPxcgZrlCwb7hPqv$EpZfB$0!;<2`)XAx zLG!-6pc-NL(mJ-%pesL-uUW2l&9c3bCu2T%y?h#U@oR`OK?nj6L@ZLVpxjC z=m7k-`ls>RaL0qgQ7nO@*W9V%(*u!$uYaQ%9|(7_8}@D0QwqJkI(v}N1{ zei{85Vif?|ucG}9qK*hw;`hpLA;uAb=q34BmN;;&=MYlw#UAv2l# z7fe?M5Rl4u;9g)HMa~p@#Yi?=3^a^EfS*B}LmchoqT|%~Ec(G7SHaRmJ$n`o{Xw>v e@^GdBXv>CG@%U}@cf>#0LE0~RbNy0ZJoO*(LNd|- delta 1545 zcmYL}-)kII6vywKUpxCVn@zHt&BmI>xM7TqwUt_8(-K=_D{Uw(wRBn8O!iK~Ci^3M zXOcGUOqV2L)f6-t(1?Obp`d-}%L!p9J54}X6S)aV0888Bd2)D}mK9kr%*8jGg>tSt| ziS}$WM9&I?N1@~RNdD@fYv=M8d2NR4l}f2Pli&Tk`Tf^B?|z#9{fo7oZ$D^mihqeT z=YAa6q$AD4>d!*w3Fyg35hoF+0G`_yeoVh=wna85jkx!sCnKh3%S@RQKBRoleH0y} z18yj`CW>5bZpQZLz$@7Ibp*u$Iu@#>MT47qxd6*Bid>(zJolS;_9-u1tW{abD%Glb z*;A(VA}rIBDm7;CG562-F7@1<_R+8>7Fn6U;IHOT;wX6aM7Lx>+Z{`Hxf_YsXs`QI zB1>)e@5Epz3W3w`nD^Yn9jS&RG3v;+aE83K=qNU2Vwx~9MVK@v^Km~$8I=ioUnU|s zL2PMDf;^fgt!!IPp(R6x!UC4eR9mzajHk(}u&q#HDYgtA7#YS5rpPMJC~XC{32l)2 z0WeiC2_tYyp$We(Us6wbwOlLCnLG=NH1*|^QxG;s&@d=E+fv6)mKnw6IXupYY5dJtOT3B`{ zbJG2-tGzb~4MHO{L?x=yI519+&`xOcXEPrx)K0D;x=_u#Eb{(e2hv~+IGdy-LQ^PXHX z$4b2DXJR&7ZSdfS=*#IxFf6h~ZL&=rsYD#v68@EmfMQrhi9K`_-z$K41O{Afp!*{y z;JZN~;0F51w;dIR30j~gTU{0Mf)jGWzWPFTm`U5B6R{(+GCT^XOSVIuq?_0QTLn9e z_B4!?CQj6jS^?DNsxT+;2e!x`)XzgNbt`Bq4eT&2GO{f=F*`aNqQs6N>*wpo>V3W@ z)s`k(LfaQ1pM)LrYk-`nm$(-GUscJYacQo-8k20}KY@Mng1F%dZVo?PI0 zu>Jihh^4c&`74oV@#T(e`sYQ^P=PqJ{NeIyISjVS0dFceTN{t=jK6zO>&{mfs`F>U zNR`{$eC+Wp)M9hML5jo&=7--aLdfOJy~xSIRmgxGNR?Oz~BkcGPx~P(C!$3 zkAD36@ej8j{gOQWZ8!OYel(z(L{hv2CT+)}8LEoq(JR8PFZV$UxyjPcep&nnKs{-he2yM>!tBP0yhb zmftFiQv(h3_JPeZHqfyH4eaLjkbHBtPkLm}=^@UJBkoN0r6nst$&7_Q*KV#|LEN>V z(nE?-SX@Bz&R`zlw0#azx$98vA=EtFp9+=J6LQe7qnUK-X_OQtN{d@3T03&{x7PTX;eFS^PNNKlorqqmTNC2^p(wBphd28 z3NGNu&E3bp-yPq-`|#HXC#`k|ZAjdz2TFU(i^=le$rCicDyP~lWHh8Jz zL=gsU#SOKgS@303Dyi9epn|X~j)Ey!W5?=-208Xi8WB$es*t-bFE#QT zybNS68lnk+N}xpIA;=P+BVog*;=$3MdsrbR;n2wEJo#0KN$mJpG&6h-nm2w5nj_XZn$t&Lf<>Q-Gm93+G-Xu=WkqmJb_9IUVHMXcLRUqlTW+B*3X?U$xHcr>)xy!gIK5hc35b{J0*77;`Q&5aU!X6}`|p zqjy^S{bQ18fW55f`L5tHKshZ|?v0G|)@1igj2BJfl>d9nn)7fD!gm>Vif#Zz+He-P z;qy_i&YO}T@+{E&c(kK;E_cE-hxuvA{FN7jyTT1Y>lQ2u3LwM6&%!rn#CoB?0;f>m yJy0jc5~n;POL+#~D?#o)BAm2H(r8>M1#IDD(H(-&At5=cQiW>9DT5e#bM_Y;c>5y&