Allow specifying multiple items and locations to fill at once.
This commit is contained in:
parent
8ef78cc32a
commit
3d13ab749e
34
Mystery.py
34
Mystery.py
|
@ -557,19 +557,39 @@ def roll_settings(weights, plando_options: typing.Set[str] = frozenset(("bosses"
|
|||
|
||||
ret.plando_items = []
|
||||
if "items" in plando_options:
|
||||
def add_plando_item(item: str, location: str):
|
||||
if item not in item_table:
|
||||
raise Exception(f"Could not plando item {item} as the item was not recognized")
|
||||
if location not in location_table:
|
||||
raise Exception(f"Could not plando item {item} at location {location} as the location was not recognized")
|
||||
ret.plando_items.append(PlandoItem(item, location, location_world, from_pool, force))
|
||||
|
||||
options = weights.get("plando_items", [])
|
||||
for placement in options:
|
||||
if roll_percentage(get_choice("percentage", placement, 100)):
|
||||
item = get_choice("item", placement)
|
||||
if item not in item_table:
|
||||
raise Exception(f"Could not plando item {item} as the item was not recognized")
|
||||
location = get_choice("location", placement)
|
||||
if location not in location_table:
|
||||
raise Exception(f"Could not plando item {item} at location {location} as the location was not recognized")
|
||||
from_pool = get_choice("from_pool", placement, True)
|
||||
location_world = get_choice("world", placement, False)
|
||||
force = get_choice("force", placement, False)
|
||||
ret.plando_items.append(PlandoItem(item, location, location_world, from_pool, force))
|
||||
if "items" in placement and "locations" in placement:
|
||||
items = placement["items"]
|
||||
locations = placement["locations"]
|
||||
if isinstance(items, dict):
|
||||
item_list = []
|
||||
for key, value in items.items():
|
||||
item_list += [key] * value
|
||||
items = item_list
|
||||
if not items or not locations:
|
||||
raise Exception("You must specify at least one item and one location to place items.")
|
||||
random.shuffle(items)
|
||||
random.shuffle(locations)
|
||||
while items and locations:
|
||||
item = items.pop()
|
||||
location = locations.pop()
|
||||
add_plando_item(item, location)
|
||||
else:
|
||||
item = get_choice("item", placement, get_choice("items", placement))
|
||||
location = get_choice("location", placement)
|
||||
add_plando_item(item, location)
|
||||
|
||||
ret.plando_texts = {}
|
||||
if "texts" in plando_options:
|
||||
|
|
Loading…
Reference in New Issue