Core: Purge Multiworld.option_name (#5050)

This commit is contained in:
qwint
2025-08-01 15:06:35 -05:00
committed by GitHub
parent e8f5bc1c96
commit 37a9d94865
4 changed files with 6 additions and 26 deletions

View File

@@ -228,17 +228,8 @@ class MultiWorld():
self.seed_name = name if name else str(self.seed) self.seed_name = name if name else str(self.seed)
def set_options(self, args: Namespace) -> None: def set_options(self, args: Namespace) -> None:
# TODO - remove this section once all worlds use options dataclasses
from worlds import AutoWorld from worlds import AutoWorld
all_keys: Set[str] = {key for player in self.player_ids for key in
AutoWorld.AutoWorldRegister.world_types[self.game[player]].options_dataclass.type_hints}
for option_key in all_keys:
option = Utils.DeprecateDict(f"Getting options from multiworld is now deprecated. "
f"Please use `self.options.{option_key}` instead.", True)
option.update(getattr(args, option_key, {}))
setattr(self, option_key, option)
for player in self.player_ids: for player in self.player_ids:
world_type = AutoWorld.AutoWorldRegister.world_types[self.game[player]] world_type = AutoWorld.AutoWorldRegister.world_types[self.game[player]]
self.worlds[player] = world_type(self, player) self.worlds[player] = world_type(self, player)

View File

@@ -176,7 +176,7 @@ def main(args, seed=None, baked_server_options: dict[str, object] | None = None)
multiworld.link_items() multiworld.link_items()
if any(multiworld.item_links.values()): if any(world.options.item_links for world in multiworld.worlds.values()):
multiworld._all_state = None multiworld._all_state = None
logger.info("Running Item Plando.") logger.info("Running Item Plando.")

View File

@@ -72,15 +72,6 @@ class AutoWorldRegister(type):
dct["required_client_version"] = max(dct["required_client_version"], dct["required_client_version"] = max(dct["required_client_version"],
base.__dict__["required_client_version"]) base.__dict__["required_client_version"])
# create missing options_dataclass from legacy option_definitions
# TODO - remove this once all worlds use options dataclasses
if "options_dataclass" not in dct and "option_definitions" in dct:
# TODO - switch to deprecate after a version
deprecate(f"{name} Assigned options through option_definitions which is now deprecated. "
"Please use options_dataclass instead.")
dct["options_dataclass"] = make_dataclass(f"{name}Options", dct["option_definitions"].items(),
bases=(PerGameCommonOptions,))
# construct class # construct class
new_class = super().__new__(mcs, name, bases, dct) new_class = super().__new__(mcs, name, bases, dct)
new_class.__file__ = sys.modules[new_class.__module__].__file__ new_class.__file__ = sys.modules[new_class.__module__].__file__
@@ -493,9 +484,6 @@ class World(metaclass=AutoWorldRegister):
Creates a group, which is an instance of World that is responsible for multiple others. Creates a group, which is an instance of World that is responsible for multiple others.
An example case is ItemLinks creating these. An example case is ItemLinks creating these.
""" """
# TODO remove loop when worlds use options dataclass
for option_key, option in cls.options_dataclass.type_hints.items():
getattr(multiworld, option_key)[new_player_id] = option.from_any(option.default)
group = cls(multiworld, new_player_id) group = cls(multiworld, new_player_id)
group.options = cls.options_dataclass(**{option_key: option.from_any(option.default) group.options = cls.options_dataclass(**{option_key: option.from_any(option.default)
for option_key, option in cls.options_dataclass.type_hints.items()}) for option_key, option in cls.options_dataclass.type_hints.items()})

View File

@@ -209,8 +209,8 @@ def fill_dungeons_restrictive(multiworld: MultiWorld):
if localized: if localized:
in_dungeon_items = [item for item in get_dungeon_item_pool(multiworld) if (item.player, item.name) in localized] in_dungeon_items = [item for item in get_dungeon_item_pool(multiworld) if (item.player, item.name) in localized]
if in_dungeon_items: if in_dungeon_items:
restricted_players = {player for player, restricted in multiworld.restrict_dungeon_item_on_boss.items() if restricted_players = {world.player for world in multiworld.get_game_worlds("A Link to the Past") if
restricted} world.options.restrict_dungeon_item_on_boss}
locations: typing.List["ALttPLocation"] = [ locations: typing.List["ALttPLocation"] = [
location for location in get_unfilled_dungeon_locations(multiworld) location for location in get_unfilled_dungeon_locations(multiworld)
# filter boss # filter boss
@@ -255,8 +255,9 @@ def fill_dungeons_restrictive(multiworld: MultiWorld):
if all_state_base.has("Triforce", player): if all_state_base.has("Triforce", player):
all_state_base.remove(multiworld.worlds[player].create_item("Triforce")) all_state_base.remove(multiworld.worlds[player].create_item("Triforce"))
for (player, key_drop_shuffle) in multiworld.key_drop_shuffle.items(): for lttp_world in multiworld.get_game_worlds("A Link to the Past"):
if not key_drop_shuffle and player not in multiworld.groups: if not lttp_world.options.key_drop_shuffle and lttp_world.player not in multiworld.groups:
player = lttp_world.player
for key_loc in key_drop_data: for key_loc in key_drop_data:
key_data = key_drop_data[key_loc] key_data = key_drop_data[key_loc]
all_state_base.remove(item_factory(key_data[3], multiworld.worlds[player])) all_state_base.remove(item_factory(key_data[3], multiworld.worlds[player]))