2021-01-03 13:32:32 +00:00
|
|
|
from typing import NamedTuple, Union
|
2021-01-21 22:37:58 +00:00
|
|
|
import logging
|
2021-01-03 13:32:32 +00:00
|
|
|
|
2022-06-17 01:23:27 +00:00
|
|
|
from BaseClasses import Item, Tutorial, ItemClassification
|
2021-11-10 23:23:07 +00:00
|
|
|
|
2022-05-11 18:05:53 +00:00
|
|
|
from ..AutoWorld import World, WebWorld
|
2022-02-23 03:02:11 +00:00
|
|
|
from NetUtils import SlotType
|
2021-08-27 12:52:33 +00:00
|
|
|
|
|
|
|
|
2022-05-11 18:05:53 +00: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-10 01:16:41 +00: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 18:05:53 +00:00
|
|
|
plando = Tutorial('Archipelago Plando Guide', 'A guide to understanding and using plando for your game.',
|
|
|
|
'English', 'plando_en.md', 'plando/en', ['alwaysintreble', 'Alchav'])
|
|
|
|
setup = Tutorial('Multiworld Setup Tutorial',
|
|
|
|
'A guide to setting up the Archipelago software to generate and host multiworld games on your computer.',
|
|
|
|
'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'])
|
|
|
|
using_website = Tutorial('Archipelago Website User Guide',
|
2022-05-16 14:18:07 +00:00
|
|
|
'A guide to using the Archipelago website to generate multiworlds or host pre-generated multiworlds.',
|
2022-05-11 18:05:53 +00:00
|
|
|
'English', 'using_website_en.md', 'using_website/en', ['alwaysintreble'])
|
2022-07-10 01:16:41 +00:00
|
|
|
tutorials = [setup, using_website, mac, commands, advanced_settings, triggers, plando]
|
2022-05-11 18:05:53 +00:00
|
|
|
|
|
|
|
|
2021-08-27 12:52:33 +00:00
|
|
|
class GenericWorld(World):
|
|
|
|
game = "Archipelago"
|
|
|
|
topology_present = False
|
|
|
|
item_name_to_id = {
|
|
|
|
"Nothing": -1
|
|
|
|
}
|
|
|
|
location_name_to_id = {
|
2021-11-11 10:47:45 +00:00
|
|
|
"Cheat Console": -1,
|
2021-08-27 12:52:33 +00:00
|
|
|
"Server": -2
|
|
|
|
}
|
|
|
|
hidden = True
|
2022-05-11 18:05:53 +00:00
|
|
|
web = GenericWeb()
|
2021-07-12 11:54:47 +00:00
|
|
|
|
2022-01-30 12:57:12 +00:00
|
|
|
def generate_early(self):
|
2022-11-01 02:41:21 +00:00
|
|
|
self.multiworld.player_types[self.player] = SlotType.spectator # mark as spectator
|
2022-01-30 12:57:12 +00:00
|
|
|
|
2021-11-10 23:23:07 +00:00
|
|
|
def create_item(self, name: str) -> Item:
|
|
|
|
if name == "Nothing":
|
2022-06-17 01:23:27 +00:00
|
|
|
return Item(name, ItemClassification.filler, -1, self.player)
|
2021-11-10 23:23:07 +00:00
|
|
|
raise KeyError(name)
|
|
|
|
|
|
|
|
|
2021-01-03 13:32:32 +00: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 22:37:58 +00: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 13:32:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
class PlandoConnection(NamedTuple):
|
|
|
|
entrance: str
|
|
|
|
exit: str
|
|
|
|
direction: str # entrance, exit or both
|