From caa6cab82fc6b1964e83bb23efd9809c6f143c00 Mon Sep 17 00:00:00 2001
From: status102 <102887808+status102@users.noreply.github.com>
Date: Sat, 17 Feb 2024 19:28:31 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=8A=A8=E6=88=98=E6=96=97-?=
=?UTF-8?q?=E6=88=98=E6=96=97=E5=88=97=E8=A1=A8=E7=9A=84=E7=AA=81=E8=A2=AD?=
=?UTF-8?q?=E5=85=B3=E6=8F=8F=E8=BF=B0=E4=BB=8E`Adverse`=E4=BF=AE=E6=AD=A3?=
=?UTF-8?q?=E4=B8=BA`Raid`=20(#8082)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: 修复WpfGui中对突袭关的错误描述
---
src/MaaWpfGui/Res/Localizations/en-us.xaml | 3 +-
src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 3 +-
src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 3 +-
src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 3 +-
src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 3 +-
.../ViewModels/CopilotItemViewModel.cs | 19 +++++-
.../ViewModels/UI/CopilotViewModel.cs | 68 +++++++++++--------
src/MaaWpfGui/Views/UI/CopilotView.xaml | 19 ++++--
8 files changed, 79 insertions(+), 42 deletions(-)
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 2e2a8084d7..67b168863a 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -519,6 +519,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
Use「;」as the separator,「,」to separate the operator name and skills, for example: W, 3; Ash, 2
Battle list
Please switch to the level selection page before starting
+ (Raid)
Right click to add raid difficulty
Right click to clear inactive tasks
Loop Times
@@ -540,7 +541,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
Clear: Left click to clear the list, right click to remove only inactive tasks. \n
Before starting, you need to switch to the level selection interface. Cross-chapter navigation is not supported. \n
The operation will be terminated when encountering insufficient sanity, losing the battle, or failing to settle with three stars. \n
- When you want to use the batch import to add a adverse level, you need to modify the file name (e.g.: 1-7-Adverse). \n\n
+ When you want to use the batch import to add a adverse level, you need to modify the file name (e.g.: '1-7(Raid).json'). \n\n
Failed to read file!
No corresponding file found!
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index 951b48a991..87e6b7fd9d 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -519,6 +519,7 @@ Bilibili: ログイン インターフェイスに表示されるアカウント
使用「;」オペレータ名とスキルを区切るには、区切り文字として「,」を使用します。例: W, 3; Ash, 2
バトルリスト
開始前にレベル選択ページに切り替えてください
+ (Riad)
右クリックしてレイドの難易度を追加します
右クリックして非アクティブなタスクをクリアします
ループ回数
@@ -540,7 +541,7 @@ Bilibili: ログイン インターフェイスに表示されるアカウント
クリア: 左クリックするとリストがクリアされ、右クリックすると非アクティブなタスクのみが削除されます。\n
開始する前に、レベル選択インターフェースに切り替える必要があります。章間のナビゲーションはサポートされていません。\n
正気度が不十分な場合、戦闘が失敗した場合、または 3 つ星を解決できない場合、アクションは終了します。 \n
- 一括インポートを使用して逆レベルを追加する場合は、ファイル名を変更する必要があります (例: 1-7-Adverse)。\n\n
+ 一括インポートを使用して逆レベルを追加する場合は、ファイル名を変更する必要があります (例: '1-7(Raid).json')。\n\n
ファイルの読み取りに失敗しました!
対応する攻略ファイルが見つかりません!
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index be824a7e0c..0f6c4d9b0b 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -519,6 +519,7 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산)
사용「;」운영자 이름과 기술을 구분하기 위해 구분 기호「,」를 사용합니다. 예: W, 3; Ash, 2
전투 목록
시작하기 전에 레벨 선택 페이지로 전환하세요
+ (Raid)
공격대 난이도를 추가하려면 마우스 오른쪽 버튼을 클릭하세요.
비활성 작업을 지우려면 마우스 오른쪽 버튼을 클릭하세요.
반복 횟수
@@ -540,7 +541,7 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산)
지우기: 목록을 지우려면 왼쪽 클릭, 비활성화된 작업만 제거하려면 오른쪽 클릭을 하세요 \n
시작하기 전에 레벨 선택 화면으로 진입해야 합니다. 목표 지점으로의 이동은 지원되지 않습니다. \n
이성이 부족하거나, 전투가 실패하거나, 3성 클리어를 해결할 수 없는 경우 동작이 종료됩니다. \n
- 일괄 가져오기로 인위적인 레벨을 추가하려면, 파일명을 수정해야합니다(예: 1-7-Adverse).\n\n
+ 일괄 가져오기로 인위적인 레벨을 추가하려면, 파일명을 수정해야합니다(예: '1-7(Raid).json').\n\n
파일을 읽지 못했습니다!
해당 파일을 찾을 수 없습니다!
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 5532031d28..39a8b7e0bb 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -520,6 +520,7 @@
循环次数
战斗列表
开始前请切换至关卡选择页面
+ (突袭)
右键添加突袭难度
右键清除未激活任务
开始
@@ -540,7 +541,7 @@
清除: 左键清空列表,右键仅移除未激活的任务。\n
开始前,需要切换至对应关卡的选择界面,不支持跨章节导航。\n
遇到 理智不足、战斗失败、未能以三星结算 时将会中止运行。\n
- 批量导入时,添加突袭关需修改文件名 (如: 1-7-Adverse)。\n\n
+ 批量导入时,添加突袭关需修改文件名 (如: '1-7(Raid).json')。\n\n
读取文件失败!
未找到对应作业!
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index 25b7b29e9a..18aac881ec 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -517,6 +517,7 @@
使用「;」作為分隔符,用「,」分隔操作員姓名和技能,例:史尔特尔,3;艾雅法拉,1
戰鬥列表
開始前請切換至關卡選擇頁面
+ (突襲)
右鍵添加突襲難度
右鍵清除未激活任務
循環次數
@@ -538,7 +539,7 @@
清除: 左鍵清空列表,右鍵僅移除未激活的任務\n
開始前,需要切換至對應關卡的選擇界面,不支持跨章節導航\n
遇到 理智不足、戰鬥失敗、未能以三星結算 時將會中止運行\n
- 批次匯入時,新增突襲關需修改檔案名 (如: 1-7-Adverse)\n\n
+ 批次匯入時,新增突襲關需修改檔案名 (如: '1-7(Raid).json')\n\n
讀取檔案失敗!
未找到對應作業!
diff --git a/src/MaaWpfGui/ViewModels/CopilotItemViewModel.cs b/src/MaaWpfGui/ViewModels/CopilotItemViewModel.cs
index f4bf95a2c6..70c76944f8 100644
--- a/src/MaaWpfGui/ViewModels/CopilotItemViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/CopilotItemViewModel.cs
@@ -23,12 +23,14 @@ namespace MaaWpfGui.ViewModels
///
/// The name.
/// The original Name of file
+ /// 是否为突袭关
/// 作业站对应id,本地作业应为默认值0
/// isChecked
- public CopilotItemViewModel(string name, string filePath, int copilotId = 0, bool isChecked = true)
+ public CopilotItemViewModel(string name, string filePath, bool isRaid = false, int copilotId = 0, bool isChecked = true)
{
Name = name;
FilePath = filePath;
+ _isRaid = isRaid;
CopilotId = copilotId;
_isChecked = isChecked;
}
@@ -48,6 +50,21 @@ namespace MaaWpfGui.ViewModels
///
public int CopilotId { get; set; }
+ private bool _isRaid;
+
+ ///
+ /// Gets or sets a value indicating whether 突袭关
+ ///
+ public bool IsRaid
+ {
+ get => _isRaid;
+ set
+ {
+ SetAndNotify(ref _isRaid, value);
+ Instances.CopilotViewModel.SaveCopilotTask();
+ }
+ }
+
private bool _isChecked;
///
diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs
index 9b605a4bcc..bc18934a1e 100644
--- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs
@@ -21,7 +21,6 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
-using HandyControl.Tools.Extension;
using MaaWpfGui.Constants;
using MaaWpfGui.Helper;
using MaaWpfGui.States;
@@ -74,13 +73,24 @@ namespace MaaWpfGui.ViewModels.UI
}
JArray jArray = JArray.Parse(copilotTaskList);
- foreach (var item in jArray)
+ foreach (var it in jArray)
{
- if (((JObject)item).TryGetValue("file_path", out var token) && File.Exists(token.ToString()))
+ if (it is JObject item && item.TryGetValue("file_path", out var token) && File.Exists(token.ToString()))
{
- int copilotIdInFile = ((JObject)item).TryGetValue("copilot_id", out var copilotIdToken) ? (int)copilotIdToken : -1;
+ int copilotIdInFile = item.TryGetValue("copilot_id", out var copilotIdToken) ? (int)copilotIdToken : -1;
+ string name = (string)item["name"];
+ bool isRaid = false;
+ if (item.ContainsKey("is_raid"))
+ {
+ isRaid = (bool)item["is_raid"];
+ }
+ else if (name.EndsWith("-Adverse"))
+ {
+ name = name.Replace("-Adverse", string.Empty);
+ isRaid = true; // 用于迁移配置 (since 5.1.0, 后期移除)
+ }
- CopilotItemViewModels.Add(new CopilotItemViewModel((string)item["name"], (string)item["file_path"], copilotIdInFile, (bool)item["is_checked"]));
+ CopilotItemViewModels.Add(new CopilotItemViewModel(name, (string)item["file_path"], isRaid, copilotIdInFile, (bool)item["is_checked"]));
}
}
@@ -253,7 +263,7 @@ namespace MaaWpfGui.ViewModels.UI
private const string TempCopilotFile = "cache/_temp_copilot.json";
private string _taskType = "General";
- private const string StageNameRegex = @"(?:[a-z]{0,3})(?:\d{0,2})-(?:(?:A|B|C|D|EX|S|TR)-)?(?:\d{1,2})";
+ private const string StageNameRegex = @"(?:[a-z]{0,3})(?:\d{0,2})-(?:(?:A|B|C|D|EX|S|TR)-)?(?:\d{1,2})(\(Raid\))?";
///
/// 为自动战斗列表匹配名字
@@ -262,7 +272,7 @@ namespace MaaWpfGui.ViewModels.UI
/// 关卡名 or string.Empty
private static string FindStageName(params string[] names)
{
- names = names.Where(str => !str.IsNullOrEmpty()).ToArray();
+ names = names.Where(str => !string.IsNullOrEmpty(str)).ToArray();
if (names.Length == 0)
{
return string.Empty;
@@ -270,7 +280,7 @@ namespace MaaWpfGui.ViewModels.UI
// 一旦有由小写字母、数字、'-'组成的name则视为关卡名直接使用
var directName = names.FirstOrDefault(name => name.ToLower().All(c => (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-'));
- if (!directName.IsNullOrEmpty())
+ if (!string.IsNullOrEmpty(directName))
{
return directName;
}
@@ -468,7 +478,7 @@ namespace MaaWpfGui.ViewModels.UI
return;
}
- Dictionary taskPairs = new Dictionary();
+ Dictionary taskPairs = new();
foreach (var file in dialog.FileNames)
{
var fileInfo = new FileInfo(file);
@@ -490,10 +500,10 @@ namespace MaaWpfGui.ViewModels.UI
return;
}
- var fileName = fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length).Replace("突袭", "-Adverse");
+ var fileName = fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length);
var stageName = FindStageName(fileName);
- if (stageName.IsNullOrEmpty())
+ if (string.IsNullOrEmpty(stageName))
{
AddLog($"invalid name to navigate: {fileName}[{fileInfo.FullName}]", UiLogColor.Error);
return;
@@ -526,7 +536,9 @@ namespace MaaWpfGui.ViewModels.UI
File.Copy(taskPair.Value, jsonPath, true);
}
- var item = new CopilotItemViewModel(taskPair.Key, jsonPath)
+ var navigateName = taskPair.Key;
+ var isRaid = navigateName.EndsWith("(Raid)");
+ var item = new CopilotItemViewModel(taskPair.Key.Replace("(Raid)", string.Empty), jsonPath, isRaid)
{
Index = CopilotItemViewModels.Count,
};
@@ -705,10 +717,10 @@ namespace MaaWpfGui.ViewModels.UI
// ReSharper disable once UnusedMember.Global
public void AddCopilotTask()
{
- var stageName = CopilotTaskName.Trim().Replace("突袭", "-Adverse");
- if (!stageName.IsNullOrEmpty())
+ var stageName = CopilotTaskName.Trim();
+ if (!string.IsNullOrEmpty(stageName))
{
- AddCopilotTaskToList(stageName);
+ AddCopilotTaskToList(stageName, false);
}
}
@@ -716,21 +728,16 @@ namespace MaaWpfGui.ViewModels.UI
// ReSharper disable once UnusedMember.Global
public void AddCopilotTask_Adverse()
{
- var stageName = CopilotTaskName.Trim().Replace("突袭", "-Adverse");
- if (!stageName.EndsWith("-Adverse"))
+ var stageName = CopilotTaskName.Trim();
+ if (!string.IsNullOrEmpty(stageName))
{
- stageName += "-Adverse";
- }
-
- if (!stageName.IsNullOrEmpty())
- {
- AddCopilotTaskToList(stageName);
+ AddCopilotTaskToList(stageName, true);
}
}
- private void AddCopilotTaskToList(string stageName)
+ private void AddCopilotTaskToList(string stageName, bool isRaid)
{
- var jsonPath = $"{CopilotJsonDir}/{stageName}.json";
+ var cachePath = $"{CopilotJsonDir}/{stageName}" + (isRaid ? "(Raid)" : string.Empty) + ".json";
try
{
@@ -743,13 +750,13 @@ namespace MaaWpfGui.ViewModels.UI
try
{
- if (jsonPath != (IsDataFromWeb ? TempCopilotFile : Filename))
+ if (cachePath != (IsDataFromWeb ? TempCopilotFile : Filename))
{
// 相同路径跳拷贝
- File.Copy(IsDataFromWeb ? TempCopilotFile : Filename, jsonPath, true);
+ File.Copy(IsDataFromWeb ? TempCopilotFile : Filename, cachePath, true);
}
- var item = new CopilotItemViewModel(stageName, jsonPath)
+ var item = new CopilotItemViewModel(stageName, cachePath, isRaid)
{
Index = CopilotItemViewModels.Count,
};
@@ -776,6 +783,7 @@ namespace MaaWpfGui.ViewModels.UI
["name"] = item.Name,
["file_path"] = item.FilePath,
["copilot_id"] = item.CopilotId,
+ ["is_raid"] = item.IsRaid,
["is_checked"] = item.IsChecked,
}).ToList());
ConfigurationHelper.SetValue(ConfigurationKeys.CopilotTaskList, JsonConvert.SerializeObject(jArray));
@@ -928,7 +936,7 @@ namespace MaaWpfGui.ViewModels.UI
mUserAdditional.Add(new JObject
{
["name"] = match.Groups[1].Value.Trim(),
- ["skill"] = match.Groups[2].Value.IsNullOrEmpty() ? 0 : int.Parse(match.Groups[2].Value),
+ ["skill"] = string.IsNullOrEmpty(match.Groups[2].Value) ? 0 : int.Parse(match.Groups[2].Value),
});
}
@@ -940,7 +948,7 @@ namespace MaaWpfGui.ViewModels.UI
foreach (var model in CopilotItemViewModels.Where(i => i.IsChecked))
{
_copilotIdList.Add(model.CopilotId);
- ret &= Instances.AsstProxy.AsstStartCopilot(model.FilePath, Form, AddTrust, AddUserAdditional, mUserAdditional, UseCopilotList, model.Name.Replace("-Adverse", string.Empty), model.Name.Contains("-Adverse"), _taskType, Loop ? LoopTimes : 1, _useSanityPotion, false);
+ ret &= Instances.AsstProxy.AsstStartCopilot(model.FilePath, Form, AddTrust, AddUserAdditional, mUserAdditional, UseCopilotList, model.Name, model.IsRaid, _taskType, Loop ? LoopTimes : 1, _useSanityPotion, false);
startAny = true;
}
diff --git a/src/MaaWpfGui/Views/UI/CopilotView.xaml b/src/MaaWpfGui/Views/UI/CopilotView.xaml
index 879971cffc..17591cfaa4 100644
--- a/src/MaaWpfGui/Views/UI/CopilotView.xaml
+++ b/src/MaaWpfGui/Views/UI/CopilotView.xaml
@@ -197,6 +197,7 @@
x:Name="CopilotList"
Grid.Row="0"
Grid.ColumnSpan="4"
+ HorizontalContentAlignment="Stretch"
dd:DragDrop.IsDragSource="{Binding Idle}"
dd:DragDrop.IsDropTarget="{Binding Idle}"
hc:BorderElement.CornerRadius="4,4,0,0"
@@ -210,18 +211,24 @@
-
+
+
-
-
+