无知者 发表于 2005-1-6 23:56:52

请闲闲和卧龙先生帮忙

这是我给一个战役配的ai。我的意图是让电脑隔3分钟间发动一次进攻,(通过触发发送ai信号来控制),每次进攻人数为15个左右(占总兵力的30%)。但是电脑好像不听话。第一次进攻还符合我的意图,但从第二次进攻开始,进攻人数只有4、5个,而且只要进攻单位死光就马上发动下一次进攻(间隔肯定不到3分钟)。更可恶的是过了一段时间(大约进攻了十几次),电脑发起疯来,倾巢出动。请帮我看看是那里不对。

(defrule
    (true)
=>
    (set-strategic-number sn-task-ungrouped-soldiers 0)
    (set-strategic-number sn-enemy-sighted-response-distance 6)
    (set-strategic-number sn-percent-enemy-sighted-response 100)
    (set-difficulty-parameter ability-to-dodge-missiles 0)
    (set-difficulty-parameter ability-to-maintain-distance 100)
    (disable-self)
)

(defrule
    (event-detected trigger 100)
    (game-time > 0)
    (defend-soldier-count >= 46)
=>
    (acknowledge-event trigger 100)
    (set-strategic-number sn-number-attack-groups 1)
    (set-strategic-number sn-maximum-attack-group-size 20)
    (set-strategic-number sn-minimum-attack-group-size 0)
    (set-strategic-number sn-percent-attack-soldiers 30)
    (set-strategic-number sn-attack-intelligence 1)
    (attack-now)
)

卧龙先生 发表于 2005-1-7 01:10:46

呵呵。无知兄有新作了!?首先,脚本中(game-time > 0) 这个可以去掉。它没有存在的意义:)另外,要循环进攻可以在脚本里写,不用到触发,例子如下:;;;;;;;;;;;;;;;脚本开始:(defrule
    (true)
=>
    (enable-timer 10 60)
    (disable-self)
)(defrule
    (timer-triggered 10)
    (defend-soldier-count >= 0)
=>
    (attack-now)
    (disable-timer 10)
    (enable-timer 10 180)
);;;;;;;;;;;;;;;;;;;;脚本结束另外,由于脚本检测设置为3分钟,但是假如现在开始进攻,但全部参与进攻的人在2分钟后全部挂掉。那么这个时候距离3分钟只有1分钟时间了,所以再过1分钟时间就又进攻了。这就造成了时间差异。但这个问题目前我也没有好的解决方法   :)关于经工参与人数设置方面。你这样设置还不是很正确。你设置了参与进攻人数的百分比为30,假如目前有100个士兵,那么第一次进攻基本上会派出33个士兵出去。但是第二次进攻的时候如果士兵只剩下70个的话,那么进攻人数将减少为23个差不多。所以,假如你坚持要设置进攻人数为15个的话,可以将你上面的设置进攻参与百分比删除掉,然后加入下面的脚本,脚本在下一贴继续:

卧龙先生 发表于 2005-1-7 01:15:41

设置这个东东真是麻烦,呵呵。我在这里写一半脚本内容,无知兄请继续自己加上去,一直到士兵人数等于200处。被催睡觉啦:)
(defrule
    (defend-soldier-count >= 1)
    (defend-soldier-count < 15)
=>
    (set-strategic-number sn-percent-attack-soldiers 100)
)
(defrule
    (defend-soldier-count >= 15)
    (defend-soldier-count < 20)
=>
    (set-strategic-number sn-percent-attack-soldiers 85)
)
(defrule
    (defend-soldier-count >= 20)
    (defend-soldier-count < 25)
=>
    (set-strategic-number sn-percent-attack-soldiers 75)
)
(defrule
    (defend-soldier-count >= 25)
    (defend-soldier-count < 30)
=>
    (set-strategic-number sn-percent-attack-soldiers 65)
)
[此贴子已经被作者于2005-1-7 1:16:41编辑过]

闲闲 发表于 2005-1-7 11:08:13

按说无知者写了应该也没的问题的.试着把defend-soldier-count 改成military-population >= 45试试.关于触发的问题我一直都不太明白,记得我以前试着做战役时常常用taunt-detected和触发通讯的.

狂~劇情狂 发表于 2005-1-7 18:28:50

補充: 可能就是場景中本身的ai事件循環執行, 以致重覆出兵其他問題就如臥龍先生所說一樣, 出在(set-strategic-number sn-percent-attack-soldiers 30)處。但是小弟覺得: 取消上條, 然後把sn-minimum-attack-group-size 調高的話應該就可以解決問題 (未測試)

尼克 发表于 2005-1-7 18:56:50

我覺得AI attack now的士兵人數是不準確的,每次也少了士兵

卧龙先生 发表于 2005-1-7 18:59:59

设置参与进攻人数就是用这个最有效了:   (set-strategic-number sn-percent-attack-soldiers X)

狂~劇情狂 发表于 2005-1-7 19:02:37

我觉得AI attack now的士兵人数是不准确的,每次也少了士兵
这状况在单靠sn-percent-attack-soldiers、sn-percent-attack-boats等策略值设定攻击部队人数而sn-minimum-attack-group-size、sn-maximum-attack-group-size间隔颇大时很可能出现, 另外与sn-attack-group-size-randomness、sn-scale-maximum-attack-group-size默认值为1亦有一定关系

卧龙先生 发表于 2005-1-7 19:29:47

<DIV class=quote><B>以下是引用<I>狂~劇情狂</I>在2005-1-7 18:28:50的发言:</B>

補充: 可能就是場景中本身的ai事件循環執行, 以致重覆出兵 </DIV>
非也,我认为 AI 在进攻的过程中将不再响应新的 进攻指令。因为目前已经在进攻了。
这是我从实验中得出的结果。

狂~劇情狂 发表于 2005-1-7 20:47:45

目前已在進攻, 問題是設定策略值的效果仍會運行--結果, 可能當前線進行部隊重組判定時, "4、5个"的防禦單位可能會同時被配入, 等到玩家看到卻以為是下次進攻了

无知者 发表于 2005-1-7 23:33:47

多谢。我会综合各位的意见再研究研究。战役的制作已经快接近完成了,但还有一些问题,一个是这个ai的问题,另一个是最后一部分(第五部分)还未测试,平衡性如何还不知道。

SonicX 发表于 2005-1-9 12:29:25

个人以为(attack-now) 只是一个强制进攻指令即使不用也可以通过其他函数发动进攻例如
(defrule
(player-in-game any-enemy)
=&gt;
(set-strategic-number sn-percent-attack-soldiers 90)
(set-strategic-number sn-number-attack-groups 100)
(set-strategic-number sn-percent-attack-boats 90)
(set-strategic-number sn-number-boat-attack-groups 100)
(set-strategic-number sn-ignore-attack-group-under-attack 1)
)照样会发动进攻本人设想是不是应该在发动完进攻后立即将所有士兵转为防守已避免更多的士兵参与到进攻部队以下仅供参考,时间有限没有更全面的测试(defrule
(timer-triggered 1)
(player-in-game any-enemy)
=&gt;
(set-strategic-number sn-percent-attack-soldiers 90)
(set-strategic-number sn-number-attack-groups 100)
(set-strategic-number sn-percent-attack-boats 90)
(set-strategic-number sn-number-boat-attack-groups 100)
(set-strategic-number sn-target-evaluation-siege-weapon 0) ;减少攻击攻城武器概率
(set-strategic-number sn-ignore-attack-group-under-attack 1)
(enable-timer 1 600);5分钟发动一次进攻
(enable-timer 2 60) ;60秒后将所有士兵转为防守
)
;防御
(defrule
(timer-triggered 2)
=&gt;
(set-strategic-number sn-percent-attack-soldiers 0)
(set-strategic-number sn-number-attack-groups 0)
(set-strategic-number sn-percent-attack-boats 0)
(set-strategic-number sn-number-boat-attack-groups 0)

卧龙先生 发表于 2005-1-9 12:45:17

这个解决方法很好。好一段时间没见了,Soni兄!:)

无知者 发表于 2005-1-9 12:58:27

我删掉了这三行,      (set-strategic-number sn-number-attack-groups 1)
    (set-strategic-number sn-maximum-attack-group-size 20)
    (set-strategic-number sn-minimum-attack-group-size 0)好像问题解决了。谢谢各位。

SonicX 发表于 2005-1-9 20:34:19

<DIV class=quote><B>以下是引用<I>卧龙先生</I>在2005-1-9 0:45:17的发言:</B>

这个解决方法很好。
好一段时间没见了,Soni兄!:) </DIV>


机子以自暴方式进行无期限不妥协方式罢工,哎……

卧龙先生 发表于 2005-1-9 20:52:03

呵呵!那就把它卖到非洲去。老的不去新的不来嘛。

肥肥嘟 发表于 2013-1-18 12:02:13

大家好。我是新人。这里能帮我吗?
就是我的帝国2玩不了的。一打开就是一片黑白。就像电视没了信号一样。但是有声音。我的系统是WIN7的。很多人都说下载补丁就行了。我下载过很多次了都不行。各位高手能帮下不。我现在下载的是帝国时代2 - 翔鹰帝国增强版。还是一样。各位高手能说下这是什么问题。怎么办才好。因为我比较喜欢玩帝国2.所以请各位懂的帮帮忙了。谢谢。我的QQ是474815226.因为我是小白。所以请高手能说详细点。由衷感谢了。

肥肥嘟 发表于 2013-1-18 12:02:25

大家好。我是新人。这里能帮我吗?
就是我的帝国2玩不了的。一打开就是一片黑白。就像电视没了信号一样。但是有声音。我的系统是WIN7的。很多人都说下载补丁就行了。我下载过很多次了都不行。各位高手能帮下不。我现在下载的是帝国时代2 - 翔鹰帝国增强版。还是一样。各位高手能说下这是什么问题。怎么办才好。因为我比较喜欢玩帝国2.所以请各位懂的帮帮忙了。谢谢。我的QQ是474815226.因为我是小白。所以请高手能说详细点。由衷感谢了。
页: [1]
查看完整版本: 请闲闲和卧龙先生帮忙