コールバック図式
1898字程度約6分
注意
This document is outdated due to the rapid update of the interface. Since the developers are not good at foreign languages, it is recommended that you refer to the Chinese or English documentation for the latest content
注意
コールバックメッセージがバージョンとともに更新される高速反復では、本書は古くなる可能性があります。最新のコンテンツを入手するには、C#統合ソースコード を参照してください。
Prototype
typedef void(ASST_CALL* AsstApiCallback)(AsstMsgId msg, const char* details_json, void* custom_arg);なお、AsstMsgId は int32_t のエイリアスです。
概要
AsstMsgId msg
The message typeenum class AsstMsg { /* Global Info */ InternalError = 0, // 内部エラー InitFailed = 1, // 初期化に失敗しました ConnectionInfo = 2, // 接続情報 AllTasksCompleted = 3, // すべてのタスクが完了したかどうか AsyncCallInfo = 4, // 外部非同期呼び出し情報 /* 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. 詳細: Field Descriptionvoid* custom_arg
呼び出し元のカスタム引数には、AsstCreateExインターフェースのcustom_arg引数が渡される。C ライクな言語では、thisポインタを一緒に渡すことができる。
Field Description
InternalError
Todo
InitFailed
{
"what": string, // Error タイプ
"why": string, // Error 理由
"details": object // Error 詳細
}ConnectionInfo
{
"what": string, // Info タイプ
"why": string, // Info 理由
"uuid": string, // UUID (接続に失敗した場合は空白)
"details": {
"adb": string, // AsstConnect インターフェースの adb_path 引数
"address": string, // AsstConnect インターフェースの address 引数
"config": string // AsstConnect インターフェースの config 引数
}
}多用される What フィルドの値
ConnectFailed
接続失敗Connected
接続成功。現段階ではuuidフィールドが空であることに注意してください (次のステップで取得されます)UuidGot
UUID の取得UnsupportedResolution
この解像度はサポートされていませんResolutionError
解像度を取得できないReconnecting
接続切断 (adb/emulator クラッシュ), 再接続開始Reconnected
接続切断 (adb/emulator クラッシュ), 再接続成功Disconnect
接続切断 (adb/emulator クラッシュ), 再接続失敗ScreencapFailed
画面取得失敗 (adb/emulator クラッシュ), 再接続失敗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
{
"uuid": string, // デバイス固有コード,UUID
"what": string, // コールバック タイプ,"Connect" | "AttachWindow" | "Click" | "Screencap" | ...
"async_call_id": int, // 非同期要求 id、つまり AsstAsyncXXX を呼び出したときの戻り値
"details": {
"ret": bool, // 実際に呼び出された戻り値
"cost": int64, // 経過時間、単位ミリ秒
"error": string, // 未処理例外の種類、未処理例外により呼び出しが失敗した場合にのみ存在
}
}AllTasksCompleted
{
"taskchain": string, // 最後の一連のタスク
"taskid": int, // 最後の一連のタスクに対応するタスク ID
"uuid": string, // UUID
"finished_tasks": [ // 最終動作タスクの ID
int,
...
]
}多用される taskchain フィールドの値
StartUp
ゲーム開始CloseDown
ゲームを閉じるFight
作戦Mall
FPとFP交換所に買い物Recruit
自動公開求人Infrast
基地施設Award
デイリー報酬を受け取るRoguelike
統合戦略Copilot
自動作戦SSSCopilot
自動保全駐在作戦ParadoxCopilot
自動逆理演算作戦Depot
倉庫の識別OperBox
オペレーターボックス識別Reclamation
生息演算Custom
カストム タスクSingleStep
サブタスクVideoRecognition
ビデオ認識タスクDebug
デバッグ
TaskChain 関連情報
{
"taskchain": string, // 現在の一連タスク
"taskid": int, // 現在のタスク ID
"uuid": string // UUID
}なお、TaskChainError はタスクチェーンが未処理の例外によって中断された場合、追加で details フィールドを伴います:
error(string, required): 例外の種類。OpenCVException|OutOfMemory|UnhandledException|UnknownExceptionのいずれか。
TaskChainExtraInfo
Todo
SubTask 関連情報
{
"subtask": string, // サブタスク名
"class": string, // サブタスククラス
"taskchain": string, // 現在の一連のタスク
"taskid": int, // 現在のタスク ID
"details": object, // 詳細
"uuid": string // UUID
}多用される subtask フィールドの値
ProcessTask// 対応する詳細フィールドの例 { "task": "StartButton2", // タスク名 "action": "ClickSelf", // アクション名、例:`ClickSelf` | `DoNothing` | `Swipe` "exec_times": 1, // 実行回数 "max_times": 999, // 最大実行回数 "algorithm": "MatchTemplate", // 識別アルゴリズム名、例:`MatchTemplate` | `OcrDetect` | `FeatureMatch` | `JustReturn` "result": {} // 今回の識別結果、アルゴリズムごとに構造が異なる。識別結果がない場合は空オブジェクト }ReportToPenguinStats/ReportToYituliu
戦闘ドロップをペンギン急便統計 / Yituliu ビッグデータへ報告します(報告失敗時はSubTaskErrorで通知されます)。StartGameTask
クライアントの起動に失敗(設定ファイルと渡されたclient_typeが不一致)。Todo Other
多用される task フィールドの値
StartButton2
開始MedicineConfirm
理性回復剤使用確認StoneConfirm
純正源石使用確認RecruitRefreshConfirm
公開求人リストの更新確認RecruitConfirm
公開求人の確認RecruitNowConfirm
緊急招集票の使用確認InfrastDormDoubleConfirmButton
基地の二重確認ボタン、配置予定のオペレーターが既に他の施設に配属中の場合にのみ表示されます(MAAが自動でクリックします)StartExplore
統合戦略: 開始StageTraderInvestConfirm
統合戦略: 源石錐とアイテム交換StageTraderInvestSystemFull
統合戦略: 投資満額ExitThenAbandon
統合戦略: 終了確認MissionCompletedFlag
統合戦略: ミッション完了MissionFailedFlag
統合戦略: ミッション失敗StageTraderEnter
統合戦略: 怪しい旅商人StageSafeHouseEnter
統合戦略: 安全な片隅StageEncounterEnter
統合戦略: 思わぬ遭遇StageCombatOpsEnter
統合戦略: 作戦StageEmergencyOps
統合戦略: 緊急作戦StageDreadfulFoe
統合戦略: 悪路凶敵- Todo Other
SubTaskExtraInfo
{
"taskchain": string, // 一連のタスク
"class": string, // サブタスクのクラス
"what": string, // Information タイプ
"details": object, // Information 詳細
"uuid": string, // UUID
}多用される what と details フィールドの値
StageDrops
ステージドロップインフォメーション// 対応する詳細フィールドの例 { "drops": [ // 今回のドロップされた素材 { "itemId": "3301", "quantity": 2, "itemName": "アーツ学1" }, { "itemId": "3302", "quantity": 1, "itemName": "アーツ学2" }, { "itemId": "3303", "quantity": 2, "itemName": "アーツ学3" } ], "stage": { // レベル情報 "stageCode": "CA-5", "stageId": "wk_fly_5" }, "stars": 3, // ステージクリア評価 "stats": [ // この実行中にドロップされた素材の総量 { "itemId": "3301", "itemName": "アーツ学1", "quantity": 4, "addQuantity": 2 // 今回の新規ドロップ数 }, { "itemId": "3302", "itemName": "アーツ学2", "quantity": 3, "addQuantity": 1 }, { "itemId": "3303", "itemName": "アーツ学3", "quantity": 4, "addQuantity": 2 } ] }RecruitTagsDetected
採用タグの検出// 対応するフィールドの詳細 { "tags": [ "COST回復", "防御", "先鋒タイプ", "補助タイプ", "近距離" ] }RecruitSpecialTag
特別な採用タグの検出// 対応する詳細フィールドの例 { "tag": "上級エリート" }RecruitPreservedTag
保留対象の公開求人タグの検出// 対応する詳細フィールドの例 { "tag": "ロボット" }RecruitResult
公開求人結果// 対応する詳細フィールドの例 { "tags": [ // 全てのタグ、今のところは5つに違いない "弱化", "減速", "術師タイプ", "補助タイプ", "近距離" ], "level": 4, // 総合的なレアリティ "result": [ { "tags": [ "弱化" ], "level": 4, // レアリティに対応するタグ "opers": [ { "name": "プラマニクス", "level": 5 // レアリティに対応するオペレーター }, { "name": "メテオリーテ", "level": 5 }, { "name": "ワイフー", "level": 5 }, { "name": "ヘイズ", "level": 4 }, { "name": "メテオ", "level": 4 } ] }, { "tags": [ "減速", "術師タイプ" ], "level": 4, "opers": [ { "name": "ナイトメア", "level": 5 }, { "name": "グレイ", "level": 4 } ] }, { "tags": [ "弱化", "術師タイプ" ], "level": 4, "opers": [ { "name": "ヘイズ", "level": 4 } ] } ] }RecruitTagsRefreshed
公開求人タグの更新// 対応する詳細フィールドの例 { "count": 1, // スロットが更新された回数 "refresh_limit": 3 // 更新最大回数 }RecruitNoPermit
求人票が切れた// 対応する詳細フィールドの例 { "continue": true, // 更新を続けるかどうか }RecruitTagsSelected
公開求人タグの選択// 対応する詳細フィールドの例 { "tags": [ "減速", "術師タイプ" ] }RecruitError
公開求人認識時のエラー。detailsは空。現在のスロットの更新回数が上限に達したことが原因の場合は、refresh_limit(スロットの更新回数上限)を含みます。EnterFacility
施設へ入る// 対応する詳細フィールドの例 { "facility": "Mfg", // 施設名 "index": 0 // 施設 ID }NotEnoughStaff
オペレーター不足// 対応する詳細フィールドの例 { "facility": "Mfg", // 施設名 "index": 0 // 施設 ID }ProductOfFacility
施設の生産// 対応する詳細フィールドの例 { "product": "Money", // 生産物 "facility": "Mfg", // 施設名 "index": 0 // 施設 ID }StageInfo
自動戦闘ステージの情報// 対応する詳細フィールドの例 { "name": string, // ステージ名 "size": number // マップのグリッド数 }StageInfoError
自動戦闘ステージの情報エラーDepotInfo
倉庫のアイテムの認識結果// 対応する詳細フィールドの例 "done": bool, // 認識が完了したかどうか,false はまだ進行中かどうか(処理中のデータ) "data": "{\"2001\":18000,\"31043\":317}" // JSON文字列、形式: {"アイテムID": 数量, ...}OperBoxInfo
オペレーターボックス識別結果// 対応する詳細フィールドの例 "done": bool, // 認識が完了したかどうか,false はまだ進行中かどうか(処理中のデータ) "all_opers": [ { "id": "char_002_amiya", "name": "阿米娅", "name_en": "Amiya", "name_jp": "アーミヤ", "name_kr": "아미야", "name_tw": "阿米婭", "own": true }, { "id": "char_003_kalts", "name": "凯尔希", "own": true }, { "id": "char_1020_reed2", "name": "焰影苇草", "own": false }, ] "own_opers": [ { "id": "char_002_amiya", // オペレーターID "name": "阿米娅", // 氏名、中国語で出力 "own": true, // 持っているかどうか "elite": 2, // 昇進段階 0, 1, 2 "level": 50, // レベル "potential": 6, // 潜在 [1, 6] "rarity": 5 // レア度 [1, 6] }, { "id": "char_003_kalts", "name": "凯尔希", "own": true, "elite": 2, "level": 50, "potential": 1, "rarity": 6 } ]UnsupportedLevel
自動作戦で、サポートされていないレベル名。detailsの内容:// 対応する詳細フィールドの例 { "level": string // サポートされていないレベル名 }
ReportRequest
このフィールドは、コアモジュールがネットワークリクエスト情報をUI層に渡すために主に使用され、UIは実際のHTTP報告処理を担当します。
{
"url": "string", // リクエストの完全なURL、例:https://penguin-stats.io/PenguinStats/api/v2/report
"headers": { // リクエストヘッダーのキーと値のペア(Content-Typeは含まず、UIが追加します)
"authorization": "PenguinID 1234567890",
"User-Agent": "MaaAssistantArknights/1.2.3 cpr/4.5.6"
},
"body": "string", // リクエストボディの内容(通常はJSON形式の文字列)
"subtask": "string" // サブタスク名、具体的な報告タスクを識別します。例:"ReportToPenguinStats"、"ReportToYituliu"
}