字号:

企鹅揭秘wow黑历史:Phat Lewt的数学原理

时间:2014-04-30 15:56 作者:田健 手机订阅 参与评论(0) 【投稿】
文 章
摘 要
“妈的又没出,那谁谁你不是说你当团长来组人就有刀的吗?!”

===============Norris的逼格爆表分割线===============

科学的胜利:帕奇维克的数字化解法

After a few nights of wiping with a strategy that would work perfectly with 0ms lag but is otherwise a waste of time, we relearned Patchwerk and completely destroyed him on our second try this evening.

-Hogan, Pacifist

Pacifist的Raid Leader在完成了他们的5:50 Patchwerk Encounter之后是这么说的。一个“在0ms lag下能够完美工作的”治疗策略。看起来最后他们放弃了这个策略,但很快完成了他们的FD。而我们决定继续研究一个“在0ms lag下能够完美工作的”治疗策略,并最终完成了它。

这是一个基于数学计算的战术。我们在分析和制订战术时,尽力记录一切事件的规律,并找到应对的方法。我们一个基本努力方向是尽可能降低战术中的协同配合成分,降低团队成员间的通讯量以便让整个过程更有条理,避免不必要的信息充斥各个频道。如我们所知,Patchwerk是一个典型的统计型Boss,我们试图用一种基于数学的方式解决这个问题(幸而只需要用到代数,我的微积分没及格)。最后,我们用了四天时间构造并完成这个战术所需要的各方面条件。事实上以我们投入的资源和精力来看,我们应该可以用更简单的方法更快地解决它,但我们坚持用这种方式,因为我们希望独立完成这个其他人没有做到的事情,同时我们也期望我们的努力能够帮助更多团队在不使用特殊Buff的情况下,更稳定地应对Patchwerk。

以下我将讨论Patchwerk Encounter的三个方面:仇恨打击的应对;治疗压力的应对和战士装备选择。

Part I. 治疗策略

Patchwerk战的治疗策略大体上可以分为两个流派:预读治疗和后读治疗。前者的方式是Spam Heal并及时打断;后者的方式是在战士掉血时开始施放治疗。两种方案的一个共同的努力方向是,尽可能在最快时间内将承受仇恨打击的战士的HP恢复到满。我们采用的是后一种方式。

我必须特别指出,预读治疗也是一种非常好的策略,它同样具有它自己的特点和大量成功的例子,容错率也很不错。但预读治疗有一个不可避免的缺陷,就是它是不可复制的——对于一个团队的治疗群,预读治疗也许用起来得心应手,但这并不能保证另一群治疗同样可以做到。这里有能力、装备、配合差距的问题,但更多的是在这种策略非常依靠个体的判断,并缺乏总体上控制和掌握情况的可能。

通过研究Combat Log,我们注意到Patchwerk的仇恨打击显然是一种经过精确计算的技能。在三个Off-tank的条件下,每个Off-tank每间隔3.6秒承受一次仇恨打击,这恰好在三个治疗职业最长的治疗术施法时间之内;各职业最高效率低速治疗魔法的最短施法时间是2.5秒,恰好比两个Off-tank的2.4秒仇恨打击间隔多一点点,这确保了一个有序的循环。OT-A被击中(0秒)->OT-B被击中(1.2秒)->OT-C被击中(2.4秒)->OT-A被治愈(2.5秒)->OT-A再次被击中(3.6秒)->OT-B被治愈(3.7秒)……

当然,这是一个仅仅基于理论的战术,也就是一个“在0ms lag下能够完美工作的”治疗策略。事实上考虑网络延迟和人的反应时间,这个战术完全没有实施的可能——如果没有科学的力量来帮助我们。

我们在第一天尝试之后,设计了一个针对这场战斗的插件。我们称之为zpw(Zeg PatchWerk Addon)。它由NGA的Zeg根据我们的要求定制,然后我们的一个MT Fionee在这个基础上完成了功能修正以及各种设置接口的编写。zpw的功能是,当你运行它以后,它会在屏幕上显示一个名为“帕奇维克陪你玩”的按钮。你平时按这个按钮的时候,不会有任何事情发生(除了一句提示)。而当Patchwerk的仇恨打击击中某一个特定的战士时,这个按钮会自动变色,并允许你点击它一下施放一个你设定的治疗术。

zpw的设计完全基于一点考虑,那就是尽可能降低线路延迟和人脑判断造成的延误。它检查的是本地的战斗log,即Patchwerk的仇恨打击击中信息,不依赖远程通讯或远距离申请其他数据进行判断,因此最大程度上降低了网络因素的影响。根据Combat Log分析,在使用zpw之前,治疗的平均延时为0.5至1.5秒,而使用zpw之后,治疗平均延时下降到了0.2至0.7秒。实战中,治疗者往往发现自己的治疗术已经开始Cast了,界面上才显示出战士生命值下降的情况。

我相信zpw已经在最大程度上解决了后读治疗策略中的延误问题。但zpw仍然有它无法解决的问题。我们知道,这个治疗策略要求治疗术在战士被仇恨打击命中之后的2.4至3.6秒之间承受治疗输入,也就是说,对于牧师和圣骑士来说,治疗术的施放窗口为1.1秒,而德鲁依的治疗之触的施放窗口则只有0.6秒。即使在最好的网络条件和最快的神经反应下,我们仍然无法保证使用zpw的德鲁依能够100%在窗口时间内施放治疗之触。如果使用2.5秒Cast的四级治疗之触,那么治疗力将达不到战斗所需要的要求。这是后读治疗无法解决的问题。

因此我们仅仅安排牧师和圣骑士负责Off-Tank治疗。我们给每一个Off-Tank配备四名牧师和圣骑士,搭配方式不限。这四个治疗者使用zpw在自己对应的战士每一次受到仇恨打击的同时,施放一个效果为2500治疗力的治疗术,具体使用的法术等级根据各人装备条件而调整。一个正常Buff并用了强效石盾药水的战士,可以将被挫锐之后的仇恨打击伤害控制在5.6k至8k之间,也就是说我们安排了大约25%的过量治疗,这是为了确保当四个治疗者中的任何一人因为任何原因没有在窗口时间中施放出法术的时候,战士仍然可以接受足够的治疗力。

如此,我们能够确保Off-Tank的稳定生存——至少是在头几分钟里。

zpw相关命令行见插件说明文档。

Part II. Mana管理

Patchwerk Encounter的第二个问题是,治疗职业OOM怎么办?这可能是每一个团队都会遇到的问题,对于Spam Heal的治疗策略来说,这个问题恐怕更为尖锐,因为它更依靠每一个个体的打断和各自分开的Mana管理方式,结果有可能造成同一治疗组内的部分人OOM而另一部分人仍然拥有治疗力,但由于仇恨打击的时间周期特性,一个治疗组的持续力取决于其中OOM最快的一个或两个人,而不是最慢的那一个。

在zpw的帮助下,我们可以做到每一个治疗组的Mana同步下降,因为每一次仇恨打击,同一治疗组的每一个人必然都会释放一个法术,整体Mana消耗是可估计的,这个消耗程度与战士承受的伤害无关,而仅仅于战士承受仇恨打击的次数有关。根据简单的计算,整个七分钟的战斗过程需要消耗46000左右的Mana。我不是治疗职业,所以相信你比我更清楚,这个数字不可能通过极效魔法药水、黑暗符文、智慧祝福或别的任何补给达成。因此结果是,必然会有一个治疗组在某个时刻出现第一个OOM,从而导致整个治疗策略失效。

我们有一个简单的解决方法,这个方法与仇恨打击的规律有关。

首先我不打算讨论仇恨打击的作用原理。这个问题已经争论了很久,我相信许多人的观察和经验都是正确的。我把这看做是一个黑盒子问题,但完全不同的两种机理,完全可能造成相同的现象,我们关心的仅仅是现象以及如何应对,至于内在的原理就无所谓了。

简而言之,不考虑其他影响因素的前提下,仇恨打击总是攻击当前血量最高的Off-Tank。假如三个Off-Tank的最高血量依此是A>B>C,那么在我们的治疗策略下仇恨打击的次序必然是A->B->C->A->B->C……假如没有躲闪和招架的话。关键就在这里。

假如在这个序列中,A招架了一次攻击,那么下一次仍然攻击A,因为他仍然是最高HP。但假如在这个序列中,B招架了攻击,那么攻击次序就会变成A->dodge->B->A->B->C……C被略过了一次攻击,他的治疗组自动获得一个自然回魔的机会。假如C招架了攻击,那么攻击次序会变成A->B->dodge->A->B->C……C的治疗组将获得更多的自然回魔机会。这仅仅考虑招架一次的状况。依此类推,你可以看出治疗组的Mana压力事实上同样是A>B>C。实战经验和Combat Log攻击也证明了,最低HP的战士对应的治疗组甚至可以全程保持80%以上的Mana。

那么我们是否应该给这样三个Off-Tank配备依此递减的治疗力呢?这也许是你的解法,但不是我们的。我们只是设法控制了仇恨打击的目标。

我们让三个Off-Tank控制最高血量,让最高的和最低的之间的差值不超过120(我们的四个战士HP值在尝试的全程一直都不高,MT HP9989,三个Off-Tank在10200到10140之间,远比以往经验中的12000HP低得多),A>B>C。在战斗进行到某一个时间点的时候,承受最多仇恨打击的A自己去掉身上的坚韧药剂Buff,他的HP降为最低,HP次序变为B>C>A;在第二个时间点上,B去掉自己的坚韧药剂,次序变为C>A>B;在第三个时间点上,A饮落一瓶新的坚韧药剂,HP次序变为A>C>B……依此类推,我们可以通过一个简单的方法来控制Patchwerk最强大的技能集中攻击我们期望的那个目标,从而为有需要的那个治疗组获得恢复的空间。

Patchwerk的游戏,其实关键只在于几瓶廉价的紫色药水上。

Part III. 战士装备选择

Fionee制作了一个简单的战士属性模拟器来帮助战士进行装备选择。我不确定它是否完全正确不过大体上没有什么出入。目前尚未加入盔甲值和伤害减免的换算,不过其他功能已经完成。

Patchwerk战需要四个战士:一个MT和三个Off-Tank。但事实上在这一场战斗中,三个Off-Tank的任务比MT要重得多,所以其实也可以说是一个Off-Tank和三个MT。

战士装备选择上需要考虑的第一个因素是盔甲值。我们一直保持所有战士盔甲值在12000以上,这主要依靠强效石盾药水来维持。这个数字上的盔甲值大约可以获得接近70%的伤害减免,配合挫锐怒吼,仇恨打击的伤害可以被压缩在一个安全的范围内。

MT的盔甲值通过灵感提升到15000以上,这可以将Patchwerk的普通攻击伤害压缩到1500-1700之间。无论如何,zpw能够确保Off-Tank的安全,但MT的安全仍然必须依靠传统治疗方式。

Off-Tank的其他装备选择需要首先强调躲闪和招架数值。这两个属性直接决定了战士在战斗中承受仇恨打击的总次数——并间接地影响战士所对应的治疗组的Mana消耗速度,原因见Part II。我们的三个Off-Tank保持着40%左右的躲闪/招架值。在这场战斗中,雷矛+龙血护符的效果要远远优于甲虫+生命宝石的传统饰品组合。如果你仍然保留着警惕护符的话,那么两个警惕护符是最简单高效的选择。

药品方面,除了常规的便携Buff外,记得吃一个强效敏捷药剂。廉价的1.25%闪避。

 Part IV. 其他问题

德鲁依的治疗问题:我们最初用四个德鲁依治疗MT,但效果并不好。后来我们将其中一个更换成他的牧师小号,并且恰好这个小号是个爆击率高达34%的妖孽,最终效果非常棒。

必须承认,德鲁依在这个治疗策略中的地位比较低。

zpw的已知Bug:在开始之前,治疗者的目标应该为空,或选择自己对应战士作为目标。虽然zpw会自动选择目标但因为代码里把cast语句写在了目标选择语句之前(别问我为什么一直没改掉),选择错误的目标可能造成不确定的治疗目标错误。

此外,zpw与目前版本的一些伤害统计插件冲突。这是上周更新DM 5.0之后出现的问题,因为这些插件可能修改Combat Log的记录格式,造成zpw无法识别。当然这也是一个可修正的问题,各位可以自己动手。不过我建议在这场战斗中,治疗者应该关闭一切依赖频道进行数据交换的插件,以尽可能的降低延迟。事实上,我们允许治疗者关闭一切插件,包括CTRA。

祝各位游戏愉快。

加入17173玩家俱乐部,100%领《原神》月卡、《王者荣耀》888点券、《魔兽世界》T恤等周边好礼!
加入方式:微信关注“17173服务号”