39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Helper class to read and store planomizer data
							 | 
						||
| 
								 | 
							
								class Plan:
							 | 
						||
| 
								 | 
							
								    def __init__(self, filename):
							 | 
						||
| 
								 | 
							
								        self.forced_items = {}
							 | 
						||
| 
								 | 
							
								        self.item_pool = {}
							 | 
						||
| 
								 | 
							
								        item_group = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for line in open(filename, "rt"):
							 | 
						||
| 
								 | 
							
								            line = line.strip()
							 | 
						||
| 
								 | 
							
								            if ";" in line:
							 | 
						||
| 
								 | 
							
								                line = line[:line.find(";")]
							 | 
						||
| 
								 | 
							
								            if "#" in line:
							 | 
						||
| 
								 | 
							
								                line = line[:line.find("#")]
							 | 
						||
| 
								 | 
							
								            if ":" not in line:
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            entry_type, params = map(str.strip, line.upper().split(":", 1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if entry_type == "LOCATION" and ":" in params:
							 | 
						||
| 
								 | 
							
								                location, item = map(str.strip, params.split(":", 1))
							 | 
						||
| 
								 | 
							
								                if item == "":
							 | 
						||
| 
								 | 
							
								                    continue
							 | 
						||
| 
								 | 
							
								                if item.startswith("[") and item.endswith("]"):
							 | 
						||
| 
								 | 
							
								                    item = item_group[item[1:-1]]
							 | 
						||
| 
								 | 
							
								                if "," in item:
							 | 
						||
| 
								 | 
							
								                    item = list(map(str.strip, item.split(",")))
							 | 
						||
| 
								 | 
							
								                self.forced_items[location] = item
							 | 
						||
| 
								 | 
							
								            elif entry_type == "POOL" and ":" in params:
							 | 
						||
| 
								 | 
							
								                item, count = map(str.strip, params.split(":", 1))
							 | 
						||
| 
								 | 
							
								                self.item_pool[item] = self.item_pool.get(item, 0) + int(count)
							 | 
						||
| 
								 | 
							
								            elif entry_type == "GROUP" and ":" in params:
							 | 
						||
| 
								 | 
							
								                name, item = map(str.strip, params.split(":", 1))
							 | 
						||
| 
								 | 
							
								                if item == "":
							 | 
						||
| 
								 | 
							
								                    continue
							 | 
						||
| 
								 | 
							
								                if "," in item:
							 | 
						||
| 
								 | 
							
								                    item = list(map(str.strip, item.split(",")))
							 | 
						||
| 
								 | 
							
								                item_group[name] = item
							 |