newtonerdai 发表于 2020-8-6 01:43:09

通过AI计算Del和触发引起的不常规单位损失或独立化单位数量

本帖最后由 newtonerdai 于 2020-8-6 10:48 编辑


经过测试发现,19号、44号、136号、154号资源的作用与之前我们了解到的作用有所不同。详见下表(红色为特别注意的,作用有变的资源)


IDDE官方资源中文名DE官方资源英文名new2翻译资源名称预设值作用解释
4人口余数Population Headroom人口余量0剩余的人口空间,为0时无法生产单位
11当前人口Current Population人口占用0当前人口占用数。游戏里的顶部人口栏实质为/+
19总单位数Total Units Owned累计拥有过的单位数0拥有过的单位都记且只记1次,训练中的不算,不会因损失单位而减少
20杀敌数Units Killed杀敌数0军事成就统计
44杀死比率Kill Ratio杀敌比率0=max{0,杀敌数量-失去单位数(Del和因触发失去/独立化的也算)}。系统实时计算
136被 P1 击杀Kills by P1因 P1 损失单位0被己方投石车之类单位杀死的,算入因自己损失的单位(下同)
137被 P2 击杀Kills by P2因 P2 损失单位0
138被 P3 击杀Kills by P3因 P3 损失单位0
139被 P4 击杀Kills by P4因 P4 损失单位0
140被 P5 击杀Kills by P5因 P5 损失单位0
141被 P6 击杀Kills by P6因 P6 损失单位0
142被 P7 击杀Kills by P7因 P7 损失单位0
143被 P8 击杀Kills by P8因 P8 损失单位0
152其他击杀值Value Killed by Others因其他玩家损失单位积分0被其他玩家击杀的单位的积分
154其他击杀数Killed by Others因其他玩家损失单位0被其他玩家击杀/招降的单位数,Del和被触发杀死/移除/改权的不算入


于是我利用这些资源的特性,做了下面的AI片段。
其功能有:

[*]1、计算某个同盟玩家或自己的,因Del、触发改权/摧毁/损害/移除而损失的单位数量。
[*]2、计算某个同盟玩家或自己的,因Del、触发改权/摧毁/损害/移除而损失、以及已独立化的单位数量。
[*]3、计算某个同盟玩家或自己的,已独立化的单位数量。
注:“独立化”是指因触发改权、触发改单个单位属性、招降等操作,使得某个单位无法再享受新研发的科技加成的现象。可以理解为“独立于科技树之外”。

先放一个效果图:

(图中,鞑靼骑兵因改名而已独立化,其他倒地的士兵为我Del的,P3(绿色)与P1(蓝色,我)是盟友关系。可见AI可以正常计算独立化单位数量,也可以计算因Del或触发杀伤而损失的单位)





(defconst temp 1)               ;一次性临时储存数据
(defconst resource-amount 34)         ;常数。代表UP1.5的事实“资源数量”的编号34


;—————————计算Del和触发引起的不常规单位损失—————————

(defconst population-now 100)         ;目标编号。储存 当前时刻 P1 人口占用 (11号资源)
(defconst population-before 101)      ;目标编号。储存 上一刻 P1 人口占用 (11号资源)
(defconst total-owned-units-now 102)    ;目标编号。储存 当前时刻 P1 累计拥有过的单位 (19号资源)
(defconst total-owned-units-before 103) ;目标编号。储存 上一刻 P1 累计拥有过的单位 (19号资源)
(defconst lost-units-now 104)         ;目标编号。储存 当前时刻 P1 累计被其他玩家杀死单位 (154号资源)
(defconst lost-units-before 105)      ;目标编号。储存 上一刻 P1 累计被其他玩家杀死单位 (154号资源)
(defconst Irregular-Lost-Total 106)   ;目标编号。储存 [不常规单位损失]累计数量

;初始化
(defrule
    (true)
=>
;    (up-change-name "AI")
    ;将初始为-1的值归零(避免从-1开始累加)
    (set-goal Irregular-Lost-Total 0)

    ;获取数据,作为下一次遍历的“上一刻数据”
    (up-get-player-fact 1 resource-amount 11 population-before)
    (up-get-player-fact 1 resource-amount 19 total-owned-units-before)
    (up-get-player-fact 1 resource-amount 154 lost-units-before)
    (disable-self)
)

(defrule
    (true)
=>
    ;获取数据 x 3
    (up-get-player-fact 1 resource-amount 11 population-now)
    (up-modify-goal population-now g:- population-before)    ;人口占用数 变动值(单刻新增)
;    (up-chat-data-to-all "P1 人口占用数 + %d" g: population-now)

    (up-get-player-fact 1 resource-amount 19 total-owned-units-now)
    (up-modify-goal total-owned-units-now g:- total-owned-units-before)    ;累计拥有过的单位 变动值(单刻新增)
;    (up-chat-data-to-all "P1 累计拥有过的单位 + %d" g: total-owned-units-now)

    (up-get-player-fact 1 resource-amount 154 lost-units-now)
    (up-modify-goal lost-units-now g:- lost-units-before)    ;P1累计被其他玩家杀死单位 变动值(单刻新增)
;    (up-chat-data-to-all "P1 累计被其他玩家杀死单位 + %d" g: lost-units-now)
)
(defrule
    (true)
=>
    ;小算【P1死掉(损失)的单位数变动值 = - (人口总数变动值 - 累计拥有过的总数变动值)】
    (up-modify-goal population-now g:- total-owned-units-now)    ;P1死掉(损失)的单位数 变动值(单刻新增)
    (up-modify-goal population-now g:neg population-now)
;    (up-chat-data-to-all "P1 死掉(损失)的单位数 + %d" g: population-now)

    ;总算【P1不常规损失的单位数变动值 = P1死掉(损失)的单位数变动值 - P1累计被其他玩家杀死单位变动值】
    (up-modify-goal temp g:= population-now)
    (up-modify-goal temp g:- lost-units-now)

    ;累加算【P1不常规损失的单位累计数 = ∑ P1不常规损失的单位数变动值】
    (up-modify-goal Irregular-Lost-Total g:+ temp)
    (up-chat-data-to-all "P1 不常规损失的单位累计数 = %d" g: Irregular-Lost-Total)
    ;注:“不常规损失”包括因Del、触发改权/摧毁/损害/移除而损失的单位。不包括被招降、己方溅射杀死、被其他玩家/盖亚杀死的单位。

    ;获取数据,作为下一次遍历的“上一刻数据”
    (up-get-player-fact 1 resource-amount 11 population-before)
    (up-get-player-fact 1 resource-amount 19 total-owned-units-before)
    (up-get-player-fact 1 resource-amount 154 lost-units-before)
)


;—————————计算包含Del、触发和独立化引起的强制不常规单位损失—————————

(defconst kill-others 107)      ;目标编号。实时储存P1杀敌数 (20号资源)
(defconst kill-ratio 108)         ;目标编号。实时储存P1杀敌比率 (44号资源)
;(defconst lost-units-now 104)    ;目标编号。实时储存P1损失单位 (154号资源) (注:前面已定义过,这里不重复定义)

(defrule
    (true)
=>
    ;获取数据 x 3
    (up-get-player-fact 1 resource-amount 20 kill-others)
;    (up-chat-data-to-all "P1 杀敌数 = %d" g: kill-others)

    (up-get-player-fact 1 resource-amount 44 kill-ratio)
;    (up-chat-data-to-all "P1 杀敌比率 = %d" g: kill-ratio)

    (up-get-player-fact 1 resource-amount 154 lost-units-now)
;    (up-chat-data-to-all "P1 损失单位 = %d" g: lost-units-now)

    ;计算【P1强制不常规损失的单位数 = P1杀敌数 - P1损失单位 - P1杀敌比率】(注:独立化的单位也算入杀敌比率中的损失部分)
    (up-modify-goal temp g:= kill-others)
    (up-modify-goal temp g:- kill-ratio)
    (up-modify-goal temp g:- lost-units-now)
;    (up-chat-data-to-all "P1 强制不常规损失的单位数 = %d" g: temp)
    ;注:“强制不常规损失”包括因Del、触发改权/摧毁/损害/移除、各种独立化而损失的单位

    (up-modify-goal temp g:- Irregular-Lost-Total)
    (up-chat-data-to-all "P1 独立化的单位数 = %d" g: temp)
)


页: [1]
查看完整版本: 通过AI计算Del和触发引起的不常规单位损失或独立化单位数量