mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-07 21:40:31 +08:00
Compare commits
9 Commits
docs/task-
...
feat/dg-la
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb31cbf511 | ||
|
|
0dbf8345e6 | ||
|
|
4c95b738e0 | ||
|
|
6f592771d8 | ||
|
|
e55fd4a093 | ||
|
|
874632f926 | ||
|
|
ce68e802f1 | ||
|
|
55d7b7127f | ||
|
|
6951b1e881 |
@@ -1,174 +0,0 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EN/@EntryIndexedValue">EN</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KR/@EntryIndexedValue">KR</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JP/@EntryIndexedValue">JP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GUI/@EntryIndexedValue">GUI</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SWMINIMIZE/@EntryIndexedValue">SWMINIMIZE</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=AP/@EntryIndexedValue">AP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=AP_002D/@EntryIndexedValue">AP-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CA/@EntryIndexedValue">CA</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CA_002D/@EntryIndexedValue">CA-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CE/@EntryIndexedValue">CE</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CE_002D/@EntryIndexedValue">CE-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=EN/@EntryIndexedValue">EN</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=IS/@EntryIndexedValue">IS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=JP/@EntryIndexedValue">JP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=KR/@EntryIndexedValue">KR</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LD/@EntryIndexedValue">LD</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LS/@EntryIndexedValue">LS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LS_002D/@EntryIndexedValue">LS-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DA/@EntryIndexedValue">PR-A</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DA_002D/@EntryIndexedValue">PR-A-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DB/@EntryIndexedValue">PR-B</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DB_002D/@EntryIndexedValue">PR-B-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DC/@EntryIndexedValue">PR-C</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DC_002D/@EntryIndexedValue">PR-C-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DD/@EntryIndexedValue">PR-D</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DD_002D/@EntryIndexedValue">PR-D-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SK/@EntryIndexedValue">SK</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SK_002D/@EntryIndexedValue">SK-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SSS/@EntryIndexedValue">SSS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=WSA/@EntryIndexedValue">WSA</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=XYAZ/@EntryIndexedValue">XYAZ</s:String>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=Github/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=_4E00_9375_8F2A/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=_591C_95F4_6A21_5F0F/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acguad/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acpion/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acspec/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acsupo/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=advapi/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Aero/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Affero/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=aguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=amedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=amiya/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=apionr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=arget/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Arknights/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=arkplanner/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=asnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=autofill/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Bilibili/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Bluestacks/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=bsconsole/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ccast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cdfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Chayn/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Chyan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cmedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collapsal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cpione/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=csnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cspec/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=csuppo/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ctrler/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=desp/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=dnplayer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Ehem/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Epilog/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=esource/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Eyjafjalla/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Favourite/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=filetime/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=findstr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=FLASHW/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=FLASHWINFO/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=foldartal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Foldartals/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=framerate/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=furni/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gacha/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gavial/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Grandet/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hotkey/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=hwnd/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Infrast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Inited/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=iter/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=jsend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ldconsole/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ldplayer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=LD_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=leidian/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Lolicon/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=lpwndpl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ls_005B_0022sub/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=luestacks/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=maatouch/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=MAA_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=memuc/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Minitouch/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mirrorc/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mirrorchyan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mizuki/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mrfz/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mumu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nahimic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nemu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Netease/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=netstat/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nonfriend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=notstationed/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=objstr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=oper/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=opers/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Originite/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Originium/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=originiums/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Orundum/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Orundums/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=o_FF9Fv_FF9F/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pallas/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=pidl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pormpt/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=powrprof/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ppidl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Prts/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=pwfi/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=qmsg/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Raidian/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rcast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rdfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=removelist/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rmean/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rmedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Roguelike/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rsnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sami/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sarkaz/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Screencap/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=sctp/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=serilog/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Showminimized/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Shownormal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Skland/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=specialaccess/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=spid/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=SSS/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=STGM/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stormeye/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=strlen/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stylet/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=subtask/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Suppressions/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Surtr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=SWMINIMIZE/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=taskchain/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Todays/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=txwy/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ucrtbase/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=vmonitor/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=XYAZ/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yahei/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=yituliu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yostar/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ZOOT/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0020_0020_0020wp_002ELength_0020/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0020_003D_0020stri/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
@@ -6,6 +6,15 @@
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
void ASST_CALL callback(AsstMsgId msg, const char* details_json, void* custom_arg)
|
||||
{
|
||||
if (msg == 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::printf("%d: %s", msg, details_json);
|
||||
}
|
||||
|
||||
int main([[maybe_unused]] int argc, char** argv)
|
||||
{
|
||||
const auto cur_path = std::filesystem::path(argv[0]).parent_path();
|
||||
@@ -38,7 +47,7 @@ int main([[maybe_unused]] int argc, char** argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
auto ptr = AsstCreate();
|
||||
auto ptr = AsstCreateEx(callback, nullptr);
|
||||
if (ptr == nullptr) {
|
||||
std::cerr << "create failed" << std::endl;
|
||||
return -1;
|
||||
@@ -50,10 +59,11 @@ int main([[maybe_unused]] int argc, char** argv)
|
||||
#endif
|
||||
|
||||
#ifndef ASST_DEBUG
|
||||
AsstAsyncConnect(ptr, "adb", "127.0.0.1:5555", nullptr, true);
|
||||
//AsstAsyncConnect(ptr, "adb", "127.0.0.1:5555", nullptr, true);
|
||||
#else
|
||||
AsstAsyncConnect(ptr, "adb", "127.0.0.1:5555", "DEBUG", true);
|
||||
AsstAsyncConnect(ptr, R"("D:\\Program Files\\Netease\\MuMu\\nx_main\\adb.exe")", "127.0.0.1:5555", "", true);
|
||||
#endif
|
||||
AsstAsyncConnect(ptr, R"("D:\\Program Files\\Netease\\MuMu\\nx_main\\adb.exe")", "127.0.0.1:5555", "", true);
|
||||
if (!AsstConnected(ptr)) {
|
||||
std::cerr << "connect failed" << std::endl;
|
||||
AsstDestroy(ptr);
|
||||
@@ -65,7 +75,7 @@ int main([[maybe_unused]] int argc, char** argv)
|
||||
#ifndef ASST_DEBUG
|
||||
|
||||
/* 详细参数可参考 docs / 集成文档.md */
|
||||
AsstAppendTask(ptr, "StartUp", nullptr);
|
||||
/*AsstAppendTask(ptr, "StartUp", nullptr);
|
||||
|
||||
AsstAppendTask(ptr, "Fight", R"(
|
||||
{
|
||||
@@ -120,20 +130,29 @@ int main([[maybe_unused]] int argc, char** argv)
|
||||
"roles": "稳扎稳打",
|
||||
"core_char": "维什戴尔"
|
||||
}
|
||||
)");
|
||||
)");*/
|
||||
|
||||
#else
|
||||
|
||||
AsstAppendTask(ptr, "Debug", nullptr);
|
||||
//AsstAppendTask(ptr, "Debug", nullptr);
|
||||
|
||||
#endif
|
||||
|
||||
AsstStart(ptr);
|
||||
// AsstAppendTask(ptr, "Copilot", R"(
|
||||
//{
|
||||
// "filename": "D:\\MaaAssistantArknights\\resource\\copilot\\OF-1_credit_fight.json"
|
||||
//})");
|
||||
|
||||
while (AsstRunning(ptr)) {
|
||||
std::this_thread::yield();
|
||||
bool stop = false;
|
||||
while (!stop) {
|
||||
AsstAppendTask(ptr, "DGLab", nullptr);
|
||||
AsstStart(ptr);
|
||||
|
||||
while (AsstRunning(ptr)) {
|
||||
std::this_thread::yield();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
AsstStop(ptr);
|
||||
AsstDestroy(ptr);
|
||||
ptr = nullptr;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "Task/Interface/CloseDownTask.h"
|
||||
#include "Task/Interface/CopilotTask.h"
|
||||
#include "Task/Interface/CustomTask.h"
|
||||
#include "Task/Interface/DGLabTask.h"
|
||||
#include "Task/Interface/DepotTask.h"
|
||||
#include "Task/Interface/FightTask.h"
|
||||
#include "Task/Interface/InfrastTask.h"
|
||||
@@ -237,6 +238,7 @@ asst::Assistant::TaskId asst::Assistant::append_task(const std::string& type, co
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DepotTask)
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(OperBoxTask)
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(ReclamationTask)
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DGLabTask)
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(CustomTask)
|
||||
#ifdef ASST_DEBUG
|
||||
ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DebugTask)
|
||||
|
||||
@@ -128,8 +128,10 @@
|
||||
<ClInclude Include="Task\Infrast\InfrastProcessingTask.h" />
|
||||
<ClInclude Include="Task\Infrast\InfrastTrainingTask.h" />
|
||||
<ClInclude Include="Task\Interface\CustomTask.h" />
|
||||
<ClInclude Include="Task\Interface\DGLabTask.h" />
|
||||
<ClInclude Include="Task\Interface\VideoRecognitionTask.h" />
|
||||
<ClInclude Include="Task\Interface\OperBoxTask.h" />
|
||||
<ClInclude Include="Task\Miscellaneous\BattleSpyTask.h" />
|
||||
<ClInclude Include="Task\Miscellaneous\ScreenshotTaskPlugin.h" />
|
||||
<ClInclude Include="Task\Miscellaneous\OperBoxRecognitionTask.h" />
|
||||
<ClInclude Include="Task\Miscellaneous\AccountSwitchTask.h" />
|
||||
@@ -327,8 +329,10 @@
|
||||
<ClCompile Include="Task\Fight\StageQueueMissionCompletedTaskPlugin.cpp" />
|
||||
<ClCompile Include="Task\Infrast\InfrastProcessingTask.cpp" />
|
||||
<ClCompile Include="Task\Infrast\InfrastTrainingTask.cpp" />
|
||||
<ClCompile Include="Task\Interface\DGLabTask.cpp" />
|
||||
<ClCompile Include="Task\Interface\VideoRecognitionTask.cpp" />
|
||||
<ClCompile Include="Task\Interface\OperBoxTask.cpp" />
|
||||
<ClCompile Include="Task\Miscellaneous\BattleSpyTask.cpp" />
|
||||
<ClCompile Include="Task\Miscellaneous\ScreenshotTaskPlugin.cpp" />
|
||||
<ClCompile Include="Task\Miscellaneous\OperBoxRecognitionTask.cpp" />
|
||||
<ClCompile Include="Task\Miscellaneous\AccountSwitchTask.cpp" />
|
||||
|
||||
@@ -1061,6 +1061,12 @@
|
||||
<ClInclude Include="Vision\Miscellaneous\OperNameAnalyzer.h">
|
||||
<Filter>Source\Vision\Miscellaneous</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Task\Interface\DGLabTask.h">
|
||||
<Filter>Source\Task\Interface</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Task\Miscellaneous\BattleSpyTask.h">
|
||||
<Filter>Source\Task\Miscellaneous</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Vision\VisionHelper.cpp">
|
||||
@@ -1581,6 +1587,12 @@
|
||||
<ClCompile Include="Vision\Miscellaneous\OperNameAnalyzer.cpp">
|
||||
<Filter>Source\Vision\Miscellaneous</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Task\Interface\DGLabTask.cpp">
|
||||
<Filter>Source\Task\Interface</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Task\Miscellaneous\BattleSpyTask.cpp">
|
||||
<Filter>Source\Task\Miscellaneous</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Natvis Include="meojson.natvis" />
|
||||
|
||||
20
src/MaaCore/Task/Interface/DGLabTask.cpp
Normal file
20
src/MaaCore/Task/Interface/DGLabTask.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "DGLabTask.h"
|
||||
|
||||
#include "Utils/Logger.hpp"
|
||||
|
||||
asst::DGLabTask::DGLabTask(const AsstCallback& callback, Assistant* inst) :
|
||||
InterfaceTask(callback, inst, TaskType),
|
||||
m_battle_spy_ptr(std::make_shared<BattleSpyTask>(callback, inst, TaskType))
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
m_subtasks.emplace_back(m_battle_spy_ptr);
|
||||
}
|
||||
|
||||
bool asst::DGLabTask::set_params([[maybe_unused]] const json::value& params)
|
||||
{
|
||||
// 一直监视,直到战斗结束
|
||||
m_battle_spy_ptr->set_wait_until_end(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
20
src/MaaCore/Task/Interface/DGLabTask.h
Normal file
20
src/MaaCore/Task/Interface/DGLabTask.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include "Task/InterfaceTask.h"
|
||||
#include <Task/Miscellaneous/BattleSpyTask.h>
|
||||
|
||||
namespace asst
|
||||
{
|
||||
class DGLabTask final : public InterfaceTask
|
||||
{
|
||||
public:
|
||||
inline static constexpr std::string_view TaskType = "DGLab";
|
||||
|
||||
DGLabTask(const AsstCallback& callback, Assistant* inst);
|
||||
virtual ~DGLabTask() override = default;
|
||||
|
||||
bool set_params(const json::value& params) override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<BattleSpyTask> m_battle_spy_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
318
src/MaaCore/Task/Miscellaneous/BattleSpyTask.cpp
Normal file
318
src/MaaCore/Task/Miscellaneous/BattleSpyTask.cpp
Normal file
@@ -0,0 +1,318 @@
|
||||
#include "BattleSpyTask.h"
|
||||
|
||||
#include "Utils/Ranges.hpp"
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <thread>
|
||||
|
||||
#include "Utils/NoWarningCV.h"
|
||||
|
||||
#include "Config/GeneralConfig.h"
|
||||
#include "Config/Miscellaneous/BattleDataConfig.h"
|
||||
#include "Config/Miscellaneous/CopilotConfig.h"
|
||||
#include "Config/Miscellaneous/TilePack.h"
|
||||
#include "Config/TaskData.h"
|
||||
#include "Controller/Controller.h"
|
||||
#include "Task/ProcessTask.h"
|
||||
#include "Utils/Algorithm.hpp"
|
||||
#include "Utils/ImageIo.hpp"
|
||||
#include "Utils/Logger.hpp"
|
||||
#include "Vision/Battle/BattlefieldMatcher.h"
|
||||
#include "Vision/Matcher.h"
|
||||
#include "Vision/RegionOCRer.h"
|
||||
#include <Vision/Miscellaneous/StageDropsImageAnalyzer.h>
|
||||
#include <Vision/Battle/BattlefieldDetector.h>
|
||||
#include <Vision/Battle/BattlefieldClassifier.h>
|
||||
|
||||
using namespace asst::battle;
|
||||
using namespace asst::battle::copilot;
|
||||
|
||||
asst::BattleSpyTask::BattleSpyTask(const AsstCallback& callback, Assistant* inst, std::string_view task_chain) :
|
||||
AbstractTask(callback, inst, task_chain),
|
||||
BattleHelper(inst)
|
||||
{
|
||||
}
|
||||
|
||||
bool asst::BattleSpyTask::_run()
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
json::value info = basic_info_with_what("DGLabMsg");
|
||||
auto& details = info["details"];
|
||||
details["Msg"] = "进入 asst::BattleSpyTask::_run() 了";
|
||||
callback(AsstMsg::SubTaskExtraInfo, info);
|
||||
|
||||
clear();
|
||||
|
||||
// TODO, 识别关卡名
|
||||
/*if (!calc_tiles_info(m_stage_name)) {
|
||||
Log.error("get stage info failed");
|
||||
json::value error_info = basic_info_with_what("GetStageInfoFailed");
|
||||
callback(AsstMsg::SubTaskError, error_info);
|
||||
return false;
|
||||
}*/
|
||||
|
||||
if (!update_deployment(true)) {
|
||||
Log.error("update deployment failed");
|
||||
json::value error_info = basic_info_with_what("UpdateDeploymentFailed");
|
||||
details["Msg"] = "update deployment failed";
|
||||
callback(AsstMsg::SubTaskError, error_info);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!to_group()) {
|
||||
Log.error("to_group failed");
|
||||
json::value error_info = basic_info_with_what("ToGroupFailed");
|
||||
details["Msg"] = "to_group failed";
|
||||
callback(AsstMsg::SubTaskError, error_info);
|
||||
return false;
|
||||
}
|
||||
|
||||
while (need_to_wait_until_end() && check_in_battle() && update_deployment() && update_kills(ctrler()->get_image())) {
|
||||
// TODO: 分析技能准备情况
|
||||
//cv::Mat image = ctrler()->get_image();
|
||||
//BattlefieldDetector analyzer(image);
|
||||
//analyzer.set_object_of_interest({ .operators = true });
|
||||
//auto result_opt = analyzer.analyze();
|
||||
//for (auto& it : result_opt->operators) {
|
||||
// auto f = image(
|
||||
// cv::Rect(it.rect.x, it.rect.y + static_cast<int>(image.rows * -0.2), it.rect.width, it.rect.height + static_cast<int>(image.rows * 0.17)));
|
||||
// cv::imshow("test1", f);
|
||||
// cv::waitKey(0);
|
||||
// auto ready = is_skill_ready(f);
|
||||
// printf("%d", ready);
|
||||
//}
|
||||
|
||||
//cv::imshow("test", analyzer.get_draw());
|
||||
//cv::waitKey(0);
|
||||
|
||||
// 获取携带干员
|
||||
auto names =
|
||||
m_cur_deployment_opers | std::views::transform([](const DeploymentOper& user) { return user.name; });
|
||||
|
||||
json::value value;
|
||||
value["deployment"] = std::vector<std::string> { names.begin(), names.end() };
|
||||
value["kills"] = m_kills;
|
||||
notify_action(value);
|
||||
}
|
||||
|
||||
int maxTry = 5;
|
||||
for (int i = 0; i < maxTry; i++) {
|
||||
sleep(2000);
|
||||
StageDropsImageAnalyzer analyzer(ctrler()->get_image());
|
||||
// 大概率失败
|
||||
// 也有可能是因为匹配到一些关卡,然后输出 `_INVALID_`,见 `StageDrops-StageName`
|
||||
if (analyzer.analyze()) {
|
||||
auto&& [code, difficulty] = analyzer.get_stage_key();
|
||||
|
||||
std::string stage_code = std::move(code);
|
||||
ranges::transform(stage_code, stage_code.begin(), [](char ch) -> char {
|
||||
return static_cast<char>(::toupper(ch));
|
||||
});
|
||||
|
||||
Log.info(__FUNCTION__, "Stage Code:", stage_code, "Stars:", analyzer.get_stars());
|
||||
|
||||
json::value stage_info = basic_info_with_what("StageAnalysisCompleted");
|
||||
auto& stage_details = stage_info["details"];
|
||||
stage_details["stage_code"] = stage_code;
|
||||
stage_details["stars"] = analyzer.get_stars();
|
||||
stage_details["difficulty"] = difficulty;
|
||||
int stars = analyzer.get_stars();
|
||||
details["Msg"] = stage_code + ", " + std::to_string(stars) + ", " + enum_to_string(difficulty);
|
||||
callback(AsstMsg::SubTaskExtraInfo, stage_info);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
// 几星完成作战?
|
||||
int star = analyzer.get_stars();
|
||||
auto&& [code, difficulty] = analyzer.get_stage_key();
|
||||
|
||||
// 识别出内容就退出
|
||||
if (!code.empty()) {
|
||||
notify_action({ { "star", star }, { "difficulty", difficulty } });
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == maxTry - 1) {
|
||||
Log.warn(__FUNCTION__, "Failed to analyze stage after", maxTry, "attempts");
|
||||
json::value warn_info = basic_info_with_what("StageAnalysisFailed");
|
||||
auto& warn_details = warn_info["details"];
|
||||
warn_details["attempts"] = maxTry;
|
||||
details["Msg"] = "__FUNCTION__, Failed to analyze stage after " + std::to_string(maxTry) + " attempts";
|
||||
callback(AsstMsg::SubTaskExtraInfo, warn_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
json::value completion_info = basic_info_with_what("BattleSpyTaskCompleted");
|
||||
callback(AsstMsg::SubTaskExtraInfo, completion_info);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void asst::BattleSpyTask::clear()
|
||||
{
|
||||
BattleHelper::clear();
|
||||
|
||||
m_oper_in_group.clear();
|
||||
m_in_bullet_time = false;
|
||||
|
||||
json::value clear_info = basic_info_with_what("BattleSpyTaskCleared");
|
||||
auto& details = clear_info["details"];
|
||||
details["Msg"] = "BattleSpyTask cleared";
|
||||
callback(AsstMsg::SubTaskExtraInfo, clear_info);
|
||||
}
|
||||
|
||||
bool asst::BattleSpyTask::set_stage_name(const std::string& stage_name)
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
if (!BattleHelper::set_stage_name(stage_name)) {
|
||||
json::value info = basic_info_with_what("UnsupportedLevel");
|
||||
auto& details = info["details"];
|
||||
details["level"] = stage_name;
|
||||
callback(AsstMsg::SubTaskExtraInfo, info);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
m_combat_data = Copilot.get_data();
|
||||
|
||||
json::value stage_set_info = basic_info_with_what("StageNameSet");
|
||||
auto& stage_set_details = stage_set_info["details"];
|
||||
stage_set_details["stage_name"] = stage_name;
|
||||
auto& details = stage_set_info["details"];
|
||||
details["Msg"] = "Stage name set to " + stage_name;
|
||||
callback(AsstMsg::SubTaskExtraInfo, stage_set_info);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void asst::BattleSpyTask::set_wait_until_end(bool wait_until_end)
|
||||
{
|
||||
m_need_to_wait_until_end = wait_until_end;
|
||||
}
|
||||
|
||||
void
|
||||
asst::BattleSpyTask::set_formation_task_ptr(std::shared_ptr<std::unordered_map<std::string, std::string>> value)
|
||||
{
|
||||
m_formation_ptr = value;
|
||||
}
|
||||
|
||||
bool asst::BattleSpyTask::to_group()
|
||||
{
|
||||
std::unordered_map<std::string, std::vector<std::string>> groups;
|
||||
// 从编队任务中获取<干员-组名>映射
|
||||
if (m_formation_ptr != nullptr) {
|
||||
for (const auto& [group, oper] : *m_formation_ptr) {
|
||||
groups.emplace(oper, std::vector<std::string> { group });
|
||||
}
|
||||
}
|
||||
// 补充剩余的干员
|
||||
for (const auto& [group_name, oper_list] : get_combat_data().groups) {
|
||||
if (groups.contains(group_name)) {
|
||||
continue;
|
||||
}
|
||||
std::vector<std::string> oper_name_list;
|
||||
ranges::transform(oper_list, std::back_inserter(oper_name_list), [](const auto& oper) { return oper.name; });
|
||||
groups.emplace(group_name, std::move(oper_name_list));
|
||||
}
|
||||
|
||||
std::unordered_set<std::string> char_set; // 干员集合
|
||||
for (const auto& oper : m_cur_deployment_opers) {
|
||||
char_set.emplace(oper.name);
|
||||
}
|
||||
|
||||
auto result_opt = algorithm::get_char_allocation_for_each_group(groups, char_set);
|
||||
if (result_opt) {
|
||||
m_oper_in_group = *result_opt;
|
||||
}
|
||||
else {
|
||||
Log.warn("get_char_allocation_for_each_group failed");
|
||||
json::value warn_info = basic_info_with_what("CharAllocationFailed");
|
||||
auto& details = warn_info["details"];
|
||||
details["Msg"] = "get_char_allocation_for_each_group failed";
|
||||
callback(AsstMsg::SubTaskExtraInfo, warn_info);
|
||||
for (const auto& [gp, names] : groups) {
|
||||
if (names.empty()) {
|
||||
continue;
|
||||
}
|
||||
m_oper_in_group.emplace(gp, names.front());
|
||||
}
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, std::string> ungrouped;
|
||||
const auto& grouped_view = m_oper_in_group | views::values;
|
||||
for (const auto& name : char_set) {
|
||||
if (ranges::find(grouped_view, name) != grouped_view.end()) {
|
||||
continue;
|
||||
}
|
||||
ungrouped.emplace(name, name);
|
||||
}
|
||||
m_oper_in_group.merge(ungrouped);
|
||||
|
||||
for (const auto& action : m_combat_data.actions) {
|
||||
const std::string& action_name = action.name;
|
||||
if (action_name.empty() || m_oper_in_group.contains(action_name)) {
|
||||
continue;
|
||||
}
|
||||
m_oper_in_group.emplace(action_name, action_name);
|
||||
}
|
||||
|
||||
for (const auto& [group_name, oper_name] : m_oper_in_group) {
|
||||
const auto& group_it = ranges::find_if(get_combat_data().groups, [&](const OperUsageGroup& pair) {
|
||||
return pair.first == group_name;
|
||||
});
|
||||
if (group_it == get_combat_data().groups.end()) {
|
||||
Log.warn(__FUNCTION__, "Group not found in combat data: ", group_name);
|
||||
json::value warn_info = basic_info_with_what("GroupNotFoundInCombatData");
|
||||
auto& group_details = warn_info["details"];
|
||||
group_details["group_name"] = group_name;
|
||||
auto& details = warn_info["details"];
|
||||
details["Msg"] = "Group not found in combat data: " + group_name;
|
||||
callback(AsstMsg::SubTaskExtraInfo, warn_info);
|
||||
continue;
|
||||
}
|
||||
const auto& this_group = group_it->second;
|
||||
// there is a build error on macOS
|
||||
// https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/3779762713/jobs/6425284487
|
||||
const std::string& oper_name_for_lambda = oper_name;
|
||||
auto iter = ranges::find_if(this_group, [&](const auto& oper) { return oper.name == oper_name_for_lambda; });
|
||||
if (iter == this_group.end()) {
|
||||
continue;
|
||||
}
|
||||
m_skill_usage.emplace(oper_name, iter->skill_usage);
|
||||
m_skill_times.emplace(oper_name, iter->skill_times);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void asst::BattleSpyTask::notify_action(const json::value& value)
|
||||
{
|
||||
json::value info = basic_info_with_what("BattleSpyTask");
|
||||
info["details"] = value;
|
||||
|
||||
callback(AsstMsg::SubTaskExtraInfo, info);
|
||||
}
|
||||
|
||||
bool asst::BattleSpyTask::is_skill_ready(const cv::Mat& imageRect)
|
||||
{
|
||||
BattlefieldClassifier skill_analyzer(imageRect);
|
||||
skill_analyzer.set_object_of_interest({ .skill_ready = true });
|
||||
|
||||
//const Point& battlefield_point = target_iter->second.pos;
|
||||
skill_analyzer.set_base_point({0,0});
|
||||
|
||||
auto result = skill_analyzer.analyze();
|
||||
if (!result) {
|
||||
Log.warn(__FUNCTION__, "Failed to analyze skill readiness");
|
||||
json::value warn_info = basic_info_with_what("SkillAnalysisFailed");
|
||||
auto& details = warn_info["details"];
|
||||
details["Msg"] = "Failed to analyze skill readiness";
|
||||
callback(AsstMsg::SubTaskExtraInfo, warn_info);
|
||||
return false;
|
||||
}
|
||||
|
||||
return result->skill_ready.ready;
|
||||
}
|
||||
50
src/MaaCore/Task/Miscellaneous/BattleSpyTask.h
Normal file
50
src/MaaCore/Task/Miscellaneous/BattleSpyTask.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#pragma once
|
||||
#include "Task/AbstractTask.h"
|
||||
#include "Task/BattleHelper.h"
|
||||
|
||||
#include "Common/AsstBattleDef.h"
|
||||
#include "Common/AsstTypes.h"
|
||||
#include "Config/Miscellaneous/TilePack.h"
|
||||
|
||||
namespace asst
|
||||
{
|
||||
class BattleSpyTask : public AbstractTask, public BattleHelper
|
||||
{
|
||||
public:
|
||||
BattleSpyTask(const AsstCallback& callback, Assistant* inst, std::string_view task_chain);
|
||||
virtual ~BattleSpyTask() override = default;
|
||||
|
||||
virtual bool set_stage_name(const std::string& stage_name) override;
|
||||
void set_wait_until_end(bool wait_until_end);
|
||||
void set_formation_task_ptr(std::shared_ptr<std::unordered_map<std::string, std::string>> value);
|
||||
|
||||
protected:
|
||||
virtual bool _run() override;
|
||||
|
||||
virtual AbstractTask& this_task() override { return *this; }
|
||||
|
||||
virtual void clear() override;
|
||||
|
||||
virtual bool
|
||||
do_derived_action([[maybe_unused]] const battle::copilot::Action& action, [[maybe_unused]] size_t index)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual battle::copilot::CombatData& get_combat_data() { return m_combat_data; }
|
||||
|
||||
virtual bool need_to_wait_until_end() const { return m_need_to_wait_until_end; }
|
||||
|
||||
bool to_group();
|
||||
|
||||
void notify_action(const json::value& value);
|
||||
bool is_skill_ready(const cv::Mat& imageRect);
|
||||
|
||||
battle::copilot::CombatData m_combat_data;
|
||||
std::unordered_map</*group*/ std::string, /*oper*/ std::string> m_oper_in_group;
|
||||
|
||||
bool m_in_bullet_time = false;
|
||||
bool m_need_to_wait_until_end = false;
|
||||
std::shared_ptr<std::unordered_map<std::string, std::string>> m_formation_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
@@ -320,6 +320,8 @@ namespace MaaWpfGui.Constants
|
||||
|
||||
public const string DebugTaskName = "Debug.TaskName";
|
||||
|
||||
public const string DGLabTaskName = "DGLab.TaskName";
|
||||
|
||||
public const string MiniGameTaskName = "MiniGame.TaskName";
|
||||
|
||||
public const string AchievementBubbleAutoClose = "Achievement.BubbleAutoClose";
|
||||
|
||||
@@ -1914,6 +1914,9 @@ namespace MaaWpfGui.Main
|
||||
case "StageQueueMissionCompleted":
|
||||
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("StageQueue") + $" {subTaskDetails!["stage_code"]} - {subTaskDetails["stars"]} ★", UiLogColor.Info);
|
||||
break;
|
||||
case "DGLabMsg":
|
||||
Instances.TaskQueueViewModel.AddLog($"{subTaskDetails!["Msg"]}", UiLogColor.Info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2191,6 +2194,7 @@ namespace MaaWpfGui.Main
|
||||
Reclamation,
|
||||
MiniGame,
|
||||
Custom,
|
||||
DGLab,
|
||||
}
|
||||
|
||||
private readonly HashSet<TaskType> _mainTaskTypes =
|
||||
@@ -2205,6 +2209,7 @@ namespace MaaWpfGui.Main
|
||||
TaskType.Award,
|
||||
TaskType.Roguelike,
|
||||
TaskType.Reclamation,
|
||||
TaskType.DGLab,
|
||||
];
|
||||
|
||||
private readonly ObservableDictionary<AsstTaskId, (TaskType Type, TaskStatus Status)> _tasksStatus = [];
|
||||
@@ -2240,6 +2245,12 @@ namespace MaaWpfGui.Main
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool AsstAppendDGLab()
|
||||
{
|
||||
return AsstAppendTaskWithEncoding(TaskType.DGLab, AsstTaskType.DGLab) && AsstStart();
|
||||
}
|
||||
|
||||
|
||||
public bool AsstAppendCloseDown(string clientType)
|
||||
{
|
||||
if (!AsstStop())
|
||||
@@ -2410,6 +2421,11 @@ namespace MaaWpfGui.Main
|
||||
{
|
||||
MaaService.AsstDestroy(_handle);
|
||||
}
|
||||
|
||||
public bool AsstDGLab()
|
||||
{
|
||||
return MaaService.AsstDGLab(_handle);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
17
src/MaaWpfGui/Models/AsstTasks/AsstDGLabTask.cs
Normal file
17
src/MaaWpfGui/Models/AsstTasks/AsstDGLabTask.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MaaWpfGui.Models.AsstTasks;
|
||||
using MaaWpfGui.Services;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MaaWpfGui.Models.AsstTasks;
|
||||
public class AsstDGLabTask : AsstBaseTask
|
||||
{
|
||||
public override AsstTaskType TaskType => AsstTaskType.DGLab;
|
||||
|
||||
public override (AsstTaskType TaskType, JObject Params) Serialize() => (TaskType, JObject.FromObject(this));
|
||||
}
|
||||
@@ -541,6 +541,7 @@ The primary instance is 0, and other instances are the numbers after the version
|
||||
<system:String x:Key="Reclamation">Reclamation Algorithm</system:String>
|
||||
<system:String x:Key="MiniGame">Mini-Games</system:String>
|
||||
<system:String x:Key="Custom">Custom Task</system:String>
|
||||
<system:String x:Key="DGLab">DG-Lab</system:String>
|
||||
<system:String x:Key="SingleStep">Single-Step Task</system:String>
|
||||
<system:String x:Key="ReclamationTheme">Reclamation Algorithm Theme</system:String>
|
||||
<system:String x:Key="ReclamationThemeFire">Fire Within the Sand</system:String>
|
||||
|
||||
@@ -542,6 +542,7 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="Reclamation">生息演算</system:String>
|
||||
<system:String x:Key="MiniGame">ミニゲーム</system:String>
|
||||
<system:String x:Key="Custom">カスタムタスク</system:String>
|
||||
<system:String x:Key="DGLab">DG-Lab</system:String>
|
||||
<system:String x:Key="SingleStep">単一ステップタスク</system:String>
|
||||
<system:String x:Key="ReclamationTheme">主題</system:String>
|
||||
<system:String x:Key="ReclamationThemeFire">砂中の火</system:String>
|
||||
|
||||
@@ -541,6 +541,7 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="Reclamation">생존연산</system:String>
|
||||
<system:String x:Key="MiniGame">미니게임</system:String>
|
||||
<system:String x:Key="Custom">사용자 정의 작업</system:String>
|
||||
<system:String x:Key="DGLab">DG-Lab</system:String>
|
||||
<system:String x:Key="SingleStep">단일 단계 작업</system:String>
|
||||
<system:String x:Key="ReclamationTheme">생존연산 테마</system:String>
|
||||
<system:String x:Key="ReclamationThemeFire">모래 속의 불</system:String>
|
||||
|
||||
@@ -541,6 +541,7 @@ C:\\leidian\\LDPlayer9。\n
|
||||
<system:String x:Key="Reclamation">生息演算</system:String>
|
||||
<system:String x:Key="MiniGame">小游戏</system:String>
|
||||
<system:String x:Key="Custom">自定义任务</system:String>
|
||||
<system:String x:Key="DGLab">DG-Lab</system:String>
|
||||
<system:String x:Key="SingleStep">单步任务</system:String>
|
||||
<system:String x:Key="ReclamationTheme">生息演算主题</system:String>
|
||||
<system:String x:Key="ReclamationThemeFire">沙中之火</system:String>
|
||||
|
||||
@@ -539,6 +539,7 @@ C:\\leidian\\LDPlayer9。\n
|
||||
<system:String x:Key="Reclamation">生息演算</system:String>
|
||||
<system:String x:Key="MiniGame">小遊戲</system:String>
|
||||
<system:String x:Key="Custom">自訂任務</system:String>
|
||||
<system:String x:Key="DGLab">DG-Lab</system:String>
|
||||
<system:String x:Key="SingleStep">單步任務</system:String>
|
||||
<system:String x:Key="ReclamationTheme">生息演算主題</system:String>
|
||||
<system:String x:Key="ReclamationThemeFire">沙中之火</system:String>
|
||||
|
||||
@@ -80,6 +80,9 @@ namespace MaaWpfGui.Services
|
||||
|
||||
[DllImport("MaaCore.dll")]
|
||||
public static extern unsafe void AsstSetConnectionExtras(byte* name, byte* extras);
|
||||
|
||||
[DllImport("MaaCore.dll")]
|
||||
public static extern bool AsstDGLab(AsstHandle handle);
|
||||
}
|
||||
|
||||
public enum AsstTaskType : byte
|
||||
@@ -163,5 +166,10 @@ namespace MaaWpfGui.Services
|
||||
/// 自定义任务
|
||||
/// </summary>
|
||||
Custom,
|
||||
|
||||
/// <summary>
|
||||
/// DGLab
|
||||
/// </summary>
|
||||
DGLab,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -678,6 +678,10 @@ namespace MaaWpfGui.Services.RemoteControl
|
||||
taskRet &= Instances.AsstProxy.AsstAppendTaskWithEncoding(TaskType.Reclamation, ReclamationSettingsUserControlModel.Instance.Serialize());
|
||||
break;
|
||||
|
||||
case "DGLab":
|
||||
taskRet &= Instances.AsstProxy.AsstAppendTaskWithEncoding(TaskType.DGLab, DGLabSettingsUserControlModel.Instance.Serialize());
|
||||
break;
|
||||
|
||||
default:
|
||||
--count;
|
||||
|
||||
|
||||
@@ -128,6 +128,8 @@ namespace MaaWpfGui.ViewModels.UI
|
||||
/// </summary>
|
||||
public static CustomSettingsUserControlModel CustomTask => CustomSettingsUserControlModel.Instance;
|
||||
|
||||
public static DGLabSettingsUserControlModel DGLabTask => DGLabSettingsUserControlModel.Instance;
|
||||
|
||||
#endregion 长草任务Model
|
||||
|
||||
private static readonly IEnumerable<TaskViewModel> _taskViewModelTypes = InitTaskViewModelList();
|
||||
@@ -701,6 +703,7 @@ namespace MaaWpfGui.ViewModels.UI
|
||||
if (Instances.VersionUpdateViewModel.IsDebugVersion() || File.Exists("DEBUG") || File.Exists("DEBUG.txt"))
|
||||
{
|
||||
taskList.Add("Custom");
|
||||
taskList.Add("DGLab");
|
||||
}
|
||||
|
||||
var tempOrderList = new List<DragItemViewModel?>(new DragItemViewModel[taskList.Count]);
|
||||
@@ -1420,6 +1423,13 @@ namespace MaaWpfGui.ViewModels.UI
|
||||
break;
|
||||
}
|
||||
|
||||
case "DGLab":
|
||||
if (Instances.VersionUpdateViewModel.IsDebugVersion() || File.Exists("DEBUG") || File.Exists("DEBUG.txt"))
|
||||
{
|
||||
taskRet &= Instances.AsstProxy.AsstAppendTaskWithEncoding(TaskType.DGLab, DGLabTask.Serialize());
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
--count;
|
||||
_logger.Error("Unknown task: " + item.OriginalName);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
// <copyright file="TaskQueueViewModel.cs" company="MaaAssistantArknights">
|
||||
// Part of the MaaWpfGui project, maintained by the MaaAssistantArknights team (Maa Team)
|
||||
// Copyright (C) 2021-2025 MaaAssistantArknights Contributors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License v3.0 only as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY
|
||||
// </copyright>
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MaaWpfGui.Constants;
|
||||
using MaaWpfGui.Helper;
|
||||
using MaaWpfGui.Models.AsstTasks;
|
||||
using MaaWpfGui.Services;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MaaWpfGui.ViewModels.UserControl.TaskQueue;
|
||||
public class DGLabSettingsUserControlModel : TaskViewModel
|
||||
{
|
||||
static DGLabSettingsUserControlModel()
|
||||
{
|
||||
Instance = new();
|
||||
}
|
||||
|
||||
public static DGLabSettingsUserControlModel Instance { get; }
|
||||
|
||||
private string _taskName = ConfigurationHelper.GetGlobalValue(ConfigurationKeys.DGLabTaskName, string.Empty);
|
||||
|
||||
public string TaskName
|
||||
{
|
||||
get => _taskName;
|
||||
set
|
||||
{
|
||||
value = value.Replace(",", ",").Replace(";", ";");
|
||||
SetAndNotify(ref _taskName, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override (AsstTaskType Type, JObject Params) Serialize()
|
||||
{
|
||||
var task = new AsstDGLabTask();
|
||||
return task.Serialize();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user