WoW黑历史 - 推动全世界玩家脚步前进的插件

知乎日报 知乎:田健 285℃ 评论

作者:田健


圣骑士詹姆斯·狗剩给团队里治疗量最高的牧师娜塔莎·金锁加了一个王者祝福,然后给自己加了一个力量祝福并点掉;做完这些之后,他奉献出自己所有的信仰之力,神圣干涉了已经脱得只剩下裤衩、且在背包里塞满了幸运兔脚的主坦克奥菲斯·狗月,心满意足地死在了地上。主坦克抬头望向天空:九大行星排成了十字,而他刚刚 Roll 出了一个 3,No more, no less。这是个好兆头,最恰当的时机来临了。他喝下一瓶铁盾药水,虔诚地将手伸向尤迪安·怒风的裤裆……

“妈的又没出,那谁谁你不是说你当团长来组人就有刀的吗?!”

--------------------------

其实这篇文原本是要讲一个“聪明的 Raid 群众如何通过数学方法改变世界并拿到好多紫装”的励志心灵鸡汤故事,但是考虑到既然标题里有 Phat Lewt,就顺便先讲讲困扰了玩家数万年的掉宝算法问题究竟是怎么回事吧。

基本上贵游戏中有两种掉宝方式(如果后来又出了什么我不知道的新模式这里没有列出来的,你打我呀?):

(1) 波士挂掉以后直接摸尸体出宝。

(2) 挂掉以后出个箱子,比如尘归尘土归土。

以及两种团灭之后的波士行为(如果后来又……):

(a) 团灭后波士闲庭信步走回起始位置。

(b) 团灭后波士消失,然后在起始位置重新出现。

那么简单地说,掉落表是在波士或者箱子生成的时候通过一个随机种子决定的,如果你跟我一样经常玩 GM 客户端的话,在控制台输入某个命令之后可以把鼠标挪到目标身上去看他所携带的、即将掉落的东西。如果此时你干掉波士,或者打开箱子,就可以看到这些货;但是如果不幸团灭,那么在(a)情况下,你可以一遍遍地灭,掉落是不变的,而在(b)情况下,每次团灭之后波士重新出现都会重新产生一个掉落列表。

所以总结一下,大部分波士在本进度的副本开启时就已经决定了会出什么,而且至死不渝;而像尤迪安或者胸口碎大石的血精灵王子这种情况呢,你的团灭有可能导致本来可以入手的蛋刀或者凤凰不翼而飞(又或者本来没有,不过灭了一次以后就有了)——不过因为这是个黑盒,玩家们感受也不会特别挫折。但是假使你要的东西没出的话,这一事实给大家提供了炮轰团队中的猪队友的好借口,从此放学后等在门口再也不是师出无名啦。

===============回归正题的分割线===============

下面是正题。

众所不知的一个情况是,我好歹也是上过几天数学系的,所以虽然成绩稀烂,但内心中仍然对“优美的解题方法”抱有奇怪的好感。所以今天要说的故事,其核心就是”聪明的 Raid 群众如何通过数学方法改变世界”,与之相关的这个故事就发生在炒冷饭高发区的纳 X 萨 X 斯。

纳 X 萨 X 斯这个 Raid Boss 扎堆的地方,从设计上讲是极其经典的,抛开我国群众一贯以来的聪明才智——用台阶和死角解决问题——以及各种都市传说不提(拓展阅读:
纳 X 萨 X 斯的尼奥 - 无意义黑历史 - 知乎专栏
),每个 Boss 的机制设计都被后面的版本或者其它的游戏各种借鉴。其中最被人津津乐道的无疑是克尔苏加德的战神,帕奇维克帕总。

当时还是 MT 们普遍七八千血、在 BWL 跟贼人抢戒指的年代,信心满满的开荒者们千辛万苦终于到了帕总面前,猎人开怪,然后帕总飞身而来,一刀下去,MT 有丝分裂,其他人脱衣的脱衣,泡水的泡水,吃黑暗符文的吃黑暗符文,自燃的自燃,八仙过海各寻死路,无数个团队的无数个夜晚就在这种凄惨的团灭中度过了。

起初,有希望看到胜利曙光的,大体上都是那种拥有十几个备用团的顶级公会抽调各团精英组成的教导团,并且他们还需要碰巧在一个不会间歇性大卡的服务器上,当时各公会协商错开 Raid 时间的盛况想必一些老鸟们还记忆犹新罢……说句题外话,卡得裸死这个服务器名着实不错,跟雷霆之怒有一拼……(拓展阅读:
命名策略与全司剧情内务委员会 - 无意义黑历史 - 知乎专栏
) 而普通公会搞不定这个 Boss 的关键,其实倒不见得是装备不行,症结其实还在呆萌有爱的女牧师们身上……大家都懂的。

按照亲爹公司原本的设计,这个 Boss 对治疗的反射弧的要求高得离谱,而且他本身还是一个全团 Gear Check 的硬指标门槛,所以世界上绝大部分公会连“不倒 T”这个反复尝试所需的前置条件都做不到。帕总出色地担任了门神的角色,拖住了广大群众前进的步伐,帮亲爹公司的设计师们解决了出内容没有玩家打得快的窘境。

直到一个神奇的插件出世。

这个名叫“帕奇维克陪你玩”的插件,最早是由<我那个论坛>的技术头目,人称张二哥的 Zeg 开发,狗月大大完善,供二区轻风之语服务器的白银之手公会 Raid 使用的。

简单地说,帕奇维克陪你玩的思路,不是“我们如何手忙脚乱地补上马上就要被砍死的 MT 的血”,而是“你砍你的,我加我的”,立意高屋建瓴,方案无懈可击,充满了理性和规划的美感。在它成熟之后,我在论坛上正式发布了这个插件(现在你去还能搜到这个帖子咧),随即被传播到国外,然后——瞬间把整个世界的进度推到了塔迪乌斯面前。不开玩笑,因为发布了帕奇维克陪你玩之后,国服推倒这个 Boss 的战报刷了屏,我们运营团队在后台看到的统计数据也完全证实了这一点。

在这个插件发布之前,你打掉帕总就可以在 Raid 界横着走,在这个插件发布之后,你打不掉帕总就别说自己是 Raid 团队了。

我在正文后附了 Norris 撰写的帕奇维克陪你玩的说明全文,在这里我有必要提醒一下各位,我用粗体标出的部分,突出展示了 Norris 这枚强者行文之间流露出来的高大上的逼格……请细心体会。

这是我所知道的中国的 Raid 团队第一次在真正意义上、堂堂正正地摧毁了 CCQ 的游戏设计者对于版本节奏的规划,真正 outsmart 了设计师。它的意义,在那个热血沸腾的年代,在那个每晚都在 TS/YY/UT 上面大呼小叫并肩作战的人群里,其实远远超越了世界 FD 这样的荣誉,可惜的是大部分玩家并不真的清楚这一点。

说句题外话,在我亲自经手的最后一个版本的翻译(巫妖王上线时的版本)当中,复刻版的纳 X 萨 X 斯有一个成就,我给它起了个中文名就叫“帕奇维克陪你玩”,算是我对这段辉煌历史的致敬和重温。

帕总歇菜之后,负责拆水晶的团队成员捡起每周必出的棺材板盾牌,大家继续前行。后面的洒水壮汉以及野狗根本就不是问题,可能暴露在外面的那段管道摔死的群众(以及扣掉的 DKP)都比他俩加起来还多。但是这一区域的关底老怪,云一样的男人,雷电的朋友洛……我是说塔迪乌斯,又一次让群众体验到了什么叫强、无敌的强、轰爆天的(你够了

塔迪乌斯和小霸王其乐无穷的组合拳干翻了无数人,这个确实有当时的硬件限制和网络限制的因素,不过,再一次地,其实关键问题大抵还在于呆萌有爱的团员们,诸如死也跳不过那个台阶、总是往另一种电极的人堆里扎之类的事简直挡也挡不住,团队领袖们无一例外在语音频道里朝着马景涛的风格快速进化。

这时出现了一个非常漂亮、优雅、充满美感的解决方案,据说最早来自 SMTH(水木清华)的论坛讨论,然后由清华的大学生们为主力组成的 SMTH 和 Zixia(应该是吧?这块我确实不是特别熟了)推广开来。这个方案就叫做“四点跑位法”。

关于四点跑位法(我又称它为塔迪乌斯空心大方阵!)这里不再赘述,因为它的效果远不如帕奇维克陪你玩那样惊世骇俗。其一是虽然理解并完美执行之后,此方案可以极大提高容错率,但实际上这种方案对于呆萌女牧师们,以及文科生的同学们一般是比两点跑位更加难以理解了(但是理工科的高僧们通常一看就懂!简直要弹冠相庆!浮一大白!像 E=MC²一般优雅!);其二是你即便有艹天的本事,全团如精密的齿轮一般严丝合缝井井有条,小霸王一样分分钟教你做人。劈啪一声震天响,四十好汉一起躺,正应了孙二娘的老话:任你猾如鬼,吃了老娘洗脚水。

===============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。
祝各位游戏愉快。

———————————————

发自知乎专栏「
无意义黑历史

转载请注明:微图摘 » WoW黑历史 - 推动全世界玩家脚步前进的插件

喜欢 (0)or分享 (0)
发表我的评论