diff --git a/MultiServer.py b/MultiServer.py index d7fd17ba..74a2945d 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -1322,11 +1322,11 @@ async def console(ctx: Context): def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() defaults = Utils.get_options()["server_options"] + parser.add_argument('multidata', nargs="?", default=defaults["multidata"]) parser.add_argument('--host', default=defaults["host"]) parser.add_argument('--port', default=defaults["port"], type=int) parser.add_argument('--server_password', default=defaults["server_password"]) parser.add_argument('--password', default=defaults["password"]) - parser.add_argument('--multidata', default=defaults["multidata"]) parser.add_argument('--savefile', default=defaults["savefile"]) parser.add_argument('--disable_save', default=defaults["disable_save"], action='store_true') parser.add_argument('--loglevel', default=defaults["loglevel"], @@ -1408,7 +1408,21 @@ async def main(args: argparse.Namespace): import tkinter.filedialog root = tkinter.Tk() root.withdraw() - data_filename = tkinter.filedialog.askopenfilename(filetypes=(("Multiworld data", "*.archipelago"),)) + data_filename = tkinter.filedialog.askopenfilename(filetypes=(("Multiworld data", "*.archipelago, *.zip"),)) + + if data_filename.endswith(".zip"): + import zipfile + with zipfile.ZipFile(data_filename) as zf: + for file in zf.namelist(): + if file.endswith(".archipelago"): + import tempfile + tmp = tempfile.NamedTemporaryFile("w+b", delete=False) + tmp.write(zf.open(file).read()) + tmp.close() + data_filename = tmp.name + break + else: + raise Exception("No .archipelago found in archive.") ctx.load(data_filename, args.use_embedded_options) diff --git a/inno_setup_38.iss b/inno_setup_38.iss index eb4a6ca6..ba2213aa 100644 --- a/inno_setup_38.iss +++ b/inno_setup_38.iss @@ -67,7 +67,7 @@ Root: HKCR; Subkey: "{#MyAppName}patch\shell\open\command"; ValueData: """{app} Root: HKCR; Subkey: ".archipelago"; ValueData: "{#MyAppName}multidata"; Flags: uninsdeletevalue; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#MyAppName}multidata"; ValueData: "Archipelago Server Data"; Flags: uninsdeletekey; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#MyAppName}multidata\DefaultIcon"; ValueData: "{app}\ArchipelagoServer.exe,0"; ValueType: string; ValueName: "" -Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\ArchipelagoServer.exe"" --multidata ""%1"""; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\ArchipelagoServer.exe"" ""%1"""; ValueType: string; ValueName: "" diff --git a/inno_setup_39.iss b/inno_setup_39.iss index a041d066..cbb14a3b 100644 --- a/inno_setup_39.iss +++ b/inno_setup_39.iss @@ -67,7 +67,7 @@ Root: HKCR; Subkey: "{#MyAppName}patch\shell\open\command"; ValueData: """{app} Root: HKCR; Subkey: ".archipelago"; ValueData: "{#MyAppName}multidata"; Flags: uninsdeletevalue; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#MyAppName}multidata"; ValueData: "Archipelago Server Data"; Flags: uninsdeletekey; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#MyAppName}multidata\DefaultIcon"; ValueData: "{app}\ArchipelagoServer.exe,0"; ValueType: string; ValueName: "" -Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\ArchipelagoServer.exe"" --multidata ""%1"""; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\ArchipelagoServer.exe"" ""%1"""; ValueType: string; ValueName: ""