Compare commits
76 Commits
v6.3.0
...
feat/mainc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee566c5fb7 | ||
|
|
40d5bdd560 | ||
|
|
01a2329d18 | ||
|
|
c52cf81b94 | ||
|
|
2a9c963fef | ||
|
|
0817bc1c9f | ||
|
|
c36e5cfd9a | ||
|
|
3fbda5b98d | ||
|
|
50cbc2e10d | ||
|
|
30dd7d0afa | ||
|
|
80280bb62d | ||
|
|
e7362d2d35 | ||
|
|
f77d85f542 | ||
|
|
00e577f6d2 | ||
|
|
6d32795ffa | ||
|
|
a72571ce90 | ||
|
|
59fa039a72 | ||
|
|
adb8863cf6 | ||
|
|
7bab2b2312 | ||
|
|
b55b2c6bd6 | ||
|
|
3d46fc1d0c | ||
|
|
e62a9a08a9 | ||
|
|
f7f9a4f44c | ||
|
|
9ab3265188 | ||
|
|
e1572d8bba | ||
|
|
761ea19e8b | ||
|
|
d9ad52053b | ||
|
|
1ddee84199 | ||
|
|
45b89b7089 | ||
|
|
c8a0c982b9 | ||
|
|
910cd47dfa | ||
|
|
63d499816d | ||
|
|
d734109155 | ||
|
|
c45e6a3d10 | ||
|
|
5e712c04eb | ||
|
|
dc9c9dfee6 | ||
|
|
ec7cbeeb1c | ||
|
|
c3ccd36d02 | ||
|
|
283309d3c1 | ||
|
|
43d5c429ae | ||
|
|
bb15f533b2 | ||
|
|
424b916265 | ||
|
|
656ba9d749 | ||
|
|
2a4cd8b7c8 | ||
|
|
e862101764 | ||
|
|
c095cc6d6f | ||
|
|
a0a6cf6739 | ||
|
|
f21f7cfd92 | ||
|
|
10989582ee | ||
|
|
a0b73022cd | ||
|
|
5bc7364eb6 | ||
|
|
7c3d531177 | ||
|
|
b4d75f194e | ||
|
|
f642273b7a | ||
|
|
3da747a59a | ||
|
|
cfb2a70ac3 | ||
|
|
3c763afa2d | ||
|
|
173d8f50ac | ||
|
|
867a7b5ea7 | ||
|
|
3469aa3777 | ||
|
|
f7c85a9803 | ||
|
|
19241cf186 | ||
|
|
51d6fc3ce1 | ||
|
|
d7f7614de6 | ||
|
|
5de1387402 | ||
|
|
08956dc9e8 | ||
|
|
d32484e366 | ||
|
|
206f5bf97c | ||
|
|
f1827ad99a | ||
|
|
a68f740fe3 | ||
|
|
483a484ae7 | ||
|
|
ad26721541 | ||
|
|
ba6f52f974 | ||
|
|
3782fb1fcb | ||
|
|
0ea2845b5b | ||
|
|
96b95bf5e4 |
6
.github/workflows/ci.yml
vendored
@@ -4,8 +4,8 @@ on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
branches-ignore:
|
||||
- "master"
|
||||
branches:
|
||||
- "dev"
|
||||
paths:
|
||||
- ".github/workflows/ci.yml"
|
||||
- "3rdparty/include/**"
|
||||
@@ -17,8 +17,6 @@ on:
|
||||
- "tools/maadeps-download.py"
|
||||
- "!**/*.md"
|
||||
pull_request:
|
||||
branches:
|
||||
- "dev"
|
||||
paths:
|
||||
- ".github/workflows/ci.yml"
|
||||
- "3rdparty/include/**"
|
||||
|
||||
2
.github/workflows/smoke-testing.yml
vendored
@@ -4,6 +4,8 @@ permissions:
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "dev"
|
||||
paths:
|
||||
- ".github/workflows/smoke-testing.yml"
|
||||
- "3rdparty/include/**"
|
||||
|
||||
92
CHANGELOG.md
@@ -1,4 +1,4 @@
|
||||
## v6.3.0
|
||||
## v6.3.2
|
||||
|
||||
### 拉电线不知天地为何物 | Highlight
|
||||
|
||||
@@ -18,9 +18,12 @@
|
||||
|
||||
#### PC 端初步支持
|
||||
|
||||
本次更新,牛牛已支持控制 PC 端明日方舟了~
|
||||
本次更新,牛牛已支持控制 PC 端明日方舟了~不过有以下限制:
|
||||
|
||||
但由于维护人手有限,PC 端的适配可能长期处于不稳定状态,部分功能可能出现异常或暂时无法使用。
|
||||
* 由于 Windows 的限制,PC 端在被控制时**不可以处于最小化窗口状态**,否则游戏画面不会被渲染,也就无法被牛牛识别;
|
||||
* 由于 Win32 API 和某反作弊软件的限制,牛牛在控制 PC 端时**必须要直接控制鼠标(不能模拟点击)**,期间不建议你使用鼠标。
|
||||
|
||||
另外,由于维护人手有限,PC 端的适配可能长期处于不稳定状态,部分功能可能出现异常或暂时无法使用。
|
||||
|
||||
我们非常欢迎社区开发者协助适配并提交改进,共同完善对 PC 端的支持。
|
||||
|
||||
@@ -62,6 +65,89 @@ We warmly welcome community developers to assist with adaptation and submit impr
|
||||
|
||||
以下是详细内容:
|
||||
|
||||
## v6.3.2
|
||||
|
||||
### 新增 | New
|
||||
|
||||
* 睡眠休眠前增加倒计时弹窗 @ABA2396
|
||||
* 生息演算支援道具名称改为全字匹配 @ABA2396
|
||||
|
||||
### 改进 | Improved
|
||||
|
||||
* 干员识别按照 稀有度->精英化->等级->潜能->Id 排序 @ABA2396
|
||||
* 优化识别工具中列表小于 5 时的显示效果 @ABA2396
|
||||
* optimize templates @Constrat
|
||||
* increase score for AddOperatorTradeAggressive EN @Constrat
|
||||
|
||||
### 修复 | Fix
|
||||
|
||||
* 4 星公招时间显示错误 @ABA2396
|
||||
* 刷理智自定义剿灭关卡在特定情况的绑定错误 @status102
|
||||
* 在禁用刷理智-自定义剿灭关卡后需要手动切换任务以刷新列表中显示的剿灭关卡, 尽管不影响实际运行 @status102
|
||||
* 会客室任务失败重试时尝试关闭赠送线索界面 @ABA2396
|
||||
* 肉鸽开局种子无法通过 Wpf 设置两位数难度 @status102
|
||||
* 小工具-公招识别 3~5 星选择时间无法修改 @status102
|
||||
* 小工具-干员识别 开始识别按钮启用状态绑定失效 @status102
|
||||
* 自动公招任务 3~5 星确认时间在修改后未能刷新 UI @status102
|
||||
* EN AveMujica terminal new template @Constrat
|
||||
* EN IS tentative fix increasing roi for encounter and more replace regex @Constrat
|
||||
* English text overflow on long strings in middle column @Constrat
|
||||
|
||||
### 文档 | Docs
|
||||
|
||||
* 删除一些过时内容 (#15700) @JasonHuang79
|
||||
|
||||
### 其他 | Other
|
||||
|
||||
* 增加 id 格式验证 @ABA2396
|
||||
* 明确周计划和定时更新使用游戏时间而非现实时间 @ABA2396
|
||||
* 移除老主线导航逻辑 (#15644) @SherkeyXD
|
||||
* 繁中服「夢鄉」主題 (#15699) @momomochi987
|
||||
* Yostar servers SSS#9 and ShamareThumbnail (#15732) @Manicsteiner @Constrat
|
||||
|
||||
## v6.3.1
|
||||
|
||||
### 新增 | New
|
||||
|
||||
* OperNameAnalyzer 支持左对齐检测 (#15682) @ABA2396
|
||||
|
||||
### 改进 | Improved
|
||||
|
||||
* 配置迁移自动为启用备选且首个关卡为剿灭模式的刷理智任务自动添加额外的刷理智任务 @status102
|
||||
* 忽略干员属性要求 不再允许跳过精英化要求 (#15697) @status102 @Constrat @HX3N
|
||||
|
||||
### 修复 | Fix
|
||||
|
||||
* JP AveMujica event ocr @Manicsteiner
|
||||
* EN IS StageRefresh @Constrat
|
||||
* i'm kinda stupid @Constrat
|
||||
* update refresh node EN IS5 @Constrat
|
||||
* EN IS fix trader store templates AGAIN @Constrat
|
||||
* EN Yu OCR for Yutenji @Constrat
|
||||
* 自动编队选择技能时点击到技能描述/技能范围 @status102
|
||||
* 自动编队期间如有干员属性要求被忽略, 则禁用自动化投票 @status102
|
||||
|
||||
### 文档 | Docs
|
||||
|
||||
* 更新 api 链接 @ABA2396
|
||||
|
||||
### 其他 | Other
|
||||
|
||||
* UserAdditional 非 json 格式返回原始字符串 @status102
|
||||
* 使用屏幕宽高常量代替硬编码 @status102
|
||||
* 屏幕外的干员跳过技能就绪检测 @status102
|
||||
* 調整繁中服界園肉鴿 OCR (2/?) @momomochi987
|
||||
* color [INF] for smoke testing as well @Constrat
|
||||
* 调整单字干员正则 @ABA2396
|
||||
* 調整繁中服界園肉鴿 OCR (#15678) @momomochi987
|
||||
* 删除干员名开头/末尾的_<> @ABA2396
|
||||
* 添加响石、赤刃明霄陈基建技能加成 (#15674) @drway
|
||||
* 保全派驻自动战斗使用二值化结果识别干员名 @ABA2396
|
||||
* 删除无用的正则替换 @ABA2396
|
||||
* 自动战斗使用二值化结果识别干员名 @ABA2396
|
||||
* 仅在 VS Code 中添加辅助项目 (#15669) @status102
|
||||
* JP OperNameAnalyzer specialParams @Manicsteiner
|
||||
|
||||
## v6.3.0
|
||||
|
||||
### 新增 | New
|
||||
|
||||
@@ -35,11 +35,13 @@ if(BUILD_WPF_GUI)
|
||||
include_external_msproject(MaaWpfGui ${PROJECT_SOURCE_DIR}/src/MaaWpfGui/MaaWpfGui.csproj)
|
||||
|
||||
add_dependencies(MaaWpfGui MaaCore)
|
||||
add_custom_target(run-MaaWpfGui
|
||||
COMMAND "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/MAA.exe"
|
||||
DEPENDS MaaWpfGui
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<CONFIG>"
|
||||
)
|
||||
if(DEFINED ENV{VSCODE_PID})
|
||||
add_custom_target(run-MaaWpfGui
|
||||
COMMAND "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/MAA.exe"
|
||||
DEPENDS MaaWpfGui
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<CONFIG>"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(INSTALL_PYTHON)
|
||||
|
||||
@@ -49,25 +49,9 @@ We cannot provide repair solutions other than reinstalling your system. Please a
|
||||
|
||||
For Windows N/KN (European/Korean versions), you also need to install the [Media Feature Pack](https://support.microsoft.com/en-us/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a).
|
||||
|
||||
#### Windows 7
|
||||
#### Windows 7/8/8.1
|
||||
|
||||
.NET 10 doesn't support Windows 7/8/8.1 systems<sup>[source](https://github.com/dotnet/core/issues/7556)</sup>, so MAA no longer supports them either. The last usable .NET 8 version is [`v5.4.0-beta.1.d035.gd2e5001e7`](https://github.com/MaaAssistantArknights/MaaRelease/releases/tag/v5.4.0-beta.1.d035.gd2e5001e7); the last usable .NET 4.8 version is [`v4.28.8`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/tag/v4.28.8). Self-compilation feasibility remains undetermined.
|
||||
|
||||
For Windows 7, before installing the two runtime libraries mentioned above, check if these patches are installed:
|
||||
|
||||
1. [Windows 7 Service Pack 1](https://support.microsoft.com/en-us/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
|
||||
2. SHA-2 code signing patches:
|
||||
- KB4474419: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
|
||||
- KB4490628: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
|
||||
3. Platform Update for Windows 7 (DXGI 1.2, Direct3D 11.1, KB2670838): [Download link 1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu), [Download link 2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
|
||||
|
||||
##### Workaround for .NET 8 applications running abnormally on Windows 7 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
When running .NET 8 applications on Windows 7, abnormal memory usage can occur. Follow these steps to mitigate it. Windows 8/8.1 hasn't been tested; if similar issues occur, please open an Issue to remind us to update the documentation.
|
||||
|
||||
1. Open `Computer`, right-click in empty space, click Properties, click `Advanced system settings` on the left, and click `Environment Variables`.
|
||||
2. Create a new system variable with name `DOTNET_EnableWriteXorExecute` and value `0`.
|
||||
3. Restart your computer.
|
||||
.NET 10 doesn't support Windows 7/8/8.1 systems<sup>[source](https://github.com/dotnet/core/issues/7556)</sup>, so MAA no longer supports them either.
|
||||
|
||||
## Connection errors
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ icon: hugeicons:brain-02
|
||||
- Lungmen Downtown: LungmenDowntown@Annihilation
|
||||
|
||||
- Side story stages like `OF-1`, `OF-F3`, and `GT-5`.
|
||||
- The last three stages of the current Side Story event. These will be shown at the bottom of the interface after automatically downloading updates from the [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json).
|
||||
- The last three stages of the current Side Story event. These will be shown at the bottom of the interface after automatically downloading updates from the [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json).
|
||||
- Rerun Side Story events: Enter `SSReopen-<stage prefix>` to farm all stages XX-1 through XX-9 in sequence, like `SSReopen-IC`.
|
||||
|
||||
::: details Example Screen
|
||||
|
||||
@@ -128,7 +128,7 @@ Currently supported stages for navigation include:
|
||||
- Lungmen Outskirts: LungmenOutskirts@Annihilation
|
||||
- Lungmen Downtown: LungmenDowntown@Annihilation
|
||||
- OF-1 / OF-F3 / GT-5 in side stories.
|
||||
- Last three stages of current SS events. Visit [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) for the list of supported stages. Requires additional loading of event stage navigation in [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) file.
|
||||
- Last three stages of current SS events. Visit [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) for the list of supported stages. Requires additional loading of event stage navigation in [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) file.
|
||||
- Rerun SS events. Input `SSReopen-<stage prefix>` to farm XX-1 ~ XX-9 stages at once, e.g. `SSReopen-IC`.
|
||||
:::
|
||||
::: field name="medicine" type="number" optional default="0"
|
||||
|
||||
@@ -49,25 +49,9 @@ winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /nore
|
||||
|
||||
Windows N/KN(ヨーロッパ/韓国)の場合、[メディア機能パック](https://support.microsoft.com/ja-jp/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a)をインストールする必要があります。
|
||||
|
||||
#### Windows 7 関連
|
||||
#### Windows 7 / 8 / 8.1 関連
|
||||
|
||||
.NET 10 は Windows 7 / 8 / 8.1 システムをサポートしていないため<sup>[ソース](https://github.com/dotnet/core/issues/7556)</sup>、MAA も同様にサポートしていません。最後に利用可能な .NET 8 バージョンは [`v5.4.0-beta.1.d035.gd2e5001e7`](https://github.com/MaaAssistantArknights/MaaRelease/releases/tag/v5.4.0-beta.1.d035.gd2e5001e7) です。最後に利用可能な .NET 4.8 バージョンは [`v4.28.8`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/tag/v4.28.8) です。自己コンパイルの実現可能性はまだ確認されていません。
|
||||
|
||||
Windows 7 の場合、上記の 2 つのランタイムライブラリをインストールする前に、以下のパッチがインストールされているかどうかを確認する必要があります:
|
||||
|
||||
1. [Windows 7 Service Pack 1](https://support.microsoft.com/ja-jp/windows/windows-7-service-pack-1-sp1-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B-b3da2c0f-cdb6-0572-8596-bab972897f61)
|
||||
2. SHA-2 コード署名:
|
||||
- KB4474419:[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
|
||||
- KB4490628:[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
|
||||
3. Platform Update for Windows 7(DXGI 1.2、Direct3D 11.1,KB2670838):[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
|
||||
|
||||
##### .NET 8 アプリケーションが Windows 7 で異常に動作する場合の緩和策 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
Windows 7 で .NET 8 アプリケーションを実行すると、メモリ使用量が異常になる問題があります。以下の緩和策を参照してください。Windows 8/8.1 はテストされていません。同じ問題がある場合は、ドキュメントを更新するために Issue を提出してください。
|
||||
|
||||
1. `コンピュータ` を開き、空白部分を右クリックしてプロパティをクリックし、左側の `システムの詳細設定` をクリックし、`環境変数` をクリックします。
|
||||
2. 新しいシステム変数を作成し、変数名を `DOTNET_EnableWriteXorExecute`、変数値を `0` に設定します。
|
||||
3. コンピュータを再起動します。
|
||||
.NET 10 は Windows 7 / 8 / 8.1 システムをサポートしていないため<sup>[ソース](https://github.com/dotnet/core/issues/7556)</sup>、MAA も同様にサポートしていません。
|
||||
|
||||
#### 公式統合パック(確信)
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ icon: hugeicons:brain-02
|
||||
- 龍門市街:LungmenDowntown@Annihilation
|
||||
|
||||
- サイドストーリー内の `OF-1` / `OF-F3` / `GT-5`。
|
||||
- 当期 SS イベントの後半 3 ステージ。自動で [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) から更新を取得後、画面下部に表示されます。
|
||||
- 当期 SS イベントの後半 3 ステージ。自動で [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) から更新を取得後、画面下部に表示されます。
|
||||
- 復刻 SS イベント。`SSReopen-<ステージ接頭辞>` を入力すると、XX-1 ~ XX-9 を一括周回します(例:`SSReopen-IC`)。
|
||||
|
||||
::: details サンプル画面
|
||||
|
||||
@@ -18,7 +18,7 @@ icon: ic:baseline-article
|
||||
- SoCの場合のみ、完全なステージ番号を入力する必要があります。例: `PR-A-1` 。
|
||||
- `Annihilation`(殲滅作戦)。
|
||||
- `OF-1` / `OF-F3` / `GT-5` のみサポートされます。
|
||||
- 現在のSSイベントの最後の3つのステージ。 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) で更新が自動的にダウンロードされた後、メイン画面に対応するメッセージが表示されます。
|
||||
- 現在のSSイベントの最後の3つのステージ。 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) で更新が自動的にダウンロードされた後、メイン画面に対応するメッセージが表示されます。
|
||||
- 再刻印SSアクティビティは `SSReopen-XX` と入力するとXX-1~XX-9ステージを一度にクリアできます。 `SSReopen-IC` など。
|
||||
|
||||
::: details 画面例
|
||||
|
||||
@@ -128,7 +128,7 @@ Bilibili:`张三`、入力可能:`张三`、`张`、`三`
|
||||
- 龍門郊外:LungmenOutskirts@Annihilation
|
||||
- 龍門市街:LungmenDowntown@Annihilation
|
||||
- 別伝の OF-1 / OF-F3 / GT-5。
|
||||
- 当期 SS イベントの最後の 3 ステージ。[API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) にアクセスして、サポートされているステージ リストを取得できます。[tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) ファイルのイベント ステージ ナビゲーションを追加でロードする必要があります。
|
||||
- 当期 SS イベントの最後の 3 ステージ。[API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) にアクセスして、サポートされているステージ リストを取得できます。[tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) ファイルのイベント ステージ ナビゲーションを追加でロードする必要があります。
|
||||
- 復刻 SS イベント。`SSReopen-<ステージ プレフィックス>` と入力します。例えば `SSReopen-IC` と入力すると、XX-1~XX-9 ステージを一度に完了できます。
|
||||
:::
|
||||
::: field name="medicine" type="number" optional default="0"
|
||||
|
||||
@@ -49,25 +49,9 @@ winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /nore
|
||||
|
||||
Windows 8/8.1/10/11 N/KN(유럽/한국) 버전을 사용하는 경우, [미디어 기능 팩](https://support.microsoft.com/ko-kr/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a)을 설치해야 합니다.
|
||||
|
||||
#### Windows 7 관련
|
||||
#### Windows 7 / 8 / 8.1 관련
|
||||
|
||||
.NET 10은 Windows 7 / 8 / 8.1 시스템을 지원하지 않으므로<sup>[출처](https://github.com/dotnet/core/issues/7556)</sup>, MAA도 더 이상 지원하지 않습니다. 마지막으로 사용 가능한 .NET 8 버전은 [`v5.4.0-beta.1.d035.gd2e5001e7`](https://github.com/MaaAssistantArknights/MaaRelease/releases/tag/v5.4.0-beta.1.d035.gd2e5001e7)입니다. 마지막으로 사용 가능한 .NET 4.8 버전은 [`v4.28.8`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/tag/v4.28.8)입니다. 자체 컴파일의 실현 가능성은 아직 확인되지 않았습니다.
|
||||
|
||||
Windows 7의 경우, 위에서 언급한 두 개의 런타임 라이브러리를 설치하기 전에 다음 패치가 설치되어 있는지 확인해야 합니다:
|
||||
|
||||
1. [Windows 7 Service Pack 1](https://support.microsoft.com/ko-kr/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
|
||||
2. SHA-2 코드 서명 패치:
|
||||
- KB4474419:[다운로드 링크 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[다운로드 링크 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
|
||||
- KB4490628:[다운로드 링크 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[다운로드 링크 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
|
||||
3. Platform Update for Windows 7(DXGI 1.2、Direct3D 11.1,KB2670838):[다운로드 링크 1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[다운로드 링크 2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
|
||||
|
||||
##### .NET 8 애플리케이션이 Windows 7에서 비정상적으로 실행되는 문제 완화 조치 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
Windows 7에서 .NET 8 애플리케이션을 실행할 때 메모리 사용량이 비정상적으로 증가하는 문제가 있습니다. 아래의 완화 조치를 참조하세요. Windows 8/8.1은 테스트되지 않았습니다. 동일한 문제가 있는 경우, 문서를 업데이트할 수 있도록 Issue를 제출해 주세요.
|
||||
|
||||
1. `컴퓨터`를 열고 빈 공간을 마우스 오른쪽 버튼으로 클릭하여 속성을 클릭하고, 왼쪽의 `고급 시스템 설정`을 클릭한 다음 `환경 변수`를 클릭합니다.
|
||||
2. 새 시스템 변수를 만들고, 변수 이름을 `DOTNET_EnableWriteXorExecute`, 변수 값을 `0`으로 설정합니다.
|
||||
3. 컴퓨터를 재시작합니다.
|
||||
.NET 10은 Windows 7 / 8 / 8.1 시스템을 지원하지 않으므로<sup>[출처](https://github.com/dotnet/core/issues/7556)</sup>, MAA도 더 이상 지원하지 않습니다.
|
||||
|
||||
## 연결 오류
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ icon: hugeicons:brain-02
|
||||
- 용문 시내:LungmenDowntown@Annihilation
|
||||
|
||||
- 상시 개방 이벤트의 경우 `OF-1`/`OF-F3`/`GT-5`와 같이 입력합니다.
|
||||
- 현재 개방된 사이드 스토리 이벤트의 세 개의 스테이지입니다. [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json)에서 업데이트를 자동으로 다운로드 한 후 화면 하단에 표시됩니다.
|
||||
- 현재 개방된 사이드 스토리 이벤트의 세 개의 스테이지입니다. [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json)에서 업데이트를 자동으로 다운로드 한 후 화면 하단에 표시됩니다.
|
||||
- 재개방된 사이드 스토리 이벤트. `SSReopen-<스테이지 접두사>`를 입력하면 XX-1~XX-9 스테이지를 한 번에 완료할 수 있습니다. 예: `SSReopen-IC`.
|
||||
|
||||
::: details 예시 화면
|
||||
|
||||
@@ -49,25 +49,9 @@ winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /nore
|
||||
|
||||
对于 Windows N/KN(欧洲/韩国),还需安装[媒体功能包](https://support.microsoft.com/zh-cn/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a)。
|
||||
|
||||
#### Windows 7
|
||||
#### Windows 7 / 8 / 8.1
|
||||
|
||||
.NET 10 不支持 Windows 7 / 8 / 8.1 系统<sup>[源](https://github.com/dotnet/core/issues/7556)</sup>,所以 MAA 也同样不再支持。最后一个可用的 .NET 8 版本为 [`v5.4.0-beta.1.d035.gd2e5001e7`](https://github.com/MaaAssistantArknights/MaaRelease/releases/tag/v5.4.0-beta.1.d035.gd2e5001e7);最后一个可用的 .NET 4.8 版本为 [`v4.28.8`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/tag/v4.28.8)。尚未确定自行编译的可行性。
|
||||
|
||||
对于 Windows 7,在安装上文提到的两个运行库之前,还需检查以下补丁是否已安装:
|
||||
|
||||
1. [Windows 7 Service Pack 1](https://support.microsoft.com/zh-cn/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
|
||||
2. SHA-2 代码签名补丁:
|
||||
- KB4474419:[下载链接 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[下载链接 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
|
||||
- KB4490628:[下载链接 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[下载链接 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
|
||||
3. Platform Update for Windows 7(DXGI 1.2、Direct3D 11.1,KB2670838):[下载链接 1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[下载链接 2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
|
||||
|
||||
##### .NET 8 应用在 Windows 7 上运行异常的缓解措施 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
在 Windows 7 上运行 .NET 8 应用时,会出现内存占用异常的问题,请参阅下文实施缓解措施。Windows 8/8.1 未经测试,若存在相同问题,请顺手发个 Issue 提醒我们补充文档。
|
||||
|
||||
1. 打开 `计算机`,右键空白处,点击属性,点击左侧 `高级系统设置`,点击 `环境变量`。
|
||||
2. 新建一个系统变量,变量名 `DOTNET_EnableWriteXorExecute`,变量值 `0`。
|
||||
3. 重启电脑。
|
||||
.NET 10 不支持 Windows 7 / 8 / 8.1 系统<sup>[源](https://github.com/dotnet/core/issues/7556)</sup>,所以 MAA 也同样不再支持。
|
||||
|
||||
## 连接错误
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ icon: hugeicons:brain-02
|
||||
- 龙门市区:LungmenDowntown@Annihilation
|
||||
|
||||
- 别传中的 `OF-1` / `OF-F3` / `GT-5`。
|
||||
- 当期 SS 活动 后三关。在自动访问 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) 下载更新后会在界面下方显示。
|
||||
- 当期 SS 活动 后三关。在自动访问 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) 下载更新后会在界面下方显示。
|
||||
- 复刻的 SS 活动。输入 `SSReopen-<关卡前缀>` ,可一次性刷完 XX-1 ~ XX-9 关,如 `SSReopen-IC`。
|
||||
|
||||
::: details 示例画面
|
||||
|
||||
@@ -128,7 +128,7 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
- 龙门外环:LungmenOutskirts@Annihilation
|
||||
- 龙门市区:LungmenDowntown@Annihilation
|
||||
- 别传中的 OF-1 / OF-F3 / GT-5。
|
||||
- 当期 SS 活动 后三关。可访问 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) 获取支持的关卡列表。需额外加载 [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) 文件中的活动关卡导航。
|
||||
- 当期 SS 活动 后三关。可访问 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) 获取支持的关卡列表。需额外加载 [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) 文件中的活动关卡导航。
|
||||
- 复刻的 SS 活动。输入 `SSReopen-<关卡前缀>` ,可一次性刷完 XX-1 ~ XX-9 关,如 `SSReopen-IC`。
|
||||
:::
|
||||
::: field name="medicine" type="number" optional default="0"
|
||||
|
||||
@@ -50,30 +50,9 @@ winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /nore
|
||||
|
||||
若您使用的是 Windows N / KN(歐洲或韓國版本),需額外安裝 [Media Feature Pack](https://support.microsoft.com/zh-tw/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a)。
|
||||
|
||||
#### Windows 7
|
||||
#### Windows 7 / 8 / 8.1
|
||||
|
||||
由於 .NET 10 已停止支援 Windows 7 / 8 / 8.1 系統 <sup>[來源](https://github.com/dotnet/core/issues/7556)</sup>,MAA 亦隨之停止支援。若您仍需在這些系統上執行,請下載以下相容版本:
|
||||
|
||||
- 支援 .NET 8 的最後版本:[`v5.4.0-beta.1.d035.gd2e5001e7`](https://github.com/MaaAssistantArknights/MaaRelease/releases/tag/v5.4.0-beta.1.d035.gd2e5001e7)
|
||||
- 支援 .NET 4.8 的最後版本:[`v4.28.8`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/tag/v4.28.8)
|
||||
(目前尚未確定自行編譯的可行性。)
|
||||
|
||||
若要在 Windows 7 安裝上述執行庫,請先確認系統已安裝下列修正程式:
|
||||
|
||||
1. [Windows 7 Service Pack 1](https://support.microsoft.com/zh-tw/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
|
||||
2. SHA-2 程式碼簽署修正程式:
|
||||
- KB4474419:[下載連結 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[下載連結 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
|
||||
- KB4490628:[下載連結 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[下載連結 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
|
||||
3. Platform Update for Windows 7(DXGI 1.2、Direct3D 11.1,KB2670838):[下載連結 1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[下載連結 2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
|
||||
|
||||
##### .NET 8 應用程式於 Windows 7 執行異常之緩解措施 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
在 Windows 7 執行 .NET 8 應用程式時,可能出現記憶體佔用異常。請參考下列步驟操作:
|
||||
(Windows 8 / 8.1 未經測試,若有相同問題,歡迎提交 Issue 協助我們補充文件)
|
||||
|
||||
1. 開啟 `本機`(電腦),在空白處點擊右鍵選擇 `內容`,點擊左側 `進階系統設定`,點擊 `環境變數`。
|
||||
2. 新建一個「系統變數」,變數名稱:`DOTNET_EnableWriteXorExecute`,變數值:`0`。
|
||||
3. 重新啟動電腦。
|
||||
.NET 10 不支援 Windows 7 / 8 / 8.1 系統<sup>[來源](https://github.com/dotnet/core/issues/7556)</sup>,所以 MAA 也同樣不再支援。
|
||||
|
||||
## 連線錯誤
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ icon: hugeicons:brain-02
|
||||
- 龍門市區:LungmenDowntown@Annihilation
|
||||
|
||||
- 別傳中的 `OF-1` / `OF-F3` / `GT-5`。
|
||||
- 當期 SS 活動後三關。在自動存取 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) 下載更新後會在介面下方顯示。
|
||||
- 當期 SS 活動後三關。在自動存取 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) 下載更新後會在介面下方顯示。
|
||||
- 復刻的 SS 活動。輸入 `SSReopen-<關卡前綴>` ,可一次性刷完 XX-1 ~ XX-9 關,如 `SSReopen-IC`。
|
||||
|
||||
::: details 範例畫面
|
||||
|
||||
@@ -129,7 +129,7 @@ B 服:`張三`,可輸入 `張三`、`張`、`三`
|
||||
- 龍門外環:`LungmenOutskirts@Annihilation`
|
||||
- 龍門市區:`LungmenDowntown@Annihilation`
|
||||
- **別傳**:支援 `OF-1` / `OF-F3` / `GT-5`。
|
||||
- **當期 SideStory 活動**:支援活動後三關。可查閱 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json) 獲取支援的關卡列表。需額外加載 [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) 中的活動關卡導航。
|
||||
- **當期 SideStory 活動**:支援活動後三關。可查閱 [API](https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivityV2.json) 獲取支援的關卡列表。需額外加載 [tasks.json](https://api.maa.plus/MaaAssistantArknights/api/resource/tasks.json) 中的活動關卡導航。
|
||||
- **復刻 SideStory 活動**:輸入 `SSReopen-<關卡前綴>` ,可一次性刷完 XX-1 ~ XX-9 關,如 `SSReopen-IC`。
|
||||
:::
|
||||
::: field name="medicine" type="number" optional default="0"
|
||||
|
||||
@@ -30,6 +30,8 @@ typedef enum AsstWin32InputMethodEnum
|
||||
AsstWin32InputMethod_PostThreadMessage = 1 << 4,
|
||||
AsstWin32InputMethod_SendMessageWithCursorPos = 1 << 5,
|
||||
AsstWin32InputMethod_PostMessageWithCursorPos = 1 << 6,
|
||||
AsstWin32InputMethod_SendMessageWithWindowPos = 1 << 7,
|
||||
AsstWin32InputMethod_PostMessageWithWindowPos = 1 << 8,
|
||||
} AsstWin32InputMethodEnum;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -17,73 +17,73 @@
|
||||
"JieGarden@Roguelike@CoppersNameOcrReplace": {
|
||||
"ocrReplace": [
|
||||
[" |-", ""],
|
||||
["[Bb]al:[Bb]i?tt?e?r[Cc]old", "衡-苦寒"],
|
||||
["[Bb]al:[Dd]esir?e[Ff]ul?f+i?ll?ed", "衡-志欲遂"],
|
||||
["[Bb]al:[Dd]ewin[Gg]old", "衡-金寒水衍"],
|
||||
["[Bb]al:[Dd]ownpour", "衡-霖雨"],
|
||||
["[Bb]al:[Dd]ry[Hh]eat", "衡-旱热"],
|
||||
["[Bb]al:[Ff]ierce[Gg]ale", "衡-匪风"],
|
||||
["[Bb]al:[Ff]rontier[Mm]oon", "衡-塞上月"],
|
||||
["[Bb]al:[Ff]rost&[Ss]now", "衡-霜雪"],
|
||||
["[Bb]al:[Gg]arr?ison[Ff]arm", "衡-军屯垦"],
|
||||
["[Bb]al:[Gg]oo?d[Hh]arvest", "衡-庆丰收"],
|
||||
["[Bb]al:[Hh]oarfrost", "衡-雾凇"],
|
||||
["[Bb]al:[Mm]oving[Mm]ounts", "衡-移山繁"],
|
||||
["[Bb]al:[Oo]riginal[Ss]cript", "衡-初有文"],
|
||||
["[Bb]al:[Pp]rimal[Ff]arming", "衡-鸿蒙开荒"],
|
||||
["[Bb]al:[Rr]?ainbow", "衡-虹霓"],
|
||||
["[Bb]al:[Rr]egular[Ee]xercise", "衡-勤运体"],
|
||||
["[Bb]al:[Rr]ogue[Tt]oken", "衡-诡意代币"],
|
||||
["[Bb]al:[Ss]apient[Ee]vasion", "衡-慧避灾"],
|
||||
["[Bb]al:[Ss]o?il[Bb]orn[Mm]etal", "衡-奇土生金"],
|
||||
["[Bb]al:[Tt]hunderclap", "衡-霹雳"],
|
||||
["[Bb]al:[Ww]aterwoo?d[Gg]uard", "衡-水生木护"],
|
||||
["[Bb]al:[Ww]oo?d[Ff]ee?ds[Ff]lames", "衡-投木炎延"],
|
||||
["[Bb]al:[Ww]orld.?s[Pp]ionee?r", "衡-天下先"],
|
||||
["[Bb]al[Bb]i?tt?e?r[Cc]old", "衡-苦寒"],
|
||||
["[Bb]al[Tt]estee?", "衡-志欲遂"],
|
||||
["[Bb]al[Mm]etalto[Ww]ater", "衡-金寒水衍"],
|
||||
["[Bb]al[Rr]ain", "衡-霖雨"],
|
||||
["[Bb]al[Dd]rought", "衡-旱热"],
|
||||
["[Bb]al[Gg]ale", "衡-匪风"],
|
||||
["[Bb]al[Ff]rontier[Mm]oon", "衡-塞上月"],
|
||||
["[Bb]al[Ff]rost", "衡-霜雪"],
|
||||
["[Bb]al[Ss]tee?land[Ss]oil", "衡-军屯垦"],
|
||||
["[Bb]al[Gg]oo?d[Hh]arvest", "衡-庆丰收"],
|
||||
["[Bb]al[Rr]ime", "衡-雾凇"],
|
||||
["[Bb]al[Tt]o[Mm]ove[Mm]ounts", "衡-移山繁"],
|
||||
["[Bb]al[Aa][Pp]eople[Uu]nited", "衡-初有文"],
|
||||
["[Bb]al[Dd]awnof[Yy][Aa][Nn]", "衡-鸿蒙开荒"],
|
||||
["[Bb]al[Rr]?ainbow", "衡-虹霓"],
|
||||
["[Bb]al[Aa][Bb]ody[Hh]oned", "衡-勤运体"],
|
||||
["[Bb]al[Rr]ogue[Tt]oken", "衡-诡意代币"],
|
||||
["[Bb]al[Pp]revention", "衡-慧避灾"],
|
||||
["[Bb]al[Ss]oilto[Mm]etal", "衡-奇土生金"],
|
||||
["[Bb]al[Tt]hunder", "衡-霹雳"],
|
||||
["[Bb]al[Ww]aterto[Ww]oo?d", "衡-水生木护"],
|
||||
["[Bb]al[Ww]oo?dto[Ff]ire", "衡-投木炎延"],
|
||||
["[Bb]al[Tt]railblazer", "衡-天下先"],
|
||||
["[Dd]ayan[Tt]ongh?bao", "大炎通宝"],
|
||||
["[Ff]antastical", "入幻"],
|
||||
["[Ff]lower:[Bb]ustl?ing[Tt]rade", "花-百业俱兴"],
|
||||
["[Ff]lower:[Cc]hidao[Gg]rowth", "花-驰道长"],
|
||||
["[Ff]lower:[Cc]ocoo?n[Ss]ilk", "花-茧成绢"],
|
||||
["[Ff]lower:[Cc]ohesive[Mm]ight", "花-聚力则强"],
|
||||
["[Ff]lower:[Cc]ultivate[Ss]elf", "花-修性情"],
|
||||
["[Ff]lower:[Dd]uck[Cc]oin", "花-鸭爵金币"],
|
||||
["[Ff]lower:[Ff]ire[Ff]orms[Ss]oil", "花-火灼土沃"],
|
||||
["[Ff]lower:[Gg]odbless?ed", "花-圣诏封神"],
|
||||
["[Ff]lower:[Hh]eavy[Dd]uties", "花-己任重"],
|
||||
["[Ff]lower:[Ll]ong[Dd]istance", "花-载道远"],
|
||||
["[Ff]lower:[Mm]artial[Ff]ight", "花-武人之争"],
|
||||
["[Ff]lower:[Oo]dd[Mm]erchant", "花-神秘商贾"],
|
||||
["[Ff]lower:[Ss]and[Ss]hield", "花-平沙之盾"],
|
||||
["[Ff]lower:[Ss]tove[Aa]light", "花-火上之灶"],
|
||||
["[Ff]lower:[Uu]nclouded[Mm]ind", "花-心无患"],
|
||||
["[Rr]isk?:[Aa]rduous[Tt]rade", "厉-商路难行"],
|
||||
["[Rr]isk?:[Bb]iding[Tt]ime", "厉-待机缘"],
|
||||
["[Rr]isk?:[Bb]loo?dshed[Ss]pill?", "厉-战血流"],
|
||||
["[Rr]isk?:[Cc]ity[Cc]oncerns", "厉-隐市忧"],
|
||||
["[Rr]isk?:[Cc]ontent[Mm]egamus", "厉-安硕鼷"],
|
||||
["[Rr]isk?:[Dd]ark[Cc]oncealment", "厉-无皎之昧"],
|
||||
["[Rr]isk?:[Dd]awn.?s[Tt]eachings", "厉-朝闻道"],
|
||||
["[Rr]isk?:[Dd]ream[Cc]urio", "厉-梦奇物"],
|
||||
["[Rr]isk?:[Ee]astern[Gg]ap", "厉-东缺角"],
|
||||
["[Rr]isk?:[Ff]irst[Ww]ord[Ff]all?s", "厉-一字落"],
|
||||
["[Rr]isk?:[Gg]iftof[Aa]cc?ord", "厉-合乎礼"],
|
||||
["[Rr]isk?:[Ll]awand[Oo]rder", "厉-法与律"],
|
||||
["[Rr]isk?:[Ll]ei[Ff]a[Pp]unishment", "厉-诛邪雷法"],
|
||||
["[Rr]isk?:[Mm]ortal[Ee]ndurance", "厉-人间长存"],
|
||||
["[Rr]isk?:[Mm]oving[Mm]ount[Hh]ard", "厉-移山难"],
|
||||
["[Rr]isk?:[Nn]orthern[Ss]ting", "厉-北刺面"],
|
||||
["[Rr]isk?:[Pp]ainter.?s[Rr]ealm", "厉-画人间"],
|
||||
["[Rr]isk?:[Ss]henn?ong[Ww]atches", "厉-神农守"],
|
||||
["[Rr]isk?:[Ss]inister[Ss]tealth", "厉-黑子伏"],
|
||||
["[Rr]isk?:[Ss]outhern[Mm]ounts", "厉-南见山"],
|
||||
["[Rr]isk?:[Ss]trenuous[Ss]tudy", "厉-寒窗志"],
|
||||
["[Rr]isk?:[Ss]ui.?s[Aa]wakening", "厉-岁醒天时"],
|
||||
["[Rr]isk?:[Tt]wo[Rr]iver[Ss]pring", "厉-两江春"],
|
||||
["[Rr]isk?:[Uu]niversal[Cc]hange", "厉-凡物变"],
|
||||
["[Rr]isk?:[Ww]eiq[ij]?[Cc]hance", "厉-遇良弈"],
|
||||
["[Rr]isk?:[Ww]est[Ll]ianzhen[Mm]t.?", "厉-西廉贞"],
|
||||
["[Rr]isk?:[Ww]ild[Pp]ass?ion", "厉-恣狂情"],
|
||||
["[Ff]lower[Tt]rades", "花-百业俱兴"],
|
||||
["[Ff]lower[Ll]ong[Rr]oad", "花-驰道长"],
|
||||
["[Ff]lower[Cc]ocoo?n[Ww]orth", "花-茧成绢"],
|
||||
["[Ff]lower[Uu]nity.?s[Mm]ight", "花-聚力则强"],
|
||||
["[Ff]lower[Mm]indfulness?", "花-修性情"],
|
||||
["[Ff]lower[Dd]uck[Cc]oin", "花-鸭爵金币"],
|
||||
["[Ff]lower[Ff]ireto[Ss]oil", "花-火灼土沃"],
|
||||
["[Ff]lower[Th]e[Aa]scent", "花-圣诏封神"],
|
||||
["[Ff]lower[Hh]eavy[Dd]uties", "花-己任重"],
|
||||
["[Ff]lower[Ii]deas[Cc]arried", "花-载道远"],
|
||||
["[Ff]lower[Mm]artial[Ff]ight", "花-武人之争"],
|
||||
["[Ff]lower[Oo]dd[Mm]erchant", "花-神秘商贾"],
|
||||
["[Ff]lower[Th]e[Bb]ulwark", "花-平沙之盾"],
|
||||
["[Ff]lower[Ss]tove[Aa]light", "花-火上之灶"],
|
||||
["[Ff]lower[Uu]nclouded", "花-心无患"],
|
||||
["[Rr]isk[Tt]ollfor[Rr]oads", "厉-商路难行"],
|
||||
["[Rr]isk[Bb]iding[Tt]ime", "厉-待机缘"],
|
||||
["[Rr]isk[Bb]loodshed", "厉-战血流"],
|
||||
["[Rr]isk[Gg]etaway", "厉-隐市忧"],
|
||||
["[Rr]isk[Tt]aming[Mm]egamus", "厉-安硕鼷"],
|
||||
["[Rr]isk[Dd]arkness?", "厉-无皎之昧"],
|
||||
["[Rr]isk[Ee]nlightenment", "厉-朝闻道"],
|
||||
["[Rr]isk[Dd]reamof[Cc]urio", "厉-梦奇物"],
|
||||
["[Rr]isk[Ee]astern[Gg]ap", "厉-东缺角"],
|
||||
["[Rr]isk[Ff]all?ing[Ww]ord", "厉-一字落"],
|
||||
["[Rr]isk[Gg]iftof[Aa]cc?ord", "厉-合乎礼"],
|
||||
["[Rr]isk[Ll]awand[Rr]itual", "厉-法与律"],
|
||||
["[Rr]isk[Ll]ei[Ff]a.?s[Pp]urge", "厉-诛邪雷法"],
|
||||
["[Rr]isk[Tt]hey[Ww]ho[Ee]ndure", "厉-人间长存"],
|
||||
["[Rr]isk[Uu]nmoved[Mm]ounts", "厉-移山难"],
|
||||
["[Rr]isk[Nn]orthern[Ss]ting", "厉-北刺面"],
|
||||
["[Rr]isk[Pp]ainter.?s[Rr]ealm", "厉-画人间"],
|
||||
["[Rr]isk[Ss]henn?ong[Ww]atch", "厉-神农守"],
|
||||
["[Rr]isk[Hh]idd?en[Gg]ambit", "厉-黑子伏"],
|
||||
["[Rr]isk[Ss]outhern[Mm]ounts", "厉-南见山"],
|
||||
["[Rr]isk[Ss]tudy", "厉-寒窗志"],
|
||||
["[Rr]isk[Ss]ui.?s[Aa]wakening", "厉-岁醒天时"],
|
||||
["[Rr]isk[Ss]pring[Rr]ivers", "厉-两江春"],
|
||||
["[Rr]isk[Cc]onstant[Cc]hange", "厉-凡物变"],
|
||||
["[Rr]isk[Aa][Gg]oo?d[Mm]atch", "厉-遇良弈"],
|
||||
["[Rr]isk[Ww]est[Ss]tones", "厉-西廉贞"],
|
||||
["[Rr]isk[Ww]ild[Pp]ass?ion", "厉-恣狂情"],
|
||||
["[Rr]usty", "锈色"],
|
||||
["[Ss]urvival", "存护"],
|
||||
["rogue_5_copper_buff_F_28_a", "衡-挪移"],
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
["Masquerade Mask", "假面舞会面具"],
|
||||
["Live Rose", "活玫瑰"],
|
||||
["Elite Caster Rec.? *Voucher", "高级术师招募券"],
|
||||
["‘Profound Silence'?", "《大静谧》"],
|
||||
["'?Profound Silence'?", "《大静谧》"],
|
||||
["Medic Rec.? *Voucher", "医疗招募券"],
|
||||
["Defender Rec.? *Voucher", "重装招募券"],
|
||||
["'?Gaulish Toponym Origins'?", "《旧高卢地名源流考》"],
|
||||
@@ -941,7 +941,8 @@
|
||||
},
|
||||
"Roguelike@StageEncounterOcr": {
|
||||
"ocrReplace": [
|
||||
[" |<|>|-", ""],
|
||||
["\\s+o+\\s*$", ""],
|
||||
[" |<|>|-|'", ""],
|
||||
["^\\d+", ""],
|
||||
["Disappear\\.\\.\\.", "消失......"],
|
||||
["Disappear\\.", "消失。"],
|
||||
@@ -950,7 +951,6 @@
|
||||
["TheKindPuppet", "善良的木偶"],
|
||||
["TellerofTales", "讲故事的人"],
|
||||
["AdventurerComm[ission]*", "委托冒险者"],
|
||||
["RoyalRumble'?", "皇家争执"],
|
||||
["AdvanceSquad", "先遣小队"],
|
||||
["GaulishVeteran", "高卢老兵"],
|
||||
["HallucinatoryCandlelights", "迷幻烛火"],
|
||||
@@ -1041,15 +1041,15 @@
|
||||
["EmergencyDispatch", "紧急调遣"],
|
||||
["AtaGlance", "瞥视"],
|
||||
["Tulip.*sCommission", "郁金香的委托"],
|
||||
["Bob'sEmporium", "鲍勃杂货店"],
|
||||
["BobsEmporium", "鲍勃杂货店"],
|
||||
["VacationSpot", "度假胜地"],
|
||||
["'?TheSwordintheStone'?", "“石中剑”"],
|
||||
["'?TinMan'?", "“锡人”"],
|
||||
["TheSwordintheStone", "“石中剑”"],
|
||||
["TinMan", "“锡人”"],
|
||||
["MissingMountains", "不见群山"],
|
||||
["Reprieve\\??", "解脱?"],
|
||||
["OnsiteatPublicSignalAmplificationStation756", "在地公共信号放大站756号"],
|
||||
["'?ArtConnoisseur'?", "“鉴赏家”"],
|
||||
["'?RoyalRumble'?", "“皇家争执”"],
|
||||
["ArtConnoisseur", "“鉴赏家”"],
|
||||
["RoyalRumble", "“皇家争执”"],
|
||||
["SearchingForAPathForward", "探寻前路"],
|
||||
["OperationRewards", "行动奖励"],
|
||||
["DuckLordtheLeadActor\\??", "鸭爵主演?"],
|
||||
@@ -1068,7 +1068,7 @@
|
||||
["SobbingintheSwamp", "沼泽里的抽泣声"],
|
||||
["AProfitablePlan", "有利可图"],
|
||||
["Entourage", "随行人员"],
|
||||
["DuckLord'sSinisterPlot", "邪恶计划鸭"],
|
||||
["DuckLordsSinisterPlot", "邪恶计划鸭"],
|
||||
["ChainofCamps", "百里连营"],
|
||||
["OnstageInvitation", "请君入戏"],
|
||||
["NorthwindWitch", "北风女巫"],
|
||||
@@ -1077,10 +1077,10 @@
|
||||
["EntrancetotheAbyss", "深渊入口"],
|
||||
["WoundedPrimeTree", "负伤的主树"],
|
||||
["ResearchOutpost", "科考站"],
|
||||
["Sami'sLanguage", "萨米之语"],
|
||||
["SamisLanguage", "萨米之语"],
|
||||
["Ursus", "乌萨斯"],
|
||||
["UselessItem", "无用之物"],
|
||||
["Clairvoyance'sDirection", "远见所向"],
|
||||
["ClairvoyancesDirection", "远见所向"],
|
||||
["ForwardForest", "前行的林地"],
|
||||
["TrimountsTravelAgencyDispatch", "特里蒙旅行社特派团"],
|
||||
["OnsiteatPublicNomadicStationN6", "在地公共移动站N6号"],
|
||||
@@ -1089,9 +1089,9 @@
|
||||
["UnfreezingRiver", "不冻河"],
|
||||
["FenceofWoodandSnow", "雪与木的笆篱"],
|
||||
["AmmaTal", "安玛塔卢"],
|
||||
["CrossingSami'sArm", "走过萨米的臂膀"],
|
||||
["CrossingSamisArm", "走过萨米的臂膀"],
|
||||
["ShatteredOmen", "木裂前兆"],
|
||||
["Pessimist'sCage", "悲观者囚笼"],
|
||||
["PessimistsCage", "悲观者囚笼"],
|
||||
["Change", "变化"],
|
||||
["Reconstruction", "重构"],
|
||||
["OneSmallStepforExpeditioners", "探索者的一小步"],
|
||||
@@ -1120,7 +1120,7 @@
|
||||
["EmployeeofBabel", "巴别塔雇员"],
|
||||
["SoulExperiences.*TwinGargoyles?", "魂灵见闻:石心双子"],
|
||||
["FinalPage", "尾页"],
|
||||
["TheDissident'sSound", "扣响异音"],
|
||||
["TheDissidentsSound", "扣响异音"],
|
||||
["DecipheringEvolution", "解读变迁"],
|
||||
["TowerofThoughts", "聚思成塔"],
|
||||
["HighestBidderWins", "价高者得"],
|
||||
@@ -1193,10 +1193,8 @@
|
||||
["HundredClanRebellion", "百氏之乱"],
|
||||
["TheFinishingStroke", "收笔"],
|
||||
["MeetingaFriend", "会友"]
|
||||
]
|
||||
},
|
||||
"Roguelike@StageTraderInvestSystem": {
|
||||
"maskRange": [1, 255]
|
||||
],
|
||||
"roi": [0, 395, 725, 235]
|
||||
},
|
||||
"Roguelike@StageTraderInvestSystemFull": {
|
||||
"text": ["Storage full"]
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
["Reserve Operator *-* *M[elee]*", "预备干员-近战"],
|
||||
["Angelina", "安洁莉娜"],
|
||||
["Sora", "空"],
|
||||
["Ss?k?ad?i? the Co?rru?pt?ing ?[Heart]*", "浊心斯卡蒂"],
|
||||
["Skadi the Corrupting ?[Heart]*", "浊心斯卡蒂"],
|
||||
["Scene", "稀音"],
|
||||
["Suzuran", "铃兰"],
|
||||
["Mayer", "梅尔"],
|
||||
@@ -877,7 +877,7 @@
|
||||
["Scoring Station", "大战记分站"],
|
||||
["Gramophone Pedestal", "“留声机”底座"],
|
||||
["Blaze the Igniting Spark", "烛煌"],
|
||||
["Yu", "余"],
|
||||
["^Yu$", "余"],
|
||||
["Surfer", "寻澜"],
|
||||
["Xingzhu", "行箸"],
|
||||
["Stove", "火灶"],
|
||||
@@ -1532,7 +1532,7 @@
|
||||
"text": ["All"]
|
||||
},
|
||||
"BattleQuickFormationOCR": {
|
||||
"rectMove": [0, 231, 116, 22],
|
||||
"rectMove": [0, 234, 116, 22],
|
||||
"specialParams": [105, 2, 7, 0, 3, 10]
|
||||
},
|
||||
"BattleStartPre": {
|
||||
@@ -1586,7 +1586,7 @@
|
||||
},
|
||||
"OperBoxNameOCR": {
|
||||
"rectMove_doc": "for overwidth",
|
||||
"rectMove": [0, 265, 128, 22],
|
||||
"rectMove": [0, 264, 133, 24],
|
||||
"specialParams": [160, 4, 0, 0, 3, 10]
|
||||
},
|
||||
"SSSBegin": {
|
||||
|
||||
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1021 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 1021 B After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"AveMujica-OpenOcr": {
|
||||
"text": ["安らかな譫言", "安らかな", "ステージ開放中", "運命愛"]
|
||||
"text": ["安らかな譫言", "安ら", "讃言", "ステージ開放中", "運命愛"]
|
||||
},
|
||||
"AveMujicaChapterToAveMujica": {
|
||||
"text": ["忘れえぬ夢", "忘れえぬ"]
|
||||
|
||||
@@ -774,7 +774,7 @@
|
||||
["軍事工場指令基地", "军工厂指令平台"],
|
||||
["黄金の反響", "黄金回响"],
|
||||
["ニーラのアグニ", "尼卢火"],
|
||||
["(荒|蕪|蕉|葉|悪|慈).*ラップラン[ドト]", "荒芜拉普兰德"],
|
||||
["(荒|蕪|蕉|葉|悪|慈|無|轟).*ラップラン[ドト]?", "荒芜拉普兰德"],
|
||||
["(ク)?ラウンスレイヤ", "弑君者"],
|
||||
["(コ)?ントレイル", "云迹"],
|
||||
["(ウ)?ルピスフォリ", "忍冬"],
|
||||
@@ -1427,7 +1427,7 @@
|
||||
"text": ["COST"]
|
||||
},
|
||||
"BattleQuickFormationOCR": {
|
||||
"specialParams": [140, 2, 0, 0, 3, 12]
|
||||
"specialParams": [160, 4, 0, 0, 3, 12]
|
||||
},
|
||||
"BattleStartPre": {
|
||||
"ocrReplace": [["算.*", ""]],
|
||||
@@ -1440,10 +1440,12 @@
|
||||
"text": ["演算", "開始"]
|
||||
},
|
||||
"BattleOperName": {
|
||||
"roi": [5, 177, 280, 37]
|
||||
"roi": [5, 177, 280, 37],
|
||||
"specialParams": [160, 4, 0, 0, 0, 12]
|
||||
},
|
||||
"SSSBattleOperName": {
|
||||
"roi": [0, 105, 300, 31]
|
||||
"roi": [0, 105, 300, 31],
|
||||
"specialParams": [160, 4, 0, 0, 0, 12]
|
||||
},
|
||||
"OperBoxSortTabSelect": {
|
||||
"text": ["レベル"]
|
||||
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"GO-OpenOcr": {
|
||||
"text": ["위대한", "서곡의", "끝", "이벤트", "개방중"]
|
||||
"text": ["위대한", "서곡의", "의끝"]
|
||||
},
|
||||
"GOChapterToGO": {
|
||||
"text": ["무명", "공훈"]
|
||||
|
||||
@@ -1622,7 +1622,8 @@
|
||||
[".*사이언스아카.*", "皇家科学院望远镜"],
|
||||
["보안인재.*", "保全人才合作协议"],
|
||||
["소형조준.*", "轻型瞄准测距仪"],
|
||||
["천공야행세트", "天工夜行套装"]
|
||||
["천공야행세트", "天工夜行套装"],
|
||||
["역제압장갑세트", "反制装甲套组"]
|
||||
]
|
||||
},
|
||||
"SSSBuffChooseConfirm": {
|
||||
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -56,7 +56,7 @@
|
||||
["衡-重鎧", "衡-重铠"],
|
||||
["厲-[火人]機", "厉-火机"],
|
||||
["厲-歲醒天時", "厉-岁醒天时"],
|
||||
["厲-無皎之昧", "厉-无皎之昧"],
|
||||
["厲-無[皎咬]之[昧味]", "厉-无皎之昧"],
|
||||
["衡-慶豐收", "衡-庆丰收"],
|
||||
["衡-塞上月", "衡-塞上月"],
|
||||
["花-聚力則強", "花-聚力则强"],
|
||||
|
||||
@@ -19,14 +19,16 @@
|
||||
["先手必勝", "先手必胜"],
|
||||
["穩.*穩打", "稳扎稳打"],
|
||||
["取長補(短|矩)", "取长补短"],
|
||||
["隨心所欲", "随心所欲"]
|
||||
["隨心所欲", "随心所欲"],
|
||||
["靈活部署", "灵活部署"],
|
||||
["堅不可摧", "坚不可摧"]
|
||||
]
|
||||
},
|
||||
"RoguelikeCustom-HijackSquad": {
|
||||
"ocrReplace": [
|
||||
["(指|自)揮分.*", "指挥分队"],
|
||||
["集群分.*", "集群分队"],
|
||||
[".*勤分.*", "后勤分队"],
|
||||
["後勤分隊", "后勤分队"],
|
||||
["矛.*分.*", "矛头分队"],
|
||||
["突.*分.*", "突击战术分队"],
|
||||
["堡.*分.*", "堡垒战术分队"],
|
||||
@@ -972,12 +974,12 @@
|
||||
["觀者自在", "观者自在"],
|
||||
["滾圓財[才]?神", "滚圆财神"],
|
||||
["天險", "天险"],
|
||||
["[千壬]古鴨帝", "千古鸭帝"],
|
||||
["[千干壬]古鴨帝", "千古鸭帝"],
|
||||
["來者不拒", "来者不拒"],
|
||||
[".*鮑老闆連鎖.*", "“鲍老板连锁”"],
|
||||
["老[賊成]羽", "老贼羽"],
|
||||
["應.*蘊.*而生", "应“蕴”而生"],
|
||||
["掌燈與引燭", "掌灯与引烛"],
|
||||
["[堂掌]燈與引燭", "掌灯与引烛"],
|
||||
["護鴨金剛", "护鸭金刚"],
|
||||
["點睛", "点睛"],
|
||||
["種因得果", "种因得果"],
|
||||
|
||||
@@ -1099,7 +1099,7 @@
|
||||
["為崖作倀", "为崖作伥"],
|
||||
["作壁上觀", "作壁上观"],
|
||||
["神遊天外", "神游天外"],
|
||||
["往事喑啞", "往事喑哑"],
|
||||
["往事[喑暗][啞吐]", "往事喑哑"],
|
||||
["長驅不復", "长驱不复"],
|
||||
["南武群英會", "南武群英会"],
|
||||
["識文", "识文"],
|
||||
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"activity": {
|
||||
"name": "鏡中集",
|
||||
"time": 1769407200
|
||||
"name": "太陽甩在身後·復刻",
|
||||
"time": 1770883200
|
||||
},
|
||||
"gacha": {
|
||||
"pool": "青霆重明",
|
||||
"time": 1769407200
|
||||
},
|
||||
"last_updated": "2026-02-05 08:23:09.000"
|
||||
"last_updated": "2026-02-12 08:23:37.000"
|
||||
}
|
||||
|
||||
@@ -2891,6 +2891,9 @@
|
||||
},
|
||||
"bskill_meet_bd_to_spd": {
|
||||
"desc": ["进驻会客室时,线索搜集速度提升20%,同时每10点人间烟火额外提升1%"],
|
||||
"efficient": {
|
||||
"General": 20
|
||||
},
|
||||
"name": ["扶危行侠"],
|
||||
"template": "Bskill_meet_bd_to_spd.png"
|
||||
},
|
||||
@@ -2925,6 +2928,9 @@
|
||||
},
|
||||
"bskill_meet_exchange2": {
|
||||
"desc": ["进驻会客室时,处于线索交流时线索搜集速度提升30%"],
|
||||
"efficient": {
|
||||
"General": 15
|
||||
},
|
||||
"name": ["特殊渠道顾问"],
|
||||
"template": "Bskill_meet_exchange2.png"
|
||||
},
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
],
|
||||
"templThreshold": 0.75,
|
||||
"rectMove_Doc": "识别后 move 给 click 用",
|
||||
"rectMove": [-5, 0, 350, 100]
|
||||
"rectMove": [-5, 0, 50, 70]
|
||||
},
|
||||
"BattleQuickFormationSkillLevel-OCR": {
|
||||
"baseTask": "NumberOcrReplace",
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
"doc": "识别到要组装的道具后点击",
|
||||
"algorithm": "OcrDetect",
|
||||
"text": ["荧光棒"],
|
||||
"fullMatch": true,
|
||||
"roi": [274, 68, 960, 535],
|
||||
"action": "ClickSelf",
|
||||
"postDelay": 500
|
||||
|
||||
@@ -1419,8 +1419,8 @@
|
||||
"next": [
|
||||
"Roguelike@StageVerticalConfirmTrader",
|
||||
"Roguelike@StageTraderEnter",
|
||||
"Roguelike@StageTraderRefreshWithDice",
|
||||
"Roguelike@StageTraderInvestSystem",
|
||||
"Roguelike@StageTraderRefreshWithDice",
|
||||
"Roguelike@TraderRandomShopping",
|
||||
"Roguelike@StageTraderLeave",
|
||||
"Roguelike@StageTraderLeaveConfirm"
|
||||
@@ -1556,8 +1556,8 @@
|
||||
"next": [
|
||||
"Roguelike@StageTraderSpecialShoppingAfterRefresh",
|
||||
"Roguelike@StageTraderRefreshWithDice",
|
||||
"Roguelike@TraderRandomShopping",
|
||||
"Roguelike@StageTraderInvestSystem",
|
||||
"Roguelike@TraderRandomShopping",
|
||||
"Roguelike@StageTraderLeave",
|
||||
"Roguelike@StageTraderRefreshWithDiceDoubleConfirm"
|
||||
]
|
||||
@@ -1604,8 +1604,8 @@
|
||||
"baseTask": "Roguelike@StageVerticalConfirm",
|
||||
"next": [
|
||||
"Roguelike@StageTraderEnter",
|
||||
"Roguelike@StageTraderRefreshWithDice",
|
||||
"Roguelike@StageTraderInvestSystem",
|
||||
"Roguelike@StageTraderRefreshWithDice",
|
||||
"Roguelike@TraderRandomShopping",
|
||||
"Roguelike@StageTraderLeave"
|
||||
]
|
||||
|
||||
@@ -246,61 +246,6 @@
|
||||
"text": ["前往章节"],
|
||||
"roi": [1078, 595, 112, 42]
|
||||
},
|
||||
"EnterEpisode": {
|
||||
"Doc": "base_task",
|
||||
"baseTask": "EpisodeOcrReplace",
|
||||
"action": "ClickRect",
|
||||
"isAscii": true,
|
||||
"text": [],
|
||||
"roi": [244, 270, 129, 49],
|
||||
"specificRect": [787, 281, 154, 154],
|
||||
"next": ["#self", "Stop"]
|
||||
},
|
||||
"00@EnterEpisode": {
|
||||
"text": ["EPISODE00"]
|
||||
},
|
||||
"01@EnterEpisode": {
|
||||
"text": ["EPISODE01"]
|
||||
},
|
||||
"02@EnterEpisode": {
|
||||
"text": ["EPISODE02"]
|
||||
},
|
||||
"03@EnterEpisode": {
|
||||
"text": ["EPISODE03"]
|
||||
},
|
||||
"04@EnterEpisode": {
|
||||
"text": ["EPISODE04"]
|
||||
},
|
||||
"05@EnterEpisode": {
|
||||
"text": ["EPISODE05"]
|
||||
},
|
||||
"06@EnterEpisode": {
|
||||
"text": ["EPISODE06"]
|
||||
},
|
||||
"07@EnterEpisode": {
|
||||
"text": ["EPISODE07"]
|
||||
},
|
||||
"08@EnterEpisode": {
|
||||
"text": ["EPISODE08"]
|
||||
},
|
||||
"09@EnterEpisode": {
|
||||
"text": ["EPISODE09"]
|
||||
},
|
||||
"10@EnterEpisode": {
|
||||
"text": ["EPISODE10"]
|
||||
},
|
||||
"11@EnterEpisode": {
|
||||
"text": ["EPISODE11"]
|
||||
},
|
||||
"12@EnterEpisode": {
|
||||
"text": ["EPISODE12"]
|
||||
},
|
||||
"13@EnterEpisode": {
|
||||
"text": ["EPISODE13"]
|
||||
},
|
||||
"14@EnterEpisode": {
|
||||
"text": ["EPISODE14"]
|
||||
},
|
||||
"LevelOfDifficulty": {
|
||||
"Doc": "base_task",
|
||||
"algorithm": "OcrDetect",
|
||||
@@ -334,65 +279,6 @@
|
||||
"text": ["进入作战"],
|
||||
"roi": [473, 572, 329, 144]
|
||||
},
|
||||
"SwipeLeftToEpisode": {
|
||||
"Doc": "base_task",
|
||||
"baseTask": "EpisodeOcrReplace",
|
||||
"action": "Swipe",
|
||||
"isAscii": true,
|
||||
"text": [],
|
||||
"roi": [244, 270, 129, 49],
|
||||
"specificRect": [790, 310, 10, 10],
|
||||
"rectMove": [1200, 310, 10, 10],
|
||||
"specialParams": [200, 0, 2, 0],
|
||||
"maxTimes": 20,
|
||||
"next": ["EnterEpisode", "#self"],
|
||||
"postDelay": 500
|
||||
},
|
||||
"14@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE15"]
|
||||
},
|
||||
"13@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE14", "EPISODE15"]
|
||||
},
|
||||
"12@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE13", "EPISODE14", "EPISODE15"]
|
||||
},
|
||||
"11@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE12", "EPISODE13", "EPISODE14", "EPISODE15"]
|
||||
},
|
||||
"10@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE11", "EPISODE12", "EPISODE13", "EPISODE14", "EPISODE15"]
|
||||
},
|
||||
"09@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE10", "EPISODE11", "EPISODE12", "EPISODE13", "EPISODE14", "EPISODE15"]
|
||||
},
|
||||
"08@SwipeLeftToEpisode": {
|
||||
"text": ["_SKIP_"]
|
||||
},
|
||||
"07@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE08"]
|
||||
},
|
||||
"06@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE07", "EPISODE08"]
|
||||
},
|
||||
"05@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE06", "EPISODE07", "EPISODE08"]
|
||||
},
|
||||
"04@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE05", "EPISODE06", "EPISODE07", "EPISODE08"]
|
||||
},
|
||||
"03@SwipeLeftToEpisode": {
|
||||
"text": ["_SKIP_"]
|
||||
},
|
||||
"02@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE03"]
|
||||
},
|
||||
"01@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE02", "EPISODE03"]
|
||||
},
|
||||
"00@SwipeLeftToEpisode": {
|
||||
"text": ["EPISODE01", "EPISODE02", "EPISODE03"]
|
||||
},
|
||||
"StageNavigationBegin": {
|
||||
"algorithm": "JustReturn",
|
||||
"next": ["ClickStageName", "FullStageNavigation"]
|
||||
@@ -480,14 +366,8 @@
|
||||
"template": ["NormalDifficulty.png", "NormalDifficulty-Chapter15.png"],
|
||||
"next": []
|
||||
},
|
||||
"Episode": {
|
||||
"Doc": "base_task",
|
||||
"algorithm": "JustReturn",
|
||||
"next": ["EnterEpisodeNew", "SwipeLeftToEpisode", "EnterEpisode"]
|
||||
},
|
||||
"EpisodeNew": {
|
||||
"Doc": "base_task",
|
||||
"Doc2": "15 章开始全部用新导航",
|
||||
"algorithm": "JustReturn",
|
||||
"next": ["EnterEpisodeNew", "SwipeUpToEpisode"]
|
||||
},
|
||||
@@ -501,64 +381,64 @@
|
||||
"exceededNext": ["Stop"]
|
||||
},
|
||||
"Episode0": {
|
||||
"baseTask": "00@Episode",
|
||||
"sub": ["ToChapter1@StageTheme"]
|
||||
"baseTask": "00@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode1": {
|
||||
"baseTask": "01@Episode",
|
||||
"sub": ["ToChapter1@StageTheme"]
|
||||
"baseTask": "01@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode2": {
|
||||
"baseTask": "02@Episode",
|
||||
"sub": ["ToChapter1@StageTheme"]
|
||||
"baseTask": "02@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode3": {
|
||||
"baseTask": "03@Episode",
|
||||
"sub": ["ToChapter1@StageTheme"]
|
||||
"baseTask": "03@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode4": {
|
||||
"baseTask": "04@Episode",
|
||||
"sub": ["ToChapter2@StageTheme"]
|
||||
"baseTask": "04@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode5": {
|
||||
"baseTask": "05@Episode",
|
||||
"sub": ["ToChapter2@StageTheme"]
|
||||
"baseTask": "05@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode6": {
|
||||
"baseTask": "06@Episode",
|
||||
"sub": ["ToChapter2@StageTheme"]
|
||||
"baseTask": "06@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode7": {
|
||||
"baseTask": "07@Episode",
|
||||
"sub": ["ToChapter2@StageTheme"]
|
||||
"baseTask": "07@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode8": {
|
||||
"baseTask": "08@Episode",
|
||||
"sub": ["ToChapter2@StageTheme"]
|
||||
"baseTask": "08@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode9": {
|
||||
"baseTask": "09@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "09@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode10": {
|
||||
"baseTask": "10@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "10@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode11": {
|
||||
"baseTask": "11@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "11@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode12": {
|
||||
"baseTask": "12@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "12@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode13": {
|
||||
"baseTask": "13@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "13@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode14": {
|
||||
"baseTask": "14@Episode",
|
||||
"sub": ["ToChapter3@StageTheme"]
|
||||
"baseTask": "14@EpisodeNew",
|
||||
"sub": ["ToChapterNew@StageTheme"]
|
||||
},
|
||||
"Episode15": {
|
||||
"baseTask": "15@EpisodeNew",
|
||||
@@ -771,8 +651,8 @@
|
||||
["^(?:[<4~]|《|。ぐ)+", ""],
|
||||
["^c(?!ast)", ""],
|
||||
["^\\^一", ""],
|
||||
["^_(?=.)", ""],
|
||||
["^_$", ""],
|
||||
["^[_<>]*(?=.)", ""],
|
||||
["[_<>]*$", ""],
|
||||
[".*弦惊.*", "“弦惊”"],
|
||||
[".*亚梅塔", "菲亚梅塔"],
|
||||
[".*逍遥.*", "“逍遥”"],
|
||||
@@ -789,14 +669,8 @@
|
||||
[".*威龙陈", "假日威龙陈"],
|
||||
["青积", "青枳"],
|
||||
[".*烬艾雅法.*", "纯烬艾雅法拉"],
|
||||
["^(山|一山)$", "山"],
|
||||
["^一余$", "余"],
|
||||
["^一锏$", "锏"],
|
||||
["^(煌|一煌)$", "煌"],
|
||||
["^(年|一年)$", "年"],
|
||||
["^(委|泰|一黍)$", "黍"],
|
||||
["^(令|一令)$", "令"],
|
||||
["^(夕|H|一夕)$", "夕"],
|
||||
["^[委泰黍]$", "黍"],
|
||||
["^[H夕]$", "夕"],
|
||||
["12E", "12F"],
|
||||
["归.*幽灵鲨", "归溟幽灵鲨"],
|
||||
["(临六$|^临光.*)", "临光"],
|
||||
@@ -3649,9 +3523,9 @@
|
||||
"trim_threshold_low",
|
||||
"trim_threshold_high",
|
||||
"左侧收缩时检测图的底部屏蔽高度",
|
||||
"左侧收缩时连续n像素低于bin_thresh"
|
||||
"左侧收缩时连续 n 像素低于 bin_thresh"
|
||||
],
|
||||
"specialParams": [140, 2, 0, 0, 3, 10]
|
||||
"specialParams": [160, 4, 0, 0, 3, 10]
|
||||
},
|
||||
"BattleStartPre": {
|
||||
"algorithm": "OcrDetect",
|
||||
@@ -3781,13 +3655,31 @@
|
||||
"algorithm": "OcrDetect",
|
||||
"text": [],
|
||||
"fullMatch": true,
|
||||
"roi": [5, 177, 191, 37]
|
||||
"roi": [5, 177, 191, 37],
|
||||
"specialParams_doc": [
|
||||
"bin_threshold",
|
||||
"bin_expansion",
|
||||
"trim_threshold_low",
|
||||
"trim_threshold_high",
|
||||
"收缩时检测图的底部屏蔽高度",
|
||||
"右侧收缩时连续 n 像素低于 bin_thresh"
|
||||
],
|
||||
"specialParams": [160, 4, 0, 0, 0, 10]
|
||||
},
|
||||
"SSSBattleOperName": {
|
||||
"algorithm": "OcrDetect",
|
||||
"text": [],
|
||||
"fullMatch": true,
|
||||
"roi": [0, 102, 190, 37]
|
||||
"roi": [0, 102, 190, 37],
|
||||
"specialParams_doc": [
|
||||
"bin_threshold",
|
||||
"bin_expansion",
|
||||
"trim_threshold_low",
|
||||
"trim_threshold_high",
|
||||
"收缩时检测图的底部屏蔽高度",
|
||||
"右侧收缩时连续 n 像素低于 bin_thresh"
|
||||
],
|
||||
"specialParams": [160, 4, 0, 0, 0, 10]
|
||||
},
|
||||
"BattleOfficiallyBegin": {
|
||||
"roi": [1165, 20, 75, 65],
|
||||
|
||||
@@ -85,6 +85,8 @@ constexpr Win32InputMethod LegacyEvent = 1ULL << 3;
|
||||
constexpr Win32InputMethod PostThreadMessage = 1ULL << 4;
|
||||
constexpr Win32InputMethod SendMessageWithCursorPos = 1ULL << 5;
|
||||
constexpr Win32InputMethod PostMessageWithCursorPos = 1ULL << 6;
|
||||
constexpr Win32InputMethod SendMessageWithWindowPos = 1ULL << 7;
|
||||
constexpr Win32InputMethod PostMessageWithWindowPos = 1ULL << 8;
|
||||
} // namespace Win32Input
|
||||
|
||||
#endif // _WIN32
|
||||
|
||||
@@ -119,9 +119,9 @@ asst::TilePack::result_type asst::TilePack::calc_(const Map::Level& level, doubl
|
||||
if (tile.tileKey == "tile_start" || tile.tileKey == "tile_end") {
|
||||
// 检查 screen_pos 是否在允许的范围内(带5%容差)
|
||||
constexpr double MIN_X = 0.0;
|
||||
constexpr double MAX_X = 1280.0;
|
||||
constexpr double MAX_X = WindowWidthDefault;
|
||||
constexpr double MIN_Y = 0.0;
|
||||
constexpr double MAX_Y = 720.0;
|
||||
constexpr double MAX_Y = WindowHeightDefault;
|
||||
constexpr double TOLERANCE = 0.05;
|
||||
|
||||
constexpr double x_tolerance = MAX_X * TOLERANCE;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "Vision/Battle/BattlefieldClassifier.h"
|
||||
#include "Vision/Battle/BattlefieldMatcher.h"
|
||||
#include "Vision/Matcher.h"
|
||||
#include "Vision/Miscellaneous/OperNameAnalyzer.h"
|
||||
#include "Vision/MultiMatcher.h"
|
||||
#include "Vision/RegionOCRer.h"
|
||||
#include <ranges>
|
||||
@@ -537,8 +538,6 @@ bool asst::BattleHelper::retreat_oper(const Point& loc, bool manually)
|
||||
bool asst::BattleHelper::is_skill_ready(const Point& loc, const cv::Mat& reusable)
|
||||
{
|
||||
cv::Mat image = reusable.empty() ? m_inst_helper.ctrler()->get_image() : reusable;
|
||||
BattlefieldClassifier skill_analyzer(image);
|
||||
skill_analyzer.set_object_of_interest({ .skill_ready = true });
|
||||
|
||||
auto target_iter = m_normal_tile_info.find(loc);
|
||||
if (target_iter == m_normal_tile_info.end()) {
|
||||
@@ -546,6 +545,12 @@ bool asst::BattleHelper::is_skill_ready(const Point& loc, const cv::Mat& reusabl
|
||||
return false;
|
||||
}
|
||||
const Point& battlefield_point = target_iter->second.pos;
|
||||
static const Rect screen_rect = { 0, 0, WindowWidthDefault, WindowHeightDefault };
|
||||
if (!screen_rect.include(battlefield_point)) {
|
||||
return false;
|
||||
}
|
||||
BattlefieldClassifier skill_analyzer(image);
|
||||
skill_analyzer.set_object_of_interest({ .skill_ready = true });
|
||||
skill_analyzer.set_base_point(battlefield_point);
|
||||
|
||||
return skill_analyzer.analyze()->skill_ready.ready;
|
||||
@@ -996,8 +1001,16 @@ std::string asst::BattleHelper::analyze_detail_page_oper_name(const cv::Mat& ima
|
||||
const auto& replace_task = Task.get<OcrTaskInfo>("CharsNameOcrReplace");
|
||||
const auto& task = Task.get<OcrTaskInfo>(oper_name_ocr_task_name());
|
||||
|
||||
RegionOCRer preproc_analyzer(image);
|
||||
// 使用 OperNameAnalyzer 处理左对齐文本
|
||||
OperNameAnalyzer preproc_analyzer(image);
|
||||
preproc_analyzer.set_task_info(task);
|
||||
preproc_analyzer.set_text_alignment(OperNameAnalyzer::TextAlignment::Left); // 左对齐
|
||||
const auto& params = task->special_params;
|
||||
preproc_analyzer.set_bin_threshold(params[0]);
|
||||
preproc_analyzer.set_bin_expansion(params[1]);
|
||||
preproc_analyzer.set_bin_trim_threshold(params[2], params[3]);
|
||||
preproc_analyzer.set_bottom_line_height(params[4]);
|
||||
preproc_analyzer.set_width_threshold(params[5]);
|
||||
preproc_analyzer.set_replace(replace_task->replace_map, replace_task->replace_full);
|
||||
auto preproc_result_opt = preproc_analyzer.analyze();
|
||||
|
||||
@@ -1016,7 +1029,12 @@ std::string asst::BattleHelper::analyze_detail_page_oper_name(const cv::Mat& ima
|
||||
sort_by_score_(*det_result_opt);
|
||||
const auto& det_name = det_result_opt->front().text;
|
||||
|
||||
return BattleData.is_name_invalid(det_name) ? std::string() : det_name;
|
||||
if (!BattleData.is_name_invalid(det_name)) {
|
||||
return det_name;
|
||||
}
|
||||
|
||||
det_analyzer.save_img(utils::path("debug") / utils::path("battle"));
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::optional<asst::Rect> asst::BattleHelper::get_oper_rect_on_deployment(const std::string& name) const
|
||||
|
||||
@@ -74,6 +74,16 @@ bool asst::InfrastReceptionTask::_run()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool asst::InfrastReceptionTask::on_run_fails()
|
||||
{
|
||||
if (asst::InfrastAbstractTask::on_run_fails()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
ProcessTask(*this, { "CloseSendClue", "Stop" }).run();
|
||||
return asst::InfrastAbstractTask::on_run_fails();
|
||||
}
|
||||
|
||||
bool asst::InfrastReceptionTask::receive_message_board()
|
||||
{
|
||||
return ProcessTask(*this, { "InfrastReceptionReceiveMessageBoard" }).run();
|
||||
|
||||
@@ -19,6 +19,7 @@ public:
|
||||
|
||||
protected:
|
||||
virtual bool _run() override;
|
||||
virtual bool on_run_fails() override;
|
||||
|
||||
private:
|
||||
virtual int operlist_swipe_times() const noexcept override { return 4; }
|
||||
|
||||
@@ -662,7 +662,16 @@ bool asst::BattleFormationTask::check_oper_level(
|
||||
_level = 0;
|
||||
}
|
||||
|
||||
if (_elite < oper.requirements.elite || (_elite == oper.requirements.elite && _level < oper.requirements.level)) {
|
||||
if (_elite < oper.requirements.elite) {
|
||||
LogWarn << __FUNCTION__ << "| Elite" << _elite << ", require:" << oper.requirements.elite;
|
||||
json::value info = basic_info_with_what("BattleFormationOperUnavailable");
|
||||
info["details"]["oper_name"] = oper.name;
|
||||
info["details"]["requirement_type"] = "elite";
|
||||
callback(AsstMsg::SubTaskExtraInfo, info);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_elite == oper.requirements.elite && _level < oper.requirements.level) {
|
||||
LogWarn << __FUNCTION__ << "| Elite" << _elite << "level" << _level << ", require:" << oper.requirements.elite
|
||||
<< oper.requirements.level;
|
||||
json::value info = basic_info_with_what("BattleFormationOperUnavailable");
|
||||
|
||||
@@ -75,7 +75,7 @@ std::optional<asst::BattleQuickFormation::SkillResult>
|
||||
return SkillResult {
|
||||
VisionHelper::correct_rect(
|
||||
base_task->roi.move(result->first).move(check_task->rect_move),
|
||||
Rect { 0, 0, 1280, 720 }),
|
||||
Rect { 0, 0, WindowWidthDefault, WindowHeightDefault }),
|
||||
result->second,
|
||||
};
|
||||
}
|
||||
@@ -89,7 +89,7 @@ std::optional<asst::BattleQuickFormation::SkillResult>
|
||||
return SkillResult {
|
||||
VisionHelper::correct_rect(
|
||||
base_task->roi.move(result->first).move(check_task->rect_move),
|
||||
Rect { 0, 0, 1280, 720 }),
|
||||
Rect { 0, 0, WindowWidthDefault, WindowHeightDefault }),
|
||||
result->second,
|
||||
};
|
||||
}
|
||||
@@ -154,7 +154,9 @@ std::optional<asst::BattleQuickFormation::SkillResult>
|
||||
|
||||
// 偏移为技能范围rect, 并根据图片大小修正
|
||||
return SkillResult {
|
||||
VisionHelper::correct_rect(rect.move(check_task->rect_move), Rect { 0, 0, 1280, 720 }),
|
||||
VisionHelper::correct_rect(
|
||||
rect.move(check_task->rect_move),
|
||||
Rect { 0, 0, WindowWidthDefault, WindowHeightDefault }),
|
||||
result->second,
|
||||
};
|
||||
}
|
||||
@@ -170,7 +172,9 @@ std::optional<asst::BattleQuickFormation::SkillResult>
|
||||
|
||||
// 偏移为技能范围rect, 并根据图片大小修正
|
||||
return SkillResult {
|
||||
VisionHelper::correct_rect(rect.move(check_task->rect_move), Rect { 0, 0, 1280, 720 }),
|
||||
VisionHelper::correct_rect(
|
||||
rect.move(check_task->rect_move),
|
||||
Rect { 0, 0, WindowWidthDefault, WindowHeightDefault }),
|
||||
result->second,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -5,27 +5,88 @@
|
||||
|
||||
asst::OperNameAnalyzer::ResultOpt asst::OperNameAnalyzer::analyze() const
|
||||
{
|
||||
int kPadding = m_params.bin_expansion;
|
||||
|
||||
cv::Mat gray, bin;
|
||||
cv::Mat ocr = make_roi(m_image, m_roi);
|
||||
|
||||
if (ocr.empty()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
cv::cvtColor(ocr, gray, cv::COLOR_BGR2GRAY);
|
||||
cv::inRange(gray, m_params.bin_threshold_lower, m_params.bin_threshold_upper, bin);
|
||||
for (int r = bin.cols - 1; r >= 0; --r) {
|
||||
if (cv::hasNonZero(bin.col(r))) { // 右边界向左收缩
|
||||
bin = bin.adjustROI(0, 0, 0, -(bin.cols - r - 1));
|
||||
|
||||
int move = 0;
|
||||
bool isRight = (m_text_alignment == TextAlignment::Right);
|
||||
|
||||
int start = isRight ? bin.cols - 1 : 0;
|
||||
int end = isRight ? -1 : bin.cols;
|
||||
int step = isRight ? -1 : 1;
|
||||
|
||||
// 1. 裁剪首个包含文字的列(Left = 左边界,Right = 右边界),保留 padding
|
||||
for (int r = start; r != end; r += step) {
|
||||
if (cv::hasNonZero(bin.col(r))) {
|
||||
int cut = isRight ? (bin.cols - r - 1 - kPadding) : (r - kPadding);
|
||||
cut = std::clamp(cut, 0, bin.cols - 1);
|
||||
|
||||
if (cut > 0) {
|
||||
bin = isRight ? bin.adjustROI(0, 0, 0, -cut) : bin.adjustROI(0, 0, -cut, 0);
|
||||
ocr = isRight ? ocr.adjustROI(0, 0, 0, -cut) : ocr.adjustROI(0, 0, -cut, 0);
|
||||
|
||||
if (!isRight) {
|
||||
move = cut;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bin = bin.adjustROI(0, -m_bottom_line_height, 0, 0); // 底部收缩排除白线
|
||||
int move = 0;
|
||||
for (int r = bin.cols - m_width_threshold - 1; r >= 0; --r) {
|
||||
if (!cv::hasNonZero(bin.colRange(r, r + m_width_threshold))) { // 左边界排除无文字区域
|
||||
move = r + m_width_threshold - 3;
|
||||
ocr = ocr.adjustROI(0, 0, -move, 0);
|
||||
if (bin.empty() || bin.cols <= 0 || bin.rows <= 0) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// 2. 底部裁剪(防止裁过头)
|
||||
if (m_bottom_line_height > 0 && m_bottom_line_height < bin.rows) {
|
||||
bin = bin.adjustROI(0, -m_bottom_line_height, 0, 0);
|
||||
ocr = ocr.adjustROI(0, -m_bottom_line_height, 0, 0);
|
||||
}
|
||||
|
||||
if (bin.cols < m_width_threshold) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// 3. 扫描连续空白块,裁剪另一侧
|
||||
start = isRight ? (bin.cols - m_width_threshold) : 0;
|
||||
end = isRight ? -1 : (bin.cols - m_width_threshold + 1);
|
||||
|
||||
for (int r = start; r != end; r += step) {
|
||||
int rEnd = r + m_width_threshold;
|
||||
if (r < 0 || rEnd > bin.cols) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!cv::hasNonZero(bin.colRange(r, rEnd))) {
|
||||
if (isRight) {
|
||||
int cut = rEnd - kPadding;
|
||||
cut = std::clamp(cut, 0, ocr.cols - 1);
|
||||
move = cut;
|
||||
ocr = ocr.adjustROI(0, 0, -cut, 0);
|
||||
}
|
||||
else {
|
||||
int cut = std::clamp(r + kPadding, 0, ocr.cols);
|
||||
int rightTrim = ocr.cols - cut;
|
||||
rightTrim = std::clamp(rightTrim, 0, ocr.cols - 1);
|
||||
ocr = ocr.adjustROI(0, 0, 0, -rightTrim);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ocr.empty() || ocr.cols <= 0 || ocr.rows <= 0) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
RegionOCRer region(ocr);
|
||||
region.set_params(m_params);
|
||||
region.set_use_raw(true);
|
||||
|
||||
@@ -12,6 +12,12 @@ public:
|
||||
using Result = OCRer::Result;
|
||||
using ResultOpt = std::optional<Result>;
|
||||
|
||||
enum class TextAlignment
|
||||
{
|
||||
Right, // 右对齐,从右往左扫描截断左侧
|
||||
Left // 左对齐,从左往右扫描截断右侧
|
||||
};
|
||||
|
||||
public:
|
||||
using VisionHelper::VisionHelper;
|
||||
virtual ~OperNameAnalyzer() override = default;
|
||||
@@ -24,6 +30,8 @@ public:
|
||||
|
||||
void set_width_threshold(int threshold) { m_width_threshold = threshold; }
|
||||
|
||||
void set_text_alignment(TextAlignment alignment) { m_text_alignment = alignment; }
|
||||
|
||||
// FIXME: 老接口太难重构了,先弄个这玩意兼容下,后续慢慢全删掉
|
||||
const auto& get_result() const noexcept { return m_result; }
|
||||
|
||||
@@ -36,7 +44,8 @@ private:
|
||||
// FIXME: 老接口太难重构了,先弄个这玩意兼容下,后续慢慢全删掉
|
||||
mutable Result m_result;
|
||||
bool m_use_raw = true;
|
||||
int m_bottom_line_height = 3; // 底部线条高度
|
||||
int m_width_threshold = 5; // 宽度阈值
|
||||
int m_bottom_line_height = 0; // 底部线条高度
|
||||
int m_width_threshold = 5; // 宽度阈值
|
||||
TextAlignment m_text_alignment = TextAlignment::Right; // 默认右对齐(保持向后兼容)
|
||||
};
|
||||
}; // namespace asst
|
||||
|
||||
@@ -93,7 +93,7 @@ public class InfrastTask : BaseTask, IJsonOnDeserialized
|
||||
/// <summary>
|
||||
/// Gets or sets 自定义配置计划编号
|
||||
/// </summary>
|
||||
public int PlanSelect { get; set; }
|
||||
public int PlanSelect { get; set; } = -1;
|
||||
|
||||
public List<RoomInfo> RoomList { get; set; } =
|
||||
[.. typeof(InfrastRoomType).GetEnumValues().OfType<InfrastRoomType>().Select<InfrastRoomType, RoomInfo>(i => new(i, true))];
|
||||
|
||||
@@ -113,8 +113,11 @@ public static class ConfigurationKeys
|
||||
public const string BlockSleepWithScreenOn = "Start.BlockSleepWithScreenOn";
|
||||
|
||||
public const string ChooseLevel3 = "Recruit.ChooseLevel3";
|
||||
public const string ToolBoxChooseLevel3Time = "Toolbox.Recruit.ChooseLevel3.Time";
|
||||
public const string ChooseLevel4 = "Recruit.ChooseLevel4";
|
||||
public const string ToolBoxChooseLevel4Time = "Toolbox.Recruit.ChooseLevel4.Time";
|
||||
public const string ChooseLevel5 = "Recruit.ChooseLevel5";
|
||||
public const string ToolBoxChooseLevel5Time = "Toolbox.Recruit.ChooseLevel5.Time";
|
||||
public const string ChooseLevel6 = "Recruit.ChooseLevel6";
|
||||
public const string AutoSetTime = "Recruit.AutoSetTime";
|
||||
public const string RecruitmentShowPotential = "Recruit.ShowPotential";
|
||||
|
||||
@@ -234,7 +234,7 @@ public class ConfigConverter
|
||||
infrastTask.DormTrustEnabled = ConfigurationHelper.GetValue(ConfigurationKeys.DormTrustEnabled, false);
|
||||
infrastTask.OriginiumShardAutoReplenishment = ConfigurationHelper.GetValue(ConfigurationKeys.OriginiumShardAutoReplenishment, true);
|
||||
infrastTask.Filename = ConfigurationHelper.GetValue(ConfigurationKeys.CustomInfrastFile, string.Empty);
|
||||
infrastTask.PlanSelect = ConfigurationHelper.GetValue(ConfigurationKeys.CustomInfrastPlanSelect, 0);
|
||||
infrastTask.PlanSelect = ConfigurationHelper.GetValue(ConfigurationKeys.CustomInfrastPlanSelect, -1);
|
||||
ConfigurationHelper.DeleteValue(ConfigurationKeys.InfrastMode);
|
||||
ConfigurationHelper.DeleteValue(ConfigurationKeys.UsesOfDrones);
|
||||
ConfigurationHelper.DeleteValue(ConfigurationKeys.InfrastReceptionMessageBoardReceive);
|
||||
@@ -491,6 +491,11 @@ public class ConfigConverter
|
||||
fightTask2.Name = LocalizationHelper.GetString("RemainingSanityStage", local);
|
||||
fightTask.IsEnable = task.IsEnable;
|
||||
fightTask2.IsEnable = task.IsEnable && ConfigurationHelper.GetValue(ConfigurationKeys.UseRemainingSanityStage, true) && fightTask2.StagePlan.FirstOrDefault() != string.Empty;
|
||||
if (fightTask.UseOptionalStage && fightTask.StagePlan.FirstOrDefault() == "Annihilation")
|
||||
{
|
||||
ConfigFactory.CurrentConfig.TaskQueue.Add(new FightTask() { Name = LocalizationHelper.GetString("AnnihilationMode"), StagePlan = ["Annihilation"] });
|
||||
fightTask.StagePlan.RemoveAt(0);
|
||||
}
|
||||
ConfigFactory.CurrentConfig.TaskQueue.Add(fightTask);
|
||||
ConfigFactory.CurrentConfig.TaskQueue.Add(fightTask2);
|
||||
ConfigurationHelper.DeleteValue(ConfigurationKeys.UseRemainingSanityStage);
|
||||
|
||||
@@ -2042,15 +2042,30 @@ public class AsstProxy
|
||||
|
||||
case "BattleFormationOperUnavailable":
|
||||
{
|
||||
Instances.CopilotViewModel.HasRequirementIgnored = true;
|
||||
var oper_name = DataHelper.GetLocalizedCharacterName(subTaskDetails!["oper_name"]?.ToString());
|
||||
var requirement_type = subTaskDetails["requirement_type"]?.ToString() switch {
|
||||
"level" => LocalizationHelper.GetString("BattleFormationOperUnavailable.Level"),
|
||||
"skill_level" => LocalizationHelper.GetString("BattleFormationOperUnavailable.SkillLevel"),
|
||||
"module" => LocalizationHelper.GetString("BattleFormationOperUnavailable.Module"),
|
||||
_ => subTaskDetails["requirement_type"]?.ToString() ?? "Unknown Type",
|
||||
};
|
||||
var type = subTaskDetails["requirement_type"]?.ToString() ?? "Unknown Type";
|
||||
bool isError = !Instances.CopilotViewModel.IgnoreRequirements;
|
||||
switch (type)
|
||||
{
|
||||
case "elite":
|
||||
type = LocalizationHelper.GetString("BattleFormationOperUnavailable.Elite");
|
||||
isError = true;
|
||||
break;
|
||||
case "level":
|
||||
type = LocalizationHelper.GetString("BattleFormationOperUnavailable.Level");
|
||||
break;
|
||||
case "skill_level":
|
||||
type = LocalizationHelper.GetString("BattleFormationOperUnavailable.SkillLevel");
|
||||
break;
|
||||
case "module":
|
||||
type = LocalizationHelper.GetString("BattleFormationOperUnavailable.Module");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Instances.CopilotViewModel.AddLog(LocalizationHelper.GetStringFormat("BattleFormationOperUnavailable", oper_name ?? string.Empty, requirement_type), Instances.CopilotViewModel.IgnoreRequirements ? UiLogColor.Warning : UiLogColor.Error);
|
||||
Instances.CopilotViewModel.AddLog(LocalizationHelper.GetStringFormat("BattleFormationOperUnavailable", oper_name ?? string.Empty, type), isError ? UiLogColor.Error : UiLogColor.Warning);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2083,6 +2098,7 @@ public class AsstProxy
|
||||
|
||||
case "CopilotListLoadTaskFileSuccess":
|
||||
Instances.CopilotViewModel.AddLog($"Parse {subTaskDetails!["file_name"]}[{subTaskDetails["stage_name"]}] Success");
|
||||
Instances.CopilotViewModel.HasRequirementIgnored = false;
|
||||
break;
|
||||
|
||||
case "SSSStage":
|
||||
|
||||
@@ -23,15 +23,27 @@ public class OperBoxData
|
||||
[JsonProperty("id")]
|
||||
public string Id { get; set; } = null!; // char_2024_chyue
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets 干员名称
|
||||
/// </summary>
|
||||
[JsonProperty("name")]
|
||||
public string Name { get; set; } = null!; // 重岳
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets 精英化等级
|
||||
/// </summary>
|
||||
[JsonProperty("elite")]
|
||||
public int Elite { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets 等级
|
||||
/// </summary>
|
||||
[JsonProperty("level")]
|
||||
public int Level { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether 是否拥有
|
||||
/// </summary>
|
||||
[JsonProperty("own")]
|
||||
public bool Own { get; set; } = false;
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ To customize rotation schedules, please use 「{key=InfrastModeCustom}」.</syst
|
||||
<system:String x:Key="SpecifiedDropsTip">This feature would not automatically calculate the optimal stage</system:String>
|
||||
<system:String x:Key="StartupUpdateCheck">Startup Update Check</system:String>
|
||||
<system:String x:Key="UpdateAutoCheck">Scheduled Update Check</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">04:00 / 22:00 Server Time</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">In-game 00:00 / 18:00 (Server local time 04:00 / 22:00)</system:String>
|
||||
<system:String x:Key="UpdateAutoDownload">Auto Download Update</system:String>
|
||||
<system:String x:Key="AutoInstallUpdatePackage">Auto Install Update</system:String>
|
||||
<system:String x:Key="UpdateCheckStable">Stable Release</system:String>
|
||||
@@ -432,6 +432,7 @@ If you are concerned about leftover entries, please disable this option before d
|
||||
<system:String x:Key="StartGameLaunchClient">Launch Client on Start</system:String>
|
||||
<system:String x:Key="AutoRestartOption">Restart when game disconnects</system:String>
|
||||
<system:String x:Key="UseWeeklySchedule">Enable Weekly Schedule</system:String>
|
||||
<system:String x:Key="UseWeeklyScheduleTip">The day of week here is based on in-game time, not real-world time. For example, if the game resets at 4:00, then 3:59 is still counted as the previous day.</system:String>
|
||||
<system:String x:Key="HelpUsWithOverseasServersTip">The adaptation for Overseas clients is very difficult and we need your help! No programming knowledge is required.</system:String>
|
||||
<system:String x:Key="OpenEmulatorAfterLaunch">Startup Emulator after launched</system:String>
|
||||
<system:String x:Key="WaitForEmulator">Delay time (s)</system:String>
|
||||
@@ -1212,7 +1213,8 @@ Right-click to clear inactive jobs</system:String>
|
||||
<system:String x:Key="BattleFormationParseFailed">Formation parse failed</system:String>
|
||||
<system:String x:Key="BattleFormationSelected" xml:space="preserve">Selected: </system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable" xml:space="preserve">{key=Operator} unavailable: {0}, reason: {1}</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">{key=Operator} level too low</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Elite">Elite too low</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">Level too low</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.SkillLevel">Skill level too low</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Module">Required module not unlocked</system:String>
|
||||
<system:String x:Key="CopilotUserAdditionalNameInvalid">Additional custom {key=Operator} name invalid: {0}, please check spelling</system:String>
|
||||
@@ -1252,7 +1254,8 @@ Due to limited development resources within the MAA Team, PC support lacks dedic
|
||||
Before use, please ensure:
|
||||
1. MAA is launched with administrator privileges
|
||||
2. The game window is not minimized
|
||||
3. Arknights Settings → Game → UI Scaling is set to 100%</system:String>
|
||||
3. Arknights Settings → Game → UI Scaling is set to 100%
|
||||
4. Game resolution must be 16:9, recommended settings: 720×1280 or 1080×1920</system:String>
|
||||
<system:String x:Key="AttachWindowScreencapMethod">Screencap Method</system:String>
|
||||
<system:String x:Key="AttachWindowMouseMethod">Mouse Input Method</system:String>
|
||||
<system:String x:Key="AttachWindowKeyboardMethod">Keyboard Input Method</system:String>
|
||||
@@ -1263,6 +1266,8 @@ Before use, please ensure:
|
||||
<system:String x:Key="AttachWindowInputSeize">Seize (Foreground, More Stable)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithCursor">PostMessageWithCursor (Semi-background)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithCursor">SendMessageWithCursor (Semi-background, Backup)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithWindowPos">PostMessageWithWindowPos (Background Window)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithWindowPos">SendMessageWithWindowPos (Background Window, Backup)</system:String>
|
||||
<!-- !AsstProxy -->
|
||||
<!-- TrayIcon -->
|
||||
<system:String x:Key="ForceShow">Force display of MAA</system:String>
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
<system:String x:Key="SpecifiedDropsTip">この機能では最適なステージを自動的に計算しません</system:String>
|
||||
<system:String x:Key="StartupUpdateCheck">起動時の更新チェック</system:String>
|
||||
<system:String x:Key="UpdateAutoCheck">定期的な更新チェック</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">04:00 / 22:00 Server Time</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">ゲーム内 00:00 / 18:00(サーバー現地時間 04:00 / 22:00)</system:String>
|
||||
<system:String x:Key="UpdateAutoDownload">自動アップデート</system:String>
|
||||
<system:String x:Key="AutoInstallUpdatePackage">自動インストール更新</system:String>
|
||||
<system:String x:Key="UpdateCheckStable">安定版</system:String>
|
||||
@@ -432,6 +432,7 @@ MAA は非インストール型のアプリケーションであり、レジス
|
||||
<system:String x:Key="StartGameLaunchClient">起動時にクライアントを開始する</system:String>
|
||||
<system:String x:Key="AutoRestartOption">ゲームが切断されたときに自動的に再接続する</system:String>
|
||||
<system:String x:Key="UseWeeklySchedule">週次スケジュールを有効にする</system:String>
|
||||
<system:String x:Key="UseWeeklyScheduleTip">ここでの曜日はゲーム内時間に基づいており、現実時間ではありません。例えば、ゲームが4:00にリセットされる場合、3:59は前日としてカウントされます。</system:String>
|
||||
<system:String x:Key="HelpUsWithOverseasServersTip">グローバルサーバーの対応は非常に大変で、皆様の協力が必要です!プログラミングの知識は必要ありません。</system:String>
|
||||
<system:String x:Key="OpenEmulatorAfterLaunch">起動時にエミュレータ自動起動</system:String>
|
||||
<system:String x:Key="WaitForEmulator">エミュレータを待つ時間(秒)</system:String>
|
||||
@@ -1213,7 +1214,8 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="BattleFormationParseFailed">フォーメーション解析に失敗しました</system:String>
|
||||
<system:String x:Key="BattleFormationSelected" xml:space="preserve">{key=Operator}を選択: </system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable" xml:space="preserve">{key=Operator}が使用できません: {0}、理由: {1}</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">{key=Operator}レベル不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Elite">エリート度が低すぎる</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">レベル不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.SkillLevel">スキルレベルが低すぎる</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Module">必要なモジュールが未解除</system:String>
|
||||
<system:String x:Key="CopilotUserAdditionalNameInvalid">追加のカスタム{key=Operator}名が無効です: {0}、スペルを確認してください</system:String>
|
||||
@@ -1253,7 +1255,8 @@ MAA Team の開発リソースが限られているため、PC 対応は専任
|
||||
使用前にご確認ください:
|
||||
1. MAA を管理者権限で起動してください
|
||||
2. ゲームウィンドウを最小化しないでください
|
||||
3. アークナイツ設定 → ゲーム → UI スケーリングを 100% に設定してください</system:String>
|
||||
3. アークナイツ設定 → ゲーム → UI スケーリングを 100% に設定してください
|
||||
4. ゲーム解像度は 16:9 である必要があります。推奨設定:720×1280 または 1080×1920</system:String>
|
||||
<system:String x:Key="AttachWindowScreencapMethod">スクリーンキャプチャ方式</system:String>
|
||||
<system:String x:Key="AttachWindowMouseMethod">マウス入力方式</system:String>
|
||||
<system:String x:Key="AttachWindowKeyboardMethod">キーボード入力方式</system:String>
|
||||
@@ -1264,6 +1267,8 @@ MAA Team の開発リソースが限られているため、PC 対応は専任
|
||||
<system:String x:Key="AttachWindowInputSeize">Seize(フォアグラウンド、より安定)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithCursor">PostMessageWithCursor(半バックグラウンド)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithCursor">SendMessageWithCursor(半バックグラウンド、予備)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithWindowPos">PostMessageWithWindowPos(バックグラウンドウィンドウ)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithWindowPos">SendMessageWithWindowPos(バックグラウンドウィンドウ、予備)</system:String>
|
||||
<!-- !AsstProxy -->
|
||||
<!-- TrayIcon -->
|
||||
<system:String x:Key="ForceShow">MAAの強制表示</system:String>
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
<system:String x:Key="SpecifiedDropsTip">이 기능은 최적의 스테이지를 자동으로 계산하지 않습니다</system:String>
|
||||
<system:String x:Key="StartupUpdateCheck">시작 시 업데이트 확인</system:String>
|
||||
<system:String x:Key="UpdateAutoCheck">일정 시간마다 업데이트 확인</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">04:00 / 22:00 Server Time</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">게임 내 00:00 / 18:00 (서버 현지 시간 04:00 / 22:00)</system:String>
|
||||
<system:String x:Key="UpdateAutoDownload">업데이트 자동 다운로드</system:String>
|
||||
<system:String x:Key="AutoInstallUpdatePackage">업데이트 패키지 자동 설치</system:String>
|
||||
<system:String x:Key="UpdateCheckStable">안정 버전</system:String>
|
||||
@@ -432,6 +432,7 @@ MAA는 비설치형 응용 프로그램으로, 삭제 시 레지스트리 항목
|
||||
<system:String x:Key="StartGameLaunchClient">시작 시 클라이언트 실행</system:String>
|
||||
<system:String x:Key="AutoRestartOption">게임 연결이 끊어지면 자동으로 다시 연결</system:String>
|
||||
<system:String x:Key="UseWeeklySchedule">주간 일정 활성화</system:String>
|
||||
<system:String x:Key="UseWeeklyScheduleTip">여기서 요일은 게임 내 시간을 기준으로 하며, 실제 시간이 아닙니다. 예를 들어 게임이 4:00에 초기화되면 3:59는 여전히 전날로 계산됩니다.</system:String>
|
||||
<system:String x:Key="HelpUsWithOverseasServersTip">해외 서버의 현지화는 어려운 작업입니다! 저희를 도와주세요! 전문 지식이 없어도 됩니다</system:String>
|
||||
<system:String x:Key="OpenEmulatorAfterLaunch">MAA 실행 후 에뮬레이터 실행</system:String>
|
||||
<system:String x:Key="WaitForEmulator">에뮬레이터 실행 대기 (초)</system:String>
|
||||
@@ -1214,7 +1215,8 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="BattleFormationParseFailed">편성 분석에 실패했습니다</system:String>
|
||||
<system:String x:Key="BattleFormationSelected" xml:space="preserve">{key=Operator}를 선택: </system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable" xml:space="preserve">사용 불가 {key=Operator}: {0}, 사유: {1}</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">{key=Operator}불충분한 수준</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Elite">정예화 수준이 너무 낮음</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">레벨이 너무 낮음</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.SkillLevel">스킬 레벨이 너무 낮음</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Module">필요한 모듈이 잠금 해제되지 않음</system:String>
|
||||
<system:String x:Key="CopilotUserAdditionalNameInvalid">추가된 커스텀 {key=Operator} 이름이 유효하지 않음: {0}, 철자를 확인하세요</system:String>
|
||||
@@ -1254,7 +1256,8 @@ MAA Team의 개발 인력이 제한되어 있어 PC 지원은 전담 관리가
|
||||
사용 전 확인 사항:
|
||||
1. MAA를 관리자 권한으로 실행해야 합니다
|
||||
2. 게임 창을 최소화하면 안 됩니다
|
||||
3. 명일방주 설정 → 게임 → UI 배율을 100%로 설정해야 합니다</system:String>
|
||||
3. 명일방주 설정 → 게임 → UI 배율을 100%로 설정해야 합니다
|
||||
4. 게임 해상도는 16:9이어야 하며, 권장 설정: 720×1280 또는 1080×1920</system:String>
|
||||
<system:String x:Key="AttachWindowScreencapMethod">스크린샷 방식</system:String>
|
||||
<system:String x:Key="AttachWindowMouseMethod">마우스 입력 방식</system:String>
|
||||
<system:String x:Key="AttachWindowKeyboardMethod">키보드 입력 방식</system:String>
|
||||
@@ -1265,6 +1268,8 @@ MAA Team의 개발 인력이 제한되어 있어 PC 지원은 전담 관리가
|
||||
<system:String x:Key="AttachWindowInputSeize">Seize (포그라운드, 더 안정적)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithCursor">PostMessageWithCursor (반 백그라운드)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithCursor">SendMessageWithCursor (반 백그라운드, 백업)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithWindowPos">PostMessageWithWindowPos (백그라운드 윈도우)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithWindowPos">SendMessageWithWindowPos (백그라운드 윈도우, 백업)</system:String>
|
||||
<!-- !AsstProxy -->
|
||||
<!-- TrayIcon -->
|
||||
<system:String x:Key="ForceShow">MAA 강제 표시</system:String>
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
<system:String x:Key="SpecifiedDropsTip">该选项不会自动计算最优关卡</system:String>
|
||||
<system:String x:Key="StartupUpdateCheck">启动时检查更新</system:String>
|
||||
<system:String x:Key="UpdateAutoCheck">定时检查更新</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">04:00 / 22:00 Server Time</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">游戏内 00:00 / 18:00(对应服务器当地时间 04:00 / 22:00)</system:String>
|
||||
<system:String x:Key="UpdateAutoDownload">自动下载更新包</system:String>
|
||||
<system:String x:Key="AutoInstallUpdatePackage">自动安装更新包</system:String>
|
||||
<system:String x:Key="UpdateCheckStable">正式版</system:String>
|
||||
@@ -432,6 +432,7 @@
|
||||
<system:String x:Key="StartGameLaunchClient">是否启动客户端</system:String>
|
||||
<system:String x:Key="AutoRestartOption">游戏掉线时自动重连</system:String>
|
||||
<system:String x:Key="UseWeeklySchedule">启用周计划</system:String>
|
||||
<system:String x:Key="UseWeeklyScheduleTip">此处星期根据游戏时间计算,并非现实时间。例如游戏在 4:00 刷新,则 3:59 仍算作前一天。</system:String>
|
||||
<system:String x:Key="HelpUsWithOverseasServersTip">外服适配滞销,帮帮我们!不会编程也可以。</system:String>
|
||||
<system:String x:Key="OpenEmulatorAfterLaunch">启动 MAA 后自动开启模拟器</system:String>
|
||||
<system:String x:Key="WaitForEmulator">等待模拟器启动时间(秒)</system:String>
|
||||
@@ -1213,7 +1214,8 @@ C:\\leidian\\LDPlayer9。\n
|
||||
<system:String x:Key="BattleFormationParseFailed">编队解析失败</system:String>
|
||||
<system:String x:Key="BattleFormationSelected" xml:space="preserve">选择{key=Operator}: </system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable" xml:space="preserve">{key=Operator}不可用: {0}, 原因: {1}</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">{key=Operator}等级不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Elite">精英化不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">等级不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.SkillLevel">技能等级不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Module">所需模组未解锁</system:String>
|
||||
<system:String x:Key="CopilotUserAdditionalNameInvalid">追加自定{key=Operator}名称无效: {0},请检查拼写</system:String>
|
||||
@@ -1253,7 +1255,8 @@ C:\\leidian\\LDPlayer9。\n
|
||||
使用前请确认:
|
||||
1. 需要以管理员身份启动 MAA
|
||||
2. 游戏窗口不能最小化
|
||||
3. 明日方舟设置 → 游戏 → UI 缩放需设为 100%</system:String>
|
||||
3. 明日方舟设置 → 游戏 → UI 缩放需设为 100%
|
||||
4. 游戏分辨率需为 16:9,推荐设置 720×1280 或 1080×1920</system:String>
|
||||
<system:String x:Key="AttachWindowScreencapMethod">截图方式</system:String>
|
||||
<system:String x:Key="AttachWindowMouseMethod">鼠标输入</system:String>
|
||||
<system:String x:Key="AttachWindowKeyboardMethod">键盘输入</system:String>
|
||||
@@ -1264,6 +1267,8 @@ C:\\leidian\\LDPlayer9。\n
|
||||
<system:String x:Key="AttachWindowInputSeize">Seize(前台,更稳定)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithCursor">PostMessageWithCursor(半后台)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithCursor">SendMessageWithCursor(半后台,备用)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithWindowPos">PostMessageWithWindowPos(后台窗口)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithWindowPos">SendMessageWithWindowPos(后台窗口,备用)</system:String>
|
||||
<!-- !AsstProxy -->
|
||||
<!-- TrayIcon -->
|
||||
<system:String x:Key="ForceShow">强制显示MAA</system:String>
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
<system:String x:Key="SpecifiedDropsTip">此選項不會自動計算最優關卡</system:String>
|
||||
<system:String x:Key="StartupUpdateCheck">啟動時檢查更新</system:String>
|
||||
<system:String x:Key="UpdateAutoCheck">定時檢查更新</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">伺服器時間 04:00 / 22:00</system:String>
|
||||
<system:String x:Key="UpdateAutoCheckTip">遊戲內 00:00 / 18:00(對應伺服器當地時間 04:00 / 22:00)</system:String>
|
||||
<system:String x:Key="UpdateAutoDownload">自動下載更新檔</system:String>
|
||||
<system:String x:Key="AutoInstallUpdatePackage">自動安裝更新檔</system:String>
|
||||
<system:String x:Key="UpdateCheckStable">穩定版</system:String>
|
||||
@@ -432,6 +432,7 @@
|
||||
<system:String x:Key="StartGameLaunchClient">是否啟動用戶端</system:String>
|
||||
<system:String x:Key="AutoRestartOption">遊戲斷線時自動重連</system:String>
|
||||
<system:String x:Key="UseWeeklySchedule">使用週計畫</system:String>
|
||||
<system:String x:Key="UseWeeklyScheduleTip">此處的星期是根據遊戲時間計算的,並非現實時間。例如遊戲在 4:00 刷新,則 3:59 仍算作前一天。</system:String>
|
||||
<system:String x:Key="HelpUsWithOverseasServersTip">外服支援人力吃緊,幫幫我們!不會寫程式也可以參與。</system:String>
|
||||
<system:String x:Key="OpenEmulatorAfterLaunch">啟動 MAA 後自動開啟模擬器</system:String>
|
||||
<system:String x:Key="WaitForEmulator">等待模擬器啟動時間(秒)</system:String>
|
||||
@@ -1213,7 +1214,8 @@ C:\\leidian\\LDPlayer9\n
|
||||
<system:String x:Key="BattleFormationParseFailed">編隊解析失敗</system:String>
|
||||
<system:String x:Key="BattleFormationSelected" xml:space="preserve">選擇{key=Operator}: </system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable" xml:space="preserve">{key=Operator}不可用:{0},原因:{1}</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">{key=Operator}等級不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Elite">精英化不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Level">等級不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.SkillLevel">技能等級不足</system:String>
|
||||
<system:String x:Key="BattleFormationOperUnavailable.Module">所需模組未解鎖</system:String>
|
||||
<system:String x:Key="CopilotUserAdditionalNameInvalid">追加自定義{key=Operator}名稱無效:{0},請檢查拼寫</system:String>
|
||||
@@ -1253,7 +1255,8 @@ C:\\leidian\\LDPlayer9\n
|
||||
使用前請確認:
|
||||
1. 需以系統管理員身分啟動 MAA
|
||||
2. 遊戲視窗不可最小化
|
||||
3. 明日方舟設定 → 遊戲 → UI 縮放需設為 100%</system:String>
|
||||
3. 明日方舟設定 → 遊戲 → UI 縮放需設為 100%
|
||||
4. 遊戲解析度需為 16:9,推薦設定 720×1280 或 1080×1920</system:String>
|
||||
<system:String x:Key="AttachWindowScreencapMethod">截圖方式</system:String>
|
||||
<system:String x:Key="AttachWindowMouseMethod">滑鼠輸入</system:String>
|
||||
<system:String x:Key="AttachWindowKeyboardMethod">鍵盤輸入</system:String>
|
||||
@@ -1264,6 +1267,8 @@ C:\\leidian\\LDPlayer9\n
|
||||
<system:String x:Key="AttachWindowInputSeize">Seize(前台,更穩定)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithCursor">PostMessageWithCursor(半背景)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithCursor">SendMessageWithCursor(半背景,備用)</system:String>
|
||||
<system:String x:Key="AttachWindowInputPostWithWindowPos">PostMessageWithWindowPos(後台視窗)</system:String>
|
||||
<system:String x:Key="AttachWindowInputSendWithWindowPos">SendMessageWithWindowPos(後台視窗,備用)</system:String>
|
||||
<!-- !AsstProxy -->
|
||||
<!-- TrayIcon -->
|
||||
<system:String x:Key="ForceShow">強制顯示 MAA</system:String>
|
||||
|
||||
@@ -365,6 +365,11 @@ public partial class CopilotViewModel : Screen
|
||||
/// </summary>
|
||||
public bool IgnoreRequirements { get => field; set => SetAndNotify(ref field, value); }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether 真正有干员被忽略了要求
|
||||
/// </summary>
|
||||
public bool HasRequirementIgnored { get; set; } = false;
|
||||
|
||||
public bool UseSanityPotion { get => field; set => SetAndNotify(ref field, value); }
|
||||
|
||||
/// <summary>
|
||||
@@ -395,8 +400,24 @@ public partial class CopilotViewModel : Screen
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(UserAdditional))]
|
||||
public string UserAdditionalPrettyJson => string.IsNullOrWhiteSpace(UserAdditional) ? string.Empty
|
||||
: JToken.Parse(UserAdditional).ToString(Formatting.None).Replace("},", "},\n");
|
||||
public string UserAdditionalPrettyJson
|
||||
{
|
||||
get {
|
||||
if (string.IsNullOrWhiteSpace(UserAdditional))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return JToken.Parse(UserAdditional).ToString(Formatting.None).Replace("},", "},\n");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return UserAdditional; // 解析失败时返回原始字符串
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the UserAdditional popup is open.
|
||||
@@ -1683,7 +1704,7 @@ public partial class CopilotViewModel : Screen
|
||||
|
||||
model.IsChecked = false;
|
||||
|
||||
if (model.CopilotId > 0 && _copilotIdList.Remove(model.CopilotId) && _copilotIdList.IndexOf(model.CopilotId) == -1)
|
||||
if (model.CopilotId > 0 && _copilotIdList.Remove(model.CopilotId) && _copilotIdList.IndexOf(model.CopilotId) == -1 && !HasRequirementIgnored)
|
||||
{
|
||||
_ = RateCopilot(model.CopilotId);
|
||||
}
|
||||
|
||||
@@ -507,9 +507,17 @@ public class TaskQueueViewModel : Screen
|
||||
{
|
||||
actions.LoadPostActions();
|
||||
|
||||
// 休眠提示
|
||||
AddLog(LocalizationHelper.GetString("HibernatePrompt"), UiLogColor.Error);
|
||||
await Task.Delay(10000);
|
||||
await Execute.OnUIThreadAsync(() => Instances.MainWindowManager?.Show());
|
||||
if (await TimerCanceledAsync(
|
||||
LocalizationHelper.GetString("Hibernate"),
|
||||
LocalizationHelper.GetString("HibernatePrompt"),
|
||||
LocalizationHelper.GetString("Cancel"),
|
||||
60))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_logger.Information("Hibernate not canceled, proceeding to hibernate.");
|
||||
PowerManagement.Hibernate();
|
||||
}
|
||||
|
||||
@@ -536,9 +544,17 @@ public class TaskQueueViewModel : Screen
|
||||
{
|
||||
actions.LoadPostActions();
|
||||
|
||||
// 休眠提示
|
||||
AddLog(LocalizationHelper.GetString("SleepPrompt"), UiLogColor.Error);
|
||||
await Task.Delay(10000);
|
||||
await Execute.OnUIThreadAsync(() => Instances.MainWindowManager?.Show());
|
||||
if (await TimerCanceledAsync(
|
||||
LocalizationHelper.GetString("Sleep"),
|
||||
LocalizationHelper.GetString("SleepPrompt"),
|
||||
LocalizationHelper.GetString("Cancel"),
|
||||
60))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_logger.Information("Sleep not canceled, proceeding to sleep.");
|
||||
PowerManagement.Sleep();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,24 +108,12 @@ public class ToolboxViewModel : Screen
|
||||
|
||||
#region Recruit
|
||||
|
||||
private string _recruitInfo = LocalizationHelper.GetString("RecruitmentRecognitionTip");
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the recruit info.
|
||||
/// </summary>
|
||||
public string RecruitInfo
|
||||
{
|
||||
get => _recruitInfo;
|
||||
set => SetAndNotify(ref _recruitInfo, value);
|
||||
}
|
||||
public string RecruitInfo { get => field; set => SetAndNotify(ref field, value); } = LocalizationHelper.GetString("RecruitmentRecognitionTip");
|
||||
|
||||
private ObservableCollection<Inline> _recruitResultInlines = [];
|
||||
|
||||
public ObservableCollection<Inline> RecruitResultInlines
|
||||
{
|
||||
get => _recruitResultInlines;
|
||||
set => SetAndNotify(ref _recruitResultInlines, value);
|
||||
}
|
||||
public ObservableCollection<Inline> RecruitResultInlines { get => field; set => SetAndNotify(ref field, value); } = [];
|
||||
|
||||
public void UpdateRecruitResult(JArray? resultArray)
|
||||
{
|
||||
@@ -227,47 +215,41 @@ public class ToolboxViewModel : Screen
|
||||
}
|
||||
}
|
||||
|
||||
private bool _chooseLevel3 = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel3, bool.FalseString));
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to choose level 3.
|
||||
/// </summary>
|
||||
public bool ChooseLevel3
|
||||
{
|
||||
get => _chooseLevel3;
|
||||
get => field;
|
||||
set {
|
||||
SetAndNotify(ref _chooseLevel3, value);
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ChooseLevel3, value.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private bool _chooseLevel4 = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel4, bool.TrueString));
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel3, true);
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to choose level 4.
|
||||
/// </summary>
|
||||
public bool ChooseLevel4
|
||||
{
|
||||
get => _chooseLevel4;
|
||||
get => field;
|
||||
set {
|
||||
SetAndNotify(ref _chooseLevel4, value);
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ChooseLevel4, value.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private bool _chooseLevel5 = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel5, bool.TrueString));
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel4, true);
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to choose level 5.
|
||||
/// </summary>
|
||||
public bool ChooseLevel5
|
||||
{
|
||||
get => _chooseLevel5;
|
||||
get => field;
|
||||
set {
|
||||
SetAndNotify(ref _chooseLevel5, value);
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ChooseLevel5, value.ToString());
|
||||
}
|
||||
}
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel5, true);
|
||||
|
||||
private bool _chooseLevel6 = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.ChooseLevel6, bool.TrueString));
|
||||
|
||||
@@ -283,6 +265,90 @@ public class ToolboxViewModel : Screen
|
||||
}
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel3Time))]
|
||||
public int ChooseLevel3Hour
|
||||
{
|
||||
get => ChooseLevel3Time / 60;
|
||||
set => ChooseLevel3Time = (value * 60) + ChooseLevel3Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel3Time))]
|
||||
public int ChooseLevel3Min
|
||||
{
|
||||
get => (ChooseLevel3Time % 60) / 10 * 10;
|
||||
set => ChooseLevel3Time = (ChooseLevel3Hour * 60) + value;
|
||||
}
|
||||
|
||||
public int ChooseLevel3Time
|
||||
{
|
||||
get => field;
|
||||
set {
|
||||
value = value switch {
|
||||
< 60 => 9 * 60,
|
||||
> 9 * 60 => 60,
|
||||
_ => value / 10 * 10,
|
||||
};
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ToolBoxChooseLevel3Time, value.ToString());
|
||||
}
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ToolBoxChooseLevel3Time, 540);
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel4Time))]
|
||||
public int ChooseLevel4Hour
|
||||
{
|
||||
get => ChooseLevel4Time / 60;
|
||||
set => ChooseLevel4Time = (value * 60) + ChooseLevel4Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel4Time))]
|
||||
public int ChooseLevel4Min
|
||||
{
|
||||
get => (ChooseLevel4Time % 60) / 10 * 10;
|
||||
set => ChooseLevel4Time = (ChooseLevel4Hour * 60) + value;
|
||||
}
|
||||
|
||||
public int ChooseLevel4Time
|
||||
{
|
||||
get => field;
|
||||
set {
|
||||
value = value switch {
|
||||
< 60 => 9 * 60,
|
||||
> 9 * 60 => 60,
|
||||
_ => value / 10 * 10,
|
||||
};
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ToolBoxChooseLevel4Time, value.ToString());
|
||||
}
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ToolBoxChooseLevel4Time, 540);
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel5Time))]
|
||||
public int ChooseLevel5Hour
|
||||
{
|
||||
get => ChooseLevel5Time / 60;
|
||||
set => ChooseLevel5Time = (value * 60) + ChooseLevel5Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel5Time))]
|
||||
public int ChooseLevel5Min
|
||||
{
|
||||
get => (ChooseLevel5Time % 60) / 10 * 10;
|
||||
set => ChooseLevel5Time = (ChooseLevel5Hour * 60) + value;
|
||||
}
|
||||
|
||||
public int ChooseLevel5Time
|
||||
{
|
||||
get => field;
|
||||
set {
|
||||
value = value switch {
|
||||
< 60 => 9 * 60,
|
||||
> 9 * 60 => 60,
|
||||
_ => value / 10 * 10,
|
||||
};
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.ToolBoxChooseLevel5Time, value.ToString());
|
||||
}
|
||||
} = ConfigurationHelper.GetValue(ConfigurationKeys.ToolBoxChooseLevel5Time, 540);
|
||||
|
||||
private bool _autoSetTime = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.AutoSetTime, bool.TrueString));
|
||||
|
||||
/// <summary>
|
||||
@@ -344,9 +410,9 @@ public class ToolboxViewModel : Screen
|
||||
SelectList = levelList,
|
||||
ConfirmList = [-1], // 仅公招识别时将-1加入comfirm_level
|
||||
SetRecruitTime = RecruitAutoSetTime,
|
||||
ChooseLevel3Time = TaskQueueViewModel.RecruitTask.ChooseLevel3Time,
|
||||
ChooseLevel4Time = TaskQueueViewModel.RecruitTask.ChooseLevel4Time,
|
||||
ChooseLevel5Time = TaskQueueViewModel.RecruitTask.ChooseLevel5Time,
|
||||
ChooseLevel3Time = ChooseLevel3Time,
|
||||
ChooseLevel4Time = ChooseLevel4Time,
|
||||
ChooseLevel5Time = ChooseLevel5Time,
|
||||
ServerType = Instances.SettingsViewModel.ServerType,
|
||||
};
|
||||
var (type, taskParams) = task.Serialize();
|
||||
@@ -962,6 +1028,8 @@ public class ToolboxViewModel : Screen
|
||||
[JsonProperty("potential")]
|
||||
public int Potential { get; } = potential;
|
||||
|
||||
public int IdNumber { get; } = ExtractIdNumber(id);
|
||||
|
||||
public string RarityStars => IsPallas ? LocalizationHelper.GetPallasString(6, 6) : new('★', Rarity);
|
||||
|
||||
/// <summary>
|
||||
@@ -990,6 +1058,35 @@ public class ToolboxViewModel : Screen
|
||||
public override string ToString() => $"{Name} (★{Rarity})";
|
||||
|
||||
private bool IsPallas => Id == "char_485_pallas";
|
||||
|
||||
private static int ExtractIdNumber(string id)
|
||||
{
|
||||
// Expected format: "char_002_amiya"
|
||||
if (string.IsNullOrEmpty(id))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int firstUnderscore = id.IndexOf('_');
|
||||
if (firstUnderscore < 0 || firstUnderscore >= id.Length - 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int secondUnderscore = id.IndexOf('_', firstUnderscore + 1);
|
||||
if (secondUnderscore < 0 || secondUnderscore <= firstUnderscore + 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
ReadOnlySpan<char> numericSpan = id.AsSpan(firstUnderscore + 1, secondUnderscore - firstUnderscore - 1);
|
||||
if (int.TryParse(numericSpan, out int value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private ObservableCollection<Operator> _operBoxHaveList = [];
|
||||
@@ -1015,6 +1112,27 @@ public class ToolboxViewModel : Screen
|
||||
JsonDataHelper.Set(JsonDataKey.OperBoxData, JArray.FromObject(details));
|
||||
}
|
||||
|
||||
private void SortOperBoxLists()
|
||||
{
|
||||
OperBoxHaveList = SortOperBoxList(OperBoxHaveList);
|
||||
OperBoxNotHaveList = SortOperBoxList(OperBoxNotHaveList);
|
||||
}
|
||||
|
||||
private static ObservableCollection<Operator> SortOperBoxList(ObservableCollection<Operator> list)
|
||||
{
|
||||
if (list == null || list.Count <= 0)
|
||||
{
|
||||
return list ?? [];
|
||||
}
|
||||
|
||||
return [.. list
|
||||
.OrderByDescending(x => x.Rarity)
|
||||
.ThenByDescending(x => x.Elite)
|
||||
.ThenByDescending(x => x.Level)
|
||||
.ThenByDescending(x => x.Potential)
|
||||
.ThenByDescending(x => x.IdNumber)];
|
||||
}
|
||||
|
||||
private void LoadOperBoxDetails()
|
||||
{
|
||||
// TODO: 删除老数据节省 gui.json 的大小,后续版本可以删除
|
||||
@@ -1055,6 +1173,8 @@ public class ToolboxViewModel : Screen
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SortOperBoxLists();
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -1108,6 +1228,8 @@ public class ToolboxViewModel : Screen
|
||||
}
|
||||
}
|
||||
|
||||
SortOperBoxLists();
|
||||
|
||||
if (OperBoxNotHaveList.Count > 0)
|
||||
{
|
||||
OperBoxSelectedIndex = 0;
|
||||
|
||||
@@ -1243,6 +1243,8 @@ public class ConnectSettingsUserControlModel : PropertyChangedBase
|
||||
new() { Display = LocalizationHelper.GetString("AttachWindowInputSeize"), Value = "1" },
|
||||
new() { Display = LocalizationHelper.GetString("AttachWindowInputPostWithCursor"), Value = "64" },
|
||||
new() { Display = LocalizationHelper.GetString("AttachWindowInputSendWithCursor"), Value = "32" },
|
||||
new() { Display = LocalizationHelper.GetString("AttachWindowInputPostWithWindowPos"), Value = "256" },
|
||||
new() { Display = LocalizationHelper.GetString("AttachWindowInputSendWithWindowPos"), Value = "128" },
|
||||
];
|
||||
|
||||
private string _attachWindowMouseMethod = ConfigurationHelper.GetValue(ConfigurationKeys.AttachWindowMouseMethod, "64"); // 默认 PostMessageWithCursorPos
|
||||
|
||||
@@ -46,7 +46,7 @@ public class GameSettingsUserControlModel : PropertyChangedBase
|
||||
|
||||
public bool StartGame
|
||||
{
|
||||
get => field;
|
||||
get => SettingsViewModel.ConnectSettings.UseAttachWindow ? false : field;
|
||||
set {
|
||||
SetAndNotify(ref field, value);
|
||||
ConfigurationHelper.SetValue(ConfigurationKeys.StartGame, value.ToString());
|
||||
|
||||
@@ -26,12 +26,10 @@ using MaaWpfGui.Constants.Enums;
|
||||
using MaaWpfGui.Helper;
|
||||
using MaaWpfGui.Models;
|
||||
using MaaWpfGui.Models.AsstTasks;
|
||||
using MaaWpfGui.Services;
|
||||
using MaaWpfGui.Utilities;
|
||||
using MaaWpfGui.Utilities.ValueType;
|
||||
using MaaWpfGui.ViewModels.UI;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Serilog;
|
||||
using Stylet;
|
||||
using static MaaWpfGui.Main.AsstProxy;
|
||||
@@ -474,7 +472,13 @@ public class FightSettingsUserControlModel : TaskSettingsViewModel
|
||||
public bool UseCustomAnnihilation
|
||||
{
|
||||
get => GetTaskConfig<FightTask>().UseCustomAnnihilation;
|
||||
set => SetTaskConfig<FightTask>(t => t.UseCustomAnnihilation == value, t => t.UseCustomAnnihilation = value);
|
||||
set {
|
||||
bool ret = SetTaskConfig<FightTask>(t => t.UseCustomAnnihilation == value, t => t.UseCustomAnnihilation = value);
|
||||
if (ret)
|
||||
{
|
||||
StageListSource.FirstOrDefault(i => i.Value == "Annihilation")?.Display = UseCustomAnnihilation ? (AnnihilationModeList.FirstOrDefault(i => i.Value == AnnihilationStage).Key ?? LocalizationHelper.GetString("Annihilation.Current")) : LocalizationHelper.GetString("Annihilation.Current");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string AnnihilationStage
|
||||
@@ -734,7 +738,7 @@ public class FightSettingsUserControlModel : TaskSettingsViewModel
|
||||
|
||||
if (task.Stage == "Annihilation" && fight.UseCustomAnnihilation)
|
||||
{
|
||||
task.Stage = AnnihilationStage;
|
||||
task.Stage = fight.AnnihilationStage;
|
||||
}
|
||||
|
||||
if (fight.EnableTargetDrop != false && !string.IsNullOrEmpty(fight.DropId))
|
||||
|
||||
@@ -18,10 +18,9 @@ using System.Linq;
|
||||
using MaaWpfGui.Configuration.Single.MaaTask;
|
||||
using MaaWpfGui.Helper;
|
||||
using MaaWpfGui.Models.AsstTasks;
|
||||
using MaaWpfGui.Services;
|
||||
using MaaWpfGui.Utilities;
|
||||
using MaaWpfGui.Utilities.ValueType;
|
||||
using MaaWpfGui.ViewModels.UI;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using static MaaWpfGui.Main.AsstProxy;
|
||||
|
||||
namespace MaaWpfGui.ViewModels.UserControl.TaskQueue;
|
||||
@@ -165,12 +164,14 @@ public class RecruitSettingsUserControlModel : TaskSettingsViewModel
|
||||
set => SetTaskConfig<RecruitTask>(t => t.Level5Choose == value, t => t.Level5Choose = value);
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel3Time))]
|
||||
public int ChooseLevel3Hour
|
||||
{
|
||||
get => ChooseLevel3Time / 60;
|
||||
set => ChooseLevel3Time = (value * 60) + ChooseLevel3Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel3Time))]
|
||||
public int ChooseLevel3Min
|
||||
{
|
||||
get => (ChooseLevel3Time % 60) / 10 * 10;
|
||||
@@ -190,12 +191,14 @@ public class RecruitSettingsUserControlModel : TaskSettingsViewModel
|
||||
}
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel4Time))]
|
||||
public int ChooseLevel4Hour
|
||||
{
|
||||
get => ChooseLevel4Time / 60;
|
||||
set => ChooseLevel4Time = (value * 60) + ChooseLevel4Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel4Time))]
|
||||
public int ChooseLevel4Min
|
||||
{
|
||||
get => (ChooseLevel4Time % 60) / 10 * 10;
|
||||
@@ -215,12 +218,14 @@ public class RecruitSettingsUserControlModel : TaskSettingsViewModel
|
||||
}
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel5Time))]
|
||||
public int ChooseLevel5Hour
|
||||
{
|
||||
get => ChooseLevel5Time / 60;
|
||||
set => ChooseLevel5Time = (value * 60) + ChooseLevel5Min;
|
||||
}
|
||||
|
||||
[PropertyDependsOn(nameof(ChooseLevel5Time))]
|
||||
public int ChooseLevel5Min
|
||||
{
|
||||
get => (ChooseLevel5Time % 60) / 10 * 10;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
Background="{DynamicResource MdXamlBackground}"
|
||||
Icon="../../newlogo.ico"
|
||||
mc:Ignorable="d">
|
||||
<hc:ScrollViewer Margin="10,5" IsInertiaEnabled="True">
|
||||
<hc:ScrollViewer Margin="10,5" IsInertiaEnabled="True" PanningMode="VerticalOnly">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="50" />
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
xmlns:s="https://github.com/canton7/Stylet"
|
||||
xmlns:uiBehaviors="clr-namespace:MaaWpfGui.Extensions.UIBehaviors"
|
||||
xmlns:ui_vms="clr-namespace:MaaWpfGui.ViewModels.UI"
|
||||
d:Background="White"
|
||||
d:DataContext="{d:DesignInstance {x:Type ui_vms:ToolboxViewModel}}"
|
||||
d:DesignHeight="600"
|
||||
d:DesignWidth="800"
|
||||
@@ -107,7 +108,7 @@
|
||||
Maximum="9"
|
||||
Minimum="1"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel3Hour, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel3Hour}" />
|
||||
<controls:TextBlock Margin="5" Text=":" />
|
||||
<hc:NumericUpDown
|
||||
Width="55"
|
||||
@@ -115,7 +116,7 @@
|
||||
Maximum="50"
|
||||
Minimum="0"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel3Min, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel3Min}" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
@@ -132,7 +133,7 @@
|
||||
Maximum="9"
|
||||
Minimum="1"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel4Hour, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel4Hour}" />
|
||||
<controls:TextBlock Margin="5" Text=":" />
|
||||
<hc:NumericUpDown
|
||||
Width="55"
|
||||
@@ -140,7 +141,7 @@
|
||||
Maximum="50"
|
||||
Minimum="0"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel4Min, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel4Min}" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
@@ -157,7 +158,7 @@
|
||||
Maximum="9"
|
||||
Minimum="1"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel5Hour, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel5Hour}" />
|
||||
<controls:TextBlock Margin="5" Text=":" />
|
||||
<hc:NumericUpDown
|
||||
Width="55"
|
||||
@@ -165,7 +166,7 @@
|
||||
Maximum="50"
|
||||
Minimum="0"
|
||||
ValueFormat="00"
|
||||
Value="{Binding ChooseLevel5Min, Source={x:Static ui_vms:TaskQueueViewModel.RecruitTask}}" />
|
||||
Value="{Binding ChooseLevel5Min}" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
@@ -237,13 +238,15 @@
|
||||
<hc:ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
|
||||
<ItemsControl
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
d:ItemsSource="{d:SampleData ItemCount=1}"
|
||||
ItemsSource="{Binding OperBoxNotHaveList}"
|
||||
ScrollViewer.CanContentScroll="True"
|
||||
VirtualizingPanel.IsVirtualizing="True"
|
||||
VirtualizingPanel.VirtualizationMode="Recycling">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="5" />
|
||||
<UniformGrid Columns="{c:Binding 'OperBoxNotHaveList.Count >= 5 ? 5 : OperBoxNotHaveList.Count'}" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
@@ -279,13 +282,15 @@
|
||||
<hc:ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
|
||||
<ItemsControl
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
d:ItemsSource="{d:SampleData ItemCount=1}"
|
||||
ItemsSource="{Binding OperBoxHaveList}"
|
||||
ScrollViewer.CanContentScroll="True"
|
||||
VirtualizingPanel.IsVirtualizing="True"
|
||||
VirtualizingPanel.VirtualizationMode="Recycling">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="5" />
|
||||
<UniformGrid Columns="{c:Binding 'OperBoxHaveList.Count >= 5 ? 5 : OperBoxHaveList.Count'}" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
@@ -375,7 +380,7 @@
|
||||
Margin="30,0"
|
||||
Command="{s:Action StartOperBox}"
|
||||
Content="{DynamicResource StartToOperBoxRecognition}"
|
||||
IsEnabled="{Binding 'Idle and Inited'}" />
|
||||
IsEnabled="{c:Binding 'Idle and Inited'}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
@@ -415,13 +420,15 @@
|
||||
VerticalScrollBarVisibility="Auto">
|
||||
<ItemsControl
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
d:ItemsSource="{d:SampleData ItemCount=1}"
|
||||
ItemsSource="{Binding DepotResult}"
|
||||
ScrollViewer.CanContentScroll="True"
|
||||
VirtualizingPanel.IsVirtualizing="True"
|
||||
VirtualizingPanel.VirtualizationMode="Recycling">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="5" />
|
||||
<UniformGrid Columns="{c:Binding 'DepotResult.Count >= 5 ? 5 : DepotResult.Count'}" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
|
||||
@@ -428,10 +428,10 @@
|
||||
Margin="0,10"
|
||||
Content="{DynamicResource HideUnavailableStage}"
|
||||
IsChecked="{Binding HideUnavailableStage}" />
|
||||
<CheckBox
|
||||
Margin="0,10"
|
||||
Content="{DynamicResource UseWeeklySchedule}"
|
||||
IsChecked="{Binding UseWeeklySchedule}" />
|
||||
<StackPanel Margin="0,10" Orientation="Horizontal">
|
||||
<CheckBox Content="{DynamicResource UseWeeklySchedule}" IsChecked="{Binding UseWeeklySchedule}" />
|
||||
<controls:TooltipBlock TooltipText="{DynamicResource UseWeeklyScheduleTip}" />
|
||||
</StackPanel>
|
||||
<ListBox
|
||||
MaxHeight="300"
|
||||
Margin="6,5"
|
||||
@@ -458,7 +458,8 @@
|
||||
HorizontalAlignment="Center"
|
||||
FontWeight="Bold"
|
||||
Text="{DynamicResource MultiTasksShareTip}"
|
||||
TextAlignment="Center" />
|
||||
TextAlignment="Left"
|
||||
TextWrapping="Wrap" />
|
||||
<CheckBox
|
||||
Margin="0,10"
|
||||
Content="{DynamicResource AutoRestartOption}"
|
||||
|
||||
@@ -396,7 +396,7 @@
|
||||
<hc:TextBox.Text>
|
||||
<Binding Path="RoguelikeSeed" UpdateSourceTrigger="PropertyChanged">
|
||||
<Binding.ValidationRules>
|
||||
<hc:RegexRule Pattern="^[\da-zA-Z]+,rogue_\d,\d$" />
|
||||
<hc:RegexRule Pattern="^[\da-zA-Z]+,rogue_\d+,\d+$" />
|
||||
</Binding.ValidationRules>
|
||||
</Binding>
|
||||
</hc:TextBox.Text>
|
||||
@@ -406,7 +406,8 @@
|
||||
HorizontalAlignment="Center"
|
||||
FontWeight="Bold"
|
||||
Text="{DynamicResource MultiTasksShareTip}"
|
||||
TextAlignment="Center" />
|
||||
TextWrapping="Wrap"
|
||||
TextAlignment="Left" />
|
||||
<CheckBox Margin="0,10" IsChecked="{Binding RoguelikeDelayAbortUntilCombatComplete}">
|
||||
<TextBlock
|
||||
Block.TextAlignment="Left"
|
||||
|
||||
@@ -59,7 +59,8 @@
|
||||
HorizontalAlignment="Center"
|
||||
FontWeight="Bold"
|
||||
Text="{DynamicResource MultiTasksShareTip}"
|
||||
TextAlignment="Center" />
|
||||
TextWrapping="Wrap"
|
||||
TextAlignment="Left" />
|
||||
<CheckBox
|
||||
Margin="0,10"
|
||||
Content="{DynamicResource StartGameLaunchClient}"
|
||||
|
||||