diff --git a/resource/roguelike/Sami/shopping.json b/resource/roguelike/Sami/shopping.json index 7557694003..0f2f8710ce 100644 --- a/resource/roguelike/Sami/shopping.json +++ b/resource/roguelike/Sami/shopping.json @@ -6,6 +6,11 @@ "effect": "商店中购买道具所需源石锭-50%", "No": 189 }, + { + "name": "坎诺特印记", + "effect": "每次在诡意行商购买一件道具,或在失与得交换一次,希望+1", + "No": 210 + }, { "name": "人事部密信-γ", "effect": "【极地化】希望+2,招募6星干员的希望消耗-2,每次招募有概率出现随机直升的6星干员", @@ -428,12 +433,7 @@ "name": "芽棍", "effect": "每次进入树篱之途或失与得节点,护盾值+2", "No": 209 - }, - { - "name": "坎诺特印记", - "effect": "每次在诡意行商购买一件道具,或在失与得交换一次,希望+1", - "No": 210 - }, + }, { "name": "全自动维修台", "effect": "抗干扰指数+2,但是坍缩值+2", diff --git a/resource/tasks.json b/resource/tasks.json index 237a822fa1..c5be75ca4e 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -10151,7 +10151,8 @@ ], "next": [ "Phantom@Roguelike@ChooseOperConfirm", - "Phantom@Roguelike@RecruitSkip" + "Phantom@Roguelike@RecruitSkip", + "Phantom@Roguelike@Begin" ] }, "Phantom@Roguelike@CloseCollection": { @@ -10481,7 +10482,8 @@ "Mizuki@Roguelike@CloseCollectionContinue", "Mizuki@Roguelike@CloseCollectionClose", "Mizuki@Roguelike@ChooseOperConfirm", - "Mizuki@Roguelike@RecruitSkip" + "Mizuki@Roguelike@RecruitSkip", + "Mizuki@Roguelike@Begin" ] }, "Mizuki@Roguelike@CloseCollection": { @@ -11077,7 +11079,8 @@ "next": [ "Sami@Roguelike@CloseCollectionClose", "Sami@Roguelike@ChooseOperConfirm", - "Sami@Roguelike@RecruitSkip" + "Sami@Roguelike@RecruitSkip", + "Sami@Roguelike@Begin" ] }, "Sami@Roguelike@CloseCollection": { diff --git a/resource/template/Sami@Roguelike@StageVerticalEmergencyTransportation.png b/resource/template/Sami@Roguelike@StageVerticalEmergencyTransportation.png index 53f173268c..d678f73d16 100644 Binary files a/resource/template/Sami@Roguelike@StageVerticalEmergencyTransportation.png and b/resource/template/Sami@Roguelike@StageVerticalEmergencyTransportation.png differ diff --git a/src/MaaCore/Config/TaskData.cpp b/src/MaaCore/Config/TaskData.cpp index 38c6fc472f..2e4359f7ba 100644 --- a/src/MaaCore/Config/TaskData.cpp +++ b/src/MaaCore/Config/TaskData.cpp @@ -58,7 +58,7 @@ const bool forcedReloadResource = std::ifstream("DEBUG").good() || std::ifstream bool asst::TaskData::parse(const json::value& json) { LogTraceFunction; - + #ifndef ASST_DEBUG if (forcedReloadResource) { m_all_tasks_info.clear(); diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index fc3c010d84..815f3d8b8c 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -44,6 +44,7 @@ namespace asst static inline const std::string RoguelikeCharRarityPrefix = "RoguelikeRarity-"; static inline const std::string RoguelikeCharOverview = "RoguelikeOverview"; static inline const std::string RoguelikeCoreChar = "RoguelikeCoreChar"; + static inline const std::string RoguelikeStartWithEliteTwo = "RoguelikeStartWithEliteTwo"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; static inline const std::string RoguelikeTraderNoLongerBuy = "RoguelikeNoLongerBuy"; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 4aea72ba8b..0433fd403b 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -74,8 +74,11 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 3 - 尝试通关,激进策略(TODO) // 4 - 刷开局藏品,以获得热水壶或者演讲稿开局,不期而遇采用保守策略 int mode = params.get("mode", 0); + // 是否凹指定干员开局直升 + bool start_with_elite_two = params.get("start_with_elite_two", false); status()->set_properties(Status::RoguelikeMode, std::to_string(mode)); status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); + status()->set_properties(Status::RoguelikeStartWithEliteTwo, std::to_string(start_with_elite_two)); switch (mode) { case 0: m_debug_task_ptr->set_enable(true); @@ -101,11 +104,13 @@ bool asst::RoguelikeTask::set_params(const json::value& params) Task.get(theme + "@Roguelike@LevelName")->text = Task.get(theme + "@Roguelike@LevelName_mode4")->text; Task.get(theme + "@Roguelike@LevelName")->next = Task.get(theme + "@Roguelike@LevelName_mode4")->next; - // 获得热水壶和演讲时长延时 - Task.get(theme + "@Roguelike@LastReward")->post_delay = - Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; - Task.get(theme + "@Roguelike@LastReward4")->post_delay = - Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; + if (!start_with_elite_two) { + // 获得热水壶和演讲时长延时 + Task.get(theme + "@Roguelike@LastReward")->post_delay = + Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; + Task.get(theme + "@Roguelike@LastReward4")->post_delay = + Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; + } // 获得其他奖励时重开 Task.get(theme + "@Roguelike@LastReward2")->next = Task.get(theme + "@Roguelike@LastReward_mode4")->next; Task.get(theme + "@Roguelike@LastReward3")->next = Task.get(theme + "@Roguelike@LastReward_mode4")->next; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index 7830f5e961..6ce2619937 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -36,17 +36,22 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); // todo:以后可以根据传入的难度值选择难度? - std::string change_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value(); + std::string recent_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value(); + std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value(); if (theme != "Phantom" && mode == "4") { - if (change_difficulty == "max") { + if (recent_difficulty == "max") { // 到第三层退出,选最高难度开水壶 ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Hardest" }).run(); + // 重置为最低难度,需要凹开局直升时,保证在难度max下寻找直升干员,延后到找不到精二重置 + if (start_with_elite_two == "false") { + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); + } } // 其他情况下开始,选最低难度 else { ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Easiest" }).run(); + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); } - status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); ProcessTask(*this, { theme + "@Roguelike@ChooseDifficultyConfirm" }).run(); ProcessTask(*this, { theme + "@Roguelike@StartExploreConfirm" }).run(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 0822503b4b..e0722c8041 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -57,25 +57,25 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() { LogTraceFunction; - size_t recruit_count = status()->get_number(Status::RoguelikeRecruitmentCount).value_or(0) + 1; // 这是第几次招募 - status()->set_number(Status::RoguelikeRecruitmentCount, recruit_count); // 这是第几次招募 - bool start_complete = status() - ->get_number(Status::RoguelikeRecruitmentStartsComplete) - .value_or(0); // 阵容中必须有开局干员,没有前仅招募start干员或预备干员 - bool team_complete = status() - ->get_number(Status::RoguelikeRecruitmentTeamComplete) - .value_or(0); // 阵容完备前,仅招募key干员或预备干员 + // 这是第几次招募 + size_t recruit_count = status()->get_number(Status::RoguelikeRecruitmentCount).value_or(0) + 1; + status()->set_number(Status::RoguelikeRecruitmentCount, recruit_count); - // 开局干员 + // 是否有开局干员,阵容中必须有开局干员,没有前仅招募start干员或预备干员 + bool start_complete = status()->get_number(Status::RoguelikeRecruitmentStartsComplete).value_or(0); + // 是否阵容完备,阵容完备前,仅招募key干员或预备干员 + bool team_complete = status()->get_number(Status::RoguelikeRecruitmentTeamComplete).value_or(0); + + // 是否使用助战干员开局 bool use_support = get_status_bool(Status::RoguelikeUseSupport); if (use_support) { - if (check_support_char()) { + if (recruit_support_char()) { start_complete = true; return true; } } else { - if (check_core_char()) { + if (recruit_own_char()) { start_complete = true; return true; } @@ -104,10 +104,10 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() const auto& group_list = RoguelikeRecruit.get_group_info(rogue_theme); for (const auto& oper : chars_map) { std::vector group_ids = RoguelikeRecruit.get_group_id(rogue_theme, oper.first); - for (const auto& group_id : group_ids){ + for (const auto& group_id : group_ids) { const std::string& group_name = group_list[group_id]; group_count[group_name]++; - } + } } if (!start_complete) { @@ -425,17 +425,22 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } } - return check_char(char_name, is_rtl); + return recruit_appointed_char(char_name, is_rtl); } -bool asst::RoguelikeRecruitTaskPlugin::check_char(const std::string& char_name, bool is_rtl) +bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& char_name, bool is_rtl) { LogTraceFunction; - + // 最大滑动次数 int SwipeTimes = Task.get("RoguelikeRecruitSwipeMaxTime")->max_times; std::unordered_set pre_oper_names; bool has_been_same = false; int i = 0; + // 是否凹直升 + std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value(); + // 当前肉鸽难度 + std::string recent_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value(); + for (; i != SwipeTimes; ++i) { if (need_exit()) { return false; @@ -443,8 +448,8 @@ bool asst::RoguelikeRecruitTaskPlugin::check_char(const std::string& char_name, auto image = ctrler()->get_image(); RoguelikeRecruitImageAnalyzer analyzer(image); - // 只处理识别成功的情况,失败(无任何结果)时继续滑动 int max_oper_x = 700; + // 只处理识别成功的情况,失败(无任何结果)时继续滑动 if (analyzer.analyze()) { const auto& chars = analyzer.get_result(); max_oper_x = ranges::max(chars | views::transform([&](const auto& x) { return x.rect.x; })); @@ -457,7 +462,23 @@ bool asst::RoguelikeRecruitTaskPlugin::check_char(const std::string& char_name, Log.info(__FUNCTION__, "| Oper list:", oper_names); if (it != chars.cend()) { - select_oper(*it); + // 需要凹直升且当前为max难度时 + if (start_with_elite_two == "1" && recent_difficulty == "max") { + if (it->elite == 2) { + m_task_ptr->set_enable(false); + } + else { + std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); + // 重置难度并放弃 + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); + ProcessTask(*this, { theme + "@Roguelike@ExitThenAbandon" }) + .set_times_limit("Roguelike@StartExplore", 0) + .run(); + } + } + else { + select_oper(*it); + } return true; } if (pre_oper_names == oper_names) { @@ -489,7 +510,7 @@ bool asst::RoguelikeRecruitTaskPlugin::check_char(const std::string& char_name, return false; } -bool asst::RoguelikeRecruitTaskPlugin::check_support_char() +bool asst::RoguelikeRecruitTaskPlugin::recruit_support_char() { LogTraceFunction; const int MaxRefreshTimes = Task.get("RoguelikeRefreshSupportBtnOcr")->special_params.front(); @@ -497,12 +518,12 @@ bool asst::RoguelikeRecruitTaskPlugin::check_support_char() auto core_opt = status()->get_str(Status::RoguelikeCoreChar); status()->set_str(Status::RoguelikeCoreChar, ""); if (core_opt && !core_opt->empty()) { - if (check_support_char(core_opt.value(), MaxRefreshTimes)) return true; + if (recruit_support_char(core_opt.value(), MaxRefreshTimes)) return true; } return false; } -bool asst::RoguelikeRecruitTaskPlugin::check_support_char(const std::string& name, const int max_refresh) +bool asst::RoguelikeRecruitTaskPlugin::recruit_support_char(const std::string& name, const int max_refresh) { LogTraceFunction; @@ -575,7 +596,7 @@ bool asst::RoguelikeRecruitTaskPlugin::check_support_char(const std::string& nam return true; } -bool asst::RoguelikeRecruitTaskPlugin::check_core_char() +bool asst::RoguelikeRecruitTaskPlugin::recruit_own_char() { LogTraceFunction; @@ -584,7 +605,7 @@ bool asst::RoguelikeRecruitTaskPlugin::check_core_char() return false; } status()->set_str(Status::RoguelikeCoreChar, ""); - return check_char(core_opt.value()); + return recruit_appointed_char(core_opt.value()); } void asst::RoguelikeRecruitTaskPlugin::select_oper(const battle::roguelike::Recruitment& oper) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h index a60ff0ab5b..ec0a0663ad 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h @@ -29,10 +29,12 @@ namespace asst void slowly_swipe(bool to_left, int swipe_dist = 500); private: - bool check_support_char(); - bool check_support_char(const std::string& name, const int max_refresh); - - bool check_core_char(); + // 使用助战干员开局 + bool recruit_support_char(); + // 尝试招募指定助战干员 + bool recruit_support_char(const std::string& name, const int max_refresh); + // 招募自己的干员 + bool recruit_own_char(); battle::Role get_oper_role(const std::string& name); bool is_oper_melee(const std::string& name); // 招募指定干员 @@ -41,7 +43,8 @@ namespace asst // char_name: 干员名称 // is_rtl: 滑动方向 (true: 从右向左; false: 从左向右,需要先滑动到最左侧) // 返回值: 招募结果 (true: 成功; false: 失败) - bool check_char(const std::string& char_name, bool is_rtl = false); + bool recruit_appointed_char(const std::string& char_name, bool is_rtl = false); + // 选择干员 void select_oper(const battle::roguelike::Recruitment& oper); bool get_status_bool(const std::string& key); }; diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index 64def5a771..423dfb31f1 100644 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -98,6 +98,7 @@ namespace MaaWpfGui.Constants public const string RoguelikeSquad = "Roguelike.Squad"; public const string RoguelikeRoles = "Roguelike.Roles"; public const string RoguelikeCoreChar = "Roguelike.CoreChar"; + public const string RoguelikeStartWithEliteTwo = "Roguelike.RoguelikeStartWithEliteTwo"; public const string RoguelikeUseSupportUnit = "Roguelike.RoguelikeUseSupportUnit"; public const string RoguelikeEnableNonfriendSupport = "Roguelike.RoguelikeEnableNonfriendSupport"; public const string RoguelikeStartsCount = "Roguelike.StartsCount"; diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 5c53880f55..53d9f67919 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -1697,13 +1697,14 @@ namespace MaaWpfGui.Main /// TODO. /// TODO. /// TODO. + /// 是否凹开局直升 /// 是否core_char使用好友助战 /// 是否允许使用非好友助战 /// 肉鸽名字。["Phantom", "Mizuki", "Sami"] /// 是否用骰子刷新商店购买特殊商品,目前支持水月肉鸽的指路鳞 /// 是否成功。 public bool AsstAppendRoguelike(int mode, int starts, bool investment_enabled, int invests, bool stop_when_full, - string squad, string roles, string core_char, bool use_support, bool enable_nonfriend_support, string theme, bool refresh_trader_with_dice) + string squad, string roles, string core_char, bool start_with_elite_two, bool use_support, bool enable_nonfriend_support, string theme, bool refresh_trader_with_dice) { var task_params = new JObject { @@ -1735,6 +1736,7 @@ namespace MaaWpfGui.Main task_params["core_char"] = core_char; } + task_params["start_with_elite_two"] = start_with_elite_two; task_params["use_support"] = use_support; task_params["use_nonfriend_support"] = enable_nonfriend_support; task_params["refresh_trader_with_dice"] = refresh_trader_with_dice; diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 006b6a32cf..2aad54a6dd 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -102,11 +102,12 @@ If custom shifts are enabled, this field is only valid for rooms with autofill and operator groups Gain Experience Points, clear as many nodes as possible Invests coins, exits after arriving at the second floor - + Fight to obtain starting rewards, reach the third floor then exit Starting Squad Starting Roles Starting Operator (CN name only) Only supports the CN name of a single operator, default if not filled. + Repeat for「Starting Operator」Elite 2 Select 「Starting Operator」 from support unit list Enable non-friend support Deployment with Pause (Pause-Trick) (Works for IS, Copilot and SSS) (Beta function, Not recommended yet) diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index a46c55ee47..2329e90b67 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -102,11 +102,12 @@ カスタム シフトが有効な場合、このフィールドは自動入力とオペレーター グループのあるルームに対してのみ有効です 経験値を取得し、できるだけクリア 源石錐の収集、2階到着後終了 - + 序盤の報酬を得るために戦い、3階到着後終了 最初の分隊 最初の職業 最初のオペレーター(一人だけ、中国名のみを入力可能) 一人のオペレーターの中国名のみをサポートします。入力されていない場合はデフォルトになります。 + 「最初のオペレーター」直接昇進 「最初のオペレーター」をサポートから選択 フレンド以外のサポートの使用を許可 統合戦略/保全駐在でポーズトリックを使用します(ベータ機能のため非推奨です) diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index d658e1e621..e0209e8ffb 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -107,6 +107,7 @@ 모집 조합 시작 오퍼레이터 (1명) 단일 오퍼레이터의 중국어 이름만 지원하며, 입력하지 않으면 기본값이 선택됩니다. + 시초 에 간부 가 직진 하다 시작 오퍼레이터로 지원 유닛 사용 친구가 아니어도 지원 유닛 사용 일시정지 상태로 배치하기 - 통합전략, 자동 작전, 보안 파견에 적용 (베타 기능, 현재 비권장) diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index bf7965a14a..47c7babffb 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -107,6 +107,7 @@ 开局职业组 开局干员 (单个) 仅支持单个干员中文名,不填写则默认选择。 + 凹「开局干员」直升精二 「开局干员」使用助战 可以使用非好友助战 暂停下干员(同时影响肉鸽、自动战斗、保全)(不稳定,暂不推荐开启) diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index ac44b33c56..389a3b867e 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -107,6 +107,7 @@ 開局職業組 開局幹員(單個) 僅支持單個幹員中文名,不填寫則預設選擇。 + 凹「開局幹員」直升精二 「開局幹員」使用助戰 可以使用非好友助戰 暫停下幹員(同時影響肉鴿、自動戰鬥、保全)(不穩定,暫不推薦開啟) diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index 2294e1ef08..40c54c1212 100644 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -1656,6 +1656,21 @@ namespace MaaWpfGui.ViewModels.UI set => SetAndNotify(ref _roguelikeCoreCharList, value); } + private string _roguelikeStartWithEliteTwo = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeStartWithEliteTwo, false.ToString()); + + /// + /// Gets or sets a value indicating whether use support unit. + /// + public bool RoguelikeStartWithEliteTwo + { + get => bool.Parse(_roguelikeStartWithEliteTwo); + set + { + SetAndNotify(ref _roguelikeStartWithEliteTwo, value.ToString()); + ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeStartWithEliteTwo, value.ToString()); + } + } + private string _roguelikeUseSupportUnit = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeUseSupportUnit, false.ToString()); /// diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 24a984b30a..7bbd3e5102 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1159,7 +1159,8 @@ namespace MaaWpfGui.ViewModels.UI return Instances.AsstProxy.AsstAppendRoguelike( mode, Instances.SettingsViewModel.RoguelikeStartsCount, Instances.SettingsViewModel.RoguelikeInvestmentEnabled, Instances.SettingsViewModel.RoguelikeInvestsCount, Instances.SettingsViewModel.RoguelikeStopWhenInvestmentFull, - Instances.SettingsViewModel.RoguelikeSquad, Instances.SettingsViewModel.RoguelikeRoles, Instances.SettingsViewModel.RoguelikeCoreChar, Instances.SettingsViewModel.RoguelikeUseSupportUnit, + Instances.SettingsViewModel.RoguelikeSquad, Instances.SettingsViewModel.RoguelikeRoles, Instances.SettingsViewModel.RoguelikeCoreChar, + Instances.SettingsViewModel.RoguelikeStartWithEliteTwo, Instances.SettingsViewModel.RoguelikeUseSupportUnit, Instances.SettingsViewModel.RoguelikeEnableNonfriendSupport, Instances.SettingsViewModel.RoguelikeTheme, Instances.SettingsViewModel.RoguelikeRefreshTraderWithDice); } diff --git a/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml index d916e68ae8..29101bafc9 100644 --- a/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml @@ -105,7 +105,14 @@ Loaded="{s:Action MakeComboBoxSearchable}" Text="{Binding RoguelikeCoreChar}" ToolTip="{DynamicResource StartingCoreCharTip}" /> - + + + +