翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 875|回复: 6

[求助] 继续求问关于AI与触发之交互的问题

 关闭 [复制链接]

18

主题

0

精华

327

积分

子爵

耕战
30
鹰币
229
天龙币
0
回帖
47
附庸关系0
发表于 2016-6-30 00:35:37 | 显示全部楼层 |阅读模式
本帖最后由 weidongzi 于 2016-6-30 15:05 编辑

要感谢@条顿武士 前辈最近对我几乎是手把手的指导,解答了我对AI的许多疑惑。

其中,最主要的是关于AI与触发之交互的知识,比如通过资源法实现 AI → 触发 的飞跃。

不过,传统的资源法中,AI利用cc-add-resource这个语句向玩家进贡的资源局限于四种基础资源(食物、木材、黄金、石头)。运用四种基础资源发信号的劣势在于,“累积属性”检测的不是资源变化,而是资源总量大于等于某个值。为了保证检测的精确性,安装了包含这个语句的AI的玩家必须时刻将自己的基础资源清为零。这一点在RPG战役中影响不大,但我的目标是做一个建毁与夺城相结合的战役,玩家也比较多,都是要正常采集资源的。这样就需要对传统的资源法进行改进。

在我的一个提问贴子中,@条顿武士 前辈非常开拓性地发现,cc-add-resource这个语句也可以作用于隐藏资源,并举出第56号与15号隐藏资源的例子。

于是拿最近学到的东西小da试kai牛nao刀dong:想做一个4v1的夺城战役,浮士德率领堂吉诃德、好兵帅克与孙悟空要征服乌托邦,乌托邦有8座城堡,分别是Utopia, Ethiopia, Meriotpia, Technopia, Communiopia, Myopia, Consumenta, Natura;玩家6梅菲斯特与其他所有玩家同盟,承担判定功能。

血量判定与夺城触发的原理简述为:城堡血量低于960→_→AI进贡→_→城堡归玩家6,同时启动自动回血
城堡血量大于等于960→_→AI进贡→_→借助城堡里面的绵羊判定城堡属于哪个玩家,同时关闭自动回血
两个AI指令互相循环。

好吧,一开始想要小试牛刀,结果开始动手之后做到第二个城堡就已经乱套了。我是做完一个城堡就测试一下。第一个城堡的占领非常顺利。但是第二个城堡血量削至不足960之后,触发的却是占领第一个城堡的效果。似乎是资源判定上出了问题。

于是,为了检查这个触发系统是否可用,我简化了一下,弄了一个很简单的草地战役……玩家1夺玩家2的城堡,玩家3判定……玩家2的城堡也减至4个。但是玩到后面还是会出现混乱,即出现攻击一个城堡,另一个城堡却出现所有权转换的问题。当攻击顺序不一样,还会出现一些很微妙的差别……

因此,我在此求助。不知能否找出哪里出了差错?我怀疑56与15号资源的起始值可能不为0。不知能否证实?不知还有没有其他的方法可以实现AI与触发的交互?

附上我的地图文件与AI文件。第二个名字有点囧,是“小试牛刀”而烂尾的作品。第一个pruefen是极简草地夺城。大家可以感受一下。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x
回复

使用道具 举报

688

主题

30

精华

8万

积分

教皇

耕战
10902
鹰币
542492
天龙币
512
回帖
7009

翔鹰建站十周年纪念章翔鹰十周年帝国Online纪念章特级帝国勋章特级翔鹰勋章特级嘉禾勋章特级皇家勋章鹰之王者雄鹰勋章第四届火箭筒杯最佳战役第五届火箭筒杯最佳战役第九届火箭筒杯最佳战役第二届战鹰杯单人赛季军第八届战鹰杯单人赛季军鸽子勋章

附庸关系12
发表于 2016-6-30 01:48:10 | 显示全部楼层
触发结构理论上是没问题的,但是有些马虎的地方写错了导致系统出了bug…



比如草地夺城AI的这里,set-goal 3 1应该是set-goal 4 1才对。
浮士德的夺城里,第二个城堡的触发Meritopia changing里面,应该是4和97数量的资源才对,而触发设定的是4和98,这样就会和前面的触发冲突…

还有一个可能出问题的情况,就是在某个城堡血量减少到960以下的时候,另一个城堡刚好回血到960以上,导致资源累加,多个触发都会判定成立。

为了避免这种情况,在判定资源的时候,使用正常的堆积属性条件(资源数大于等于),以及1.4的反向条件(资源数小于)一起判定,可以严格判断资源是否等于某个数值。比如条件一写资源大于等于1,条件二反向判断资源小于2,那么就只有在资源等于1的时候条件才会成立。

反向条件的使用方法是把下图中的小勾去掉,这样条件判定就会完全相反。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x
回复

使用道具 举报

688

主题

30

精华

8万

积分

教皇

耕战
10902
鹰币
542492
天龙币
512
回帖
7009

翔鹰建站十周年纪念章翔鹰十周年帝国Online纪念章特级帝国勋章特级翔鹰勋章特级嘉禾勋章特级皇家勋章鹰之王者雄鹰勋章第四届火箭筒杯最佳战役第五届火箭筒杯最佳战役第九届火箭筒杯最佳战役第二届战鹰杯单人赛季军第八届战鹰杯单人赛季军鸽子勋章

附庸关系12
发表于 2016-6-30 01:54:08 | 显示全部楼层
忘了说,为了防止AI中的两个动作同时触发,可以严格化AI语句中的事实条件,不但检测城堡HP小于960的时候增加资源,同时也要检测目前的资源是不是等于0,只有等于0才增加资源,这样就会很严格的避免同时增加资源的情况了。

这种情况在输入数字AI的时候经常出现,玩家可以暂停之后输入多个数字,这样整个触发系统都有可能被破坏,解决方法可以参考一下枫叶的帖子:https://www.hawkaoe.net/bbs/thread-113857-1-1.html

评分

参与人数 1耕战 +10 收起 理由
一窍不开 + 10 回答详细

查看全部评分

回复

使用道具 举报

18

主题

0

精华

327

积分

子爵

耕战
30
鹰币
229
天龙币
0
回帖
47
附庸关系0
 楼主| 发表于 2016-6-30 09:39:05 | 显示全部楼层
本帖最后由 weidongzi 于 2016-6-30 17:35 编辑
条顿武士 发表于 2016-6-30 01:48
触发结构理论上是没问题的,但是有些马虎的地方写错了导致系统出了bug…

厉害!
请问有没有检测触发与AI中bug的工具?
使用反向累积属性协助判定资源数量是否等于某个值,是否不再需要两种资源一起判定?
回复

使用道具 举报

18

主题

0

精华

327

积分

子爵

耕战
30
鹰币
229
天龙币
0
回帖
47
附庸关系0
 楼主| 发表于 2016-6-30 16:54:11 | 显示全部楼层
条顿武士 发表于 2016-6-30 01:54
忘了说,为了防止AI中的两个动作同时触发,可以严格化AI语句中的事实条件,不但检测城堡HP小于960的时候增 ...

56与15号资源是隐藏资源,请问在wood-amount这样的语句里面如何表达呢?
回复

使用道具 举报

688

主题

30

精华

8万

积分

教皇

耕战
10902
鹰币
542492
天龙币
512
回帖
7009

翔鹰建站十周年纪念章翔鹰十周年帝国Online纪念章特级帝国勋章特级翔鹰勋章特级嘉禾勋章特级皇家勋章鹰之王者雄鹰勋章第四届火箭筒杯最佳战役第五届火箭筒杯最佳战役第九届火箭筒杯最佳战役第二届战鹰杯单人赛季军第八届战鹰杯单人赛季军鸽子勋章

附庸关系12
发表于 2016-6-30 19:08:48 | 显示全部楼层
weidongzi 发表于 2016-6-30 09:39
厉害!
请问有没有检测触发与AI中bug的工具?
使用反向累积属性协助判定资源数量是否等于某个值,是否 ...

是的,理论上不需要两种资源一起判定了。

这里有个检测触发中断的小程序:https://www.hawkaoe.net/bbs/thread-118177-1-1.html

不过对于有些MOD不兼容,使用MOD时记得删除。

检测触发和AI中的bug主要是靠经验,还有多次测试的耐心~

有些小技巧可以参考我的另一篇帖子:https://www.hawkaoe.net/bbs/foru ... read&tid=114533
回复

使用道具 举报

688

主题

30

精华

8万

积分

教皇

耕战
10902
鹰币
542492
天龙币
512
回帖
7009

翔鹰建站十周年纪念章翔鹰十周年帝国Online纪念章特级帝国勋章特级翔鹰勋章特级嘉禾勋章特级皇家勋章鹰之王者雄鹰勋章第四届火箭筒杯最佳战役第五届火箭筒杯最佳战役第九届火箭筒杯最佳战役第二届战鹰杯单人赛季军第八届战鹰杯单人赛季军鸽子勋章

附庸关系12
发表于 2016-6-30 19:14:02 | 显示全部楼层
weidongzi 发表于 2016-6-30 16:54
56与15号资源是隐藏资源,请问在wood-amount这样的语句里面如何表达呢?

需要多用一个变量来储存这个数据。

(defconst ziyuan 13)


然后用up-get-fact动作来读取资源数据并储存到这个变量。

(up-get-fact 34 56 ziyuan)


34是指资源,后面的56是资源下的参数,这里指56号资源,最后填写变量名称。

同理如果想存15号资源可以再定义一个ziyuan2变量,然后

(up-get-fact 34 15 ziyuan2)


之后可以调用和比较这个资源,比如判定资源是否等于0

(up-compare-goal ziyuan = 0)


也可以及时输出这个数值,随时查看电脑的资源数量,这也是测试AI时的一个好方法。

(up-chat-data-to-all "资源数为 %d." g: ziyuan)
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-11-24 18:09 , Processed in 0.188931 second(s), 91 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

快速回复 返回顶部 返回列表