diff --git a/src/MaaWpfGui/Helper/DataHelper.cs b/src/MaaWpfGui/Helper/DataHelper.cs index ebc1c71dc1..a92e16acec 100644 --- a/src/MaaWpfGui/Helper/DataHelper.cs +++ b/src/MaaWpfGui/Helper/DataHelper.cs @@ -26,6 +26,8 @@ namespace MaaWpfGui.Helper // 储存角色信息的字典 public static Dictionary Characters { get; } = new(); + public static HashSet CharacterNames { get; } = new(); + static DataHelper() { const string FilePath = "resource/battle_data.json"; @@ -37,9 +39,14 @@ namespace MaaWpfGui.Helper string jsonText = File.ReadAllText(FilePath); var characterData = JsonConvert.DeserializeObject>(JObject.Parse(jsonText)["chars"]?.ToString() ?? string.Empty) ?? new(); - foreach (var pair in characterData) + foreach ((var key, var value) in characterData) { - Characters.Add(pair.Key, pair.Value); + Characters.Add(key, value); + CharacterNames.Add(value.Name ?? string.Empty); + CharacterNames.Add(value.NameEn ?? string.Empty); + CharacterNames.Add(value.NameJp ?? string.Empty); + CharacterNames.Add(value.NameKr ?? string.Empty); + CharacterNames.Add(value.NameTw ?? string.Empty); } } diff --git a/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml index 5185f1449a..e4a44f3af6 100644 --- a/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/RoguelikeSettingsUserControl.xaml @@ -59,9 +59,11 @@ SelectedValuePath="Value" Style="{StaticResource ComboBoxExtend}" /> _isValidResult; + set + { + _isValidResult = value; + if (!IsValidResult) + { + _current.StartingCoreCharComboBox.ItemsSource = DataHelper.CharacterNames; + } + } + } + + private void StartingCoreCharComboBox_DropDownClosed(object sender, EventArgs e) + { + if (IsValidResult) + { + var name = StartingCoreCharComboBox.Text; + if (!string.IsNullOrEmpty(name) && !Instances.SettingsViewModel.RoguelikeCoreCharList.Contains(name)) + { + Instances.SettingsViewModel.RoguelikeCoreCharList.Add(name); + } + + StartingCoreCharComboBox.ItemsSource = Instances.SettingsViewModel.RoguelikeCoreCharList; + } + } } public class InvestmentButtonCheckedConverter : IMultiValueConverter @@ -75,7 +106,14 @@ namespace MaaWpfGui.Views.UserControl return new ValidationResult(false, HandyControl.Properties.Langs.Lang.FormatError); } - return new ValidationResult(DataHelper.GetCharacterByNameOrAlias(stringValue) is not null, HandyControl.Properties.Langs.Lang.FormatError); + if (!string.IsNullOrEmpty(stringValue) && DataHelper.GetCharacterByNameOrAlias(stringValue) is null) + { + RoguelikeSettingsUserControl.IsValidResult = false; + return new ValidationResult(false, LocalizationHelper.GetString("RoguelikeStartingCoreCharNotFound")); + } + + RoguelikeSettingsUserControl.IsValidResult = true; + return ValidationResult.ValidResult; } } }