diff --git a/assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png b/assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png new file mode 100644 index 000000000..259704520 Binary files /dev/null and b/assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png differ diff --git a/assets/share/item/data/OCR_DATA.png b/assets/share/item/data/OCR_DATA.png new file mode 100644 index 000000000..5c7df6db7 Binary files /dev/null and b/assets/share/item/data/OCR_DATA.png differ diff --git a/config/template.json b/config/template.json index 723b1e73a..41dfb1136 100644 --- a/config/template.json +++ b/config/template.json @@ -129,6 +129,18 @@ "Assignment": {} } }, + "DataUpdate": { + "Scheduler": { + "Enable": true, + "NextRun": "2020-01-01 00:00:00", + "Command": "DataUpdate", + "ServerUpdate": "04:00" + }, + "ItemStorage": { + "Credit": {}, + "StallerJade": {} + } + }, "Rogue": { "Scheduler": { "Enable": false, diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index 4fa9e7762..2d3282db0 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -265,8 +265,9 @@ class KeywordExtract: def generate_map_planes(self): planes = { - 'Herta': ['黑塔的办公室', - '观景车厢', '主控舱段', '基座舱段', '收容舱段', '支援舱段'], + 'Special': ['黑塔的办公室', '锋芒崭露'], + 'Rogue': [ '区域-战斗', '区域-事件', '区域-遭遇', '区域-休整', '区域-精英', '区域-首领', '区域-交易'], + 'Herta': ['观景车厢', '主控舱段', '基座舱段', '收容舱段', '支援舱段'], 'Jarilo': ['行政区', '城郊雪原', '边缘通路', '铁卫禁区', '残响回廊', '永冬岭', '磐岩镇', '大矿区', '铆钉镇', '机械聚落'], 'Luofu': ['星槎海中枢', '流云渡', '迴星港', '长乐天', '金人巷', '太卜司', '工造司', '丹鼎司', '鳞渊境'], diff --git a/dev_tools/route_extract.py b/dev_tools/route_extract.py index 08d341f25..dedc2e5e8 100644 --- a/dev_tools/route_extract.py +++ b/dev_tools/route_extract.py @@ -75,6 +75,8 @@ class RouteExtract: gen.Import(""" from tasks.map.route.base import RouteData """) + gen.CommentAutoGenerage('dev_tools.route_extract') + for f in self.iter_files(): for row in self.extract_route(f): with gen.Object(key=row.name, object_class='RouteData'): diff --git a/module/config/argument/args.json b/module/config/argument/args.json index a4609af9a..adf07c25f 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -997,6 +997,53 @@ } } }, + "DataUpdate": { + "Scheduler": { + "Enable": { + "type": "state", + "value": true, + "option": [ + true + ], + "option_bold": [ + true + ] + }, + "NextRun": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + }, + "Command": { + "type": "input", + "value": "DataUpdate", + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "04:00", + "display": "hide" + } + }, + "ItemStorage": { + "Credit": { + "type": "stored", + "value": {}, + "display": "hide", + "stored": "StoredInt", + "order": 7, + "color": "#ab7cf2" + }, + "StallerJade": { + "type": "stored", + "value": {}, + "display": "hide", + "stored": "StoredInt", + "order": 8, + "color": "#fc8f8b" + } + } + }, "Rogue": { "Scheduler": { "Enable": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 8f7bd4d6c..fb10caf59 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -168,6 +168,16 @@ Assignment: order: 3 color: "#79dbc4" +ItemStorage: + Credit: + stored: StoredInt + order: 7 + color: "#ab7cf2" + StallerJade: + stored: StoredInt + order: 8 + color: "#fc8f8b" + # ==================== Rogue ==================== RoguePath: diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index e164e6947..20b29b051 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -14,7 +14,8 @@ "Dungeon", "DailyQuest", "BattlePass", - "Assignment" + "Assignment", + "DataUpdate" ] } } \ No newline at end of file diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index 4c7d9ca12..4657d6590 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -21,10 +21,12 @@ Restart: option_bold: [ true, ] ServerUpdate: 04:00 -# ==================== Farm ==================== - - # ==================== Daily ==================== - -# ==================== Tools ==================== +DataUpdate: + Scheduler: + Enable: + type: state + value: true + option: [ true, ] + option_bold: [ true, ] diff --git a/module/config/argument/stored.json b/module/config/argument/stored.json index d495e6aa3..9fa7a416b 100644 --- a/module/config/argument/stored.json +++ b/module/config/argument/stored.json @@ -64,6 +64,30 @@ "order": 6, "color": "#8fb5fe" }, + "Credit": { + "name": "Credit", + "path": "DataUpdate.ItemStorage.Credit", + "i18n": "ItemStorage.Credit.name", + "stored": "StoredInt", + "attrs": { + "time": "2020-01-01 00:00:00", + "value": 0 + }, + "order": 7, + "color": "#ab7cf2" + }, + "StallerJade": { + "name": "StallerJade", + "path": "DataUpdate.ItemStorage.StallerJade", + "i18n": "ItemStorage.StallerJade.name", + "stored": "StoredInt", + "attrs": { + "time": "2020-01-01 00:00:00", + "value": 0 + }, + "order": 8, + "color": "#fc8f8b" + }, "DungeonDouble": { "name": "DungeonDouble", "path": "Dungeon.DungeonStorage.DungeonDouble", diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index 68ff11bff..6cb0515c5 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -38,6 +38,9 @@ Daily: Assignment: - Scheduler - Assignment + DataUpdate: + - Scheduler + - ItemStorage # ==================== Rogue ==================== diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 1b4f98ce3..da2b7a8da 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -103,6 +103,10 @@ class GeneratedConfig: Assignment_Duration = 20 # 4, 8, 12, 20 Assignment_Assignment = {} + # Group `ItemStorage` + ItemStorage_Credit = {} + ItemStorage_StallerJade = {} + # Group `RoguePath` RoguePath_Path = 'The_Hunt' # Preservation, Remembrance, Nihility, Abundance, The_Hunt, Destruction, Elation RoguePath_Bonus = 'Blessing Cosmos' # Blessing Cosmos, Miracle Cosmos, Fragmented Cosmos diff --git a/module/config/config_manual.py b/module/config/config_manual.py index 01b03810a..051e15c86 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -10,7 +10,8 @@ class ManualConfig: SCHEDULER_PRIORITY = """ Restart - > BattlePass > DailyQuest > Assignment > Dungeon + > BattlePass > DailyQuest > Assignment > DataUpdate + > Dungeon """ """ diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index a5ebebc3e..81c5be155 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -38,6 +38,10 @@ "name": "Assignment", "help": "" }, + "DataUpdate": { + "name": "Dashboard Upd", + "help": "" + }, "Rogue": { "name": "Simulated Universe", "help": "Simulated Universe is in development, task will not be run" @@ -694,7 +698,21 @@ "20": "20 Hours" }, "Assignment": { - "name": "Assignment", + "name": "Assign.", + "help": "" + } + }, + "ItemStorage": { + "_info": { + "name": "ItemStorage._info.name", + "help": "ItemStorage._info.help" + }, + "Credit": { + "name": "Credit", + "help": "" + }, + "StallerJade": { + "name": "Jade", "help": "" } }, diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index db678a41d..f20352d19 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -38,6 +38,10 @@ "name": "依頼設定", "help": "" }, + "DataUpdate": { + "name": "Task.DataUpdate.name", + "help": "Task.DataUpdate.help" + }, "Rogue": { "name": "Task.Rogue.name", "help": "Task.Rogue.help" @@ -698,6 +702,20 @@ "help": "Assignment.Assignment.help" } }, + "ItemStorage": { + "_info": { + "name": "ItemStorage._info.name", + "help": "ItemStorage._info.help" + }, + "Credit": { + "name": "ItemStorage.Credit.name", + "help": "ItemStorage.Credit.help" + }, + "StallerJade": { + "name": "ItemStorage.StallerJade.name", + "help": "ItemStorage.StallerJade.help" + } + }, "RoguePath": { "_info": { "name": "RoguePath._info.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b2fa512a2..a951bd771 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -38,6 +38,10 @@ "name": "委托", "help": "" }, + "DataUpdate": { + "name": "仪表盘更新", + "help": "" + }, "Rogue": { "name": "模拟宇宙", "help": "模拟宇宙还在开发中,任务不会被运行" @@ -698,6 +702,20 @@ "help": "" } }, + "ItemStorage": { + "_info": { + "name": "ItemStorage._info.name", + "help": "ItemStorage._info.help" + }, + "Credit": { + "name": "信用点", + "help": "" + }, + "StallerJade": { + "name": "星琼", + "help": "" + } + }, "RoguePath": { "_info": { "name": "命途设置", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 6d01a9008..762665f90 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -38,6 +38,10 @@ "name": "委託", "help": "" }, + "DataUpdate": { + "name": "儀表板更新", + "help": "" + }, "Rogue": { "name": "模擬宇宙", "help": "模擬宇宙還在開發中,任務不會被運行" @@ -698,6 +702,20 @@ "help": "" } }, + "ItemStorage": { + "_info": { + "name": "ItemStorage._info.name", + "help": "ItemStorage._info.help" + }, + "Credit": { + "name": "信用點", + "help": "" + }, + "StallerJade": { + "name": "星瓊", + "help": "" + } + }, "RoguePath": { "_info": { "name": "命途設定", diff --git a/module/config/stored/stored_generated.py b/module/config/stored/stored_generated.py index 903a4ad20..20b62f871 100644 --- a/module/config/stored/stored_generated.py +++ b/module/config/stored/stored_generated.py @@ -26,3 +26,5 @@ class StoredGenerated: BattlePassLevel = StoredBattlePassLevel("BattlePass.BattlePassStorage.BattlePassLevel") BattlePassTodayQuest = StoredBattlePassTodayQuest("BattlePass.BattlePassStorage.BattlePassTodayQuest") Assignment = StoredAssignment("Assignment.Assignment.Assignment") + Credit = StoredInt("DataUpdate.ItemStorage.Credit") + StallerJade = StoredInt("DataUpdate.ItemStorage.StallerJade") diff --git a/module/webui/app.py b/module/webui/app.py index a33e92e1c..06683ba64 100644 --- a/module/webui/app.py +++ b/module/webui/app.py @@ -415,9 +415,10 @@ class AlasGUI(Frame): put_html('
'), put_scope("dashboard", [ # Empty dashboard, values will be updated in alas_update_overview_task() - put_scope(f"dashboard-row-{arg}", []) for arg in self.ALAS_STORED.keys() + put_scope(f"dashboard-row-{arg}", []) + for arg in self.ALAS_STORED.keys() if deep_get(self.ALAS_STORED, keys=[arg, "order"], default=0) # Empty content to left-align last row - ] + [put_html("")] * len(self.ALAS_STORED)) + ] + [put_html("")] * min(len(self.ALAS_STORED), 4)) ]) put_scope("log", [put_html("")]) diff --git a/src.py b/src.py index e39464425..1a24eb2ce 100644 --- a/src.py +++ b/src.py @@ -38,6 +38,10 @@ class StarRailCopilot(AzurLaneAutoScript): from tasks.assignment.assignment import Assignment Assignment(config=self.config, device=self.device).run() + def data_update(self): + from tasks.item.data_update import DataUpdate + DataUpdate(config=self.config, device=self.device).run() + if __name__ == '__main__': src = StarRailCopilot('src') diff --git a/tasks/base/assets/assets_base_main_page.py b/tasks/base/assets/assets_base_main_page.py index 586dac75b..3a50ad9ed 100644 --- a/tasks/base/assets/assets_base_main_page.py +++ b/tasks/base/assets/assets_base_main_page.py @@ -13,3 +13,13 @@ OCR_MAP_NAME = ButtonWrapper( button=(48, 15, 373, 32), ), ) +ROGUE_LEAVE_FOR_NOW = ButtonWrapper( + name='ROGUE_LEAVE_FOR_NOW', + share=Button( + file='./assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png', + area=(729, 475, 765, 519), + search=(709, 455, 785, 539), + color=(82, 74, 59), + button=(729, 475, 765, 519), + ), +) diff --git a/tasks/base/main_page.py b/tasks/base/main_page.py index 9a0da4915..8c9f3322d 100644 --- a/tasks/base/main_page.py +++ b/tasks/base/main_page.py @@ -2,13 +2,15 @@ import re from typing import Optional import module.config.server as server -from module.base.base import ModuleBase from module.config.server import VALID_LANG from module.exception import RequestHumanTakeover, ScriptError from module.logger import logger from module.ocr.ocr import Ocr -from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME -from tasks.base.page import Page, page_main +from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME, ROGUE_LEAVE_FOR_NOW +from tasks.base.assets.assets_base_page import CLOSE, MAP_EXIT +from tasks.base.page import Page, page_gacha, page_main +from tasks.base.popup import PopupHandler +from tasks.daily.assets.assets_daily_trial import START_TRIAL from tasks.map.keywords import KEYWORDS_MAP_PLANE, MapPlane @@ -18,10 +20,13 @@ class OcrPlaneName(Ocr): result = re.sub(r'-[Ii1]$', '', result) result = re.sub(r'\d+$', '', result) + # 累塔的办公室 + result = result.replace('累塔', '黑塔') + return super().after_process(result) -class MainPage(ModuleBase): +class MainPage(PopupHandler): # Same as BigmapPlane class # Current plane plane: MapPlane = KEYWORDS_MAP_PLANE.Herta_ParlorCar @@ -93,3 +98,51 @@ class MainPage(ModuleBase): self.handle_lang_check(page=page_main) return True + + def ui_leave_special(self): + """ + Leave from: + - Rogue domains + - Character trials + + Returns: + bool: If left a special plane + + Pages: + in: Any + out: page_main + """ + if not self.appear(MAP_EXIT): + return False + + logger.info('UI leave special') + skip_first_screenshot = True + clicked = False + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if clicked: + if self.appear(page_main.check_button): + logger.info(f'Leave to {page_main}') + break + + if self.appear_then_click(MAP_EXIT, interval=2): + continue + if self.handle_popup_confirm(): + continue + if self.match_template_color(START_TRIAL, interval=2): + logger.info(f'{START_TRIAL} -> {CLOSE}') + self.device.click(CLOSE) + clicked = True + continue + if self.appear(page_gacha.check_button, interval=2): + logger.info(f'{page_gacha} -> {CLOSE}') + self.device.click(CLOSE) + continue + if self.appear_then_click(ROGUE_LEAVE_FOR_NOW, interval=2): + clicked = True + continue diff --git a/tasks/base/ui.py b/tasks/base/ui.py index e606e2968..80a04489b 100644 --- a/tasks/base/ui.py +++ b/tasks/base/ui.py @@ -7,12 +7,12 @@ from module.ocr.ocr import Ocr from tasks.base.assets.assets_base_page import CLOSE, MAP_EXIT from tasks.base.main_page import MainPage from tasks.base.page import Page, page_main -from tasks.base.popup import PopupHandler from tasks.combat.assets.assets_combat_finish import COMBAT_EXIT from tasks.combat.assets.assets_combat_prepare import COMBAT_PREPARE +from tasks.daily.assets.assets_daily_trial import INFO_CLOSE -class UI(PopupHandler, MainPage): +class UI( MainPage): ui_current: Page ui_main_confirm_timer = Timer(0.2, count=0) @@ -143,10 +143,11 @@ class UI(PopupHandler, MainPage): # Reset connection Page.clear_connection() - def ui_ensure(self, destination, skip_first_screenshot=True): + def ui_ensure(self, destination, acquire_lang_checked=True, skip_first_screenshot=True): """ Args: destination (Page): + acquire_lang_checked: skip_first_screenshot: Returns: @@ -154,8 +155,12 @@ class UI(PopupHandler, MainPage): """ logger.hr("UI ensure") self.ui_get_current_page(skip_first_screenshot=skip_first_screenshot) - if self.acquire_lang_checked(): - self.ui_get_current_page(skip_first_screenshot=skip_first_screenshot) + + self.ui_leave_special() + + if acquire_lang_checked: + if self.acquire_lang_checked(): + self.ui_get_current_page(skip_first_screenshot=skip_first_screenshot) if self.ui_current == destination: logger.info("Already at %s" % destination) @@ -294,6 +299,8 @@ class UI(PopupHandler, MainPage): self.device.click(CLOSE) if self.appear_then_click(COMBAT_EXIT, interval=5): return True + if self.appear_then_click(INFO_CLOSE, interval=5): + return True return False diff --git a/tasks/combat/skill.py b/tasks/combat/skill.py index d8403002e..843526a62 100644 --- a/tasks/combat/skill.py +++ b/tasks/combat/skill.py @@ -51,6 +51,10 @@ class CombatSkill(UI): logger.info(f'Skill used: {button}') break + def _is_skill_active(self, button): + flag = self.image_color_count(button, color=(220, 196, 145), threshold=221, count=50) + return flag + def _skill_switch(self, check_button, click_button, skip_first_screenshot=True): """ Switch to A or E @@ -64,11 +68,11 @@ class CombatSkill(UI): self.device.screenshot() # Raw brown border - if self.image_color_count(check_button, color=(220, 196, 145), threshold=221, count=50): + if self._is_skill_active(check_button): logger.info(f'Skill switched: {check_button}') break - if self.is_in_skill(): + if self.is_in_skill() and (self._is_skill_active(CHECK_A) or self._is_skill_active(CHECK_E)): if interval.reached(): self.device.click(click_button) interval.reset() diff --git a/tasks/daily/daily_quest.py b/tasks/daily/daily_quest.py index 096a848dd..4ea223f89 100644 --- a/tasks/daily/daily_quest.py +++ b/tasks/daily/daily_quest.py @@ -274,9 +274,6 @@ class DailyQuestUI(DungeonUI, RouteLoader): """ enemy = 0 item = 0 - quests = [ - KEYWORDS_DAILY_QUEST.Enter_combat_by_attacking_enemy_Weakness_and_win_3_times, - ] if KEYWORDS_DAILY_QUEST.In_a_single_battle_inflict_3_Weakness_Break_of_different_Types in quests: enemy = max(enemy, 1) if KEYWORDS_DAILY_QUEST.Inflict_Weakness_Break_5_times in quests: @@ -327,5 +324,6 @@ class DailyQuestUI(DungeonUI, RouteLoader): if KEYWORD_BATTLE_PASS_QUEST.Reach_500_on_Daily_Training_Activity in quests: logger.info('Achieved battle pass quest Reach_500_on_Daily_Training_Activity') self.config.task_call('BattlePass') + self.config.task_call('DataUpdate') # Delay self self.config.task_delay(server_update=True) diff --git a/tasks/item/assets/assets_item_data.py b/tasks/item/assets/assets_item_data.py new file mode 100644 index 000000000..53ad8c4dd --- /dev/null +++ b/tasks/item/assets/assets_item_data.py @@ -0,0 +1,15 @@ +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_DATA = ButtonWrapper( + name='OCR_DATA', + share=Button( + file='./assets/share/item/data/OCR_DATA.png', + area=(843, 13, 1152, 61), + search=(823, 0, 1172, 81), + color=(39, 43, 51), + button=(843, 13, 1152, 61), + ), +) diff --git a/tasks/item/data_update.py b/tasks/item/data_update.py new file mode 100644 index 000000000..40174d836 --- /dev/null +++ b/tasks/item/data_update.py @@ -0,0 +1,44 @@ +from module.base.timer import Timer +from module.logger import logger +from module.ocr.ocr import Digit +from tasks.base.page import page_item +from tasks.base.ui import UI +from tasks.item.assets.assets_item_data import OCR_DATA + + +class DataUpdate(UI): + def _get_data(self): + """ + Page: + in: page_item + """ + ocr = Digit(OCR_DATA) + + timeout = Timer(2, count=6).start() + credit, jade = 0, 0 + while 1: + data = ocr.detect_and_ocr(self.device.image) + if len(data) == 2: + credit, jade = [int(d.ocr_text) for d in data] + if credit > 0 or jade > 0: + break + + logger.warning(f'Invalid credit and stellar jade: {data}') + if timeout.reached(): + logger.warning('Get data timeout') + break + + logger.attr('Credit', credit) + logger.attr('StellarJade', jade) + with self.config.multi_set(): + self.config.stored.Credit.value = credit + self.config.stored.StallerJade.value = jade + + return credit, jade + + def run(self): + self.ui_ensure(page_item, acquire_lang_checked=False) + + with self.config.multi_set(): + self._get_data() + self.config.task_delay(server_update=True) diff --git a/tasks/map/keywords/plane.py b/tasks/map/keywords/plane.py index 0aaa0d5ff..5779223d7 100644 --- a/tasks/map/keywords/plane.py +++ b/tasks/map/keywords/plane.py @@ -3,16 +3,80 @@ from .classes import MapPlane # This file was auto-generated, do not modify it manually. To generate: # ``` python -m dev_tools.keyword_extract ``` -Herta_HertaOffice = MapPlane( +Special_HertaOffice = MapPlane( id=1, - name='Herta_HertaOffice', + name='Special_HertaOffice', cn='黑塔的办公室', cht='黑塔的辦公室', en="Herta's Office", jp='ヘルタのオフィス', ) -Herta_ParlorCar = MapPlane( +Special_AptitudeShowcase = MapPlane( id=2, + name='Special_AptitudeShowcase', + cn='锋芒崭露', + cht='鋒芒嶄露', + en='Aptitude Showcase', + jp='躍進する新星', +) +Rogue_DomainCombat = MapPlane( + id=3, + name='Rogue_DomainCombat', + cn='区域-战斗', + cht='區域-戰鬥', + en='Domain — Combat', + jp='エリア-戦闘', +) +Rogue_DomainOccurrence = MapPlane( + id=4, + name='Rogue_DomainOccurrence', + cn='区域-事件', + cht='區域-事件', + en='Domain — Occurrence', + jp='エリア-イベント', +) +Rogue_DomainEncounter = MapPlane( + id=5, + name='Rogue_DomainEncounter', + cn='区域-遭遇', + cht='區域-遭遇', + en='Domain — Encounter', + jp='エリア-遭遇', +) +Rogue_DomainRespite = MapPlane( + id=6, + name='Rogue_DomainRespite', + cn='区域-休整', + cht='區域-整備', + en='Domain — Respite', + jp='エリア-休憩', +) +Rogue_DomainElite = MapPlane( + id=7, + name='Rogue_DomainElite', + cn='区域-精英', + cht='區域-菁英', + en='Domain — Elite', + jp='エリア-精鋭', +) +Rogue_DomainBoss = MapPlane( + id=8, + name='Rogue_DomainBoss', + cn='区域-首领', + cht='區域-頭目', + en='Domain — Boss', + jp='エリア-ボス', +) +Rogue_DomainTransaction = MapPlane( + id=9, + name='Rogue_DomainTransaction', + cn='区域-交易', + cht='區域-交易', + en='Domain — Transaction', + jp='エリア-取引', +) +Herta_ParlorCar = MapPlane( + id=10, name='Herta_ParlorCar', cn='观景车厢', cht='觀景車廂', @@ -20,7 +84,7 @@ Herta_ParlorCar = MapPlane( jp='列車のラウンジ', ) Herta_MasterControlZone = MapPlane( - id=3, + id=11, name='Herta_MasterControlZone', cn='主控舱段', cht='主控艙段', @@ -28,7 +92,7 @@ Herta_MasterControlZone = MapPlane( jp='主制御部分', ) Herta_BaseZone = MapPlane( - id=4, + id=12, name='Herta_BaseZone', cn='基座舱段', cht='基座艙段', @@ -36,7 +100,7 @@ Herta_BaseZone = MapPlane( jp='ベース部分', ) Herta_StorageZone = MapPlane( - id=5, + id=13, name='Herta_StorageZone', cn='收容舱段', cht='收容艙段', @@ -44,7 +108,7 @@ Herta_StorageZone = MapPlane( jp='収容部分', ) Herta_SupplyZone = MapPlane( - id=6, + id=14, name='Herta_SupplyZone', cn='支援舱段', cht='支援艙段', @@ -52,7 +116,7 @@ Herta_SupplyZone = MapPlane( jp='サポート部分', ) Jarilo_AdministrativeDistrict = MapPlane( - id=7, + id=15, name='Jarilo_AdministrativeDistrict', cn='行政区', cht='行政區', @@ -60,7 +124,7 @@ Jarilo_AdministrativeDistrict = MapPlane( jp='行政区', ) Jarilo_OutlyingSnowPlains = MapPlane( - id=8, + id=16, name='Jarilo_OutlyingSnowPlains', cn='城郊雪原', cht='城郊雪原', @@ -68,7 +132,7 @@ Jarilo_OutlyingSnowPlains = MapPlane( jp='郊外雪原', ) Jarilo_BackwaterPass = MapPlane( - id=9, + id=17, name='Jarilo_BackwaterPass', cn='边缘通路', cht='邊緣通道', @@ -76,7 +140,7 @@ Jarilo_BackwaterPass = MapPlane( jp='外縁通路', ) Jarilo_SilvermaneGuardRestrictedZone = MapPlane( - id=10, + id=18, name='Jarilo_SilvermaneGuardRestrictedZone', cn='铁卫禁区', cht='鐵衛禁區', @@ -84,7 +148,7 @@ Jarilo_SilvermaneGuardRestrictedZone = MapPlane( jp='シルバーメイン禁区', ) Jarilo_CorridorofFadingEchoes = MapPlane( - id=11, + id=19, name='Jarilo_CorridorofFadingEchoes', cn='残响回廊', cht='殘響迴廊', @@ -92,7 +156,7 @@ Jarilo_CorridorofFadingEchoes = MapPlane( jp='残響回廊', ) Jarilo_EverwinterHill = MapPlane( - id=12, + id=20, name='Jarilo_EverwinterHill', cn='永冬岭', cht='永冬嶺', @@ -100,7 +164,7 @@ Jarilo_EverwinterHill = MapPlane( jp='常冬峰', ) Jarilo_BoulderTown = MapPlane( - id=13, + id=21, name='Jarilo_BoulderTown', cn='磐岩镇', cht='磐岩鎮', @@ -108,7 +172,7 @@ Jarilo_BoulderTown = MapPlane( jp='ボルダータウン', ) Jarilo_GreatMine = MapPlane( - id=14, + id=22, name='Jarilo_GreatMine', cn='大矿区', cht='大礦區', @@ -116,7 +180,7 @@ Jarilo_GreatMine = MapPlane( jp='大鉱区', ) Jarilo_RivetTown = MapPlane( - id=15, + id=23, name='Jarilo_RivetTown', cn='铆钉镇', cht='鉚釘鎮', @@ -124,7 +188,7 @@ Jarilo_RivetTown = MapPlane( jp='リベットタウン', ) Jarilo_RobotSettlement = MapPlane( - id=16, + id=24, name='Jarilo_RobotSettlement', cn='机械聚落', cht='機械聚落', @@ -132,7 +196,7 @@ Jarilo_RobotSettlement = MapPlane( jp='機械集落', ) Luofu_CentralStarskiffHaven = MapPlane( - id=17, + id=25, name='Luofu_CentralStarskiffHaven', cn='星槎海中枢', cht='星槎海中樞', @@ -140,7 +204,7 @@ Luofu_CentralStarskiffHaven = MapPlane( jp='星槎海中枢', ) Luofu_Cloudford = MapPlane( - id=18, + id=26, name='Luofu_Cloudford', cn='流云渡', cht='流雲渡', @@ -148,7 +212,7 @@ Luofu_Cloudford = MapPlane( jp='流雲渡し', ) Luofu_StargazerNavalia = MapPlane( - id=19, + id=27, name='Luofu_StargazerNavalia', cn='迴星港', cht='迴星港', @@ -156,7 +220,7 @@ Luofu_StargazerNavalia = MapPlane( jp='廻星港', ) Luofu_ExaltingSanctum = MapPlane( - id=20, + id=28, name='Luofu_ExaltingSanctum', cn='长乐天', cht='長樂天', @@ -164,7 +228,7 @@ Luofu_ExaltingSanctum = MapPlane( jp='長楽天', ) Luofu_AurumAlley = MapPlane( - id=21, + id=29, name='Luofu_AurumAlley', cn='金人巷', cht='金人巷', @@ -172,7 +236,7 @@ Luofu_AurumAlley = MapPlane( jp='金人巷', ) Luofu_DivinationCommission = MapPlane( - id=22, + id=30, name='Luofu_DivinationCommission', cn='太卜司', cht='太卜司', @@ -180,7 +244,7 @@ Luofu_DivinationCommission = MapPlane( jp='太卜司', ) Luofu_ArtisanshipCommission = MapPlane( - id=23, + id=31, name='Luofu_ArtisanshipCommission', cn='工造司', cht='工造司', @@ -188,7 +252,7 @@ Luofu_ArtisanshipCommission = MapPlane( jp='工造司', ) Luofu_AlchemyCommission = MapPlane( - id=24, + id=32, name='Luofu_AlchemyCommission', cn='丹鼎司', cht='丹鼎司', @@ -196,7 +260,7 @@ Luofu_AlchemyCommission = MapPlane( jp='丹鼎司', ) Luofu_ScalegorgeWaterscape = MapPlane( - id=25, + id=33, name='Luofu_ScalegorgeWaterscape', cn='鳞渊境', cht='鱗淵境', diff --git a/tasks/map/route/route/daily.py b/tasks/map/route/route/daily.py index 09e1a4e8c..90186a5b7 100644 --- a/tasks/map/route/route/daily.py +++ b/tasks/map/route/route/daily.py @@ -1,5 +1,7 @@ from tasks.map.route.base import RouteData +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.route_extract ``` ForgottenHallStage1__route = RouteData( name='ForgottenHallStage1__route',