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',