| 
									
										
										
										
											2021-01-03 14:32:32 +01:00
										 |  |  | from typing import NamedTuple, Union | 
					
						
							| 
									
										
										
										
											2021-01-21 23:37:58 +01:00
										 |  |  | import logging | 
					
						
							| 
									
										
										
										
											2021-01-03 14:32:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-11 00:23:07 +01:00
										 |  |  | from BaseClasses import Item | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-27 14:52:33 +02:00
										 |  |  | from ..AutoWorld import World | 
					
						
							| 
									
										
										
										
											2022-02-23 04:02:11 +01:00
										 |  |  | from NetUtils import SlotType | 
					
						
							| 
									
										
										
										
											2021-08-27 14:52:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GenericWorld(World): | 
					
						
							|  |  |  |     game = "Archipelago" | 
					
						
							|  |  |  |     topology_present = False | 
					
						
							|  |  |  |     item_name_to_id = { | 
					
						
							|  |  |  |         "Nothing": -1 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     location_name_to_id = { | 
					
						
							| 
									
										
										
										
											2021-11-11 11:47:45 +01:00
										 |  |  |         "Cheat Console": -1, | 
					
						
							| 
									
										
										
										
											2021-08-27 14:52:33 +02:00
										 |  |  |         "Server": -2 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     hidden = True | 
					
						
							| 
									
										
										
										
											2021-07-12 13:54:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-30 13:57:12 +01:00
										 |  |  |     def generate_early(self): | 
					
						
							| 
									
										
										
										
											2022-02-23 04:02:11 +01:00
										 |  |  |         self.world.player_types[self.player] = SlotType.spectator  # mark as spectator | 
					
						
							| 
									
										
										
										
											2022-01-30 13:57:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-11 00:23:07 +01:00
										 |  |  |     def create_item(self, name: str) -> Item: | 
					
						
							|  |  |  |         if name == "Nothing": | 
					
						
							|  |  |  |             return Item(name, False, -1, self.player) | 
					
						
							|  |  |  |         raise KeyError(name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-03 14:32:32 +01:00
										 |  |  | class PlandoItem(NamedTuple): | 
					
						
							|  |  |  |     item: str | 
					
						
							|  |  |  |     location: str | 
					
						
							|  |  |  |     world: Union[bool, str] = False  # False -> own world, True -> not own world | 
					
						
							|  |  |  |     from_pool: bool = True  # if item should be removed from item pool | 
					
						
							| 
									
										
										
										
											2021-01-21 23:37:58 +01:00
										 |  |  |     force: str = 'silent'  # false -> warns if item not successfully placed. true -> errors out on failure to place item. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def warn(self, warning: str): | 
					
						
							|  |  |  |         if self.force in ['true', 'fail', 'failure', 'none', 'false', 'warn', 'warning']: | 
					
						
							|  |  |  |             logging.warning(f'{warning}') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             logging.debug(f'{warning}') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def failed(self, warning: str, exception=Exception): | 
					
						
							|  |  |  |         if self.force in ['true', 'fail', 'failure']: | 
					
						
							|  |  |  |             raise exception(warning) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.warn(warning) | 
					
						
							| 
									
										
										
										
											2021-01-03 14:32:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PlandoConnection(NamedTuple): | 
					
						
							|  |  |  |     entrance: str | 
					
						
							|  |  |  |     exit: str | 
					
						
							|  |  |  |     direction: str  # entrance, exit or both |