AutoWorld: split remote_start_inventory out from remote_items

This commit is contained in:
Fabian Dill 2021-09-23 03:48:37 +02:00
parent 3caf8bc82b
commit 8e569a1d1f
5 changed files with 11 additions and 1 deletions

View File

@ -302,6 +302,8 @@ def main(args, seed=None):
"connect_names": {name: (0, player) for player, name in world.player_name.items()},
"remote_items": {player for player in world.player_ids if
world.worlds[player].remote_items},
"remote_start_inventory": {player for player in world.player_ids if
world.worlds[player].remote_start_inventory},
"locations": locations_data,
"checks_in_area": checks_in_area,
"server_options": get_options()["server_options"],

View File

@ -84,6 +84,7 @@ class Context:
self.connect_names = {} # names of slots clients can connect to
self.allow_forfeits = {}
self.remote_items = set()
self.remote_start_inventory = set()
self.locations: typing.Dict[int, typing.Dict[int, typing.Tuple[int, int]]] = {}
self.host = host
self.port = port
@ -245,6 +246,7 @@ class Context:
self.random.seed(self.seed_name)
self.connect_names = decoded_obj['connect_names']
self.remote_items = decoded_obj['remote_items']
self.remote_start_inventory = decoded_obj.get('remote_start_inventory', decoded_obj['remote_items'])
self.locations = decoded_obj['locations']
self.slot_data = decoded_obj['slot_data']
self.er_hint_data = {int(player): {int(address): name for address, name in loc_data.items()}
@ -253,7 +255,7 @@ class Context:
# award remote-items start inventory:
for team in range(len(decoded_obj['names'])):
for slot, item_codes in decoded_obj["precollected_items"].items():
if slot in self.remote_items:
if slot in self.remote_start_inventory:
self.received_items[team, slot] = [NetworkItem(item_code, -2, 0) for item_code in item_codes]
for slot, hints in decoded_obj["precollected_hints"].items():
self.hints[team, slot].update(hints)

View File

@ -91,6 +91,10 @@ class World(metaclass=AutoWorldRegister):
# the client finds its own items in its own world.
remote_items: bool = True
# If remote_start_inventory is true, the start_inventory/world.precollected_items is sent on connection,
# otherwise the world implementation is in charge of writing the items to their output data.
remote_start_inventory: bool = True
# For games where after a victory it is impossible to go back in and get additional/remaining Locations checked.
# this forces forfeit: auto for those games.
forced_auto_forfeit: bool = False

View File

@ -42,6 +42,7 @@ class ALTTPWorld(World):
data_version = 8
remote_items: bool = False
remote_start_inventory: bool = False
set_rules = set_rules

View File

@ -47,6 +47,7 @@ class OOTWorld(World):
data[2] is not None}
location_name_to_id = location_name_to_id
remote_items: bool = False
remote_start_inventory: bool = False
data_version = 1