def read_node(self, data: Dict) -> Node: name: str = data["name"] heal: bool = data["heal"] node_type: int = data["node_type"] if node_type == 0: self.generic_index += 1 return GenericNode(name, heal, self.generic_index) elif node_type == 1: return DockNode(name, heal, data["dock_index"], DockConnection(data["connected_area_asset_id"], data["connected_dock_index"]), self.dock_weakness_database.get_by_type_and_index(DockType(data["dock_type"]), data["dock_weakness_index"])) elif node_type == 2: return PickupNode(name, heal, PickupIndex(data["pickup_index"])) elif node_type == 3: instance_id = data["teleporter_instance_id"] destination_world_asset_id = data["destination_world_asset_id"] destination_area_asset_id = data["destination_area_asset_id"] return TeleporterNode(name, heal, instance_id, AreaLocation(destination_world_asset_id, destination_area_asset_id)) elif node_type == 4: return EventNode(name, heal, self.resource_database.get_by_type_and_index(ResourceType.EVENT, data["event_index"])) else: raise Exception("Unknown node type: {}".format(node_type))
def read_node(self, data: Dict) -> Node: name: str = data["name"] self.generic_index += 1 try: heal: bool = data["heal"] node_type: int = data["node_type"] location = None if data["coordinates"] is not None: location = location_from_json(data["coordinates"]) if node_type == "generic": return GenericNode(name, heal, location, self.generic_index) elif node_type == "dock": return DockNode( name, heal, location, self.generic_index, data["dock_index"], DockConnection(data["connected_area_asset_id"], data["connected_dock_index"]), self.dock_weakness_database.get_by_type_and_index( DockType(data["dock_type"]), data["dock_weakness_index"])) elif node_type == "pickup": return PickupNode(name, heal, location, self.generic_index, PickupIndex(data["pickup_index"]), data["major_location"]) elif node_type == "teleporter": instance_id = data["teleporter_instance_id"] destination_world_asset_id = data["destination_world_asset_id"] destination_area_asset_id = data["destination_area_asset_id"] return TeleporterNode( name, heal, location, self.generic_index, instance_id, AreaLocation(destination_world_asset_id, destination_area_asset_id), data["scan_asset_id"], data["keep_name_when_vanilla"], data["editable"], ) elif node_type == "event": return EventNode( name, heal, location, self.generic_index, self.resource_database.get_by_type_and_index( ResourceType.EVENT, data["event_index"])) elif node_type == "translator_gate": return TranslatorGateNode(name, heal, location, self.generic_index, TranslatorGate(data["gate_index"]), self._get_scan_visor()) elif node_type == "logbook": lore_type = LoreType(data["lore_type"]) if lore_type == LoreType.LUMINOTH_LORE: required_translator = self.resource_database.get_item( data["extra"]) else: required_translator = None if lore_type in { LoreType.LUMINOTH_WARRIOR, LoreType.SKY_TEMPLE_KEY_HINT }: hint_index = data["extra"] else: hint_index = None return LogbookNode(name, heal, location, self.generic_index, data["string_asset_id"], self._get_scan_visor(), lore_type, required_translator, hint_index) else: raise Exception(f"Unknown type: {node_type}") except Exception as e: raise Exception(f"In node {name}, got error: {e}")
def read_node(self, data: Dict) -> Node: name: str = data["name"] heal: bool = data["heal"] node_type: int = data["node_type"] self.generic_index += 1 if node_type == 0: return GenericNode(name, heal, self.generic_index) elif node_type == 1: return DockNode( name, heal, self.generic_index, data["dock_index"], DockConnection(data["connected_area_asset_id"], data["connected_dock_index"]), self.dock_weakness_database.get_by_type_and_index( DockType(data["dock_type"]), data["dock_weakness_index"])) elif node_type == 2: return PickupNode(name, heal, self.generic_index, PickupIndex(data["pickup_index"]), data["major_location"]) elif node_type == 3: instance_id = data["teleporter_instance_id"] destination_world_asset_id = data["destination_world_asset_id"] destination_area_asset_id = data["destination_area_asset_id"] return TeleporterNode( name, heal, self.generic_index, instance_id, AreaLocation(destination_world_asset_id, destination_area_asset_id), data["keep_name_when_vanilla"], data["editable"], ) elif node_type == 4: return EventNode( name, heal, self.generic_index, self.resource_database.get_by_type_and_index( ResourceType.EVENT, data["event_index"])) elif node_type == 5: return TranslatorGateNode( name, heal, self.generic_index, TranslatorGate(data["gate_index"]), find_resource_info_with_long_name(self.resource_database.item, "Scan Visor")) elif node_type == 6: lore_type = list(LoreType)[data["lore_type"]] if lore_type == LoreType.LUMINOTH_LORE: required_translator = self.resource_database.get_item( data["extra"]) else: required_translator = None if lore_type in { LoreType.LUMINOTH_WARRIOR, LoreType.SKY_TEMPLE_KEY_HINT }: hint_index = data["extra"] else: hint_index = None return LogbookNode( name, heal, self.generic_index, data["string_asset_id"], find_resource_info_with_long_name(self.resource_database.item, "Scan Visor"), lore_type, required_translator, hint_index) else: raise Exception("Unknown node type: {}".format(node_type))