Compare commits

...

76 Commits

Author SHA1 Message Date
Constrat
ee566c5fb7 chore: add coppers to resource updater 2026-02-22 00:13:53 +01:00
Constrat
40d5bdd560 fix: IS6 EN yostar decided to finally fix the tongbaos releasing an official translation + resource updater copper-ability 2026-02-22 00:13:29 +01:00
status102
01a2329d18 fix(wpf): 修复自定义基建计划在迁移时基建计划选择转换错误 2026-02-21 19:58:51 +08:00
HX3N
c52cf81b94 chore: YostarKR SSS#9 SSSBuffChoose
and GO-OpenOcr
2026-02-21 18:02:25 +09:00
Constrat
2a9c963fef fix: EN Operator OCR roi fixes + skadi alter simplification 2026-02-20 23:45:10 +01:00
MistEO
0817bc1c9f feat: 适配maafw新Win32触控方式 (#15755) 2026-02-20 23:44:50 +08:00
Constrat
c36e5cfd9a fix: IS6 EN encounter regex post ROI increase 2026-02-20 16:04:14 +01:00
undefined
3fbda5b98d fix: touch screen support for version updated page (#15747) 2026-02-20 17:07:21 +08:00
uye
50cbc2e10d feat: PC 提示新增分辨率要求
close #15749
2026-02-20 16:59:38 +08:00
Constrat
30dd7d0afa fix: invert dice refresh with invest system priority in IS3 (#15740) 2026-02-20 16:52:33 +08:00
status102
80280bb62d fix: 小工具=-公招识别3~5星设置时间未遵循设置 2026-02-20 11:24:07 +08:00
SherkeyXD
e7362d2d35 feat: PC端忽略启动客户端设置 2026-02-19 14:17:04 +08:00
uye
f77d85f542 Release v6.3.2 (#15737)
## Summary by Sourcery

更新公招工具箱的时间选项、改进干员列表排序与电源操作的交互体验,并简化旧版 Windows 支持文档。

新功能:
- 在工具箱界面中为 3★–5★ 干员新增可配置的公招时间设置,并持久化到配置中。

缺陷修复:
- 确保自定义剿灭关卡在执行战斗任务时被正确应用,并在关卡列表中正确显示。
- 改进基建收取任务的异常处理,在出错时关闭线索发送对话框并正常停止任务。
- 修复公招时间选择器的绑定问题,确保当底层时间变化时,小时与分钟选择器能够保持同步。

优化改进:
- 优化与公招相关的视图模型属性,使用更简洁的自动属性模式,并以配置作为默认值来源。
- 以稀有度、精英化阶段、等级、潜能和 ID 的固定顺序对干员列表进行确定性排序,使已拥有与未拥有干员更易浏览。
- 用可取消的确认对话框替代固定延时的睡眠/休眠提示,将主窗口置于前台并记录操作结果。

文档:
- 在所有支持的语言中简化并统一常见问题(FAQ)部分,明确说明不再支持 Windows 7/8/8.1,并移除过时的版本说明和解决方案指引。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

Update recruitment toolbox timing options, improve operator box sorting
and power actions UX, and simplify legacy Windows support documentation.

New Features:
- Add configurable recruitment time settings for 3★–5★ operators within
the toolbox UI, persisted in configuration.

Bug Fixes:
- Ensure custom annihilation stages are correctly applied and reflected
in the stage list when running battle tasks.
- Improve infrastructure reception task failure handling by closing the
clue sending dialog and stopping cleanly on errors.
- Fix recruitment time picker bindings so hour and minute selectors stay
in sync when the underlying time changes.

Enhancements:
- Refine recruit-related view model properties to use simpler
auto-property patterns with configuration-backed defaults.
- Sort operator box lists deterministically by rarity, promotion, level,
potential, and ID to make owned and unowned operators easier to browse.
- Replace fixed-delay sleep/hibernate prompts with a cancelable
confirmation dialog that brings the main window to the foreground and
logs the result.

Documentation:
- Simplify and unify FAQ sections in all supported languages to state
that Windows 7/8/8.1 are no longer supported, removing outdated version
and workaround guidance.

</details>

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

更新公招工具箱的时间选项、改进干员列表排序与电源操作的交互体验,并简化旧版 Windows 支持文档。

新功能:
- 在工具箱界面中为 3★–5★ 干员新增可配置的公招时间设置,并持久化到配置中。

缺陷修复:
- 确保自定义剿灭关卡在执行战斗任务时被正确应用,并在关卡列表中正确显示。
- 改进基建收取任务的异常处理,在出错时关闭线索发送对话框并正常停止任务。
- 修复公招时间选择器的绑定问题,确保当底层时间变化时,小时与分钟选择器能够保持同步。

优化改进:
- 优化与公招相关的视图模型属性,使用更简洁的自动属性模式,并以配置作为默认值来源。
- 以稀有度、精英化阶段、等级、潜能和 ID 的固定顺序对干员列表进行确定性排序,使已拥有与未拥有干员更易浏览。
- 用可取消的确认对话框替代固定延时的睡眠/休眠提示,将主窗口置于前台并记录操作结果。

文档:
- 在所有支持的语言中简化并统一常见问题(FAQ)部分,明确说明不再支持 Windows 7/8/8.1,并移除过时的版本说明和解决方案指引。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

Update recruitment toolbox timing options, improve operator box sorting
and power actions UX, and simplify legacy Windows support documentation.

New Features:
- Add configurable recruitment time settings for 3★–5★ operators within
the toolbox UI, persisted in configuration.

Bug Fixes:
- Ensure custom annihilation stages are correctly applied and reflected
in the stage list when running battle tasks.
- Improve infrastructure reception task failure handling by closing the
clue sending dialog and stopping cleanly on errors.
- Fix recruitment time picker bindings so hour and minute selectors stay
in sync when the underlying time changes.

Enhancements:
- Refine recruit-related view model properties to use simpler
auto-property patterns with configuration-backed defaults.
- Sort operator box lists deterministically by rarity, promotion, level,
potential, and ID to make owned and unowned operators easier to browse.
- Replace fixed-delay sleep/hibernate prompts with a cancelable
confirmation dialog that brings the main window to the foreground and
logs the result.

Documentation:
- Simplify and unify FAQ sections in all supported languages to state
that Windows 7/8/8.1 are no longer supported, removing outdated version
and workaround guidance.

</details>

</details>
2026-02-18 23:35:46 +08:00
github-actions[bot]
00e577f6d2 docs: Auto Update Changelogs of v6.3.2 (#15738)
* docs: Auto Generate Changelog of Release v6.3.2

* docs: Update CHANGELOG for v6.3.2 release

This version update includes preliminary support for the PC client, a restructured task configuration for Windows, and various enhancements and fixes across the application. Key features include the ability to add multiple tasks, color-coded task statuses, and improved operator recognition.

* docs: Update CHANGELOG for version 6.3.2

Updated CHANGELOG for version 6.3.2 with new features, improvements, fixes, and documentation updates.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Co-authored-by: uye <99072975+ABA2396@users.noreply.github.com>
2026-02-18 23:35:28 +08:00
uye
6d32795ffa chore: 增加 id 格式验证 2026-02-18 20:31:39 +08:00
uye
a72571ce90 fix: 4 星公招时间显示错误 2026-02-18 20:23:16 +08:00
uye
59fa039a72 feat: 睡眠休眠前增加倒计时弹窗 2026-02-18 20:12:31 +08:00
Constrat
adb8863cf6 perf: optimize templates 2026-02-17 10:12:07 +01:00
Constrat
7bab2b2312 perf: increase score for AddOperatorTradeAggressive EN 2026-02-17 10:11:58 +01:00
Manicsteiner
b55b2c6bd6 chore: Yostar servers SSS#9 and ShamareThumbnail (#15732)
* chore: Yostar servers SSS#9 and ShamareThumbnail

* chore: KR ShamareThumbnail4.png

* chore: Shamare EN

* perf: png optimization

* chore: KR replace the incorrect template

---------

Co-authored-by: HX3N <scarlet7518@gmail.com>
Co-authored-by: Constrat <56174894+Constrat@users.noreply.github.com>
2026-02-16 23:54:22 +01:00
status102
3d46fc1d0c fix: 刷理智自定义剿灭关卡在特定情况的绑定错误 2026-02-16 17:44:15 +08:00
status102
e62a9a08a9 fix(wpf): 在禁用刷理智-自定义剿灭关卡后需要手动切换任务以刷新列表中显示的剿灭关卡, 尽管不影响实际运行 2026-02-16 15:58:01 +08:00
uye
f7f9a4f44c perf: 干员识别按照 稀有度->精英化->等级->潜能->Id 排序 2026-02-16 02:04:08 +08:00
uye
9ab3265188 perf: 优化识别工具中列表小于 5 时的显示效果 2026-02-16 01:29:23 +08:00
uye
e1572d8bba chore: 明确周计划和定时更新使用游戏时间而非现实时间 2026-02-16 00:56:52 +08:00
uye
761ea19e8b fix: 会客室任务失败重试时尝试关闭赠送线索界面
fix #15726
2026-02-16 00:36:26 +08:00
Constrat
d9ad52053b fix(wpf): English text overflow on long strings in middle column 2026-02-15 16:23:48 +01:00
SherkeyXD
1ddee84199 chore: 移除老主线导航逻辑 (#15644) 2026-02-14 15:54:33 +08:00
uye
45b89b7089 feat: 生息演算支援道具名称改为全字匹配
fix #15713
2026-02-14 15:52:52 +08:00
status102
c8a0c982b9 fix(wpf): 肉鸽开局种子无法通过Wpf设置两位数难度 2026-02-14 12:56:31 +08:00
status102
910cd47dfa fix(wpf): 小工具-公招识别 3~5星选择时间无法修改 2026-02-14 12:54:58 +08:00
status102
63d499816d fix(wpf): 小工具-干员识别 开始识别按钮启用状态绑定失效 2026-02-14 12:54:57 +08:00
status102
d734109155 fix: 自动公招任务3~5星确认时间在修改后未能刷新UI 2026-02-14 12:54:57 +08:00
github-actions[bot]
c45e6a3d10 chore: Auto update by pre-commit hooks
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/22002953703
[skip changelog]
2026-02-13 21:12:26 +00:00
Goat Boring(山羊博宁88)
5e712c04eb docs: 删除一些过时内容 (#15700)
* docs: 删除一些过时内容

* docs: Apply suggestion from @sourcery-ai[bot]

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: Rbqwow <55343783+Rbqwow@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-02-13 15:36:13 +08:00
HY
dc9c9dfee6 chore: 繁中服「夢鄉」主題 (#15699) 2026-02-13 15:34:27 +08:00
Constrat
ec7cbeeb1c fix: EN AveMujica terminal new template 2026-02-13 00:42:44 +01:00
Constrat
c3ccd36d02 fix: EN IS tentative fix increasing roi for encounter and more replace regex 2026-02-12 23:36:44 +01:00
uye
283309d3c1 Release v6.3.1 (#15679)
## Summary by Sourcery

优化干员名称 OCR 预处理逻辑,新增在无效关卡详情干员名称时保存调试图片,并调整工具与配置,以提升开发分支上 GUI 构建的安全性并简化 CI
流程。

Enhancements:
- 改进 OperNameAnalyzer,使其支持可配置的左右文本对齐方式,采用更安全的 ROI 裁剪方式并提供更合理的参数默认值。
- 在关卡详情的干员名称 OCR 中使用 OperNameAnalyzer,并在检测到无效名称时保存调试图片。
- 更新多项游戏内任务和资源的 JSON 配置,包括肉鸽、基建以及协同作战编队等。

Build:
- 将 WPF GUI 的自定义 CMake 目标 `run-MaaWpfGui` 置于 VS Code
环境检查之后,以避免在其他环境中被意外执行。

CI:
- 更新 CI 工作流触发条件,使其在 dev 分支推送与打 tag 时运行,同时简化拉取请求相关条件,并调整冒烟测试在 dev
分支推送时运行。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

Refine operator name OCR preprocessing, add debug image saving for
invalid battle detail names, and adjust tooling and configuration for
safer GUI builds and streamlined CI on the dev branch.

Enhancements:
- Improve OperNameAnalyzer to handle configurable left/right text
alignment with safer ROI cropping and parameter defaults.
- Use OperNameAnalyzer for battle detail operator name OCR and save
debug images when an invalid name is detected.
- Update multiple in-game task and resource JSON configurations,
including roguelike, infrastructure, and copilot formations.

Build:
- Gate the WPF GUI run-MaaWpfGui custom CMake target behind a VS Code
environment check to avoid unintended execution in other environments.

CI:
- Update CI workflow triggers to run on dev branch pushes and tags while
simplifying pull request conditions and aligning smoke tests to run on
dev pushes.

</details>

增强内容:
- 将 WPF GUI 的 CMake 运行目标限制在 VS Code 环境中,以避免在其他环境中被意外执行。
- 为战斗详情分析中无效干员名称检测添加图片保存功能,以便进行调试和诊断。
- 更新多种任务与资源的 JSON 配置,包括肉鸽、基建以及助理编队等。

构建:
- 在主 CMake 配置中,通过 VS Code 环境变量控制自定义目标 `run-MaaWpfGui` 的执行。

CI:
- 调整 CI 工作流,使其在 dev 分支的推送和打标签时运行,同时简化拉取请求触发条件,并将冒烟测试对齐为在 dev 分支推送时运行。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

优化干员名称 OCR 预处理逻辑,新增在无效关卡详情干员名称时保存调试图片,并调整工具与配置,以提升开发分支上 GUI 构建的安全性并简化 CI
流程。

Enhancements:
- 改进 OperNameAnalyzer,使其支持可配置的左右文本对齐方式,采用更安全的 ROI 裁剪方式并提供更合理的参数默认值。
- 在关卡详情的干员名称 OCR 中使用 OperNameAnalyzer,并在检测到无效名称时保存调试图片。
- 更新多项游戏内任务和资源的 JSON 配置,包括肉鸽、基建以及协同作战编队等。

Build:
- 将 WPF GUI 的自定义 CMake 目标 `run-MaaWpfGui` 置于 VS Code
环境检查之后,以避免在其他环境中被意外执行。

CI:
- 更新 CI 工作流触发条件,使其在 dev 分支推送与打 tag 时运行,同时简化拉取请求相关条件,并调整冒烟测试在 dev
分支推送时运行。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

Refine operator name OCR preprocessing, add debug image saving for
invalid battle detail names, and adjust tooling and configuration for
safer GUI builds and streamlined CI on the dev branch.

Enhancements:
- Improve OperNameAnalyzer to handle configurable left/right text
alignment with safer ROI cropping and parameter defaults.
- Use OperNameAnalyzer for battle detail operator name OCR and save
debug images when an invalid name is detected.
- Update multiple in-game task and resource JSON configurations,
including roguelike, infrastructure, and copilot formations.

Build:
- Gate the WPF GUI run-MaaWpfGui custom CMake target behind a VS Code
environment check to avoid unintended execution in other environments.

CI:
- Update CI workflow triggers to run on dev branch pushes and tags while
simplifying pull request conditions and aligning smoke tests to run on
dev pushes.

</details>

</details>
2026-02-13 02:01:52 +08:00
uye
43d5c429ae docs: Update CHANGELOG with new features and fixes 2026-02-13 01:59:57 +08:00
status102
bb15f533b2 perf: 配置迁移自动为启用备选且首个关卡为剿灭模式的刷理智任务自动添加额外的刷理智任务 2026-02-13 00:13:06 +08:00
uye
424b916265 docs: 更新 api 链接 2026-02-12 21:57:07 +08:00
Status102
656ba9d749 perf: 忽略干员属性要求 不再允许跳过精英化要求 (#15697)
* perf: `忽略干员属性要求` 不再允许跳过精英化要求

* fix: flag

* i18n: KR

* i18n: EN

---------

Co-authored-by: HX3N <scarlet7518@gmail.com>
Co-authored-by: Constrat <56174894+Constrat@users.noreply.github.com>
2026-02-12 21:31:48 +08:00
Manicsteiner
2a4cd8b7c8 fix: JP AveMujica event ocr 2026-02-12 20:12:47 +08:00
status102
e862101764 docs: changelog 2026-02-12 19:50:07 +08:00
status102
c095cc6d6f perf: 自动战斗自动编队期间如有干员属性要求被忽略, 则禁用自动化投票 2026-02-12 19:30:33 +08:00
status102
a0a6cf6739 perf: 作业列表在忽略干员属性后不再自动投票 2026-02-12 19:02:22 +08:00
uye
f21f7cfd92 docs: Update CHANGELOG for version 6.3.1
Added new features and fixed various issues in version 6.3.1.
2026-02-12 18:58:50 +08:00
github-actions[bot]
10989582ee chore: Auto Update Game Resources - 2026-02-12
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/21938905905

[skip changelog]
2026-02-12 08:23:37 +00:00
status102
a0b73022cd fix: UserAdditional非json格式报错 2026-02-12 16:01:31 +08:00
status102
5bc7364eb6 chore: 使用屏幕宽高常量代替硬编码 2026-02-12 16:01:30 +08:00
status102
7c3d531177 fix: 屏幕外的干员跳过技能就绪检测 2026-02-12 16:01:30 +08:00
Manicsteiner
b4d75f194e chore: JP OperNameAnalyzer specialParams 2026-02-12 14:55:37 +08:00
AnnAngela
f642273b7a docs: Update CHANGELOG with recent adjustments and fixes 2026-02-12 12:58:34 +08:00
HY
3da747a59a chore: 調整繁中服界園肉鴿 OCR (2/?) (#15689) 2026-02-12 12:57:35 +08:00
github-actions[bot]
cfb2a70ac3 docs: Auto Update Changelogs of v6.3.1 (#15688)
* docs: Auto Generate Changelog of Release v6.3.1

* docs: Update CHANGELOG for v6.3.1 release

This update introduces preliminary support for the PC client of Arknights, restructures the Farming configuration for Windows, and includes various improvements and fixes across multiple features.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: AnnAngela <naganjue@vip.qq.com>
2026-02-12 02:34:03 +01:00
Constrat
3c763afa2d fix: update refresh node EN IS5 2026-02-11 23:55:16 +01:00
Constrat
173d8f50ac ci: color [INF] for smoke testing as well 2026-02-11 22:50:05 +01:00
Constrat
867a7b5ea7 fix: i'm kinda stupid 2026-02-11 22:24:43 +01:00
Constrat
3469aa3777 fix: EN IS StageRefresh 2026-02-11 21:54:26 +01:00
github-actions[bot]
f7c85a9803 feat: Update Submodules MaaMacGui, maa-cli
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/21921948238
[skip changelog]
2026-02-11 20:31:02 +00:00
uye
19241cf186 feat: OperNameAnalyzer 支持左对齐检测 (#15682)
rft: OperNameAnalyzer 支持左对齐检测
2026-02-12 04:30:20 +08:00
uye
51d6fc3ce1 chore: 调整单字干员正则 2026-02-11 21:55:23 +08:00
HY
d7f7614de6 chore: 調整繁中服界園肉鴿 OCR (#15678) 2026-02-11 14:29:14 +01:00
Constrat
5de1387402 fix: EN IS fix trader store templates AGAIN 2026-02-11 14:17:55 +01:00
Constrat
08956dc9e8 fix: EN Yu OCR for Yutenji 2026-02-11 13:59:57 +01:00
status102
d32484e366 fix: 自动编队选择技能时点击到技能描述教程了 2026-02-11 16:30:09 +08:00
uye
206f5bf97c chore: 删除干员名开头/末尾的_<> 2026-02-11 16:27:00 +08:00
status102
f1827ad99a fix: 自动编队选择技能时点击到技能范围 2026-02-11 16:22:18 +08:00
drway
a68f740fe3 chore: 添加响石、赤刃明霄陈基建技能加成 (#15674)
响石效率参照技能同为线索交流期间加成的跃跃填写
2026-02-11 16:10:12 +08:00
uye
483a484ae7 chore: 保全派驻自动战斗使用二值化结果识别干员名 2026-02-11 16:06:50 +08:00
uye
ad26721541 chore: 删除无用的正则替换 2026-02-11 15:59:55 +08:00
uye
ba6f52f974 chore: 自动战斗使用二值化结果识别干员名 2026-02-11 15:55:51 +08:00
uye
3782fb1fcb debug: 自动战斗遇到干员名识别失败时保留截图 2026-02-11 15:33:20 +08:00
Status102
0ea2845b5b chore: 仅在VS Code中添加辅助项目 (#15669) 2026-02-11 11:16:09 +08:00
MistEO
96b95bf5e4 ci: only handle push on dev 2026-02-11 10:58:29 +08:00
106 changed files with 826 additions and 511 deletions

View File

@@ -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/**"

View File

@@ -4,6 +4,8 @@ permissions:
on:
push:
branches:
- "dev"
paths:
- ".github/workflows/smoke-testing.yml"
- "3rdparty/include/**"

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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 7DXGI 1.2、Direct3D 11.1KB2670838[ダウンロードリンク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 も同様にサポートしていません。
#### 公式統合パック(確信)

View File

@@ -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 サンプル画面

View File

@@ -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-1XX-9ステージを一度にクリアできます。 `SSReopen-IC` など。
::: details 画面例

View File

@@ -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-1XX-9 ステージを一度に完了できます。
:::
::: field name="medicine" type="number" optional default="0"

View File

@@ -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 7DXGI 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도 더 이상 지원하지 않습니다.
## 연결 오류

View File

@@ -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 예시 화면

View File

@@ -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 7DXGI 1.2、Direct3D 11.1KB2670838[下载链接 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 也同样不再支持。
## 连接错误

View File

@@ -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 示例画面

View File

@@ -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"

View File

@@ -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 7DXGI 1.2、Direct3D 11.1KB2670838[下載連結 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 也同樣不再支援。
## 連線錯誤

View File

@@ -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 範例畫面

View File

@@ -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"

View File

@@ -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

View File

@@ -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", "衡-挪移"],

View File

@@ -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"]

View File

@@ -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": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1021 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1021 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,6 +1,6 @@
{
"AveMujica-OpenOcr": {
"text": ["安らかな譫言", "安らかな", "ステージ開放中", "運命愛"]
"text": ["安らかな譫言", "安ら", "讃言", "ステージ開放中", "運命愛"]
},
"AveMujicaChapterToAveMujica": {
"text": ["忘れえぬ夢", "忘れえぬ"]

View File

@@ -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": ["レベル"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,6 +1,6 @@
{
"GO-OpenOcr": {
"text": ["위대한", "서곡의", "끝", "이벤트", "개방중"]
"text": ["위대한", "서곡의", "끝"]
},
"GOChapterToGO": {
"text": ["무명", "공훈"]

View File

@@ -1622,7 +1622,8 @@
[".*사이언스아카.*", "皇家科学院望远镜"],
["보안인재.*", "保全人才合作协议"],
["소형조준.*", "轻型瞄准测距仪"],
["천공야행세트", "天工夜行套装"]
["천공야행세트", "天工夜行套装"],
["역제압장갑세트", "反制装甲套组"]
]
},
"SSSBuffChooseConfirm": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -56,7 +56,7 @@
["衡-重鎧", "衡-重铠"],
["厲-[火人]機", "厉-火机"],
["厲-歲醒天時", "厉-岁醒天时"],
["厲-無皎之昧", "厉-无皎之昧"],
["厲-無[皎咬]之[昧味]", "厉-无皎之昧"],
["衡-慶豐收", "衡-庆丰收"],
["衡-塞上月", "衡-塞上月"],
["花-聚力則強", "花-聚力则强"],

View File

@@ -19,14 +19,16 @@
["先手必勝", "先手必胜"],
["穩.*穩打", "稳扎稳打"],
["取長補(短|矩)", "取长补短"],
["隨心所欲", "随心所欲"]
["隨心所欲", "随心所欲"],
["靈活部署", "灵活部署"],
["堅不可摧", "坚不可摧"]
]
},
"RoguelikeCustom-HijackSquad": {
"ocrReplace": [
["(指|自)揮分.*", "指挥分队"],
["集群分.*", "集群分队"],
[".*勤分.*", "后勤分队"],
["後勤分隊", "后勤分队"],
["矛.*分.*", "矛头分队"],
["突.*分.*", "突击战术分队"],
["堡.*分.*", "堡垒战术分队"],
@@ -972,12 +974,12 @@
["觀者自在", "观者自在"],
["滾圓財[才]?神", "滚圆财神"],
["天險", "天险"],
["[千壬]古鴨帝", "千古鸭帝"],
["[千壬]古鴨帝", "千古鸭帝"],
["來者不拒", "来者不拒"],
[".*鮑老闆連鎖.*", "“鲍老板连锁”"],
["老[賊成]羽", "老贼羽"],
["應.*蘊.*而生", "应“蕴”而生"],
["燈與引燭", "掌灯与引烛"],
["[堂掌]燈與引燭", "掌灯与引烛"],
["護鴨金剛", "护鸭金刚"],
["點睛", "点睛"],
["種因得果", "种因得果"],

View File

@@ -1099,7 +1099,7 @@
["為崖作倀", "为崖作伥"],
["作壁上觀", "作壁上观"],
["神遊天外", "神游天外"],
["往事喑啞", "往事喑哑"],
["往事[喑暗][啞吐]", "往事喑哑"],
["長驅不復", "长驱不复"],
["南武群英會", "南武群英会"],
["識文", "识文"],

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -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"
}

View File

@@ -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"
},

View File

@@ -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",

View File

@@ -143,6 +143,7 @@
"doc": "识别到要组装的道具后点击",
"algorithm": "OcrDetect",
"text": ["荧光棒"],
"fullMatch": true,
"roi": [274, 68, 960, 535],
"action": "ClickSelf",
"postDelay": 500

View File

@@ -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"
]

View File

@@ -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],

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

View File

@@ -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; }

View File

@@ -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");

View File

@@ -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,
};
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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))];

View File

@@ -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";

View File

@@ -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);

View File

@@ -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":

View File

@@ -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;

View File

@@ -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:&#160;</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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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());

View File

@@ -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))

View File

@@ -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;

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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}"

View File

@@ -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"

View File

@@ -59,7 +59,8 @@
HorizontalAlignment="Center"
FontWeight="Bold"
Text="{DynamicResource MultiTasksShareTip}"
TextAlignment="Center" />
TextWrapping="Wrap"
TextAlignment="Left" />
<CheckBox
Margin="0,10"
Content="{DynamicResource StartGameLaunchClient}"

Some files were not shown because too many files have changed in this diff Show More