Writing interface.json

Tip

Reference materials: interface.schema.json ProjectInterface Protocol.html

interface.json is designed to provide menu configuration.

controller

For M9A, the adb method is fixed and generally does not require modification.

agent

"agent": {
    "child_exec": "python",
    "child_args": [
        "{PROJECT_DIR}/agent/main.py",
        "-u"
    ]
}

resource

Resource configuration. Each resource requires a resource name name and a resource path path, both of which are mandatory.

Specifically, for the resource path ‘path’, M9A loads resources sequentially. If there are resources with the same name, the later-loaded resource will overwrite the earlier one.

For example, for bilibili Server, the resource configuration is as follows:

{
  "resources": [
        {
            "name": "bilibili Server",
            "path": [
                "{PROJECT_DIR}/resource/base",
                "{PROJECT_DIR}/resource/bilibili"
            ]
        }
    ]
}

Here, {PROJECT_DIR} is the root directory of the M9A project. The base folder contains official server resources, and the bilibili folder contains resources for Server B that overwrite the official server resources.

task

Task list. The task list contains multiple tasks, and each task has a task name name, task entry entry, task parameters pipeline_override, and task options option, where name and entry are mandatory.

In pipeline_override, it should be a pipeline node with override parameters, for example:

{
    "name": "Anecdote Dispatch (Please read character stories yourself)",
    "entry": "Anecdote",
    "pipeline_override": {
        "EnterTheActivityMain": {
            "template_doc": "Modify to the current event entry template",
            "template": "Combat/Activity/LondonDawningEnterTheShow.png"
        }
    }
}

The original node is:

{
    "EnterTheActivityMain": {
        "doc": "Enter the main interface of the current event",
        "recognition": "TemplateMatch",
        "template_code": "Modify the template in interface.json",
        "roi": [
            885,
            123,
            340,
            183
        ],
        "action": "Click",
        "post_wait_freezes": {
            "time": 500,
            "target": [
                0,
                179,
                190,
                541
            ]
        }
    }
}

After overriding, this node will behave as follows when executing the “Anecdote Dispatch (Please read character stories yourself)” task:

{
    "EnterTheActivityMain": {
        "recognition": "TemplateMatch",
        "template": "Combat/Activity/LondonDawningEnterTheShow.png",
        "roi": [
            885,
            123,
            340,
            183
        ],
        "action": "Click",
        "post_wait_freezes": {
            "time": 500,
            "target": [
                0,
                179,
                190,
                541
            ]
        }
    }
}

After executing the “Anecdote Dispatch (Please read character stories yourself)” task, the node will revert to its original state.

option determines how to override the pipeline node based on your specific settings below.

option

Option definitions. Each option has selectable cases and a default option default_case, where cases is mandatory.

Typically, use cases. For example:

{
    "task": [
        {
            "name": "Regular Combat",
            "entry": "Combat",
            "option": [
                "Combat Stages",
                "Repetition Count",
                "Use All Stamina",
                "Consume All Temporary Sugar"
            ]
        }
    ],
    "option": {
        "Use All Stamina": {
            "cases": [
                {
                    "name": "Yes",
                    "pipeline_override": {
                        "AllIn": {
                            "enabled": true
                        }
                    }
                },
                {
                    "name": "No",
                    "pipeline_override": {
                        "AllIn": {
                            "enabled": false
                        }
                    }
                }
            ]
        }
    }
}

default_case is the default option, selected from cases.

version

Version. No need to fill in; it will be automatically generated during CI installation.

message

Message. Currently, it is the first line of output when MaaPiCli runs.