仇恨
游戏中的各类“索敌”机制往往都依赖于仇恨这一系统,而仇恨排序、筛选的过程分为两个部分:权重计算和规则排序。而权重计算又分为“仇恨值计算”与“仇恨过滤器(postFilter)规则计算”两步。
仇恨值
每个单位的仇恨值都会根据自身的实体类型选用不同的计算式:
- 敌人类目标的仇恨值 = 1000 * 嘲讽等级 - 路径距离
- 若所在地块可到达目标路径点,则路径距离为:终点距离(以所在地块的坐标为起点,直接串联所有路径点的到终点曼哈顿寻路距离之和,“传送门”之间的距离除外)+修正值(先取“自身所在具体坐标→当前地块中心”的向量V,然后取前进方向上这个向量V的投影值(可负))。单位为“格”,
- 若所在地块不可到达目标路径点,或自身处于地图外,则路径距离为:当前坐标至当前目标路径点的直线距离。单位为“格”,
- 通俗易懂的来讲,这一仇恨值计算方式可以理解为“自身离终点/路径点越近,仇恨值越高”。
- 角色类目标的仇恨值 = 10000 * 嘲讽等级 + 创建时间
- 创建时间为从“战斗开始”到计算的该单位创建时取得的当前战斗计时,其上下限为[0,10000],每个单位一经取值则不再变化。单位为秒。
由于角色类的仇恨值在无嘲讽的情况下等同于其创建时间,而创建时间具有上限,因此可以认为10000s(≈2.78h)之后部署的所有角色类单位是“同时部署”的,在相同嘲讽等级情况下拥有相同的仇恨值。 - 通俗易懂的来讲,这一仇恨值计算方式可以理解为“越晚部署/出现,仇恨值越高”。
- 创建时间为从“战斗开始”到计算的该单位创建时取得的当前战斗计时,其上下限为[0,10000],每个单位一经取值则不再变化。单位为秒。
- 仇恨值的类型为32bit的float型变量。
仇恨过滤器(索敌方式)
- 仇恨过滤器(postFilter)即为最常说的“索敌方式”,每次索敌往往都需要框定所有可选索敌目标单位,列成一份列表(默认为实体创建顺序),对列表进行一次过滤器排序;仇恨过滤器可能会对仇恨值进行二次计算,可能根据仇恨值(或根据其他数值)对目标列表进行排序、筛选、甚至打乱。
- 仇恨过滤器最近一次更新时,参考的游戏客户端版本号为1.8.01(简体中文版客户端)。该版本客户端中共有45个仇恨过滤器,5个二次过滤器。其中有10个占位用的仇恨过滤器(未实装进游戏或从未被使用过)。
- 下面提到的“参考值”为一个32bit的float型变量,若无特殊说明,使用到参考值进行排序时,将根据列表中每个单位的参考值,对索敌列表进行一次稳定性排序(逻辑类似插入排序法),最后列表中最靠前(即参考值最小)的一个或数个单位将会被此次仇恨过滤器筛出,成为此次“索敌”的目标。
- 因为排序算法具有稳定性,并不会改变同值项的顺序,所以在情况下目标之间的顺序将会保持为默认的实体创建顺序,故这一情况下,索敌者将无关乎具体数值,优先选择更早创建(通常是部署)的单位。
- 过滤器在比较两个参考值时默认省略小数点后第3位之后的小数,因此参考值较为接近的情况下可能会因此被过滤器视为参考值相同。虽然默认为保留到第3位,但大部分过滤器更常用的是保留到第1位。
- 由于仇恨过滤器之间的差距过大,此处会将它们分章节而非列表格进行介绍。
全部
ID: 0 | ALL
不进行排序,直接使用默认的实体创建顺序。
典型使用者:各类群体攻击、无差别攻击。
终点距离升序
ID: 1 | DIST_TO_EXIT_ASC
不使用仇恨值,直接使用单位的终点距离(见上方“仇恨值”部分)作为参考值进行排序。
即“终点距离越短越容易被选中”。
暂未被使用。
生命值比例升序
ID: 2 | HP_RATIO_ASC
不使用仇恨值,直接使用单位的生命值百分比作为参考值。
即“生命值(百分比)越低越容易被选中”。
典型使用者:苦艾一技能、始海穿刺者、富营养的穿刺者。
生命值比例升序(满生命值除外)
ID: 3 | HP_RATIO_NOT_FULL_ASC
排除所有满生命值单位。
不使用仇恨值,直接使用单位的生命值百分比作为参考值。
即“除满生命值外,生命值(百分比)越低越容易被选中”。
典型使用者:各类医疗干员的普通治疗、各类治疗技能等。
仇恨降序
ID: 4 | HATRED_DES
参考值为仇恨值的相反数
即“仇恨值越高越容易被选中”。
典型使用者:一般的攻击、技能索敌、甚至一小部分群体攻击都是这个
仅生命值未满目标
ID: 5 | HP_RATIO_NOT_FULL
排除所有满生命值单位。
不进行排序,直接使用默认的实体创建顺序。
典型使用者:(待补充)
优先飞行单位,仇恨降序
ID: 6 | HATRED_DES_FLY_FIRST
参考值为仇恨值的相反数;若为非飞行单位,参考值+1000000
即“飞行单位更容易被选中,然后仇恨值越高越容易被选中”。
仅安德切尔使用,一般的速射手不会使用这一仇恨过滤器。
优先远程单位,仇恨降序
ID: 7 | HATRED_DES_RANGED_FIRST
参考值为仇恨值的相反数;若为非“图鉴中【攻击方式】包含远程的敌人”,参考值+1000000
即“远程单位更容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
防御降序
ID: 8 | DEF_DES
参考值为 防御值 * (-1000) - 仇恨值
即“防御值越高越容易被选中,然后仇恨值越高越容易被选中”。
史都华德、刻俄柏二技能
防御升序
ID: 9 | DEF_ASC
参考值为 防御值*1000-仇恨值
即“防御值越低越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:神射手
距离来源距离降序
ID: 10 | DIST_TO_SOURCE_DES
不使用仇恨值,直接取单位与自身的距离平方的相反数作为参考值。
即“距离自身越远越容易被选中”。
典型使用者:钩索师
距离来源距离升序
ID: 11 | DIST_TO_SOURCE_ASC
不使用仇恨值,直接取单位与自身的距离平方作为参考值。
即“距离自身越近越容易被选中”。
典型使用者:推击手、工程蓄水炮
只选未眩晕目标,仇恨降序
ID: 12 | NOT_STUNNED_HATRED_DES
排除所有晕眩的单位。
参考值为 仇恨值的相反数。
即“除眩晕单位外,仇恨值越高越容易被选中”。
典型使用者:萨卡兹术师的捆绑技能
距离来源垂直距离升序
ID: 13 | DIRECTIONAL_DIST_TO_SOURCE_ASC
不使用仇恨值,计算“来源→单位”的向量V,取向量V在来源朝向方向上的投影值作为参考值进行排序。
可以粗略的理解为“横坐标(左右朝向)上或纵坐标上(上下朝向),距离自身越近越容易被选中”。
典型使用者:食铁兽二技能
随机
ID: 14 | RANDOM
不使用仇恨值,不进行排序,随机打乱。
典型使用者:刻刀一技能;艾雅法拉的3技能与阿米娅的2技能不使用这个。
生命值降序
ID: 15 | HP_DES
参考值为 生命值 * (-1000) - 仇恨值。
即“生命值(数值)越高越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:W三技能
生命值升序
ID: 16 | HP_ASC
参考值为 生命值 * 1000 - 仇恨值。
即“生命值(数值)越低越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
攻击力降序
ID: 17 | ATK_DES
参考值为 攻击力 * (-1000) - 仇恨值。
即“攻击力越高越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
攻击力升序
ID: 18 | ATK_ASC
参考值为 攻击力 * 1000 - 仇恨值。
即“攻击力越低越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
最大血量降序
ID: 19 | MAX_HP_DES
参考值为 最大生命值 * (-1000) - 仇恨值。
即“最大生命越高越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:鼠王唱沙
最大血量升序
ID: 20 | MAX_HP_ASC
参考值为 最大生命值 * 1000 - 仇恨值。
即“最大生命越低越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:鼠王沙暴
优先正前方,曼哈顿距离升序
ID: 21 | FORWARD_FIRST_MANHATTAN_ASC
对于自身朝向的“正前方”的单位:参考值为 1000*曼哈顿距离[1] - 仇恨值。
对于除此之外的单位:参考值为 1000000*曼哈顿距离 - 仇恨值。
可以粗略的理解为“先看正前方的单位,距离越近越容易被选中,然后仇恨值越高越容易被选中;然后再看其他单位,距离越近越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:阿的两个爆发剂技能
优先未阻挡目标,仇恨降序
ID: 22 | HATRED_DES_UNBLOCKED_FIRST
参考值为仇恨值的相反数;被阻挡单位参考值+1000000
即“被阻挡的单位优先,然后仇恨值越高越容易被选中”。
典型使用者:刻俄柏1技能
生命值未满目标中随机
ID: 23 | HP_NOT_FULL_RANDOM
排除所有生命值未满的单位
不使用仇恨值,不进行排序,排除后随机打乱。
典型使用者:清流二技能
优先隐形目标,仇恨降序
ID: 24 | HATRED_DES_INVISIBLE_FIRST
参考值为仇恨值的相反数;不持有隐匿单位参考值+1000000。
即“持有隐形的单位优先,然后仇恨值越高越容易被选中”。
典型使用者:极境二技能
优先最远,仇恨降序
ID: 25 | HATRED_DES_DIST_FARTHER_FIRST
计算来源与单位之间的直线距离,参考值为 -1000000 * 直线距离 - 仇恨值。
即“距离来源越远越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:爱国者投枪
|
优先最近,仇恨降序
ID: 26 | HATRED_DES_DIST_NEARER_FIRST
计算来源与单位之间的直线距离,参考值为 1000000 * 直线距离 - 仇恨值。
即“距离来源越近越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
重量降序
ID: 27 | MASS_DES
参考值为 重量等级 * (-1000) - 仇恨值。
即“重量越高越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:攻城手
重量升序
ID: 28 | MASS_ASC
参考值为 重量等级 * 1000 - 仇恨值。
即“重量越低越容易被选中,然后仇恨值越高越容易被选中”。
典型使用者:(待补充)
优先沉睡单位,仇恨降序
ID: 29 | HATRED_DES_SLEEPING_FIRST
参考值为仇恨值的相反数;不持有沉睡单位参考值+1000000。
即“持有沉睡的单位优先,然后仇恨值越高越容易被选中”。
典型使用者:瑕光
生命值百分比升序,具有可抵抗状态者优先
ID: 30 | HP_RATIO_ASC_CONTAINS_STATUS_RESISTABLE_BUFF_FIRST
不使用仇恨值。以剩余血量比例为参考值进行排序;不具有可抵抗状态的单位参考值+1000000。
即“仇恨值越高越容易被选中,具有可抵抗状态者优先”。
典型使用者:絮雨
忽略免疫睡眠目标,仇恨降序
ID: 31 | HATRED_DES_IMMUNE_SLEEPING_EXCLUDE
排除持有沉睡抗性或是沉睡免疫的目标。
参考值为 仇恨值的相反数;未被阻挡单位+1000000权重
即“除免疫睡眠的目标外,仇恨值越高越容易被选中”。
典型使用者:爱丽丝2技能
元素值降序
ID: 32 | EP_DES
不使用仇恨值,以全种类元素中的最低值降序为参考值进行排序。
即“显示的元素值越低越容易被选中”。
典型使用者:首言者侵蚀液泡
仇恨降序,被阻挡优先
ID: 33 | HATRED_DES_BLOCKED_FIRST
参考值为 仇恨值的相反数;未被阻挡单位+1000000权重
即“仇恨值越高越容易被选中,被阻挡的单位优先”。
典型使用者:歌蕾蒂娅2技能
创建时间降序
ID: 34 | CREATED_TIME_DES
不使用仇恨值,直接使用单位的创建时间(见上方“仇恨值”部分)作为参考值进行排序。
即“越晚部署的越容易被选中”。
典型使用者:(待补充)
创建时间升序
ID: 35 | CREATED_TIME_ASS
不使用仇恨值,直接使用单位的创建时间(见上方“仇恨值”部分)的相反数作为参考值进行排序。
即“越早部署的越容易被选中”。
典型使用者:(待补充)
满生命值目标以外,血量比例升序,优先我与我的召唤物
ID: 36 | HP_RATIO_NOT_FULL_ASC_MY_TOKEN_OR_ME_FIRST
排除所有生命值均为满的单位。
若自身的召唤物处于范围内(且生命值不为满),排序前将自身的召唤物强制加入到列表末尾(无视禁疗)。
不使用仇恨值,以生命值百分比为参考值;自身与自身的召唤物以外的单位参考值+1000000。
即“生命值(百分比)最低者更容易被选中,优先治疗”
典型使用者:凯尔希(其召唤物为Mon3tr)
元素值升序,生命值百分比升序优先,仅不全满
ID: 37 | EP_MIN_ASC_HP_RATIO_ASC_FIRST_NOT_ALL_FULL
排除所有元素值(全种类)与生命值均为满的单位。
不使用仇恨值,不处理参考值,根据“全种类元素值中的最低值”升序排序,出现同值时单位之间以生命值百分比升序排序。
即“显示元素值最低者更容易被选中,然后生命值(百分比)最低者更容易被选中”
典型使用者:行医的技能
生命值百分比升序,元素值升序优先,仅不全满
ID: 38 | HP_RATIO_ASC_EP_MIN_ASC_FIRST_NOT_ALL_FULL
排除所有元素值(全种类)与生命值均为满的单位。
不使用仇恨值,不处理参考值,根据生命值百分比升序排序,出现同值时单位之间以“全种类元素值中的最低值”升序排序。
即“生命值(百分比)最低者更容易被选中,然后显示元素值最低者更容易被选中”
典型使用者:行医通常状态下的治疗
血量百分比升序,创建时间降序优先
ID: 39 | HP_RATIO_ASC_CREATED_TIME_DES_FIRST
未知
典型使用者:琴柳2技能
仇恨降序,寒冷者优先,然后未冻结者
ID: 40 | HATRED_DES_COLD_FIRST_THEN_NOT_FROZEN
未知
典型使用者:灵知3技能
网格位置,行小,列大
ID: 41 | GRIDPOS_BY_SMALL_COL_BIG_ROW
未知
阻挡数降序
ID: 42 | BLOCK_COUNT_DES
未知
血量百分比升序,仅持有可抵抗状态者
ID: 43 | HP_RATIO_ASC_CONTAINS_STATUS_RESISTABLE_BUFF
未知
重量降序,沉睡者优先
ID: 44 | MASS_DES_SLEEPING_FIRST
未知
二次过滤器
在进行完过滤器排序后,可能还会进行规则排序;有时会使用到二次过滤器(secondaryFilter):
ID | 名称 | 解释 |
---|---|---|
0 | FLY_FIRST | 优先飞行(所有的对空狙击) |
1 | RANGED_APPLYWAY_FIRST | 优先“图鉴中【攻击方式】包含远程的敌人”(安德切尔) |
2 | SPECIFIED_FILTER_TAG | XXtag优先(需要配合filterTag变量填写对应的tag,例如格劳克斯) |
3 | SPECIFIED_BUFF | 优先含有指定Buff(以BuffKey为识别目标)的单位 |
4 | SPECIFIED_BUFF_PAIR_OR | 优先含有复数指定Buff(以BuffKey为识别目标)的单位 |
- ↑ 两点在南北方向上的距离加上在东西方向上的距离,即两点的横坐标之差的绝对值+纵坐标之差的绝对值。