From 31805c16ef7a77a527b58cd12e60d136dcd19f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Liu=20=E5=88=98=E5=98=89=E8=BF=9C?= Date: Sun, 17 May 2026 23:18:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=9F=E7=A8=80=E7=9B=90=E9=85=B8-?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E9=94=9A=E7=82=B9=20=E6=B7=BB=E5=8A=A0=20RA1?= =?UTF-8?q?5=20=E6=94=AF=E6=8C=81=20(#16667)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新增生息演算「重启锚点」RA-15 关卡任务链 * feat: 生息演算 RA-1/RA-15 关卡选择 UI 及 Core 适配 新增 RelaunchAnchorStage 枚举,WPF 界面添加关卡选择下拉框, C++ Core 根据 stage 参数加载对应的任务链入口。 * feat: 添加RA-15自己有初雪的版本 * fix: Delete resource/tasks/RA/Reclamation3-RA15-HaveCX.json * fix: 增加识别已有初雪功能 * feat: 拆分 RA-1/RA-15 教程文本,根据关卡选择切换提示 * rft: 合并生稀盐酸文件,并抽取相同任务 * fix: MaaCore 为新盐酸修改为通用性入口 * fix: 生稀盐酸 wpfgui 提示文本选取逻辑优化 * chore: 修改生稀盐酸入口任务命名 * chore: 优化生稀盐酸提示文本 * fix: 重启锚点不再 fallback 关卡 * chore: 生稀盐酸目录结构优化 * chore: 移除旧任务入口 * fix: 修正提示描述 * chore: 优化key命名及选取逻辑 * chore: 修正翻译缩进 --------- Co-Authored-By: Michael Liu 刘嘉远 Co-authored-by: 晓丶梦丶仁 <74444214+Daydreamer114@users.noreply.github.com> Co-authored-by: SherkeyXD <57581480+SherkeyXD@users.noreply.github.com> --- resource/tasks/RA/Reclamation3.json | 838 ++++++++++++++---- resource/tasks/RA/{ => plugin}/Tales.json | 0 resource/tasks/RA/{ => plugin}/base.json | 0 .../Task/Interface/ReclamationTask.cpp | 4 +- .../Task/Reclamation/ReclamationConfig.cpp | 14 + .../Task/Reclamation/ReclamationConfig.h | 9 + .../Single/MaaTask/ReclamationTask.cs | 15 + .../Models/AsstTasks/AsstReclamationTask.cs | 6 + src/MaaWpfGui/Res/Localizations/en-us.xaml | 34 +- src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 35 +- src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 34 +- src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 36 +- src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 34 +- .../ReclamationSettingsUserControlModel.cs | 40 +- .../ReclamationSettingsUserControl.xaml | 10 + 15 files changed, 860 insertions(+), 249 deletions(-) rename resource/tasks/RA/{ => plugin}/Tales.json (100%) rename resource/tasks/RA/{ => plugin}/base.json (100%) diff --git a/resource/tasks/RA/Reclamation3.json b/resource/tasks/RA/Reclamation3.json index bd7e9a161d..f295b2a822 100644 --- a/resource/tasks/RA/Reclamation3.json +++ b/resource/tasks/RA/Reclamation3.json @@ -1,10 +1,64 @@ { - "RelaunchAnchor@RA@ProsperityNoSave": { - "doc": "生息演算「重启锚点」辅助建设模式刷分入口;前置条件:手动过完一次 RA-1 新手教程,切换为辅助建设模式(统筹系统右侧第二个图标)", + "RelaunchAnchor@RA@PNS-RA1-Entry": { + "doc": "RA-1 入口:兼容关卡列表与已进入关卡后的不同起始界面", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@RA1", "RelaunchAnchor@RA@OpenConstruction"] + "next": ["RelaunchAnchor@RA@PNS-RA1-Prepare", "RelaunchAnchor@RA@PNS-RA1-OpenConstruction"] }, - "RelaunchAnchor@RA@RA1": { + "RelaunchAnchor@RA@PNS-RA15-Entry": { + "doc": "RA-15 入口:直接从开启建设界面开始", + "algorithm": "JustReturn", + "next": ["RelaunchAnchor@RA@PNS-RA15-Prepare"] + }, + "RelaunchAnchor@RA@PNS-Common-Confirm": { + "doc": "通用确认按钮", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [1076, 577, 72, 44] + }, + "RelaunchAnchor@RA@PNS-Common-OpenConstruction": { + "doc": "通用开启建设按钮", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["开启建设"], + "roi": [1055, 597, 141, 46] + }, + "RelaunchAnchor@RA@PNS-Common-StartConstruction": { + "doc": "通用开始建设按钮", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["开始建设"], + "roi": [984, 607, 138, 47] + }, + "RelaunchAnchor@RA@PNS-Common-MissionIcon": { + "doc": "通用任务图标", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@MissionIcon.png", + "roi": [0, 179, 150, 141] + }, + "RelaunchAnchor@RA@PNS-Common-WaitSkip": { + "doc": "通用等待剧情跳过按钮出现(JustReturn 占位,next 由各关卡覆盖)", + "algorithm": "JustReturn" + }, + "RelaunchAnchor@RA@PNS-Common-WaitCost": { + "doc": "通用等待部署费用(JustReturn 占位,next 由各关卡覆盖)", + "algorithm": "JustReturn" + }, + "RelaunchAnchor@RA@PNS-Common-DialogueClick": { + "doc": "通用点击对话框区域", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [510, 500, 40, 40] + }, + "RelaunchAnchor@RA@PNS-Common-DialogueSequence": { + "doc": "通用对话序列:模板匹配说话标识,持续点击直到标识消失(next 由各关卡覆盖)", + "algorithm": "MatchTemplate", + "template": "RelaunchAnchor@RA@DialogueMarker.png", + "roi": [363, 456, 144, 139], + "sub": ["RelaunchAnchor@RA@PNS-Common-DialogueClick*10"] + }, + "RelaunchAnchor@RA@PNS-RA1-Prepare": { "doc": "步骤 1(任务起点):OCR 识别 RA-1 并点击;右下角出现 <开启建设> 时进入步骤 2", "algorithm": "OcrDetect", "action": "ClickSelf", @@ -13,376 +67,772 @@ "useRaw": false, "binThreshold": [200, 255], "roi": [605, 405, 65, 30], - "next": ["RelaunchAnchor@RA@OpenConstruction", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-OpenConstruction", "#self"] }, - "RelaunchAnchor@RA@OpenConstruction": { + "RelaunchAnchor@RA@PNS-RA1-OpenConstruction": { "doc": "步骤 2:OCR 识别 <开启建设> 并点击;未出现则回到步骤 1 重新点击 RA-1", - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": ["开启建设"], - "roi": [1055, 597, 141, 46], - "next": ["RelaunchAnchor@RA@FineFarming", "#self", "RelaunchAnchor@RA@RA1"] + "baseTask": "RelaunchAnchor@RA@PNS-Common-OpenConstruction", + "next": ["RelaunchAnchor@RA@PNS-RA1-ChooseStrategy", "#self", "RelaunchAnchor@RA@PNS-RA1-Prepare"] }, - "RelaunchAnchor@RA@FineFarming": { + "RelaunchAnchor@RA@PNS-RA1-ChooseStrategy": { "doc": "步骤 3:OCR 识别 <精耕细作> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["精耕细作"], "roi": [118, 385, 96, 25], - "next": ["RelaunchAnchor@RA@ConfirmSelection"] + "next": ["RelaunchAnchor@RA@PNS-RA1-ConfirmSelection"] }, - "RelaunchAnchor@RA@ConfirmSelection": { + "RelaunchAnchor@RA@PNS-RA1-ConfirmSelection": { "doc": "步骤 4:OCR 识别 <确认选择> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["确认选择"], "roi": [1055, 619, 117, 43], - "next": ["RelaunchAnchor@RA@StartConstruction", "RelaunchAnchor@RA@FineFarming"] + "next": ["RelaunchAnchor@RA@PNS-RA1-StartConstruction", "RelaunchAnchor@RA@PNS-RA1-ChooseStrategy"] }, - "RelaunchAnchor@RA@StartConstruction": { + "RelaunchAnchor@RA@PNS-RA1-StartConstruction": { "doc": "步骤 5:OCR 识别 <开始建设> 并点击;未出现则回到步骤 3", - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": ["开始建设"], - "roi": [984, 607, 138, 47], - "next": ["#self", "RelaunchAnchor@RA@WaitSkip"] + "baseTask": "RelaunchAnchor@RA@PNS-Common-StartConstruction", + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitSkip"] }, - "RelaunchAnchor@RA@WaitSkip": { - "doc": "步骤 6 前等待剧情跳过", - "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@SkipPlot", "#self"] + "RelaunchAnchor@RA@PNS-RA1-WaitSkip": { + "doc": "步骤 6 前等待剧情跳过按钮出现", + "baseTask": "RelaunchAnchor@RA@PNS-Common-WaitSkip", + "next": ["RelaunchAnchor@RA@PNS-RA1-SkipPlot", "#self"] }, - "RelaunchAnchor@RA@SkipPlot": { - "doc": "步骤 7:OCR 识别 <跳过> 并点击", + "RelaunchAnchor@RA@PNS-RA1-SkipPlot": { + "doc": "步骤 6:OCR 识别 <跳过> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["跳过"], "roi": [1140, 30, 67, 43], - "next": ["RelaunchAnchor@RA@SkipPlotConfirm", "#self", "RelaunchAnchor@RA@WaitGatheringBasePrompt"] + "next": ["RelaunchAnchor@RA@PNS-RA1-SkipPlotConfirm", "#self", "RelaunchAnchor@RA@PNS-RA1-WaitGatheringBasePrompt"] }, - "RelaunchAnchor@RA@SkipPlotConfirm": { - "doc": "步骤 8:OCR 识别 <是否跳过剧情>,点击偏移位置占位", + "RelaunchAnchor@RA@PNS-RA1-SkipPlotConfirm": { + "doc": "步骤 7:OCR 识别 <是否跳过剧情>,点击偏移位置占位", "algorithm": "OcrDetect", "action": "ClickRect", "text": ["是否跳过剧情"], "roi": [532, 335, 237, 52], "specificRect": [795, 355, 1, 1], - "next": ["#self", "RelaunchAnchor@RA@WaitGatheringBasePrompt"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitGatheringBasePrompt"] }, - "RelaunchAnchor@RA@WaitGatheringBasePrompt": { - "doc": "步骤 9 前等待 <请部署罗德岛采集基站> 出现", + "RelaunchAnchor@RA@PNS-RA1-WaitGatheringBasePrompt": { + "doc": "步骤 8 前等待 <请部署罗德岛采集基站> 出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@DeployGatheringBasePrompt", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeployGatheringBasePrompt", "#self"] }, - "RelaunchAnchor@RA@DeployGatheringBasePrompt": { - "doc": "步骤 9:OCR 等待 <请部署罗德岛采集基站>", + "RelaunchAnchor@RA@PNS-RA1-DeployGatheringBasePrompt": { + "doc": "步骤 8:OCR 等待 <请部署罗德岛采集基站>", "algorithm": "OcrDetect", "action": "DoNothing", "text": ["请部署", "罗德岛", "采集基站"], "roi": [520, 54, 247, 38], - "sub": ["RelaunchAnchor@RA@AlignMap*2"], - "next": ["RelaunchAnchor@RA@DeployGatheringBaseSwipe"] + "sub": ["RelaunchAnchor@RA@PNS-RA1-AlignMap*2"], + "next": ["RelaunchAnchor@RA@PNS-RA1-DeployGatheringBaseSwipe"] }, - "RelaunchAnchor@RA@AlignMap": { - "doc": "步骤 10:JustReturn 的 Swipe,对齐地图", + "RelaunchAnchor@RA@PNS-RA1-AlignMap": { + "doc": "步骤 9:JustReturn Swipe,对齐地图", "algorithm": "JustReturn", "action": "Swipe", "specificRect": [120, 580, 1, 1], "rectMove": [1920, 0, 1, 1], "specialParams": [500, 0, 3, 0] }, - "RelaunchAnchor@RA@DeployGatheringBaseSwipe": { - "doc": "步骤 11:JustReturn 的 Swipe,占位部署采集基站", + "RelaunchAnchor@RA@PNS-RA1-DeployGatheringBaseSwipe": { + "doc": "步骤 10:JustReturn Swipe,占位部署采集基站", "algorithm": "JustReturn", "action": "Swipe", "specificRect": [530, 630, 10, 10], "rectMove": [960, 290, 1, 1], "specialParams": [500, 0, 3, 0], - "next": ["RelaunchAnchor@RA@WaitDoubleSpeed"] + "next": ["RelaunchAnchor@RA@PNS-RA1-WaitDoubleSpeed"] }, - "RelaunchAnchor@RA@WaitDoubleSpeed": { - "doc": "步骤 12 前等待二倍速提示出现", + "RelaunchAnchor@RA@PNS-RA1-WaitDoubleSpeed": { + "doc": "步骤 11 前等待二倍速提示出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@DoubleSpeed", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DoubleSpeed", "#self"] }, - "RelaunchAnchor@RA@DoubleSpeed": { - "doc": "步骤 12:开启二倍速", + "RelaunchAnchor@RA@PNS-RA1-DoubleSpeed": { + "doc": "步骤 11:开启二倍速", "template": "RelaunchAnchor@RA@DoubleSpeed.png", "action": "ClickSelf", "roi": [1060, 20, 80, 70], "maskRange": [220, 255], - "next": ["#self", "RelaunchAnchor@RA@DeployGatheringBaseWait"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-DeployGatheringBaseWait"] }, - "RelaunchAnchor@RA@DeployGatheringBaseWait": { - "doc": "步骤 13:部署采集基站后的占位等待 x 秒", + "RelaunchAnchor@RA@PNS-RA1-DeployGatheringBaseWait": { + "doc": "步骤 12:部署采集基站后的占位等待 x 秒", "algorithm": "JustReturn", "postDelay": 2000, - "sub": ["RelaunchAnchor@RA@AlignMap*2"], - "next": ["RelaunchAnchor@RA@WaitCost"] + "sub": ["RelaunchAnchor@RA@PNS-RA1-AlignMap*2"], + "next": ["RelaunchAnchor@RA@PNS-RA1-WaitCost"] }, - "RelaunchAnchor@RA@WaitCost": { - "doc": "步骤 14 前等待部署费用", - "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@Cost", "#self"] + "RelaunchAnchor@RA@PNS-RA1-WaitCost": { + "doc": "步骤 13 前等待部署费用", + "baseTask": "RelaunchAnchor@RA@PNS-Common-WaitCost", + "next": ["RelaunchAnchor@RA@PNS-RA1-Cost", "#self"] }, - "RelaunchAnchor@RA@Cost": { - "doc": "步骤 14:OCR 识别部署费用", + "RelaunchAnchor@RA@PNS-RA1-Cost": { + "doc": "步骤 13:OCR 识别部署费用 ≥22", "algorithm": "OcrDetect", "action": "DoNothing", "text": ["22+"], "ocrReplace": [["(2[2-9]|[3-9]\\d+)", "22+"]], "roi": [1200, 490, 80, 50], - "next": ["RelaunchAnchor@RA@DeployOperatorSwipe"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeployOperatorSwipe"] }, - "RelaunchAnchor@RA@DeployOperatorSwipe": { - "doc": "步骤 15:JustReturn 的 Swipe,占位部署干员", + "RelaunchAnchor@RA@PNS-RA1-DeployOperatorSwipe": { + "doc": "步骤 14:JustReturn Swipe,占位部署干员", "algorithm": "JustReturn", "action": "Swipe", "specificRect": [1120, 630, 10, 10], "rectMove": [745, 300, 1, 1], "specialParams": [500, 0, 3, 0], - "next": ["RelaunchAnchor@RA@DeployOperatorDirection"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeployOperatorDirection"] }, - "RelaunchAnchor@RA@DeployOperatorDirection": { - "doc": "步骤 16:JustReturn 的 Swipe,占位确认干员朝向", + "RelaunchAnchor@RA@PNS-RA1-DeployOperatorDirection": { + "doc": "步骤 15:JustReturn Swipe,确认干员朝向", "algorithm": "JustReturn", "action": "Swipe", "specificRect": [745, 300, 1, 1], "rectMove": [1745, 300, 10, 10], "specialParams": [300, 0, 3, 0], - "next": ["RelaunchAnchor@RA@DeployOperatorWait"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeployOperatorWait"] }, - "RelaunchAnchor@RA@DeployOperatorWait": { - "doc": "步骤 17:部署干员后的占位等待 x 秒", + "RelaunchAnchor@RA@PNS-RA1-DeployOperatorWait": { + "doc": "步骤 16:部署干员后的占位等待 x 秒", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@MissionIcon1"] + "next": ["RelaunchAnchor@RA@PNS-RA1-MissionIcon1"] }, - "RelaunchAnchor@RA@MissionIcon1": { - "doc": "步骤 18:模板匹配任务图标并点击", - "algorithm": "MatchTemplate", - "action": "ClickSelf", + "RelaunchAnchor@RA@PNS-RA1-MissionIcon1": { + "doc": "步骤 17:模板匹配任务图标并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-MissionIcon", "template": "RelaunchAnchor@RA@MissionIcon.png", - "roi": [0, 179, 150, 141], - "next": ["RelaunchAnchor@RA@DeliverWood5", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeliverWood5", "#self"] }, - "RelaunchAnchor@RA@DeliverWood5": { - "doc": "步骤 19:OCR 识别 <交付5份木材> 并点击", + "RelaunchAnchor@RA@PNS-RA1-DeliverWood5": { + "doc": "步骤 18:OCR 识别 <交付5份木材> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["木材"], "roi": [575, 281, 126, 30], - "next": ["RelaunchAnchor@RA@ConfirmWoodMission", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-ConfirmWoodMission", "#self"] }, - "RelaunchAnchor@RA@ConfirmWoodMission": { - "doc": "步骤 20:OCR 识别 <确认> 并点击", - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": ["确认"], - "roi": [1076, 577, 72, 44], - "next": ["#self", "RelaunchAnchor@RA@WaitDeliverWood"] + "RelaunchAnchor@RA@PNS-RA1-ConfirmWoodMission": { + "doc": "步骤 19:OCR 识别 <确认> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-Confirm", + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitDeliverWood"] }, - "RelaunchAnchor@RA@WaitDeliverWood": { - "doc": "步骤 21 前等待木材生产完成,出现 <交付木材8>", + "RelaunchAnchor@RA@PNS-RA1-WaitDeliverWood": { + "doc": "步骤 20 前等待木材生产完成,出现 <交付木材8>", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@DeliverWood", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeliverWood", "#self"] }, - "RelaunchAnchor@RA@DeliverWood": { - "doc": "步骤 21:OCR 识别 <交付木材> 并点击", + "RelaunchAnchor@RA@PNS-RA1-DeliverWood": { + "doc": "步骤 20:OCR 识别 <交付木材8+> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["交付木材8+"], "ocrReplace": [["(8|9|\\d{2,3}).*5", "交付木材8+"]], "roi": [170, 235, 50, 35], - "next": ["RelaunchAnchor@RA@WaitWoodDialogue"] + "next": ["RelaunchAnchor@RA@PNS-RA1-WaitWoodDialogue"] }, - "RelaunchAnchor@RA@WaitWoodDialogue": { - "doc": "步骤 22 前等待说话标识或制造标识出现", + "RelaunchAnchor@RA@PNS-RA1-WaitWoodDialogue": { + "doc": "步骤 21 前等待说话标识或制造标识出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@WoodDialogue", "RelaunchAnchor@RA@ManufactureIcon", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-WoodDialogue", "RelaunchAnchor@RA@PNS-RA1-ManufactureIcon", "#self"] }, - "RelaunchAnchor@RA@DialogueClick": { - "doc": "点对话框区域", - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [510, 500, 40, 40] - }, - "RelaunchAnchor@RA@WoodDialogue": { - "doc": "步骤 22:模板匹配说话标识,持续点击到没有这个标识", - "algorithm": "MatchTemplate", + "RelaunchAnchor@RA@PNS-RA1-WoodDialogue": { + "doc": "步骤 21:模板匹配说话标识,持续点击直到标识消失", + "baseTask": "RelaunchAnchor@RA@PNS-Common-DialogueSequence", "template": "RelaunchAnchor@RA@DialogueMarker.png", - "roi": [363, 456, 144, 139], - "sub": ["RelaunchAnchor@RA@DialogueClick*10"], - "next": ["#self", "RelaunchAnchor@RA@WaitWoodDialogue"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitWoodDialogue"] }, - "RelaunchAnchor@RA@ManufactureIcon": { - "doc": "步骤 23:模板匹配制造标识并点击", + "RelaunchAnchor@RA@PNS-RA1-ManufactureIcon": { + "doc": "步骤 22:模板匹配制造标识并点击", "algorithm": "MatchTemplate", "action": "ClickSelf", "template": "RelaunchAnchor@RA@ManufactureIcon.png", "roi": [0, 470, 120, 130], - "next": ["RelaunchAnchor@RA@CommunicationStation", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-CommunicationStation", "#self"] }, - "RelaunchAnchor@RA@CommunicationStation": { - "doc": "步骤 24:OCR 识别 <通讯基站> 并点击", + "RelaunchAnchor@RA@PNS-RA1-CommunicationStation": { + "doc": "步骤 23:OCR 识别 <通讯基站> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["通讯基站"], "roi": [374, 159, 106, 34], - "next": ["RelaunchAnchor@RA@StartBuildingStation", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-StartBuildingStation", "#self"] }, - "RelaunchAnchor@RA@StartBuildingStation": { - "doc": "步骤 25:OCR 识别 <开始建造> 并点击", + "RelaunchAnchor@RA@PNS-RA1-StartBuildingStation": { + "doc": "步骤 24:OCR 识别 <开始建造> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["开始建造"], "roi": [1048, 518, 121, 34], - "next": ["RelaunchAnchor@RA@BlankContinue", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-BlankContinue", "#self"] }, - "RelaunchAnchor@RA@BlankContinue": { - "doc": "步骤 26:OCR 识别 <点击空白处继续> 并点击", + "RelaunchAnchor@RA@PNS-RA1-BlankContinue": { + "doc": "步骤 25:OCR 识别 <点击空白处继续> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["点击空白处继续"], "roi": [559, 449, 163, 35], - "next": ["#self", "RelaunchAnchor@RA@ExitConstruction"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-ExitConstruction"] }, - "RelaunchAnchor@RA@ExitConstruction": { - "doc": "步骤 27:OCR 识别退出 <建造> 并点击", + "RelaunchAnchor@RA@PNS-RA1-ExitConstruction": { + "doc": "步骤 26:OCR 识别退出 <建造> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["建造"], "roi": [125, 70, 70, 45], - "next": ["#self", "RelaunchAnchor@RA@MissionIcon2"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-MissionIcon2"] }, - "RelaunchAnchor@RA@MissionIcon2": { - "doc": "步骤 28:模板匹配任务图标并点击", - "algorithm": "MatchTemplate", - "action": "ClickSelf", + "RelaunchAnchor@RA@PNS-RA1-MissionIcon2": { + "doc": "步骤 27:模板匹配任务图标并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-MissionIcon", "template": "RelaunchAnchor@RA@MissionIcon.png", - "roi": [0, 179, 150, 141], - "next": ["RelaunchAnchor@RA@CraftOwnCommStation1", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-CraftOwnCommStation1", "#self"] }, - "RelaunchAnchor@RA@CraftOwnCommStation1": { - "doc": "步骤 29:OCR 识别 <制作并拥有1个通讯基站> 并点击", + "RelaunchAnchor@RA@PNS-RA1-CraftOwnCommStation1": { + "doc": "步骤 28:OCR 识别 <制作并拥有1个通讯基站> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["制作并拥有", "通讯基站"], "roi": [660, 280, 90, 35], - "next": ["RelaunchAnchor@RA@ConfirmCommMission", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-ConfirmCommMission", "#self"] }, - "RelaunchAnchor@RA@ConfirmCommMission": { - "doc": "步骤 30:OCR 识别 <确认> 并点击", - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": ["确认"], - "roi": [1076, 577, 72, 44], - "next": ["RelaunchAnchor@RA@CraftOwnCommStation", "#self"] + "RelaunchAnchor@RA@PNS-RA1-ConfirmCommMission": { + "doc": "步骤 29:OCR 识别 <确认> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-Confirm", + "next": ["RelaunchAnchor@RA@PNS-RA1-CraftOwnCommStation", "#self"] }, - "RelaunchAnchor@RA@CraftOwnCommStation": { - "doc": "步骤 31:OCR 识别 <制作并拥有通讯基站> 并点击", + "RelaunchAnchor@RA@PNS-RA1-CraftOwnCommStation": { + "doc": "步骤 30:OCR 识别 <制作并拥有通讯基站> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["制作并拥有", "通讯基站"], "roi": [79, 229, 177, 25], - "next": ["RelaunchAnchor@RA@WaitFirstCommDialogue"] + "next": ["RelaunchAnchor@RA@PNS-RA1-WaitFirstCommDialogue"] }, - "RelaunchAnchor@RA@WaitFirstCommDialogue": { - "doc": "步骤 32 前等待第一段说话标识出现", + "RelaunchAnchor@RA@PNS-RA1-WaitFirstCommDialogue": { + "doc": "步骤 31 前等待第一段说话标识出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@FirstCommDialogue", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-FirstCommDialogue", "#self"] }, - "RelaunchAnchor@RA@FirstCommDialogue": { - "doc": "步骤 33:模板匹配说话标识,持续点击到没有这个标识", - "baseTask": "RelaunchAnchor@RA@WoodDialogue", + "RelaunchAnchor@RA@PNS-RA1-FirstCommDialogue": { + "doc": "步骤 31:模板匹配说话标识,持续点击直到标识消失", + "baseTask": "RelaunchAnchor@RA@PNS-Common-DialogueSequence", "template": "RelaunchAnchor@RA@DialogueMarker.png", - "next": ["#self", "RelaunchAnchor@RA@WaitSecondCommDialogue"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitSecondCommDialogue"] }, - "RelaunchAnchor@RA@WaitSecondCommDialogue": { - "doc": "步骤 34:模板匹配等待第二段说话标识出现", + "RelaunchAnchor@RA@PNS-RA1-WaitSecondCommDialogue": { + "doc": "步骤 32 前等待第二段说话标识出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@SecondCommDialogue", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-SecondCommDialogue", "#self"] }, - "RelaunchAnchor@RA@SecondCommDialogue": { - "doc": "步骤 35:模板匹配说话标识,持续点击到没有这个标识", - "baseTask": "RelaunchAnchor@RA@WoodDialogue", + "RelaunchAnchor@RA@PNS-RA1-SecondCommDialogue": { + "doc": "步骤 32:模板匹配说话标识,持续点击直到标识消失", + "baseTask": "RelaunchAnchor@RA@PNS-Common-DialogueSequence", "template": "RelaunchAnchor@RA@DialogueMarker.png", - "next": ["#self", "RelaunchAnchor@RA@WaitBeforeSettlement"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitBeforeSettlement"] }, - "RelaunchAnchor@RA@WaitBeforeSettlement": { - "doc": "步骤 36:占位等待 x 秒", + "RelaunchAnchor@RA@PNS-RA1-WaitBeforeSettlement": { + "doc": "步骤 33:占位等待 x 秒", "algorithm": "JustReturn", "postDelay": 10000, - "next": ["RelaunchAnchor@RA@WaitMissionIcon3"] + "next": ["RelaunchAnchor@RA@PNS-RA1-WaitMissionIcon3"] }, - "RelaunchAnchor@RA@WaitMissionIcon3": { - "doc": "步骤 37 前等待任务图标出现", + "RelaunchAnchor@RA@PNS-RA1-WaitMissionIcon3": { + "doc": "步骤 34 前等待任务图标出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@MissionIcon3", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-MissionIcon3", "#self"] }, - "RelaunchAnchor@RA@MissionIcon3": { - "doc": "步骤 37:模板匹配任务图标并点击", - "algorithm": "MatchTemplate", - "action": "ClickSelf", + "RelaunchAnchor@RA@PNS-RA1-MissionIcon3": { + "doc": "步骤 34:模板匹配任务图标并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-MissionIcon", "template": "RelaunchAnchor@RA@MissionIcon.png", - "roi": [0, 179, 150, 141], - "next": ["RelaunchAnchor@RA@DeliverStone10", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-DeliverStone10", "#self"] }, - "RelaunchAnchor@RA@DeliverStone10": { - "doc": "步骤 38:OCR 识别 <交付10份石材> 并点击", + "RelaunchAnchor@RA@PNS-RA1-DeliverStone10": { + "doc": "步骤 35:OCR 识别 <交付10份石材> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["石材"], "roi": [444, 281, 135, 34], - "next": ["RelaunchAnchor@RA@ConfirmSettlement", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-ConfirmSettlement", "#self"] }, - "RelaunchAnchor@RA@ConfirmSettlement": { - "doc": "步骤 39:OCR 识别 <确认> 并点击", - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": ["确认"], - "roi": [1076, 577, 72, 44], - "next": ["RelaunchAnchor@RA@DeliverStone", "#self"] + "RelaunchAnchor@RA@PNS-RA1-ConfirmSettlement": { + "doc": "步骤 36:OCR 识别 <确认> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-Confirm", + "next": ["RelaunchAnchor@RA@PNS-RA1-DeliverStone", "#self"] }, - "RelaunchAnchor@RA@DeliverStone": { - "doc": "步骤 40:OCR 识别 <交付石材> 并点击", + "RelaunchAnchor@RA@PNS-RA1-DeliverStone": { + "doc": "步骤 37:OCR 识别 <交付石材> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["交付石材"], "roi": [80, 235, 85, 35], - "next": ["RelaunchAnchor@RA@SettleNow", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-SettleNow", "#self"] }, - "RelaunchAnchor@RA@SettleNow": { - "doc": "步骤 41:OCR 识别 <立即结算> 并点击", + "RelaunchAnchor@RA@PNS-RA1-SettleNow": { + "doc": "步骤 38:OCR 识别 <立即结算> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["立即结算"], "roi": [918, 459, 137, 50], - "next": ["#self", "RelaunchAnchor@RA@WaitContinueAfterSettlement"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitContinueAfterSettlement"] }, - "RelaunchAnchor@RA@WaitContinueAfterSettlement": { - "doc": "步骤 42 前等待结算完成", + "RelaunchAnchor@RA@PNS-RA1-WaitContinueAfterSettlement": { + "doc": "步骤 39 前等待结算完成", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@ContinueAfterSettlement", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-ContinueAfterSettlement", "#self"] }, - "RelaunchAnchor@RA@ContinueAfterSettlement": { - "doc": "步骤 42:OCR 识别 <点击继续> 并点击", + "RelaunchAnchor@RA@PNS-RA1-ContinueAfterSettlement": { + "doc": "步骤 39:OCR 识别 <点击继续> 并点击", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["点击继续"], "roi": [605, 664, 113, 44], - "next": ["#self", "RelaunchAnchor@RA@WaitFinishConstruction"] + "next": ["#self", "RelaunchAnchor@RA@PNS-RA1-WaitFinishConstruction"] }, - "RelaunchAnchor@RA@WaitFinishConstruction": { - "doc": "步骤 43 前等待 <完成建设> 出现", + "RelaunchAnchor@RA@PNS-RA1-WaitFinishConstruction": { + "doc": "步骤 40 前等待 <完成建设> 出现", "algorithm": "JustReturn", - "next": ["RelaunchAnchor@RA@FinishConstruction", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-FinishConstruction", "#self"] }, - "RelaunchAnchor@RA@FinishConstruction": { - "doc": "步骤 43:OCR 识别 <完成建设> 并点击,然后回到步骤 1", + "RelaunchAnchor@RA@PNS-RA1-FinishConstruction": { + "doc": "步骤 40:OCR 识别 <完成建设> 并点击,然后回到步骤 1", "algorithm": "OcrDetect", "action": "ClickSelf", "text": ["完成建设"], "roi": [595, 662, 124, 43], - "next": ["RelaunchAnchor@RA@RA1", "#self"] + "next": ["RelaunchAnchor@RA@PNS-RA1-Prepare", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-Prepare": { + "doc": "步骤 1(任务起点):OCR 识别 开启建设", + "baseTask": "RelaunchAnchor@RA@PNS-Common-OpenConstruction", + "withoutDet": true, + "useRaw": false, + "binThreshold": [200, 255], + "postDelay":1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-ChooseStrategy"] + }, + "RelaunchAnchor@RA@PNS-RA15-ChooseStrategy": { + "doc": "步骤 2:OCR 识别 筹划经营", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["经","营"], + "roi": [377, 385, 97, 25], + "postDelay":200, + "next": ["#self","RelaunchAnchor@RA@PNS-RA15-ConfirmSelection"] + }, + "RelaunchAnchor@RA@PNS-RA15-ConfirmSelection": { + "doc": "步骤 3:OCR 识别 <确认选择> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认选择"], + "roi": [1055, 619, 117, 43], + "next": ["RelaunchAnchor@RA@PNS-RA15-Choose"] + }, + "RelaunchAnchor@RA@PNS-RA15-Choose": { + "doc": "步骤 4:OCR 识别 <干员招募> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["干员招募"], + "roi": [941, 131, 131, 34], + "next": ["RelaunchAnchor@RA@PNS-RA15-ExamineCXExistence","RelaunchAnchor@RA@PNS-RA15-ClearChosen"] + }, + "RelaunchAnchor@RA@PNS-RA15-ExamineCXExistence": { + "doc": "步骤 4.1:OCR 识别 <圣聆初雪> ", + "algorithm": "OcrDetect", + "action": "DoNothing", + "text": ["圣","聆","初雪"], + "roi": [843, 449, 96, 29], + "next": ["RelaunchAnchor@RA@PNS-RA15-ConfirmTeam"] + }, + "RelaunchAnchor@RA@PNS-RA15-ClearChosen": { + "doc": "步骤 5:OCR 识别 <快捷编队> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["快捷编队"], + "roi": [1096, 22, 78, 28], + "next": ["RelaunchAnchor@RA@PNS-RA15-ClearChosen-2"] + }, + "RelaunchAnchor@RA@PNS-RA15-ClearChosen-2": { + "doc": "步骤 5.1:OCR 识别 <清空>", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["清空"], + "roi": [460, 660, 60, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [1224, 135, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill1"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill1": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [470, 125, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill2"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill2": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [470, 260, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill3"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill3": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [470, 410, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill4"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill4": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [470, 540, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-Fill5"] + }, + "RelaunchAnchor@RA@PNS-RA15-Fill5": { + "doc": "步骤 6:点先锋", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [840, 125, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-ConfirmChoose"] + }, + "RelaunchAnchor@RA@PNS-RA15-ConfirmChoose": { + "doc": "步骤 7:OCR 识别 <确认> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [1048, 662, 56, 31], + "next": ["RelaunchAnchor@RA@PNS-RA15-AddHelp"] + }, + "RelaunchAnchor@RA@PNS-RA15-AddHelp": { + "doc": "步骤 8:OCR 识别 <选择助战> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["选择助战"], + "roi": [886, 21, 79, 28], + "next": ["RelaunchAnchor@RA@PNS-RA15-ChooseType"] + }, + "RelaunchAnchor@RA@PNS-RA15-ChooseType": { + "doc": "步骤 9:点法师", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [40, 420, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-CX1","RelaunchAnchor@RA@PNS-RA15-CX2","RelaunchAnchor@RA@PNS-RA15-CX3","RelaunchAnchor@RA@PNS-RA15-CX4","RelaunchAnchor@RA@PNS-RA15-CX5","RelaunchAnchor@RA@PNS-RA15-CX6","RelaunchAnchor@RA@PNS-RA15-CX7","RelaunchAnchor@RA@PNS-RA15-CX8"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX1": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [138, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX2": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [280, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX3": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [420, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX4": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [560, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX5": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [700, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX6": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [835, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX7": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [975, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX8": { + "doc": "步骤 10:OCR 识别 <圣聆初雪> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["圣聆初雪"], + "roi": [1115, 577, 100, 30], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Skill"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX-Skill": { + "doc": "步骤 11:OCR 识别 二技能 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["45","46","47","48","49","50","51","52"], + "roi": [934, 331, 26, 22], + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-Mod"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX-Mod": { + "doc": "步骤 12:点模组", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [890, 460, 20, 20], + "postDelay": 200, + "next": ["RelaunchAnchor@RA@PNS-RA15-CX-ConfirmHelp"] + }, + "RelaunchAnchor@RA@PNS-RA15-CX-ConfirmHelp": { + "doc": "步骤 13:OCR 识别 <招募助战> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["招募助战"], + "roi": [740, 580, 140, 40], + "next": ["RelaunchAnchor@RA@PNS-RA15-ConfirmTeam"] + }, + "RelaunchAnchor@RA@PNS-RA15-ConfirmTeam": { + "doc": "步骤 14:OCR 识别 <确认招募> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认招募"], + "roi": [1088, 657, 110, 33], + "next": ["RelaunchAnchor@RA@PNS-RA15-ConfirmTeam2"] + }, + "RelaunchAnchor@RA@PNS-RA15-ConfirmTeam2": { + "doc": "步骤 14.1:OCR 识别 <确认> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [923, 466, 67, 35], + "next": ["RelaunchAnchor@RA@PNS-RA15-StartConstruction"] + }, + "RelaunchAnchor@RA@PNS-RA15-StartConstruction": { + "doc": "步骤 15:OCR 识别 <开始建设> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-StartConstruction", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-WaitSkip"] + }, + "RelaunchAnchor@RA@PNS-RA15-WaitSkip": { + "doc": "步骤 15.2 等待剧情跳过", + "baseTask": "RelaunchAnchor@RA@PNS-Common-WaitSkip", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-Plot", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-Plot": { + "doc": "步骤 16:OCR 识别 <外勤> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["外勤"], + "roi": [404, 564, 50, 26], + "next": ["#self","RelaunchAnchor@RA@PNS-RA15-Plot2"] + }, + "RelaunchAnchor@RA@PNS-RA15-Plot2": { + "doc": "步骤 16.1:OCR 识别 <看情> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["看情"], + "roi": [404, 564, 50, 26], + "next": ["#self","RelaunchAnchor@RA@PNS-RA15-Plot3"] + }, + "RelaunchAnchor@RA@PNS-RA15-Plot3": { + "doc": "步骤 16.2:OCR 识别 <请> ", + "algorithm": "OcrDetect", + "action": "DoNothing", + "text": ["请"], + "roi": [532, 61, 24, 26], + "next": ["RelaunchAnchor@RA@PNS-RA15-AlignMap"] + }, + "RelaunchAnchor@RA@PNS-RA15-AlignMap": { + "doc": "步骤 17:JustReturn 的 Swipe,对齐地图", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [700, 200, 1, 1], + "rectMove": [700, 700, 1, 1], + "specialParams": [1500, 0, 3, 0], + "preDelay": 1000, + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-AlignMap2"] + }, + "RelaunchAnchor@RA@PNS-RA15-AlignMap2": { + "doc": "步骤 17.2:JustReturn 的 Swipe,对齐地图", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [970, 110, 1, 1], + "rectMove": [430, 550, 1, 1], + "specialParams": [1500, 0, 3, 0], + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-DeployGatheringBaseSwipe"] + }, + "RelaunchAnchor@RA@PNS-RA15-DeployGatheringBaseSwipe": { + "doc": "步骤 18:JustReturn 的 Swipe,占位部署采集基站", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [400, 650, 1, 1], + "rectMove": [495, 414, 1, 1], + "specialParams": [1000, 0, 3, 0], + "postDelay": 4000, + "next": ["RelaunchAnchor@RA@PNS-RA15-DeployGatheringBaseWait"] + }, + "RelaunchAnchor@RA@PNS-RA15-DeployGatheringBaseWait": { + "doc": "步骤 18.2:部署采集基站后的占位等待 x 秒", + "algorithm": "JustReturn", + "postDelay": 2000, + "next": ["RelaunchAnchor@RA@PNS-RA15-DoubleSpeed"] + }, + "RelaunchAnchor@RA@PNS-RA15-DoubleSpeed": { + "doc": "步骤 19:开启二倍速", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [1090, 40, 20, 20], + "next": ["RelaunchAnchor@RA@PNS-RA15-WaitCost"] + }, + "RelaunchAnchor@RA@PNS-RA15-WaitCost": { + "doc": "步骤 20 等待费用跳过", + "baseTask": "RelaunchAnchor@RA@PNS-Common-WaitCost", + "next": ["RelaunchAnchor@RA@PNS-RA15-Cost24", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-Cost24": { + "doc": "步骤 21:OCR 识别 Cost", + "algorithm": "OcrDetect", + "action": "DoNothing", + "text": ["24","25","26","27","28","29"], + "roi": [1198, 495, 75, 43], + "next": ["RelaunchAnchor@RA@PNS-RA15-DeployCX"] + }, + "RelaunchAnchor@RA@PNS-RA15-DeployCX": { + "doc": "步骤 22:JustReturn 的 Swipe,部署初雪", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [1139, 638, 1, 1], + "rectMove": [390, 512, 1, 1], + "specialParams": [1000, 0, 3, 0], + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-RA15-DeployCX2"] + }, + "RelaunchAnchor@RA@PNS-RA15-DeployCX2": { + "doc": "步骤 22.2:JustReturn 的 Swipe,部署初雪", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [725, 319, 1, 1], + "rectMove": [730, 500, 1, 1], + "specialParams": [1000, 0, 3, 0], + "postDelay": 2000, + "next": ["RelaunchAnchor@RA@PNS-RA15-MissionIcon1"] + }, + "RelaunchAnchor@RA@PNS-RA15-MissionIcon1": { + "doc": "步骤 23:模板匹配任务图标并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-MissionIcon", + "template": "RelaunchAnchor@RA@MissionIcon.png", + "postDelay":2000, + "next": ["RelaunchAnchor@RA@PNS-RA15-Kill60", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-Kill60": { + "doc": "步骤 24:OCR 识别 <击败> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["击败","岳败"], + "roi": [571, 281, 51, 33], + "next": ["RelaunchAnchor@RA@PNS-RA15-ConfirmMission", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-ConfirmMission": { + "doc": "步骤 25:OCR 识别 <确认> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-Confirm", + "postDelay": 35000, + "next": ["RelaunchAnchor@RA@PNS-RA15-Deliver", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-Deliver": { + "doc": "步骤 26:OCR 识别 <击败> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["击败"], + "roi": [81, 243, 83, 29], + "postDelay": 1000, + "next": ["#self","RelaunchAnchor@RA@PNS-RA15-End1"] + }, + "RelaunchAnchor@RA@PNS-RA15-End1": { + "doc": "步骤 27:退出", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [62, 69, 1, 1], + "next": ["RelaunchAnchor@RA@PNS-RA15-End2"] + }, + "RelaunchAnchor@RA@PNS-RA15-End2": { + "doc": "步骤 27.2:OCR 识别 <确认> 并点击", + "baseTask": "RelaunchAnchor@RA@PNS-Common-Confirm", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [928, 469, 61, 33], + "next": ["RelaunchAnchor@RA@PNS-RA15-WaitEnd"] + }, + "RelaunchAnchor@RA@PNS-RA15-WaitEnd": { + "doc": "步骤 27.3 等待结束跳过", + "algorithm": "JustReturn", + "postDelay": 500, + "next": ["RelaunchAnchor@RA@PNS-RA15-End3", "#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-End3": { + "doc": "步骤 27.4:OCR 识别 <点击> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["点"], + "roi": [600, 670, 60, 40], + "postDelay":500, + "next": ["RelaunchAnchor@RA@PNS-RA15-End4","#self"] + }, + "RelaunchAnchor@RA@PNS-RA15-End4": { + "doc": "步骤 27.5:OCR 识别 <完成> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["完"], + "roi": [600, 670, 60, 40], + "postDelay":500, + "next": ["#self","RelaunchAnchor@RA@PNS-RA15-Retry"] + }, + "RelaunchAnchor@RA@PNS-RA15-Retry": { + "doc": "再次开始", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [640, 370, 1, 1], + "postDelay":500, + "next": ["RelaunchAnchor@RA@PNS-RA15-Prepare","#self"] } } diff --git a/resource/tasks/RA/Tales.json b/resource/tasks/RA/plugin/Tales.json similarity index 100% rename from resource/tasks/RA/Tales.json rename to resource/tasks/RA/plugin/Tales.json diff --git a/resource/tasks/RA/base.json b/resource/tasks/RA/plugin/base.json similarity index 100% rename from resource/tasks/RA/base.json rename to resource/tasks/RA/plugin/base.json diff --git a/src/MaaCore/Task/Interface/ReclamationTask.cpp b/src/MaaCore/Task/Interface/ReclamationTask.cpp index 0e8f512c15..8806d03c20 100644 --- a/src/MaaCore/Task/Interface/ReclamationTask.cpp +++ b/src/MaaCore/Task/Interface/ReclamationTask.cpp @@ -45,7 +45,9 @@ bool asst::ReclamationTask::set_params(const json::value& params) m_reclamation_task_ptr->set_times_limit("RA@Store@EnterStore", INT_MAX); if (theme == ReclamationTheme::RelaunchAnchor) { - m_reclamation_task_ptr->set_tasks({ theme + "@RA@ProsperityNoSave" }); + const int stage = static_cast(m_config_ptr->get_stage()); + const std::string task_name = theme + "@RA@PNS-RA" + std::to_string(stage) + "-Entry"; + m_reclamation_task_ptr->set_tasks({ task_name }); m_reclamation_task_ptr->set_times_limit("RA@Store@EnterStore", 0); } else { diff --git a/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp b/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp index 32ee91e5f4..3246b3b610 100644 --- a/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp +++ b/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp @@ -20,6 +20,20 @@ bool asst::ReclamationConfig::verify_and_load_params(const json::value& params) const auto mode = static_cast(modeInt); if (theme == ReclamationTheme::RelaunchAnchor) { m_mode = ReclamationMode::ProsperityNoSave; + if (!params.contains("stage")) { + Log.error(__FUNCTION__, "| Missing RelaunchAnchor stage"); + return false; + } + + const int stageInt = params.get("stage", -1); + if (stageInt == static_cast(RelaunchAnchorStage::RA15)) { + m_stage = RelaunchAnchorStage::RA15; + } else if (stageInt == static_cast(RelaunchAnchorStage::RA1)) { + m_stage = RelaunchAnchorStage::RA1; + } else { + Log.error(__FUNCTION__, "| Invalid RelaunchAnchor stage", stageInt); + return false; + } return true; } diff --git a/src/MaaCore/Task/Reclamation/ReclamationConfig.h b/src/MaaCore/Task/Reclamation/ReclamationConfig.h index a68f6937b9..55581f4273 100644 --- a/src/MaaCore/Task/Reclamation/ReclamationConfig.h +++ b/src/MaaCore/Task/Reclamation/ReclamationConfig.h @@ -17,6 +17,12 @@ enum class ReclamationMode // 对应 Roguelike Mode ProsperityInSave = 1, // 1 - 有存档刷繁荣点数 }; +enum class RelaunchAnchorStage +{ + RA1 = 1, // 1 - RA-1 + RA15 = 15, // 15 - RA-15 +}; + enum class ReclamationDifficulty // 对应 Roguelike Difficulty { Casual = 0, // 0 - 休养模式 @@ -54,11 +60,14 @@ public: [[nodiscard]] const ReclamationMode& get_mode() const { return m_mode; } + [[nodiscard]] RelaunchAnchorStage get_stage() const { return m_stage; } + [[nodiscard]] ReclamationDifficulty get_difficulty() const { return m_difficulty; } private: std::string m_theme = std::string(ReclamationTheme::Tales); // 主题 ReclamationMode m_mode = ReclamationMode::ProsperityInSave; // 策略 + RelaunchAnchorStage m_stage = RelaunchAnchorStage::RA1; // 关卡 ReclamationDifficulty m_difficulty = ReclamationDifficulty::Challenge; // 难度模式 // 以下注释列出了插件专用参数, 以便于快速检阅。这些参数的具体声明与使用请参考各插件。 diff --git a/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs b/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs index 1f2e0c343e..abaffc3191 100644 --- a/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs +++ b/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs @@ -25,6 +25,8 @@ public class ReclamationTask : BaseTask public ReclamationTheme Theme { get; set; } = ReclamationTheme.Tales; + public RelaunchAnchorStage Stage { get; set; } = RelaunchAnchorStage.RA1; + public ReclamationMode Mode { get; set; } = ReclamationMode.Archive; /// @@ -63,6 +65,19 @@ public enum ReclamationTheme RelaunchAnchor, } +public enum RelaunchAnchorStage +{ + /// + /// RA-1 + /// + RA1 = 1, + + /// + /// RA-15 + /// + RA15 = 15, +} + public enum ReclamationMode { /// diff --git a/src/MaaWpfGui/Models/AsstTasks/AsstReclamationTask.cs b/src/MaaWpfGui/Models/AsstTasks/AsstReclamationTask.cs index fac05abde1..c49aad3615 100644 --- a/src/MaaWpfGui/Models/AsstTasks/AsstReclamationTask.cs +++ b/src/MaaWpfGui/Models/AsstTasks/AsstReclamationTask.cs @@ -31,6 +31,11 @@ public class AsstReclamationTask : AsstBaseTask /// public ReclamationTheme Theme { get; set; } = ReclamationTheme.Tales; + /// + /// Gets or sets 生息演算关卡(仅重启锚点) + /// + public RelaunchAnchorStage Stage { get; set; } = RelaunchAnchorStage.RA1; + /// /// Gets or sets 生息演算模式 /// @@ -71,6 +76,7 @@ public class AsstReclamationTask : AsstBaseTask var data = new JObject { ["theme"] = Theme.ToString(), + ["stage"] = (int)Stage, ["mode"] = (int)Mode, ["increment_mode"] = IncrementMode, ["num_craft_batches"] = MaxCraftCountPerRound, diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 9b0d183fb5..d84ff78b10 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -728,6 +728,7 @@ If the game is launched in portrait mode and then switched to landscape, it may Fire Within the Sand Tales Within the Sand RELAUNCH ANCHOR + Stage Selection I do not have a save, let's farm prosperity points by repeatedly entering and exiting stages. I do have a save, let's farm prosperity points by crafting tools. Increment Mode @@ -1474,21 +1475,34 @@ Cache files (such as maps, operator avatars, etc.) need to be regenerated after Still clicking - -Relaunch Anchor: + +Reward estimate: ~159 tokens + coordination points per run, ~2 min 10 sec per round - Reward estimate: ~159 tokens + coordination points per run, ~2 min 10 sec per round +Operator requirement: None - Prerequisite (complete once manually): - 1. Manually enter RA-1, complete the tutorial, and return to the map - 2. After that, the task can be started when "Start Construction" appears at the bottom-right after clicking RA-1 +Prerequisite: Clear RA-1 in the main story - Note: If you have unlocked technologies related to starting with extra items, please dismantle the facilities in the base that cause starting with extra items, such as Food Supply Stations, Drink Supply Stations, Large Animal Pens, etc. +Open RA-1 on the map and start the task when "Start Construction" appears at the bottom-right to loop automatically - Task flow: - Automatically executes farming, construction, resource delivery, and settlement loop +Note: If you have unlocked technologies related to starting with extra items, please dismantle the facilities in the base that cause starting with extra items, such as Food Supply Stations, Drink Supply Stations, Large Animal Pens, etc. + +Task flow: Automatically executes farming, construction, resource delivery, and settlement loop - + +Reward estimate: ~500 tokens + coordination points per run, ~3 min per round + +Operator requirement: Saintly First Snow (support unit allowed) + +Prerequisite: +1. Clear RA-15 in the main story +2. If you have Saintly First Snow, manually open RA-15 and form a squad once. Use 5 Vanguards (no level requirement) + Saintly First Snow, pick her last, then save the squad and exit the stage +3. If you use support Saintly First Snow, make sure Saintly First Snow is on the first page of the Caster support list (consider adding as friend) + +Note: If you have unlocked technologies related to starting with extra items, please dismantle the facilities in the base that cause starting with extra items, such as Food Supply Stations, Drink Supply Stations, Large Animal Pens, etc. + +Task flow: Automatically use support operator to execute 60-kill mission + + The support for reclamation algorithm is still under development at present. Please mind the following: Farm points through initial setup: (Be careful that existing save files might be deleted) diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 4653610eea..976d0a7acb 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -729,6 +729,7 @@ C:\\leidian\\LDPlayer9 砂中の火 熱砂秘聞 RELAUNCH ANCHOR + ステージ選択 セーブせずに、出入りを繰り返して生息ポイントを稼ぐ セーブしながら、支援アイテムを組み立てて生息ポイントを稼ぐ 増加方式 @@ -1475,21 +1476,34 @@ DEBUGディレクトリに保存される画像には数量制限があり、超 まだ押す - -再起の錨: + +報酬目安:1回あたり約159トークン+統括ポイント、所要時間約2分10秒 - 報酬目安:1回あたり約159トークン+統括ポイント、所要時間約2分10秒 +オペレーター要件:なし - 事前準備(手動で1回のみ): - 1. 手動でRA-1に入り、チュートリアルを完了してマップに戻る - 2. 以降、RA-1をクリックした後に右下に「建設開始」が表示されたらタスクを開始可能 +前提条件:メインストーリーでRA-1をクリア済み - 注意:「初期追加携帯アイテム」に関連するテクノロジーをアンロックしている場合、基地内で初期追加携帯アイテムの原因となる施設(食品供給所、飲料供給所、大型獣舎など)を解体してください +マップでRA-1を開き、右下に「建設開始」が表示されたらタスクを開始すると自動でループします - タスクの流れ: - 精耕細作、建設、資源納入、決済を自動実行 +注意:「初期追加携帯アイテム」に関連するテクノロジーをアンロックしている場合、基地内で初期追加携帯アイテムの原因となる施設(食品供給所、飲料供給所、大型獣舎など)を解体してください + +タスクの流れ:精耕細作、建設、資源納入、決済を自動実行 - + +報酬目安:1回あたり約 500 トークン+統括ポイント、所要時間約 3 分 + +オペレーター要件:聖聆初雪(サポート借用可) + +前提条件: +1. メインストーリーでRA-15をクリア済み +2. 聖聆初雪を所持している場合、手動で RA-15 を開いて一度編成する。先鋒5体(育成不要)+聖聆初雪を最後に選択し、編成を保存してステージを退出する +3. サポートの聖聆初雪を使う場合、聖聆初雪が術師サポート一覧の先頭ページにいることを確認する(友達登録を推奨) + +注意: 「初期追加携帯アイテム」に関連するテクノロジーをアンロックしている場合、基地内で初期追加携帯アイテムの原因となる施設(食品供給所、飲料供給所、大型獣舎など)を解体してください + +タスクの流れ: サポートオペレーターを使用して 60 キルミッションを自動実行 + + 生息演算のサポートはまだ初期段階にありますので、ご利用の際は以下の点にご注意ください: 初期設定でポイントを稼ぐ:(既存のセーブデータが削除されることに注意してください) @@ -2028,4 +2042,3 @@ MAA を複数開くには、新しい MAA を他のフォルダにコピーし エミュレータの選択がキャンセルされました - diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 1cf73ec478..f54ef771ea 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -730,6 +730,7 @@ C:\\leidian\\LDPlayer9 모래 속의 불 사막 이야기 RELAUNCH ANCHOR + 스테이지 선택 세이브 X, 스테이지 반복으로 번영의 선물 획득 세이브 O, 도구 제작으로 번영의 선물 획득 증가 방식 @@ -1476,20 +1477,33 @@ DEBUG 디렉토리에 저장된 이미지는 수량 제한이 있으며 초과 계속 누르네 - -재시작 앵커: + +수익 참고: 회당 약 159토큰 + 통괄 포인트, 소요 시간 약 2분 10초 - 수익 참고: 회당 약 159토큰 + 통괄 포인트, 소요 시간 약 2분 10초 +오퍼레이터 요구 사항: 없음 - 사전 준비 (수동으로 1회만): - 1. 수동으로 RA-1에 진입하여 튜토리얼을 완료하고 맵으로 돌아옵니다 - 2. 이후 RA-1 클릭 후 오른쪽 아래에 "건설 시작"이 나타나면 작업을 시작할 수 있습니다 +사전 조건: 메인 스토리에서 RA-1을 클리어해야 합니다 - 참고: 초기 추가 아이템 휴대 관련 기술을 해제한 경우, 기지 내에서 초기 추가 아이템을 휴대하게 하는 시설(식품 공급소, 음료 공급소, 대형 축사 등)을 철거하세요 +맵에서 RA-1을 열고 오른쪽 아래에 "건설 시작"이 나타나면 작업을 시작하여 자동 순환할 수 있습니다 - 작업 흐름: - 정경세작, 건설, 자원 납품, 결제를 자동 실행 - +참고: 초기 추가 아이템 휴대 관련 기술을 해제한 경우, 기지 내에서 초기 추가 아이템을 휴대하게 하는 시설(식품 공급소, 음료 공급소, 대형 축사 등)을 철거하세요 + +작업 흐름:정경세작, 건설, 자원 납품, 결제를 자동 실행 + +수익 참고: 회당 약 500 토큰 + 통괄 포인트, 소요 시간 약 3분 + +오퍼레이터 요구 사항: 성령초설(서포트 유닛 사용 가능) + +사전 조건: +1. 메인 스토리에서 RA-15를 클리어해야 합니다 +2. 성령초설을 보유한 경우, 직접 RA-15를 열고 한 번 편성한다. 선봉 5명(육성 요구 없음) + 성령초설을 마지막에 선택하고 편성을 저장한 뒤 스테이지를 나간다 +3. 서포트의 성령초설을 사용하는 경우, 성령초설이 술사 서포트 첫 페이지에 있는지 확인한다 (친구 설정 권장) + +참고: 초기 추가 아이템 휴대 관련 기술을 해제한 경우, 기지 내에서 초기 추가 아이템을 휴대하게 하는 시설(식품 공급소, 음료 공급소, 대형 축사 등)을 철거하세요 + +작업 흐름: 서포트 오퍼레이터를 사용하여 60킬 미션을 자동 실행 + + 현재 생존 연산 기능은 초기 단계이며, 다음 사항에 주의하세요: 세이브 X: 스테이지 반복 (주의: 기존 세이브 데이터가 삭제될 수 있습니다) diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 365946c044..4655ea8ec9 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -729,6 +729,7 @@ C:\\leidian\\LDPlayer9。\n 沙中之火 沙洲遗闻 重启锚点 + 关卡选择 无存档,通过进出关卡刷生息点数 有存档,通过组装支援道具刷生息点数 增加方式 @@ -1475,21 +1476,36 @@ DEBUG 目录下保存的图片有数量限制,超出后会自动清理旧图 还点 - -重启锚点: + +收益参考:每把约 159 代币 + 统筹点数,单轮耗时约 2 分 10 秒 - 收益参考:每把约 159 代币 + 统筹点数,单轮耗时约 2 分 10 秒 +干员要求:无 - 前置步骤(手动完成一次): - 1. 手动进入 RA-1,完成新手教程,直到回到大地图 - 2. 之后每次任务均可在 RA-1 右下角出现“开启建设”时启动 +前置步骤:推进主线至 RA-1 已通关状态 - 注意:如果已解锁开局额外携带物品的相关科技,请将基地内会导致开局额外携带物品的设施拆除,如食品供给站、饮品供给站、大型兽栏等 +在大地图打开 RA-1,右下角出现“开启建设”时启动任务,即可自动循环 - 任务流程: - 自动执行精耕细作、建设、交付资源、结算循环 +注意:如果已解锁开局额外携带物品的相关科技,请将基地内会导致开局额外携带物品的设施拆除,如食品供给站、饮品供给站、大型兽栏等 + +任务流程:自动执行精耕细作、建设、交付资源、结算循环 - + +收益参考:每把约 500 代币 + 统筹点数,单轮耗时约 3 分钟 + +干员要求:圣聆初雪(可以借助战) + +前置步骤: +1. 推进主线至 RA-15 已通关状态 +2. 如果自己有圣聆初雪,请手动打开关卡并配队一次,保证为五先锋(无练度要求)+ 初雪,且初雪位于六号位即最后一个选的人,然后保存配队并退出关卡 +3. 如果使用助战圣聆初雪,请保证圣聆初雪在术士助战首页(考虑挚友) + +在大地图打开 RA-15,右下角出现“开启建设”时启动任务,即可自动循环 + +注意:如果已解锁开局额外携带物品的相关科技,请将基地内会导致开局额外携带物品的设施拆除,如食品供给站、饮品供给站、大型兽栏等 + +任务流程:用圣聆初雪完成 60 杀任务 + + 目前生息演算的支持仍处于中期阶段,使用时请注意以下几点: 通过开局刷点数:(小心已有存档被删除) diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 7e7bc5cf14..b60addd21b 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -729,6 +729,7 @@ C:\\leidian\\LDPlayer9\n 沙中之火 沙洲遺聞 重啟錨點 + 關卡選擇 無存檔,透過進出關卡刷生息點數 有存檔,透過組裝支援道具刷生息點數 增加方式 @@ -1475,21 +1476,34 @@ DEBUG 目錄下儲存的圖片有數量限制,超出後會自動清理舊圖 還點 - -重啟錨點: + +收益參考:每把約 159 代幣 + 統籌點數,單輪耗時約 2 分 10 秒 - 收益參考:每把約 159 代幣 + 統籌點數,單輪耗時約 2 分 10 秒 +幹員要求:無 - 前置步驟(手動完成一次): - 1. 手動進入 RA-1,完成新手教學,直到回到大地圖 - 2. 之後每次任務均可在 RA-1 右下角出現「開啟建設」時啟動 +前置條件:主線已通關 RA-1 - 注意:如果已解鎖開局額外攜帶物品的相關科技,請將基地內會導致開局額外攜帶物品的設施拆除,如食品供給站、飲品供給站、大型獸欄等 +在大地圖打開 RA-1,右下角出現「開啟建設」時啟動任務即可自動循環 - 任務流程: - 自動執行精耕細作、建設、交付資源、結算循環 +注意:如果已解鎖開局額外攜帶物品的相關科技,請將基地內會導致開局額外攜帶物品的設施拆除,如食品供給站、飲品供給站、大型獸欄等 + +任務流程:自動執行精耕細作、建設、交付資源、結算循環 - + +收益參考:每把約 500 代幣 + 統籌點數,單輪耗時約 3 分鐘 + +幹員要求:聖聆初雪(可借助戰) + +前置條件: +1. 主線已通關 RA-15 +2. 如果自己有聖聆初雪,請手動打開 RA-15 並配隊一次。選擇五先鋒(無練度要求)+ 聖聆初雪,且初雪位於最後一位,儲存配隊後退出關卡 +3. 如果使用助戰聖聆初雪,請確認聖聆初雪位於術士助戰首頁(考慮摯友) + +注意: 如果已解鎖開局額外攜帶物品的相關科技,請將基地內會導致開局額外攜帶物品的設施拆除,如食品供給站、飲品供給站、大型獸欄等 + +任務流程: 自動借助戰執行 60 殺任務 + + 目前生息演算的支援仍處於中期階段,使用時請注意以下幾點: 透過開局刷點數:(請注意:已有存檔可能會被刪除) diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs index 75c69f3232..e9877a3ae7 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs @@ -22,6 +22,7 @@ using MaaWpfGui.Utilities.ValueType; using MaaWpfGui.ViewModels.UI; using static MaaWpfGui.Main.AsstProxy; using Mode = MaaWpfGui.Configuration.Single.MaaTask.ReclamationMode; +using Stage = MaaWpfGui.Configuration.Single.MaaTask.RelaunchAnchorStage; using Theme = MaaWpfGui.Configuration.Single.MaaTask.ReclamationTheme; namespace MaaWpfGui.ViewModels.UserControl.TaskQueue; @@ -63,6 +64,24 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam }); } + /// + /// Gets the list of reclamation stages for RelaunchAnchor theme. + /// + public List> ReclamationStageList { get; } = + [ + new() { Display = "RA-1", Value = Stage.RA1 }, + new() { Display = "RA-15", Value = Stage.RA15 }, + ]; + + /// + /// Gets or sets 生息演算关卡选择 + /// + public Stage ReclamationStage + { + get => GetTaskConfig().Stage; + set => SetTaskConfig(t => t.Stage == value, t => t.Stage = value); + } + /// /// Gets the list of reclamation modes. /// @@ -143,17 +162,31 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam /// /// Gets the theme-specific tip text. /// - [PropertyDependsOn(nameof(ReclamationTheme))] + [PropertyDependsOn(nameof(ReclamationTheme), nameof(ReclamationStage))] public string ReclamationTip { get { var theme = ReclamationTheme; + if (theme == Theme.RelaunchAnchor) { - return LocalizationHelper.GetString("ReclamationEarlyTipRelaunchAnchor"); + var stageTipKey = $"ReclamationTipRelaunchAnchorRA{(int)ReclamationStage}"; + if (LocalizationHelper.TryGetString(stageTipKey, out var stageTip)) + { + return stageTip; + } + + return LocalizationHelper.GetString("ReclamationTipRelaunchAnchorRA1"); + } + else if (theme == Theme.Tales || theme == Theme.Fire) + { + return LocalizationHelper.GetString("ReclamationTipTales"); + } + else + { + return string.Empty; } - return LocalizationHelper.GetString("ReclamationEarlyTip"); } } @@ -179,6 +212,7 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam var toolToCraft = !string.IsNullOrEmpty(reclamation.ToolToCraft) ? reclamation.ToolToCraft : LocalizationHelper.GetString("ReclamationToolToCraftPlaceholder", DataHelper.ClientLanguageMapper[SettingsViewModel.GameSettings.ClientType]); var task = new AsstReclamationTask() { Theme = reclamation.Theme, + Stage = reclamation.Stage, Mode = reclamation.Mode, IncrementMode = reclamation.IncrementMode, MaxCraftCountPerRound = reclamation.MaxCraftCountPerRound, diff --git a/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml index de8b8031f7..9392526b44 100644 --- a/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml @@ -28,6 +28,16 @@ ItemsSource="{Binding ReclamationThemeList}" SelectedValue="{Binding ReclamationTheme}" SelectedValuePath="Value" /> +