暴雪游戏趣闻:战网隐身登陆功能未实装 缘起代

发布时间:2021-06-05

暴雪游戏趣闻:战网隐身登陆功能未实装 缘起代码这是在现场的暗月马戏团区进行的小规模的工程师访谈,算是第一次有这种技术向的东西,我觉得很有兴趣,就尝试翻译了下。

因为东西很多,我顺序从上往下更新,慢慢翻译。

守望先锋组当初为了Chinajoy做了一个展示用客户端,但是制作时忘记和谐血液了。结果就是他们只好顶着很弱的wifi信号来临时修改。当时有人想到代码里有一行语句用来判断你是否击中了其他目标或者环境,就仅仅是一个if。于是他们决定通过修改可执行文件里的一个字节来达成目的。结果就是他们写了一个可执行文件,载入客户端,找到那个字节,翻转之,然后把修改后的客户端输出。后来在CJ上的展示河蟹效果很不错。

德拉诺正式上线的那几天,有一些超出预料的情况。当时硬件资源已经准备到位,但是因为WoW是个老游戏,每一台刀片服务器都负责游戏里的某一部分。工程师们根据他们推断出来的最佳配置对服务器集群进行了优化,只是他们也不清楚负责游戏里某一部分的刀片服务器具体是什么配置。结果就是当时用于创建新副本的服务器并不是高内存型服务器,而你每次进入要塞都会创建一个新的副本(想想看上线那几天会有多少万这样的副本被频繁创建吧)。问题出现后,工程师们在数据中心里待了8个小时,把刀片服务器拔出来,增加内存,在不同服务器集群之间转移。虽然那段时间里这些操作导致了不少“副本未找到”的问题,但是调整结束后一切都稳定多了。之后就只是程序性调整了。

风暴英雄的引擎和星际的是同一个。所以每次进行更新的时候,都需要考虑到是否用户创建的mod会被这些修改影响。他们不希望用户mod会因此出bug甚至无法使用。因此,他们设定了许多引擎设计的限制和枷锁,不过大家都挺支持的。所幸的是,Team 1(星际组)的离职率很低,大家都很熟悉这些代码(言下之意……)

背包,永远的背包问题。最初的WoW设计师决定用一个数组(array)来记录你的所有物品。数组一开始的几个位置用来放你正在装备的物品,然后就是你的包包里的物品。后来(此时依然是早期)他们想加一个银行进来,于是把银行加到了这个数组的末尾那边(装备->背包物品->银行物品)。不过,为了让玩家不能随时随地打开银行(代码会被玩坏的),他们在代码库里的很多地方写了很多额外的逻辑,比如指定数组的某个位置对应到背包里的什么位置,然后银行的位置是从数组里的哪一位开始。这些数值都是hardcode(就是写死一个数字,而不是用类似(数组总长度/10)这种写法)到各种地方的,而且想去修改的话也不是说把这些数据找出来全部改掉就可以。有些逻辑判断可能就需要某个数值写死。如果你想修改默认背包的大小,天晓得你会搞坏些啥。这样的修改非常容易bug或是出现难以名状的错误,而且你十有八九会改出新问题,然后以各种你完全不想看到的姿势炸裂客户端。结果就是,他们需要找一群牛逼的,本来可以去做那些新功能的工程师,去专门一行行代码扫过去成千上万行老代码找到要修改的地方,以及让QA部门去用所有能想到的姿势测试以保证修改上线后不回瞬间爆炸。然后就没有然后了,还是16格到死吧。制作组比较喜欢在给现有功能增加相关新功能的时候再去动老代码。比如当时在改跨服区域的时候,他们重新设计了把不同玩家分配到不同服务器的逻辑。老代码被完全重写并且易于扩展,结果就是将来想加入新的相关功能的话,不需要担心16格背包那样的问题。一个扩展的例子就

精彩图片

热门精选

大家正在看