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>
This commit is contained in:
Ludovic Marechal 2022-11-01 22:58:08 +01:00 committed by GitHub
parent bf142b32c9
commit ab9f3767e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 23 deletions

View File

@ -43,7 +43,7 @@
{% elif patch.game | supports_apdeltapatch %} {% elif patch.game | supports_apdeltapatch %}
<a href="{{ url_for("download_patch", patch_id=patch.id, room_id=room.id) }}" download> <a href="{{ url_for("download_patch", patch_id=patch.id, room_id=room.id) }}" download>
Download Patch File...</a> Download Patch File...</a>
{% elif patch.game == "Dark Souls III" %} {% elif patch.game == "Dark Souls III" and patch.data %}
<a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}" download> <a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}" download>
Download JSON File...</a> Download JSON File...</a>
{% else %} {% else %}

View File

@ -1,6 +1,7 @@
# world/dark_souls_3/__init__.py # world/dark_souls_3/__init__.py
import json import json
import os import os
from typing import Dict
from .Items import DarkSouls3Item from .Items import DarkSouls3Item
from .Locations import DarkSouls3Location from .Locations import DarkSouls3Location
@ -237,7 +238,9 @@ class DarkSouls3World(World):
for i in range(item_pool_len, total_required_locations): for i in range(item_pool_len, total_required_locations):
self.multiworld.itempool += [self.create_item("Soul of an Intrepid Hero")] 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 # Depending on the specified option, modify items hexadecimal value to add an upgrade level
item_dictionary_copy = item_dictionary.copy() item_dictionary_copy = item_dictionary.copy()
if self.multiworld.randomize_weapons_level[self.player]: if self.multiworld.randomize_weapons_level[self.player]:
@ -271,7 +274,7 @@ class DarkSouls3World(World):
else: else:
locations_target.append(0) locations_target.append(0)
data = { slot_data = {
"options": { "options": {
"auto_equip": self.multiworld.auto_equip[self.player].value, "auto_equip": self.multiworld.auto_equip[self.player].value,
"lock_equip": self.multiworld.lock_equip[self.player].value, "lock_equip": self.multiworld.lock_equip[self.player].value,
@ -287,7 +290,4 @@ class DarkSouls3World(World):
"itemsAddress": items_address "itemsAddress": items_address
} }
# generate the file return slot_data
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)

View File

@ -10,8 +10,6 @@
The Dark Souls III AP Client is a dinput8.dll triggered when launching Dark Souls III. This .dll file will launch a command 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. 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.
## Installation Procedures ## Installation Procedures
<span style="color:tomato"> <span style="color:tomato">
@ -19,15 +17,13 @@ The randomization is performed by the AP.json file, an output file generated by
</span> </span>
This client has only been tested with the Official Steam version of the game (v1.15/1.35) not matter which DLCs are installed. 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). Get the dinput8.dll from the [Dark Souls III AP Client](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases) and
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"): add it 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.
## Joining a MultiWorld Game ## Joining a MultiWorld Game
1. Run DarkSoulsIII.exe or run the game through Steam 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 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 4. You can quit and launch at anytime during a game

View File

@ -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 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. 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 ## Procédures d'installation
<span style="color:tomato"> <span style="color:tomato">
@ -19,16 +17,13 @@ Le mélange des objets est réalisé par le fichier AP.json, un fichier génér
</span> </span>
Ce client a été testé sur la version Steam officielle du jeu (v1.15/1.35), peu importe les DLCs actuellement installés. 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). 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
Vous devez ensuite ajouter les deux fichiers suivants à la racine du jeu placez-le à la racine du jeu (ex: "SteamLibrary\steamapps\common\DARK SOULS III\Game")
(ex: "SteamLibrary\steamapps\common\DARK SOULS III\Game"):
- **dinput8.dll**
- **AP.json** : Le fichier .json téléchargé depuis la <em>room</em> ou donné par l'hôte de la partie, nommé AP-{ROOM_ID}.json, doit être renommé en AP.json.
## Rejoindre une partie Multiworld ## Rejoindre une partie Multiworld
1. Lancer DarkSoulsIII.exe ou lancer le jeu depuis Steam 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 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 4. Vous pouvez quitter et lancer le jeu n'importe quand pendant une partie