[UP1.5] 侦测聊天内容的AI - 输入文字可触发效果(一般用于战役)
本帖最后由 newtonerdai 于 2020-6-13 11:24 编辑以前的数字AI
以前我们是通过“数字AI”来实现玩家输入数字→发动某些效果。
其AI语句是这样的:
(defrule
(taunt-detected 1 <数字1~255>) ;收到玩家1的某个数字时,条件成立
=>
(acknowledge-taunt 1 <数字1~255>) ;注销玩家1的数字嘲弄,使这个规则效果能重复使用
(cc-add-resource food 1) ;给自己增加食物1点
)
触发部分则是:
触发0||初始开启不显示循环
条件0||堆积资源:AI玩家食物>=1点
效果0||进贡资源:AI玩家食物1点进贡1点给GAIA
效果1||<自定义效果>
少的时候还好操控,一旦数字指令多起来,达到十余个,可能前期会难以记忆。比如《雪之守护》里的人偶释放指令。
现在拜UserPatch 1.5的新AI语句所赐,我们可以实现检测玩家的任意字符了!
【侦测聊天内容的AI】
核心语句:
(up-store-player-chat 任一玩家编号,或百搭玩家编号)
(up-compare-text c: 文本常数 比较运算符 (in)(op)值)
功能:
up-store-player-chat
把单个玩家的聊天信息储存到内部缓冲区中。注意,只有最后一条信息的最后一个单词会被储存(空格为单词之间的分隔符,如“go to”有两个单词,“威廉·华莱士”是单个单词),而且这条信息必须出现在当前AI玩家的聊天记录里(可通过PageUP按键翻页找到)。缓冲区可以通过 %s 和c: 7031232(而非%d)在up-chat-data-*指令中调用(注意7031232不能储存在defconst里)。这个缓冲区由所有AI玩家共享,所以在规则结束前(in a rule pass)请先储存数据。
up-compare-text
对保存在缓冲区的内容与预定义的字符串执行比较操作。在使用这条命令前,你必须先使用up-store-系列命令储存文本到缓冲区,且你所提供的必须是一个储存有字符串的文本常数。如果给定的字符串无法在储存的文本里找到,那么值应为-1;否则,值应为匹配的索引(匹配索引值=该字符串在缓冲区中首次出现时,其前面的字符数)。请注意,这并不能检测缓冲区里出现了多少次字符串。(in)(op)值的范围应为-1~32767。
想达成的效果:
玩家发出“dun”时,AI检测到并向触发传递信息,触发生成一个代号为“盾”的防御人偶,效果可重复。
完整AI语法:
(defconst text "dun") ;预定义文本“dun”为一个文本常数"text"
(defrule
(true)
=>
(up-store-player-chat 1) ;时刻储存最后一个且是来自于玩家1的聊天单词(空格分隔,如“AA BB”为两个单词,“我是new123”是一个单词)到缓存区。注意只能储存最后一个,如果发出"dun"后瞬间又有人发了一条"24",那就会获取到"24",抑或是“dun 思密达”则会获取空格后的“思密达”,而非"dun"。
)
(defrule
(up-compare-text c: text == 0) ;检测缓存区里的内容是否包含text里的关键词"dun",且第一次出现处前面的字符数为0。不包含dun时对应-1,包含时为首次出现处前面的字符数量,所以无法检测含有多少条“dun”。
(up-resource-amount 198 c:< 1) ;检测空闲的198号资源是否<1。这样可以达到自锁的目的,等待触发接收并清空资源,再继续下一次执行。
=>
(up-chat-data-to-all "text: %s" c: 7031232) ;测试用,可以发送出缓存区里的内容。%s和c: 7031232是用来调用缓存区的指令符。
(up-cc-add-resource c: 198 c: 1) ;增加空闲的198号资源1点,从而与触发联动。(up-cc-add-resource可以不再局限于4种基础资源,任何资源都可以增加)。
(do-nothing) ;(可换成你想要的语句)
)
触发部分:
触发0||初始开启不显示循环
条件0||堆积资源:AI玩家198号资源>=1点
效果0||进贡资源:AI玩家198号资源进贡1点给GAIA
效果1||送出聊天:[已释放人偶“盾”] 给玩家1
效果2||<自定义效果>
效果:
新桶又通宵写AI了{:11_482:} 更新了一下最新的规则说明和注释。
前段时间测试发现:
up-store-player-chat获取的是以空格作为分隔符的最后一个单词
up-compare-text返回的是文本首次出现时匹配的索引值
具体请看帖子。 你输入“蹲”之后AI那边传给触发,触发又回贡走了一点198号资源,触发执行一次之后198号资源又回到了0,如果玩家蹲了之后没说别的话,那么现在AI又会执行,无限循环下去。 cxt 发表于 2020-6-10 19:07
你输入“蹲”之后AI那边传给触发,触发又回贡走了一点198号资源,触发执行一次之后198号资源又回到了0,如 ...
是的,你这么一说我也发现了。暂时没有很好的解决办法。
这可能比较适合在一个关卡中只能释放一次的效果,并且在关卡结束后还得让玩家手动输入任意内容来覆盖聊天。 可以检测作弊吗?作弊码有空格 HudsonLee 发表于 2020-7-11 18:26
可以检测作弊吗?作弊码有空格
貌似不行。这个语句的本质是,获取AI玩家的聊天记录里能看到的最后一个任意玩家发送的单词。
别人发送作弊码时,AI玩家是收不到聊天记录的(同理,别人不向他发送讯息时,也是收不到的)
页:
[1]