keep MultiMystery.py console open in case of crash, as users typically don't know how to keep a console open
This commit is contained in:
		
							parent
							
								
									1c736f8afe
								
							
						
					
					
						commit
						2ff2b5b30c
					
				
							
								
								
									
										133
									
								
								MultiMystery.py
								
								
								
								
							
							
						
						
									
										133
									
								
								MultiMystery.py
								
								
								
								
							| 
						 | 
					@ -55,70 +55,75 @@ def feedback(text:str):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    print(f"{__author__}'s MultiMystery Launcher V{__version__}")
 | 
					    try:
 | 
				
			||||||
    if not os.path.exists(enemizer_location):
 | 
					        print(f"{__author__}'s MultiMystery Launcher V{__version__}")
 | 
				
			||||||
        feedback(f"Enemizer not found at {enemizer_location}, please adjust the path in MultiMystery.py's config or put Enemizer in the default location.")
 | 
					        if not os.path.exists(enemizer_location):
 | 
				
			||||||
    if not os.path.exists("Zelda no Densetsu - Kamigami no Triforce (Japan).sfc"):
 | 
					            feedback(f"Enemizer not found at {enemizer_location}, please adjust the path in MultiMystery.py's config or put Enemizer in the default location.")
 | 
				
			||||||
        feedback("Base rom is expected as Zelda no Densetsu - Kamigami no Triforce (Japan).sfc in the Multiworld root folder please place/rename it there.")
 | 
					        if not os.path.exists("Zelda no Densetsu - Kamigami no Triforce (Japan).sfc"):
 | 
				
			||||||
    player_files = []
 | 
					            feedback("Base rom is expected as Zelda no Densetsu - Kamigami no Triforce (Japan).sfc in the Multiworld root folder please place/rename it there.")
 | 
				
			||||||
    os.makedirs(player_files_folder, exist_ok=True)
 | 
					        player_files = []
 | 
				
			||||||
    for file in os.listdir(player_files_folder):
 | 
					        os.makedirs(player_files_folder, exist_ok=True)
 | 
				
			||||||
        if file.lower().endswith(".yaml"):
 | 
					        for file in os.listdir(player_files_folder):
 | 
				
			||||||
            player_files.append(file)
 | 
					            if file.lower().endswith(".yaml"):
 | 
				
			||||||
            print(f"Player {file[:-5]} found.")
 | 
					                player_files.append(file)
 | 
				
			||||||
    player_count = len(player_files)
 | 
					                print(f"Player {file[:-5]} found.")
 | 
				
			||||||
    if player_count == 0:
 | 
					        player_count = len(player_files)
 | 
				
			||||||
        feedback(f"No player files found. Please put them in a {player_files_folder} folder.")
 | 
					        if player_count == 0:
 | 
				
			||||||
    else:
 | 
					            feedback(f"No player files found. Please put them in a {player_files_folder} folder.")
 | 
				
			||||||
        print(player_count, "Players found.")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    player_string = ""
 | 
					 | 
				
			||||||
    for i,file in enumerate(player_files):
 | 
					 | 
				
			||||||
        player_string += f"--p{i+1} {os.path.join(player_files_folder, file)} "
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    player_names = list(file[:-5] for file in player_files)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    command = f"py -{py_version} Mystery.py --multi {len(player_files)} {player_string} " \
 | 
					 | 
				
			||||||
              f"--names {','.join(player_names)} --enemizercli {enemizer_location} " \
 | 
					 | 
				
			||||||
              f"--outputpath {outputpath}" + " --create_spoiler" if create_spoiler else "" + " --race" if race else ""
 | 
					 | 
				
			||||||
    print(command)
 | 
					 | 
				
			||||||
    import time
 | 
					 | 
				
			||||||
    start = time.perf_counter()
 | 
					 | 
				
			||||||
    text = subprocess.check_output(command, shell=True).decode()
 | 
					 | 
				
			||||||
    print(f"Took {time.perf_counter()-start:.3f} seconds to generate seed.")
 | 
					 | 
				
			||||||
    seedname = ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for segment in text.split():
 | 
					 | 
				
			||||||
        if segment.startswith("M"):
 | 
					 | 
				
			||||||
            seedname = segment
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    multidataname = f"ER_{seedname}_multidata"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    romfilename = ""
 | 
					 | 
				
			||||||
    if player_name:
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            index = player_names.index(player_name)
 | 
					 | 
				
			||||||
        except IndexError:
 | 
					 | 
				
			||||||
            print(f"Could not find Player {player_name}")
 | 
					 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            romfilename = os.path.join(outputpath, f"ER_{seedname}_P{index+1}_{player_name}.sfc")
 | 
					            print(player_count, "Players found.")
 | 
				
			||||||
            import webbrowser
 | 
					 | 
				
			||||||
            if os.path.exists(romfilename):
 | 
					 | 
				
			||||||
                print(f"Launching ROM file {romfilename}")
 | 
					 | 
				
			||||||
                webbrowser.open(romfilename)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if zip_roms:
 | 
					        player_string = ""
 | 
				
			||||||
        zipname = os.path.join(outputpath, f"ER_{seedname}.zip")
 | 
					        for i,file in enumerate(player_files):
 | 
				
			||||||
        print(f"Creating zipfile {zipname}")
 | 
					            player_string += f"--p{i+1} {os.path.join(player_files_folder, file)} "
 | 
				
			||||||
        import zipfile
 | 
					 | 
				
			||||||
        with zipfile.ZipFile(zipname, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zf:
 | 
					 | 
				
			||||||
            for file in os.listdir(outputpath):
 | 
					 | 
				
			||||||
                if file.endswith(".sfc") and seedname in file:
 | 
					 | 
				
			||||||
                    zf.write(os.path.join(outputpath, file), file)
 | 
					 | 
				
			||||||
                    print(f"Packed {file} into zipfile {zipname}")
 | 
					 | 
				
			||||||
                    if zip_roms == 2 and player_name.lower() not in file.lower():
 | 
					 | 
				
			||||||
                        os.remove(file)
 | 
					 | 
				
			||||||
                        print(f"Removed file {file} that is now present in the zipfile")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    subprocess.call(f"py -{py_version} MultiServer.py --multidata {os.path.join(outputpath, multidataname)}")
 | 
					        player_names = list(file[:-5] for file in player_files)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        command = f"py -{py_version} Mystery.py --multi {len(player_files)} {player_string} " \
 | 
				
			||||||
 | 
					                  f"--names {','.join(player_names)} --enemizercli {enemizer_location} " \
 | 
				
			||||||
 | 
					                  f"--outputpath {outputpath}" + " --create_spoiler" if create_spoiler else "" + " --race" if race else ""
 | 
				
			||||||
 | 
					        print(command)
 | 
				
			||||||
 | 
					        import time
 | 
				
			||||||
 | 
					        start = time.perf_counter()
 | 
				
			||||||
 | 
					        text = subprocess.check_output(command, shell=True).decode()
 | 
				
			||||||
 | 
					        print(f"Took {time.perf_counter()-start:.3f} seconds to generate seed.")
 | 
				
			||||||
 | 
					        seedname = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for segment in text.split():
 | 
				
			||||||
 | 
					            if segment.startswith("M"):
 | 
				
			||||||
 | 
					                seedname = segment
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        multidataname = f"ER_{seedname}_multidata"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        romfilename = ""
 | 
				
			||||||
 | 
					        if player_name:
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                index = player_names.index(player_name)
 | 
				
			||||||
 | 
					            except IndexError:
 | 
				
			||||||
 | 
					                print(f"Could not find Player {player_name}")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                romfilename = os.path.join(outputpath, f"ER_{seedname}_P{index+1}_{player_name}.sfc")
 | 
				
			||||||
 | 
					                import webbrowser
 | 
				
			||||||
 | 
					                if os.path.exists(romfilename):
 | 
				
			||||||
 | 
					                    print(f"Launching ROM file {romfilename}")
 | 
				
			||||||
 | 
					                    webbrowser.open(romfilename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if zip_roms:
 | 
				
			||||||
 | 
					            zipname = os.path.join(outputpath, f"ER_{seedname}.zip")
 | 
				
			||||||
 | 
					            print(f"Creating zipfile {zipname}")
 | 
				
			||||||
 | 
					            import zipfile
 | 
				
			||||||
 | 
					            with zipfile.ZipFile(zipname, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zf:
 | 
				
			||||||
 | 
					                for file in os.listdir(outputpath):
 | 
				
			||||||
 | 
					                    if file.endswith(".sfc") and seedname in file:
 | 
				
			||||||
 | 
					                        zf.write(os.path.join(outputpath, file), file)
 | 
				
			||||||
 | 
					                        print(f"Packed {file} into zipfile {zipname}")
 | 
				
			||||||
 | 
					                        if zip_roms == 2 and player_name.lower() not in file.lower():
 | 
				
			||||||
 | 
					                            os.remove(file)
 | 
				
			||||||
 | 
					                            print(f"Removed file {file} that is now present in the zipfile")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        subprocess.call(f"py -{py_version} MultiServer.py --multidata {os.path.join(outputpath, multidataname)}")
 | 
				
			||||||
 | 
					    except:
 | 
				
			||||||
 | 
					        import traceback
 | 
				
			||||||
 | 
					        traceback.print_exc()
 | 
				
			||||||
 | 
					        input("Press enter to close")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue