From 53d6bd818fa7e9917b8a53e7d2ae6acd704ca736 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 2 Jul 2023 15:33:30 +0800 Subject: [PATCH] Add: Plane switchings in page_map --- assets/share/map/bigmap/OCR_PLANE.png | Bin 0 -> 42537 bytes assets/share/map/bigmap/PLANE_SCROLL.png | Bin 0 -> 10414 bytes assets/share/map/bigmap/WORLD_HERTA.png | Bin 0 -> 17522 bytes assets/share/map/bigmap/WORLD_JARILO.png | Bin 0 -> 13708 bytes assets/share/map/bigmap/WORLD_LUOFU.png | Bin 0 -> 15121 bytes dev_tools/keyword_extract.py | 61 ++++++-- module/ocr/keyword.py | 2 +- module/ui/draggable_list.py | 22 ++- tasks/base/ui.py | 57 ++++++++ tasks/map/assets/assets_map_bigmap.py | 55 +++++++ tasks/map/bigmap/plane.py | 164 +++++++++++++++++++++ tasks/map/keywords/__init__.py | 2 + tasks/map/keywords/classes.py | 38 +++++ tasks/map/keywords/plane.py | 173 +++++++++++++++++++++++ 14 files changed, 557 insertions(+), 17 deletions(-) create mode 100644 assets/share/map/bigmap/OCR_PLANE.png create mode 100644 assets/share/map/bigmap/PLANE_SCROLL.png create mode 100644 assets/share/map/bigmap/WORLD_HERTA.png create mode 100644 assets/share/map/bigmap/WORLD_JARILO.png create mode 100644 assets/share/map/bigmap/WORLD_LUOFU.png create mode 100644 tasks/map/assets/assets_map_bigmap.py create mode 100644 tasks/map/bigmap/plane.py create mode 100644 tasks/map/keywords/__init__.py create mode 100644 tasks/map/keywords/classes.py create mode 100644 tasks/map/keywords/plane.py diff --git a/assets/share/map/bigmap/OCR_PLANE.png b/assets/share/map/bigmap/OCR_PLANE.png new file mode 100644 index 0000000000000000000000000000000000000000..68e439f72028880956f1eac089c601b5388f99e5 GIT binary patch literal 42537 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 IMdS1T2f!V2ApigX literal 0 HcmV?d00001 diff --git a/assets/share/map/bigmap/PLANE_SCROLL.png b/assets/share/map/bigmap/PLANE_SCROLL.png new file mode 100644 index 0000000000000000000000000000000000000000..fedf9f66e4822947b67c8bd327faf816d2b80166 GIT binary patch literal 10414 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 literal 0 HcmV?d00001 diff --git a/assets/share/map/bigmap/WORLD_HERTA.png b/assets/share/map/bigmap/WORLD_HERTA.png new file mode 100644 index 0000000000000000000000000000000000000000..294f90a093548ea35aba39363850adf848c6b542 GIT binary patch literal 17522 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 literal 0 HcmV?d00001 diff --git a/assets/share/map/bigmap/WORLD_JARILO.png b/assets/share/map/bigmap/WORLD_JARILO.png new file mode 100644 index 0000000000000000000000000000000000000000..6951c6184552beef928957e06c5a4c92114e4221 GIT binary patch literal 13708 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 K$NTilZ~hO$7Pg`Q literal 0 HcmV?d00001 diff --git a/assets/share/map/bigmap/WORLD_LUOFU.png b/assets/share/map/bigmap/WORLD_LUOFU.png new file mode 100644 index 0000000000000000000000000000000000000000..5591dee716974267a5b1d408a29a09b687a8a39f GIT binary patch literal 15121 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 bRsclf^7pK*lB_>h{jGnfU;Q`V{qX+))Yk`< literal 0 HcmV?d00001 diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index 21079aabe..c5cf0bf6d 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -119,37 +119,51 @@ class KeywordExtract: def load_keywords(self, keywords: list[str | int], lang='cn'): text_map = self.text_map[lang] - self.keywords_id = [text_map.find(keyword)[0] for keyword in keywords] - self.keywords_id = [keyword for keyword in self.keywords_id if keyword != 0] + keywords_id = [text_map.find(keyword)[0] for keyword in keywords] + self.keywords_id = [keyword for keyword in keywords_id if keyword != 0] + + def clear_keywords(self): + self.keywords_id = [] def write_keywords( self, keyword_class, - output_file: str, + output_file: str = '', text_convert=text_to_variable, + generator: CodeGenerator = None ): """ Args: keyword_class: output_file: text_convert: + generator: Reuse an existing code generator """ - gen = CodeGenerator() - gen.Import(f""" - from .classes import {keyword_class} - """) - gen.CommentAutoGenerage('dev_tools.keyword_extract') + if generator is None: + gen = CodeGenerator() + gen.Import(f""" + from .classes import {keyword_class} + """) + gen.CommentAutoGenerage('dev_tools.keyword_extract') + else: + gen = generator + + last_id = getattr(gen, 'last_id', 0) for index, keyword in enumerate(self.keywords_id): _, name = self.find_keyword(keyword, lang='en') name = text_convert(replace_templates(name)) with gen.Object(key=name, object_class=keyword_class): - gen.ObjectAttr(key='id', value=index + 1) + gen.ObjectAttr(key='id', value=index + last_id + 1) gen.ObjectAttr(key='name', value=name) for lang in UI_LANGUAGES: gen.ObjectAttr(key=lang, value=replace_templates(self.find_keyword(keyword, lang=lang)[1])) + gen.last_id = index + last_id + 1 - print(f'Write {output_file}') - gen.write(output_file) + if output_file: + print(f'Write {output_file}') + gen.write(output_file) + self.clear_keywords() + return gen def load_daily_quests_keywords(self, lang='cn'): daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json')) @@ -176,6 +190,7 @@ class KeywordExtract: print(f'Write {output_file}') gen.write(output_file) + self.clear_keywords() def generate_assignment_keywords(self): KeywordFromFile = namedtuple('KeywordFromFile', ('file', 'class_name', 'output_file')) @@ -187,6 +202,29 @@ class KeywordExtract: self.load_keywords(deep_get(data, 'Name.Hash') for data in read_file(file).values()) self.write_keywords(keyword_class=keyword.class_name, output_file=keyword.output_file) + def generate_map_planes(self): + planes = { + 'Herta': ['观景车厢', '主控舱段', '基座舱段', '收容舱段', '支援舱段'], + 'Jarilo': ['行政区', '城郊雪原', '边缘通路', '铁卫禁区', '残响回廊', '永冬岭', + '磐岩镇', '大矿区', '铆钉镇', '机械聚落'], + 'Luofu': ['星槎海中枢', '长乐天', '流云渡', '迴星港', '太卜司', '工造司'], + } + + def text_convert(world_): + def text_convert_wrapper(name): + name = text_to_variable(name).replace('_', '') + name = f'{world_}_{name}' + return name + + return text_convert_wrapper + + gen = None + for world, plane in planes.items(): + self.load_keywords(plane) + gen = self.write_keywords(keyword_class='MapPlane', output_file='', + text_convert=text_convert(world), generator=gen) + gen.write('./tasks/map/keywords/plane.py') + def generate(self): self.load_keywords(['模拟宇宙', '拟造花萼(金)', '拟造花萼(赤)', '凝滞虚影', '侵蚀隧洞', '历战余响', '忘却之庭']) self.write_keywords(keyword_class='DungeonNav', output_file='./tasks/dungeon/keywords/nav.py') @@ -205,6 +243,7 @@ class KeywordExtract: self.write_keywords(keyword_class='BattlePassTab', output_file='./tasks/battle_pass/keywords/tab.py') self.generate_assignment_keywords() self.generate_forgotten_hall_stages() + self.generate_map_planes() if __name__ == '__main__': diff --git a/module/ocr/keyword.py b/module/ocr/keyword.py index 1781ca6c1..4891d6c3d 100644 --- a/module/ocr/keyword.py +++ b/module/ocr/keyword.py @@ -6,7 +6,7 @@ from typing import ClassVar from module.exception import ScriptError import module.config.server as server -REGEX_PUNCTUATION = re.compile(r'[ ,.\'",。·•\-—/\\\n\t()()「」『』【】]') +REGEX_PUNCTUATION = re.compile(r'[ ,.\'"“”,。·•\-—/\\\n\t()()「」『』【】]') def parse_name(n): diff --git a/module/ui/draggable_list.py b/module/ui/draggable_list.py index b9540f877..89c38a2ba 100644 --- a/module/ui/draggable_list.py +++ b/module/ui/draggable_list.py @@ -190,20 +190,32 @@ class DraggableList: return False - def select_row(self, row: Keyword, main: ModuleBase, skip_first_screenshot=True): + def get_selected_row(self, main: ModuleBase) -> Optional[OcrResultButton]: + """ + `load_rows()` must be called before `get_selected_row()`. + """ + for row in self.cur_buttons: + if self.is_row_selected(row, main=main): + return row + return None + + def select_row(self, row: Keyword, main: ModuleBase, insight=True, skip_first_screenshot=True): """ Args: row: main: + insight: If call `insight_row()` before selecting skip_first_screenshot: Returns: If success """ - result = self.insight_row( - row, main=main, skip_first_screenshot=skip_first_screenshot) - if not result: - return False + if insight: + result = self.insight_row( + row, main=main, skip_first_screenshot=skip_first_screenshot) + if not result: + return False + logger.info(f'Select row: {row}') skip_first_screenshot = True interval = Timer(5) diff --git a/tasks/base/ui.py b/tasks/base/ui.py index 50702c4c9..3dc5241c0 100644 --- a/tasks/base/ui.py +++ b/tasks/base/ui.py @@ -1,3 +1,4 @@ +from module.base.button import ButtonWrapper from module.base.decorator import run_once from module.base.timer import Timer from module.exception import GameNotRunningError, GamePageUnknownError @@ -203,6 +204,62 @@ class UI(PopupHandler, StateMixin): self.device.click(button) retry.reset() + def ui_click( + self, + click_button, + check_button, + appear_button=None, + additional=None, + retry_wait=5, + skip_first_screenshot=True, + ): + """ + Args: + click_button (ButtonWrapper): + check_button (ButtonWrapper, callable, list[ButtonWrapper], tuple[ButtonWrapper]): + appear_button (ButtonWrapper, callable, list[ButtonWrapper], tuple[ButtonWrapper]): + additional (callable): + retry_wait (int, float): + skip_first_screenshot (bool): + """ + if appear_button is None: + appear_button = click_button + logger.info(f'UI click: {appear_button} -> {check_button}') + + def process_appear(button): + if isinstance(button, ButtonWrapper): + return self.appear(button) + elif callable(button): + return button() + elif isinstance(button, (list, tuple)): + for b in button: + if self.appear(b): + return True + return False + else: + return self.appear(button) + + click_timer = Timer(retry_wait, count=retry_wait // 0.5) + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if process_appear(check_button): + break + + # Click + if click_timer.reached(): + if process_appear(appear_button): + self.device.click(click_button) + click_timer.reset() + continue + if additional is not None: + if additional(): + continue + def is_in_main(self): return self.appear(page_main.check_button) diff --git a/tasks/map/assets/assets_map_bigmap.py b/tasks/map/assets/assets_map_bigmap.py new file mode 100644 index 000000000..b9ea3f2cb --- /dev/null +++ b/tasks/map/assets/assets_map_bigmap.py @@ -0,0 +1,55 @@ +from module.base.button import Button, ButtonWrapper + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.button_extract ``` + +OCR_PLANE = ButtonWrapper( + name='OCR_PLANE', + share=Button( + file='./assets/share/map/bigmap/OCR_PLANE.png', + area=(872, 138, 1252, 688), + search=(852, 118, 1272, 708), + color=(199, 199, 199), + button=(872, 138, 1252, 688), + ), +) +PLANE_SCROLL = ButtonWrapper( + name='PLANE_SCROLL', + share=Button( + file='./assets/share/map/bigmap/PLANE_SCROLL.png', + area=(1252, 138, 1256, 688), + search=(1232, 118, 1276, 708), + color=(103, 103, 103), + button=(1252, 138, 1256, 688), + ), +) +WORLD_HERTA = ButtonWrapper( + name='WORLD_HERTA', + share=Button( + file='./assets/share/map/bigmap/WORLD_HERTA.png', + area=(201, 332, 273, 394), + search=(181, 312, 293, 414), + color=(115, 122, 130), + button=(201, 332, 273, 394), + ), +) +WORLD_JARILO = ButtonWrapper( + name='WORLD_JARILO', + share=Button( + file='./assets/share/map/bigmap/WORLD_JARILO.png', + area=(638, 138, 706, 203), + search=(618, 118, 726, 223), + color=(104, 113, 121), + button=(638, 138, 706, 203), + ), +) +WORLD_LUOFU = ButtonWrapper( + name='WORLD_LUOFU', + share=Button( + file='./assets/share/map/bigmap/WORLD_LUOFU.png', + area=(983, 549, 1051, 612), + search=(963, 529, 1071, 632), + color=(103, 121, 105), + button=(983, 549, 1051, 612), + ), +) diff --git a/tasks/map/bigmap/plane.py b/tasks/map/bigmap/plane.py new file mode 100644 index 000000000..a9424214d --- /dev/null +++ b/tasks/map/bigmap/plane.py @@ -0,0 +1,164 @@ +import re +from typing import Optional + +from module.base.base import ModuleBase +from module.exception import ScriptError +from module.logger import logger +from module.ocr.ocr import Ocr, OcrResultButton +from module.ui.draggable_list import DraggableList +from module.ui.scroll import Scroll +from tasks.base.page import page_map, page_world +from tasks.base.ui import UI +from tasks.map.assets.assets_map_bigmap import * +from tasks.map.keywords import MapPlane, KEYWORDS_MAP_PLANE +from module.base.timer import Timer + + +def world_entrance(plane: MapPlane) -> ButtonWrapper: + if plane.is_HertaSpaceStation: + return WORLD_HERTA + if plane.is_JariloVI: + return WORLD_JARILO + if plane.is_Luofu: + return WORLD_LUOFU + raise ScriptError(f'world_entrance() got unknown plane: {plane}') + + +class OcrMapPlane(Ocr): + merge_thres_y = 20 + + def after_process(self, result): + result = super().after_process(result) + result = re.sub(r'[+→★“”,.,、。]', '', result).strip() + if self.lang == 'ch': + result = result.replace('迎星港', '迴星港') + return result + + +class DraggablePlaneList(DraggableList): + def is_row_selected(self, button: OcrResultButton, main: ModuleBase) -> bool: + # Items have an animation to be selected, check if the rightmost become black. + x = OCR_PLANE.area[2] + area = (x - 20, button.area[1], x, button.area[3]) + if main.image_color_count(area, color=(40, 40, 40), threshold=221, count=100): + return True + + return False + + +SCROLL_PLANE = Scroll(PLANE_SCROLL, color=(67, 67, 67), name='SCROLL_PLANE') +PLANE_LIST = DraggablePlaneList('PlaneList', keyword_class=MapPlane, ocr_class=OcrMapPlane, search_button=OCR_PLANE) + + +class BigmapPlane(UI): + def _bigmap_world_set(self, plane: MapPlane): + """ + Pages: + in: Any + out: page_map + """ + self.ui_goto(page_world) + self.ui_click(appear_button=page_world.check_button, + click_button=world_entrance(plane), + check_button=page_map.check_button) + + def _bigmap_get_current_plane(self) -> Optional[MapPlane]: + """ + Get current plane. + After entering page_map, the current plane is selected by default. + + Pages: + in: page_map + """ + PLANE_LIST.load_rows(main=self) + selected = PLANE_LIST.get_selected_row(main=self) + if selected is None: + return None + else: + return selected.matched_keyword + + def _bigmap_get_current_plane_wrapped(self) -> MapPlane: + """ + Get current plane with reties. + """ + for n in range(2): + self.ui_ensure(page_map) + + # Wait select animation + timeout = Timer(2).start() + skip_first_screenshot = True + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + current = self._bigmap_get_current_plane() + if current is not None: + return current + if timeout.reached(): + logger.warning('No plane was selected') + if n == 0: + # Nothing selected, probably because it has been switched to page_map before running. + # Exit and re-enter should fix it. + self.ui_goto_main() + break + + logger.error('Cannot find current plane, return the first plane in list instead') + try: + first = PLANE_LIST.cur_buttons[0].matched_keyword + if first is not None: + return first + else: + return KEYWORDS_MAP_PLANE.Herta_ParlorCar + except IndexError: + return KEYWORDS_MAP_PLANE.Herta_ParlorCar + + def bigmap_plane_set(self, plane: MapPlane): + """ + Set map ti given plane. + + Args: + plane: + + Returns: + bool: If success. + + Pages: + in: Any + out: page_map + """ + logger.info(f'Bigmap plane set: {plane}') + current = self._bigmap_get_current_plane_wrapped() + logger.attr('CurrentPlane', current) + + if current.world != plane.world: + logger.info(f'Switch to world {plane.world}') + self._bigmap_world_set(plane) + PLANE_LIST.load_rows(main=self) + + if plane.is_HertaSpaceStation: + PLANE_LIST.select_row(plane, main=self, insight=False) + return True + elif plane.is_JariloVI: + if plane in [ + KEYWORDS_MAP_PLANE.Jarilo_AdministrativeDistrict, + KEYWORDS_MAP_PLANE.Jarilo_OutlyingSnowPlains, + KEYWORDS_MAP_PLANE.Jarilo_BackwaterPass, + KEYWORDS_MAP_PLANE.Jarilo_SilvermaneGuardRestrictedZone, + KEYWORDS_MAP_PLANE.Jarilo_CorridorofFadingEchoes, + KEYWORDS_MAP_PLANE.Jarilo_EverwinterHill, + ]: + if SCROLL_PLANE.set_top(main=self): + PLANE_LIST.load_rows(main=self) + else: + if SCROLL_PLANE.set_bottom(main=self): + PLANE_LIST.load_rows(main=self) + + PLANE_LIST.select_row(plane, main=self, insight=False) + return True + elif plane.is_Luofu: + PLANE_LIST.select_row(plane, main=self, insight=False) + return True + + logger.error(f'Goto plane {plane} is not supported') + return False diff --git a/tasks/map/keywords/__init__.py b/tasks/map/keywords/__init__.py new file mode 100644 index 000000000..14bbb358a --- /dev/null +++ b/tasks/map/keywords/__init__.py @@ -0,0 +1,2 @@ +import tasks.map.keywords.plane as KEYWORDS_MAP_PLANE +from tasks.map.keywords.classes import MapPlane diff --git a/tasks/map/keywords/classes.py b/tasks/map/keywords/classes.py new file mode 100644 index 000000000..8288a9efa --- /dev/null +++ b/tasks/map/keywords/classes.py @@ -0,0 +1,38 @@ +from dataclasses import dataclass +from functools import cached_property +from typing import ClassVar + +from module.ocr.keyword import Keyword + + +@dataclass(repr=False) +class MapPlane(Keyword): + instances: ClassVar = {} + + @cached_property + def world(self) -> str: + """ + Returns: + str: World name. Note that "Parlor Car" is considered as a plane of Herta. + "Herta" for Herta Space Station + "Jarilo" for Jarilo-VI + "Luofu" for The Xianzhou Luofu + "" for unknown + """ + for world in ['Herta', 'Jarilo', 'Luofu']: + if self.name.startswith(world): + return world + + return '' + + @cached_property + def is_HertaSpaceStation(self): + return self.world == 'Herta' + + @cached_property + def is_JariloVI(self): + return self.world == 'Jarilo' + + @cached_property + def is_Luofu(self): + return self.world == 'Luofu' diff --git a/tasks/map/keywords/plane.py b/tasks/map/keywords/plane.py new file mode 100644 index 000000000..7c607102b --- /dev/null +++ b/tasks/map/keywords/plane.py @@ -0,0 +1,173 @@ +from .classes import MapPlane + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Herta_ParlorCar = MapPlane( + id=1, + name='Herta_ParlorCar', + cn='观景车厢', + cht='觀景車廂', + en='Parlor Car', + jp='列車のラウンジ', +) +Herta_MasterControlZone = MapPlane( + id=2, + name='Herta_MasterControlZone', + cn='主控舱段', + cht='主控艙段', + en='Master Control Zone', + jp='主制御部分', +) +Herta_BaseZone = MapPlane( + id=3, + name='Herta_BaseZone', + cn='基座舱段', + cht='基座艙段', + en='Base Zone', + jp='ベース部分', +) +Herta_StorageZone = MapPlane( + id=4, + name='Herta_StorageZone', + cn='收容舱段', + cht='收容艙段', + en='Storage Zone', + jp='収容部分', +) +Herta_SupplyZone = MapPlane( + id=5, + name='Herta_SupplyZone', + cn='支援舱段', + cht='支援艙段', + en='Supply Zone', + jp='サポート部分', +) +Jarilo_AdministrativeDistrict = MapPlane( + id=6, + name='Jarilo_AdministrativeDistrict', + cn='行政区', + cht='行政區', + en='Administrative District', + jp='行政区', +) +Jarilo_OutlyingSnowPlains = MapPlane( + id=7, + name='Jarilo_OutlyingSnowPlains', + cn='城郊雪原', + cht='城郊雪原', + en='Outlying Snow Plains', + jp='郊外雪原', +) +Jarilo_BackwaterPass = MapPlane( + id=8, + name='Jarilo_BackwaterPass', + cn='边缘通路', + cht='邊緣通道', + en='Backwater Pass', + jp='外縁通路', +) +Jarilo_SilvermaneGuardRestrictedZone = MapPlane( + id=9, + name='Jarilo_SilvermaneGuardRestrictedZone', + cn='铁卫禁区', + cht='鐵衛禁區', + en='Silvermane Guard Restricted Zone', + jp='シルバーメイン禁区', +) +Jarilo_CorridorofFadingEchoes = MapPlane( + id=10, + name='Jarilo_CorridorofFadingEchoes', + cn='残响回廊', + cht='殘響迴廊', + en='Corridor of Fading Echoes', + jp='残響回廊', +) +Jarilo_EverwinterHill = MapPlane( + id=11, + name='Jarilo_EverwinterHill', + cn='永冬岭', + cht='永冬嶺', + en='Everwinter Hill', + jp='常冬峰', +) +Jarilo_BoulderTown = MapPlane( + id=12, + name='Jarilo_BoulderTown', + cn='磐岩镇', + cht='磐岩鎮', + en='Boulder Town', + jp='ボルダータウン', +) +Jarilo_GreatMine = MapPlane( + id=13, + name='Jarilo_GreatMine', + cn='大矿区', + cht='大礦區', + en='Great Mine', + jp='大鉱区', +) +Jarilo_RivetTown = MapPlane( + id=14, + name='Jarilo_RivetTown', + cn='铆钉镇', + cht='鉚釘鎮', + en='Rivet Town', + jp='リベットタウン', +) +Jarilo_RobotSettlement = MapPlane( + id=15, + name='Jarilo_RobotSettlement', + cn='机械聚落', + cht='機械聚落', + en='Robot Settlement', + jp='機械集落', +) +Luofu_CentralStarskiffHaven = MapPlane( + id=16, + name='Luofu_CentralStarskiffHaven', + cn='星槎海中枢', + cht='星槎海中樞', + en='Central Starskiff Haven', + jp='星槎海中枢', +) +Luofu_ExaltingSanctum = MapPlane( + id=17, + name='Luofu_ExaltingSanctum', + cn='长乐天', + cht='長樂天', + en='Exalting Sanctum', + jp='長楽天', +) +Luofu_Cloudford = MapPlane( + id=18, + name='Luofu_Cloudford', + cn='流云渡', + cht='流雲渡', + en='Cloudford', + jp='流雲渡し', +) +Luofu_StargazerNavalia = MapPlane( + id=19, + name='Luofu_StargazerNavalia', + cn='迴星港', + cht='迴星港', + en='Stargazer Navalia', + jp='廻星港', +) +Luofu_DivinationCommission = MapPlane( + id=20, + name='Luofu_DivinationCommission', + cn='太卜司', + cht='太卜司', + en='Divination Commission', + jp='太卜司', +) +Luofu_ArtisanshipCommission = MapPlane( + id=21, + name='Luofu_ArtisanshipCommission', + cn='工造司', + cht='工造司', + en='Artisanship Commission', + jp='工造司', +)