Source:http://ritastatusreport.blogspot.nl/2015/07/insider-talks-ghost-shells-explained.html
来源↗
Hello warriors,
大家嚎,
the Insider returns to give us some insight into the ghost shell issue. This info is gleaned from a discussion between two developers. As usual, take it with a grain of salt as an interpretation of what the developers said.
内部人员又回来了,这次给我们带来的是关于鬼弹问题的一些说法。以下信息都是从两个开发者的对话中收集的。和以往一样,请不要相信全部内容。
The Insider:
内部人员:
Short description
简短的描述
The problem is not the servers nor the clients, it’s actually a BigWorld engine fault process that begins when the server fails to calculate a penetration value. In layman terms, here’s the process (missing a few filler elements such as shell travel time, tank velocity, gun arc, type of shells, etc etc etc. for the sake of simplicity):
这个问题并不是出在客户端或者是服务端身上,而是BigWorld引擎在服务器无法计算穿深值的时候出现的错误。把话说白了,整个过程大概是这样的(缺少部分过程,栗如炮弹的飞行时间,坦克的速度,主炮射界,炮弹种类等等等等。我们只是阐述问题,而不是进行具体的技术性分析)
– client is driving
客户端的坦克在驾驶中
– server receives the “drive command” replies back “you are now driving” and sometime later it determines there is an enemy tank in sight that the client can see, so it sends the data back saying “you have a tank in sight”
服务器端收到了“驾驶命令”并且反馈“你现在在开了”,过了一段时间服务器发现客户端现在可以看到一辆敌人的坦克,所以它就把含有“你现在能看见一个坦克”的数据发回给了客户端。
– client now sees enemy tank
客户端现在可以看见敌方的坦克了
– server acknowledges the tank is there and all the aiming mechanics occur
服务器现在知道坦克在那边了,所有的瞄准机制现在开始工作了
– client shoots at tank
客户端开始对坦克开火
– server acknowledges the client has shot and triggers the reload timer for the client while also processing the penetration value of the shell, angle, RNG (+/-25%), area to damage and determines, if theres a penetration/ricochet or damage to any internal modules (shoot commander’s hatch, driver dies! *trollface*) or (shoot driver’s compartment, suddenly tank gets tracks damage *trollface v2*) (Insider: actually this is explained by ricochets inside the tank, but ill leave it at that).
服务器端知道客户端开火了,并且触发了客户端的装填计时器,同时服务器端开始计算炮弹的穿深值,角度,RNG(±25%),被损害的区域,以及是否有击穿/跳弹或者是击毁了任何内部模块(打观察塔死驾驶员!*蛤*)或者是(打驾驶舱,突然履带就被击中了*蛤蛤*)(内部人员:这些都是由坦克内部的跳弹造成的,但是这个以后再说)
– Bigworld engine which is running along the streamline of the server fails to process the client request and delivers a “null”
和服务器一起运行的BigWorld引擎没能够处理客户端的请求,于是返回了一个“null(无效,或者说空)”值
– Server: hey, but I just sent the data!
服务器:哎我说,我刚把数据发给你啊!
– Bigworld: yes and I say it’s null, now obey!
BigWorld:我知道,我说它无效它就是无效,你怕不怕!
– Server: ??? okay ._.
服务器:???好吧…… ╮(╯-╰)╭
Server sends the ping back with null value: “lel, tank wasn’t there”. Client displays a ghost shell event in return.
服务器把带有null值的信息发回给客户端:“蛤蛤,坦克不在那边”。客户端于是就显示出了一个鬼弹的情况。
What causes this failure?
到底是什么导致了这个问题?
There are some key events related to it regardless of ping, it can be several factors such as microlags, this is a very minimal packet loss (I’m talking bits, not even bytes in size) that the server can interpret as “noise” (partially unrecoverable packets). This is influenced by a lot of stuff, depending on client connection quality, distance and even interferences, server micro overloads, etc.
和这个问题有关的一些关键事件和Ping值是没有关系的。比如顿卡是非常小的丢包(这里丢失的数据只是二进制的数据,甚至都不是字节),服务器会把这些丢失的数据包认为是“杂音”(一些不可恢复的数据包)。“杂音”是由于很多原因造成的,客户端的连接质量,距离甚至是各种干扰,服务器端的轻微过载等等
Can it be corrected? Yes, absolutely, but this isn’t about server quality or connection (I’ll explain more down below), its about the game’s Bigworld engine that would require a patch. Technically the server always is set to respond on every shell fired, the bug is indeed, rare because Bigworld simply forgot to receive the data from the server because of the “noise”.
那这个问题可以修正吗?绝对可以,但是这个和服务器质量或者是链接质量没有什么关系(在下面会有更多的解释),问题出在游戏的BigWorld引擎上,一个补丁应该足矣解决问题。从技术角度来说,服务器应该是会回应任何一发被发射的炮弹的,这个Bug的确是很少见,因为BigWorld引擎只是由于“杂音”的原因忘记了去从服务器收集数据而已。
It’s not a fatal error and i can safely say that about 90% of the cases reported as ghost shells are actually not the bug described above and are related to lag or small de-synchs from the client-server (again, caused by factors such as servers being used between the connection from the client to the server as an example: telia.net and its faulty level2 server that some time ago was the bane of many issues on the NA community).
这并不是什么重大的Bug,我可以说上报的90%的鬼弹问题的原因都不是像上面所描述的一样,而只是单纯的卡了或者是客户端和服务器端的不同步而已(当然了,这个也是有很多原因的,比如从服务器端到客户端之间经过的服务器有问题:一段时间之前的telia.net和它那有点问题的二级服务器是造成美服很多问题的原因)
I’m sorry I’m not a super tech wiz and I tried to explain in the most simpler manner as possible, I’m sure an IT expert would be able to explain much better this term about microlags and discrepancies. But yes, the bug is real and detected, but the patching process is the “complicated one” because the server “doesn’t acknoledge” it’s missing anything.
我很抱歉,我并不是什么技术宅,这是能最简单的把这件事解释出来的办法了。我觉得IT专家应该可以更好的解释关于顿卡和不同步的问题。但是没错,这个Bug的确存在,而且已经被检测到了,然而修复过程“很复杂”因为服务器“并不知道”它有没处理的数据。
So, how common is this bug?
所以这个Bug到底有多常见呢?
It’s extremely hard to give an accurate number -but in a rough estimate, it can happen to any client, regardless of geolocation or hardware configuration at least once a day and very rarely it occurs more than once in a single match (very important: No, I’m not saying it happens every match, I’m saying that when it happens in the match, it’s most likely it won’t repeat itself during THAT match).
想要给出一个确切的数字是非常难的—但是可以做出一个大概的猜测,这个问题可能会出现在任何客户端上,无论硬件配置如何,地理位置如何,至少每天会出现一次,但是一场游戏里面出现两次的情况是非常少见的(以下很重要:我并不是说这个Bug每场比赛都会出现,而是它有很大可能不会在那一场战斗中再次出现)
So whats the issue then? The ghost shells needs to be fixed in 2 areas and are considered separate issues:
所以问题到底是什么?鬼弹需要从两个角度进行修复,我们认为这是分开的两个问题:
1 – is the bug caused by the de-synchs between client-server (microlags) (VERY hard to fix, because a ton of factors are involved, usually caused by connection issues between the computers between the connection of servers-client).
1.这个Bug是由于客户端和服务器之间的不同步导致的(顿卡)(很难修复,因为有很多原因,一般都是在客户端/服务器端之间的连接问题造成的)
2 – bugs of Bigworld becoming a pony – can be patched by psychotherapy or an update of the engine with a hotfix in the future.
BigWorld的Bug是问题所在—补丁可以解决,或者是以后对引擎进行Hotfix也行
WoT Xbox isnt reporting that issue btw.
顺便一说,XBOX版的WOT没有出现这种问题
I hope this helps and stops making it a mystery. As a little ways off to explain, and with a bit of fun:
我希望这篇文章能够帮助大家理解这个问题,别让它成为一个都市传说。还有一些有意思但是稍微跑题了的解释:
Other games had this kind of issue (desynchs causing bugs) in the past where this was more than an issue, it was actually exploited. I am referring to World of Warcraft. Back in WOTLK/CATA there was this kind of issue, fortunately the engine of WoW has been more than 12 years in the making and pretty much it has been over researched. Back then you could see gold seller advertising made of dead bodies by exploiting the game engine by making the characters “jump-exploit lag” until they reached a height where they would die from the fall and, eventually, forming a word. This is no longer the case for WoW.
其它的游戏也有这种问题(不同步导致的Bug),而在以前的时候已经不能算是问题了,而是被滥用的一个漏洞。这里的栗子是魔兽世界。在巫妖王之怒和大地的裂变这两个资料片中这个问题的确存在,幸运的是WOW的引擎已经用了12年了,该研究的都研究透了,不该研究的也都研究明白了。以前能看到卖G的工作室使用游戏的一个漏洞使角色“飞起来”到一定高度,然后摔下来死掉,最后摆成文字(也就是俗称的奥格银行摆尸体)。现在的魔兽世界已经没有这个问题了。
解释非常合理,能接受
反观幽灵炮弹的的概率,我12000+场感觉幽灵炮弹发生在自己身上也就不超过100次,概率非常低
其次,游戏引擎出问题不可避免,坐等开发慢慢修复,并不是一个大问题
最后说起客户端和服务器不同步,这个问题太普遍了,一般解决的方式有两种,要么让你卡,过大约几十帧之后让你瞬移,要么就干脆无视那段时间的数据,也就是当做杂音处理.一边骂着WOT优化不好,接着要让这游戏没有外挂,然后还要让他没有任何BUG,我觉得在WOT的版本号1打头之前,应该是不可能办到的.
…前天我就一场出现两次鬼弹……
蛤蛤
蛤蛤也要按照基本法来23333