Core: guard against plandoing items onto event locations (#2284)

This commit is contained in:
espeon65536 2023-10-19 18:23:32 -06:00 committed by GitHub
parent 385803eb5c
commit b82f48fe4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 10 deletions

23
Fill.py
View File

@ -897,19 +897,22 @@ def distribute_planned(world: MultiWorld) -> None:
for item_name in items: for item_name in items:
item = world.worlds[player].create_item(item_name) item = world.worlds[player].create_item(item_name)
for location in reversed(candidates): for location in reversed(candidates):
if not location.item: if (location.address is None) == (item.code is None): # either both None or both not None
if location.item_rule(item): if not location.item:
if location.can_fill(world.state, item, False): if location.item_rule(item):
successful_pairs.append((item, location)) if location.can_fill(world.state, item, False):
candidates.remove(location) successful_pairs.append((item, location))
count = count + 1 candidates.remove(location)
break count = count + 1
break
else:
err.append(f"Can't place item at {location} due to fill condition not met.")
else: else:
err.append(f"Can't place item at {location} due to fill condition not met.") err.append(f"{item_name} not allowed at {location}.")
else: else:
err.append(f"{item_name} not allowed at {location}.") err.append(f"Cannot place {item_name} into already filled location {location}.")
else: else:
err.append(f"Cannot place {item_name} into already filled location {location}.") err.append(f"Mismatch between {item_name} and {location}, only one is an event.")
if count == maxcount: if count == maxcount:
break break
if count < placement['count']['min']: if count < placement['count']['min']: