关于小组赛首日奥瑞利安·索尔禁用的后续调查
在全球总决赛小组赛首日TSM对阵RNG的比赛中,游戏出现问题,导致TSM的Bjergsen选手无法看到RNG选手Xiaohu的奥瑞利安·索尔的环绕行星。
在全球总决赛小组赛首日TSM对阵RNG的比赛中,游戏出现问题,导致TSM的Bjergsen选手无法看到RNG选手Xiaohu的奥瑞利安·索尔的环绕行星。
在此我将从技术角度来解释该问题的缘由。问题比较复杂,请认真阅读,我将详细为您讲解基础机制,然后分析问题的起因,最后给出我们的解决方案。
技术背景
奥瑞利安·索尔的被动技能会把龙王作为目标物件。通常飞行道具的目标是它所对准的目标,但在龙王的被动中,我们利用目标信息来传达并实现飞行道具的轨道环绕效果。
当客户端被告知一个飞行道具指向了一个脱离视野的目标,就会创建一个“占位目标”来表示客户端此时没有该目标的本体信息。这个“占位目标”会让游戏无法从一个已知,但脱离视野的单位处应用过期的信息。
当奥瑞利安·索尔的一颗行星可以被除了他自己之外的人看见,我们使用了一种机制,通过服务器发送龙王的位置信息到客户端,为行星模拟一个合理的环绕位置。我把这个过程称为:“辅同步”。之前有时候行星会出现在错误的位置,我们对此做过修正——即在收到正确的位置信息前,行星暂时隐藏。这种情况会在“辅同步”或龙王出现在视野时发生。
关于技术背景信息的最后一点是,赛事观战客户端和选手所使用的观察功能设置并不相同。当你观察一场比赛时,你并没有实际连接到游戏服务器,你所连接到的功能机制能够从游戏服务器抓取数据,并将其传播向更多观众,并带有一定延迟。
在介绍完技术背景后,让我们直接来看看造成这次问题的根本原因,顺藤摸瓜解决问题。
根本原因
决定是否打开“辅同步”系统的逻辑会首先考虑前12个客户端的可视状态。他们由帐号ID值排序,无论该值代表选手或赛事观战客户端。任何英雄联盟比赛中至多只能出现12名选手,所以为“辅同步”逻辑的查验来设置12这个数量是合理的。
逐步分析
我们在首个比赛日所使用的设置中,所有的观战帐号都旧于选手的帐号。这导致它们的帐号ID值更低,以便于优先将它们,而非选手帐号放置进客户端列表中。如我上面所解释的,“辅同步”逻辑会查验前12个客户端的可视状态。而我们的观战者超过了12个,那么在这种情况下,逻辑就会只考虑观战者,并且观战者可以看到所有东西。那么,即使“辅同步”启用了,根据逻辑,它也会将自己永远禁用。
在“辅同步”系统没有生效的情况下,一旦奥瑞利安进入战争迷雾,它的行星就不再跟随他的动作。所以下列短片中的情况就发生了:
这个问题已经给选手带来了误导,但不仅如此,客户端由于依赖“辅同步”系统来放置“占位目标”,以解决初始视野缺失的问题。这会导致龙王的行星处于一种永远无法找到正确目标的状况。行星只会在通过“辅同步”系统获取信息后,或是行星的目标可见后才会出现,那么这两种触发机制都无法实现时,行星就会永久的隐藏。
应对方案
现在我们清楚了问题的由来,那么进行修正是很简单的。但是,在赛事中途推送新的版本会有很大的风险,我们决定使用变通方案。现在我们的观战客户端帐号ID值会新于选手的帐号ID值,这样就能持续并完整地跳过根本原因。测试表明该方案行之有效。
我们也会在日后的常规更新中修正这个问题,当前的变通方案将不会在以后的赛事中使用。
此致,
~Riot Penrifc