mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 02:23:01 +08:00
feat: 支持会客室快捷置入线索与一键赠送重复线索 (#14966)
* feat: 支持会客室快捷置入线索与一键赠送重复线索 * docs: 更新文档 * chore: Auto update by pre-commit hooks [skip changelog] * i18n: JP * chore: Auto update by pre-commit hooks [skip changelog] * i18n: sourcery ai suggestion Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> * i18n: KR * chore: 增加被注入的日志记录 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Manicsteiner <Manicsteiner@outlook.com> Co-authored-by: Constrat <56174894+Constrat@users.noreply.github.com> Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> Co-authored-by: HX3N <scarlet7518@gmail.com>
This commit is contained in:
@@ -21,7 +21,7 @@ icon: material-symbols:view-quilt-rounded
|
||||
- Unrecognizable examples: `Rosmontis System`, `Pinus Sylvestris Knights`.
|
||||
- When `Drone Usage` is set to `Trading Post - LMD`, the `Shamare Group` will be prioritized.
|
||||
- Reception Room selects operators with corresponding clue affinity when only one clue type is missing; otherwise selects generic operators.
|
||||
- Reception Room only sends clues when your collection is full, and sends only three at a time. To customize the number sent, modify the `ClueSelected` - `maxTimes` field in `resource/tasks/tasks.json` in the MAA directory.
|
||||
- The Reception Room will attempt to send clues on every rotation. The Official (and Bilibili) clients added a "One‑click Send Duplicate Clues" feature on 2025-12-05: when MAA detects this button, it will automatically click it to batch-send duplicate clues; EN/JP/KR are expected to support this feature in about 6 months, and TW in about 1 year (TW may get it earlier due to accelerated updates).
|
||||
- Enabling `Do not place stationed operators in dormitory` prevents operators like `Irene` and `Logos` from being assigned to dormitories when not training in the Training Room, but also prevents operators with low morale in the Processing Station from being moved to dormitories.
|
||||
- Control Center strategy is complex; currently only considers `Amiya`, `Swire`, `Kal'tsit`, `Team Rainbow`, and other operators with +0.05 morale bonus. This will be gradually optimized.
|
||||
- You can select which facility types MAA should manage (all are selected by default).
|
||||
|
||||
@@ -21,14 +21,14 @@ icon: material-symbols:view-quilt-rounded
|
||||
- 非対応例:`ローズモンティス体系`、`レッドパイン騎士団`
|
||||
- `ドローン用途` で `貿易所-龍門幣` を選択している場合、`シャマレグループ` を優先して判別・使用します
|
||||
- 応接室で手がかりの不足が1種類のみの場合は、該当傾向のオペレーターを選択。それ以外は汎用オペレーターを選択します
|
||||
- 自施設の手がかりが満杯の時のみ手がかりを送付します(最大3個)。個数は MAA フォルダ内 `resource/tasks/tasks.json` の `ClueSelected` - `maxTimes` を編集してください
|
||||
- `配置済みオペレーターを寮に入れない` 設定により、`アイリーニ` や `ロゴス` などが訓練に未配置の際の寮入りを防止できます(ただし、加工施設でコンディション不足のオペレーターも移動しなくなります)
|
||||
- 中枢システムの戦略は複雑なため、現時点では `アーミヤ`、`スワイヤー`、`ケルシー`、`レインボー小隊` およびコンディション +0.05 のオペレーターのみを考慮しています。順次最適化予定です
|
||||
- 応接室は各シフト時に必ず手がかりの送付を試みます。公式(Official、およびBilibili)クライアントは2025-12-05に「重複手がかりをワンクリックで送る」機能を追加しました。該当ボタンを検出した場合、MAAは自動でクリックして重複手がかりをまとめて送信します。EN/JP/KRは約6か月後、TWは約1年後に対応予定です(TWは開発進捗により早まる可能性があります)。
|
||||
- `配置済みオペレーターを寮に入れない` 設定により、`アイリーニ` や `ロゴス` などが訓練に未配置の際の寮入りを防止できます(ただし、加工施設で体力不足のオペレーターも移動しなくなります)
|
||||
- 制御中枢の戦略はあまりにも複雑で、現時点では `アーミヤ`、`スワイヤー`、`ケルシー`、`レインボー小隊` および体力 +0.05 回復のオペレーターのみを考慮しています。順次最適化予定です
|
||||
- MAA が処理する対象施設は選択可能です(デフォルトは全選択)
|
||||
|
||||
## キューのローテーション
|
||||
## シフト交代
|
||||
|
||||
- このモードは、まずゲーム内でプリセットキューを設定しておく必要があります。MAA が自動でローテーションを行います。
|
||||
- このモードは、まずゲーム内でプリセットシフトを設定しておく必要があります。MAA が自動で交代を行います。
|
||||
|
||||
## 基地シフトのカスタマイズ
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ icon: material-symbols:view-quilt-rounded
|
||||
- 인식 불가 예시: `로즈몬티스 체계`, `피누스 실베스트리스`
|
||||
- `드론 사용처`가 `무역소-용문폐`로 지정되어 있을 경우, `샤마르`를 인식하고 드론을 아껴둘 것입니다.
|
||||
- 응접실에서 단 한 종류의 단서가 부족하다면 해당 진영의 오퍼레이터가 선택됩니다. 그렇지 않은 경우 일반적인 오퍼레이터가 선택됩니다.
|
||||
- 응접실이 꽉 차 있을 때만 단서를 내보낼 것입니다. 최대 3개의 단서가 전달됩니다. `resource/tasks/tasks.json`에서 `ClueSelected`-`maxTimes` 필드를 수정해 단서의 전달 개수를 조절할 수 있습니다.
|
||||
- 응접실은 매 작업마다 단서를 전달하려고 시도합니다. 공식(Official, Bilibili) 클라이언트는 2025-12-05에 '중복 단서를 한 번에 보내기' 기능을 추가했습니다. 해당 버튼이 감지되면 MAA가 자동으로 클릭하여 중복 단서를 일괄 전달합니다. EN/JP/KR은 약 6개월 내 지원될 예정이며, TW는 약 1년 후 지원될 예정입니다. (대만 서버는 진행 상황에 따라 더 빨리 지원될 수 있습니다)
|
||||
- `아이린`, `로고스`나 다른 오퍼레이터가 당장 업무 중이 아니라는 이유로 숙소로 보내지는 것을 원치 않는다면, `업무중인 오퍼레이터 숙소 배치 제한` 옵션을 활성화할 수 있습니다. 단, 컨디션이 0이 아닌 한 어떤 오퍼레이터도 숙소로 들어오지 못하게 되는 문제를 불러올 수도 있습니다.
|
||||
- 제어 센터의 복잡성으로 인해서, `아미야`, `스와이어`, `켈시`, `레인보우 팀`과 기타 시간당 컨디션 +0.05 오퍼레이터만이 고려됩니다. 향후 개선될 예정입니다.
|
||||
- 필요한 시설 유형만 선택해 MAA가 처리하도록 할 수 있습니다. 기본값은 모두 선택되어있습니다
|
||||
|
||||
@@ -21,7 +21,7 @@ icon: material-symbols:view-quilt-rounded
|
||||
- 不可识别并使用的例子:`迷迭香体系`、`红松骑士团`。
|
||||
- 若 `无人机用途` 选择 `贸易站-龙门币` ,则会额外识别 `巫恋组` 并优先为其使用。
|
||||
- 会客室仅缺一个线索时,会选择对应线索倾向的干员,其余情况选择通用干员。
|
||||
- 会客室仅当自有线索满时才会送出线索,并且只送三个。如需自定义单次送线索个数可修改 MAA 文件夹下 `resource/tasks/tasks.json` 中的 `ClueSelected` - `maxTimes` 字段。
|
||||
- 会客室每次换班都会尝试赠送线索。国服(Official, BiliBili)在 2025-12-05 新增了 「一键赠送重复线索」 功能:当检测到该按钮时,MAA 会自动点击以批量赠送重复线索;EN/JP/KR 预计约 6 个月后会支持该功能,TW 预计约 1 年后支持(由于台服正在赶进度可能会更早支持)。
|
||||
- 开启 `不将已进驻的干员放入宿舍` 设置项可避免 `艾丽妮`、`逻各斯` 等干员在训练室未训练时被进驻到宿舍,但同时也不会将加工站中心情不满的干员进驻宿舍。
|
||||
- 控制中枢策略太过复杂,目前只考虑 `阿米娅`、`诗怀雅`、`凯尔希`、`彩虹小队` 及其他心情 +0.05 的干员,后续逐步优化。
|
||||
- 可自行选择需要 MAA 处理的设施类别,默认全选。
|
||||
|
||||
@@ -21,7 +21,7 @@ icon: material-symbols:view-quilt-rounded
|
||||
- 不可識別並使用的例子:`迷迭香體系`、`紅松騎士團`。
|
||||
- 若 `無人機用途` 選擇 `貿易站-龍門幣`,則會額外識別 `巫戀組` 並優先為其使用。
|
||||
- 會客室僅缺一個線索時,會選擇對應線索傾向的幹員,其餘情況選擇通用幹員。
|
||||
- 會客室僅當自有線索滿時才會送出線索,並且只送三個。如需自訂單次送線索個數可修改 MAA 資料夾下 `resource/tasks/tasks.json` 中的 `ClueSelected` - `maxTimes` 欄位。
|
||||
- 會客室每次換班都會嘗試贈送線索。國服(Official、Bilibili)於 2025-12-05 新增「一鍵贈送重複線索」功能:偵測到該按鈕時,MAA 會自動點擊以批量贈送重複線索;EN/JP/KR 預計約 6 個月後支援,TW 預計約 1 年後支援(由於台服正在趕進度,可能會較早支援)。
|
||||
- 開啟 `不將已進駐的幹員放入宿舍` 設定項可避免 `艾麗妮`、`邏各斯` 等幹員在訓練室未訓練時被進駐到宿舍,但同時也不會將加工站中心情不滿的幹員進駐宿舍。
|
||||
- 控制中樞策略太過複雜,目前只考慮 `阿米婭`、`詩懷雅`、`凱爾希`、`彩虹小隊` 及其他心情 +0.05 的幹員,後續逐步優化。
|
||||
- 可自行選擇需要 MAA 處理的設施類別,預設全選。
|
||||
|
||||
@@ -3151,6 +3151,17 @@
|
||||
"templThreshold": 0.9,
|
||||
"roi": [200, 600, 700, 120]
|
||||
},
|
||||
"InfrastClueQuickInsert": {
|
||||
"Doc": "快速置入:官服新增的批量置入线索按钮模板占位",
|
||||
"action": "ClickSelf",
|
||||
"roi": [1058, 572, 148, 148]
|
||||
},
|
||||
"InfrastClueQuickSendDuplicates": {
|
||||
"Doc": "快速传递重复线索:批量传递重复线索按钮模板占位",
|
||||
"action": "ClickSelf",
|
||||
"roi": [34, 559, 154, 161],
|
||||
"next": ["CloseSendClue"]
|
||||
},
|
||||
"ReceptionFlag": {
|
||||
"roi": [350, 0, 200, 100]
|
||||
},
|
||||
@@ -3174,10 +3185,10 @@
|
||||
},
|
||||
"SendClues": {
|
||||
"action": "ClickSelf",
|
||||
"roi": [1157, 346, 84, 81],
|
||||
"roi": [1160, 320, 80, 90],
|
||||
"maskRange": [1, 255],
|
||||
"postDelay": 1000,
|
||||
"next": ["SelectClue", "CloseSendClue"]
|
||||
"next": ["InfrastClueQuickSendDuplicates", "SelectClue", "CloseSendClue"]
|
||||
},
|
||||
"SelectClue": {
|
||||
"action": "ClickSelf",
|
||||
|
||||
BIN
resource/template/InfrastPic/Clue/InfrastClueQuickInsert.png
Normal file
BIN
resource/template/InfrastPic/Clue/InfrastClueQuickInsert.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -37,6 +37,7 @@ bool asst::InfrastReceptionTask::_run()
|
||||
|
||||
use_clue();
|
||||
back_to_reception_main();
|
||||
send_clue();
|
||||
|
||||
if (need_exit()) {
|
||||
return false;
|
||||
@@ -145,6 +146,16 @@ bool asst::InfrastReceptionTask::proc_clue_vacancy()
|
||||
const static std::vector<std::string> clue_suffix = { "No1", "No2", "No3", "No4", "No5", "No6", "No7" };
|
||||
|
||||
cv::Mat image = ctrler()->get_image();
|
||||
|
||||
// 优先检测官服新增的“快捷置入”按钮,如果存在则点击一次执行批量置入,跳过逐个置入流程
|
||||
const auto quick_insert_task = Task.get("InfrastClueQuickInsert");
|
||||
Matcher quick_insert_matcher(image);
|
||||
quick_insert_matcher.set_task_info(quick_insert_task);
|
||||
if (quick_insert_matcher.analyze()) {
|
||||
ctrler()->click(quick_insert_matcher.get_result().rect);
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const std::string& clue : clue_suffix) {
|
||||
if (need_exit()) {
|
||||
return false;
|
||||
@@ -190,11 +201,13 @@ bool asst::InfrastReceptionTask::unlock_clue_exchange()
|
||||
bool asst::InfrastReceptionTask::back_to_reception_main()
|
||||
{
|
||||
ProcessTask(*this, { "EndOfClueExchange" }).set_retry_times(0).run();
|
||||
return ProcessTask(*this, { "BackToReceptionMain" }).run();
|
||||
// 国服有快捷置入后不会进入线索放置页面,不需要返回,多点一次快捷置入也无所谓
|
||||
return ProcessTask(*this, { "InfrastClueQuickInsert", "BackToReceptionMain" }).run();
|
||||
}
|
||||
|
||||
bool asst::InfrastReceptionTask::send_clue()
|
||||
{
|
||||
// 优先检测是否存在“快捷传递重复线索”按钮(官服特性),若存在则点击一次
|
||||
ProcessTask task(*this, { "SendClues" });
|
||||
return task.run();
|
||||
}
|
||||
|
||||
@@ -17,12 +17,14 @@ using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using MaaWpfGui.Helper;
|
||||
using Serilog;
|
||||
using Windows.Win32;
|
||||
|
||||
namespace MaaWpfGui.Utilities;
|
||||
|
||||
internal class BadModules
|
||||
{
|
||||
private static readonly ILogger _logger = Log.ForContext<BadModules>();
|
||||
private static readonly string[] _names = [
|
||||
"NahimicOSD.dll",
|
||||
"AudioDevProps2.dll",
|
||||
@@ -97,6 +99,7 @@ internal class BadModules
|
||||
};
|
||||
|
||||
TaskDialog.ShowDialog(new WpfWin32Window(System.Windows.Application.Current.MainWindow), page);
|
||||
_logger.Warning("Detected bad injected modules:\n{Modules}", sb.ToString());
|
||||
|
||||
static string BreakLongPath(string path, int maxLen)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user