跳至主要內容

回呼訊息協議

大约 7 分鐘

回呼訊息協議

注意

回呼訊息隨版本更新快速迭代中,本檔案可能過時。如需獲取最新内容可参考 簡中檔案C# 集成源碼open in new window

回調函數原型

typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom_arg);

參數總覽

  • int msg
    消息類型

    enum 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,       // 原子任務手動停止
    };
    
  • const char* details
    消息詳情,json 字符串,詳見 欄位解釋

  • void* custom_arg
    調用方自定義參數,會原樣傳出 AsstCreateEx 接口中的 custom_arg 參數,C 系語言可利用該參數傳出 this 指針

欄位解釋

InternalError

Todo

InitFailed

{
    "what": string,     // 錯誤類型
    "why": string,      // 錯誤原因
    "details": object   // 錯誤詳情
}

ConnectionInfo

{
    "what": string,     // 資訊類型
    "why": string,      // 資訊原因
    "uuid": string,     // 設備唯一碼(連接失敗時為空)
    "details": {
        "adb": string,     // AsstConnect 接口 adb_path 參數
        "address": string, // AsstConnect 接口 address 參數
        "config": string   // AsstConnect 接口 config 參數
    }
}

常見 What 欄位

  • ConnectFailed
    連接失敗
  • Connected
    已連接,注意此時的 uuid 欄位值為空(下一步才是獲取)
  • UuidGot
    已獲取到設備唯一碼
  • UnsupportedResolution
    解析度不被支援
  • ResolutionError
    解析度獲取錯誤
  • Reconnecting
    連接斷開(adb / 模擬器 炸了),正在重連
  • Reconnected
    連接斷開(adb / 模擬器 炸了),重連成功
  • Disconnect
    連接斷開(adb / 模擬器 炸了),並重試失敗
  • ScreencapFailed
    截圖失敗(adb / 模擬器 炸了),並重試失敗
  • TouchModeNotAvailable
    不支援的觸控模式

AsyncCallInfo

{
    "uuid": string,             // 設備唯一碼
    "what": string,             // 回調類型,"Connect" | "Click" | "Screencap" | ...
    "async_call_id": int,       // 異步請求 id,即調用 AsstAsyncXXX 時的返回值
    "details": {
        "ret": bool,            // 實際調用的返回值
        "cost": int64,          // 耗時,單位毫秒
    }
}

AllTasksCompleted

{
    "taskchain": string,            // 最後的任務鏈
    "uuid": string,                 // 設備唯一碼
    "finished_tasks": [             // 已經執行過的任務 id
        int,
        ...
    ]
}

常見 taskchain 欄位

  • StartUp
    開始喚醒
  • CloseDown
    關閉遊戲
  • Fight
    刷理智
  • Mall
    信用點及購物
  • Recruit
    自動公招
  • Infrast
    基建換班
  • Award
    領取日常獎勵
  • Roguelike
    無限刷肉鴿
  • Copilot
    自動抄作業
  • SSSCopilot
    自動抄保全作業
  • Depot
    倉庫辨識
  • OperBox
    幹員 box 辨識
  • ReclamationAlgorithm
    生息演算
  • Custom
    自定義任務
  • SingleStep
    單步任務
  • VideoRecognition
    影片辨識任務
  • Debug
    偵錯

TaskChain 相關消息

{
    "taskchain": string,            // 當前的任務鏈
    "taskid": int,                  // 當前任務 TaskId
    "uuid": string                  // 設備唯一碼
}

TaskChainExtraInfo

Todo

SubTask 相關消息

{
    "subtask": string,             // 子任務名
    "class": string,               // 子任務符號名
    "taskchain": string,           // 當前任務鏈
    "taskid": int,                 // 當前任務 TaskId
    "details": object,             // 詳情
    "uuid": string                 // 設備唯一碼
}

常見 subtask 欄位

  • ProcessTask

    // 對應的 details 欄位舉例
    {
        "task": "StartButton2",     // 任務名
        "action": 512,
        "exec_times": 1,            // 已執行次數
        "max_times": 999,           // 最大執行次數
        "algorithm": 0
    }
    
  • Todo 其他

常見 task 欄位
  • StartButton2
    開始戰鬥
  • MedicineConfirm
    使用理智藥
  • ExpiringMedicineConfirm
    使用 48 小時內過期的理智藥
  • StoneConfirm
    碎石
  • RecruitRefreshConfirm
    公招刷新標籤
  • RecruitConfirm
    公招確認招募
  • RecruitNowConfirm
    公招使用加急許可
  • ReportToPenguinStats
    匯報到企鵝數據統計
  • ReportToYituliu
    匯報到一圖流大數據
  • InfrastDormDoubleConfirmButton
    基建宿舍的二次確認按鈕,僅當幹員衝突時才會有,請提示用戶
  • StartExplore
    肉鴿開始探索
  • StageTraderInvestConfirm
    肉鴿投資了源石錠
  • StageTraderInvestSystemFull
    肉鴿投資達到了遊戲上限
  • ExitThenAbandon
    肉鴿放棄了本次探索
  • MissionCompletedFlag
    肉鴿戰鬥完成
  • MissionFailedFlag
    肉鴿戰鬥失敗
  • StageTraderEnter
    肉鴿關卡:詭異行商
  • StageSafeHouseEnter
    肉鴿關卡:安全的角落
  • StageEncounterEnter
    肉鴿關卡:不期而遇 / 古堡饋贈
  • StageCombatDpsEnter
    肉鴿關卡:普通作戰
  • StageEmergencyDps
    肉鴿關卡:緊急作戰
  • StageDreadfulFoe
    肉鴿關卡:險路惡敵
  • StartGameTask
    打開用戶端失敗(配置檔案與傳入 client_type 不匹配)
  • Todo 其他

SubTaskExtraInfo

{
    "taskchain": string,           // 當前任務鏈
    "class": string,               // 子任務類型
    "what": string,                // 資訊類型
    "details": object,             // 資訊詳情
    "uuid": string,                // 設備唯一碼
}

常見 whatdetails 欄位

  • StageDrops
    關卡材料掉落資訊

    // 對應的 details 欄位舉例
    {
        "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

    // 對應的 details 欄位舉例
    {
        "tags": [
            "費用回覆",
            "防護",
            "先鋒幹員",
            "輔助幹員",
            "近戰位"
        ]
    }
    
  • RecruitSpecialTag
    公招辨識到了特殊 Tag

    // 對應的 details 欄位舉例
    {
        "tag": "高級資深幹員"
    }
    
  • RecruitResult
    公招辨識結果

    // 對應的 details 欄位舉例
    {
        "tags": [                   // 所有辨識到的 tags,目前來說一定是 5 個
            "削弱",
            "減速",
            "術師幹員",
            "輔助幹員",
            "近戰位"
        ],
        "level": 4,                 // 總的星級
        "result": [
            {
                "tags": [
                    "削弱"
                ],
                "level": 4,         // 這組 tags 的星級
                "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
    公招刷新了 Tags

    // 對應的 details 欄位舉例
    {
        "count": 1,               // 當前槽位已刷新次數
        "refresh_limit": 3        // 當前槽位刷新次數上限
    }
    
  • RecruitNoPermit
    公招無招聘許可

    // 對應的 details 欄位舉例
    {
        "continue": true,   // 是否繼續刷新
    }
    
  • RecruitTagsSelected
    公招選擇了 Tags

    // 對應的 details 欄位舉例
    {
        "tags": [
            "減速",
            "術師幹員"
        ]
    }
    
  • RecruitSlotCompleted
    當前公招槽位任務完成

  • RecruitError
    公招辨識錯誤

  • EnterFacility
    基建進入了設施

    // 對應的 details 欄位舉例
    {
        "facility": "Mfg",  // 設施名
        "index": 0          // 設施序號
    }
    
  • NotEnoughStaff
    基建可用幹員不足

    // 對應的 details 欄位舉例
    {
        "facility": "Mfg",  // 設施名
        "index": 0          // 設施序號
    }
    
  • ProductOfFacility
    基建產物

    // 對應的 details 欄位舉例
    {
        "product": "Money", // 產物名
        "facility": "Mfg",  // 設施名
        "index": 0          // 設施序號
    }
    
  • StageInfo
    自動作戰關卡資訊

    // 對應的 details 欄位舉例
    {
        "name": string  // 關卡名
    }
    
  • StageInfoError
    自動作戰關卡辨識錯誤

  • PenguinId
    企鵝物流 ID

    // 對應的 details 欄位舉例
    {
        "id": string
    }
    
  • Depot
    倉庫辨識結果

    // 對應的 details 欄位舉例
    "done": bool,       // 是否已經辨識完了,為 false 表示仍在辨識中(過程中的數據)
    "arkplanner": {     // https://penguin-stats.io/planner
        "object": {
            "items": [
                {
                    "id": "2004",
                    "have": 4,
                    "name": "高級作戰記錄"
                },
                {
                    "id": "mod_unlock_token",
                    "have": 25,
                    "name": "模組數據塊"
                },
                {
                    "id": "2003",
                    "have": 20,
                    "name": "中級作戰記錄"
                }
            ],
            "@type": "@penguin-statistics/depot"
        },
        "data": "{\"@type\":\"@penguin-statistics/depot\",\"items\":[{\"id\":\"2004\",\"have\":4,\"name\":\"高級作戰記錄\"},{\"id\":\"mod_unlock_token\",\"have\":25,\"name\":\"模組數據塊\"},{\"id\":\"2003\",\"have\":20,\"name\":\"中級作戰記錄\"}]}"
    },
    "lolicon": {     // https://arkntools.app/#/material
        "object": {
            "2004" : 4,
            "mod_unlock_token": 25,
            "2003": 20
        },
        "data": "{\"2003\":20,\"2004\": 4,\"mod_unlock_token\": 25}"
    }
    // 目前只支援 ArkPlanner 和 Lolicon 的格式,以後可能會兼容更多網站
    
  • OperBox
    幹員辨識結果

    // 對應的 details 欄位舉例
    "done": bool,       // 是否已經辨識完了,為 false 表示仍在辨識中(過程中的數據)
    "all_oper": [
        {
            "id": "char_002_amiya",
            "name": "阿米婭",
            "own": true,
            "rarity": 5
        },
        {
            "id": "char_003_kalts",
            "name": "凱爾希",
            "own": true,
            "rarity": 6
        },
        {
            "id": "char_1020_reed2",
            "name": "焰影葦草",
            "own": false,
            "rarity": 6
        },
    ]
    "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
    自動抄作業,不支援的關卡名