update README.md

This commit is contained in:
zhandouxiaojiji committed 2020-11-06 19:21:04 +08:00
1 parent 5653ff7ff6
commit 84a354274d
11 files changed
+8 -16

No files matched your search

+5 -1
View File
@@ -31,7 +31,7 @@ interface BehaviorNodeTypeModel {
doc?: string; //文档说明(markdown格式)
}
```
节点定义也是json格式,参照[sample/node-config.json](sample/node-config.json),编辑器不提供节点定义的编辑,强烈建议节点定义文件由代码生成。
节点定义也是json格式,参照[sample/node-config.json](sample/node-config.json),编辑器不提供节点定义的编辑,强烈建议节点定义文件由代码生成 (参照示例项目[behavior3lua](https://github.com/zhandouxiaojiji/behavior3lua))。
## 编译与构建
```shell
@@ -46,6 +46,10 @@ npm run build # 编译exe可执行文件
+ antd
+ electron
## 示例项目
+ lua版本 [behavior3lua](https://github.com/zhandouxiaojiji/behavior3lua)
+ js/ts版本 计划中。
## TODO
+ 复制粘贴功能(跨工作区)
+ 历史记录(撤销/恢复)
+1 -1
View File
@@ -1 +1 @@
[{"type":"Action","doc":"+ 是正常的怒气产消,会用于正常逻辑的怒气消耗\n+ 默认目标为自己\n+ 仅使用一次,是指本次释放技能所有被勾选“仅使用一次”的addAp节点最多加一次\n","desc":"加怒气点","args":[{"type":"int","desc":"点数","name":"add"},{"type":"boolean?","desc":"是否只加一次","name":"once"}],"input":["{作用目标}?"],"name":"AddAp"},{"type":"Action","doc":"+ 战斗过程增加的技能等级,可增可减\n+ 没有携带该技能时返回失败\n+ 技能等级最高可达上限,最低到1\n","desc":"增加技能等级","args":[{"type":"int","desc":"skillid","name":"skillid"},{"type":"lua","desc":"增加等级","name":"add"}],"name":"AddSkillLevel"},{"type":"Action","doc":"+ 所输入变量为空,返回失败\n+ 变量稳定加1\n","desc":"自增","args":[{"type":"lua?","desc":"值","name":"add"}],"input":["变量"],"name":"AddValue"},{"type":"Decorator","doc":"+ 只能有一个子节点,多个仅执行第一个\n+ 不管子节点是否成功都返回失败\n","desc":"始终返回失败","name":"AlwaysFail"},{"type":"Decorator","doc":"+ 只能有一个子节点,多个仅执行第一个\n+ 不管子节点是否成功都返回成功\n","desc":"始终返回成功","name":"AlwaysSuccess"},{"type":"Action","doc":"+ 输入数组为空,输出变量为空\n","desc":"数组随机取一值","output":["{随机值}"],"input":["[数组]"],"name":"ArrayRandomOne"},{"type":"Action","doc":"+ 子弹专用运动曲线,人物带测\n+ 飞行过程返回正在运行,抵达返回成功,前端假象,后端瞬移,最好不要在飞行过程做碰撞\n+ 所输入路点少于两个返回失败\n","desc":"贝塞尔曲线运动","args":[{"type":"int","desc":"时间","name":"time"},{"type":"boolean?","desc":"子弹","name":"bullet"}],"input":["[路点]","{作用单位}"],"name":"BezierCurve"},{"type":"Action","doc":"+ 使用event_level表中的事件ID(事件逻辑见事件表)\n","desc":"BOSS对话","args":[{"type":"int","desc":"事件ID","name":"event_id"}],"input":["{对象}?"],"name":"BossTalk"},{"type":"Action","doc":"+ 没有目标、怪物不可控、霸体返回失败\n+ 打断对方所有正在运行技能,会打断行为树中的LockAction(会打断被动、不会打断AI)\n+ 禁止移动(lockAction)被打断会进入待机状态\n","desc":"打断并设置新状态","args":[{"type":"lua?","desc":"时间(帧)","name":"time"},{"type":"boolean?","desc":"禁止重力","name":"gravity"},{"type":"boolean?","desc":"禁止移动","name":"move"},{"type":"boolean?","desc":"禁止跳跃","name":"jump"},{"type":"boolean?","desc":"禁止转向","name":"face"},{"type":"boolean?","desc":"禁止普攻","name":"skill1"},{"type":"boolean?","desc":"禁止自动技能","name":"skill2"},{"type":"boolean?","desc":"禁止主动技能","name":"skill3"},{"type":"boolean?","desc":"禁止二段跳","name":"skill4"},{"type":"boolean?","desc":"无法回怒","name":"ap"}],"input":["{目标}"],"name":"Break"},{"type":"Action","doc":"+ 子弹专用,非子弹返回失败\n","desc":"子弹销毁","name":"BulletDie"},{"type":"Action","doc":"+ 不能在跟随过程做碰撞检测\n+ 后端为时间到时瞬移至跟随目标(本质上无实际无移动过程)【无延迟情况下强制抵达】\n+ 跟随过程返回正在运行,到达后返回成功,无目标返回失败\n","desc":"子弹跟随","args":[{"type":"int","desc":"时间","name":"time"},{"type":"int?","desc":"x初速度","name":"vx"},{"type":"int?","desc":"y初速度","name":"vy"}],"input":["{跟随目标}"],"name":"BulletFollow"},{"type":"Condition","doc":"+ 目标是主角、可击退的怪物(配表)且不处于霸体状态(目前不包括机器人与召唤物)则返回成功\n+ 其他情况或没有目标时返回失败\n","desc":"是否可以击退","input":["{目标单位}"],"name":"CanHitBack"},{"type":"Condition","doc":"# 返回失败的情况:\n+ 没有携带该技能(配表)\n+ 处于CD状态\n+ 所释放技能的类型处于lockAction状态\n+ 被动技能\n+ 怒气技能需求怒气不足\n","desc":"技能是否可释放","args":[{"type":"int","desc":"技能id","name":"skillid"}],"name":"CanLaunch"},{"type":"Condition","doc":"# 返回失败的情况:\n+ 客户端专用\n+ 处于CD状态\n+ 所释放技能的类型处于lockAction状态\n+ 怒气不足\n","desc":"是否托管释放怒气技能","name":"CanLaunchCarry"},{"type":"Condition","doc":"+ 判定该单位所携带的所有普攻技能是否可释放\n+ 失败条件跟CanLaunch相同\n","desc":"是否可释放普通攻击","name":"CanNormalAttack"},{"type":"Action","doc":"+ 改变指定单位的AI行为树的变量,无目标时返回失败\n+ 变量是即时修改,若选择立即执行则强制该行为树再次执行(需要处理重复执行问题)\n","desc":"修改AI行为树变量","args":[{"type":"boolean?","desc":"立即执行","name":"now"}],"input":["{目标}"],"name":"ChangeAiVars"},{"type":"Action","doc":"Line truncated
[{"name":"AlwaysFail","type":"Decorator","doc":"+ 只能有一个子节点,多个仅执行第一个\n+ 不管子节点是否成功都返回失败\n","desc":"始终返回失败"},{"name":"AlwaysSuccess","type":"Decorator","doc":"+ 只能有一个子节点,多个仅执行第一个\n+ 不管子节点是否成功都返回成功\n","desc":"始终返回成功"},{"name":"Attack","type":"Action","input":["{目标}"],"desc":"攻击"},{"name":"Cmp","type":"Condition","doc":"+ 若值为空,返回失败\n+ 非整数类型可能会报错\n","input":["值(int)"],"args":[{"name":"value","desc":"值","type":"lua?"},{"name":"gt","desc":">","type":"int?"},{"name":"ge","desc":">=","type":"int?"},{"name":"eq","desc":"==","type":"int?"},{"name":"le","desc":"<=","type":"int?"},{"name":"lt","desc":"<","type":"int?"}],"desc":"比较值大小"},{"name":"FindEnemy","output":["目标单位"],"type":"Condition","doc":"+ 没找到返回失败\n","args":[{"name":"x","desc":"x","type":"int?"},{"name":"y","desc":"y","type":"int?"},{"name":"w","desc":"宽","type":"int?"},{"name":"h","desc":"高","type":"int?"},{"name":"count","desc":"查找上限","type":"string?"}],"desc":"查找敌人"},{"name":"GetHp","output":["生命值"],"type":"Action","desc":"获取生命值"},{"name":"Idle","type":"Action","desc":"待机"},{"name":"Log","type":"Action","args":[{"name":"str","desc":"日志","type":"string"}],"desc":"打印日志"},{"name":"MoveToPos","type":"Action","args":[{"name":"x","desc":"x","type":"int"},{"name":"y","desc":"y","type":"int"}],"desc":"移动到坐标"},{"name":"MoveToTarget","type":"Action","input":["{目标}"],"desc":"移动到目标"},{"name":"Not","type":"Decorator","doc":"+ 将子节点的返回值取反\n","desc":"取反"},{"name":"Parallel","type":"Composite","doc":"执行所有子节点并返回成功\n","desc":"并行执行"},{"name":"Selector","type":"Composite","doc":"+ 一直往下执行,有子节点返回成功则返回成功,若全部节点返回失败则返回失败\n+ 子节点是或的关系\n","desc":"选择执行"},{"name":"Sequence","type":"Composite","doc":"+ 一直往下执行,有子节点返回成功则返回成功,若全部节点返回失败则返回失败\n+ 子节点是或的关系\n","desc":"顺序执行"},{"name":"Wait","type":"Action","args":[{"name":"time","desc":"时间/tick","type":"int"}],"desc":"等待"}]
-1
View File
@@ -1 +0,0 @@
{"name":"boss101","root":{"id":1,"name":"Selector","desc":"Boss105","children":[{"id":2,"name":"Sequence","desc":"攻击范围内的敌人","children":[{"id":3,"name":"FindEnemyCanAttack","args":{},"output":["enemy1"]},{"id":4,"name":"LaunchSkillWithWeight","desc":"按权重放技能","args":{},"input":["enemy"]}]},{"id":5,"name":"Sequence","desc":"移动","children":[{"id":6,"name":"MonsterFindEnemy","desc":"寻找敌人","args":{},"output":["enemy"]},{"id":7,"name":"MoveToAtkPos","args":{"offset":160},"input":["enemy"]}]},{"id":8,"name":"Sequence","desc":"巡逻 ","args":{},"children":[{"id":9,"name":"NotMoving"},{"id":10,"name":"MonsterPatrol","desc":"巡逻"}]}]},"desc":"Boss105"}
+1
View File
@@ -0,0 +1 @@
{"name":"hero","root":{"id":1,"name":"Selector","desc":"英雄测试AI","args":{},"children":[{"id":2,"name":"Sequence","desc":"攻击","args":{},"children":[{"id":3,"name":"FindEnemy","args":{"x":0,"y":0,"w":100,"h":50},"output":["enemy"]},{"id":4,"name":"Attack","args":{},"input":["enemy"]},{"id":5,"name":"Wait","args":{"time":10}}]},{"id":6,"name":"Sequence","desc":"移动","args":{},"children":[{"id":7,"name":"FindEnemy","args":{"w":1000,"h":500,"x":0,"y":0},"output":["enemy"]},{"id":8,"name":"MoveToTarget","args":{},"input":["enemy"]}]},{"id":9,"name":"Sequence","desc":"逃跑","args":{},"children":[{"id":10,"name":"GetHp","args":{},"output":["hp"]},{"id":11,"name":"Cmp","args":{"lt":50},"input":["hp"]},{"id":12,"name":"MoveToPos","args":{"x":0,"y":0}}]},{"id":13,"name":"Idle"}]},"desc":"英雄测试AI"}
+1
View File
@@ -0,0 +1 @@
{"name":"monster","root":{"id":1,"name":"Sequence","desc":"怪物测试AI","args":{},"children":[{"id":2,"name":"Sequence","desc":"攻击","args":{},"children":[{"id":3,"name":"GetHp","args":{},"output":["hp"]},{"id":4,"name":"Cmp","args":{"gt":50},"input":["hp"]},{"id":5,"name":"Log","desc":"攻击","args":{"str":"Attack!"}}]},{"id":6,"name":"Log","desc":"逃跑","args":{"str":"Run!"}}]},"desc":"怪物测试AI"}
-1
View File
@@ -1 +0,0 @@
{"root":{"name":"Selector","desc":"主动小怪","args":{},"debug":false,"id":1,"children":[{"name":"Sequence","desc":"攻击范围内的敌人","id":2,"children":[{"name":"FindEnemyCanAttack","desc":"","args":{},"output":["enemy"],"debug":false,"id":3},{"name":"NormalAttack","desc":"","args":{},"input":["enemy"],"debug":false,"id":4},{"name":"Wait","desc":"等待","args":{"time":"math.random(36)"},"debug":false,"id":5},{"name":"MoveRandom","desc":"","args":{"range":70},"id":6}]},{"name":"Sequence","desc":"移动","id":7,"children":[{"name":"MonsterFindEnemy","desc":"寻找敌人","args":{},"output":["enemy"],"debug":false,"id":8},{"name":"FloorMove","desc":"移动到目标","args":{"rand":70},"input":["enemy"],"debug":false,"id":9}]},{"name":"Sequence","desc":"巡逻","id":10,"children":[{"name":"NotMoving","desc":"","args":{},"debug":false,"id":11},{"name":"MonsterPatrol","desc":"巡逻","args":{},"debug":false,"id":12},{"name":"Wait","desc":"","args":{"time":"math.random(36)"},"debug":false,"id":13}]}]},"name":"monster101","server":true,"desc":"主动小怪"}
-1
View File
@@ -1 +0,0 @@
{"root":{"name":"Selector","desc":"102","id":1,"children":[{"name":"ListenUnderAttack","desc":"监听被攻击","input":["enemy"],"id":2},{"name":"Sequence","desc":"攻击敌人","id":3,"children":[{"name":"NormalAttack","input":["enemy"],"id":4},{"name":"Wait","desc":"等待","args":{"time":30},"id":5}]},{"name":"Wait","desc":"等待","args":{"time":30},"id":6}]},"name":"monster102","server":true,"desc":"102"}
-1
View File
@@ -1 +0,0 @@
{"root":{"name":"Selector","desc":"103","id":1,"children":[]},"name":"monster103","server":true,"desc":"103"}
-1
View File
@@ -1 +0,0 @@
{"root":{"name":"Parallel","desc":"被动小怪","args":{},"id":1,"children":[{"name":"ListenUnderAttack","desc":"监听被攻击","input":["enemy"],"id":2},{"name":"Wait","desc":"","args":{"time":12},"id":3},{"name":"Selector","id":4,"children":[{"name":"Sequence","desc":"攻击","id":5,"children":[{"name":"NotNull","input":["enemy"],"id":6,"children":[]},{"name":"Selector","id":7,"children":[{"name":"Sequence","id":8,"children":[{"name":"CanNormalAttack","desc":"","args":{},"debug":false,"id":9},{"name":"NormalAttack","args":{"rand":100},"input":["enemy"],"id":10},{"name":"Wait","desc":"","args":{"time":"math.random(36)"},"id":11}]},{"name":"Sequence","desc":"移动","id":12,"children":[{"name":"InAlertRange","desc":"在警戒范围内","args":{},"input":["enemy"],"debug":false,"id":13},{"name":"FloorMove","desc":"","args":{},"input":["enemy"],"id":14}]}]}]},{"name":"Sequence","desc":"巡逻","id":15,"children":[{"name":"MonsterPatrol","desc":"巡逻","id":16},{"name":"SetNull","input":["enemy"],"id":17,"children":[]}]}]},{"name":"Wait","desc":"","args":{"time":"math.random(36)"},"id":18}]},"name":"monster104","server":true,"desc":"被动小怪"}
-1
View File
@@ -1 +0,0 @@
{"root":{"name":"Sequence","desc":"塔防小怪","args":{},"id":1,"children":[{"name":"Once","desc":"","args":{},"id":2,"children":[{"name":"ListenUnderAttack","desc":"监听被击","args":{},"input":[null],"id":3,"children":[{"name":"SetNull","desc":"","args":{},"input":["path"],"id":4}]}]},{"name":"Selector","desc":"","args":{},"id":5,"children":[{"name":"Sequence","desc":"","args":{},"id":6,"children":[{"name":"NotNull","desc":"","args":{},"input":["path"],"id":7,"children":[]},{"name":"MovePath","desc":"","args":{},"input":["path"],"id":8}]},{"name":"MonsterFindDefendPath","desc":"","args":{},"output":["path"],"id":9}]}]},"name":"monster106","server":true,"desc":"塔防小怪"}
-8
View File
@@ -1,8 +0,0 @@
{
"name": "test",
"root": {
"id": 1,
"name": "Sequence",
"desc": "新建行为树"
}
}