[ { "name": "AlwaysFailure", "type": "Decorator", "children": 1, "status": [ "failure", "|running" ], "desc": "始终返回失败", "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点返回 `running` 时,返回 `running`\n+ 其它情况,不管子节点是否成功都返回 `failure`\n" }, { "name": "AlwaysRunning", "type": "Decorator", "children": 1, "status": [ "running" ], "desc": "始终返回运行中状态", "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 始终返回 `running`\n" }, { "name": "AlwaysSuccess", "type": "Decorator", "children": 1, "status": [ "success", "|running" ], "desc": "始终返回成功", "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点返回 `running` 时,返回 `running`\n+ 其它情况,不管子节点是否成功都返回 `success`\n" }, { "name": "Assert", "type": "Decorator", "children": 1, "status": [ "success" ], "desc": "断言", "args": [ { "name": "message", "type": "string", "desc": "消息" } ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点返回 `failure` 时,抛出异常\n+ 其余情况返回子节点的执行状态\n" }, { "name": "Calculate", "type": "Action", "children": 0, "status": [ "success" ], "desc": "简单的数值公式计算", "args": [ { "name": "value", "type": "expr", "desc": "计算公式" } ], "output": [ "计算结果" ], "doc": "+ 做简单的数值公式计算,返回结果到输出\n" }, { "name": "Case", "type": "Composite", "children": 2, "status": [ "&success", "|failure", "|running" ], "desc": "分支选择", "doc": "+ 必须有两个子节点\n+ 第一个子节点为判断条件\n+ 第二个子节点为判断为 `success` 时执行的节点\n+ 此节点不会真正意义的执行,而是交由 `Switch` 节点来执行\n" }, { "name": "Check", "type": "Condition", "children": 0, "status": [ "success", "failure" ], "desc": "检查True或False", "args": [ { "name": "value", "type": "expr", "desc": "值" } ], "doc": "+ 做简单数值公式判定,返回 `success` 或 `failure`\n" }, { "name": "Concat", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "将两个输入合并为一个数组,并返回新数组", "input": [ "数组1", "数组2" ], "output": [ "新数组" ], "doc": "+ 如果输入不是数组,则返回 `failure`\n" }, { "name": "Delay", "type": "Decorator", "children": 1, "status": [ "success" ], "desc": "延时执行子节点", "input": [ "延时时间?" ], "args": [ { "name": "delay", "type": "float?", "desc": "延时时间", "oneof": "延时时间" }, { "name": "cacheVars", "type": "string[]?", "desc": "暂存环境变量" } ], "doc": "+ 当延时触发时,执行第一个子节点,多个仅执行第一个\n+ 如果子节点返回 `running`,会中断执行并清理执行栈" }, { "name": "Filter", "type": "Decorator", "children": 1, "status": [ "success", "failure", "|running" ], "desc": "返回满足条件的元素", "input": [ "输入数组" ], "output": [ "变量", "新数组" ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 遍历输入数组,将当前元素写入`变量`,满足条件的元素放入新数组\n+ 只有当新数组不为空时,才返回 `success`\n" }, { "name": "ForEach", "type": "Decorator", "children": 1, "status": [ "success", "|running", "|failure" ], "desc": "遍历数组", "input": [ "数组" ], "output": [ "变量", "索引?" ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 遍历输入数组,将当前元素写入`变量`\n+ 当子节点返回 `failure` 时,退出遍历并返回 `failure` 状态\n+ 执行完所有子节点后,返回 `success`" }, { "name": "GetField", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "获取对象的字段值", "args": [ { "name": "field", "type": "string?", "desc": "字段(field)", "oneof": "字段(field)" } ], "input": [ "对象", "字段(field)?" ], "output": [ "字段值(value)" ], "doc": "+ 合法元素不包括 `undefined` 和 `null`\n+ 只有获取到合法元素时候才会返回 `success`,否则返回 `failure`\n" }, { "name": "IfElse", "type": "Composite", "children": 3, "status": [ "|success", "|failure", "|running" ], "desc": "条件执行", "doc": "+ 必须有三个子节点\n+ 第一个子节点为条件节点\n+ 第二个子节点为条件为 `success` 时执行的节点\n+ 第三个子节点为条件为 `failure` 时执行的节点,\n" }, { "name": "Includes", "type": "Condition", "children": 0, "status": [ "success", "failure" ], "desc": "判断元素是否在数组中", "input": [ "数组", "元素" ], "doc": "+ 若输入的元素不合法,返回 `failure`\n+ 只有数组包含元素时返回 `success`,否则返回 `failure`\n" }, { "name": "Index", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "索引输入的数组", "args": [ { "name": "index", "type": "int?", "desc": "索引", "oneof": "索引" } ], "input": [ "数组", "索引?" ], "output": [ "值" ], "doc": "+ 合法元素不包括 `undefined` 和 `null`\n+ 索引数组的时候,第一个元素的索引为 0\n+ 只有索引到有合法元素时候才会返回 `success`,否则返回 `failure`\n" }, { "name": "Invert", "type": "Decorator", "children": 1, "status": [ "!success", "!failure", "|running" ], "desc": "反转子节点运行结果", "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点返回 `success` 时返回 `failure`\n+ 当子节点返回 `failure` 时返回 `success`\n+ 当子节点返回 `error` 时返回 `error`\n" }, { "name": "IsNull", "type": "Condition", "children": 0, "status": [ "success", "failure" ], "desc": "判断变量是否不存在", "input": [ "判断的变量" ] }, { "name": "JustFailure", "type": "Action", "children": 0, "status": [ "failure" ], "desc": "什么都不干,只返回失败" }, { "name": "JustSuccess", "type": "Action", "children": 0, "status": [ "success" ], "desc": "什么都不干,只返回成功" }, { "name": "Let", "type": "Action", "children": 0, "status": [ "success" ], "desc": "定义新的变量名", "input": [ "已存在变量名?" ], "args": [ { "name": "value", "type": "json?", "desc": "值(value)", "oneof": "已存在变量名" } ], "output": [ "新变量名" ], "doc": "+ 如果有输入变量,则给已有变量重新定义一个名字\n+ 如果`值(value)`为 `null`,则清除变量\n" }, { "name": "Listen", "type": "Decorator", "children": 1, "status": [ "success" ], "desc": "侦听事件", "input": [ "目标对象?" ], "output": [ "事件目标?", "事件参数..." ], "args": [ { "name": "event", "type": "string", "desc": "事件", "options": [ { "source": [ { "name": "行为树被中断", "value": "treeInterrupted" }, { "name": "行为树开始执行前", "value": "treeBeforeTicked" }, { "name": "行为树执行完成后", "value": "treeAfterTicked" }, { "name": "行为树执行成功后", "value": "treeTickedSuccess" }, { "name": "行为树执行失败后", "value": "treeTickedFailure" }, { "name": "行为树被清理", "value": "treeCleaned" } ] } ] } ], "doc": "+ 当事件触发时,执行第一个子节点,多个仅执行第一个\n+ 如果子节点返回 `running`,会中断执行并清理执行栈" }, { "name": "Log", "type": "Action", "children": 0, "status": [ "success" ], "desc": "打印日志", "input": [ "日志?" ], "args": [ { "name": "message", "type": "string", "desc": "日志" }, { "name": "level", "type": "string", "desc": "日志级别", "default": "log", "options": [ { "source": [ { "name": "LOG", "value": "log" }, { "name": "INFO", "value": "info" }, { "name": "DEBUG", "value": "debug" }, { "name": "WARN", "value": "warn" }, { "name": "ERROR", "value": "error" } ] } ] } ] }, { "name": "Math", "type": "Action", "desc": "执行数学运算", "input": [ "参数..." ], "output": [ "结果" ], "status": [ "success", "failure" ], "args": [ { "name": "op", "type": "string", "desc": "数学运算类型", "options": [ { "source": [ { "name": "绝对值", "value": "abs" }, { "name": "向上取整", "value": "ceil" }, { "name": "向下取整", "value": "floor" }, { "name": "四舍五入", "value": "round" }, { "name": "符号", "value": "sign" }, { "name": "正弦", "value": "sin" }, { "name": "余弦", "value": "cos" }, { "name": "正切", "value": "tan" }, { "name": "反正切2", "value": "atan2" }, { "name": "幂运算", "value": "pow" }, { "name": "平方根", "value": "sqrt" }, { "name": "自然对数", "value": "log" }, { "name": "最小值", "value": "min" }, { "name": "最大值", "value": "max" }, { "name": "随机数", "value": "random" }, { "name": "随机整数", "value": "randInt" }, { "name": "随机浮点数", "value": "randFloat" }, { "name": "求和", "value": "sum" }, { "name": "平均值", "value": "average" }, { "name": "乘积", "value": "product" } ] } ] }, { "name": "value1", "type": "float?", "desc": "参数1(优先使用)" }, { "name": "value2", "type": "float?", "desc": "参数2(优先使用)" } ] }, { "name": "NotNull", "type": "Condition", "children": 0, "status": [ "success", "failure" ], "desc": "判断变量是否存在", "input": [ "判断的变量" ] }, { "name": "Now", "type": "Action", "children": 0, "status": [ "success" ], "desc": "获取当前时间", "output": [ "当前时间" ] }, { "name": "Once", "type": "Decorator", "children": 1, "status": [ "success", "failure", "|running" ], "desc": "只执行一次", "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 第一次执行完全部子节点时返回 `success`,之后永远返回 `failure`" }, { "name": "Parallel", "type": "Composite", "status": [ "success", "|running" ], "children": -1, "desc": "并行执行", "doc": "+ 并行执行所有子节点\n+ 当有子节点返回 `running` 时,返回 `running` 状态\n+ 执行完所有子节点后,返回 `success`" }, { "name": "Push", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "向数组中添加元素", "input": [ "数组", "元素" ], "doc": "+ 当变量`数组`不是数组类型时返回 `failure`\n+ 其余返回 `success`\n" }, { "name": "Race", "type": "Composite", "status": [ "|success", "&failure", "|running" ], "children": -1, "desc": "竞争执行", "doc": "+ 并行执行所有子节点\n+ 当有子节点返回 `success` 时,立即返回 `success` 状态,并中断其他子节点\n+ 如果所有子节点返回 `failure`或 `error` 则返回 `failure`" }, { "name": "RandomIndex", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "随机返回输入的其中一个!", "input": [ "输入目标" ], "output": [ "随机目标", "索引?" ], "doc": "+ 合法元素不包括 `undefined` 和 `null`\n+ 在输入数组中,随机返回其中一个\n+ 当输入数组为空时,或者没有合法元素,返回 `failure`\n" }, { "name": "Repeat", "type": "Decorator", "children": 1, "status": [ "success", "|running", "|failure" ], "desc": "循环执行", "input": [ "循环次数?" ], "args": [ { "name": "count", "type": "int?", "desc": "循环次数", "oneof": "循环次数" } ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点返回 `failure` 时,退出遍历并返回 `failure` 状态\n+ 执行完所有子节点后,返回 `success`\n" }, { "name": "RetryUntilFailure", "type": "Decorator", "children": 1, "status": [ "!success", "failure", "running" ], "desc": "一直尝试直到子节点返回失败", "input": [ "最大尝试次数?" ], "args": [ { "name": "count", "type": "int?", "desc": "最大尝试次数" } ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 只有当子节点返回 `failure` 时,才返回 `success`,其它情况返回 `running` 状态\n+ 如果设定了尝试次数,超过指定次数则返回 `failure`" }, { "name": "RetryUntilSuccess", "type": "Decorator", "children": 1, "status": [ "|success", "failure", "running" ], "desc": "一直尝试直到子节点返回成功", "input": [ "最大尝试次数?" ], "args": [ { "name": "count", "type": "int?", "desc": "最大尝试次数" } ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 只有当子节点返回 `success` 时,才返回 `success`,其它情况返回 `running` 状态\n+ 如果设定了尝试次数,超过指定次数则返回 `failure`" }, { "name": "Selector", "type": "Composite", "children": -1, "desc": "选择执行", "status": [ "|success", "&failure", "|running" ], "doc": "+ 一直往下执行,直到有子节点返回 `success` 则返回 `success`\n+ 若全部节点返回 `failure`或 `error` 则返回 `failure`" }, { "name": "Sequence", "type": "Composite", "children": -1, "status": [ "&success", "|failure", "|running" ], "desc": "顺序执行", "doc": "+ 一直往下执行,只有当所有子节点都返回 `success`, 才返回 `success`\n+ 若子节点返回 `failure`,则直接返回 `failure` 状态\n+ 其余情况返回 `running` 状态\n" }, { "name": "SetField", "type": "Action", "children": 0, "status": [ "success", "failure" ], "desc": "设置对象字段值", "input": [ "输入对象", "字段(field)?", "值(value)?" ], "args": [ { "name": "field", "type": "string?", "desc": "字段(field)", "oneof": "字段(field)" }, { "name": "value", "type": "json?", "desc": "值(value)", "oneof": "值(value)" } ], "doc": "+ 对输入对象设置 `field` 和 `value`\n+ 输入参数1必须为对象,否则返回 `failure`\n+ 如果 `field` 不为 `string`, 也返回 `failure`\n+ 如果 `value` 为 `undefined` 或 `null`, 则删除 `field` 的值\n" }, { "name": "Switch", "type": "Composite", "children": -1, "status": [ "|success", "|failure", "|running" ], "desc": "分支执行", "doc": "+ 按顺序测试 `Case` 节点的判断条件(第一个子节点)\n+ 若测试返回 `success` 则执行 `Case` 第二个子节点,并返回子节点的执行状态\n+ 若没有判断为 `success` 的 `Case` 节点,则返回 `failure`\n" }, { "name": "Timeout", "type": "Decorator", "children": 1, "status": [ "|success", "|running", "failure" ], "desc": "超时", "input": [ "超时时间?" ], "args": [ { "name": "time", "type": "float?", "desc": "超时时间", "oneof": "超时时间" } ], "doc": "+ 只能有一个子节点,多个仅执行第一个\n+ 当子节点执行超时或返回 `failure` 时,返回 `failure`\n+ 其余情况返回子节点的执行状态\n" }, { "name": "Wait", "type": "Action", "children": 0, "status": [ "success", "running" ], "desc": "等待", "input": [ "等待时间?" ], "args": [ { "name": "time", "type": "float?", "desc": "等待时间", "oneof": "等待时间" }, { "name": "random", "type": "float?", "desc": "随机范围" } ] }, { "name": "WaitForEvent", "type": "Action", "children": 0, "status": [ "success", "running" ], "desc": "等待事件触发", "args": [ { "name": "event", "type": "string", "desc": "事件名称" } ] }, { "name": "Watchdog", "type": "Composite", "children": 3, "status": [ "|success", "|failure", "|running" ], "desc": "测试执行", "doc": "+ 必须有3个子节点\n+ 第一个子节点为条件节点,返回 `success` 或 `failure` 状态\n+ 第二个子节点为条件为 `success` 时执行的节点\n+ 第三个子节点为条件为 `failure` 时执行的节点,不管子节点返回什么状态,都直接返回 `failure`\n+ 当第二个子节点返回 `running` 时,由本节点维护其运行状态\n+ 每一次 tick 都会先执行测试节点,只有当测试节点返回 `success`,才执行第二个子节点\n" } ]