内部人员:让我们深入了解幽灵弹的问题

2015-07-28 23:54:13 神评论

17173 新闻导语

InsiderTalks:GhostShellsexplainedHellowarriors,theInsiderreturnstogiveussomeinsightintotheghostshellissue.Thisinfoisgleanedfromadiscussionbe

Insider Talks: Ghost Shells explained

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.

内部人员发给RG一些消息,可以让我们深入了解幽灵弹的问题。这些消息是从两个开发人员的讨论内容中提取出来的。和往常一样,大家随便一看就好,这个不能完全当真的。

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 enemytank 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).

- 服务器认定客户端已开火,同步触发计算装填倒计时、炮弹穿深、入射角度、浮动值(+/-25%)、损伤区域,同时判定击穿/跳弹,或者是否对某内部模组造成伤害(比方说打穿了车长的观察塔却死了驾驶员... 亦或者打的是驾驶舱却断了他的履带...) (内部人员:实际上这些事情可以由炮弹在坦克内部跳弹来解释,我们说正事呢,先别管它。)

- Bigworld engine which is running along the streamline of the server fails to process the client request and delivers a "null"

- 和客户端同步运行的Bigworld引擎未能成功处理客户端发出的请求,于是回馈了一个“空值”

- 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.

服务器把这个包含空值的包回馈给客户端:“哟~ 其实那里什么都没有哦”。于是客户端就出现了幽灵弹事件。

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).

这不是一个致命错误,我可以说大约90%的反馈幽灵弹现象并不是由上面描述的那个Bug导致的,而是由于网络延迟或者客户端与服务器之间的轻微延迟(此外,这也可能由一些其他因素导致,比方说服务器和客户端之间的中继服务器出了问题:不久前美服出现的一些问题就是因为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).

很难给出一个准确的数字——但是可以粗略估计一下,它可能出现在任何客户端上,无论地理位置和硬件配置如何,至少每天出现一次,但是一场战斗中出现一次以上的可能性非常低(重要:我的意思并不是说幽灵弹每场战斗都有,而是指当这场战斗中出现过一次幽灵弹现象后几乎不可能再出现第二次了!)

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 byconnection 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.

2— 由Bigworld造成的Bug就很简单多了—— 可以用“我们公司用的引擎并没有问题”或者在未来修复升级引擎来解决。

WoT Cbox 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的工作室利用游戏引擎的一个漏洞,让小号从高空掉下来摔死,在奥格或者暴风银行门口摆成一窜字来打广告(或者骂人...误)。当然现在WOW已经没有这种情况了。


【来源:】
日期
游戏
状态
下载
礼包

页游测试表

日期
游戏
状态
评分
礼包