WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。

全站通知:

战斗逻辑的构造与解释

阅读

    

2023-02-11更新

    

最新编辑:欣酱是萌欣吖

阅读:

  

更新日期:2023-02-11

  

最新编辑:欣酱是萌欣吖

来自地下城堡2WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
欣酱是萌欣吖
这一定是有毒


此页面正在施工中,或者内容正在优化中,请不要增加/删除内容

前言

终极计算器

  wiki团队的基建组——天上人间,在21世纪的最重大的项目是:完成大计算器。输入你的队伍,选择要打的怪物,wiki将全真模拟游戏中的情况。此前我们有众多小计算器,他们都是针对某个小领域的计算,而这一次,我们do it once, and for all. 因为组里各人使用的编程语言、开发平台不同,我们只能共享交流算法,大家会见到多个版本。wiki测试服是我基于windows开发的桌面程序。mac用户需要等待不由制作出大计算器网页版。

课程介绍

  要写出完整的模拟程序,我就被迫要了解整个游戏全部的机制,并把它们整合到一起。现在算法完成了,我不妨分享一下这整个的战斗逻辑。
  《战斗逻辑的构造与解释》,即是一门全面介绍战斗机制的地堡课程,也是wiki测试服的高阶使用技巧。这是一门大水课,没有期末考试,只要赏脸看一遍,就是满昏!
  本课程难度较大,含有大量计算(虽然都是小学水平的计算,但计算终究是计算),适合热爱技术的萌新和中期玩家查漏补缺。
  还有一种,玩上头了,资源都花光了,卡在某个boss,这时候一如果一直盯着自己的号左看右看,最终就会控制不住地把自己的手伸向右上角,几百个大洋,一通忙活,狗托们都出货了,在群里秀你一脸,而你没有,几百大洋打了水漂,于是又开始懊悔起来。这是何苦来呢!推不动图了,就老实咸鱼,咸鱼之际,来听我的课吧。

先修课

  出征章节的7篇攻略
  程序设计中的函数概念。我们这里说的函数,不是枯燥乏味的数学,而是流程的意思。我们吃苹果,要先买苹果,然后洗,然后削皮,然后啃,最后把苹果核扔掉,这就是一个流程。函数我们用大括号括起来。现在我就可以用“吃苹果”来表示面连续的5个步骤:{买苹果,洗苹果,削苹果,啃苹果,扔果核}。以后就不需要再写出这5个步骤了。我说吃苹果,你就知道要干嘛了。具体自行百度。

课程资源

  wiki测试服

状态

状态

  在地堡中,状态不是你的冒险者今天吃得好不好,而是打的时候冒险者头上的那些小图标。
  两个“凡是”:凡是有对应图标的,都是状态。凡是没有对应图标的,都不是状态。

状态包含的信息

  每个状态包含八个信息:

  • 状态名称
  • 特效名称

  这两个的区别看图,看一眼就懂:
  特效名称与状态名称.jpg
  如果是技能带来的状态(火法的灼伤),就拿技能的名字(炎爆术)作为特效名称。
  只要状态名称一样,那就是同一个状态,那就会覆盖。只要状态名称不一样,就各不相干。而特效名称意义不大,后面会讲它是干啥用的。

  • 类型

  状态的类型有以下几种:力量buff,魔力buff,技巧buff,速度buff,护甲buff,抗性buff,hot,dot,物理增伤,魔法增伤,眩晕,反击。
  在wiki测试服中,debuff是数值为负数的buff。
  dot不是数值为负数的hot,因为hot受治疗效果属性影响,dot则被持续伤害属性加成。

  • 剩余持续时间
  • 每层的数值
  • 层数
  • 最大层数
  • 附加者

  附加者决定了状态吃不吃状态效果。如果附加者属于冒险队,状态就吃状态效果,否则就不吃。
  在wiki测试服中,火环负面的自残状态的附加者为空,进而不吃状态效果。用bool型变量SEA(state effext allowance)表示吃不吃状态效果,用它和状态效果相乘,这样吃状态的时候就是1*状态效果,不吃状态的时候就是0*状态效果 = 0.


状态的最终数值

SEA = 附加者属于冒险队 ? 1 : 0
状态数值 = 每层数值 * 层数 * (1+SEA*状态效果)
if(状态类型==dot) 状态数值*=附加者的持续伤害
if(状态类型==hot) 状态数值*=附加者的回复效果

  我们用一组统一的信息,表达了所有状态,用一个统一的公式,计算了所有状态。

被挂状态

  被挂状态有两种情况。队友上的增益,和来自装备的状态,都不受异常附加率的影响。敌方技能附带的状态,则要考虑异常。

挂上状态的概率 = 异常附加率 - 抗性/1000


  如果挂上了的话,就要把相应的状态附加上去。

   if(特效名称变了)  当前层数 = 1
   if(特效名称没变)  当前层数 = min(当前层数+1,最大层数)

  火法挂着灼伤,这时候来一下咒火的灼烧,现在是1层而不是2层——因为特效名称从炎爆术变成了诅咒之火。
  在不超过最大层数的前提下,层数会在被挂buff时加1。最大层数是可变的。火法的时候,最大层数是1,枯萎挂dot的时候,灼伤这个状态的最大层数就变成999了。

挂状态

  挂状态就是让对象被挂状态。“对象”分5种:对自身,对我方单体,对我方全体,对敌方单体,对敌方全体。

属性

属性有哪些

  讲完了状态,可以讲属性了。属性有28个,分别是:

  • 力魔技速体甲抗,武威
  • 物理伤害,魔法伤害,持续伤害
  • 物理单吸,物理群吸,魔法单吸,魔法群吸
  • 命中率,闪避率,暴击率,异常附加率
  • 卸负
  • 无视护甲,无视抗性
  • 物伤格挡,魔伤格挡
  • 回复效果,吸血效果,治疗效果,暴伤系数

  回复效果,在技能,特效或回春产生回复时有加成。
  吸血效果,在吸血时有加成,只存在于遗迹。
  治疗效果,在受到回复技能和吸到血时有加成,前两个是施加恢复,这个是受到恢复,也可以理解成治疗效果同时影响回复和吸血。治疗效果的变化都是乘或除。对面有个红审判,或者对面就是个抑制20%的怪,那么在开局的时候,我们的治疗效果就从1被乘了 (1 - 20%),变成80%。如果对面再来个红审判,那么80% * (1 - 20%),等于64%。如果拿红审判的人阵亡了,64% / (1 - 20%),回到80%。

七维属性计算

  战斗时,七维属性(力魔技速体甲抗)由四部分相加构成:

属性 = 面板 + 增幅 + 各种状态


  举个例子,具体到力量,就是:力量 = 面板力量 + 增幅力量 + 各种类型为力量buff的状态。状态可能有多种,但增幅最多只有一个,因为增幅只生效一瞬间,并且装备特效只要生效一个,后续就不再判定了。
  这节课的重点是这个蛮子的例子。假设一场紧张而激烈的战斗即将拉开帷幕,我们的蛮子已经捯饬好了:
  狂战:裂狱.png通魔战铠.png战鬼之心.png金蛮族勇士护腕★.png
  倘若面板力量是10000,遗迹状态100%,在出手瞬间他是多少力量?
  在开局时,裂狱,鬼心,护腕依次触发。按照顺序,首先是裂狱:

裂狱附加的状态

  • 类型:力量buff
  • 剩余持续时间:永久
  • 层数:1
  • 每层的数值:

  裂狱是提高100%的力量,而什么是力量?力量 = 面板力量 + 增幅力量 + 各种力量buff。此时没有增幅,也没别的状态,它们都是0。为了清楚,我仔细写一遍:

   地狱怒吼的每层数值
 = 100% * 力量
 = 100% * (面板力量 + 增幅力量 + 各种力量buff)
 = 100% * (10000 + 0 + 0)
 = 10000 

  结合上面给的公式最终数值 = 每层数值 * 层数 * (1+SEA*状态效果),最终数值可以列式计算:

   地狱怒吼的最终数值
 = 地狱怒吼的每层数值 * 层数 * (1+SEA*状态效果)
 = 10000 * 1 * (1 + 1*100%)
 = 20000

鬼心附加的状态

  鬼心提高50%的力量。什么是力量?力量 = 面板力量 + 增幅力量 + 各种力量buff。
  此时没有增幅,力量buff有一个裂狱的地狱怒吼。列式计算:

   战鬼徽记的每层的数值
 = 50% * 力量
 = 50% * (面板力量 + 增幅力量 + 各种力量buff)
 = 50% * (10000 + 0 + 地狱怒吼的最终数值)
 = 50% * (10000 + 20000)
 = 15000
 
   战鬼徽记的最终数值
 = 战鬼徽记每层的数值 * 层数 * 状态效果加成
 = 战鬼徽记每层的数值 * 层数 * (1+SEA*状态效果)
 = 15000 * 1 * (1 + 1*100%)
 = 30000

护腕附加的状态

   野蛮怒吼的每层的数值=...=9000
   野蛮怒吼的最终数值=...=18000

开始动手了

  以上都是在战斗开始时发生的事情。现在蛮子要出手了,假设触发了通魔的特效,增幅100%力量。什么是力量?力量 = 面板力量 + 增幅力量 + 各种力量buff!

   增幅力量
 = 100% * 力量
 = 100%*(面板力量+增幅力量+地狱怒吼+战鬼徽记+野蛮怒吼)
 = 100% * (10000+0+20000+30000+18000)
 = 78000

  终于到了抡出斧子的那一刻!乾坤一击!对敌方 力量 * 6。什么是力量?力量 = 面板力量 + 增幅力量 + 各种力量buff。这时候蛮子真正出手的时候的力量我们终于可以计算了:

   力量
 = 面板力量+增幅力量+地狱怒吼+战鬼徽记+野蛮怒吼
 = 10000+78000+20000+30000+18000
 = 156000

  我们算了很多很多,但是无非就是两个小式子:

属性 = 面板 + 增幅 + 各种状态数值


状态数值 = 每层数值*层数*(1+SEA*状态效果)


  不光是力量,所有25个属性都是这么算的,只不过7维属性以外没有相应的状态了,都是0,就只有面板+增幅。有时候面板或增幅也没有,比如格挡,我们下面会说到环带来的都是增幅,所以格挡是没有面板的,但只要默认为0,就可以统一地认为是面板 + 增幅。
  为什么我们通常计算的时候没有这么麻烦呢?因为我们会一直记住当前是多少力量,每新考虑一个buff,就加入到当前力量里。这样对于我们来说非常轻松,但是计算机程序将面临一个巨大的问题:左脚踩右脚上天!唔,事实上,你也会上天,只不过你每个装备/技能都只计算了一次。如果事无巨细地预测战斗中每一帧细节,那么传法每次cd好了就得奶出来才行,这时候问题就暴露出来了:加多少技巧呢?如果加当前技巧的0.3,那没事了,上天!或者一个更现实的问题:如果奶了一口又不奶了,减多少技巧?
  现在是不是有一点理解为什么地堡有巧手bug了?地堡的代码很烂,没有像我们这样计算属性,导致频繁上天。地堡程序员是怎样debug的呢?每次要计算的时候,就从头开始计算,从面板开始重新“开局”,重新依次挂buff,重新计算属性。所以绿龙的buff一直在刷新,由此为巧手bug埋下了祸根。
  而我们是怎么处理的呢?非常简单!只需赋buff之前,先清空他自己的这个buff,令其每层数值为0。
  传法带个绿龙开奶时(设面板为x):

   令技巧提升buff每层数值为0。若触发了巧手:
   增幅技巧
 = 100% * 技巧
 = 100% * (面板技巧+增幅技巧+技巧提升+凝视)
 = 100% * (x + 0 + 0 + 0.3x)
 = 1.3x
   
   技巧提升buff的每层数值
 = 5 + 0.3 * 技巧
 = 5 + 0.3 * (面板技巧+增幅技巧+技巧提升+凝视)
 = 5 + 0.3 * (x + 1.3x + 0.3x)
 = 5 + 0.3 * 2.6x

  下一次奶时,我们还把 技巧提升buff的每层数值 赋值为 0,然后再去计算它,你看看,列出来的式子永远都是上面这样,不会上天。
  这,就是属性计算的真正的逻辑。

其他属性

  其他属性不受状态影响,不被特效增幅,但是可能受环的影响

  • 物理伤害 = (1 + 面板物伤 + 环物伤) * (1 + 遗迹祈愿物伤)
  • 魔法伤害 = (1 + 面板魔伤 + 环魔伤) * (1 + 遗迹祈愿魔伤)
  • 持续伤害 = (1 + 面板持续 + 环持续)
  • 回复效果 = 1 + 面板回复 + 环回复 + 遗迹祈愿回复

  遗迹的物伤和魔伤是单独的乘区。回复是否是单独的乘区?欢迎测试后评论区留言。   环的物伤可以理解成瞬间增幅,但是深入考察后发现这种处理不妥。wiki测试服的模拟现在是非常贴近真实情况的——模拟的冒险者佩戴着模拟的环。环的物伤不是固定的,而是实时计算的。带着孤儿环和咒火的A与队友并肩战斗,此时如果A自己阵亡了,咒火的伤害会立即变化。

欠债机制

  状态buff也可以是debuff,如果减得太多,往往会减成负数,但最终不会是负数的,最多减到0。所以严谨地表达这些属性,需要在他们被计算出来之后,如果结果是负数,就得到0。这就是作业的答案。力量速度也不例外,下限是0。用函数max(a,b)输出a,b中大的那个数,属性的计算式应补充为:

属性 = max(面板+增幅+各种状态buff, 0)


  如果,甲被对面狠狠地、无可救药的破光了,这时候神官奶上一口,能奶上护甲吗?答案是没有用的,直观地说,被对面破甲破的裤子都不剩,是不够的,还会欠债。不把欠的补上,休想护甲是正的。
  我们叙述的属性计算逻辑在这里也是管用的。对面减甲很猛,那么护甲衰减buff的数值就是-99999,这时候神官给一个数值为9的护甲提升buff,照单全收,只不过最后要加所有护甲buff的总和,这一加起来,谁都敌不过这个-99999,最后就是负数,就是0。
  魔煞短刃魔煞短刃.png害怕减力吗?怕的。它的特效是增幅力量,但是,最终看力量的时候,减力是作为一种状态,都被加起来,增幅的力量是要去还债的。

装备特效

类型

  1. 状态 e.g.绿龙晶坠.png
  2. 增幅 e.g.亘古之守望.png
  3. 连击 e.g.亘古之回响.png
  4. 回复 e.g.荒兽骨锤.png
  5. 真伤 e.g.魔石盾牌.png

  圣庭的特效,不属于回复类,而是属于状态这一类,而它的状态的类型为“hot”。

触发条件

  1. 战斗开始
  2. 发动物理攻击
  3. 发动魔法攻击
  4. 使用回复技能
  5. 受到物理攻击
  6. 受到魔法攻击

  在wiki测试服的JSON/装备数据.json中,“类型”和“触发”就是上面的这些。

装备触发的顺序

   如果触发条件是“战斗开始”:
       分别按照触发条件和概率,触发环、武器、衣服、饰品1、饰品2、魔石特效。
   而如果是其他触发条件:
       依次按照触发条件和概率,触发武器、衣服、饰品1、饰品2、魔石特效
       (期间只要触发了,就结束)

  其实,这就是一个函数了。我们起个名字,叫做“准备”。他有个参数叫“触发条件”。他会跟据触发条件,调度各个装备特效的触发。以后我只要写:

   准备(发动物理攻击)

  就代表以发动物理攻击为“触发条件”,来执行上面的函数。
  如果一个穿着凯旋骑士.png飓风之铠.png抗争者之心.png巨蛇之盾.png的黑骑在挨打,那么:

   准备受到物理攻击

  它就代表:

   依次按照触发条件和概率,触发武器、衣服、饰品1、饰品2、魔石特效
   (期间只要触发了,就结束)

  凯旋是没有特效的。风甲100%触发特效,触发了后面就中止不看了,最后执行的就是:

   受到物理攻击时,风甲的特效。

  瞧,人话,都是人话。黑骑要挨打了,你就说让不让我做准备吧。这一准备,就把特效全部考虑逸当了。我们还没讲到挨打的流程,但想来你已经预想到了到时候会是怎么样。打人的人先来一个准备(发动魔法攻击),攻击时的装备特效就考虑好了,然后才举起黄瓜杖。挨打的人先来一个准备(受到魔法攻击),防御特效也到位,然后才把屁股撅起来。现在问题就聚焦到了一个点: 单个装备的触发函数是什么一个流程呢?

具体某个装备的触发

环的特效

  环的特效,严格来说只要处理一个东西:自杀火环在战斗开始时,给自己上一个dot。其他的环的特性,都不宜作为一个特效来处理,而是在用到的时候实时计算,啥时候用到啥时候算。特效只有开局、打人和挨打的时候,会通过准备函数来处理。

增幅类特效

  这个就很简单,就是去赋值增幅属性嘛。

   增幅力量 = 100% * 力量

  至此,lecture 2 和 lecture 1 开始联系起来了:什么是力量?

状态类特效

  状态类特效首先跟据系数计算“每层数值”,然后挂状态,即让“对象”被挂状态。
  状态类特效发生在技能释放完之后。因此要把这个状态先暂时存着,等技能放完了,技能附带的状态也附带完了,最后才打出去。   所以,流血甲出特效的那一下,是吃不到自己的技巧buff的。

连击类特效

   冷却时间增加-4秒。

  这一操作的妙用后面会解释。

回复类特效

真伤类特效

  回复类和真伤类特效就是按照特效描述,直接进行回血和扣血。

治疗抑制

  治疗抑制看上去是一个特效,其实可以说是两个特效,也可以说不是特效。
  在战斗开始时,把敌方全体的回复系数和吸血系数(1-治疗抑制的比例)。
  在阵亡时,把敌方全体的回复系数和吸血系数除以(1-治疗抑制的比例)

举个夜莺流血甲的例子

  夜莺:红驱魔匕首★.png符文师圣铠★.png绿龙晶坠.png天使之轮.png
  在发动技能之前,我只说一句话:

   准备(发动物理攻击)

  它就意味着(发动物理攻击时,绿龙没特效,天使轮100%,乌鸦被覆盖):

   发动物理攻击时,驱魔的特效。如果触发了,就中止。
   发动物理攻击时,流血甲的特效。如果触发了,就中止。
   发动物理攻击时,天使轮的特效。(100%触发)

  先看匕首,匕首“的特效”是这么处理的:

   以(75%)的概率,如果触发,增幅技巧=2.2*技巧

  假设没触发,于是接着去看流血甲:

   以(75%)的概率,如果触发,挂状态(...)
   对象:      对自身
   状态的信息:
       状态名称:  专注
       特效名称:  专注
       状态类型:  技巧buff
       持续时间:  8秒
       数值:     0.5 * 技巧
       (此时列式子计算技巧)
       最大层数:  1
       来源:     我的夜莺

  这一系列的连锁反应都只是一个小小的准备(发动物理攻击)所带来的!这就是lecture 2 的内容,我们把所有的装备特效,浓缩进了两个字:准备。
  舒服了。
  想一想开局的时候呢?只要一句准备(战斗开始),他就会分别调用各个装备的开局特效,战斗开始时走的流程是不中断的,所有装备都调用“的特效”,于是:

   火环给上了自残dot,匕首给上了思维链接,绿龙给上了灵视,天使轮给上了天使之颂和天使之佑。

  最终出手之前,调用一次准备(发动物理攻击),决定最后的增幅。此时再计算技巧,所有的增幅和状态已经全部就绪,只等着发动技能时的灵魂拷问:

什么是力量? 什么是技巧?


状态 - 时间

  挂状态与被挂状态的机制已经阐述过了,但还有一些没解决:

  • 到时间了,要自动把buff去掉
  • dot/hot要每过一秒扣/加血

  这些事情是需要不断地检查的,但你不可能一直盯着它这个状态——别的事儿不干啦?所以事实上是每过一段时间做一次检查。这个时间可能在55微妙左右,但我们不管他具体是多少,假设它叫做黑潮大陆的

普朗克时间


  这样我们的手机就不会日理万机了。它设置一个时钟,每过一个普朗克时间就提醒手机处理一下所有的状态。而在这个普朗克时间的剩余时间里,它可以从容不迫地调用很多次 准备(发动物理攻击) 函数,或者下载它的小电影。这个处理状态的函数就叫做“状态处理”好了。它的内容是:

  1. 把所有状态的剩余持续时间减去普朗克时间
  2. 对所有类型为dot的状态,如果它的剩余持续时间是整数秒,就跳dot;对所有类型为hot的状态,如果它的剩余持续时间是整数秒,就回春
  3. 去掉所有剩余持续时间为0的状态

技能 - 时间

  想必大家看状态已经看麻了,现在终于换口味了。技能冷却结束后需要放技能,这个也是每过一个普朗克时间就不断检查的。冒险者怎么知道自己放不放技能,cd还有多久呢?
  这就需要每个冒险者(和怪物)记住自己的两件事:冷却时间增加,和已等待时间。冷却时间增加,就是技能上面写的那个(冷却时间减少就当成增加一个负数)。已经等待的时间,就是从上次放技能开始经过的时间,记作WaitTime。然后这么算:
    卸负后力量 = max(1, 力量-卸负)
    力速比 = min(3, ⌊卸负后力量/(速度+1)⌋)
    CD = max(0.5, 1.5+力速比+冷却时间增加)
  力速比的向下取整符号⌊ ⌋是向下取整到0.1秒。
  前一节是状态处理函数,现在是冷却处理函数:

   将Wait增加一个普朗克时间
   计算CD
   如果Wait达到了CD,放技能,Wait置0
   否则憋着不放

  游戏中看到的冷却蓝条,显示的就是Wait/CD.

主函数

 开局时,
    按从左到右站位顺序,
       执行所有人(和怪)的准备函数:
       准备(战斗开始)
 然后设置一个时钟,每过一个普朗克时间就执行:
    按从左到右站位顺序,
       执行所有人(和怪)的冷却处理函数
    按从左到右站位顺序,
       执行所有人(和怪)的状态处理函数

  这就是整个地堡的战斗过程,通过函数的思想,它最后就只剩下了这几行,非常清晰。下面通过几个具体的例子,说明这个逻辑的准确性。

先发与连击

  在战斗开始时,Wait 和 冷却时间增加 都被初始化为0,这时候计算CD就是1.5+力速比。然后经过这么长时间,Wait不断增加,直到打出技能。
  先发的本质就是把 Wait 赋值为4.5(或者更大)。此时CD算出来一定没有Wait多,在第一个瞬间就出手了。
  连击的本质则是把 冷却时间增加 赋值为-4(或者更小),此时CD算出来一定是0.5,而Wait从0开始计时,经过0.5秒打出连击。

半门力速之谜

  计算一下半门祭祀的CD。什么是力量?这次这不重要,因为影兽假面卸负500,那么力量-卸负就是个负数,卸负后力量就是1.
  什么是速度?速度=max(0, 面板速度+增幅速度+各种速度buff),因为吃了一个巨额的减速,算出来肯定是负数,那么速度就是0.
  于是力速比 = min(3, ⌊卸负后力量/(速度+1)⌋) = 力速比 = min(3, ⌊1/(0+1)⌋) = 1。
  进而CD = max(0.5, 1.5+1+3.5) = 6秒

  而门呢?门的力量5400,速度3600,冷却时间增加3秒。力速比 = min(3, ⌊5400/(3600+1)⌋) = ⌊1.4996⌋ = 1.4,CD = 1.5+力速比+冷却时间增加 =1.5+1.4+3 = 5.9秒!
  血法CD是3秒,半门CD是5.9秒,所以不能稳定吸两口血,不是网络问题。
  恭喜你,你的力速比理解已经是大气层级别了!

技能冷却进度条

  有时候打带有速度衰减的boss,你有没有过这样的经验:还没开出嘲讽呢,被怪打了一下,然后进度条就好像不动了,嘲讽开不出来,直接寄。
  怎么解释呢?观察我们的冷却处理函数,在每个普朗克时间,她都会重新计算CD。被减速后,力速比变大了,算出来CD长了,进度条就不会进了。本来该后退的,但是那样看起来太奇怪了,所以就停在了那里。而如果你给boss减力,下一个普朗克时间就会算得CD很小,然后就发现Wait比CD大了,瞬间出手!你再次团灭。

跳dot

  夜莺挂dot,剩余时间8秒,那么在剩余时间为7,6,5,4,3,2,1,0秒时跳出dot。剩余时间为0秒时,先跳出dot,随后因为剩余时间为0,状态被删除。


技能选择

  主函数轮流调用每个人的状态处理和冷却处理函数。其中冷却处理函数中有“放技能”这件事,接下来继续展开技能施放的细节。   手动模式,指哪打哪,不必多说,我们关注自动的时候,包括怪物AI。

6个技能大类

  1. 自奶类
  2. 嘲讽类
  3. 反击类
  4. 奶人类
  5. 群攻类
  6. 单攻类

  每个技能都属于这6种技能中的一个,放技能的时候,是按这个顺序判定的,回忆元素法的技能设置,就是奶自己、奶队友、群攻、单攻的顺序。
  能奶队友的技能,必然也能奶自己。
  这6个大类,只是形象化地起个名字,属于“群攻”类的技能,不一定是群体攻击技能,只要技能施放的判定,是“敌方不少于X人时施放”,就属于这一类。
  一字马(图25伊兹玛尔)。在队伍减员时,它就会掏出魔将(图22)的通魔战刃(我捡到的通魔是假的?)。它的“群攻”技能是正常的技能,设置成敌方不少于4人时施放。“单攻”技能是插人。如果少人了,就不满足群攻的施放条件,按顺序判定下一类技能,就到单攻了。
  裂隙87,“群攻”技能非常凶猛,设置成敌方不少于2人时施放。图29癫狂之花同理。
  不死虫,“奶自己”技能设置了当自己血量少于15%时施放。
  所以这些怪,看上去机制特殊,其实一点也不特殊,就是这5个大类,改改技能设置。

技能设置

  我们说区分这5个大类的唯一标准,就是一个技能的技能设置长啥样。具体来说:

治疗自己技能槽.jpg 治疗队友技能槽.jpg

  • 拉到最左边,是从不施放,等同于生命少于0%时施放。
  • 拉到最右边,是100%施放。
  • 再点+号,是始终施放,等同于生命少于101%时施放。

嘲讽

嘲讽技能槽.jpg

  • 首先看现在有没有嘲讽。如果没有,才会去看技能设置看血量,身上有这个buff的话,是不会自动施放的。
  • 拉到最左边,是从不施放,等同于生命多于100%时施放。
  • 拉到最右边,是始终保持,等同于生命多于0%时施放。
  • 思考:奶和嘲讽分别有多少种不同的技能设置?100?101?102?

反击

反击技能槽.jpg

  • 和嘲讽一样,如果身上有反击buff,不会释放反击技能。所以如果你的圣龙带个反击盘(图19),他是不会自动放反击的。如果手动反击,那作为相同名称的状态,圣龙技能会把反击盘替代掉。
  • 设置“偶尔施放”,有50%概率施放,50%概率继续看后面的技能类。

群攻

群攻技能槽.jpg

  • 允许有多个群攻技能,可以轮流施放,或随机施放。

单攻

单攻技能槽.jpg

  • 允许有多个单攻技能,如夜莺。
  • 不允许设置多个始终施放,其他技能会自动变成从不施放。
  • 两个单攻技能设置成经常,可以轮流施放,或随机施放。
  • 三个单攻技能设置成经常,必定随机施放。
  • 群攻技能类比一下应该也是这样的,但怪的技能设置面板我又看不到,奥卡姆剃刀原理,就随便了吧。

目标选择

  先选好技能,才能选目标。不然咋知道是不是无视嘲讽呢?
  攻击技能选攻击目标,群攻技能不选目标?错误的。
  无论放啥技能,都要把单攻、单奶的目标选出来。如果技能是群攻,装备是对敌方单体上buff,装备哪里知道buff上给谁呢?昏掉嘞。

优先攻击的目标

  1. 随意攻击
  2. 剩余生命最少/最多
  3. 总生命值最少/最多
  4. 护甲最少/最多
  5. 抗性最少/最多

  优先治疗的目标,就是除了自己以外,剩余生命百分比最少的。
  再谈“挂状态”函数。我们讲过挂状态的对象了,有对敌方全体,敌方单体,自身,己方全体,己方单体。现在我们就知道,如果挂状态的对象是敌方单体或己方单体,就是跟据在这里选择好了的目标,来执行被挂状态函数。

技能施放

   准备函数
   施放技能
   如果冷却时间增加不到-4,更新之;
   清除增幅
   挂状态函数

准备函数

  准备函数已在lecture 2介绍。
  准备函数有多种,这里只出现准备(发动物理攻击),准备(发功魔法攻击),准备(发动治疗)。

施放技能

  这是下节课的内容。

如果冷却时间增加不到-4,更新之

  通常,放完了技能,要按照技能上面写的,设置冷却时间增加多少多少秒。但如果在执行准备函数时,装备触发了连击,连击特效的本质在lectue 3讲过,是把冷却时间增加设置为-4。这时候就不要再按照技能去设置冷却时间增加了,跳过这一步。

清除增幅

  准备函数会有增幅特效,放完了技能要把增幅去掉。增幅联系着lectue 1讲的属性 = max(0,面板+增幅+各种buff)。

挂状态函数

  这是lecture 2的homework,装备如果要挂状态,要等技能放完了再挂。
  技能也会有挂状态,技能挂状态包含在“施放技能”的过程中,这里只是装备挂的状态。