From ab9f3767e29eafeea1069ca17b334aad732b0523 Mon Sep 17 00:00:00 2001 From: Ludovic Marechal Date: Tue, 1 Nov 2022 22:58:08 +0100 Subject: [PATCH] DS3: Use slot_data instead of the external Json file (#1155) * Update items_data.py added `Red and White Round Shield`, `Crystal Scroll`, `Magic Stoneplate Ring`, and `Outrider Knight` gear. * Update locations_data.py Added `US: Red and White Round Shield`, `CKG: Magic Stoneplate Ring`, `GA: Outrider Knight` set, and `GA: Crystal Scroll` * Update __init__.py Add `Karla's Ashes` requirements * Update items_data.py Add `Irithyll Rapier, Hollow's Ashes, Irina's Ashes, Karla's Ashes, Cornyx's Ashes, and Orbeck's Ashes` * Update locations_data.py Add `Irithyll Rapier, Hollow's Ashes, Irina's Ashes, Karla's Ashes, Orbeck's Ashes, and Cornyx's Ashes` * Update items_data.py removed "hollows ashes" * Update locations_data.py remove "hollows ashes" * Revert "WebHost: Add the DarkSouls3 entry to upload and download the client file" This reverts commit 5e7c2d4cee485e373ffe60932134013548192c8e. * ds3: Use fill_slot_data instead of generate_output * DS3: Increment data_version * DS3: Fix item name in rule * DS3: Set required client version to 0.3.6 and added offsets between items and location tables for backward compatibility * DS3: Resolve Python 3.8 compatibility * DS3: Removed useless region for locations IDs consistency * DS3: Changed i in loop * DS3: Remove AP.json from the documentation * DS3: Put back json upload and download * DS3: Avoid empty downloads (cherry picked from commit c4c485140d2c427fe49c5b23444a4f1dd111d5b7) Co-authored-by: Br00ty <83629348+Br00ty@users.noreply.github.com> --- WebHostLib/templates/macros.html | 2 +- worlds/dark_souls_3/__init__.py | 12 ++++++------ worlds/dark_souls_3/docs/setup_en.md | 12 ++++-------- worlds/dark_souls_3/docs/setup_fr.md | 11 +++-------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/WebHostLib/templates/macros.html b/WebHostLib/templates/macros.html index 9a92edbb..307e6b7f 100644 --- a/WebHostLib/templates/macros.html +++ b/WebHostLib/templates/macros.html @@ -43,7 +43,7 @@ {% elif patch.game | supports_apdeltapatch %} Download Patch File... - {% elif patch.game == "Dark Souls III" %} + {% elif patch.game == "Dark Souls III" and patch.data %} Download JSON File... {% else %} diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index 0b062b3a..e13329ea 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -1,6 +1,7 @@ # world/dark_souls_3/__init__.py import json import os +from typing import Dict from .Items import DarkSouls3Item from .Locations import DarkSouls3Location @@ -237,7 +238,9 @@ class DarkSouls3World(World): for i in range(item_pool_len, total_required_locations): self.multiworld.itempool += [self.create_item("Soul of an Intrepid Hero")] - def generate_output(self, output_directory: str): + def fill_slot_data(self) -> Dict[str, object]: + slot_data: Dict[str, object] = {} + # Depending on the specified option, modify items hexadecimal value to add an upgrade level item_dictionary_copy = item_dictionary.copy() if self.multiworld.randomize_weapons_level[self.player]: @@ -271,7 +274,7 @@ class DarkSouls3World(World): else: locations_target.append(0) - data = { + slot_data = { "options": { "auto_equip": self.multiworld.auto_equip[self.player].value, "lock_equip": self.multiworld.lock_equip[self.player].value, @@ -287,7 +290,4 @@ class DarkSouls3World(World): "itemsAddress": items_address } - # generate the file - filename = f"AP-{self.multiworld.seed_name}-P{self.player}-{self.multiworld.player_name[self.player]}.json" - with open(os.path.join(output_directory, filename), 'w') as outfile: - json.dump(data, outfile) + return slot_data diff --git a/worlds/dark_souls_3/docs/setup_en.md b/worlds/dark_souls_3/docs/setup_en.md index 3d8606a5..b4705ad5 100644 --- a/worlds/dark_souls_3/docs/setup_en.md +++ b/worlds/dark_souls_3/docs/setup_en.md @@ -8,9 +8,7 @@ ## General Concept The Dark Souls III AP Client is a dinput8.dll triggered when launching Dark Souls III. This .dll file will launch a command -prompt where you can read information about your run and write any command to interact with the Archipelago server. - -The randomization is performed by the AP.json file, an output file generated by the Archipelago server. +prompt where you can read information about your run and write any command to interact with the Archipelago server. ## Installation Procedures @@ -19,15 +17,13 @@ The randomization is performed by the AP.json file, an output file generated by This client has only been tested with the Official Steam version of the game (v1.15/1.35) not matter which DLCs are installed. -Get the dinput8.dll from the [Dark Souls III AP Client](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases). -Then you need to add the two following files at the root folder of your game (e.g. "SteamLibrary\steamapps\common\DARK SOULS III\Game"): -- **dinput8.dll** -- **AP.json** : The .json file downloaded from the multiworld room or provided by the host, named AP-{ROOM_ID}.json, has to be renamed to AP.json. +Get the dinput8.dll from the [Dark Souls III AP Client](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases) and +add it at the root folder of your game (e.g. "SteamLibrary\steamapps\common\DARK SOULS III\Game") ## Joining a MultiWorld Game 1. Run DarkSoulsIII.exe or run the game through Steam -2. Type in "/connect {SERVER_IP}:{SERVER_PORT}" in the "Windows Command Prompt" that opened +2. Type in "/connect {SERVER_IP}:{SERVER_PORT} {SLOT_NAME}" in the "Windows Command Prompt" that opened 3. Once connected, create a new game, choose a class and wait for the others before starting 4. You can quit and launch at anytime during a game diff --git a/worlds/dark_souls_3/docs/setup_fr.md b/worlds/dark_souls_3/docs/setup_fr.md index f33b6951..6ad86c4a 100644 --- a/worlds/dark_souls_3/docs/setup_fr.md +++ b/worlds/dark_souls_3/docs/setup_fr.md @@ -10,8 +10,6 @@ Le client Archipelago de Dark Souls III est un fichier dinput8.dll. Cette .dll va lancer une invite de commande Windows permettant de lire des informations de la partie et écrire des commandes pour intéragir avec le serveur Archipelago. -Le mélange des objets est réalisé par le fichier AP.json, un fichier généré par le serveur Archipelago. - ## Procédures d'installation @@ -19,16 +17,13 @@ Le mélange des objets est réalisé par le fichier AP.json, un fichier génér Ce client a été testé sur la version Steam officielle du jeu (v1.15/1.35), peu importe les DLCs actuellement installés. -Télécharger le fichier dinput8.dll disponible dans le [Client AP de Dark Souls III](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases). -Vous devez ensuite ajouter les deux fichiers suivants à la racine du jeu -(ex: "SteamLibrary\steamapps\common\DARK SOULS III\Game"): -- **dinput8.dll** -- **AP.json** : Le fichier .json téléchargé depuis la room ou donné par l'hôte de la partie, nommé AP-{ROOM_ID}.json, doit être renommé en AP.json. +Télécharger le fichier dinput8.dll disponible dans le [Client AP de Dark Souls III](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases) et +placez-le à la racine du jeu (ex: "SteamLibrary\steamapps\common\DARK SOULS III\Game") ## Rejoindre une partie Multiworld 1. Lancer DarkSoulsIII.exe ou lancer le jeu depuis Steam -2. Ecrire "/connect {SERVER_IP}:{SERVER_PORT}" dans l'invite de commande Windows ouverte au lancement du jeu +2. Ecrire "/connect {SERVER_IP}:{SERVER_PORT} {SLOT_NAME}" dans l'invite de commande Windows ouverte au lancement du jeu 3. Une fois connecté, créez une nouvelle partie, choisissez une classe et attendez que les autres soient prêts avant de lancer 4. Vous pouvez quitter et lancer le jeu n'importe quand pendant une partie