回调消息协议
约 2944 字大约 10 分钟
注意
回调消息随版本更新飞速迭代中,本文档可能过时。如需获取最新内容可参考 C# 集成源码
回调函数原型
typedef void(ASST_CALL* AsstApiCallback)(AsstMsgId msg, const char* details_json, void* custom_arg);其中 AsstMsgId 为 int32_t 的别名。
参数总览
AsstMsgId msg
消息类型enum class AsstMsg { /* Global Info */ InternalError = 0, // 内部错误 InitFailed = 1, // 初始化失败 ConnectionInfo = 2, // 连接相关信息 AllTasksCompleted = 3, // 全部任务完成 AsyncCallInfo = 4, // 外部异步调用信息 Destroyed = 5, // 实例已销毁 /* TaskChain Info */ TaskChainError = 10000, // 任务链执行/识别错误 TaskChainStart = 10001, // 任务链开始 TaskChainCompleted = 10002, // 任务链完成 TaskChainExtraInfo = 10003, // 任务链额外信息 TaskChainStopped = 10004, // 任务链手动停止 /* SubTask Info */ SubTaskError = 20000, // 原子任务执行/识别错误 SubTaskStart = 20001, // 原子任务开始 SubTaskCompleted = 20002, // 原子任务完成 SubTaskExtraInfo = 20003, // 原子任务额外信息 SubTaskStopped = 20004, // 原子任务手动停止 /* Web Request */ ReportRequest = 30000, // 上报请求 };const char* details
消息详情,json 字符串,详见 字段解释void* custom_arg
调用方自定义参数,会原样传出AsstCreateEx接口中的custom_arg参数,C 系语言可利用该参数传出this指针
字段解释
InternalError
details 字段为空。
InitFailed
whatRequiredstring
错误类型。
whyRequiredstring
错误原因。
detailsRequiredobject
错误详情。
ConnectionInfo
whatRequiredstring
信息类型。
whyRequiredstring
信息原因。
uuidstring
设备唯一码(连接失败时为空)。
detailsRequiredobject
连接详情。其结构如下:
adb(string, required):AsstConnect接口adb_path参数。address(string, required):AsstConnect接口address参数。config(string, required):AsstConnect接口config参数。
常见 What 字段
ConnectFailed
连接失败Connected
已连接,注意此时的uuid字段值为空(下一步才是获取)UuidGot
已获取到设备唯一码UnsupportedResolution
分辨率不被支持ResolutionError
分辨率获取错误Reconnecting
连接断开(adb / 模拟器 炸了),正在重连Reconnected
连接断开(adb / 模拟器 炸了),重连成功Disconnect
连接断开(adb / 模拟器 炸了),并重试失败ScreencapFailed
截图失败(adb / 模拟器 炸了),并重试失败TouchModeNotAvailable
不支持的触控模式MuMuExtrasInputStatus
MuMu 触控增强的实际生效状态,details结构如下:available(boolean, required): 是否已生效。deferred(boolean, required): 是否暂未判定(连接时游戏尚未开始渲染,会在开始渲染后自动重试)。
ResolutionGot
已获取到分辨率ResolutionChanged
运行中分辨率被修改,连接已断开并中断当前任务,details结构如下:width(number, required): 当前宽度。height(number, required): 当前高度。
FastestWayToScreencap
已找到最快的截图方式,details结构如下:method(string, required): 最快的截图方式。cost(number, required): 耗时,单位毫秒。alternatives(array<object>, required): 各候选方式及其耗时。
ScreencapCost
截图耗时统计(每 10 次截图回传一次),details结构如下:min(number, required): 最小耗时,单位毫秒。max(number, required): 最大耗时,单位毫秒。avg(number, required): 平均耗时,单位毫秒。fault_times(number): 失败次数(仅有失败时存在)。
EmulatorFPS
模拟器刷新率(每 1 分钟检测一次),details结构如下:fps(number, required): 模拟器/系统刷新率(FPS)。refresh_period_ns(number, required): 每帧刷新周期,单位纳秒。
AsyncCallInfo
uuidRequiredstring
设备唯一码。
whatRequiredstring
回调类型,例如 Connect | AttachWindow | Click | Screencap 等。
async_call_idRequirednumber
异步请求 id,即调用 AsstAsyncXXX 时的返回值。
detailsRequiredobject
异步调用详情。其结构如下:
ret(boolean, required): 实际调用的返回值。cost(number, required): 耗时,单位毫秒。error(string): 未处理异常的类型(仅调用因未处理异常失败时存在)。
AllTasksCompleted
taskchainRequiredstring
最后的任务链。
taskidRequirednumber
最后一条任务链对应的任务 TaskId。
uuidRequiredstring
设备唯一码。
finished_tasksRequiredarray<number>
已经运行过的任务 id 列表。
常见 taskchain 字段
StartUp
开始唤醒CloseDown
关闭游戏Fight
理智作战Mall
信用点及购物Recruit
自动公招Infrast
基建换班Award
领取日常奖励Roguelike
无限刷肉鸽Copilot
自动抄作业SSSCopilot
自动抄保全作业ParadoxCopilot
自动抄悖论模拟作业Depot
仓库识别OperBox
干员 box 识别Reclamation
生息演算Custom
自定义任务SingleStep
单步任务VideoRecognition
视频识别任务Debug
调试
TaskChain 相关消息
TaskChainError / TaskChainStart / TaskChainCompleted / TaskChainExtraInfo / TaskChainStopped 共用以下字段:
taskchainRequiredstring
当前的任务链。
taskidRequirednumber
当前任务 TaskId。
uuidRequiredstring
设备唯一码。
其中 TaskChainError 在任务链因未处理异常中断时会额外携带 details 字段:
error(string, required): 异常类型,取值为OpenCVException|OutOfMemory|UnhandledException|UnknownException。
TaskChainExtraInfo
默认仅携带上述公共字段。肉鸽(界园主题)路径规划判定无法避开过多战斗而主动重开时,消息会额外携带:
what(string, required): 固定为RoutingRestart。why(string, required): 固定为TooManyBattlesAhead。node_cost(number, required): 规划得到的下一节点代价。
SubTask 相关消息
subtaskRequiredstring
子任务名。
classRequiredstring
子任务符号名。
taskchainRequiredstring
当前任务链。
taskidRequirednumber
当前任务 TaskId。
detailsRequiredobject
详情。
uuidRequiredstring
设备唯一码。
常见 subtask 字段
ProcessTaskdetails字段内容如下:taskRequired
string任务名。
actionRequired
string动作名,例如
ClickSelf|DoNothing|Swipe。exec_timesRequired
number已执行次数。
max_timesRequired
number最大执行次数。
algorithmRequired
string识别算法名,例如
MatchTemplate|OcrDetect|FeatureMatch|JustReturn。resultRequired
object本次识别结果,各算法结构不同;无识别结果时为空对象。
此外,当任务执行次数达到上限时,会先回传一条
SubTaskExtraInfo消息,what为ExceededLimit,details包含task(任务名)、exec_times(已执行次数)、max_times(最大执行次数)。ReportToPenguinStats/ReportToYituliu
汇报战斗掉落到企鹅数据统计 / 一图流大数据(上报失败时以SubTaskError回传)。StartGameTask
打开客户端失败(配置文件与传入client_type不匹配)。Todo 其他
常见 task 字段
StartButton2
开始战斗MedicineConfirm
使用理智药StoneConfirm
碎石RecruitRefreshConfirm
公招刷新标签RecruitConfirm
公招确认招募RecruitNowConfirm
公招使用加急许可InfrastDormDoubleConfirmButton
基建的二次确认按钮,仅当待进驻干员已进驻其他设施时才会有(MAA 将自动点击确认),请提示用户StartExplore
肉鸽开始探索StageTraderInvestConfirm
肉鸽投资了源石锭StageTraderInvestSystemFull
肉鸽投资达到了游戏上限ExitThenAbandon
肉鸽放弃了本次探索MissionCompletedFlag
肉鸽战斗完成MissionFailedFlag
肉鸽战斗失败StageTraderEnter
肉鸽关卡:诡异行商StageSafeHouseEnter
肉鸽关卡:安全的角落StageEncounterEnter
肉鸽关卡:不期而遇/古堡馈赠StageCombatOpsEnter
肉鸽关卡:普通作战StageEmergencyOps
肉鸽关卡:紧急作战StageDreadfulFoe
肉鸽关卡:险路恶敌- Todo 其他
SubTaskExtraInfo
taskchainRequiredstring
当前任务链。
classRequiredstring
子任务类型。
whatRequiredstring
信息类型。
detailsRequiredobject
信息详情。
uuidRequiredstring
设备唯一码。
常见 what 及 details 字段
StageDrops
关卡材料掉落信息。details字段结构如下:drops(array, required): 本次识别到的掉落材料,数组每一项包含:itemId(string, required): 材料 ID。quantity(number, required): 掉落数量。itemName(string, required): 材料名称。
stage(object, required): 关卡信息,包含:stageCode(string, required): 关卡编号。stageId(string, required): 关卡 ID。
stars(number, required): 行动结束星级。stats(array, required): 本次执行期间总的材料掉落,数组每一项包含:itemId(string, required): 材料 ID。itemName(string, required): 材料名称。quantity(number, required): 总计数量。addQuantity(number, required): 本次新增的掉落数量。
cur_times(number, optional): 结算界面识别到的连战次数(识别到时存在)。annihilation_weekly_process(array, optional): 剿灭模式的本周获取进度,格式为[已完成数, 上限](仅剿灭关卡存在)。
RecruitTagsDetected
公招识别到了 Tags。details字段内容如下:tagsRequired
array<string>识别到的 Tag 列表。
RecruitSpecialTag
公招识别到了特殊 Tag。details字段内容如下:tagRequired
string特殊 Tag 名称,例如
高级资深干员。RecruitPreservedTag
公招识别到了已配置为保留的 Tag。details字段内容如下:tagRequired
string触发保留的 Tag 名称,例如
支援机械。RecruitResult
公招识别结果。details字段结构如下:tags(array, required): 所有识别到的 tags,目前固定为 5 个。level(number, required): 组合的最高星级。result(array, required): 具体的组合结果,数组每一项包含:tags(array, required): 参与组合的 tags。level(number, required): 这组 tags 的星级。opers(array, required): 可能招募到的干员,数组每一项包含:id(string, required): 干员 ID。name(string, required): 干员名称。level(number, required): 干员星级。
RecruitTagsRefreshed
公招刷新了 Tags。details字段内容如下:countRequired
number当前槽位已刷新次数。
refresh_limitRequired
number当前槽位刷新次数上限。
RecruitNoPermit
公招无招聘许可。details字段内容如下:continueRequired
boolean是否继续刷新。
RecruitTagsSelected
公招选择了 Tags。details字段内容如下:tagsRequired
array<string>选择的 Tag 列表。
RecruitError
公招识别错误。details字段为空;若因当前槽位刷新次数达到上限触发,则包含refresh_limit(槽位刷新次数上限)。EnterFacility
基建进入了设施。details字段内容如下:facilityRequired
string设施名。
indexRequired
number设施序号。
NotEnoughStaff
基建可用干员不足。details字段内容如下:facilityRequired
string设施名。
indexRequired
number设施序号。
ProductOfFacility
基建产物。details字段内容如下:productRequired
string产物名。
facilityRequired
string设施名。
indexRequired
number设施序号。
StageInfo
自动作战关卡信息。details字段内容如下:nameRequired
string关卡名。
sizeRequired
number地图格点数量。
StageInfoError
自动作战关卡识别错误。details字段为空。DepotInfo
仓库识别结果。details字段结构如下:done(boolean, required): 是否已经识别完了,为false表示仍在识别中(过程中的数据)。data(string, required): JSON 字符串,格式为{"物品ID": 数量, ...},例如{"2001":18000,"31043":317}。
OperBoxInfo
干员识别结果。details字段结构如下:done(boolean, required): 是否已经识别完了,为false表示仍在识别中(过程中的数据)。all_opers(array, required): 全干员列表,数组每一项包含:id(string, required): 干员 ID。name(string, required): 干员名称。name_en(string, required): 干员英文名称。name_jp(string, required): 干员日文名称。name_kr(string, required): 干员韩文名称。name_tw(string, required): 干员繁中名称。own(boolean, required): 是否拥有。rarity(number, required): 干员稀有度 [1, 6]。
own_opers(array, required): 已拥有干员的详细信息列表,数组每一项包含:id(string, required): 干员 ID。name(string, required): 干员名称。own(boolean, required): 是否拥有。elite(number, required): 精英等级 [0, 2]。level(number, required): 干员等级。potential(number, required): 干员潜能 [1, 6]。rarity(number, required): 干员稀有度 [1, 6]。
UnsupportedLevel
自动抄作业,不支持的关卡名。details字段内容如下:levelRequired
string不支持的关卡名。
ReportRequest
该字段主要用于核心模块向 UI 层传递网络请求信息,UI 负责执行具体的 HTTP 上报操作。
urlRequiredstring
请求的完整 URL,例如 https://penguin-stats.io/PenguinStats/api/v2/report。
headersRequiredobject
请求头键值对(不包含 Content-Type,UI 层自行添加)。
bodyRequiredstring
请求体内容(通常是 JSON 格式的字符串)。
subtaskRequiredstring
子任务名称,标识具体上报任务,如 ReportToPenguinStats、ReportToYituliu。
