Make pre_rolled safer by converting namespace/plandoitems/plandoconnections to/from dict.
This commit is contained in:
		
							parent
							
								
									2b553cd1c5
								
							
						
					
					
						commit
						60e032510d
					
				| 
						 | 
				
			
			@ -1508,8 +1508,20 @@ class PlandoItem(NamedTuple):
 | 
			
		|||
        else:
 | 
			
		||||
            self.warn(warning)
 | 
			
		||||
 | 
			
		||||
    def to_dict(self):
 | 
			
		||||
        return {"item": self.item,
 | 
			
		||||
                "location": self.location,
 | 
			
		||||
                "world": self.world,
 | 
			
		||||
                "from_pool": self.from_pool,
 | 
			
		||||
                "force": self.force}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PlandoConnection(NamedTuple):
 | 
			
		||||
    entrance: str
 | 
			
		||||
    exit: str
 | 
			
		||||
    direction: str  # entrance, exit or both
 | 
			
		||||
 | 
			
		||||
    def to_dict(self):
 | 
			
		||||
        return {"entrance": self.entrance,
 | 
			
		||||
                "exit": self.exit,
 | 
			
		||||
                "direction": self.direction}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								Mystery.py
								
								
								
								
							
							
						
						
									
										24
									
								
								Mystery.py
								
								
								
								
							| 
						 | 
				
			
			@ -193,7 +193,13 @@ def main(args=None, callback=ERmain):
 | 
			
		|||
                        settings.shuffle += f"-{random.randint(0, 2 ** 64)}"
 | 
			
		||||
 | 
			
		||||
                    pre_rolled = dict()
 | 
			
		||||
                    pre_rolled["pre_rolled"] = settings
 | 
			
		||||
                    pre_rolled["pre_rolled"] = vars(settings).copy()
 | 
			
		||||
                    if "plando_items" in pre_rolled["pre_rolled"]:
 | 
			
		||||
                        pre_rolled["pre_rolled"]["plando_items"] = [item.to_dict() for item in pre_rolled["pre_rolled"]["plando_items"]]
 | 
			
		||||
                    if "plando_connections" in pre_rolled["pre_rolled"]:
 | 
			
		||||
                        pre_rolled["pre_rolled"]["plando_connections"] = [connection.to_dict() for connection in pre_rolled["pre_rolled"]["plando_connections"]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    with open(os.path.join(args.outputpath if args.outputpath else ".", f"{os.path.split(path)[-1].split('.')[0]}_pre_rolled_{seedname}.yaml"), "wt") as f:
 | 
			
		||||
                        yaml.dump(pre_rolled, f)
 | 
			
		||||
                for k, v in vars(settings).items():
 | 
			
		||||
| 
						 | 
				
			
			@ -366,7 +372,21 @@ def roll_triggers(weights: dict) -> dict:
 | 
			
		|||
 | 
			
		||||
def roll_settings(weights: dict, plando_options: typing.Set[str] = frozenset(("bosses"))):
 | 
			
		||||
    if "pre_rolled" in weights:
 | 
			
		||||
        return weights["pre_rolled"]
 | 
			
		||||
        pre_rolled = weights["pre_rolled"]
 | 
			
		||||
        if isinstance(pre_rolled, argparse.Namespace):
 | 
			
		||||
            return pre_rolled  # Still accept old format pre-rolled, but only with unsafe loading.
 | 
			
		||||
 | 
			
		||||
        if "plando_items" in pre_rolled:
 | 
			
		||||
            pre_rolled["plando_items"] = [PlandoItem(item["item"],
 | 
			
		||||
                                                     item["location"],
 | 
			
		||||
                                                     item["world"],
 | 
			
		||||
                                                     item["from_pool"],
 | 
			
		||||
                                                     item["force"]) for item in pre_rolled["plando_items"]]
 | 
			
		||||
        if "plando_connections" in pre_rolled:
 | 
			
		||||
            pre_rolled["plando_connections"] = [PlandoConnection(connection["entrance"],
 | 
			
		||||
                                                                 connection["exit"],
 | 
			
		||||
                                                                 connection["direction"]) for connection in pre_rolled["plando_connections"]]
 | 
			
		||||
        return argparse.Namespace(**pre_rolled)
 | 
			
		||||
 | 
			
		||||
    if "linked_options" in weights:
 | 
			
		||||
        weights = roll_linked_options(weights)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue