From a0464ecea16545ff338ca7f178bbc001bb4c4bd3 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 3 May 2023 23:22:58 +0200 Subject: [PATCH] Core: fix start_inventory_from_pool breaking if it's removing the last instance of an item from pool. Core: fix start_inventory_from_pool removing arbitrary items from pool if quick abort branch is entered. --- Main.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Main.py b/Main.py index 635e7df2..24cba722 100644 --- a/Main.py +++ b/Main.py @@ -165,19 +165,24 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No for count in items.values(): new_items.append(player_world.create_filler()) target: int = sum(sum(items.values()) for items in depletion_pool.values()) - for item in world.itempool: + for i, item in enumerate(world.itempool): if depletion_pool[item.player].get(item.name, 0): target -= 1 depletion_pool[item.player][item.name] -= 1 # quick abort if we have found all items if not target: + new_items.extend(world.itempool[i+1:]) break else: new_items.append(item) - for player, remaining_items in depletion_pool.items(): - if remaining_items: - raise Exception(f"{world.get_player_name(player)}" - f" is trying to remove items from their pool that don't exist: {remaining_items}") + + # leftovers? + if target: + for player, remaining_items in depletion_pool.items(): + remaining_items = {name: count for name, count in remaining_items.items() if count} + if remaining_items: + raise Exception(f"{world.get_player_name(player)}" + f" is trying to remove items from their pool that don't exist: {remaining_items}") world.itempool[:] = new_items # temporary home for item links, should be moved out of Main