diff --git a/rule_builder/rules.py b/rule_builder/rules.py index 0606225ffa..ee66a3aaf2 100644 --- a/rule_builder/rules.py +++ b/rule_builder/rules.py @@ -843,9 +843,12 @@ class Has(Rule[TWorld], game="Archipelago"): @override def _instantiate(self, world: TWorld) -> Rule.Resolved: + count = resolve_field(self.count, world, int) + if count <= 0: + return True_().resolve(world) return self.Resolved( resolve_field(self.item_name, world, str), - count=resolve_field(self.count, world, int), + count=count, player=world.player, caching_enabled=getattr(world, "rule_caching_enabled", False), ) diff --git a/test/general/test_rule_builder.py b/test/general/test_rule_builder.py index e78d62ad40..511ce55c27 100644 --- a/test/general/test_rule_builder.py +++ b/test/general/test_rule_builder.py @@ -167,6 +167,10 @@ class CachedRuleBuilderTestCase(RuleBuilderTestCase): Or(), False_.Resolved(player=1) ), + ( + Has("A", 0), + True_.Resolved(player=1) + ), ( And(Has("A", 1), Has("A", 2)), Has.Resolved("A", 2, player=1),