WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。
战斗逻辑的构造与解释
阅读
2023-02-11更新
最新编辑:欣酱是萌欣吖
阅读:
更新日期:2023-02-11
最新编辑:欣酱是萌欣吖
此页面正在施工中,或者内容正在优化中,请不要增加/删除内容
前言
终极计算器
wiki团队的基建组——天上人间,在21世纪的最重大的项目是:完成大计算器。输入你的队伍,选择要打的怪物,wiki将全真模拟游戏中的情况。此前我们有众多小计算器,他们都是针对某个小领域的计算,而这一次,我们do it once, and for all. 因为组里各人使用的编程语言、开发平台不同,我们只能共享交流算法,大家会见到多个版本。wiki测试服是我基于windows开发的桌面程序。mac用户需要等待不由制作出大计算器网页版。
课程介绍
要写出完整的模拟程序,我就被迫要了解整个游戏全部的机制,并把它们整合到一起。现在算法完成了,我不妨分享一下这整个的战斗逻辑。
《战斗逻辑的构造与解释》,即是一门全面介绍战斗机制的地堡课程,也是wiki测试服的高阶使用技巧。这是一门大水课,没有期末考试,只要赏脸看一遍,就是满昏!
本课程难度较大,含有大量计算(虽然都是小学水平的计算,但计算终究是计算),适合热爱技术的萌新和中期玩家查漏补缺。
还有一种,玩上头了,资源都花光了,卡在某个boss,这时候一如果一直盯着自己的号左看右看,最终就会控制不住地把自己的手伸向右上角,几百个大洋,一通忙活,狗托们都出货了,在群里秀你一脸,而你没有,几百大洋打了水漂,于是又开始懊悔起来。这是何苦来呢!推不动图了,就老实咸鱼,咸鱼之际,来听我的课吧。
先修课
出征章节的7篇攻略
程序设计中的函数概念。我们这里说的函数,不是枯燥乏味的数学,而是流程的意思。我们吃苹果,要先买苹果,然后洗,然后削皮,然后啃,最后把苹果核扔掉,这就是一个流程。函数我们用大括号括起来。现在我就可以用“吃苹果”来表示面连续的5个步骤:{买苹果,洗苹果,削苹果,啃苹果,扔果核}。以后就不需要再写出这5个步骤了。我说吃苹果,你就知道要干嘛了。具体自行百度。
课程资源
状态
状态
在地堡中,状态不是你的冒险者今天吃得好不好,而是打的时候冒险者头上的那些小图标。
两个“凡是”:凡是有对应图标的,都是状态。凡是没有对应图标的,都不是状态。
状态包含的信息
每个状态包含八个信息:
- 状态名称
- 特效名称
这两个的区别看图,看一眼就懂:
如果是技能带来的状态(火法的灼伤),就拿技能的名字(炎爆术)作为特效名称。
只要状态名称一样,那就是同一个状态,那就会覆盖。只要状态名称不一样,就各不相干。而特效名称意义不大,后面会讲它是干啥用的。
- 类型
状态的类型有以下几种:力量buff,魔力buff,技巧buff,速度buff,护甲buff,抗性buff,hot,dot,物理增伤,魔法增伤,眩晕,反击。
在wiki测试服中,debuff是数值为负数的buff。
dot不是数值为负数的hot,因为hot受治疗效果属性影响,dot则被持续伤害属性加成。
- 剩余持续时间
- 每层的数值
- 层数
- 最大层数
- 附加者
附加者决定了状态吃不吃状态效果。如果附加者属于冒险队,状态就吃状态效果,否则就不吃。
在wiki测试服中,火环负面的自残状态的附加者为空,进而不吃状态效果。用bool型变量SEA(state effext allowance)表示吃不吃状态效果,用它和状态效果相乘,这样吃状态的时候就是1*状态效果,不吃状态的时候就是0*状态效果 = 0.
状态的最终数值
我们用一组统一的信息,表达了所有状态,用一个统一的公式,计算了所有状态。
被挂状态
被挂状态有两种情况。队友上的增益,和来自装备的状态,都不受异常附加率的影响。敌方技能附带的状态,则要考虑异常。
如果挂上了的话,就要把相应的状态附加上去。
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的状态。状态可能有多种,但增幅最多只有一个,因为增幅只生效一瞬间,并且装备特效只要生效一个,后续就不再判定了。
这节课的重点是这个蛮子的例子。假设一场紧张而激烈的战斗即将拉开帷幕,我们的蛮子已经捯饬好了:
狂战:
倘若面板力量是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
我们算了很多很多,但是无非就是两个小式子:
不光是力量,所有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中大的那个数,属性的计算式应补充为:
如果,甲被对面狠狠地、无可救药的破光了,这时候神官奶上一口,能奶上护甲吗?答案是没有用的,直观地说,被对面破甲破的裤子都不剩,是不够的,还会欠债。不把欠的补上,休想护甲是正的。
我们叙述的属性计算逻辑在这里也是管用的。对面减甲很猛,那么护甲衰减buff的数值就是-99999,这时候神官给一个数值为9的护甲提升buff,照单全收,只不过最后要加所有护甲buff的总和,这一加起来,谁都敌不过这个-99999,最后就是负数,就是0。
魔煞短刃害怕减力吗?怕的。它的特效是增幅力量,但是,最终看力量的时候,减力是作为一种状态,都被加起来,增幅的力量是要去还债的。
装备特效
类型
圣庭的特效,不属于回复类,而是属于状态这一类,而它的状态的类型为“hot”。
触发条件
- 战斗开始
- 发动物理攻击
- 发动魔法攻击
- 使用回复技能
- 受到物理攻击
- 受到魔法攻击
在wiki测试服的JSON/装备数据.json中,“类型”和“触发”就是上面的这些。
装备触发的顺序
如果触发条件是“战斗开始”: 分别按照触发条件和概率,触发环、武器、衣服、饰品1、饰品2、魔石特效。 而如果是其他触发条件: 依次按照触发条件和概率,触发武器、衣服、饰品1、饰品2、魔石特效 (期间只要触发了,就结束)
其实,这就是一个函数了。我们起个名字,叫做“准备”。他有个参数叫“触发条件”。他会跟据触发条件,调度各个装备特效的触发。以后我只要写:
准备(发动物理攻击)
就代表以发动物理攻击为“触发条件”,来执行上面的函数。
如果一个穿着的黑骑在挨打,那么:
准备受到物理攻击
它就代表:
依次按照触发条件和概率,触发武器、衣服、饰品1、饰品2、魔石特效 (期间只要触发了,就结束)
凯旋是没有特效的。风甲100%触发特效,触发了后面就中止不看了,最后执行的就是:
受到物理攻击时,风甲的特效。
瞧,人话,都是人话。黑骑要挨打了,你就说让不让我做准备吧。这一准备,就把特效全部考虑逸当了。我们还没讲到挨打的流程,但想来你已经预想到了到时候会是怎么样。打人的人先来一个准备(发动魔法攻击),攻击时的装备特效就考虑好了,然后才举起黄瓜杖。挨打的人先来一个准备(受到魔法攻击),防御特效也到位,然后才把屁股撅起来。现在问题就聚焦到了一个点: 单个装备的触发函数是什么一个流程呢?
具体某个装备的触发
环的特效
环的特效,严格来说只要处理一个东西:自杀火环在战斗开始时,给自己上一个dot。其他的环的特性,都不宜作为一个特效来处理,而是在用到的时候实时计算,啥时候用到啥时候算。特效只有开局、打人和挨打的时候,会通过准备函数来处理。
增幅类特效
这个就很简单,就是去赋值增幅属性嘛。
增幅力量 = 100% * 力量
至此,lecture 2 和 lecture 1 开始联系起来了:什么是力量?
状态类特效
状态类特效首先跟据系数计算“每层数值”,然后挂状态,即让“对象”被挂状态。
状态类特效发生在技能释放完之后。因此要把这个状态先暂时存着,等技能放完了,技能附带的状态也附带完了,最后才打出去。
所以,流血甲出特效的那一下,是吃不到自己的技巧buff的。
连击类特效
冷却时间增加-4秒。
这一操作的妙用后面会解释。
回复类特效
真伤类特效
回复类和真伤类特效就是按照特效描述,直接进行回血和扣血。
治疗抑制
治疗抑制看上去是一个特效,其实可以说是两个特效,也可以说不是特效。
在战斗开始时,把敌方全体的回复系数和吸血系数乘(1-治疗抑制的比例)。
在阵亡时,把敌方全体的回复系数和吸血系数除以(1-治疗抑制的比例)
举个夜莺流血甲的例子
准备(发动物理攻击)
它就意味着(发动物理攻击时,绿龙没特效,天使轮100%,乌鸦被覆盖):
发动物理攻击时,驱魔的特效。如果触发了,就中止。 发动物理攻击时,流血甲的特效。如果触发了,就中止。 发动物理攻击时,天使轮的特效。(100%触发)
先看匕首,匕首“的特效”是这么处理的:
以(75%)的概率,如果触发,增幅技巧=2.2*技巧
假设没触发,于是接着去看流血甲:
以(75%)的概率,如果触发,挂状态(...) 对象: 对自身 状态的信息: 状态名称: 专注 特效名称: 专注 状态类型: 技巧buff 持续时间: 8秒 数值: 0.5 * 技巧 (此时列式子计算技巧) 最大层数: 1 来源: 我的夜莺
这一系列的连锁反应都只是一个小小的准备(发动物理攻击)所带来的!这就是lecture 2 的内容,我们把所有的装备特效,浓缩进了两个字:准备。
舒服了。
想一想开局的时候呢?只要一句准备(战斗开始),他就会分别调用各个装备的开局特效,战斗开始时走的流程是不中断的,所有装备都调用“的特效”,于是:
火环给上了自残dot,匕首给上了思维链接,绿龙给上了灵视,天使轮给上了天使之颂和天使之佑。
最终出手之前,调用一次准备(发动物理攻击),决定最后的增幅。此时再计算技巧,所有的增幅和状态已经全部就绪,只等着发动技能时的灵魂拷问:
状态 - 时间
挂状态与被挂状态的机制已经阐述过了,但还有一些没解决:
- 到时间了,要自动把buff去掉
- dot/hot要每过一秒扣/加血
这些事情是需要不断地检查的,但你不可能一直盯着它这个状态——别的事儿不干啦?所以事实上是每过一段时间做一次检查。这个时间可能在55微妙左右,但我们不管他具体是多少,假设它叫做黑潮大陆的
这样我们的手机就不会日理万机了。它设置一个时钟,每过一个普朗克时间就提醒手机处理一下所有的状态。而在这个普朗克时间的剩余时间里,它可以从容不迫地调用很多次 准备(发动物理攻击) 函数,或者下载它的小电影。这个处理状态的函数就叫做“状态处理”好了。它的内容是:
- 把所有状态的剩余持续时间减去普朗克时间
- 对所有类型为dot的状态,如果它的剩余持续时间是整数秒,就跳dot;对所有类型为hot的状态,如果它的剩余持续时间是整数秒,就回春
- 去掉所有剩余持续时间为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个技能大类
- 自奶类
- 嘲讽类
- 反击类
- 奶人类
- 群攻类
- 单攻类
每个技能都属于这6种技能中的一个,放技能的时候,是按这个顺序判定的,回忆元素法的技能设置,就是奶自己、奶队友、群攻、单攻的顺序。
能奶队友的技能,必然也能奶自己。
这6个大类,只是形象化地起个名字,属于“群攻”类的技能,不一定是群体攻击技能,只要技能施放的判定,是“敌方不少于X人时施放”,就属于这一类。
一字马(图25伊兹玛尔)。在队伍减员时,它就会掏出魔将(图22)的通魔战刃(我捡到的通魔是假的?)。它的“群攻”技能是正常的技能,设置成敌方不少于4人时施放。“单攻”技能是插人。如果少人了,就不满足群攻的施放条件,按顺序判定下一类技能,就到单攻了。
裂隙87,“群攻”技能非常凶猛,设置成敌方不少于2人时施放。图29癫狂之花同理。
不死虫,“奶自己”技能设置了当自己血量少于15%时施放。
所以这些怪,看上去机制特殊,其实一点也不特殊,就是这5个大类,改改技能设置。
技能设置
我们说区分这5个大类的唯一标准,就是一个技能的技能设置长啥样。具体来说:
奶
- 拉到最左边,是从不施放,等同于生命少于0%时施放。
- 拉到最右边,是100%施放。
- 再点+号,是始终施放,等同于生命少于101%时施放。
嘲讽
- 首先看现在有没有嘲讽。如果没有,才会去看技能设置看血量,身上有这个buff的话,是不会自动施放的。
- 拉到最左边,是从不施放,等同于生命多于100%时施放。
- 拉到最右边,是始终保持,等同于生命多于0%时施放。
- 思考:奶和嘲讽分别有多少种不同的技能设置?100?101?102?
反击
- 和嘲讽一样,如果身上有反击buff,不会释放反击技能。所以如果你的圣龙带个反击盘(图19),他是不会自动放反击的。如果手动反击,那作为相同名称的状态,圣龙技能会把反击盘替代掉。
- 设置“偶尔施放”,有50%概率施放,50%概率继续看后面的技能类。
群攻
- 允许有多个群攻技能,可以轮流施放,或随机施放。
单攻
- 允许有多个单攻技能,如夜莺。
- 不允许设置多个始终施放,其他技能会自动变成从不施放。
- 两个单攻技能设置成经常,可以轮流施放,或随机施放。
- 三个单攻技能设置成经常,必定随机施放。
- 群攻技能类比一下应该也是这样的,但怪的技能设置面板我又看不到,奥卡姆剃刀原理,就随便了吧。
目标选择
先选好技能,才能选目标。不然咋知道是不是无视嘲讽呢?
攻击技能选攻击目标,群攻技能不选目标?错误的。
无论放啥技能,都要把单攻、单奶的目标选出来。如果技能是群攻,装备是对敌方单体上buff,装备哪里知道buff上给谁呢?昏掉嘞。
优先攻击的目标
- 随意攻击
- 剩余生命最少/最多
- 总生命值最少/最多
- 护甲最少/最多
- 抗性最少/最多
优先治疗的目标,就是除了自己以外,剩余生命百分比最少的。
再谈“挂状态”函数。我们讲过挂状态的对象了,有对敌方全体,敌方单体,自身,己方全体,己方单体。现在我们就知道,如果挂状态的对象是敌方单体或己方单体,就是跟据在这里选择好了的目标,来执行被挂状态函数。
技能施放
准备函数 施放技能 如果冷却时间增加不到-4,更新之; 清除增幅 挂状态函数
准备函数
准备函数已在lecture 2介绍。
准备函数有多种,这里只出现准备(发动物理攻击),准备(发功魔法攻击),准备(发动治疗)。
施放技能
这是下节课的内容。
如果冷却时间增加不到-4,更新之
通常,放完了技能,要按照技能上面写的,设置冷却时间增加多少多少秒。但如果在执行准备函数时,装备触发了连击,连击特效的本质在lectue 3讲过,是把冷却时间增加设置为-4。这时候就不要再按照技能去设置冷却时间增加了,跳过这一步。
清除增幅
准备函数会有增幅特效,放完了技能要把增幅去掉。增幅联系着lectue 1讲的属性 = max(0,面板+增幅+各种buff)。
挂状态函数
这是lecture 2的homework,装备如果要挂状态,要等技能放完了再挂。
技能也会有挂状态,技能挂状态包含在“施放技能”的过程中,这里只是装备挂的状态。