diff --git a/src/MaaCore/Task/Miscellaneous/OperBoxRecognitionTask.cpp b/src/MaaCore/Task/Miscellaneous/OperBoxRecognitionTask.cpp
index 69a4f6ea1f..c59e1d35b3 100644
--- a/src/MaaCore/Task/Miscellaneous/OperBoxRecognitionTask.cpp
+++ b/src/MaaCore/Task/Miscellaneous/OperBoxRecognitionTask.cpp
@@ -62,14 +62,23 @@ void asst::OperBoxRecognitionTask::callback_analyze_result(bool done)
json::value info = basic_info_with_what("OperBoxInfo");
auto& details = info["details"];
details["done"] = done;
- auto& box_oper = details["operbox"].as_array();
+ auto& all_opers = details["all_opers"].as_array();
+ auto& own_opers = details["own_opers"].as_array();
for (const auto& name : all_oper_names) {
- box_oper.emplace_back(json::object {
+ bool own = m_own_opers.contains(name);
+ all_opers.emplace_back(json::object {
{ "id", BattleData.get_id(name) },
{ "name", name },
- { "own", m_own_opers.contains(name) },
+ { "own", own },
});
+ if (own) {
+ own_opers.emplace_back(json::object {
+ { "id", BattleData.get_id(name) }, { "name", name }, { "own", own },
+ // TODO
+ // { "elite", 0 }, { "level", 0 },
+ });
+ }
}
callback(AsstMsg::SubTaskExtraInfo, info);
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 8b309a1061..231a9ddbc1 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -385,6 +385,7 @@
Start to identify
This function is still in testing, please sort the operator list by rarity or level. If the statistics are wrong, please pack the debug/oper file and submit an issue to us~
Not owned: {0} : \n\n{1}\n\nOwned: {2} : \n\n{3}
+ Copy to clipboard
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 652ce17cc1..712f1a2d35 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -387,6 +387,7 @@
该功能尚处于测试阶段,干员列表请用稀有度和等级排序,若统计有误,欢迎打包 debug/oper 文件后向我们提交issue ~
未拥有:{0} 名:\n\n{1}\n\n已拥有:{2} 名:\n\n{3}
开始识别
+ 复制到剪切板
diff --git a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
index 850343c847..34f4f4b3ff 100644
--- a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
@@ -376,9 +376,12 @@ namespace MaaWpfGui.ViewModels.UI
set => SetAndNotify(ref _operBoxResult, value);
}
+ private string _operBoxExportData = string.Empty;
+
public bool OperBoxParse(JObject details)
{
- JArray operBoxs = (JArray)details["operbox"];
+ JArray operBoxs = (JArray)details["all_opers"];
+
List operHave = new List();
List operNotHave = new List();
@@ -429,6 +432,7 @@ namespace MaaWpfGui.ViewModels.UI
{
OperBoxInfo = LocalizationHelper.GetString("IdentificationCompleted") + "\n" + LocalizationHelper.GetString("OperBoxRecognitionTip");
OperBoxResult = string.Format(LocalizationHelper.GetString("OperBoxRecognitionResult"), operNotHave.Count, operNotHaveNames, operHave.Count, operHaveNames);
+ _operBoxExportData = details["own_opers"].ToString();
}
else
{
@@ -440,6 +444,8 @@ namespace MaaWpfGui.ViewModels.UI
public async void StartOperBox()
{
+ _operBoxExportData = string.Empty;
+
string errMsg = string.Empty;
OperBoxInfo = LocalizationHelper.GetString("ConnectingToEmulator");
bool caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
@@ -455,6 +461,17 @@ namespace MaaWpfGui.ViewModels.UI
}
}
+ public void ExportOperBox()
+ {
+ if (string.IsNullOrEmpty(_operBoxExportData))
+ {
+ return;
+ }
+
+ Clipboard.SetDataObject(_operBoxExportData);
+ OperBoxInfo = LocalizationHelper.GetString("CopiedToClipboard");
+ }
+
#endregion OperBox
}
}
diff --git a/src/MaaWpfGui/Views/UI/RecognizerView.xaml b/src/MaaWpfGui/Views/UI/RecognizerView.xaml
index 6cc6f1b09c..8a73a08457 100644
--- a/src/MaaWpfGui/Views/UI/RecognizerView.xaml
+++ b/src/MaaWpfGui/Views/UI/RecognizerView.xaml
@@ -5,25 +5,24 @@
xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding"
xmlns:controls="clr-namespace:MaaWpfGui.Styles.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:styles="clr-namespace:MaaWpfGui.Styles"
xmlns:ui="clr-namespace:MaaWpfGui.ViewModels.UI"
xmlns:viewModels="clr-namespace:MaaWpfGui.ViewModels"
xmlns:vm="clr-namespace:MaaWpfGui"
- xmlns:hc="https://handyorg.github.io/handycontrol"
d:DataContext="{d:DesignInstance {x:Type ui:RecognizerViewModel}}"
d:DesignHeight="1200"
d:DesignWidth="800"
mc:Ignorable="d">
-
+
@@ -31,8 +30,8 @@
+ VerticalAlignment="Top"
+ IsInertiaEnabled="True">
-
+
@@ -121,8 +119,8 @@
+ VerticalAlignment="Top"
+ IsInertiaEnabled="True">
-
+
-
-
+
+
+ VerticalAlignment="Top"
+ IsInertiaEnabled="True">
+ TextWrapping="Wrap" />
+ TextWrapping="Wrap" />
-
+
+ Content="{DynamicResource BeganToOperBoxRecognition}" />