[UP1.5] 寻找并攻击血量最低的前几个单位的AI(简单版)
本帖最后由 newtonerdai 于 2020-5-20 23:53 编辑如果不用考虑未找到任何单位的情况,可以只用一条规则:
(defrule
(taunt-detected 1 9) ;(测试用)发出数字9后开始运行。
(up-timer-status 10 <= 1) ;10 = 定时器10号。<=1 :禁用或已触发
=>
(up-full-reset-search) ;使用DUC前先完全重置
(set-strategic-number sn-focus-player-number 1)
(up-find-remote c: -1 c: 40) ;-1 = 任何单位
(up-clean-search 2 10 1) ;2 = 远程搜索。10 = 当前HP。1 = 正序(血量最少排最前)
(up-remove-objects 2 -1 c:> 1);2 = 远程搜索。-1 = 索引。1 = 只保留前2个远程结果
(up-find-local c: -1 c: 40) ;-1 = 任何单位
(up-target-objects 0 0 -1 -1) ;第二个0 = 右键。
(enable-timer 10 2) ;10 = 定时器10号。2 = 两秒执行一次
)
如果需要考虑没有搜索到单位的情况,则加一条规则来检测:
(defconst gl-local-total 300)
(defconst gl-local-last 301)
(defconst gl-remote-total 302)
(defconst gl-remote-last 303)
(defrule
(taunt-detected 1 9) ;(测试用)发出数字9后开始运行。
(up-timer-status 10 <= 1) ;10 = 定时器10号。<=1 :禁用或已触发
=>
(up-full-reset-search) ;使用DUC前先完全重置
(up-find-local c: -1 c: 40) ;-1 = 任何单位
(set-strategic-number sn-focus-player-number 1)
(up-find-remote c: -1 c: 40) ;-1 = 任何单位
(up-get-search-state gl-local-total) ;获取搜索计数
)
(defrule
(taunt-detected 1 9) ;(测试用)发出数字9后开始运行。
(up-timer-status 10 <= 1) ;10 = 定时器10号。<=1 :禁用或已触发
(up-compare-goal gl-local-total c:> 0);只有有单位时才执行排序和指派
(up-compare-goal gl-remote-total c:> 0) ;同上
=>
(up-clean-search 2 10 1) ;2 = 远程搜索。10 = 当前HP。1 = 正序(血量最少排最前)
(up-remove-objects 2 -1 c:> 1);2 = 远程搜索。-1 = 索引。1 = 只保留前2个远程结果
(up-target-objects 0 0 -1 -1) ;第二个0 = 右键。
(enable-timer 10 2) ;10 = 定时器10号。2 = 两秒执行一次
)
如果想改成攻击血量最多单位,需要改动哪里?改成什么数值? 如果想改成攻击血量最多单位,需要改动哪里?改成什么数值? chifeiyen 发表于 2020-5-23 21:08
如果想改成攻击血量最多单位,需要改动哪里?改成什么数值?
最好别用命令攻击,比如你AI弓兵选择到冲车血量最高,就会一直对冲车射箭射到冲车垮掉喔
这义味着过程中就算看见敌人一般部队或村民都会完全无视的,会一直射冲车
blazefires 发表于 2020-5-24 03:23
最好别用命令攻击,比如你AI弓兵选择到冲车血量最高,就会一直对冲车射箭射到冲车垮掉喔
这义味着过程中 ...
我就是想要这个效果啊,这样我的冲车也能更好当肉盾掩护步兵。 chifeiyen 发表于 2020-5-23 21:08
如果想改成攻击血量最多单位,需要改动哪里?改成什么数值?
(up-clean-search 2 10 1)改为 (up-clean-search 2 10 2)
1表示正序(从小到大)
2表示倒序(从大到小) newtonerdai 发表于 2020-5-24 11:13
(up-clean-search 2 10 1)改为 (up-clean-search 2 10 2)
1表示正序(从小到大)
2表示倒序(从大到小) ...
谢谢!我想把DE默认AI也改成这样,我看了下AI文件里的up-clean-search策略后没有参数,但有以下两个策略值参数:
(up-target-objects 0 action-garrison -1 -1)
(up-target-objects 1 action-default -1 -1)
请问大大这俩策略是不是影响这个问题的?这里的-1是代表什么?改成攻击血量最大单位应该改成什么? chifeiyen 发表于 2020-5-24 12:05
谢谢!我想把DE默认AI也改成这样,我看了下AI文件里的up-clean-search策略后没有参数,但有以下两个策略 ...
你可以试试用NotePad++来在整个文件夹的文件中搜索。找到挺多的。
修改思路是:找到up-target-objects action-default,在它之前用主楼第二个方法里的up-clean-和up-remove-来筛选。
不过前提是你得知道哪些up-target-objects action-default是用于攻击的,而且在攻击之前筛选得怎样。
-1是会被忽略的参数。你列举的两条语句里的第一个-1表示阵型,第二个表示攻击姿态。一般用不到。
另外,这个不叫“策略值”,叫“动作”或者“语句/指令”,策略值是sn-开头的那种
本帖最后由 chifeiyen 于 2020-5-24 13:10 编辑
newtonerdai 发表于 2020-5-24 12:35
你可以试试用NotePad++来在整个文件夹的文件中搜索。找到挺多的。
好的,我研究一下,谢谢大大!
up-clean-search我倒是找到了,但它这里后面并不是1或2这种数字啊,这个也没法修改吧?
chifeiyen 发表于 2020-5-24 13:05
好的,我研究一下,谢谢大大!
up-clean-search我倒是找到了,但它这里后面并不是1或2这种数字啊,这个也 ...
这个你可以去看看UserPatchConst.per(论坛就有,搜索即可),或者Promisary文件夹里似乎有个叫“const.per”的文件,里面定义了很多的常数(其实就是用一串英文来指代一个数字,比如action-default表示的就是数字0,这方面可以去看看“CPSB”官方教程,在本版块的置顶帖里就有)
页:
[1]