rft: 肉鸽模式参数枚举

This commit is contained in:
status102
2025-07-11 10:33:16 +08:00
parent 8423b7e13e
commit 482e39b69c
4 changed files with 57 additions and 76 deletions

View File

@@ -13,8 +13,8 @@
#nullable enable
using System.Collections.Generic;
using MaaWpfGui.Configuration.Single.MaaTask;
using MaaWpfGui.Services;
using MaaWpfGui.ViewModels.UserControl.TaskQueue;
using Newtonsoft.Json.Linq;
namespace MaaWpfGui.Models.AsstTasks;
@@ -47,7 +47,7 @@ public class AsstRoguelikeTask : AsstBaseTask
/// </item>
/// </list>
/// </summary>
public int Mode { get; set; }
public RoguelikeMode Mode { get; set; }
/// <summary>
/// Gets or sets 刷投资的目标难度/其他模式的选择难度
@@ -198,7 +198,7 @@ public class AsstRoguelikeTask : AsstBaseTask
{
var taskParams = new JObject
{
["mode"] = Mode,
["mode"] = (int)Mode,
["theme"] = Theme.ToString(),
["difficulty"] = Difficulty,
["starts_count"] = Starts,
@@ -227,12 +227,12 @@ public class AsstRoguelikeTask : AsstBaseTask
taskParams["core_char"] = CoreChar;
}
if (Mode == 0)
if (Mode == RoguelikeMode.Exp)
{
taskParams["stop_at_final_boss"] = StopAtFinalBoss;
taskParams["stop_at_max_level"] = StopAtMaxLevel;
}
else if (Mode == 4)
else if (Mode == RoguelikeMode.Collectible)
{
// 刷开局模式
taskParams["collectible_mode_shopping"] = CollectibleModeShopping;
@@ -242,13 +242,13 @@ public class AsstRoguelikeTask : AsstBaseTask
taskParams["collectible_mode_start_list"] = JObject.FromObject(CollectibleModeStartRewards);
}
if (Mode == 6)
if (Mode == RoguelikeMode.Squad)
{
taskParams["monthly_squad_auto_iterate"] = MonthlySquadAutoIterate;
taskParams["monthly_squad_check_comms"] = MonthlySquadCheckComms;
}
if (Mode == 7)
if (Mode == RoguelikeMode.Exploration)
{
taskParams["deep_exploration_auto_iterate"] = DeepExplorationAutoIterate;
}
@@ -263,7 +263,7 @@ public class AsstRoguelikeTask : AsstBaseTask
taskParams["start_foldartal_list"] = JArray.FromObject(SamiNewSquad2StartingFoldartals);
}
if (Mode == 5 && ExpectedCollapsalParadigms.Count > 0)
if (Mode == RoguelikeMode.CLP_PDS && ExpectedCollapsalParadigms.Count > 0)
{
taskParams["expected_collapsal_paradigms"] = JArray.FromObject(ExpectedCollapsalParadigms);
}

View File

@@ -22,7 +22,6 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using MaaWpfGui.Constants;
using MaaWpfGui.Extensions;
using MaaWpfGui.Helper;
@@ -738,7 +737,7 @@ namespace MaaWpfGui.ViewModels.UI
ConfigurationHelper.SetTaskOrder(newVm.OriginalName, i.ToString());
}
TaskItemViewModels = new ObservableCollection<DragItemViewModel>(tempOrderList);
TaskItemViewModels = [.. tempOrderList];
TaskItemViewModels.CollectionChanged += TaskItemSelectionChanged;
FightTask.InitDrops();

View File

@@ -27,10 +27,10 @@ using MaaWpfGui.Utilities.ValueType;
using MaaWpfGui.ViewModels.UI;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Mode = MaaWpfGui.Configuration.Single.MaaTask.RoguelikeMode;
using Theme = MaaWpfGui.Configuration.Single.MaaTask.RoguelikeTheme;
namespace MaaWpfGui.ViewModels.UserControl.TaskQueue;
using Theme = RoguelikeTheme;
public class RoguelikeSettingsUserControlModel : TaskViewModel
{
static RoguelikeSettingsUserControlModel()
@@ -55,9 +55,9 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
var baseList = new List<GenericCombinedData<int>>
{
new() { Display = "MAX", Value = int.MaxValue }
new() { Display = "MAX", Value = int.MaxValue },
};
for (int i = 20; i >= -1; --i)
{
baseList.Add(new() { Display = i.ToString(), Value = i });
@@ -115,20 +115,20 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
RoguelikeModeList =
[
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyExp"), Value = 0 },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyGold"), Value = 1 },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyExp"), Value = Mode.Exp },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyGold"), Value = Mode.Investment },
// new CombData { Display = "两者兼顾,投资过后退出", Value = "2" } // 弃用
// new CombData { Display = Localization.GetString("3"), Value = "3" }, // 开发中
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyLastReward"), Value = 4 },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyMonthlySquad"), Value = 6 },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyDeepExploration"), Value = 7 },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyLastReward"), Value = Mode.Collectible },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyMonthlySquad"), Value = Mode.Squad },
new() { Display = LocalizationHelper.GetString("RoguelikeStrategyDeepExploration"), Value = Mode.Exploration },
];
switch (RoguelikeTheme)
{
case Theme.Sami:
RoguelikeModeList.Add(new() { Display = LocalizationHelper.GetString("RoguelikeStrategyCollapse"), Value = 5 });
RoguelikeModeList.Add(new() { Display = LocalizationHelper.GetString("RoguelikeStrategyCollapse"), Value = Mode.CLP_PDS });
break;
}
@@ -286,12 +286,12 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
set => SetAndNotify(ref _roguelikeDifficultyList, value);
}
private ObservableCollection<GenericCombinedData<int>> _roguelikeModeList = [];
private ObservableCollection<GenericCombinedData<Mode>> _roguelikeModeList = [];
/// <summary>
/// Gets or sets the list of roguelike modes.
/// </summary>
public ObservableCollection<GenericCombinedData<int>> RoguelikeModeList
public ObservableCollection<GenericCombinedData<Mode>> RoguelikeModeList
{
get => _roguelikeModeList;
set => SetAndNotify(ref _roguelikeModeList, value);
@@ -331,8 +331,7 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
new() { Display = LocalizationHelper.GetString("RoguelikeThemeSarkaz"), Value = Theme.Sarkaz },
];
// public List<CombData> RoguelikeCoreCharList { get; set; }
private Theme _roguelikeTheme = Enum.TryParse(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeTheme, Theme.Sarkaz.ToString()), out Theme outTheme) ? outTheme : Theme.Sarkaz;
private Theme _roguelikeTheme = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeTheme, Theme.Sarkaz);
/// <summary>
/// Gets or sets the Roguelike theme.
@@ -343,7 +342,7 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
set
{
SetAndNotify(ref _roguelikeTheme, value);
ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeTheme, Convert.ToString((int)value));
ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeTheme, value.ToString());
// Check and adjust difficulty if current value is not supported by new theme
int maxDifficulty = GetMaxDifficultyForTheme(value);
@@ -377,6 +376,7 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeDifficulty, int.MaxValue.ToString());
return int.MaxValue;
}
return difficulty;
}
@@ -390,23 +390,23 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
}
}
private int _roguelikeMode = int.TryParse(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeMode, "0"), out var outMode) ? outMode : 0;
private Mode _roguelikeMode = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeMode, Mode.Exp);
/// <summary>
/// Gets or sets 策略,往后打 / 刷一层就退 / 烧热水
/// </summary>
public int RoguelikeMode
public Mode RoguelikeMode
{
get => _roguelikeMode;
set
{
if (value == 1)
if (value == Mode.Investment)
{
RoguelikeInvestmentEnabled = true;
}
SetAndNotify(ref _roguelikeMode, value);
ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeMode, Convert.ToString(value));
ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeMode, value.ToString());
UpdateRoguelikeSquadList();
}
@@ -443,10 +443,10 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
}
[PropertyDependsOn(nameof(RoguelikeMode), nameof(RoguelikeTheme), nameof(RoguelikeSquad))]
public bool RoguelikeSquadIsProfessional => RoguelikeMode == 4 && RoguelikeTheme != Theme.Phantom && RoguelikeSquad is "突击战术分队" or "堡垒战术分队" or "远程战术分队" or "破坏战术分队";
public bool RoguelikeSquadIsProfessional => RoguelikeMode == Mode.Collectible && RoguelikeTheme != Theme.Phantom && RoguelikeSquad is "突击战术分队" or "堡垒战术分队" or "远程战术分队" or "破坏战术分队";
[PropertyDependsOn(nameof(RoguelikeMode), nameof(RoguelikeTheme), nameof(RoguelikeSquad))]
public bool RoguelikeSquadIsFoldartal => RoguelikeMode == 4 && RoguelikeTheme == Theme.Sami && RoguelikeSquad == "生活至上分队";
public bool RoguelikeSquadIsFoldartal => RoguelikeMode == Mode.Collectible && RoguelikeTheme == Theme.Sami && RoguelikeSquad == "生活至上分队";
private string _roguelikeRoles = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeRoles, string.Empty);
@@ -737,7 +737,7 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
/// <summary>
/// Gets a value indicating whether investment is enabled.
/// </summary>
public bool RoguelikeInvestmentWithMoreScore => _roguelikeInvestmentWithMoreScore && RoguelikeMode == 1;
public bool RoguelikeInvestmentWithMoreScore => _roguelikeInvestmentWithMoreScore && RoguelikeMode == Mode.Investment;
private bool _roguelikeCollectibleModeShopping = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeCollectibleModeShopping, bool.FalseString));
@@ -1072,16 +1072,16 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
// 深入探索
DeepExplorationAutoIterate = RoguelikeDeepExplorationAutoIterate,
SamiFirstFloorFoldartal = RoguelikeTheme == Theme.Sami && RoguelikeMode == 4 && Roguelike3FirstFloorFoldartal,
SamiFirstFloorFoldartal = RoguelikeTheme == Theme.Sami && RoguelikeMode == Mode.Collectible && Roguelike3FirstFloorFoldartal,
SamiStartFloorFoldartal = Roguelike3FirstFloorFoldartals,
SamiNewSquad2StartingFoldartal = Roguelike3NewSquad2StartingFoldartal && RoguelikeSquadIsFoldartal,
SamiNewSquad2StartingFoldartals = Roguelike3NewSquad2StartingFoldartals.Split(';').Where(i => !string.IsNullOrEmpty(i)).Take(3).ToList(),
ExpectedCollapsalParadigms = RoguelikeExpectedCollapsalParadigms.Split(';').Where(i => !string.IsNullOrEmpty(i)).ToList(),
StartWithSeed = RoguelikeStartWithSeed && RoguelikeTheme == Theme.Sarkaz && RoguelikeMode == 1 && RoguelikeSquad is "点刺成锭分队" or "后勤分队",
StartWithSeed = RoguelikeStartWithSeed && RoguelikeTheme == Theme.Sarkaz && RoguelikeMode == Mode.Investment && RoguelikeSquad is "点刺成锭分队" or "后勤分队",
};
if (RoguelikeMode == 4 && !RoguelikeOnlyStartWithEliteTwo)
if (RoguelikeMode == Mode.Collectible && !RoguelikeOnlyStartWithEliteTwo)
{
var rewardKeys = new Dictionary<string, string>
{
@@ -1107,26 +1107,3 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
return task.Serialize();
}
}
public enum RoguelikeTheme
{
/// <summary>
/// 傀影
/// </summary>
Phantom,
/// <summary>
/// 水月
/// </summary>
Mizuki,
/// <summary>
/// 萨米
/// </summary>
Sami,
/// <summary>
/// 萨卡兹
/// </summary>
Sarkaz,
}

View File

@@ -11,9 +11,10 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:setting="clr-namespace:MaaWpfGui.ViewModels.UI"
xmlns:task="clr-namespace:MaaWpfGui.ViewModels.UserControl.TaskQueue"
xmlns:task="clr-namespace:MaaWpfGui.Configuration.Single.MaaTask"
xmlns:ui="clr-namespace:MaaWpfGui.ViewModels.UserControl.TaskQueue"
d:Background="White"
d:DataContext="{d:DesignInstance {x:Type task:RoguelikeSettingsUserControlModel}}"
d:DataContext="{d:DesignInstance {x:Type ui:RoguelikeSettingsUserControlModel}}"
d:DesignWidth="220"
s:View.ActionTarget="{Binding}"
mc:Ignorable="d">
@@ -55,7 +56,7 @@
MaxDropDownHeight="800"
SelectedValue="{Binding RoguelikeCollectibleModeSquad}"
SelectedValuePath="Value"
Visibility="{c:Binding 'RoguelikeMode == 4'}" />
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Collectible'}" />
<hc:ComboBox
Margin="0,5"
hc:InfoElement.Title="{DynamicResource StartingSquad}"
@@ -99,7 +100,11 @@
</Grid>
</StackPanel>
<StackPanel IsEnabled="{Binding Idle, Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}" Visibility="{c:Binding EnableAdvancedSettings, Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}">
<StackPanel
d:Visibility="Visible"
IsEnabled="{Binding Idle, Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}"
Visibility="{c:Binding EnableAdvancedSettings,
Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}">
<hc:NumericUpDown
Margin="0,5"
hc:InfoElement.Title="{DynamicResource StartTimesLimit}"
@@ -111,11 +116,11 @@
Margin="0,10"
Content="{DynamicResource InvestmentEnabled}"
IsChecked="{Binding RoguelikeInvestmentEnabled}"
IsEnabled="{c:Binding 'RoguelikeMode != 1'}" />
IsEnabled="{c:Binding 'RoguelikeMode != task:RoguelikeMode.Investment'}" />
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeInvestmentWithMoreScoreRaw}"
Visibility="{c:Binding 'RoguelikeMode == 1'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Investment'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource InvestmentWithMoreScore}"
@@ -124,7 +129,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeCollectibleModeShopping}"
Visibility="{c:Binding 'RoguelikeMode == 4'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Collectible'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeCollectibleModeShopping}"
@@ -165,7 +170,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeOnlyStartWithEliteTwoRaw}"
Visibility="{c:Binding 'RoguelikeStartWithEliteTwo and RoguelikeMode == 4 and RoguelikeTheme != task:RoguelikeTheme.Phantom'}">
Visibility="{c:Binding 'RoguelikeStartWithEliteTwo and RoguelikeMode == task:RoguelikeMode.Collectible and RoguelikeTheme != task:RoguelikeTheme.Phantom'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeOnlyStartWithEliteTwo}"
@@ -177,11 +182,11 @@
hc:TitleElement.Title="{DynamicResource RoguelikeStartWithSelectList}"
DisplayMemberPath="Value"
ItemsSource="{Binding RoguelikeStartWithAllDict}"
Visibility="{c:Binding 'RoguelikeMode == 4 and !RoguelikeOnlyStartWithEliteTwoRaw'}" />
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Collectible and !RoguelikeOnlyStartWithEliteTwoRaw'}" />
<CheckBox
Margin="0,10"
IsChecked="{Binding Roguelike3FirstFloorFoldartal}"
Visibility="{c:Binding 'RoguelikeMode == 4 and RoguelikeTheme == task:RoguelikeTheme.Sami'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Collectible and RoguelikeTheme == task:RoguelikeTheme.Sami'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource Roguelike3FirstFloorFoldartal}"
@@ -192,7 +197,7 @@
Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}"
Style="{StaticResource TextBoxExtend}"
Text="{Binding Roguelike3FirstFloorFoldartals}"
Visibility="{c:Binding 'Roguelike3FirstFloorFoldartal and RoguelikeMode == 4 and RoguelikeTheme == task:RoguelikeTheme.Sami'}" />
Visibility="{c:Binding 'Roguelike3FirstFloorFoldartal and RoguelikeMode == task:RoguelikeMode.Collectible and RoguelikeTheme == task:RoguelikeTheme.Sami'}" />
<CheckBox
Margin="0,10"
IsChecked="{Binding Roguelike3NewSquad2StartingFoldartal}"
@@ -207,14 +212,14 @@
Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}"
Text="{Binding Roguelike3NewSquad2StartingFoldartals}"
ToolTip="{DynamicResource Roguelike3NewSquad2StartingFoldartalTip}"
Visibility="{c:Binding 'Roguelike3NewSquad2StartingFoldartal and RoguelikeSquadIsFoldartal '}" />
Visibility="{c:Binding 'Roguelike3NewSquad2StartingFoldartal and RoguelikeSquadIsFoldartal'}" />
<hc:TextBox
hc:InfoElement.Title="{DynamicResource RoguelikeCollapseList}"
IsReadOnly="{c:Binding !Idle,
Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}"
Text="{Binding RoguelikeExpectedCollapsalParadigms}"
ToolTip="{DynamicResource RoguelikeCollapseListTip}"
Visibility="{c:Binding 'RoguelikeMode == 5'}" />
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.CLP_PDS'}" />
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeUseSupportUnit}"
@@ -236,7 +241,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeStopAtFinalBoss}"
Visibility="{c:Binding 'RoguelikeMode == 0 and RoguelikeTheme != task:RoguelikeTheme.Phantom'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Exp and RoguelikeTheme != task:RoguelikeTheme.Phantom'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeStopAtFinalBoss}"
@@ -245,7 +250,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeMonthlySquadAutoIterate}"
Visibility="{c:Binding 'RoguelikeMode == 6'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Squad'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeMonthlySquadAutoIterate}"
@@ -254,7 +259,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeMonthlySquadCheckComms}"
Visibility="{c:Binding 'RoguelikeMonthlySquadAutoIterate and RoguelikeMode == 6'}">
Visibility="{c:Binding 'RoguelikeMonthlySquadAutoIterate and RoguelikeMode == task:RoguelikeMode.Squad'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeMonthlySquadCheckComms}"
@@ -263,7 +268,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeDeepExplorationAutoIterate}"
Visibility="{c:Binding 'RoguelikeMode == 7'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Exploration'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeDeepExplorationAutoIterate}"
@@ -272,7 +277,7 @@
<CheckBox
Margin="0,10"
IsChecked="{Binding RoguelikeStopAtMaxLevel}"
Visibility="{c:Binding 'RoguelikeMode == 0'}">
Visibility="{c:Binding 'RoguelikeMode == task:RoguelikeMode.Exp'}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource RoguelikeStopAtMaxLevel}"