diff --git a/resource/tasks/RA/Reclamation3.json b/resource/tasks/RA/Reclamation3.json new file mode 100644 index 0000000000..1893533664 --- /dev/null +++ b/resource/tasks/RA/Reclamation3.json @@ -0,0 +1,379 @@ +{ + "RelaunchAnchor@RA@ProsperityNoSave": { + "doc": "生息演算「重启锚点」辅助建设模式刷分入口;前置条件:手动过完一次 RA-1 新手教程,切换为辅助建设模式(统筹系统右侧第二个图标)", + "algorithm": "JustReturn", + "next": ["RelaunchAnchor@RA@PNS-RA1", "RelaunchAnchor@RA@PNS-OpenConstruction"] + }, + "RelaunchAnchor@RA@PNS-RA1": { + "doc": "步骤 1(任务起点):OCR 识别 RA-1 并点击;右下角出现 <开启建设> 时进入步骤 2", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["RA-1"], + "withoutDet": true, + "useRaw": false, + "binThreshold": [200, 255], + "roi": [605, 405, 65, 30], + "next": ["RelaunchAnchor@RA@PNS-OpenConstruction", "#self"] + }, + "RelaunchAnchor@RA@PNS-OpenConstruction": { + "doc": "步骤 2:OCR 识别 <开启建设> 并点击;未出现则回到步骤 1 重新点击 RA-1", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["开启建设"], + "roi": [1055, 597, 141, 46], + "next": ["RelaunchAnchor@RA@PNS-FineFarming", "RelaunchAnchor@RA@PNS-RA1"] + }, + "RelaunchAnchor@RA@PNS-FineFarming": { + "doc": "步骤 3:OCR 识别 <精耕细作> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["精耕细作"], + "roi": [118, 385, 96, 25], + "next": ["RelaunchAnchor@RA@PNS-ConfirmSelection"] + }, + "RelaunchAnchor@RA@PNS-ConfirmSelection": { + "doc": "步骤 4:OCR 识别 <确认选择> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认选择"], + "roi": [1055, 619, 117, 43], + "next": ["RelaunchAnchor@RA@PNS-StartConstruction", "RelaunchAnchor@RA@PNS-FineFarming"] + }, + "RelaunchAnchor@RA@PNS-StartConstruction": { + "doc": "步骤 5:OCR 识别 <开始建设> 并点击;未出现则回到步骤 3", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["开始建设"], + "roi": [984, 607, 138, 47], + "postDelay": 10000, + "next": ["RelaunchAnchor@RA@PNS-WaitSkip"] + }, + "RelaunchAnchor@RA@PNS-WaitSkip": { + "doc": "步骤 6 前等待剧情跳过", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": [ + "RelaunchAnchor@RA@PNS-SkipPlot", + "#self" + ] + }, + "RelaunchAnchor@RA@PNS-SkipPlot": { + "doc": "步骤 6:OCR 识别 <跳过> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["跳过"], + "roi": [1140, 30, 67, 43], + "next": [ + "RelaunchAnchor@RA@PNS-SkipPlotConfirm", + "#self", + "RelaunchAnchor@RA@PNS-WaitGatheringBasePrompt" + ] + }, + "RelaunchAnchor@RA@PNS-SkipPlotConfirm": { + "doc": "步骤 7:OCR 识别 <是否跳过剧情>,点击偏移位置占位", + "algorithm": "OcrDetect", + "action": "ClickRect", + "text": ["是否跳过剧情"], + "roi": [532, 335, 237, 52], + "specificRect": [795, 355, 1, 1], + "next": ["#self", "RelaunchAnchor@RA@PNS-WaitGatheringBasePrompt"] + }, + "RelaunchAnchor@RA@PNS-WaitGatheringBasePrompt": { + "doc": "步骤 8 前等待 <请部署罗德岛采集基站> 出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-DeployGatheringBasePrompt", "#self"] + }, + "RelaunchAnchor@RA@PNS-DeployGatheringBasePrompt": { + "doc": "步骤 8:OCR 等待 <请部署罗德岛采集基站>", + "algorithm": "OcrDetect", + "action": "DoNothing", + "text": ["请部署", "罗德岛", "采集基站"], + "roi": [520, 54, 247, 38], + "next": ["RelaunchAnchor@RA@PNS-DeployGatheringBaseSwipe"] + }, + "RelaunchAnchor@RA@PNS-DeployGatheringBaseSwipe": { + "doc": "步骤 9:JustReturn 的 Swipe,占位部署采集基站", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [530, 630, 10, 10], + "rectMove": [680, 465, 1, 1], + "specialParams": [500, 0, 3, 0], + "postDelay": 8000, + "next": ["RelaunchAnchor@RA@PNS-DoubleSpeed"] + }, + "RelaunchAnchor@RA@PNS-DoubleSpeed": { + "doc": "步骤9.1,开启二倍速", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [1090, 40, 20, 20], + "next": ["RelaunchAnchor@RA@PNS-DeployGatheringBaseWait"] + }, + "RelaunchAnchor@RA@PNS-DeployGatheringBaseWait": { + "doc": "步骤 9:部署采集基站后的占位等待 x 秒", + "algorithm": "JustReturn", + "postDelay": 8000, + "next": ["RelaunchAnchor@RA@PNS-DeployOperatorSwipe"] + }, + "RelaunchAnchor@RA@PNS-DeployOperatorSwipe": { + "doc": "步骤 9:JustReturn 的 Swipe,占位部署干员", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [1120, 630, 10, 10], + "rectMove": [450, 460, 1, 1], + "specialParams": [500, 0, 3, 0], + "next": ["RelaunchAnchor@RA@PNS-DeployOperatorDirection"] + }, + "RelaunchAnchor@RA@PNS-DeployOperatorDirection": { + "doc": "步骤 9:JustReturn 的 Swipe,占位确认干员朝向", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [450, 460, 1, 1], + "rectMove": [1450, 460, 10, 10], + "specialParams": [300, 0, 3, 0], + "next": ["RelaunchAnchor@RA@PNS-DeployOperatorWait"] + }, + "RelaunchAnchor@RA@PNS-DeployOperatorWait": { + "doc": "步骤 9:部署干员后的占位等待 x 秒", + "algorithm": "JustReturn", + "postDelay": 10000, + "next": ["RelaunchAnchor@RA@PNS-WaitMissionIcon1"] + }, + "RelaunchAnchor@RA@PNS-WaitMissionIcon1": { + "doc": "步骤 10 前等待任务图标出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-MissionIcon1", "#self"] + }, + "RelaunchAnchor@RA@PNS-MissionIcon1": { + "doc": "步骤 10:模板匹配任务图标并点击", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@MissionIcon.png", + "roi": [0, 179, 150, 141], + "next": ["RelaunchAnchor@RA@PNS-DeliverWood5", "#self"] + }, + "RelaunchAnchor@RA@PNS-DeliverWood5": { + "doc": "步骤 11:OCR 识别 <交付5份木材> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["木材"], + "roi": [575, 281, 126, 30], + "next": ["RelaunchAnchor@RA@PNS-ConfirmWoodMission", "#self"] + }, + "RelaunchAnchor@RA@PNS-ConfirmWoodMission": { + "doc": "步骤 12:OCR 识别 <确认> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [1076, 577, 72, 44], + "postDelay": 35000, + "next": ["RelaunchAnchor@RA@PNS-DeliverWood", "#self"] + }, + "RelaunchAnchor@RA@PNS-DeliverWood": { + "doc": "步骤 13:OCR 识别 <交付木材> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["交付木材"], + "roi": [80, 235, 85, 35], + "next": ["RelaunchAnchor@RA@PNS-WaitWoodDialogue"] + }, + "RelaunchAnchor@RA@PNS-WaitWoodDialogue": { + "doc": "步骤 14 前等待说话标识或制造标识出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": [ + "RelaunchAnchor@RA@PNS-WoodDialogue", + "RelaunchAnchor@RA@PNS-ManufactureIcon", + "#self" + ] + }, + "RelaunchAnchor@RA@PNS-WoodDialogue": { + "doc": "步骤 14:模板匹配说话标识,持续点击到没有这个标识,间隔 1 秒", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@DialogueMarker.png", + "roi": [363, 456, 144, 139], + "postDelay": 1000, + "next": ["#self", "RelaunchAnchor@RA@PNS-WaitWoodDialogue"] + }, + "RelaunchAnchor@RA@PNS-ManufactureIcon": { + "doc": "步骤 15:模板匹配制造标识并点击", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@ManufactureIcon.png", + "roi": [0, 470, 120, 130], + "next": ["RelaunchAnchor@RA@PNS-CommunicationStation", "#self"] + }, + "RelaunchAnchor@RA@PNS-CommunicationStation": { + "doc": "步骤 16:OCR 识别 <通讯基站> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["通讯基站"], + "roi": [374, 159, 106, 34], + "next": ["RelaunchAnchor@RA@PNS-StartBuildingStation", "#self"] + }, + "RelaunchAnchor@RA@PNS-StartBuildingStation": { + "doc": "步骤 17:OCR 识别 <开始建造> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["开始建造"], + "roi": [1048, 518, 121, 34], + "next": ["RelaunchAnchor@RA@PNS-BlankContinue", "#self"] + }, + "RelaunchAnchor@RA@PNS-BlankContinue": { + "doc": "步骤 18:OCR 识别 <点击空白处继续> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["点击空白处继续"], + "roi": [559, 449, 163, 35], + "next": ["#self", "RelaunchAnchor@RA@PNS-ExitConstruction"] + }, + "RelaunchAnchor@RA@PNS-ExitConstruction": { + "doc": "步骤 18.1:OCR 识别退出 <建造> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["建造"], + "roi": [125, 70, 70, 45], + "next": ["#self", "RelaunchAnchor@RA@PNS-WaitMissionIcon2"] + }, + "RelaunchAnchor@RA@PNS-WaitMissionIcon2": { + "doc": "步骤 20 前等待任务图标出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-MissionIcon2", "#self"] + }, + "RelaunchAnchor@RA@PNS-MissionIcon2": { + "doc": "步骤 20:模板匹配任务图标并点击", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@MissionIcon.png", + "roi": [0, 179, 150, 141], + "next": ["RelaunchAnchor@RA@PNS-CraftOwnCommStation1", "#self"] + }, + "RelaunchAnchor@RA@PNS-CraftOwnCommStation1": { + "doc": "步骤 21:OCR 识别 <制作并拥有1个通讯基站> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["制作并拥有", "通讯基站"], + "roi": [660, 280, 90, 35], + "next": ["RelaunchAnchor@RA@PNS-ConfirmCommMission", "#self"] + }, + "RelaunchAnchor@RA@PNS-ConfirmCommMission": { + "doc": "步骤 22:OCR 识别 <确认> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [1076, 577, 72, 44], + "next": ["RelaunchAnchor@RA@PNS-CraftOwnCommStation", "#self"] + }, + "RelaunchAnchor@RA@PNS-CraftOwnCommStation": { + "doc": "步骤 23:OCR 识别 <制作并拥有通讯基站> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["制作并拥有", "通讯基站"], + "roi": [79, 229, 177, 25], + "next": ["RelaunchAnchor@RA@PNS-WaitFirstCommDialogue"] + }, + "RelaunchAnchor@RA@PNS-WaitFirstCommDialogue": { + "doc": "步骤 24 前等待第一段说话标识出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-FirstCommDialogue", "#self"] + }, + "RelaunchAnchor@RA@PNS-FirstCommDialogue": { + "doc": "步骤 24:模板匹配说话标识,持续点击到没有这个标识,间隔 1 秒", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@DialogueMarker.png", + "roi": [0, 0, 0, 0], + "postDelay": 1000, + "next": ["#self", "RelaunchAnchor@RA@PNS-WaitSecondCommDialogue"] + }, + "RelaunchAnchor@RA@PNS-WaitSecondCommDialogue": { + "doc": "步骤 25:模板匹配等待第二段说话标识出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-SecondCommDialogue", "#self"] + }, + "RelaunchAnchor@RA@PNS-SecondCommDialogue": { + "doc": "步骤 26:模板匹配说话标识,持续点击到没有这个标识,间隔 1 秒", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@DialogueMarker.png", + "roi": [0, 0, 0, 0], + "postDelay": 1000, + "next": ["#self", "RelaunchAnchor@RA@PNS-WaitBeforeSettlement"] + }, + "RelaunchAnchor@RA@PNS-WaitBeforeSettlement": { + "doc": "步骤 27:占位等待 x 秒", + "algorithm": "JustReturn", + "postDelay": 10000, + "next": ["RelaunchAnchor@RA@PNS-WaitMissionIcon3"] + }, + "RelaunchAnchor@RA@PNS-WaitMissionIcon3": { + "doc": "步骤 27 后等待任务图标出现", + "algorithm": "JustReturn", + "postDelay": 1000, + "next": ["RelaunchAnchor@RA@PNS-MissionIcon3", "#self"] + }, + "RelaunchAnchor@RA@PNS-MissionIcon3": { + "doc": "步骤 27:模板匹配任务图标并点击", + "algorithm": "MatchTemplate", + "action": "ClickSelf", + "template": "RelaunchAnchor@RA@MissionIcon.png", + "roi": [0, 179, 150, 141], + "next": ["RelaunchAnchor@RA@PNS-DeliverStone10", "#self"] + }, + "RelaunchAnchor@RA@PNS-DeliverStone10": { + "doc": "步骤 28:OCR 识别 <交付10份石材> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["石材"], + "roi": [444, 281, 135, 34], + "next": ["RelaunchAnchor@RA@PNS-ConfirmSettlement", "#self"] + }, + "RelaunchAnchor@RA@PNS-ConfirmSettlement": { + "doc": "步骤 29:OCR 识别 <确认> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["确认"], + "roi": [1076, 577, 72, 44], + "next": ["RelaunchAnchor@RA@PNS-DeliverStone", "#self"] + }, + "RelaunchAnchor@RA@PNS-DeliverStone": { + "doc": "步骤 29.1:OCR 识别 <交付石材> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["交付石材"], + "roi": [80, 235, 85, 35], + "next": ["RelaunchAnchor@RA@PNS-SettleNow", "#self"] + }, + "RelaunchAnchor@RA@PNS-SettleNow": { + "doc": "步骤 30:OCR 识别 <立即结算> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["立即结算"], + "roi": [918, 459, 137, 50], + "postDelay": 10000, + "next": ["RelaunchAnchor@RA@PNS-ContinueAfterSettlement", "#self"] + }, + "RelaunchAnchor@RA@PNS-ContinueAfterSettlement": { + "doc": "步骤 31:OCR 识别 <点击继续> 并点击", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["点击继续"], + "roi": [605, 664, 113, 44], + "postDelay": 5000, + "next": ["RelaunchAnchor@RA@PNS-FinishConstruction", "#self"] + }, + "RelaunchAnchor@RA@PNS-FinishConstruction": { + "doc": "步骤 32:OCR 识别 <完成建设> 并点击,然后回到步骤 1", + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": ["完成建设"], + "roi": [595, 662, 124, 43], + "postDelay": 5000, + "next": ["RelaunchAnchor@RA@PNS-RA1", "#self"] + } +} diff --git a/resource/template/RA/Reclamation3/RelaunchAnchor@RA@DialogueMarker.png b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@DialogueMarker.png new file mode 100644 index 0000000000..090a3ccc57 Binary files /dev/null and b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@DialogueMarker.png differ diff --git a/resource/template/RA/Reclamation3/RelaunchAnchor@RA@ManufactureIcon.png b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@ManufactureIcon.png new file mode 100644 index 0000000000..9c6243030d Binary files /dev/null and b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@ManufactureIcon.png differ diff --git a/resource/template/RA/Reclamation3/RelaunchAnchor@RA@MissionIcon.png b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@MissionIcon.png new file mode 100644 index 0000000000..172d672625 Binary files /dev/null and b/resource/template/RA/Reclamation3/RelaunchAnchor@RA@MissionIcon.png differ diff --git a/src/MaaCore/Task/Interface/ReclamationTask.cpp b/src/MaaCore/Task/Interface/ReclamationTask.cpp index a036ee8f4d..0e8f512c15 100644 --- a/src/MaaCore/Task/Interface/ReclamationTask.cpp +++ b/src/MaaCore/Task/Interface/ReclamationTask.cpp @@ -1,5 +1,7 @@ #include "ReclamationTask.h" +#include + #include "Task/ProcessTask.h" // 通用配置及插件 @@ -40,16 +42,24 @@ bool asst::ReclamationTask::set_params(const json::value& params) return true; } - switch (mode) { - case ReclamationMode::ProsperityNoSave: + 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" }); - if (!params.get("clear_store", false)) { - m_reclamation_task_ptr->set_times_limit("RA@Store@EnterStore", 0); + m_reclamation_task_ptr->set_times_limit("RA@Store@EnterStore", 0); + } + else { + switch (mode) { + case ReclamationMode::ProsperityNoSave: + m_reclamation_task_ptr->set_tasks({ theme + "@RA@ProsperityNoSave" }); + if (!params.get("clear_store", false)) { + m_reclamation_task_ptr->set_times_limit("RA@Store@EnterStore", 0); + } + break; + case ReclamationMode::ProsperityInSave: + m_reclamation_task_ptr->set_tasks({ theme + "@RA@ProsperityInSave" }); + break; } - break; - case ReclamationMode::ProsperityInSave: - m_reclamation_task_ptr->set_tasks({ theme + "@RA@ProsperityInSave" }); - break; } // 各生息演算插件根据 params 设置插件专用参数, 停用不应被启用的插件 diff --git a/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp b/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp index b0b3074120..32ee91e5f4 100644 --- a/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp +++ b/src/MaaCore/Task/Reclamation/ReclamationConfig.cpp @@ -18,6 +18,11 @@ bool asst::ReclamationConfig::verify_and_load_params(const json::value& params) // Reclamation Algorithm Mode const int modeInt = params.get("mode", static_cast(ReclamationMode::ProsperityInSave)); const auto mode = static_cast(modeInt); + if (theme == ReclamationTheme::RelaunchAnchor) { + m_mode = ReclamationMode::ProsperityNoSave; + return true; + } + if (!is_valid_mode(mode, theme)) { Log.error(__FUNCTION__, "| Reclamation Algorithm mode", modeInt, "is incompatible with theme", theme); return false; diff --git a/src/MaaCore/Task/Reclamation/ReclamationConfig.h b/src/MaaCore/Task/Reclamation/ReclamationConfig.h index 4b31370ef9..a16025ec8c 100644 --- a/src/MaaCore/Task/Reclamation/ReclamationConfig.h +++ b/src/MaaCore/Task/Reclamation/ReclamationConfig.h @@ -8,6 +8,7 @@ class ReclamationTheme public: static constexpr std::string_view Fire = "Fire"; // Fire Within the Sand static constexpr std::string_view Tales = "Tales"; // Tales Within the Sand + static constexpr std::string_view RelaunchAnchor = "RelaunchAnchor"; // 重启锚点(RELAUNCH ANCHOR) }; enum class ReclamationMode // 对应 Roguelike Mode @@ -31,7 +32,10 @@ public: bool verify_and_load_params(const json::value& params); - static constexpr bool is_valid_theme(const std::string_view theme) { return theme == ReclamationTheme::Tales; } + static constexpr bool is_valid_theme(const std::string_view theme) + { + return theme == ReclamationTheme::Tales || theme == ReclamationTheme::RelaunchAnchor; + } static constexpr bool is_valid_mode(const ReclamationMode& mode, [[maybe_unused]] const std::string_view theme) { diff --git a/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs b/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs index 6a658c834e..1f2e0c343e 100644 --- a/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs +++ b/src/MaaWpfGui/Configuration/Single/MaaTask/ReclamationTask.cs @@ -56,6 +56,11 @@ public enum ReclamationTheme /// 沙洲遗闻 /// Tales, + + /// + /// 重启锚点(RELAUNCH ANCHOR) + /// + RelaunchAnchor, } public enum ReclamationMode diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index b693de21d9..8f318d294a 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -726,6 +726,7 @@ If the game is launched in portrait mode and then switched to landscape, it may Reclamation Algorithm Theme Fire Within the Sand Tales Within the Sand + RELAUNCH ANCHOR 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 @@ -1461,6 +1462,18 @@ Cache files (such as maps, operator avatars, etc.) need to be regenerated after Still clicking + +Relaunch Anchor - Assisted Construction Mode: + + Reward estimate: ~159 tokens + coordination points per run, ~3 min per round + + 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 + + Task flow: + Automatically executes farming, construction, resource delivery, and settlement loop + The support for reclamation algorithm is still under development at present. Please mind the following: @@ -1999,3 +2012,4 @@ These locations are too high-level and can lead to file overwrites, config write Emulator selection cancelled + diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index af5950ce75..c718ea7544 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -727,6 +727,7 @@ C:\\leidian\\LDPlayer9 主題 砂中の火 熱砂秘聞 + RELAUNCH ANCHOR セーブせずに、出入りを繰り返して生息ポイントを稼ぐ セーブしながら、支援アイテムを組み立てて生息ポイントを稼ぐ 増加方式 @@ -1462,6 +1463,18 @@ DEBUGディレクトリに保存される画像には数量制限があり、超 まだ押す + +再起の錨 - 支援建設モード: + + 報酬目安:1回あたり約159トークン+統括ポイント、所要時間約3分 + + 事前準備(手動で1回のみ): + 1. 手動でRA-1に入り、チュートリアルを完了してマップに戻る + 2. 以降、RA-1をクリックした後に右下に「建設開始」が表示されたらタスクを開始可能 + + タスクの流れ: + 精耕細作、建設、資源納入、決済を自動実行 + 生息演算のサポートはまだ初期段階にありますので、ご利用の際は以下の点にご注意ください: @@ -2000,3 +2013,4 @@ MAA を複数開くには、新しい MAA を他のフォルダにコピーし エミュレータの選択がキャンセルされました + diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 4d132eb8ac..80789c4831 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -728,6 +728,7 @@ C:\\leidian\\LDPlayer9 생존 연산 테마 모래 속의 불 사막 이야기 + RELAUNCH ANCHOR 세이브 X, 스테이지 반복으로 번영의 선물 획득 세이브 O, 도구 제작으로 번영의 선물 획득 증가 방식 @@ -1463,6 +1464,17 @@ DEBUG 디렉토리에 저장된 이미지는 수량 제한이 있으며 초과 계속 누르네 + +재시작 앵커 - 지원 건설 모드: + + 수익 참고: 회당 약 159토큰 + 통괄 포인트, 소요 시간 약 3분 + + 사전 준비 (수동으로 1회만): + 1. 수동으로 RA-1에 진입하여 튜토리얼을 완료하고 맵으로 돌아옵니다 + 2. 이후 RA-1 클릭 후 오른쪽 아래에 "건설 시작"이 나타나면 작업을 시작할 수 있습니다 + + 작업 흐름: + 정경세작, 건설, 자원 납품, 결제를 자동 실행 현재 생존 연산 기능은 초기 단계이며, 다음 사항에 주의하세요: @@ -2001,3 +2013,4 @@ MAA를 독립된 새 폴더에 압축 해제하거나, MAA에 속하지 않는 D 에뮬레이터 선택이 취소되었습니다 + diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 2973d5c806..2e88b2a0da 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -727,6 +727,7 @@ C:\\leidian\\LDPlayer9。\n 生息演算主题 沙中之火 沙洲遗闻 + 重启锚点 无存档,通过进出关卡刷生息点数 有存档,通过组装支援道具刷生息点数 增加方式 @@ -1462,6 +1463,18 @@ DEBUG 目录下保存的图片有数量限制,超出后会自动清理旧图 还点 + +重启锚点 - 辅助建设模式: + + 收益参考:每把约 159 代币 + 统筹点数,单轮耗时约 3 分钟 + + 前置步骤(手动完成一次): + 1. 手动进入 RA-1,完成新手教程,直到回到大地图 + 2. 之后每次任务均可在 RA-1 右下角出现“开启建设”时启动 + + 任务流程: + 自动执行精耕细作、建设、交付资源、结算循环 + 目前生息演算的支持仍处于中期阶段,使用时请注意以下几点: @@ -2000,3 +2013,4 @@ DEBUG 目录下保存的图片有数量限制,超出后会自动清理旧图 已取消选择模拟器 + diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 321c7de951..e9c28b79d8 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -727,6 +727,7 @@ C:\\leidian\\LDPlayer9\n 生息演算主題 沙中之火 沙洲遺聞 + 重啟錨點 無存檔,透過進出關卡刷生息點數 有存檔,透過組裝支援道具刷生息點數 增加方式 @@ -1462,6 +1463,18 @@ DEBUG 目錄下儲存的圖片有數量限制,超出後會自動清理舊圖 還點 + +重啟錨點 - 輔助建設模式: + + 收益參考:每把約 159 代幣 + 統籌點數,單輪耗時約 3 分 + + 前置步驟(手動完成一次): + 1. 手動進入 RA-1,完成新手教學,直到回到大地圖 + 2. 之後每次任務均可在 RA-1 右下角出現「開啟建設」時啟動 + + 任務流程: + 自動執行精耕細作、建設、交付資源、結算循環 + 目前生息演算的支援仍處於中期階段,使用時請注意以下幾點: @@ -2000,3 +2013,4 @@ DEBUG 目錄下儲存的圖片有數量限制,超出後會自動清理舊圖 已取消選擇模擬器 + diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs index fffed1bc2f..75c69f3232 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/ReclamationSettingsUserControlModel.cs @@ -17,6 +17,7 @@ using System.Linq; using MaaWpfGui.Configuration.Single.MaaTask; using MaaWpfGui.Helper; using MaaWpfGui.Models.AsstTasks; +using MaaWpfGui.Utilities; using MaaWpfGui.Utilities.ValueType; using MaaWpfGui.ViewModels.UI; using static MaaWpfGui.Main.AsstProxy; @@ -41,6 +42,7 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam [ new() { Display = $"{LocalizationHelper.GetString("ReclamationThemeFire")} ({LocalizationHelper.GetString("ClosedStage")})", Value = Theme.Fire }, new() { Display = LocalizationHelper.GetString("ReclamationThemeTales"), Value = Theme.Tales }, + new() { Display = LocalizationHelper.GetString("ReclamationThemeRelaunchAnchor"), Value = Theme.RelaunchAnchor }, ]; /// @@ -49,7 +51,16 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam public Theme ReclamationTheme { get => GetTaskConfig().Theme; - set => SetTaskConfig(t => t.Theme == value, t => t.Theme = value); + set => SetTaskConfig( + t => t.Theme == value, + t => + { + t.Theme = value; + if (value == Theme.RelaunchAnchor) { + t.Mode = Mode.NoArchive; + t.ClearStore = false; + } + }); } /// @@ -129,6 +140,23 @@ public class ReclamationSettingsUserControlModel : TaskSettingsViewModel, Reclam set => SetTaskConfig(t => t.ClearStore == value, t => t.ClearStore = value); } + /// + /// Gets the theme-specific tip text. + /// + [PropertyDependsOn(nameof(ReclamationTheme))] + public string ReclamationTip + { + get + { + var theme = ReclamationTheme; + if (theme == Theme.RelaunchAnchor) + { + return LocalizationHelper.GetString("ReclamationEarlyTipRelaunchAnchor"); + } + return LocalizationHelper.GetString("ReclamationEarlyTip"); + } + } + public override void RefreshUI(BaseTask baseTask) { if (baseTask is ReclamationTask) diff --git a/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml index aef91cd973..de8b8031f7 100644 --- a/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/TaskQueue/ReclamationSettingsUserControl.xaml @@ -35,54 +35,59 @@ IsHitTestVisible="{Binding Idle, Source={x:Static ui_vms:TaskQueueViewModel.TaskSettingDataContext}}" ItemsSource="{Binding ReclamationModeList}" SelectedValue="{Binding ReclamationMode}" + Visibility="{c:Binding 'ReclamationTheme != task:ReclamationTheme.RelaunchAnchor', + Source={x:Static taskQueue_vms:ReclamationSettingsUserControlModel.Instance}}" SelectedValuePath="Value" /> - - - - - - + + + + + + + +