简提数字ai
本帖最后由 枫叶の飘零 于 2013-12-25 21:41 编辑虽然好多人都发过相关帖子了,但是吾辈还是详写一个,关于数字ai的教程帖子
概念
什么是数字ai?就是关于输入数字产生效果的ai,今天吾辈只介绍资源法
最简单的资源法是这样:
(defrule
(ai通用的开头)
(taunt-detected 1 x)
(检测到玩家输入某个数字,x=1~255)
=>
(acknowledge-taunt 1 2)
(重設语音指令可以让ai注销这个数字可能一般人很难理解,用一个例子来说明,如果将玩家输入数字10,比成向桌子上放上一张黑桃10。
所有拥有(taunt-detected 1 10)语句的AI,都将能够识别这张黑桃10(也就是识别到玩家已输入数字10),并做出反应。
)
(cc-add-resource stone 1)
(这里是我们产生资源的地方,资源类型有4种,分别是:wood(木材)、food(食物)、gold(黄金)、stone(石头),选择一种填写即可,数值随意,)
)
个人说明一下,为什么要给玩家石头呢?
原因很简单方便触发检测,因为输入2就给玩家1石头所以你可以用检测这个x玩家有多少石头,
举个例子我设置一个触发通过检测数字来送出对话
条件0:游戏者x堆积属性:1石头(用于检测输入没有)
效果0:送出游戏者x的1石头给大地之母(防止触发循环)
效果1:送出聊天:XXXX(效果不解释)
效果3:激活这个触发(输入技能就是需要激活的)
但是这样有个致命BUG,就是限制AI数量,一个玩家只有4个资源栏,最多可以7个电脑玩家,也就是最多用4X7=28个ai来做这样的ai
有人会问为什么不能多层检测?比如堆积1木头,堆积2木头....
这样绝对不行!因为堆积2木头的时候会激活1和2,2个触发,后果不说了。所以我们必须发动自己的脑子构思出第二种资源法
(defrule
(taunt-detected 1 2)
=>
(acknowledge-taunt 1 2)
(cc-add-resource stone 1)
(cc-add-resource wood 100)
)
解释一下这个ai意思:输入2,给玩家x 1石头 100木头
有人问了这样有什么用?不就是多了个条件吗?
但是你们要了解原理
这样设置触发可以这样(举2个触发作为例子)
条件0:堆积属性:木头1 条件0:堆积属性木头2
条件1:堆积属性:石头100 条件1:堆积属性石头99
效果0:送出资源木头1 效果0:送出资源木头2
效果1:送出资源石头100 效果1:送出资源石头99
效果2:产生某个效果 效果2:产生某个效果
效果3:激活这个触发 效果3:激活这个触发
看懂了么?我给你解释一下,这是一个很简单的公理,就是说2个资源一个资源多一个资源少,
比如公式就是:
石头 木头
1 100
2 99
3 98
4 97
5 96
这样可以明白了吧?这样的堆积属性不会有重复现象,因为石头需求最多的条件,木头需要的最少,木头需要的最多的条件,石头需要的最少……
众玩家:这样就可以没有BUG了!
枫叶:对不起还是有BUG。。。
(全部晕倒)
这样的BUG是从本人的作品新剑侠情缘中发现的,如果玩家按着F3并且同时输入多个数字(闲的没事玩家典型)
那样就会触发重复,于是吾辈去请教RU大师,后来经过RU大师的教导吾辈才算明白
RU大师给吾辈普及的一些知识:
AI语句是从上到下顺序执行的,而在不同的电脑玩家之间,一般是顺序在前的电脑玩家的AI先执行(并非绝对)。其次,编辑器触发的执行(在无定时器延时的情况下),一般要等到所有电脑玩家的AI都执行完毕后,才执行。其执行间隔也比AI要大,触发的最短执行间隔是一个游戏秒(下简称秒),而AI则是微秒级别的。说白了就是有2个ai(一个1,一个2)你先F3然后输入2再输入1,系统就会检测为你先输入了1然后输入了2。
又因为ai的速度远远快于触发所以玩家可以F3然后无限输入
如果玩家在一秒内,输入1次10,那么对应的AI电脑玩家获得1次资源
如果玩家在一秒内,输入2次10,那么对应的AI电脑玩家获得2次资源
如果玩家在一秒内,输入5次10,那么对应的AI电脑玩家获得5次资源
(defrule
(taunt-detected 1 1)
(wood-amount < 1)
【枫叶解释:这个是检测资源小于某个数目】
注:运算符号可以是>(大于)、<(小于)、=(等号)、>=(大等于)、<=(小等于),最常用的是<(小于),其他符号可根据情况酌情使用。
(gold-amount < 1)
【枫叶解释:这个是检测资源小于某个数目】
=>
(acknowledge-taunt 1 1)
(cc-add-resource wood 5)
(cc-add-resource gold 1)
)
(defrule
(taunt-detected 1 1)
=>
(acknowledge-taunt 1 1)
)
解释一下:这个条件为:输入1,玩家拥有的石头小于1 金子小于1效果:给玩家5木头, 1金子
这样就可以放止玩家多重输入:
原理:很显然, AI第一次识别数字10,获得资源后,如果依然识别到数字10,那么将不会继续获得资源。
这样我们就可以做触发了条件就是堆积属性,效果自定,看不懂的就联系本人
这样大致可以做出但是也有小问题
对于上述语句,细心的读者可能会想到一个新的情况,如果第二次输入的数字10,由于资源门槛,导致语句未被运行。那么这个数字10将会一直存在,可能被其他语句所误读。为了防止这种情况,一般是在后面加一个无条件的注销语句,如下:
(defrule
(taunt-detected 1 10)
=>
(acknowledge-taunt 1 10)
)
最终AI
(defrule
(wood-amount < x)
(x=任何正整数)
(taunt-detected 1 10)
(10可以=1~255)
=>
(acknowledge-taunt 1 10)
(这个10=上面那个10的数值)
(cc-add-resource wood 50)
(木头自定)
)
(defrule
(taunt-detected 1 10)
(这个10也是等于第三行的10的数值)
=>
(acknowledge-taunt 1 10)
(10=上面的10的数值)
)其中第一部分识别数字10,并在从未识别的前提下,给予AI木材50单位
第二部分则当识别发生后,再次出现数字10的时候,将数字10及时注销,避免被其他语句误读。
做好了AI开始学怎么装AI
1、如何装载到游戏中
设置:打开玩家选项让任意一个玩家的性格成为你自己做的数字ai
如图注意不可以选中游戏者1
2、需要注意的问题
(1)使用前,养成清空对应资源栏的好习惯。这是避免AI错误的手段之一。
除非设计需求上,你必须要保留之前的触发结果。例如,玩家输入5,再输入3,最后输入8,你要计算5+3=8关系正确之类的。。。
(2)AI语句编写时,及时注销不用的数字。一般的习惯是用完即注销。对于有触发条件的(除识别数字这个条件,还有其他条件语句的),那么一定要有其他语句对其补充,防止条件不符合时,数字未注销。
最后放出一张吾辈的图来方便理解(也许不怎么方便)
特别感谢RU43 暂缺:更多问题,触发截图 話說為甚麼近日有那麼多教程出現=.= 只会资源法的受教了。 楼主辛苦。{:7_268:} https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=23626
https://www.hawkaoe.net/bbs/thread-6820-1-1.html
附上大智KK2个和数字ai有关的帖子 枫叶也出教程啦
我倒是有个问题
在游戏多人联机剧本时
非帝国标准AI怎么执行
因为有一个选择难度,选择了就会替换掉原来的AI,可是又不能不选 手田水口廿卜 发表于 2013-10-26 07:01 static/image/common/back.gif
話說為甚麼近日有那麼多教程出現=.=
这就是传说中的
星星之火可以燎原 逸轩帝国制作组 发表于 2013-10-26 17:54 static/image/common/back.gif
这就是传说中的
星星之火可以燎原
甚麼星星之火? 支持一下 , 学会数字AI制作技能{: 逸轩帝国制作组 发表于 2013-10-26 17:53 static/image/common/back.gif
枫叶也出教程啦
我倒是有个问题
在游戏多人联机剧本时
所以说没有联机场景用到数字ai lingfeng 发表于 2013-10-26 19:11 static/image/common/back.gif
支持一下 , 学会数字AI制作技能{:
谢大神支持 本帖最后由 lingfeng 于 2013-10-27 15:01 编辑
输入的数字被检测是有几秒延迟 实战中也很误事
F3的玩家也够可以的 这个问题一直存在
考虑了后半部分加入的检测语句 好神奇 真的可以防止10+10这样的重复输入
先输入10 然后输入比它小1的数字9 可以防止
但比如 先输入10 然后输入比它大1的数字11是不是可以 防止 {:158:}求解
新技术有时间研究下
手田水口廿卜 发表于 2013-10-26 10:51 static/image/common/back.gif
甚麼星星之火?
啊额
大陆的语文书上都有。。。
就是说 spark可以点燃一个森林 lingfeng 发表于 2013-10-26 19:23 static/image/common/back.gif
输入的数字被检测是有几秒延迟 实战中也很误事
F3的玩家也够可以的 这个问题一直存在
比如3触发效果 某些 ...
但比如 先输入 10 然后输入比它大1的数字11是不是可以 防止是否是根据上下顺序决定的?还是说根据数字打小? 本帖最后由 lingfeng 于 2013-10-26 20:25 编辑
AI无关上下排列吧比如条件是检测的 输入的数字(taunt-detected 1 10)
有了这个条件 除了10以外的数都无法达成
二三条件的双项检测理解起来很乱,这个你是不是可以测试下?
F3 , 输入 10 +11会被检测成另一个数字
10+9 同10+10 可以防止是不是 lingfeng 发表于 2013-10-26 20:12 static/image/common/back.gif
AI无关上下排列吧比如条件是检测的 输入的数字(taunt-detected 1 10)
有了这个条件 除了10以外的数都无 ...
顿时感觉玩家给制作者找茬的能力越来越厉害了 枫叶の飘零 发表于 2013-10-26 20:36 https://hawkaoe.net/bbs/static/image/common/back.gif
顿时感觉玩家给制作者找茬的能力越来越厉害了
往往是制作者给自己找茬,找BUG的境界而已
正常来说也不会这样乱输,不用去理会啦
由于数字被AI转换为资源有一定时间延迟
比如某些玩家输入了一次,有疑惑就会输入第二次
这样也许会组合成另外的数字
AI加上条件就防止了 很不错的
只是数字AI被制作运用的并不广泛罢了 我看了那个狂妄的李大爷爷的帖子,真是狂妄至极竟然辱骂枫叶兄 看来教程后自己做的一个AI,测试过了有效。想问一下如果我接下来想要添加“输入2增加2木材252石料"的效果该怎么做?把上面的数据复制下来改动没有用啊~{:158:}
页:
[1]
2