HK: add random handling to plandocharmcosts (#4327)
This commit is contained in:
		
							parent
							
								
									6282efb13c
								
							
						
					
					
						commit
						d1823a21ea
					
				| 
						 | 
					@ -294,6 +294,10 @@ class RandomCharmCosts(NamedRange):
 | 
				
			||||||
            return charms
 | 
					            return charms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CharmCost(Range):
 | 
				
			||||||
 | 
					    range_end = 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PlandoCharmCosts(OptionDict):
 | 
					class PlandoCharmCosts(OptionDict):
 | 
				
			||||||
    """Allows setting a Charm's Notch costs directly, mapping {name: cost}.
 | 
					    """Allows setting a Charm's Notch costs directly, mapping {name: cost}.
 | 
				
			||||||
    This is set after any random Charm Notch costs, if applicable."""
 | 
					    This is set after any random Charm Notch costs, if applicable."""
 | 
				
			||||||
| 
						 | 
					@ -303,6 +307,27 @@ class PlandoCharmCosts(OptionDict):
 | 
				
			||||||
        Optional(name): And(int, lambda n: 6 >= n >= 0, error="Charm costs must be integers in the range 0-6.") for name in charm_names
 | 
					        Optional(name): And(int, lambda n: 6 >= n >= 0, error="Charm costs must be integers in the range 0-6.") for name in charm_names
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, value):
 | 
				
			||||||
 | 
					        # To handle keys of random like other options, create an option instance from their values
 | 
				
			||||||
 | 
					        # Additionally a vanilla keyword is added to plando individual charms to vanilla costs
 | 
				
			||||||
 | 
					        # and default is disabled so as to not cause confusion
 | 
				
			||||||
 | 
					        self.value = {}
 | 
				
			||||||
 | 
					        for key, data in value.items():
 | 
				
			||||||
 | 
					            if isinstance(data, str):
 | 
				
			||||||
 | 
					                if data.lower() == "vanilla" and key in self.valid_keys:
 | 
				
			||||||
 | 
					                    self.value[key] = vanilla_costs[charm_names.index(key)]
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					                elif data.lower() == "default":
 | 
				
			||||||
 | 
					                    # default is too easily confused with vanilla but actually 0
 | 
				
			||||||
 | 
					                    # skip CharmCost resolution to fail schema afterwords
 | 
				
			||||||
 | 
					                    self.value[key] = data
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                self.value[key] = CharmCost.from_any(data).value
 | 
				
			||||||
 | 
					            except ValueError as ex:
 | 
				
			||||||
 | 
					                # will fail schema afterwords
 | 
				
			||||||
 | 
					                self.value[key] = data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_costs(self, charm_costs: typing.List[int]) -> typing.List[int]:
 | 
					    def get_costs(self, charm_costs: typing.List[int]) -> typing.List[int]:
 | 
				
			||||||
        for name, cost in self.value.items():
 | 
					        for name, cost in self.value.items():
 | 
				
			||||||
            charm_costs[charm_names.index(name)] = cost
 | 
					            charm_costs[charm_names.index(name)] = cost
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue