Skip caching get_all_state while setting rules
Since rules have not been set for later worlds, the cache believes the completion condition is freely available if it had been placed previously, which breaks beatable-only key placement.
This commit is contained in:
parent
f74db254f6
commit
88451d4239
|
@ -213,7 +213,7 @@ class MultiWorld():
|
|||
except KeyError as e:
|
||||
raise KeyError('No such dungeon %s for player %d' % (dungeonname, player)) from e
|
||||
|
||||
def get_all_state(self) -> CollectionState:
|
||||
def get_all_state(self, save_cache=True) -> CollectionState:
|
||||
cached = getattr(self, "_all_state", None)
|
||||
if cached:
|
||||
return cached.copy()
|
||||
|
@ -229,7 +229,8 @@ class MultiWorld():
|
|||
subworld.collect(ret, item)
|
||||
ret.sweep_for_events()
|
||||
|
||||
self._all_state = ret
|
||||
if save_cache:
|
||||
self._all_state = ret
|
||||
return ret
|
||||
|
||||
def get_items(self) -> list:
|
||||
|
|
|
@ -853,7 +853,7 @@ def set_trock_key_rules(world, player):
|
|||
for entrance in ['Turtle Rock Dark Room Staircase', 'Turtle Rock (Chain Chomp Room) (North)', 'Turtle Rock (Chain Chomp Room) (South)', 'Turtle Rock Pokey Room', 'Turtle Rock Big Key Door']:
|
||||
set_rule(world.get_entrance(entrance, player), lambda state: False)
|
||||
|
||||
all_state = world.get_all_state()
|
||||
all_state = world.get_all_state(save_cache=False)
|
||||
all_state.reachable_regions[player] = set() # wipe reachable regions so that the locked doors actually work
|
||||
all_state.stale[player] = True
|
||||
|
||||
|
|
Loading…
Reference in New Issue