12345677 发表于 2015-2-12 08:30:31

Ai Script Builder的进攻代码里为什么有两行Attack Now?

(defrule
    (game-time > 1)
    (defend-soldier-count >= 1)
=>
    (attack-now)〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉?
    (enable-timer 10 1)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (defend-soldier-count >= 1)
=>
    (set-strategic-number sn-number-attack-groups 1)
    (set-strategic-number sn-maximum-attack-group-size 1)
    (set-strategic-number sn-minimum-attack-group-size 1)
    (set-strategic-number sn-percent-attack-soldiers 1)
    (set-strategic-number sn-attack-intelligence 1)
    (attack-now)〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉?
    (disable-timer 10)
    (enable-timer 10 1)
)

狂~劇情狂 发表于 2015-2-12 08:45:21

第一個規則是開始首次進攻同時運行計時器,你可以看到該規則還有(disable-self),所以只會運行一次;第二個規則是由計時器去啟動,並且會一直運行下去,亦即第二次起的持續進攻。

12345677 发表于 2015-2-12 09:18:33

狂~劇情狂 发表于 2015-2-12 08:45
第一個規則是開始首次進攻同時運行計時器,你可以看到該規則還有(disable-self),所以只會運行一次;第二個 ...

那也就是说 首次进攻不受后面的最大小部队规模设置影响??

12345677 发表于 2015-2-12 09:25:36

狂~劇情狂 发表于 2015-2-12 08:45
第一個規則是開始首次進攻同時運行計時器,你可以看到該規則還有(disable-self),所以只會運行一次;第二個 ...

我感觉第一行Attack Now代码完全多余有木有!

狂~劇情狂 发表于 2015-2-12 09:28:43

12345677 发表于 2015-2-12 09:25
我感觉第一行Attack Now代码完全多余有木有!

刪了就只是遲十秒進次,可是寫多一句也沒太多影響……

卧龙先生 发表于 2015-2-12 09:38:44

第一个规则的作用是一是唤起进攻循环,即唤起第二个规则;二是进行首次攻击.

所谓"多余不多余",就看你何种需求了.

看如下

卧龙先生 发表于 2015-2-12 09:39:48

;Attack Now
(defrule
    (game-time > 20)
    (defend-soldier-count >= 0)
=>
    (attack-now)
    (enable-timer 10 240)
    (set-strategic-number sn-number-attack-groups 0)
    (set-strategic-number sn-percent-attack-soldiers 0)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (defend-soldier-count >= 0)
=>
    (attack-now)
    (disable-timer 10)
    (enable-timer 10 240)
)

以上 AI, 第一次攻击在游戏 20秒,然后每隔 240 秒攻击一次.完全不多余.去掉第一个 attack-now, 则游戏 20 秒时不会发起攻击

12345677 发表于 2015-2-12 09:48:50

狂~劇情狂 发表于 2015-2-12 09:28
刪了就只是遲十秒進次,可是寫多一句也沒太多影響……

(defrule
    (game-time > 240)
=>
    (enable-timer 10 120)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (defend-soldier-count >= 9)
=>
    (set-strategic-number sn-number-attack-groups 9)
    (set-strategic-number sn-maximum-attack-group-size 40)
    (set-strategic-number sn-minimum-attack-group-size 1)
    (set-strategic-number sn-percent-attack-soldiers 100)
    (set-strategic-number sn-maximum-town-size 255)
    (chat-to-all "Fuck!")
    (attack-now)
    (disable-timer 10)
    (enable-timer 10 120)
)
(defrule
    (game-time > 240)
=>
    (enable-timer 10 120)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (attack-soldier-count < 9)
=>
    (set-strategic-number sn-maximum-town-size 16)
    (chat-to-all "Shit!")
    (disable-timer 10)
    (enable-timer 10 120)
)
其实这个才是本体。。。表示精简之后爽多了。。。开始因为那多出来的一次Attack Now 导致我的Ai在防御判断下依然持续发动进攻。。。坑的我一愣一愣的

12345677 发表于 2015-2-12 09:49:55

卧龙先生 发表于 2015-2-12 09:39
;Attack Now
(defrule
    (game-time > 20)


第一次attack 不受后面的进攻规模设置控制。。。不太好用

狂~劇情狂 发表于 2015-2-12 09:52:24

其實你可以在其他地方以至第一個規則內也設定那堆策略值就行,反正又沒突破代碼行數限制

12345677 发表于 2015-2-12 09:56:00

狂~劇情狂 发表于 2015-2-12 09:52
其實你可以在其他地方以至第一個規則內也設定那堆策略值就行,反正又沒突破代碼行數限制

(defrule
      (food-amount < 1125)
      (commodity-buying-price food < 33)
      (can-buy-commodity food)
=>
      (chat-local-to-self "进口食物")
      (release-escrow gold)
      (buy-commodity food)
)
该代码被触发时市场里的食物价格在150+左右。。。
为什么检查价格的代码被Ai无视了呢??

12345677 发表于 2015-2-12 09:58:14

狂~劇情狂 发表于 2015-2-12 09:52
其實你可以在其他地方以至第一個規則內也設定那堆策略值就行,反正又沒突破代碼行數限制

怎样让Ai在游戏一开始 不派遣探索工人的情况下获得所有敌方视野呢?

12345677 发表于 2015-2-12 19:19:53

本帖最后由 12345677 于 2015-2-12 19:56 编辑

狂~劇情狂 发表于 2015-2-12 09:52
其實你可以在其他地方以至第一個規則內也設定那堆策略值就行,反正又沒突破代碼行數限制

(defrule
    (game-time > 0)
    (defend-soldier-count >= 9)
=>
    (attack-now)
    (enable-timer 10 300)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (defend-soldier-count >= 9)
=>
    (set-strategic-number sn-number-attack-groups 9)
    (set-strategic-number sn-maximum-attack-group-size 40)
    (set-strategic-number sn-minimum-attack-group-size 1)
    (set-strategic-number sn-percent-attack-soldiers 100)
    (set-strategic-number sn-maximum-town-size 128)
    (chat-to-all "Fuck!")
    (attack-now)
    (disable-timer 10)
    (enable-timer 10 300)
)
(defrule
    (game-time > 0)
    (defend-soldier-count >= 9)
=>
    (attack-now)
    (enable-timer 10 300)
    (disable-self)
)
(defrule
    (timer-triggered 10)
    (attack-soldier-count < 9)
=>
    (set-strategic-number sn-number-attack-groups 0)
    (set-strategic-number sn-maximum-attack-group-size 0)
    (set-strategic-number sn-minimum-attack-group-size 0)
    (set-strategic-number sn-percent-attack-soldiers 0)
    (set-strategic-number sn-maximum-town-size 32)
    (chat-to-all "Shit!")
    (disable-timer 10)
    (enable-timer 10 300)
)
我明明设置的300秒开始判断 如果不是Fuck 就一定是Shit 可为什么对战中Ai直到13分钟左右时才开始Fuck?并且之前一直都没有Shit。
打完后看录像发现6分30秒左右发动了一次对另一个电脑的进攻 但是没有触发Fuck!效果
攻击间隔随机因子造成的误差有这么大吗?具体是怎样计算的呢??

狂~劇情狂 发表于 2015-2-12 22:17:45

可以的話希望你不要用這些粗鄙詞彙作為訊息測試例子……

針對 (attack-now) 的循環, Userpatch 有 (up-reset-attack-now) 這一新增動作可以即時註銷。

第一、三條規則完全相同,不知為何你要重寫一次。

十三分鐘的問題,是因為你首條規則同時帶上了九名士兵的條件,實際就是發展去到九人軍隊再加五分鐘的時間,而十三分鐘就差不多了,第四條規則自然也不可能在此前觸發。

另外你的進攻方法似乎是混用了 TSA 、攻擊隊伍與 attack-now ,但 TSA 會因為 100% 的 sn-percent-attack-soldiers 影響而失效, attack-now 與攻擊隊伍的判定也會互相抵消……此外同樣因為 sn-percent-attack-soldiers 影響,第二條規則運行後基本要等第四條規則亦運行( sn-percent-attack-soldiers 設為 0 )才有可能再被判定成立,而這亦為造成時間差的另一可能原因。

12345677 发表于 2015-2-12 22:26:20

本帖最后由 12345677 于 2015-2-12 22:28 编辑

狂~劇情狂 发表于 2015-2-12 22:17
可以的話希望你不要用這些粗鄙詞彙作為訊息測試例子……

針對 (attack-now) 的循環, Userpatch 有 (up- ...

。。。基本攻击方式保持Tsa 沿用AttackNow是因为考虑到海战运输。。。
那么我把进攻比例调整为50%就可以了吧?
然后攻击队伍不需要AttackNow就可以自行发动进攻吗??
可是那样的话 AttackNow最多好像只能支持40人的进攻队伍把?
设定攻击队伍规模 最多可以支持多少人同时进攻呢?

狂~劇情狂 发表于 2015-2-12 22:43:57

為了保持 TSA 的有效性, sn-percent-attack-soldiers 還是別設 100 為宜;攻擊隊伍與 attack-now 為不同進攻方法,前者毋須 attack-now 就會進攻,單支隊伍的部隊數應該仍受限於 40 人,但你可以透過設置隊伍的數量來克服它,甚至可以造成同時發動 200+ 人進攻,唯一問題就是當隊伍數較多時,每支隊伍抽調人員時可能彼此重複,導致 minimum-attack-group-size 未真正生效。

12345677 发表于 2015-2-12 22:50:27

狂~劇情狂 发表于 2015-2-12 22:43
為了保持 TSA 的有效性, sn-percent-attack-soldiers 還是別設 100 為宜;攻擊隊伍與 attack-now 為不同進 ...

AttackNow最多支持多少人的进攻呢 如果可以支持120以上我就不设定攻击队伍了。。。麻烦死

狂~劇情狂 发表于 2015-2-12 22:54:33

attack-now 基本上是每運行一次就從攻擊士兵裡抽選成員進攻,其實持續運行的話嚴格來說沒有單位上限,可以做到上百千的部隊都在進攻,但這樣會相當卡機,且會引致前線部隊反應不佳。
页: [1]
查看完整版本: Ai Script Builder的进攻代码里为什么有两行Attack Now?