制作夺城系统遇到一些问题
大家好,我正在制作一种夺城系统。其原理大概是用AI判定城堡血量小于x,通过资源法联动触发将城堡划归中立玩家名下;同时触发城堡回血;再次通过AI判定城堡血量大于等于x,通过资源法联动触发,停止城堡自动回血;同时激活判定触发,根据与城堡位置大体相同一绵羊之归属判定城堡归哪一玩家。AI写法大体如下所示:(defconst Object-data-hitpoints 10)(defconst ziyuan 1)
(defconst BCHP 2)
(defrule
(true)
=>
(set-goal 12 0)
(disable-self)
)
;不动AI
(defrule
(true)
=>
(set-strategic-number sn-maximum-food-drop-distance 0)
(set-strategic-number sn-maximum-wood-drop-distance 0)
(set-strategic-number sn-maximum-gold-drop-distance 0)
(set-strategic-number sn-maximum-stone-drop-distance 0)
(set-strategic-number sn-percent-civilian-gatherers 0)
(set-strategic-number sn-percent-civilian-builders 0)
(set-strategic-number sn-percent-civilian-explorers 0)
(set-strategic-number sn-maximum-hunt-drop-distance 0)
(set-strategic-number sn-maximum-fish-boat-drop-distance 0)
(set-strategic-number sn-task-ungrouped-soldiers 0)
(set-strategic-number sn-total-number-explorers 0)
(disable-self)
)
;定义id为1的城堡(B城堡)血量用变量BCHP存储
(defrule
(true)
=>
(up-set-target-by-id c: 1)
(up-get-object-data Object-data-hitpoints BCHP)
)
;用56号隐藏资源来进贡,联动AI与触发
(defrule
(true)
=>
(up-get-fact 34 56 ziyuan)
)
;当B城堡血量被削至960以下,获得56号资源1个单位
(defrule
(goal 12 0)
(up-compare-goal BCHP < 960)
(up-compare-goal ziyuan == 0)
=>
(chat-to-all "B城堡中立。" )
(cc-add-resource 56 1)
(set-goal 12 1)
)
;当B城堡血量恢复至960以上,获得56号资源2个单位
(defrule
(goal 12 1)
(up-compare-goal BCHP >= 960)
(up-compare-goal ziyuan == 0)
=>
(chat-to-all "B城堡占领。" )
(cc-add-resource 56 2)
(set-goal 12 0)
)各位可以下载附件《夺城系统2》与《血量检测-副本》感受一下。之前我也做了一个练习战役《浮士德征服乌托邦》。经过测试我认为这个系统大概是没有问题的(就是绵羊有点丑)。
不过,在附件《夺城系统》与《血量检测》中,我测试时发生了许多故障。id为0的城堡通过id为407的绵羊进行判定。把血量削至960以下,城堡中立。当电脑玩家2拥有绵羊,血量恢复至960时玩家2夺回城堡。奇怪的是,如果我(玩家1)拥有绵羊,AI貌似无法判定血量恢复至960,中立玩家4继续拥有城堡,而城堡回血不断。
我已经反复检查过很多次。我平时喜欢用AOKTS1.2进行战役编辑和修改。《夺城系统》中贡品类型、改权触发什么的似乎都没问题。用1.0打开之后,发现清空贡品的效果中贡品类型竟然还是黄金(应该改成56号);此外,玩家1、3的改权触发中不知为何也没有设置改权对象为何。但当我全部改回原样,发现还是会犯老毛病。最后,我用1.2编辑的《夺城系统2》,用1.0却打不开。
疑问颇多。我之前做浮士德的战役时使用的方法与现在一样,结果却不同,不知是否与userpatch1.4更新到1.5的变化有关。有请各位多多指教!{:147:}
一直很好奇 AI返回至触发检测到 应该是有那么几秒延迟的
lingfeng 发表于 2017-2-16 21:41
一直很好奇 AI返回至触发检测到 应该是有那么几秒延迟的
延迟是有的,但应该没那么慢,当我这个系统成功运转的时候,延迟大概是1秒的样子(血量到达961时才停止恢复生命值)。
页:
[1]