[UP1.5] AI信号现已可以循环使用!(up-set-signal)
本帖最后由 newtonerdai 于 2020-6-14 16:15 编辑[*]提问:AI信号是什么?
[*]回答:电脑AI可以向触发系统发送信号,触发的条件发现信号激活后,可以发动某些效果。这就是最基本的由AI向触发传递信息的方式。
C版里我们是这么做的:
AI部分:
(defrule
(taunt-detected 1 1) ;这里是收到P1的数字1。可替换为你的判定条件
=>
(set-signal 1) ;激活AI信号#1
(acknowledge-taunt 1 1) ;承认P1的数字1。使其可重复使用
)
触发部分:
触发0||初始开启,循环
条件0||收到AI信号,1号
效果0||(发动某些你想要的效果)
但是这一套信号联动方式有一个很严重的问题:无法关闭信号,也就是说一个信号只能用一次,且会一直维持激活状态!
无论是AI,还是触发,都没有办法把某个信号注销掉,以重置回到初始状态。
最终结果是,一旦set-signal,这个信号就将一直处于激活状态,只能作为一种永久性的状态被触发识别。
所以一直以来更广泛使用的是[AI:cc-add-resource]和[效果:进贡属性]这一套可以循环使用的“资源法”。
不过“资源法”也被我升级了,哈哈哈哈 —— 用于AI-触发联动的 [资源法] 现已全面升级! - 隐藏资源·储存·归零·维持·运算·判断
现在,这个严重的问题被终结了!
在Userpatch 1.5的时代,我们的战役AI拥有了up-set-signal这柄神器!其功能如下图▼
(注:其中的“c:”意思是把后面的一条内容视为常数,新人可以不用纠结,要纠结的话可以看Userpatch 人工智能简单教程)
所以现在我们可以这么设计:
AI判定认为应该发动某个效果了=>发送AI信号=>触发接收到信号后发动效果=>同时触发向AI发送事件=>AI接收到事件后注销掉这个AI信号=>(回到初始状态)
做法如下:
AI部分:
(defrule
(taunt-detected 1 1) ;这里是收到P1的数字1。可替换为你的判定条件
=>
(set-signal 1) ;激活AI信号#1
(acknowledge-taunt 1 1) ;承认P1的数字1。使其可重复使用
)
(defrule
(event-detected trigger 1) ;1号事件激活时,执行↓
=>
(up-set-signal c: 1 c: 0) ;注销1号信号
(acknowledge-event trigger 1) ;承认1号事件,使其可重复使用
)
触发部分:
触发0||初始开启,循环
条件0||收到AI信号,1号
效果0||(发动某些你想要的效果)
效果1||发送AI事件(或信号),1号
测试!现在这个AI信号可以重复使用了:
本帖最后由 HudsonLee 于 2020-5-28 21:25 编辑
很好,战役用来做AI互交,注入灵魂!
https://www.bilibili.com/video/BV1yz411v7Uh/
页:
[1]