From 023ed5563f1d23099fc8e688c0c55723fc4e60c3 Mon Sep 17 00:00:00 2001 From: DavidWang19 Date: Wed, 22 Jan 2025 04:57:25 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=82=89=E9=B8=BD?= =?UTF-8?q?=E5=88=B7=E5=BC=80=E5=B1=80=E6=A8=A1=E5=BC=8F=E7=9A=84=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=92=8C=E9=80=BB=E8=BE=91=20(#11559)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新增刷开局模式下是否购物的选项 * chore: 修改傀影开局模板图文件名 * chore: 添加注释 * fix: 修复刷开局模式下不能进入商店的问题 * feat: 添加各肉鸽主题可刷开局 通用:热水壶 盾(血) 源石锭 希望 随机;水月:钥匙 骰子;萨卡兹:构想 * refactor: CheckComboBox 改为 key 在前 * feat: 界面添加开局奖励选择 * fix: ubuntu build * feat: proxy 添加对应参数 * rft: 拆分烧水奖励领取 * chore: Auto update by pre-commit hooks [skip changelog] * fix: 刷完后直接退出,精二时继续检查 * chore: Auto update by pre-commit hooks [skip changelog] * perf: 优化肉鸽刷开局模式RoguelikeShoppingTaskPlugin verify * perf: 简化肉鸽烧水期望传参 * chore: Auto update by pre-commit hooks [skip changelog] * fix: Wpf传值错误 * perf: 衔接旧流程 * chore: Auto update by pre-commit hooks [skip changelog] * feat: 支持选择不同的烧水分队和目标分队 * chore: Auto update by pre-commit hooks [skip changelog] * fix: 移除遗漏调用 * fix: 变量名一致化 * chore: 烧水期望奖励翻译预留 * fix: 移除无用的set_task_base * i18n: 添加开局奖励翻译 * i18n: JP translate * i18n: KR translate * i18n: zh-tw translate * i18n: EN tweak * chore: 移除不再使用的task * docs: 加点文档 * docs: 烧水使用分队 * perf: UI * chore: Auto update by pre-commit hooks [skip changelog] --------- Co-authored-by: uye <99072975+ABA2396@users.noreply.github.com> Co-authored-by: status102 <102887808+status102@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: ManicSteiner Co-authored-by: HX3N Co-authored-by: momomochi987 Co-authored-by: Constrat <56174894+Constrat@users.noreply.github.com> --- docs/zh-cn/protocol/integration.md | 12 +- resource/tasks.json | 169 ++++++++++-------- .../Phantom@Roguelike@LastReward2.png | Bin 21582 -> 23616 bytes .../Phantom@Roguelike@LastReward3.png | Bin 23616 -> 21582 bytes src/MaaCore/Config/TaskData.cpp | 2 +- src/MaaCore/MaaCore.vcxproj | 2 + src/MaaCore/MaaCore.vcxproj.filters | 6 + src/MaaCore/Task/Interface/RoguelikeTask.cpp | 2 + .../Task/Roguelike/RoguelikeConfig.cpp | 47 ++--- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 38 ++-- .../RoguelikeCustomStartTaskPlugin.cpp | 15 +- .../RoguelikeCustomStartTaskPlugin.h | 3 + .../RoguelikeLastRewardSelectTaskPlugin.cpp | 93 ++++++++++ .../RoguelikeLastRewardSelectTaskPlugin.h | 20 +++ .../RoguelikeLastRewardTaskPlugin.cpp | 35 +--- .../Roguelike/RoguelikeShoppingTaskPlugin.cpp | 13 +- .../RoguelikeFoldartalStartTaskPlugin.cpp | 2 - src/MaaWpfGui/Constants/ConfigurationKeys.cs | 3 + src/MaaWpfGui/Main/AsstProxy.cs | 54 ++++-- src/MaaWpfGui/Res/Localizations/en-us.xaml | 11 ++ src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 11 ++ src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 11 ++ src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 13 +- src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 19 +- .../ViewModels/UI/SettingsViewModel.cs | 4 +- .../ViewModels/UI/TaskQueueViewModel.cs | 4 +- .../Settings/GuiSettingsUserControlModel.cs | 26 +-- .../RoguelikeSettingsUserControlModel.cs | 65 ++++++- .../Settings/GuiSettingsUserControl.xaml | 5 +- .../RoguelikeSettingsUserControl.xaml | 37 +++- 30 files changed, 521 insertions(+), 201 deletions(-) create mode 100644 src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.cpp create mode 100644 src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h diff --git a/docs/zh-cn/protocol/integration.md b/docs/zh-cn/protocol/integration.md index ff3f8ade89..07c049b985 100644 --- a/docs/zh-cn/protocol/integration.md +++ b/docs/zh-cn/protocol/integration.md @@ -269,9 +269,15 @@ AsstTaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const cha string, // 仅在主题为 Sami 且模式为 5 时有效 ... ], - "monthlySquadAutoIterate": bool, //是否启动月度小队自动切换 - "monthlySquadCheckComms": bool, //是否将月度小队通信也作为切换依据 - "deepExplorationAutoIterate": bool, //是否启动深入调查自动切换 + "monthlySquadAutoIterate": bool, //是否启动月度小队自动切换 + "monthlySquadCheckComms": bool, //是否将月度小队通信也作为切换依据 + "deepExplorationAutoIterate": bool, //是否启动深入调查自动切换 + "collectible_mode_shopping": bool, // 烧水是否启用购物, 默认值false + "collectible_mode_squad": string, // 烧水时使用的分队, 默认为空, 即指挥分队 + "collectible_mode_start_list": { // 烧水期望奖励, 默认全false, 键范围: + "hot_water": bool, // [hot_water: 热水, shield: 盾, ingot: 源石锭, hope: 希望, random: 随机奖励, key: 钥匙, dice: 骰子, ideas: 构想] + ... + }, "start_with_seed": bool, // 使用种子刷钱,true 时有效 // 仅在 Sarkaz 主题,Investment 模式,“点刺成锭分队” or “后勤分队” 时可能为 true // 使用固定种子 diff --git a/resource/tasks.json b/resource/tasks.json index bb3fc21ff4..1f36ca8e69 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -7106,29 +7106,29 @@ "baseTask": "Roguelike@LastReward_default", "template": "empty.png", "roi": [171, 474, 935, 205], - "next": ["Roguelike@RolesDefault", "Roguelike@CloseCollection"] + "next": [] }, "Roguelike@LastRewardRand": { "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 问号", "baseTask": "Roguelike@LastReward_default", "template": "empty.png" }, + "Roguelike@LastReward-EnterPoint": { + "Doc": "插件挂载,选择期望的奖励,template为所有LastReward集合,进入插件后重新匹配,有就Confirm,没有就Abandon", + "template": "empty.png", + "roi": [225, 199, 829, 241], + "next": ["Roguelike@RolesDefault", "Roguelike@CloseCollection", "Roguelike@StartExplore"] + }, + "Roguelike@LastReward-Strategy": { + "Doc": "未指定期望时,默认选择策略", + "algorithm": "JustReturn" + }, "Roguelike@LastReward_default": { "template": "empty.png", "action": "ClickSelf", "roi": [225, 199, 829, 241], "next": ["Roguelike@LastRewardConfirm"] }, - "Roguelike@LastReward_restart": { - "baseTask": "Roguelike@LastReward_default", - "template": "empty.png", - "next": [] - }, - "Roguelike@LastReward_stop": { - "baseTask": "Roguelike@LastReward_default", - "template": "empty.png", - "next": ["RoguelikeControlTaskPlugin-Stop"] - }, "Roguelike@MainThemes": { "next": ["Roguelike", "Roguelike@ChooseDifficulty", "Roguelike@StartExplore", "Roguelike@Abandon"] }, @@ -7982,14 +7982,7 @@ ] }, "Phantom@Roguelike@CloseCollection": { - "next": [ - "Phantom@Roguelike@LastReward", - "Phantom@Roguelike@LastReward4", - "Phantom@Roguelike@LastReward2", - "Phantom@Roguelike@LastReward3", - "Phantom@Roguelike@LastRewardRand", - "Phantom@Roguelike@RolesDefault" - ] + "next": ["Phantom@Roguelike@LastReward-EnterPoint", "Phantom@Roguelike@RolesDefault"] }, "Phantom@Roguelike@CloseEvent": {}, "Phantom@Roguelike@Continue": {}, @@ -8069,6 +8062,24 @@ "Phantom@Roguelike@LastReward4": {}, "Phantom@Roguelike@LastRewardConfirm": {}, "Phantom@Roguelike@LastRewardRand": {}, + "Phantom@Roguelike@LastReward-EnterPoint": { + "template": [ + "Phantom@Roguelike@LastReward.png", + "Phantom@Roguelike@LastReward4.png", + "Phantom@Roguelike@LastReward2.png", + "Phantom@Roguelike@LastReward3.png", + "Phantom@Roguelike@LastRewardRand.png" + ] + }, + "Phantom@Roguelike@LastReward-Strategy": { + "next": [ + "Phantom@Roguelike@LastReward", + "Phantom@Roguelike@LastReward4", + "Phantom@Roguelike@LastReward2", + "Phantom@Roguelike@LastReward3", + "Phantom@Roguelike@LastRewardRand" + ] + }, "Phantom@Roguelike@MissionFailedFlag": { "roi": [450, 163, 540, 267] }, @@ -8118,11 +8129,7 @@ "Phantom@Roguelike@SquadConfirm": { "template": "Phantom@Roguelike@LastRewardConfirm.png", "next": [ - "Phantom@Roguelike@LastReward", - "Phantom@Roguelike@LastReward4", - "Phantom@Roguelike@LastReward2", - "Phantom@Roguelike@LastReward3", - "Phantom@Roguelike@LastRewardRand", + "Phantom@Roguelike@LastReward-EnterPoint", "Phantom@Roguelike@RolesDefault", "Phantom@Roguelike@CloseCollection", "Phantom@Roguelike@Stages#next" @@ -8323,16 +8330,7 @@ ] }, "Mizuki@Roguelike@CloseCollection": { - "next": [ - "Mizuki@Roguelike@LastReward", - "Mizuki@Roguelike@LastReward4", - "Mizuki@Roguelike@LastReward2", - "Mizuki@Roguelike@LastReward3", - "Mizuki@Roguelike@LastReward5", - "Mizuki@Roguelike@LastReward6", - "Mizuki@Roguelike@LastRewardRand", - "Mizuki@Roguelike@RolesDefault" - ] + "next": ["Mizuki@Roguelike@LastReward-EnterPoint", "Mizuki@Roguelike@RolesDefault"] }, "Mizuki@Roguelike@CloseCollectionClose": { "action": "ClickSelf", @@ -8522,6 +8520,28 @@ }, "Mizuki@Roguelike@LastRewardConfirm": {}, "Mizuki@Roguelike@LastRewardRand": {}, + "Mizuki@Roguelike@LastReward-EnterPoint": { + "template": [ + "Mizuki@Roguelike@LastReward.png", + "Mizuki@Roguelike@LastReward4.png", + "Mizuki@Roguelike@LastReward2.png", + "Mizuki@Roguelike@LastReward3.png", + "Mizuki@Roguelike@LastReward5.png", + "Mizuki@Roguelike@LastReward6.png", + "Mizuki@Roguelike@LastRewardRand.png" + ] + }, + "Mizuki@Roguelike@LastReward-Strategy": { + "next": [ + "Mizuki@Roguelike@LastReward", + "Mizuki@Roguelike@LastReward4", + "Mizuki@Roguelike@LastReward2", + "Mizuki@Roguelike@LastReward3", + "Mizuki@Roguelike@LastReward5", + "Mizuki@Roguelike@LastReward6", + "Mizuki@Roguelike@LastRewardRand" + ] + }, "Mizuki@Roguelike@MapObject": { "roi": [257, 488, 189, 123], "next": ["Mizuki@Roguelike@RecruitOther"] @@ -8576,13 +8596,7 @@ "Mizuki@Roguelike@SquadConfirm": { "template": "Mizuki@Roguelike@LastRewardConfirm.png", "next": [ - "Mizuki@Roguelike@LastReward", - "Mizuki@Roguelike@LastReward4", - "Mizuki@Roguelike@LastReward2", - "Mizuki@Roguelike@LastReward3", - "Mizuki@Roguelike@LastReward5", - "Mizuki@Roguelike@LastReward6", - "Mizuki@Roguelike@LastRewardRand", + "Mizuki@Roguelike@LastReward-EnterPoint", "Mizuki@Roguelike@RolesDefault", "Mizuki@Roguelike@CloseCollection", "Mizuki@Roguelike@Stages#next", @@ -8944,15 +8958,7 @@ ] }, "Sami@Roguelike@CloseCollection": { - "next": [ - "Sami@Roguelike@LastReward", - "Sami@Roguelike@LastReward4", - "Sami@Roguelike@LastReward2", - "Sami@Roguelike@LastReward3", - "Sami@Roguelike@LastRewardRand", - "Sami@Roguelike@GetLUD", - "Sami@Roguelike@RolesDefault" - ] + "next": ["Sami@Roguelike@LastReward-EnterPoint", "Sami@Roguelike@GetLUD", "Sami@Roguelike@RolesDefault"] }, "Sami@Roguelike@CloseCollectionClose": { "action": "ClickSelf", @@ -9331,6 +9337,24 @@ }, "Sami@Roguelike@LastRewardConfirm": {}, "Sami@Roguelike@LastRewardRand": {}, + "Sami@Roguelike@LastReward-EnterPoint": { + "template": [ + "Sami@Roguelike@LastReward.png", + "Sami@Roguelike@LastReward4.png", + "Sami@Roguelike@LastReward2.png", + "Sami@Roguelike@LastReward3.png", + "Sami@Roguelike@LastRewardRand.png" + ] + }, + "Sami@Roguelike@LastReward-Strategy": { + "next": [ + "Sami@Roguelike@LastReward", + "Sami@Roguelike@LastReward4", + "Sami@Roguelike@LastReward2", + "Sami@Roguelike@LastReward3", + "Sami@Roguelike@LastRewardRand" + ] + }, "Sami@Roguelike@MapObject": { "roi": [257, 488, 189, 123], "next": ["Sami@Roguelike@RecruitOther"] @@ -9394,11 +9418,7 @@ "Sami@Roguelike@SquadConfirm": { "template": "Sami@Roguelike@LastRewardConfirm.png", "next": [ - "Sami@Roguelike@LastReward", - "Sami@Roguelike@LastReward4", - "Sami@Roguelike@LastReward2", - "Sami@Roguelike@LastReward3", - "Sami@Roguelike@LastRewardRand", + "Sami@Roguelike@LastReward-EnterPoint", "Sami@Roguelike@GetLUD", "Sami@Roguelike@RolesDefault", "Sami@Roguelike@CloseCollection", @@ -10247,6 +10267,7 @@ "specificRect": [600, 600, 25, 25] }, "Sarkaz@Roguelike@CloseCollection": { + "Doc": "深入调查/月度小队会给个藏品,要先关掉", "method": "RGBCount", "colorScales": [ [ @@ -10254,15 +10275,7 @@ [170, 170, 170] ] ], - "next": [ - "Sarkaz@Roguelike@LastReward5", - "Sarkaz@Roguelike@LastReward", - "Sarkaz@Roguelike@LastReward4", - "Sarkaz@Roguelike@LastReward2", - "Sarkaz@Roguelike@LastReward3", - "Sarkaz@Roguelike@LastRewardRand", - "Sarkaz@Roguelike@RolesDefault" - ] + "next": ["Sarkaz@Roguelike@LastReward-EnterPoint", "Sarkaz@Roguelike@RolesDefault"] }, "Sarkaz@Roguelike@CloseCollectionClose": { "action": "ClickSelf", @@ -10542,10 +10555,31 @@ "Sarkaz@Roguelike@LastReward3": {}, "Sarkaz@Roguelike@LastReward4": {}, "Sarkaz@Roguelike@LastReward5": { + "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 2 构想", "baseTask": "Sarkaz@Roguelike@LastReward_default" }, "Sarkaz@Roguelike@LastRewardConfirm": {}, "Sarkaz@Roguelike@LastRewardRand": {}, + "Sarkaz@Roguelike@LastReward-EnterPoint": { + "template": [ + "Sarkaz@Roguelike@LastReward5.png", + "Sarkaz@Roguelike@LastReward.png", + "Sarkaz@Roguelike@LastReward4.png", + "Sarkaz@Roguelike@LastReward2.png", + "Sarkaz@Roguelike@LastReward3.png", + "Sarkaz@Roguelike@LastRewardRand.png" + ] + }, + "Sarkaz@Roguelike@LastReward-Strategy": { + "next": [ + "Sarkaz@Roguelike@LastReward5", + "Sarkaz@Roguelike@LastReward", + "Sarkaz@Roguelike@LastReward4", + "Sarkaz@Roguelike@LastReward2", + "Sarkaz@Roguelike@LastReward3", + "Sarkaz@Roguelike@LastRewardRand" + ] + }, "Sarkaz@Roguelike@MapObject": { "roi": [257, 488, 189, 123], "next": ["Sarkaz@Roguelike@RecruitOther"] @@ -10736,12 +10770,7 @@ "Sarkaz@Roguelike@SquadConfirm": { "template": "Sarkaz@Roguelike@LastRewardConfirm.png", "next": [ - "Sarkaz@Roguelike@LastReward4", - "Sarkaz@Roguelike@LastReward", - "Sarkaz@Roguelike@LastReward2", - "Sarkaz@Roguelike@LastReward5", - "Sarkaz@Roguelike@LastReward3", - "Sarkaz@Roguelike@LastRewardRand", + "Sarkaz@Roguelike@LastReward-EnterPoint", "Sarkaz@Roguelike@RolesDefault", "Sarkaz@Roguelike@CloseCollection", "Sarkaz@Roguelike@Stages#next", diff --git a/resource/template/Phantom@Roguelike@LastReward2.png b/resource/template/Phantom@Roguelike@LastReward2.png index c244643183153ae3dad2447818d2413b65e9c99d..c4ef20382f37a3fd1951c49ad404364091a4e46a 100644 GIT binary patch literal 23616 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 + @@ -295,6 +296,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index ced85f9782..07b4479d97 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -749,6 +749,9 @@ Source\Task\Roguelike + + Source\Task\Roguelike + @@ -1263,5 +1266,8 @@ Source\Task\Roguelike + + Source\Task\Roguelike + \ No newline at end of file diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 159eb37d97..c63173d9a8 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -17,6 +17,7 @@ #include "Task/Roguelike/RoguelikeInvestTaskPlugin.h" #include "Task/Roguelike/RoguelikeIterateDeepExplorationPlugin.h" #include "Task/Roguelike/RoguelikeIterateMonthlySquadPlugin.h" +#include "Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h" #include "Task/Roguelike/RoguelikeLastRewardTaskPlugin.h" #include "Task/Roguelike/RoguelikeLevelTaskPlugin.h" #include "Task/Roguelike/RoguelikeRecruitTaskPlugin.h" @@ -76,6 +77,7 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst ->set_retry_times(0); m_roguelike_task_ptr->register_plugin(m_config_ptr, m_control_ptr); + m_roguelike_task_ptr->register_plugin(m_config_ptr, m_control_ptr); m_roguelike_task_ptr->register_plugin(m_config_ptr, m_control_ptr); m_roguelike_task_ptr->register_plugin(m_config_ptr, m_control_ptr); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index bfe539172f..3922706b96 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -28,6 +28,31 @@ bool asst::RoguelikeConfig::verify_and_load_params(const json::value& params) return false; } + if (mode == RoguelikeMode::Collectible) { + m_collectible_mode_shopping = params.get("collectible_mode_shopping", false); + + if (auto select_list = params.find("collectible_mode_start_list"); select_list) { + RoguelikeStartSelect list; + list.hot_water = select_list->get("hot_water", false); + list.shield = select_list->get("shield", false); + list.ingot = select_list->get("ingot", false); + list.hope = select_list->get("hope", false); + list.random = select_list->get("random", false); + if (m_theme == RoguelikeTheme::Mizuki) { + list.key = select_list->get("key", false); + list.dice = select_list->get("dice", false); + } + else if (m_theme == RoguelikeTheme::Sarkaz) { + list.ideas = select_list->get("ideas", false); + } + m_start_select = list; + } + + if (m_theme == RoguelikeTheme::Sami) { + m_first_floor_foldartal = !params.get("first_floor_foldartal", "").empty(); + } + } + m_start_with_seed = params.get("start_with_seed", false); m_start_with_elite_two = params.get("start_with_elite_two", false); m_only_start_with_elite_two = params.get("only_start_with_elite_two", false); @@ -74,13 +99,6 @@ bool asst::RoguelikeConfig::verify_and_load_params(const json::value& params) } } - // 重置开局奖励 next,获得任意奖励均继续;烧水相关逻辑在 RoguelikeLastRewardTaskPlugin - Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_default"); - if (m_mode == RoguelikeMode::Investment) { bool investment_with_more_score = params.get("investment_with_more_score", false); if (!params.contains("investment_with_more_score") && params.contains("investment_enter_second_floor")) { @@ -98,21 +116,6 @@ bool asst::RoguelikeConfig::verify_and_load_params(const json::value& params) m_run_for_collectible = true; // 烧开水模式下,如果不是只凹直升,第一轮游戏先烧水 } - // ------------------ 萨米主题专用参数 ------------------ - if (m_theme == RoguelikeTheme::Sami) { - // 是否凹开局远见密文板 - m_first_floor_foldartal = params.contains("first_floor_foldartal"); - } - - // ------------------ 萨卡兹主题专用参数 ------------------ - if (m_theme == RoguelikeTheme::Sarkaz) { - m_start_with_two_ideas = params.get("start_with_two_ideas", false); - if (m_mode != RoguelikeMode::Collectible && m_start_with_two_ideas) { - Log.error(__FUNCTION__, "| Invalid mode for start_with_two_ideas", static_cast(mode)); - return false; - } - } - return true; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index b7451bfc70..1d65781355 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -42,6 +42,18 @@ struct RoguelikeOper int level = 0; // 干员等级 }; +struct RoguelikeStartSelect // 刷开局模式下凹开局奖励选择 +{ + bool hot_water = false; // 热水壶 + bool shield = false; // 盾;傀影没盾,是生命 + bool ingot = false; // 源石锭 + bool hope = false; // 希望 + bool random = false; // 随机奖励 + bool key = false; // 钥匙 + bool dice = false; // 骰子 + bool ideas = false; // 构想 +}; + class RoguelikeConfig { public: @@ -63,7 +75,6 @@ public: void clear(); // 重置肉鸽局内数据 // ================================= 通用参数 ================================= - public: const std::string& get_theme() const { return m_theme; } @@ -90,11 +101,19 @@ public: bool get_run_for_collectible() const { return m_run_for_collectible; } + void set_start_select(const RoguelikeStartSelect& start_select) { m_start_select = start_select; } + + const auto& get_start_select() const { return m_start_select; } + // ------------------ 投资模式 ------------------ void set_invest_with_more_score(bool value) { m_invest_with_more_score = value; } bool get_invest_with_more_score() const { return m_invest_with_more_score; } + void set_collectible_mode_shopping(bool value) { m_collectible_mode_shopping = value; } + + bool get_collectible_mode_shopping() const { return m_collectible_mode_shopping; } + private: std::string m_theme; // 主题 RoguelikeMode m_mode = RoguelikeMode::Exp; // 模式 @@ -106,14 +125,19 @@ private: bool m_only_start_with_elite_two = false; // 只凹开局干员精二直升且不进行作战 bool m_run_for_collectible = false; // 用于 RoguelikeMode::Collectible,判断是否正在烧水 + RoguelikeStartSelect m_start_select; // 开局选择 + // ------------------ 投资模式 ------------------ bool m_invest_with_more_score = false; // 投资时招募、购物刷分 - // =========================== 萨米主题专用参数 =========================== + // ------------------ 刷开局模式 ------------------ + bool m_collectible_mode_shopping = false; // 刷开局模式下进入商店时购物 +private: + // =========================== 萨米主题专用参数 =========================== public: // ------------------ 密文板 ------------------ - void set_first_floor_foldartal(bool value) { m_first_floor_foldartal = value; } + void set_first_floor_foldartal(const bool value) { m_first_floor_foldartal = value; } bool get_first_floor_foldartal() const { return m_first_floor_foldartal; } @@ -122,17 +146,11 @@ private: bool m_first_floor_foldartal = false; // 凹远见密文板 // =========================== 萨卡兹主题专用参数 =========================== - public: - void set_start_with_two_ideas(bool value) { m_start_with_two_ideas = value; } - - bool get_start_with_two_ideas() const { return m_start_with_two_ideas; } - bool get_start_with_seed() const { return m_start_with_seed; } private: - bool m_start_with_two_ideas = false; // 在刷开局模式下凹开局 2 构想 - bool m_start_with_seed = false; // 种子刷钱 + bool m_start_with_seed = false; // 种子刷钱 // ================================================================================ // 以下为局内数据,每次重置 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index 8a1a026345..73f85f116d 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -49,8 +49,12 @@ bool asst::RoguelikeCustomStartTaskPlugin::load_params(const json::value& params { LogTraceFunction; - set_custom(RoguelikeCustomType::Squad, params.get("squad", "")); // 开局分队 - if (params.get("start_with_seed", false)) { // 种子刷钱,强制随心所欲 + m_squad = params.get("squad", ""); + m_collectible_mode_squad = params.get("collectible_mode_squad", ""); + + set_custom(RoguelikeCustomType::Squad, m_squad); + + if (params.get("start_with_seed", false)) { // 种子刷钱,强制随心所欲 set_custom(RoguelikeCustomType::Roles, "随心所欲"); } else { @@ -73,6 +77,13 @@ void asst::RoguelikeCustomStartTaskPlugin::set_custom(RoguelikeCustomType type, bool asst::RoguelikeCustomStartTaskPlugin::_run() { + if (m_config->get_run_for_collectible()) { + set_custom(RoguelikeCustomType::Squad, m_collectible_mode_squad); // 烧水分队 + } + else { + set_custom(RoguelikeCustomType::Squad, m_squad); // 开局分队 + } + const std::unordered_map> TypeActuator = { { RoguelikeCustomType::Squad, std::bind(&RoguelikeCustomStartTaskPlugin::hijack_squad, this) }, { RoguelikeCustomType::Roles, std::bind(&RoguelikeCustomStartTaskPlugin::hijack_roles, this) }, diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h index 1ff1c98b84..fb736857bf 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h @@ -36,5 +36,8 @@ private: private: std::unordered_map m_customs; mutable RoguelikeCustomType m_waiting_to_run = RoguelikeCustomType::None; + + std::string m_squad; + std::string m_collectible_mode_squad; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.cpp new file mode 100644 index 0000000000..5201225548 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.cpp @@ -0,0 +1,93 @@ +#include "RoguelikeLastRewardSelectTaskPlugin.h" + +#include "Config/GeneralConfig.h" +#include "Config/TaskData.h" +#include "Controller/Controller.h" +#include "Task/ProcessTask.h" +#include "Utils/Logger.hpp" +#include "Vision/Miscellaneous/PipelineAnalyzer.h" + +bool asst::RoguelikeLastRewardSelectTaskPlugin::verify(AsstMsg msg, const json::value& details) const +{ + if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") { + return false; + } + const std::string& task = details.get("details", "task", ""); + if (task.ends_with("Roguelike@LastReward-EnterPoint")) { + return true; + } + + return false; +} + +bool asst::RoguelikeLastRewardSelectTaskPlugin::_run() +{ + LogTraceFunction; + + const auto& list = get_select_list(); + if (list.empty()) { + // 执行默认选择顺序 + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@LastReward-Strategy" }).run(); + return true; + } + + // 处理选择顺序 + PipelineAnalyzer analyzer(ctrler()->get_image()); + analyzer.set_tasks(list); + if (auto ret = analyzer.analyze(); !ret) { + // 未获取到期望物品,结束重开 + m_control_ptr->exit_then_stop(true); + } + else if (m_config->get_start_with_elite_two()) { + ctrler()->click(ret->rect); + sleep(Config.get_options().task_delay); + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@LastRewardConfirm" }).run(); + } + else { + m_control_ptr->exit_then_stop(false); + m_task_ptr->set_enable(false); + } + + return true; +} + +std::vector asst::RoguelikeLastRewardSelectTaskPlugin::get_select_list() const +{ + if (m_config->get_mode() != RoguelikeMode::Collectible || + m_config->get_run_for_collectible() /* 正在烧水,使用默认策略 */ || + m_config->get_only_start_with_elite_two() /* 只凹精二没有奖励,但第一次开时可能有之前的奖励 */) { + return {}; + } + + std::vector list; + const auto& select = m_config->get_start_select(); + if (select.hot_water) { + list.emplace_back(m_config->get_theme() + "@Roguelike@LastReward"); // 热水壶 + } + if (select.shield) { + list.emplace_back(m_config->get_theme() + "@Roguelike@LastReward2"); // 盾;傀影没盾,是生命 + } + if (select.ingot) { + list.emplace_back(m_config->get_theme() + "@Roguelike@LastReward3"); // 源石锭 + } + if (select.hope) { + list.emplace_back(m_config->get_theme() + "@Roguelike@LastReward4"); // 希望 + } + + if (select.random) { + list.emplace_back(m_config->get_theme() + "@Roguelike@LastRewardRand"); // 随机奖励 + } + if (m_config->get_theme() == RoguelikeTheme::Mizuki) { + if (select.key) { + list.emplace_back("Mizuki@Roguelike@LastReward5"); // 钥匙 + } + if (select.dice) { + list.emplace_back("Mizuki@Roguelike@LastReward6"); // 骰子 + } + } + else if (m_config->get_theme() == RoguelikeTheme::Sarkaz && select.ideas) { + list.emplace_back("Sarkaz@Roguelike@LastReward5"); // 构想 + } + + return list; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h new file mode 100644 index 0000000000..f30f9ff7b8 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h @@ -0,0 +1,20 @@ +#pragma once +#include "AbstractRoguelikeTaskPlugin.h" + +namespace asst +{ +class RoguelikeLastRewardSelectTaskPlugin : public AbstractRoguelikeTaskPlugin +{ +public: + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; + virtual ~RoguelikeLastRewardSelectTaskPlugin() = default; + + virtual bool verify(AsstMsg msg, const json::value& details) const override; + +protected: + virtual bool _run() override; + +private: + std::vector get_select_list() const; +}; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index 038682feba..bb5c11ef2b 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -3,6 +3,7 @@ #include "Config/TaskData.h" #include "Status.h" #include "Task/ProcessTask.h" +#include "Task/Roguelike/RoguelikeLastRewardSelectTaskPlugin.h" #include "Utils/Logger.hpp" bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value& details) const @@ -56,38 +57,14 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() Task.set_task_base(stages_task_name, strategy_task_name); } - // 需要开局凹直升 - bool start_with_elite_two = m_config->get_start_with_elite_two(); if (m_config->get_theme() != RoguelikeTheme::Phantom && mode == RoguelikeMode::Collectible) { - if (m_is_next_hardest) { - // 关闭烧开水 Flag,将难度调整回用户设置的数值 - m_config->set_run_for_collectible(false); - // 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开 - std::string last_reward_stop_or_continue = - start_with_elite_two ? "Roguelike@LastReward_default" : "Roguelike@LastReward_stop"; - Task.set_task_base("Roguelike@LastReward", last_reward_stop_or_continue); - Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_restart"); - Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_restart"); - Task.set_task_base("Roguelike@LastReward4", last_reward_stop_or_continue); - Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_restart"); - if (m_config->get_theme() == RoguelikeTheme::Sarkaz && m_config->get_start_with_two_ideas()) { - Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_restart"); - Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_restart"); - Task.set_task_base("Sarkaz@Roguelike@LastReward5", last_reward_stop_or_continue); - } - } - else if (!m_config->get_only_start_with_elite_two()) { + if (!m_is_next_hardest) { // 开启烧开水 Flag,将难度设置为 0 m_config->set_run_for_collectible(true); - // 重置开局奖励 next,获得任意奖励均继续 - Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_default"); - Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_default"); - if (m_config->get_theme() == RoguelikeTheme::Sarkaz) { - Task.set_task_base("Sarkaz@Roguelike@LastReward5", "Sarkaz@Roguelike@LastReward_default"); - } + } + else { + // 关闭烧开水 Flag,将难度调整回用户设置的数值 + m_config->set_run_for_collectible(false); } } return true; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index a2d626235f..ca5b0ee27f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -16,17 +16,16 @@ bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& d return false; } - if (!RoguelikeConfig::is_valid_theme(m_config->get_theme())) { - Log.error("Roguelike name doesn't exist!"); + if (!details.get("details", "task", "").ends_with("Roguelike@TraderRandomShopping")) { return false; } - - if (details.get("details", "task", "").ends_with("Roguelike@TraderRandomShopping")) { - return m_config->get_mode() != RoguelikeMode::Investment || m_config->get_invest_with_more_score(); + else if (m_config->get_mode() == RoguelikeMode::Investment) { + return m_config->get_invest_with_more_score(); } - else { - return false; + else if (m_config->get_mode() == RoguelikeMode::Collectible) { + return m_config->get_collectible_mode_shopping(); } + return true; } bool asst::RoguelikeShoppingTaskPlugin::_run() diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp index b3c39b1734..0e7a67c6d4 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp @@ -69,8 +69,6 @@ bool asst::RoguelikeFoldartalStartTaskPlugin::_run() // 没有刷到需要的板子,退出重开 if (mode == RoguelikeMode::Collectible && !start_foldartal_checked) { m_config->set_run_for_collectible(true); // 重新烧水 - Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_restart"); - Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_restart"); } return true; } diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index 41914bd53c..aa29cf5122 100644 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -121,10 +121,12 @@ namespace MaaWpfGui.Constants public const string RoguelikeDifficulty = "Roguelike.Difficulty"; public const string RoguelikeMode = "Roguelike.Mode"; public const string RoguelikeSquad = "Roguelike.Squad"; + public const string RoguelikeCollectibleModeSquad = "Roguelike.CollectibleModeSquad"; public const string RoguelikeRoles = "Roguelike.Roles"; public const string RoguelikeCoreChar = "Roguelike.CoreChar"; public const string RoguelikeStartWithEliteTwo = "Roguelike.RoguelikeStartWithEliteTwo"; public const string RoguelikeOnlyStartWithEliteTwo = "Roguelike.RoguelikeOnlyStartWithEliteTwo"; + public const string RoguelikeStartWithSelectList = "Roguelike.RoguelikeStartWithSelectList"; public const string RoguelikeStartWithTwoIdeas = "Roguelike.RoguelikeStartWithTwoIdeas"; public const string Roguelike3FirstFloorFoldartal = "Roguelike.Roguelike3FirstFloorFoldartal"; public const string Roguelike3StartFloorFoldartal = "Roguelike.Roguelike3StartFloorFoldartal"; @@ -137,6 +139,7 @@ namespace MaaWpfGui.Constants public const string RoguelikeStartsCount = "Roguelike.StartsCount"; public const string RoguelikeInvestmentEnabled = "Roguelike.InvestmentEnabled"; public const string RoguelikeInvestmentEnterSecondFloor = "Roguelike.InvestmentEnterSecondFloor"; + public const string RoguelikeCollectibleModeShopping = "Roguelike.CollectibleModeShopping"; public const string RoguelikeRefreshTraderWithDice = "Roguelike.RefreshTraderWithDice"; public const string RoguelikeInvestsCount = "Roguelike.InvestsCount"; public const string RoguelikeStopWhenInvestmentFull = "Roguelike.StopWhenInvestmentFull"; diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index e686a81755..46892dcca2 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -2443,14 +2443,16 @@ namespace MaaWpfGui.Main /// 开始探索次数。 /// 是否投资源石锭 /// 投资时候刷更多分 + /// 刷开局模式是否购物 /// 投资源石锭次数。 /// 投资满了自动停止任务。 + /// 烧水时使用的分队 /// 开局分队 /// 开局职业组 /// 开局干员名 /// 是否凹开局直升 /// 是否只凹开局直升,不进行作战 - /// 是否凹 2 构想 + /// 需要刷的开局 /// 凹第一层远见板子 /// 需要凹的板子 /// 是否在萨米肉鸽生活队凹开局板子 @@ -2473,14 +2475,16 @@ namespace MaaWpfGui.Main int starts, bool investmentEnabled, bool investmentWithMoreScore, + bool collectibleModeShopping, int invests, bool stopWhenFull, + string collectibleModeSquad, string squad, string roles, string coreChar, bool startWithEliteTwo, bool onlyStartWithEliteTwo, - bool startWithTwoIdeas, + List startWithSelectList, bool roguelike3FirstFloorFoldartal, string roguelike3StartFloorFoldartal, bool roguelike3NewSquad2StartingFoldartal, @@ -2533,9 +2537,45 @@ namespace MaaWpfGui.Main taskParams["core_char"] = coreChar; } - taskParams["start_with_elite_two"] = startWithEliteTwo; - taskParams["only_start_with_elite_two"] = onlyStartWithEliteTwo; + if (mode == 0) + { + taskParams["stop_at_final_boss"] = stopAtFinalBoss; + taskParams["stop_at_max_level"] = stopAtMaxLevel; + } + else if (mode == 1) + { + taskParams["start_with_seed"] = startWithSeed; + } + else if (mode == 4) + { + // 刷开局模式 + taskParams["collectible_mode_shopping"] = collectibleModeShopping; + taskParams["collectible_mode_squad"] = collectibleModeSquad; + taskParams["start_with_elite_two"] = startWithEliteTwo; + taskParams["only_start_with_elite_two"] = onlyStartWithEliteTwo; + var rewardKeys = new Dictionary + { + { "Roguelike@LastReward", "hot_water" }, + { "Roguelike@LastReward2", "shield" }, + { "Roguelike@LastReward3", "ingot" }, + { "Roguelike@LastReward4", "hope" }, + { "Roguelike@LastRewardRand", "random" }, + { "Mizuki@Roguelike@LastReward5", "key" }, + { "Mizuki@Roguelike@LastReward6", "dice" }, + { "Sarkaz@Roguelike@LastReward5", "ideas" }, + }; + var startWithSelect = new JObject(); + foreach (var select in startWithSelectList) + { + if (rewardKeys.TryGetValue(select, out var paramKey)) + { + startWithSelect[paramKey] = true; + } + } + + taskParams["collectible_mode_start_list"] = startWithSelect; + } if (mode == 6) { taskParams["monthly_squad_auto_iterate"] = monthlySquadAutoIterate; @@ -2547,7 +2587,6 @@ namespace MaaWpfGui.Main taskParams["deep_exploration_auto_iterate"] = deepExplorationAutoIterate; } - taskParams["start_with_two_ideas"] = startWithTwoIdeas; if (roguelike3FirstFloorFoldartal && roguelike3StartFloorFoldartal.Length > 0) { taskParams["first_floor_foldartal"] = roguelike3StartFloorFoldartal; @@ -2567,11 +2606,6 @@ namespace MaaWpfGui.Main taskParams["use_nonfriend_support"] = enableNonFriendSupport; taskParams["refresh_trader_with_dice"] = theme == "Mizuki" && refreshTraderWithDice; - taskParams["stop_at_final_boss"] = mode == 0 && stopAtFinalBoss; - taskParams["stop_at_max_level"] = mode == 0 && stopAtMaxLevel; - - taskParams["start_with_seed"] = startWithSeed; - AsstTaskId id = AsstAppendTaskWithEncoding("Roguelike", taskParams); _latestTaskId[TaskType.Roguelike] = id; return id != 0; diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index ac6556d887..c5ed0523da 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -126,6 +126,7 @@ Invests coins, exits after arriving at the second level Grind to obtain Hot Water Kettle or Elite II operators Farm collapse paradigms, restart immediately after encountering a non-rare collapse paradigm + Squad to get collectibles Grind Monthly Squad,exits after arriving at the fifth level Grind Deep Exploration,clear as far as possible Starting Squad @@ -316,6 +317,16 @@ You can cancel this popup by clicking the Settings - About Us - Issue Reporting Stops when invested coins reach limit Invest coins Investment mode enables shopping, recruitment, and entering the second floor + Enable shopping in the grinding mode + Grinding mode expected rewards + Hot Water Kettle + Shield + Ingot + Hope + Random Reward + Key + Dice + Idea[TODO] Refresh Rogue Trader with Dice Penguin Report ID (Number part) Report Penguin diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 1968ee84cc..ea55d83b2a 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -126,6 +126,7 @@ 源石錐の収集、2層到着後終了 支援選択を得るため3層到着後に終了 パラダイムロストをファーミングして、非レアパラダイムロストに遭遇したらすぐに再起動します + 支援選択を得るモードの分隊 月間小隊をグラインドし、第五層に到達したら即座に退出 深層探索をグラインドし、できるだけ多くの層をクリア 最初の分隊 @@ -316,6 +317,16 @@ 源石錐が上限に達した後に停止する 源石錐を投資する 投資モードでは買い物、採用、2階への入場が可能 + 支援選択を得るモードで、ショッピング有効化 + 支援選択の期待される報酬 + 電気ケトル + シールド値 + 源石錐 + 希望 + ランダム報酬 + + ダイスロール回数 + 構想(占位) ダイスで品揃えを更新する(ミチビキリンジュウ) Penguin-StatsのレポートのID(デジタル部分のみ) Penguin-Statsへ報告 diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index a922595aea..e1f0d2d497 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -126,6 +126,7 @@ 오리지늄 각뿔 우선, 2번째 구역 도달 시 탐험 중도 포기 전기주전자 획득까지 반복, 3번째 구역 도달 시 탐험 중도 포기 희귀 붕괴 패러다임 파밍, 일반 붕괴 패러다임이 나올 시 재시작 + 작전 지원 선택 분대 월간 소대를 그라인드하고, 5층에 도달하면 바로 종료 심층 탐사를 그라인드하고 가능한 한 많은 층을 클리어 시작 분대 @@ -316,6 +317,16 @@ 오리지늄 각뿔이 한계 도달 시 중지 오리지늄 각뿔 투자 투자 시 쇼핑, 모집, 2스테이지 진입 + 작전 지원 선택 모드 쇼핑 활성화 + 작전 지원 보상 선택 + 전기주전자 + 실드 + 각뿔 + 희망 + 랜덤 보상 + 열쇠 + 주사위 + 구상 상점 새로고침 Penguin-Stats 보고 ID (숫자만) Penguin-Stats 보고 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 3b9da299bc..5ad0ceccf9 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -126,6 +126,7 @@ 刷源石锭,到达第二层后直接退出 刷开局,刷取热水壶或精二干员开局 刷坍缩范式,遇到非稀有坍缩范式后直接重开 + 烧水使用分队 刷月度小队,到达第五层后直接退出 刷深入调查,尽可能稳定地打更多层数 开局分队 @@ -319,6 +320,16 @@ 储备源石锭达到上限时停止 投资源石锭 投资模式启用购物、招募、进2层 + 刷开局模式启用购物 + 刷开局期望奖励 + 热水壶 + + + 希望 + 随机奖励 + 钥匙 + 骰子 + 构想 刷新商店(指路鳞) 企鹅物流汇报ID(仅数字部分) 上报企鹅物流 @@ -328,7 +339,7 @@ 信用交易所自动购物 一日只执行一次 借助战打 OF-1 赚信用 - 访问好友后借助战打一把OF-1赚30信用。 + 访问好友后借助战打一把 OF-1 赚 30 信用。 一日只执行一次。 关卡选择为「当前/上次」时此功能无效。 别传「火蓝之心」关卡OF-1未解锁时请勿勾选。 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 29b2a84761..5c2f3b8d90 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -126,6 +126,7 @@ 刷源石錠,到達第二層後直接退出 刷開局,刷取熱水壺或精二幹員開局 刷坍縮範式,遇到非稀有坍縮範式後直接重開 + 燒水分隊 刷月度小隊,到達第五層後直接退出 刷深入調查,盡可能穩定地打更多層數 開局分隊 @@ -139,8 +140,8 @@ 凹第一層遠見密文板,不進行作戰 生活隊凹開局密文板 最多寫三個,並用英文分號;隔開 - 坍缩范式列表 - 用英文分号「;」隔开,留空将使用默认列表。 + 坍縮範式列表 + 用英文分號「;」隔開,留白將使用默認列表。 「開局幹員」使用助戰 可以使用非好友助戰 肉鴿在戰鬥結束前延遲「停止」動作 @@ -250,7 +251,7 @@ 文件名: 已將其刪除! 已是最新版本 ~ - 當前爲調試版本,無需更新 + 當前爲測試版本,無需更新 檢查更新失敗 請檢查網絡連接或代理。 獲取更新資訊失敗。 @@ -287,7 +288,7 @@ 等待模擬器啟動時間(秒) 等待結束 模擬器路徑 - 你也想在酒吧里點酒吧? + 你也想在酒吧裡點酒吧? 我確定沒選錯 好的,我會重新選擇 選擇 @@ -316,6 +317,16 @@ 儲備源石錠達到上限時停止 投資源石錠 投資模式啟用購物、招募、進2層 + 刷開局模式啟用購物 + 刷開局期望獎勵 + 熱水壺 + + 源石錠 + 希望 + 隨機獎勵 + 鑰匙 + 骰子 + 構想 刷新商店(指路鱗) 企鵝物流匯報 ID(僅數字部分) 上報企鵝物流 diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index 9ed203ac0d..5f8266f858 100644 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -685,8 +685,8 @@ namespace MaaWpfGui.ViewModels.UI } List windowTitleSelectShowList = GuiSettings.WindowTitleSelectShowList - .Where(x => GuiSettingsUserControlModel.WindowTitleAllShowDict.ContainsKey(x?.ToString() ?? string.Empty)) - .Select(x => GuiSettingsUserControlModel.WindowTitleAllShowDict[x?.ToString() ?? string.Empty]).ToList(); + .Cast>().Select(pair => pair.Key) + .ToList(); string currentConfiguration = string.Empty; string connectConfigName = string.Empty; diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 28f9530512..aac353ae58 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1825,14 +1825,16 @@ namespace MaaWpfGui.ViewModels.UI RoguelikeTask.RoguelikeStartsCount, RoguelikeTask.RoguelikeInvestmentEnabled, RoguelikeTask.RoguelikeInvestmentWithMoreScore, + RoguelikeTask.RoguelikeCollectibleModeShopping, RoguelikeTask.RoguelikeInvestsCount, RoguelikeTask.RoguelikeStopWhenInvestmentFull, + RoguelikeTask.RoguelikeCollectibleModeSquad, RoguelikeTask.RoguelikeSquad, RoguelikeTask.RoguelikeRoles, DataHelper.GetCharacterByNameOrAlias(RoguelikeTask.RoguelikeCoreChar)?.Name ?? RoguelikeTask.RoguelikeCoreChar, RoguelikeTask.RoguelikeStartWithEliteTwo, RoguelikeTask.RoguelikeOnlyStartWithEliteTwo, - RoguelikeTask.RoguelikeStartWithTwoIdeas, + RoguelikeTask.RoguelikeStartWithSelectList, RoguelikeTask.Roguelike3FirstFloorFoldartal, RoguelikeTask.Roguelike3StartFloorFoldartal, RoguelikeTask.Roguelike3NewSquad2StartingFoldartal, diff --git a/src/MaaWpfGui/ViewModels/UserControl/Settings/GuiSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/Settings/GuiSettingsUserControlModel.cs index 6621d1c4d6..76e332ed4c 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/Settings/GuiSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/Settings/GuiSettingsUserControlModel.cs @@ -282,27 +282,19 @@ public class GuiSettingsUserControlModel : PropertyChangedBase } private static readonly Dictionary _windowTitleAllShowDict = new() - { - { LocalizationHelper.GetString("ConfigurationName"), "1" }, - { LocalizationHelper.GetString("ConnectionPreset"), "2" }, - { LocalizationHelper.GetString("ConnectionAddress"), "3" }, - { LocalizationHelper.GetString("ClientType"), "4" }, - }; + { + { "1", LocalizationHelper.GetString("ConfigurationName") }, + { "2", LocalizationHelper.GetString("ConnectionPreset") }, + { "3", LocalizationHelper.GetString("ConnectionAddress") }, + { "4", LocalizationHelper.GetString("ClientType") }, + }; public static Dictionary WindowTitleAllShowDict { get => _windowTitleAllShowDict; } - private static List _windowTitleAllShowList = [.. _windowTitleAllShowDict.Keys]; - - public List WindowTitleAllShowList - { - get => _windowTitleAllShowList; - set => SetAndNotify(ref _windowTitleAllShowList, value); - } - private static object[] _windowTitleSelectShowList = ConfigurationHelper.GetGlobalValue(ConfigurationKeys.WindowTitleSelectShowList, "1 2 3 4") .Split(' ') - .Where(s => _windowTitleAllShowDict.ContainsValue(s.ToString())) - .Select(s => _windowTitleAllShowDict.FirstOrDefault(pair => pair.Value == s).Key) + .Where(s => _windowTitleAllShowDict.ContainsKey(s.ToString())) + .Select(s => (object)new KeyValuePair(s, _windowTitleAllShowDict[s])) .ToArray(); public object[] WindowTitleSelectShowList @@ -312,7 +304,7 @@ public class GuiSettingsUserControlModel : PropertyChangedBase { SetAndNotify(ref _windowTitleSelectShowList, value); Instances.SettingsViewModel.UpdateWindowTitle(); - var config = string.Join(' ', _windowTitleSelectShowList.Cast().Select(s => _windowTitleAllShowDict[s])); + var config = string.Join(' ', _windowTitleSelectShowList.Cast>().Select(pair => pair.Key).ToList()); ConfigurationHelper.SetGlobalValue(ConfigurationKeys.WindowTitleSelectShowList, config); } } diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs index e7794bfb65..7f6951aa52 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs @@ -333,6 +333,21 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel } } + private string _roguelikeCollectibleModeSquad = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeCollectibleModeSquad, string.Empty); + + /// + /// Gets or sets the roguelike squad using for last reward mode. + /// + public string RoguelikeCollectibleModeSquad + { + get => _roguelikeCollectibleModeSquad; + set + { + SetAndNotify(ref _roguelikeCollectibleModeSquad, value); + ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeCollectibleModeSquad, value); + } + } + private string _roguelikeSquad = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeSquad, string.Empty); /// @@ -464,21 +479,38 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel /// public bool RoguelikeOnlyStartWithEliteTwo => _roguelikeOnlyStartWithEliteTwo && RoguelikeStartWithEliteTwo; - private bool _roguelikeStartWithTwoIdeas = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeStartWithTwoIdeas, bool.FalseString)); - - /// - /// Gets or sets a value indicating whether we need to start with two ideas. - /// - public bool RoguelikeStartWithTwoIdeas + public static Dictionary RoguelikeStartWithAllDict { get; } = new() { - get => _roguelikeStartWithTwoIdeas; + { "Roguelike@LastReward", LocalizationHelper.GetString("RoguelikeStartWithKettle") }, + { "Roguelike@LastReward2", LocalizationHelper.GetString("RoguelikeStartWithShield") }, + { "Roguelike@LastReward3", LocalizationHelper.GetString("RoguelikeStartWithIngot") }, + { "Roguelike@LastReward4", LocalizationHelper.GetString("RoguelikeStartWithHope") }, + { "Roguelike@LastRewardRand", LocalizationHelper.GetString("RoguelikeStartWithRandomReward") }, + { "Mizuki@Roguelike@LastReward5", LocalizationHelper.GetString("RoguelikeStartWithKey") }, + { "Mizuki@Roguelike@LastReward6", LocalizationHelper.GetString("RoguelikeStartWithDice") }, + { "Sarkaz@Roguelike@LastReward5", LocalizationHelper.GetString("RoguelikeStartWithIdea") }, + }; + + private static object[] _roguelikeStartWithSelectListRaw = ConfigurationHelper.GetGlobalValue(ConfigurationKeys.RoguelikeStartWithSelectList, "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5") + .Split(' ') + .Where(s => RoguelikeStartWithAllDict.ContainsKey(s.ToString())) + .Select(s => (object)new KeyValuePair(s, RoguelikeStartWithAllDict[s])) + .ToArray(); + + public object[] RoguelikeStartWithSelectListRaw + { + get => _roguelikeStartWithSelectListRaw; set { - SetAndNotify(ref _roguelikeStartWithTwoIdeas, value); - ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeStartWithTwoIdeas, value.ToString()); + SetAndNotify(ref _roguelikeStartWithSelectListRaw, value); + Instances.SettingsViewModel.UpdateWindowTitle(); + var config = string.Join(' ', _roguelikeStartWithSelectListRaw.Cast>().Select(pair => pair.Key).ToList()); + ConfigurationHelper.SetGlobalValue(ConfigurationKeys.RoguelikeStartWithSelectList, config); } } + public List RoguelikeStartWithSelectList => (RoguelikeMode == "4" && !RoguelikeOnlyStartWithEliteTwo) ? _roguelikeStartWithSelectListRaw.Cast>().Select(pair => pair.Key).ToList() : []; + private bool _roguelike3FirstFloorFoldartal = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.Roguelike3FirstFloorFoldartal, bool.FalseString)); /// @@ -644,6 +676,21 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel /// public bool RoguelikeInvestmentWithMoreScore => _roguelikeInvestmentWithMoreScore && RoguelikeMode == "1"; + private bool _roguelikeCollectibleModeShopping = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeCollectibleModeShopping, bool.FalseString)); + + /// + /// Gets or sets a value indicating whether shopping is enabled in LastReward Mode. + /// + public bool RoguelikeCollectibleModeShopping + { + get => _roguelikeCollectibleModeShopping; + set + { + SetAndNotify(ref _roguelikeCollectibleModeShopping, value); + ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeCollectibleModeShopping, value.ToString()); + } + } + private bool _roguelikeRefreshTraderWithDice = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeRefreshTraderWithDice, bool.FalseString)); public bool RoguelikeRefreshTraderWithDiceRaw diff --git a/src/MaaWpfGui/Views/UserControl/Settings/GuiSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/Settings/GuiSettingsUserControl.xaml index 1e50e58c78..79019ddf56 100644 --- a/src/MaaWpfGui/Views/UserControl/Settings/GuiSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/Settings/GuiSettingsUserControl.xaml @@ -59,14 +59,15 @@ + IsChecked="{Binding InvertNullFunction}" />--> diff --git a/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml index 8de11e0b0e..7cc31b04a9 100644 --- a/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml @@ -44,6 +44,16 @@ ItemsSource="{Binding RoguelikeModeList}" SelectedValue="{Binding RoguelikeMode}" SelectedValuePath="Value" /> + + + + - - - + hc:ListBoxAttach.SelectedItems="{Binding RoguelikeStartWithSelectListRaw}" + hc:TitleElement.Title="{DynamicResource RoguelikeStartWithSelectList}" + DisplayMemberPath="Value" + ItemsSource="{Binding RoguelikeStartWithAllDict}" + Style="{StaticResource CheckComboBoxExtend}" + Visibility="{c:Binding 'RoguelikeMode == "4" and !RoguelikeOnlyStartWithEliteTwoRaw'}" /> -