57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from ..generic.Rules import set_rule, add_rule
 | |
| 
 | |
| units = {
 | |
|     "Egg": "RANCIDEGGS",
 | |
|     "Grub": "GRUBS",
 | |
|     "Essence": "ESSENCE",
 | |
|     "Charm": "CHARMS",
 | |
| }
 | |
| 
 | |
| 
 | |
| def hk_set_rule(hk_world, location: str, rule):
 | |
|     count = hk_world.created_multi_locations[location]
 | |
|     if count:
 | |
|         locations = [f"{location}_{x}" for x in range(1, count+1)]
 | |
|     elif (location, hk_world.player) in hk_world.world._location_cache:
 | |
|         locations = [location]
 | |
|     else:
 | |
|         return
 | |
|     for location in locations:
 | |
|         set_rule(hk_world.world.get_location(location, hk_world.player), rule)
 | |
| 
 | |
| 
 | |
| def set_shop_prices(hk_world):
 | |
|     player = hk_world.player
 | |
|     for shop, unit in hk_world.shops.items():
 | |
|         for i in range(1, 1 + hk_world.created_multi_locations[shop]):
 | |
|             loc = hk_world.world.get_location(f"{shop}_{i}", hk_world.player)
 | |
|             add_rule(loc, lambda state, unit=units[unit], cost=loc.cost: state.count(unit, player) > cost)
 | |
| 
 | |
| 
 | |
| def set_rules(hk_world):
 | |
|     player = hk_world.player
 | |
|     world = hk_world.world
 | |
| 
 | |
|     # Events
 | |
|     {% for location, rule_text in event_rules.items() %}
 | |
|     hk_set_rule(hk_world, "{{location}}", lambda state: {{rule_text}})
 | |
|     {%- endfor %}
 | |
| 
 | |
|     # Locations
 | |
|     {% for location, rule_text in location_rules.items() %}
 | |
|     hk_set_rule(hk_world, "{{location}}", lambda state: {{rule_text}})
 | |
|     {%- endfor %}
 | |
| 
 | |
|     # Shop prices
 | |
|     set_shop_prices(hk_world)
 | |
| 
 | |
|     # Connectors
 | |
|     {% for entrance, rule_text in connectors_rules.items() %}
 | |
|     rule = lambda state: {{rule_text}}
 | |
|     entrance = world.get_entrance("{{entrance}}", player)
 | |
|     entrance.access_rule = rule
 | |
|     {%- if entrance not in one_ways %}
 | |
|     world.get_entrance("{{entrance}}_R", player).access_rule = lambda state, entrance= entrance: \
 | |
|         rule(state) and entrance.can_reach(state)
 | |
|     {%- endif %}
 | |
|     {% endfor %} | 
