[UP1.5] 收到gg后发送gg的AI模块
;预定义文本“gg”为一个常数"text"(可以类比数学中的代数)
(defconst text "gg")
;这是之后往前跳转-3条后回到的规则
(defrule
(true)
=>
;时刻储存最后一个且是来自于焦点玩家的聊天单词(空格分隔,如“AA BB”为两个单词,“我是new123”是一个单词)到缓存区。注意只能储存最后一个,如果发出"gg"后瞬间又有人发了一条"nice bro",那就会获取到"bro",而非"gg"。
(up-store-player-chat focus-player)
)
(defrule
;检测缓存区里的内容是否包含text里的关键词"gg"。不包含gg时对应-1,包含时为首次出现处前面的字符数量,所以无法检测含有多少条“gg”。
(up-compare-text c: text >= 0)
;检测自己对焦点玩家的外交状态,只有敌人发出的gg才会回应
(stance-toward focus-player enemy)
=>
;测试用,可以发送出缓存区里的内容。%s和c: 7031232是用来调用缓存区的指令符。
;(up-chat-data-to-all "text: %s" c: 7031232)
;向所有人发送“gg”
(chat-to-all "gg")
;跳过下面那一条规则,结束整个检测模块
(up-jump-rule 1)
;只回应一次
(disable-self)
)
(defrule
(up-compare-sn sn-focus-player-number c:< 8)
=>
;在焦点玩家为8之前,让焦点玩家不断+1,结合下面的跳转语句,实现瞬时遍历8个玩家。
(up-modify-sn sn-focus-player-number c:+ 1)
;往前跳转3条规则(包括本条规则)
(up-jump-rule -3)
)
(defrule
(true)
=>
;整个模块结束后,还原焦点玩家为1
(up-modify-sn sn-focus-player-number c:= 1)
)
这样,只要任一敌对玩家发出“gg”“gg!”“wow!gg”这类包含gg的内容,AI就会立刻回应一个gg。(注意,如果是发送了“gg! bro”因为空格分开导致只提取了“bro”,这时无法回应gg)
同理,(defconst text "gg")里的gg可以换成任何你想要的关键词。
如果有心做,你甚至可以把你的AI做成微软小冰/小娜这样的聊天AI!
{:10_440:}
更新了一下,现在功能更齐全了。 更新了一下,现在阅读更方便了。 更新了一下最新的规则说明和注释。
前段时间测试发现:
up-store-player-chat获取的是以空格作为分隔符的最后一个单词
up-compare-text返回的是文本首次出现时匹配的索引值
具体请看帖子。 啊这,我有一个大胆的想法 帝国女友指日可待
页:
[1]