uye d17249649e feat: 不重启切换语言 (#17183)
* feat: 不重启切换语言

* feat: 部分文本与列表更新

* feat: 右键图标菜单、关卡提示、牛杂、关卡列表、指定材料

* chore: Stage 刷新

* feat: LocalizedList

* chore: SettingsViewModel

* chore: ConnectSettingsUserControlModel

* chore: GameSettingsUserControlModel

* chore: VersionUpdateSettingsUserControlModel

* chore: InfrastSettingsUserControlModel

* chore: RecruitSettingsUserControlModel

* chore: RoguelikeSettingsUserControlModel

* chore: UserDataUpdateSettingsUserControlModel

* chore: LastSyncTime

* chore: 设置指引重叠

* chore: PerformanceUserControlModel

* chore: GPU 绑定

* chore: FightSettingsUserControlModel

* chore: GuiSettingsUserControlModel

* style: FightSettingsUserControlModel

* chore: ReclamationSettingsUserControlModel

* feat: 干员识别/仓库识别 支持动态切换语言

* feat: 干员名称显示语言

* perf: 优化 IsLocalizationDictionary 判断

* style: 空行

* chore: UnInitializePropertyDependencies / GC.SuppressFinalize(this);

* chore: PropertyDependsOnUtility 增加锁

* chore: 移除未使用 using

* chore: 更新时序

* chore: 在 UI 线程 Reload

* fix: OperNameLanguageModeList 去重

* chore: LocalizedList -> LocalizedObservableList

* fix: 修复 TaskItemViewModel.Name 绕过 _name 字段导致 SetAndNotify 变更检测失效

getter 改为复用 BaseTask.NameOrTaskType(与原构造参数语义一致),
移除已成为死代码的 _name 字段;setter 写配置后显式 NotifyOfPropertyChange,
确保外部重命名后 UI 能收到通知。

* fix: UnInitializePropertyDependencies 清理孤儿外部实例避免处理器累积

当某 externalInstance 的 propMap 完全清空后,移除该键并反订阅其
externalHandler,避免 TaskItemViewModel 反复创建/销毁时 _externalHandlers
外壳持续累积(虽不产生错误通知,但持有空字典浪费内存)。

* rft: 提取 RefreshInverseModeText 消除 InverseMode 自赋值 hack

原 LanguageChanged 回调用 InverseMode = InverseMode 触发 setter 内的
本地化文本刷新,依赖 SetAndNotify 不 early-return 的副作用,语义脆弱。
提取 RefreshInverseModeText() 方法供 setter 和回调共用。

* rft: UseStoneString 改用 SuppressMessage 替代 #pragma

将 #pragma warning disable CA1822 改为 [SuppressMessage],
并补充 Justification 说明必须保持实例成员以支持 PropertyDependsOn 反射触发通知。

* docs: 补充 LanguageChanged 订阅单例约定注释

在 LanguageChanged 事件声明处补充订阅约定(必须是 IoC 单例,
非单例需 Dispose 时清理跨实例依赖);在 ToolboxViewModel(Stylet IoC 单例)
订阅处标注无需取消订阅。

* rft: 删除 TaskItemViewModel 构造函数的 name 参数

Name getter 已改为从配置动态读取 NameOrTaskType,构造时传入的 name
不再有任何作用,删除该参数及三处调用点的实参。

* chore: 简化绑定

* fix: 修复语言切换时 PropertyDependsOn 回调读到旧字典的时序竞态

原先 Language setter 里先 SetAndNotify 再 Reload,导致同步通知链中
PropertyDependsOn(Language) 回调执行时 ResourceDictionary 尚未替换,
LocalizationHelper.GetString 拿到的是旧语言文本。

调整为先 Reload(内部先替换字典再触发 LanguageChanged),再更新
_language 字段并触发 PropertyChanged,确保两条通知链路
(LanguageChanged 订阅者 + PropertyDependsOn 回调)读到的都是新语言。

* refactor: LocalizedObservableList 内部支持增删,消除 Zip 脱节隐患

将 _entries 从 readonly array 改为可变 List,新增 Add/Remove/RemoveAt/
Insert/Clear 方法同步维护 _entries 与 Items,确保两者始终一一对应。

此前 RefreshLocalization 用 Zip 遍历,对运行时动态添加的项(如
OperNameLanguageForce)不会刷新 Display,需调用方手动补偿。现在动态项
也纳入 _entries,RefreshLocalization 改为索引遍历,覆盖全部条目。

同步修正类头 XML 注释:去掉不实的 INotifyPropertyChanged 声明与
'转发 item 属性变更'描述(item 的 PropertyChanged 由 WPF 直接监听)。

调用方 GuiSettingsUserControlModel 改用 Add/Remove API,移除
RefreshLocalization 里的手动补偿逻辑。

* fix: 任务排序/增删后 Index 变化时自动刷新 Name

TaskItemViewModel.Name 的 getter 依赖 Index 从配置读取,但此前只声明了
对 Language 的跨实例依赖,拖拽排序/增删任务导致 Index 变化时 Name 不会被
通知刷新,自定义名任务可能短暂显示错位。

将 PropertyDependsOnAttribute 的 AllowMultiple 改为 true,为 Name 额外声明
[PropertyDependsOn(nameof(Index))],使 Index 变化时自动触发 Name 刷新。
Utility 的 GetCustomAttributes 循环已原生支持多 attribute,无需改动。

* chore: 图标 Unloaded 时取消 LanguageChanged 订阅

* fix: Pormpt1/Pormpt2 小提示刷新
2026-06-25 13:14:55 +08:00
2026-06-21 16:47:41 +08:00
2026-03-16 21:01:39 +08:00
2026-03-07 19:08:15 +08:00
2026-06-25 13:14:55 +08:00
2025-12-11 12:22:22 +08:00

LOGO

MAA


C++ platform
license commit
stars GitHub all releases
Ask DeepWiki
MaaAssistantArknights%2FMaaAssistantArknights | Trendshift

简体中文 | 繁體中文 | English | 日本語 | 한국어

MAA 的意思是 MAA Assistant Arknights

一款明日方舟游戏小助手

基于图像识别技术,一键完成全部日常任务!

绝赞更新中 ✿✿ヽ(°▽°)ノ✿

下载与安装

请阅读 文档 后前往 官网Releases 下载,并参考 新手上路 进行安装。

亮点功能

  • 理智作战,掉落识别及上传 企鹅物流一图流
  • 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 自定义排班
  • 自动公招,可选使用加急许可,一次全部刷完!公招数据自动上传 企鹅物流一图流
  • 支持手动识别公招界面,方便对高星公招做出选择 (你的这个高资回费出的是推王呢还是推王呢)
  • 支持识别干员列表,统计已有和未有干员及潜能,并在公招识别显示
  • 支持识别养成材料,并导出至 企鹅物流刷图规划明日方舟工具箱ARK-NIGHTS 干员培养表
  • 访问好友、收取信用及购物、领取日常奖励等,一键全日常自动长草
  • 肉鸽全自动刷源石锭和等级,自动烧水和凹直升,智能识别干员及练度
  • 选择作业 JSON 文件,自动抄作业, 视频演示
  • 支持 C, Python, Java, Rust, Golang, Java HTTP, Rust HTTP 等多种接口,方便集成调用,自定义你的 MAA
话不多说,看图! zh1 zh2 zh3 zh4

使用说明

功能介绍

请参阅 用户手册

外服支持

目前国际服(美服)、日服、韩服、繁中服的绝大部分功能均已支持。但由于外服用户较少及项目人手不足,很多功能并没有进行全面的测试,所以请自行体验。
若您遇到了 Bug或对某个功能有强需求欢迎在 Issues讨论区 催更;或加入我们一起建设 MAA请参阅 外服适配教程

CLI 支持

MAA 支持命令行界面CLI操作支持 LinuxmacOS 和 Windows可用于自动化脚本或在无图形界面的服务器上使用。请参阅 CLI 使用指南

加入我们

主要关联项目

多语言 (i18n)

MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)为准。

参与开发

请参阅 开发指南

API

外服适配

请参阅 外服适配教程,对于国服已支持的功能,绝大部分的外服适配工作仅需要截图 + 简单的 JSON 修改即可。

Issue bot

请参阅 Issue Bot 使用方法

致谢

开源库

数据源

贡献/参与者

感谢所有参与到开发/测试中的朋友们,是大家的帮助让 MAA 越来越好! (*´▽`)

Contributors

声明

  • 本软件使用 GNU Affero General Public License v3.0 only 开源,并附带额外 用户协议
  • 本软件 logo 并非使用 AGPL 3.0 协议开源,耗毛、vie 两位画师及软件全体开发者保留所有权利。不得以 AGPL 3.0 协议已授权为由在未经授权的情况下使用本软件 logo不得在未经授权的情况下将本软件 logo 用于任何商业用途。
  • 本软件开源、免费,仅供学习交流使用。若您遇到商家使用本软件进行代练并收费,可能是设备与时间等费用,产生的问题及后果与本软件无关。

DirectML 支持说明

本软件支持 GPU 加速功能,其在 Windows 平台上依赖于 Microsoft 提供的独立组件 DirectML。DirectML 并非本项目的开源部分,也不受 AGPL 3.0 的约束。为方便用户,我们随安装包附带了一个未经修改的 DirectML.dll 文件。如果您无需 GPU 加速功能,可安全删除该 DLL 文件,软件的核心功能仍可正常运行。

广告

用户交流 QQ 群:MAA 使用 & 粥游交流 QQ 群
Discord 服务器: 邀请链接
用户交流 TG 群:Telegram 群
自动战斗 JSON 作业分享:prts.plus
Bilibili 直播间:MrEO 直播间 直播敲代码 & MAA-Official 直播间 游戏/杂谈

技术群(舟无关、禁水):内卷地狱!(QQ 群)
开发者群:QQ 群

如果觉得软件对你有帮助,帮忙点个 Star 吧!~(网页最上方右上角的小星星),这就是对我们最大的支持了!

Description
MAA镜像
Readme AGPL-3.0 Cite this repository 1.2 GiB
Languages
C++ 46.2%
C# 39.2%
Python 5.5%
C 5%
CMake 0.8%
Other 3.2%