mirror of
https://github.com/LmeSzinc/StarRailCopilot.git
synced 2024-11-16 06:25:24 +00:00
Merge branch 'LmeSzinc:master' into master
This commit is contained in:
commit
8ee2083a01
BIN
assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png
Normal file
BIN
assets/share/base/main_page/ROGUE_LEAVE_FOR_NOW.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
BIN
assets/share/item/data/OCR_DATA.png
Normal file
BIN
assets/share/item/data/OCR_DATA.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
@ -129,6 +129,18 @@
|
|||||||
"Assignment": {}
|
"Assignment": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"DataUpdate": {
|
||||||
|
"Scheduler": {
|
||||||
|
"Enable": true,
|
||||||
|
"NextRun": "2020-01-01 00:00:00",
|
||||||
|
"Command": "DataUpdate",
|
||||||
|
"ServerUpdate": "04:00"
|
||||||
|
},
|
||||||
|
"ItemStorage": {
|
||||||
|
"Credit": {},
|
||||||
|
"StallerJade": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Rogue": {
|
"Rogue": {
|
||||||
"Scheduler": {
|
"Scheduler": {
|
||||||
"Enable": false,
|
"Enable": false,
|
||||||
|
@ -265,8 +265,9 @@ class KeywordExtract:
|
|||||||
|
|
||||||
def generate_map_planes(self):
|
def generate_map_planes(self):
|
||||||
planes = {
|
planes = {
|
||||||
'Herta': ['黑塔的办公室',
|
'Special': ['黑塔的办公室', '锋芒崭露'],
|
||||||
'观景车厢', '主控舱段', '基座舱段', '收容舱段', '支援舱段'],
|
'Rogue': [ '区域-战斗', '区域-事件', '区域-遭遇', '区域-休整', '区域-精英', '区域-首领', '区域-交易'],
|
||||||
|
'Herta': ['观景车厢', '主控舱段', '基座舱段', '收容舱段', '支援舱段'],
|
||||||
'Jarilo': ['行政区', '城郊雪原', '边缘通路', '铁卫禁区', '残响回廊', '永冬岭',
|
'Jarilo': ['行政区', '城郊雪原', '边缘通路', '铁卫禁区', '残响回廊', '永冬岭',
|
||||||
'磐岩镇', '大矿区', '铆钉镇', '机械聚落'],
|
'磐岩镇', '大矿区', '铆钉镇', '机械聚落'],
|
||||||
'Luofu': ['星槎海中枢', '流云渡', '迴星港', '长乐天', '金人巷', '太卜司', '工造司', '丹鼎司', '鳞渊境'],
|
'Luofu': ['星槎海中枢', '流云渡', '迴星港', '长乐天', '金人巷', '太卜司', '工造司', '丹鼎司', '鳞渊境'],
|
||||||
|
@ -75,6 +75,8 @@ class RouteExtract:
|
|||||||
gen.Import("""
|
gen.Import("""
|
||||||
from tasks.map.route.base import RouteData
|
from tasks.map.route.base import RouteData
|
||||||
""")
|
""")
|
||||||
|
gen.CommentAutoGenerage('dev_tools.route_extract')
|
||||||
|
|
||||||
for f in self.iter_files():
|
for f in self.iter_files():
|
||||||
for row in self.extract_route(f):
|
for row in self.extract_route(f):
|
||||||
with gen.Object(key=row.name, object_class='RouteData'):
|
with gen.Object(key=row.name, object_class='RouteData'):
|
||||||
|
@ -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": {
|
"Rogue": {
|
||||||
"Scheduler": {
|
"Scheduler": {
|
||||||
"Enable": {
|
"Enable": {
|
||||||
|
@ -168,6 +168,16 @@ Assignment:
|
|||||||
order: 3
|
order: 3
|
||||||
color: "#79dbc4"
|
color: "#79dbc4"
|
||||||
|
|
||||||
|
ItemStorage:
|
||||||
|
Credit:
|
||||||
|
stored: StoredInt
|
||||||
|
order: 7
|
||||||
|
color: "#ab7cf2"
|
||||||
|
StallerJade:
|
||||||
|
stored: StoredInt
|
||||||
|
order: 8
|
||||||
|
color: "#fc8f8b"
|
||||||
|
|
||||||
# ==================== Rogue ====================
|
# ==================== Rogue ====================
|
||||||
|
|
||||||
RoguePath:
|
RoguePath:
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
"Dungeon",
|
"Dungeon",
|
||||||
"DailyQuest",
|
"DailyQuest",
|
||||||
"BattlePass",
|
"BattlePass",
|
||||||
"Assignment"
|
"Assignment",
|
||||||
|
"DataUpdate"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -21,10 +21,12 @@ Restart:
|
|||||||
option_bold: [ true, ]
|
option_bold: [ true, ]
|
||||||
ServerUpdate: 04:00
|
ServerUpdate: 04:00
|
||||||
|
|
||||||
# ==================== Farm ====================
|
|
||||||
|
|
||||||
|
|
||||||
# ==================== Daily ====================
|
# ==================== Daily ====================
|
||||||
|
|
||||||
|
DataUpdate:
|
||||||
# ==================== Tools ====================
|
Scheduler:
|
||||||
|
Enable:
|
||||||
|
type: state
|
||||||
|
value: true
|
||||||
|
option: [ true, ]
|
||||||
|
option_bold: [ true, ]
|
||||||
|
@ -64,6 +64,30 @@
|
|||||||
"order": 6,
|
"order": 6,
|
||||||
"color": "#8fb5fe"
|
"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": {
|
"DungeonDouble": {
|
||||||
"name": "DungeonDouble",
|
"name": "DungeonDouble",
|
||||||
"path": "Dungeon.DungeonStorage.DungeonDouble",
|
"path": "Dungeon.DungeonStorage.DungeonDouble",
|
||||||
|
@ -38,6 +38,9 @@ Daily:
|
|||||||
Assignment:
|
Assignment:
|
||||||
- Scheduler
|
- Scheduler
|
||||||
- Assignment
|
- Assignment
|
||||||
|
DataUpdate:
|
||||||
|
- Scheduler
|
||||||
|
- ItemStorage
|
||||||
|
|
||||||
# ==================== Rogue ====================
|
# ==================== Rogue ====================
|
||||||
|
|
||||||
|
@ -103,6 +103,10 @@ class GeneratedConfig:
|
|||||||
Assignment_Duration = 20 # 4, 8, 12, 20
|
Assignment_Duration = 20 # 4, 8, 12, 20
|
||||||
Assignment_Assignment = {}
|
Assignment_Assignment = {}
|
||||||
|
|
||||||
|
# Group `ItemStorage`
|
||||||
|
ItemStorage_Credit = {}
|
||||||
|
ItemStorage_StallerJade = {}
|
||||||
|
|
||||||
# Group `RoguePath`
|
# Group `RoguePath`
|
||||||
RoguePath_Path = 'The_Hunt' # Preservation, Remembrance, Nihility, Abundance, The_Hunt, Destruction, Elation
|
RoguePath_Path = 'The_Hunt' # Preservation, Remembrance, Nihility, Abundance, The_Hunt, Destruction, Elation
|
||||||
RoguePath_Bonus = 'Blessing Cosmos' # Blessing Cosmos, Miracle Cosmos, Fragmented Cosmos
|
RoguePath_Bonus = 'Blessing Cosmos' # Blessing Cosmos, Miracle Cosmos, Fragmented Cosmos
|
||||||
|
@ -10,7 +10,8 @@ class ManualConfig:
|
|||||||
|
|
||||||
SCHEDULER_PRIORITY = """
|
SCHEDULER_PRIORITY = """
|
||||||
Restart
|
Restart
|
||||||
> BattlePass > DailyQuest > Assignment > Dungeon
|
> BattlePass > DailyQuest > Assignment > DataUpdate
|
||||||
|
> Dungeon
|
||||||
"""
|
"""
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -38,6 +38,10 @@
|
|||||||
"name": "Assignment",
|
"name": "Assignment",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"DataUpdate": {
|
||||||
|
"name": "Dashboard Upd",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
"Rogue": {
|
"Rogue": {
|
||||||
"name": "Simulated Universe",
|
"name": "Simulated Universe",
|
||||||
"help": "Simulated Universe is in development, task will not be run"
|
"help": "Simulated Universe is in development, task will not be run"
|
||||||
@ -694,7 +698,21 @@
|
|||||||
"20": "20 Hours"
|
"20": "20 Hours"
|
||||||
},
|
},
|
||||||
"Assignment": {
|
"Assignment": {
|
||||||
"name": "Assignment",
|
"name": "Assign.",
|
||||||
|
"help": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ItemStorage": {
|
||||||
|
"_info": {
|
||||||
|
"name": "ItemStorage._info.name",
|
||||||
|
"help": "ItemStorage._info.help"
|
||||||
|
},
|
||||||
|
"Credit": {
|
||||||
|
"name": "Credit",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
|
"StallerJade": {
|
||||||
|
"name": "Jade",
|
||||||
"help": ""
|
"help": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -38,6 +38,10 @@
|
|||||||
"name": "依頼設定",
|
"name": "依頼設定",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"DataUpdate": {
|
||||||
|
"name": "Task.DataUpdate.name",
|
||||||
|
"help": "Task.DataUpdate.help"
|
||||||
|
},
|
||||||
"Rogue": {
|
"Rogue": {
|
||||||
"name": "Task.Rogue.name",
|
"name": "Task.Rogue.name",
|
||||||
"help": "Task.Rogue.help"
|
"help": "Task.Rogue.help"
|
||||||
@ -698,6 +702,20 @@
|
|||||||
"help": "Assignment.Assignment.help"
|
"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": {
|
"RoguePath": {
|
||||||
"_info": {
|
"_info": {
|
||||||
"name": "RoguePath._info.name",
|
"name": "RoguePath._info.name",
|
||||||
|
@ -38,6 +38,10 @@
|
|||||||
"name": "委托",
|
"name": "委托",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"DataUpdate": {
|
||||||
|
"name": "仪表盘更新",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
"Rogue": {
|
"Rogue": {
|
||||||
"name": "模拟宇宙",
|
"name": "模拟宇宙",
|
||||||
"help": "模拟宇宙还在开发中,任务不会被运行"
|
"help": "模拟宇宙还在开发中,任务不会被运行"
|
||||||
@ -698,6 +702,20 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ItemStorage": {
|
||||||
|
"_info": {
|
||||||
|
"name": "ItemStorage._info.name",
|
||||||
|
"help": "ItemStorage._info.help"
|
||||||
|
},
|
||||||
|
"Credit": {
|
||||||
|
"name": "信用点",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
|
"StallerJade": {
|
||||||
|
"name": "星琼",
|
||||||
|
"help": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"RoguePath": {
|
"RoguePath": {
|
||||||
"_info": {
|
"_info": {
|
||||||
"name": "命途设置",
|
"name": "命途设置",
|
||||||
|
@ -38,6 +38,10 @@
|
|||||||
"name": "委託",
|
"name": "委託",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"DataUpdate": {
|
||||||
|
"name": "儀表板更新",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
"Rogue": {
|
"Rogue": {
|
||||||
"name": "模擬宇宙",
|
"name": "模擬宇宙",
|
||||||
"help": "模擬宇宙還在開發中,任務不會被運行"
|
"help": "模擬宇宙還在開發中,任務不會被運行"
|
||||||
@ -698,6 +702,20 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ItemStorage": {
|
||||||
|
"_info": {
|
||||||
|
"name": "ItemStorage._info.name",
|
||||||
|
"help": "ItemStorage._info.help"
|
||||||
|
},
|
||||||
|
"Credit": {
|
||||||
|
"name": "信用點",
|
||||||
|
"help": ""
|
||||||
|
},
|
||||||
|
"StallerJade": {
|
||||||
|
"name": "星瓊",
|
||||||
|
"help": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"RoguePath": {
|
"RoguePath": {
|
||||||
"_info": {
|
"_info": {
|
||||||
"name": "命途設定",
|
"name": "命途設定",
|
||||||
|
@ -26,3 +26,5 @@ class StoredGenerated:
|
|||||||
BattlePassLevel = StoredBattlePassLevel("BattlePass.BattlePassStorage.BattlePassLevel")
|
BattlePassLevel = StoredBattlePassLevel("BattlePass.BattlePassStorage.BattlePassLevel")
|
||||||
BattlePassTodayQuest = StoredBattlePassTodayQuest("BattlePass.BattlePassStorage.BattlePassTodayQuest")
|
BattlePassTodayQuest = StoredBattlePassTodayQuest("BattlePass.BattlePassStorage.BattlePassTodayQuest")
|
||||||
Assignment = StoredAssignment("Assignment.Assignment.Assignment")
|
Assignment = StoredAssignment("Assignment.Assignment.Assignment")
|
||||||
|
Credit = StoredInt("DataUpdate.ItemStorage.Credit")
|
||||||
|
StallerJade = StoredInt("DataUpdate.ItemStorage.StallerJade")
|
||||||
|
@ -415,9 +415,10 @@ class AlasGUI(Frame):
|
|||||||
put_html('<hr class="hr-group">'),
|
put_html('<hr class="hr-group">'),
|
||||||
put_scope("dashboard", [
|
put_scope("dashboard", [
|
||||||
# Empty dashboard, values will be updated in alas_update_overview_task()
|
# 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
|
# Empty content to left-align last row
|
||||||
] + [put_html("<i></i>")] * len(self.ALAS_STORED))
|
] + [put_html("<i></i>")] * min(len(self.ALAS_STORED), 4))
|
||||||
])
|
])
|
||||||
put_scope("log", [put_html("")])
|
put_scope("log", [put_html("")])
|
||||||
|
|
||||||
|
4
src.py
4
src.py
@ -38,6 +38,10 @@ class StarRailCopilot(AzurLaneAutoScript):
|
|||||||
from tasks.assignment.assignment import Assignment
|
from tasks.assignment.assignment import Assignment
|
||||||
Assignment(config=self.config, device=self.device).run()
|
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__':
|
if __name__ == '__main__':
|
||||||
src = StarRailCopilot('src')
|
src = StarRailCopilot('src')
|
||||||
|
@ -13,3 +13,13 @@ OCR_MAP_NAME = ButtonWrapper(
|
|||||||
button=(48, 15, 373, 32),
|
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),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
@ -2,13 +2,15 @@ import re
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import module.config.server as server
|
import module.config.server as server
|
||||||
from module.base.base import ModuleBase
|
|
||||||
from module.config.server import VALID_LANG
|
from module.config.server import VALID_LANG
|
||||||
from module.exception import RequestHumanTakeover, ScriptError
|
from module.exception import RequestHumanTakeover, ScriptError
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.ocr.ocr import Ocr
|
from module.ocr.ocr import Ocr
|
||||||
from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME
|
from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME, ROGUE_LEAVE_FOR_NOW
|
||||||
from tasks.base.page import Page, page_main
|
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
|
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'-[Ii1]$', '', result)
|
||||||
result = re.sub(r'\d+$', '', result)
|
result = re.sub(r'\d+$', '', result)
|
||||||
|
|
||||||
|
# 累塔的办公室
|
||||||
|
result = result.replace('累塔', '黑塔')
|
||||||
|
|
||||||
return super().after_process(result)
|
return super().after_process(result)
|
||||||
|
|
||||||
|
|
||||||
class MainPage(ModuleBase):
|
class MainPage(PopupHandler):
|
||||||
# Same as BigmapPlane class
|
# Same as BigmapPlane class
|
||||||
# Current plane
|
# Current plane
|
||||||
plane: MapPlane = KEYWORDS_MAP_PLANE.Herta_ParlorCar
|
plane: MapPlane = KEYWORDS_MAP_PLANE.Herta_ParlorCar
|
||||||
@ -93,3 +98,51 @@ class MainPage(ModuleBase):
|
|||||||
|
|
||||||
self.handle_lang_check(page=page_main)
|
self.handle_lang_check(page=page_main)
|
||||||
return True
|
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
|
||||||
|
@ -7,12 +7,12 @@ from module.ocr.ocr import Ocr
|
|||||||
from tasks.base.assets.assets_base_page import CLOSE, MAP_EXIT
|
from tasks.base.assets.assets_base_page import CLOSE, MAP_EXIT
|
||||||
from tasks.base.main_page import MainPage
|
from tasks.base.main_page import MainPage
|
||||||
from tasks.base.page import Page, page_main
|
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_finish import COMBAT_EXIT
|
||||||
from tasks.combat.assets.assets_combat_prepare import COMBAT_PREPARE
|
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_current: Page
|
||||||
ui_main_confirm_timer = Timer(0.2, count=0)
|
ui_main_confirm_timer = Timer(0.2, count=0)
|
||||||
|
|
||||||
@ -143,10 +143,11 @@ class UI(PopupHandler, MainPage):
|
|||||||
# Reset connection
|
# Reset connection
|
||||||
Page.clear_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:
|
Args:
|
||||||
destination (Page):
|
destination (Page):
|
||||||
|
acquire_lang_checked:
|
||||||
skip_first_screenshot:
|
skip_first_screenshot:
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
@ -154,8 +155,12 @@ class UI(PopupHandler, MainPage):
|
|||||||
"""
|
"""
|
||||||
logger.hr("UI ensure")
|
logger.hr("UI ensure")
|
||||||
self.ui_get_current_page(skip_first_screenshot=skip_first_screenshot)
|
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:
|
if self.ui_current == destination:
|
||||||
logger.info("Already at %s" % destination)
|
logger.info("Already at %s" % destination)
|
||||||
@ -294,6 +299,8 @@ class UI(PopupHandler, MainPage):
|
|||||||
self.device.click(CLOSE)
|
self.device.click(CLOSE)
|
||||||
if self.appear_then_click(COMBAT_EXIT, interval=5):
|
if self.appear_then_click(COMBAT_EXIT, interval=5):
|
||||||
return True
|
return True
|
||||||
|
if self.appear_then_click(INFO_CLOSE, interval=5):
|
||||||
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -51,6 +51,10 @@ class CombatSkill(UI):
|
|||||||
logger.info(f'Skill used: {button}')
|
logger.info(f'Skill used: {button}')
|
||||||
break
|
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):
|
def _skill_switch(self, check_button, click_button, skip_first_screenshot=True):
|
||||||
"""
|
"""
|
||||||
Switch to A or E
|
Switch to A or E
|
||||||
@ -64,11 +68,11 @@ class CombatSkill(UI):
|
|||||||
self.device.screenshot()
|
self.device.screenshot()
|
||||||
|
|
||||||
# Raw brown border
|
# 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}')
|
logger.info(f'Skill switched: {check_button}')
|
||||||
break
|
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():
|
if interval.reached():
|
||||||
self.device.click(click_button)
|
self.device.click(click_button)
|
||||||
interval.reset()
|
interval.reset()
|
||||||
|
@ -274,9 +274,6 @@ class DailyQuestUI(DungeonUI, RouteLoader):
|
|||||||
"""
|
"""
|
||||||
enemy = 0
|
enemy = 0
|
||||||
item = 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:
|
if KEYWORDS_DAILY_QUEST.In_a_single_battle_inflict_3_Weakness_Break_of_different_Types in quests:
|
||||||
enemy = max(enemy, 1)
|
enemy = max(enemy, 1)
|
||||||
if KEYWORDS_DAILY_QUEST.Inflict_Weakness_Break_5_times in quests:
|
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:
|
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')
|
logger.info('Achieved battle pass quest Reach_500_on_Daily_Training_Activity')
|
||||||
self.config.task_call('BattlePass')
|
self.config.task_call('BattlePass')
|
||||||
|
self.config.task_call('DataUpdate')
|
||||||
# Delay self
|
# Delay self
|
||||||
self.config.task_delay(server_update=True)
|
self.config.task_delay(server_update=True)
|
||||||
|
15
tasks/item/assets/assets_item_data.py
Normal file
15
tasks/item/assets/assets_item_data.py
Normal file
@ -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),
|
||||||
|
),
|
||||||
|
)
|
44
tasks/item/data_update.py
Normal file
44
tasks/item/data_update.py
Normal file
@ -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)
|
@ -3,16 +3,80 @@ from .classes import MapPlane
|
|||||||
# This file was auto-generated, do not modify it manually. To generate:
|
# This file was auto-generated, do not modify it manually. To generate:
|
||||||
# ``` python -m dev_tools.keyword_extract ```
|
# ``` python -m dev_tools.keyword_extract ```
|
||||||
|
|
||||||
Herta_HertaOffice = MapPlane(
|
Special_HertaOffice = MapPlane(
|
||||||
id=1,
|
id=1,
|
||||||
name='Herta_HertaOffice',
|
name='Special_HertaOffice',
|
||||||
cn='黑塔的办公室',
|
cn='黑塔的办公室',
|
||||||
cht='黑塔的辦公室',
|
cht='黑塔的辦公室',
|
||||||
en="Herta's Office",
|
en="Herta's Office",
|
||||||
jp='ヘルタのオフィス',
|
jp='ヘルタのオフィス',
|
||||||
)
|
)
|
||||||
Herta_ParlorCar = MapPlane(
|
Special_AptitudeShowcase = MapPlane(
|
||||||
id=2,
|
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',
|
name='Herta_ParlorCar',
|
||||||
cn='观景车厢',
|
cn='观景车厢',
|
||||||
cht='觀景車廂',
|
cht='觀景車廂',
|
||||||
@ -20,7 +84,7 @@ Herta_ParlorCar = MapPlane(
|
|||||||
jp='列車のラウンジ',
|
jp='列車のラウンジ',
|
||||||
)
|
)
|
||||||
Herta_MasterControlZone = MapPlane(
|
Herta_MasterControlZone = MapPlane(
|
||||||
id=3,
|
id=11,
|
||||||
name='Herta_MasterControlZone',
|
name='Herta_MasterControlZone',
|
||||||
cn='主控舱段',
|
cn='主控舱段',
|
||||||
cht='主控艙段',
|
cht='主控艙段',
|
||||||
@ -28,7 +92,7 @@ Herta_MasterControlZone = MapPlane(
|
|||||||
jp='主制御部分',
|
jp='主制御部分',
|
||||||
)
|
)
|
||||||
Herta_BaseZone = MapPlane(
|
Herta_BaseZone = MapPlane(
|
||||||
id=4,
|
id=12,
|
||||||
name='Herta_BaseZone',
|
name='Herta_BaseZone',
|
||||||
cn='基座舱段',
|
cn='基座舱段',
|
||||||
cht='基座艙段',
|
cht='基座艙段',
|
||||||
@ -36,7 +100,7 @@ Herta_BaseZone = MapPlane(
|
|||||||
jp='ベース部分',
|
jp='ベース部分',
|
||||||
)
|
)
|
||||||
Herta_StorageZone = MapPlane(
|
Herta_StorageZone = MapPlane(
|
||||||
id=5,
|
id=13,
|
||||||
name='Herta_StorageZone',
|
name='Herta_StorageZone',
|
||||||
cn='收容舱段',
|
cn='收容舱段',
|
||||||
cht='收容艙段',
|
cht='收容艙段',
|
||||||
@ -44,7 +108,7 @@ Herta_StorageZone = MapPlane(
|
|||||||
jp='収容部分',
|
jp='収容部分',
|
||||||
)
|
)
|
||||||
Herta_SupplyZone = MapPlane(
|
Herta_SupplyZone = MapPlane(
|
||||||
id=6,
|
id=14,
|
||||||
name='Herta_SupplyZone',
|
name='Herta_SupplyZone',
|
||||||
cn='支援舱段',
|
cn='支援舱段',
|
||||||
cht='支援艙段',
|
cht='支援艙段',
|
||||||
@ -52,7 +116,7 @@ Herta_SupplyZone = MapPlane(
|
|||||||
jp='サポート部分',
|
jp='サポート部分',
|
||||||
)
|
)
|
||||||
Jarilo_AdministrativeDistrict = MapPlane(
|
Jarilo_AdministrativeDistrict = MapPlane(
|
||||||
id=7,
|
id=15,
|
||||||
name='Jarilo_AdministrativeDistrict',
|
name='Jarilo_AdministrativeDistrict',
|
||||||
cn='行政区',
|
cn='行政区',
|
||||||
cht='行政區',
|
cht='行政區',
|
||||||
@ -60,7 +124,7 @@ Jarilo_AdministrativeDistrict = MapPlane(
|
|||||||
jp='行政区',
|
jp='行政区',
|
||||||
)
|
)
|
||||||
Jarilo_OutlyingSnowPlains = MapPlane(
|
Jarilo_OutlyingSnowPlains = MapPlane(
|
||||||
id=8,
|
id=16,
|
||||||
name='Jarilo_OutlyingSnowPlains',
|
name='Jarilo_OutlyingSnowPlains',
|
||||||
cn='城郊雪原',
|
cn='城郊雪原',
|
||||||
cht='城郊雪原',
|
cht='城郊雪原',
|
||||||
@ -68,7 +132,7 @@ Jarilo_OutlyingSnowPlains = MapPlane(
|
|||||||
jp='郊外雪原',
|
jp='郊外雪原',
|
||||||
)
|
)
|
||||||
Jarilo_BackwaterPass = MapPlane(
|
Jarilo_BackwaterPass = MapPlane(
|
||||||
id=9,
|
id=17,
|
||||||
name='Jarilo_BackwaterPass',
|
name='Jarilo_BackwaterPass',
|
||||||
cn='边缘通路',
|
cn='边缘通路',
|
||||||
cht='邊緣通道',
|
cht='邊緣通道',
|
||||||
@ -76,7 +140,7 @@ Jarilo_BackwaterPass = MapPlane(
|
|||||||
jp='外縁通路',
|
jp='外縁通路',
|
||||||
)
|
)
|
||||||
Jarilo_SilvermaneGuardRestrictedZone = MapPlane(
|
Jarilo_SilvermaneGuardRestrictedZone = MapPlane(
|
||||||
id=10,
|
id=18,
|
||||||
name='Jarilo_SilvermaneGuardRestrictedZone',
|
name='Jarilo_SilvermaneGuardRestrictedZone',
|
||||||
cn='铁卫禁区',
|
cn='铁卫禁区',
|
||||||
cht='鐵衛禁區',
|
cht='鐵衛禁區',
|
||||||
@ -84,7 +148,7 @@ Jarilo_SilvermaneGuardRestrictedZone = MapPlane(
|
|||||||
jp='シルバーメイン禁区',
|
jp='シルバーメイン禁区',
|
||||||
)
|
)
|
||||||
Jarilo_CorridorofFadingEchoes = MapPlane(
|
Jarilo_CorridorofFadingEchoes = MapPlane(
|
||||||
id=11,
|
id=19,
|
||||||
name='Jarilo_CorridorofFadingEchoes',
|
name='Jarilo_CorridorofFadingEchoes',
|
||||||
cn='残响回廊',
|
cn='残响回廊',
|
||||||
cht='殘響迴廊',
|
cht='殘響迴廊',
|
||||||
@ -92,7 +156,7 @@ Jarilo_CorridorofFadingEchoes = MapPlane(
|
|||||||
jp='残響回廊',
|
jp='残響回廊',
|
||||||
)
|
)
|
||||||
Jarilo_EverwinterHill = MapPlane(
|
Jarilo_EverwinterHill = MapPlane(
|
||||||
id=12,
|
id=20,
|
||||||
name='Jarilo_EverwinterHill',
|
name='Jarilo_EverwinterHill',
|
||||||
cn='永冬岭',
|
cn='永冬岭',
|
||||||
cht='永冬嶺',
|
cht='永冬嶺',
|
||||||
@ -100,7 +164,7 @@ Jarilo_EverwinterHill = MapPlane(
|
|||||||
jp='常冬峰',
|
jp='常冬峰',
|
||||||
)
|
)
|
||||||
Jarilo_BoulderTown = MapPlane(
|
Jarilo_BoulderTown = MapPlane(
|
||||||
id=13,
|
id=21,
|
||||||
name='Jarilo_BoulderTown',
|
name='Jarilo_BoulderTown',
|
||||||
cn='磐岩镇',
|
cn='磐岩镇',
|
||||||
cht='磐岩鎮',
|
cht='磐岩鎮',
|
||||||
@ -108,7 +172,7 @@ Jarilo_BoulderTown = MapPlane(
|
|||||||
jp='ボルダータウン',
|
jp='ボルダータウン',
|
||||||
)
|
)
|
||||||
Jarilo_GreatMine = MapPlane(
|
Jarilo_GreatMine = MapPlane(
|
||||||
id=14,
|
id=22,
|
||||||
name='Jarilo_GreatMine',
|
name='Jarilo_GreatMine',
|
||||||
cn='大矿区',
|
cn='大矿区',
|
||||||
cht='大礦區',
|
cht='大礦區',
|
||||||
@ -116,7 +180,7 @@ Jarilo_GreatMine = MapPlane(
|
|||||||
jp='大鉱区',
|
jp='大鉱区',
|
||||||
)
|
)
|
||||||
Jarilo_RivetTown = MapPlane(
|
Jarilo_RivetTown = MapPlane(
|
||||||
id=15,
|
id=23,
|
||||||
name='Jarilo_RivetTown',
|
name='Jarilo_RivetTown',
|
||||||
cn='铆钉镇',
|
cn='铆钉镇',
|
||||||
cht='鉚釘鎮',
|
cht='鉚釘鎮',
|
||||||
@ -124,7 +188,7 @@ Jarilo_RivetTown = MapPlane(
|
|||||||
jp='リベットタウン',
|
jp='リベットタウン',
|
||||||
)
|
)
|
||||||
Jarilo_RobotSettlement = MapPlane(
|
Jarilo_RobotSettlement = MapPlane(
|
||||||
id=16,
|
id=24,
|
||||||
name='Jarilo_RobotSettlement',
|
name='Jarilo_RobotSettlement',
|
||||||
cn='机械聚落',
|
cn='机械聚落',
|
||||||
cht='機械聚落',
|
cht='機械聚落',
|
||||||
@ -132,7 +196,7 @@ Jarilo_RobotSettlement = MapPlane(
|
|||||||
jp='機械集落',
|
jp='機械集落',
|
||||||
)
|
)
|
||||||
Luofu_CentralStarskiffHaven = MapPlane(
|
Luofu_CentralStarskiffHaven = MapPlane(
|
||||||
id=17,
|
id=25,
|
||||||
name='Luofu_CentralStarskiffHaven',
|
name='Luofu_CentralStarskiffHaven',
|
||||||
cn='星槎海中枢',
|
cn='星槎海中枢',
|
||||||
cht='星槎海中樞',
|
cht='星槎海中樞',
|
||||||
@ -140,7 +204,7 @@ Luofu_CentralStarskiffHaven = MapPlane(
|
|||||||
jp='星槎海中枢',
|
jp='星槎海中枢',
|
||||||
)
|
)
|
||||||
Luofu_Cloudford = MapPlane(
|
Luofu_Cloudford = MapPlane(
|
||||||
id=18,
|
id=26,
|
||||||
name='Luofu_Cloudford',
|
name='Luofu_Cloudford',
|
||||||
cn='流云渡',
|
cn='流云渡',
|
||||||
cht='流雲渡',
|
cht='流雲渡',
|
||||||
@ -148,7 +212,7 @@ Luofu_Cloudford = MapPlane(
|
|||||||
jp='流雲渡し',
|
jp='流雲渡し',
|
||||||
)
|
)
|
||||||
Luofu_StargazerNavalia = MapPlane(
|
Luofu_StargazerNavalia = MapPlane(
|
||||||
id=19,
|
id=27,
|
||||||
name='Luofu_StargazerNavalia',
|
name='Luofu_StargazerNavalia',
|
||||||
cn='迴星港',
|
cn='迴星港',
|
||||||
cht='迴星港',
|
cht='迴星港',
|
||||||
@ -156,7 +220,7 @@ Luofu_StargazerNavalia = MapPlane(
|
|||||||
jp='廻星港',
|
jp='廻星港',
|
||||||
)
|
)
|
||||||
Luofu_ExaltingSanctum = MapPlane(
|
Luofu_ExaltingSanctum = MapPlane(
|
||||||
id=20,
|
id=28,
|
||||||
name='Luofu_ExaltingSanctum',
|
name='Luofu_ExaltingSanctum',
|
||||||
cn='长乐天',
|
cn='长乐天',
|
||||||
cht='長樂天',
|
cht='長樂天',
|
||||||
@ -164,7 +228,7 @@ Luofu_ExaltingSanctum = MapPlane(
|
|||||||
jp='長楽天',
|
jp='長楽天',
|
||||||
)
|
)
|
||||||
Luofu_AurumAlley = MapPlane(
|
Luofu_AurumAlley = MapPlane(
|
||||||
id=21,
|
id=29,
|
||||||
name='Luofu_AurumAlley',
|
name='Luofu_AurumAlley',
|
||||||
cn='金人巷',
|
cn='金人巷',
|
||||||
cht='金人巷',
|
cht='金人巷',
|
||||||
@ -172,7 +236,7 @@ Luofu_AurumAlley = MapPlane(
|
|||||||
jp='金人巷',
|
jp='金人巷',
|
||||||
)
|
)
|
||||||
Luofu_DivinationCommission = MapPlane(
|
Luofu_DivinationCommission = MapPlane(
|
||||||
id=22,
|
id=30,
|
||||||
name='Luofu_DivinationCommission',
|
name='Luofu_DivinationCommission',
|
||||||
cn='太卜司',
|
cn='太卜司',
|
||||||
cht='太卜司',
|
cht='太卜司',
|
||||||
@ -180,7 +244,7 @@ Luofu_DivinationCommission = MapPlane(
|
|||||||
jp='太卜司',
|
jp='太卜司',
|
||||||
)
|
)
|
||||||
Luofu_ArtisanshipCommission = MapPlane(
|
Luofu_ArtisanshipCommission = MapPlane(
|
||||||
id=23,
|
id=31,
|
||||||
name='Luofu_ArtisanshipCommission',
|
name='Luofu_ArtisanshipCommission',
|
||||||
cn='工造司',
|
cn='工造司',
|
||||||
cht='工造司',
|
cht='工造司',
|
||||||
@ -188,7 +252,7 @@ Luofu_ArtisanshipCommission = MapPlane(
|
|||||||
jp='工造司',
|
jp='工造司',
|
||||||
)
|
)
|
||||||
Luofu_AlchemyCommission = MapPlane(
|
Luofu_AlchemyCommission = MapPlane(
|
||||||
id=24,
|
id=32,
|
||||||
name='Luofu_AlchemyCommission',
|
name='Luofu_AlchemyCommission',
|
||||||
cn='丹鼎司',
|
cn='丹鼎司',
|
||||||
cht='丹鼎司',
|
cht='丹鼎司',
|
||||||
@ -196,7 +260,7 @@ Luofu_AlchemyCommission = MapPlane(
|
|||||||
jp='丹鼎司',
|
jp='丹鼎司',
|
||||||
)
|
)
|
||||||
Luofu_ScalegorgeWaterscape = MapPlane(
|
Luofu_ScalegorgeWaterscape = MapPlane(
|
||||||
id=25,
|
id=33,
|
||||||
name='Luofu_ScalegorgeWaterscape',
|
name='Luofu_ScalegorgeWaterscape',
|
||||||
cn='鳞渊境',
|
cn='鳞渊境',
|
||||||
cht='鱗淵境',
|
cht='鱗淵境',
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
from tasks.map.route.base import RouteData
|
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(
|
ForgottenHallStage1__route = RouteData(
|
||||||
name='ForgottenHallStage1__route',
|
name='ForgottenHallStage1__route',
|
||||||
|
Loading…
Reference in New Issue
Block a user