防止被敌人放风筝
本帖最后由 仰望坡大刀 于 2020-10-15 14:08 编辑原理是,找到距离TC最远的部队,然后以这个点为中心搜索12格之内的敌人和我军,如果我军部队小于对方敌军的1半,那就撤退14格。 代码如下。可是为啥操作起来,电脑的部队一直在后撤,即使明显看出来我军部队已经远远大于对方的一半?是哪里出了问题?; ====================================================================
;-----------------------------regroup for large-amount enemy------------------------
; ====================================================================
(defrule
(up-compare-goal regroup-large-amount != 1)
(or (up-timer-status regroup-large-amount-timer == timer-running)
(up-point-distance my-precise-army-point-x gl-position-self-x c:<= 30))
=>
(up-jump-rule 6)
)
(defrule
(military-population > 1)
=> (up-full-reset-search)
(up-set-target-point gl-position-self-x)
(up-filter-include cmdid-military -1 -1 -1)
(up-find-local c: all-units-class c: 100)
(up-remove-objects search-local object-data-action == actionid-explore)
(up-remove-objects search-local object-data-order == orderid-explore)
(up-remove-objects search-local object-data-class == monastery-class)
(up-remove-objects search-local object-data-class == unpacked-trebuchet-class)
(up-remove-objects search-local object-data-type == battering-ram)
(up-remove-objects search-local object-data-type == bombard-cannon)
(up-clean-search search-local object-data-distance search-order-desc)
(up-set-target-object search-local c: 0)
(up-get-point position-object my-precise-army-point-x))
(defrule
(up-timer-status regroup-large-amount-timer != timer-running)
(up-compare-goal my-precise-army-point-x > -1)
=> (up-full-reset-search)
(up-set-target-point my-precise-army-point-x)
(up-filter-distance c: -1 c: 12)
(up-filter-include cmdid-military -1 -1 -1)
(up-find-local c: -1 c: 21)
(up-find-remote c: -1 c: 40)
(up-get-search-state gl-local-total))
(defrule
(up-timer-status regroup-large-amount-timer != timer-running)
(up-compare-goal gl-local-total > 0)
(up-compare-goal gl-remote-total > 0)
(up-compare-goal my-precise-army-point-x > -1)
=>
(up-modify-goal army-value g:= gl-remote-total)
(up-modify-goal army-value c:/ 2)
(up-modify-goal army-value g:- gl-local-total))
(defrule
(up-timer-status regroup-large-amount-timer != timer-running)
(up-compare-goal gl-local-total > 0)
(up-compare-goal gl-remote-total > 0)
(up-compare-goal my-precise-army-point-x > -1)
(up-compare-goal army-value >= 0)
(up-point-distance my-precise-army-point-x gl-position-self-x c:> 30)
=> (up-full-reset-search)
(up-filter-include cmdid-military -1 -1 -1)
(up-find-local c: -1 c: 120)
(up-get-search-state gl-local-total))
(defrule
(up-timer-status regroup-large-amount-timer != timer-running)
(up-compare-goal gl-local-total > 0)
(up-compare-goal my-precise-army-point-x > -1)
(up-compare-goal army-value >= 0)
(up-point-distance my-precise-army-point-x gl-position-self-x c:> 30)
=>
(set-goal regroup-large-amount 1)
(up-copy-point regroup-point-x my-precise-army-point-x)
(up-lerp-tiles regroup-point-x gl-position-self-x c: 14)
(up-target-point regroup-point-x action-move formation-line stance-defensive)
(chat-to-player my-player-number "retreating for large-amount enemy")
(enable-timer regroup-large-amount-timer 20))
(defrule
(goal regroup-large-amount 1)
(up-point-distance my-precise-army-point-x gl-position-self-x c:<= 30)
=>
(up-set-attack-stance -1 c: stance-aggressive)
(set-goal regroup-large-amount 0)
)
(defrule
(or (timer-triggered regroup-large-amount-timer)
(up-compare-goal threat-time-goal > 6000))
=>
(up-set-attack-stance -1 c: stance-aggressive)
(disable-timer regroup-large-amount-timer)
)
很多goal参数没有声明 默认是0 导致触发无效
页:
[1]