| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  | from BaseClasses import Item, Tutorial, ItemClassification | 
					
						
							| 
									
										
										
										
											2021-11-11 00:23:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  | from ..AutoWorld import World, WebWorld | 
					
						
							| 
									
										
										
										
											2022-02-23 04:02:11 +01:00
										 |  |  | from NetUtils import SlotType | 
					
						
							| 
									
										
										
										
											2021-08-27 14:52:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  | class GenericWeb(WebWorld): | 
					
						
							|  |  |  |     advanced_settings = Tutorial('Advanced YAML Guide', | 
					
						
							|  |  |  |                                  'A guide to reading YAML files and editing them to fully customize your game.', | 
					
						
							|  |  |  |                                  'English', 'advanced_settings_en.md', 'advanced_settings/en', | 
					
						
							|  |  |  |                                  ['alwaysintreble', 'Alchav']) | 
					
						
							|  |  |  |     commands = Tutorial('Archipelago Server and Client Commands', | 
					
						
							|  |  |  |                         'A guide detailing the commands available to the user when participating in an Archipelago session.', | 
					
						
							|  |  |  |                         'English', 'commands_en.md', 'commands/en', ['jat2980', 'Ijwu']) | 
					
						
							| 
									
										
										
										
											2022-07-09 21:16:41 -04:00
										 |  |  |     mac = Tutorial('Archipelago Setup Guide for Mac', 'A guide detailing how to run Archipelago clients on macOS.',  | 
					
						
							|  |  |  |                    'English', 'mac_en.md','mac/en', ['Bicoloursnake']) | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  |     plando = Tutorial('Archipelago Plando Guide', 'A guide to understanding and using plando for your game.', | 
					
						
							|  |  |  |                       'English', 'plando_en.md', 'plando/en', ['alwaysintreble', 'Alchav']) | 
					
						
							| 
									
										
										
										
											2023-06-28 19:06:18 -05:00
										 |  |  |     setup = Tutorial('Getting Started', | 
					
						
							|  |  |  |                      'A guide to setting up the Archipelago software, and generating, hosting, and connecting to ' | 
					
						
							|  |  |  |                      'multiworld games.', | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  |                      'English', 'setup_en.md', 'setup/en', ['alwaysintreble']) | 
					
						
							|  |  |  |     triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.', | 
					
						
							|  |  |  |                         'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble']) | 
					
						
							| 
									
										
										
										
											2023-06-28 19:06:18 -05:00
										 |  |  |     tutorials = [setup, mac, commands, advanced_settings, triggers, plando] | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2022-05-11 13:05:53 -05:00
										 |  |  |     web = GenericWeb() | 
					
						
							| 
									
										
										
										
											2021-07-12 13:54:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-30 13:57:12 +01:00
										 |  |  |     def generate_early(self): | 
					
						
							| 
									
										
										
										
											2022-10-31 21:41:21 -05:00
										 |  |  |         self.multiworld.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": | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  |             return Item(name, ItemClassification.filler, -1, self.player) | 
					
						
							| 
									
										
										
										
											2021-11-11 00:23:07 +01:00
										 |  |  |         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) |