我和朋友正在讨论FPS服务器如何更新连接到它的客户端。我们看到一个video的人在Battlefield: Bad Company 2作弊,看到它如何突出显示屏幕上敌人的位置,让我们思考。
他的论点是,服务器只使用与客户端直接相关的信息更新客户端。即如果敌方玩家距离客户太远或者出于效率原因而离开客户的视线,服务器将不会发送有关敌方玩家的信息。但他不确定 - 他提出了一个隐藏在岩石后面的人的例子,无法看到任何人。如果玩家突然出现在他的视线中有三名玩家的位置,那么在他们在屏幕上渲染之前会有50ms的延迟,而服务器会传输必要的信息。
我的论点恰恰相反:服务器向客户端发送有关每个玩家的所有信息,并让客户端理清允许的内容和不允许的内容。我认为,对于服务器来说,只需将所有内容发送到客户端并让客户端执行繁重的工作,实际上计算成本就更低了。我还想到这就是作弊程序的工作方式 - 他们拦截服务器数据包,获取敌人的位置,然后在客户端的视图中显示它们。
所以问题:现代第一人称射击服务器用来保持客户更新的一般政策或策略是什么?
答案 0 :(得分:11)
这是你的位置和你朋友的位置之间的妥协,每个游戏都会做出稍微不同的决定,以实现他们想要的权衡。服务器可以尝试不发送超出其需要的信息,例如。执行距离检查,但不可避免地会发送一些可被利用的信息,例如发送一个岩石背后的敌人的位置,这两者都是因为服务器每次计算确切的视线太昂贵还有你提到的延迟问题。
通常情况下,您会发现FPS游戏确实倾向于“泄漏”比其他游戏更多的信息,因为他们更关心的是流畅的游戏体验,需要更快,更常规的更新速度。此外,与MMO不同,FPS播放器通常可以自由移动到不同的服务器,如果他们发现他们的游戏被作弊破坏了。
一些额外的阅读:
答案 1 :(得分:3)
一般策略应该不要信任客户端,因为开发人员应该假设任何人都能够从头开始重写客户端。
话虽如此,我认为很难避免向客户发送此类信息(并防止这种欺骗行为)。即使没有视线,您仍可能需要(间接)发送位置,因为客户可能想要使用一些需要声源等3D位置的环绕声系统。