FPS多人游戏服务器更新客户端的一般策略是什么?

7
我和一个朋友讨论了FPS服务器如何更新连接到它的客户端。我们观看了一个视频,其中一个人在战地:恶公司2中作弊,看到它如何突出显示屏幕上敌人的位置,这让我们想起了什么。
他认为服务器只会向客户端更新即时相关的信息。例如,如果敌方玩家距离客户端太远或者客户端视线之外,服务器不会发送有关敌方玩家的信息,以提高效率。但他不确定——他提出了一个例子,有人藏在石头后面,看不到任何人。如果玩家突然出现在他的视线范围内,而他前方有三名玩家,那么在服务器传输必要信息的50毫秒延迟之前,他们将无法在屏幕上呈现。
我的观点恰恰相反:服务器向客户端发送有关每个玩家的所有信息,让客户端自行确定允许什么和不允许什么。我认为,这样做对于服务器来说实际上在计算方面更加节省成本,因为服务器只需将所有内容发送到客户端,然后让客户端进行重量级操作。我还想到了作弊程序是如何工作的——它们拦截服务器数据包,获取敌人的位置,然后在客户端视图中显示它们。
那么问题来了:现代第一人称射击游戏服务器采用哪些一般策略或政策来保持其客户端更新?
2个回答

11

这是在你和朋友的立场之间做出的一种妥协,每个游戏都会在这方面做出略微不同的决定以实现他们所期望的权衡。服务器可能会尽量不发送比它需要的更多的信息,例如执行距离检查,但不可避免地会发送一些可以被利用的信息,例如发送一个敌人的位置,而这个敌人在石头后面,仅仅是因为服务器每次计算精确的视线太昂贵了,而且还存在你提到的延迟问题。

通常,你会发现FPS游戏会比其他游戏泄露更多的信息,因为它们更关心平滑的游戏体验,需要更快和更经常的更新速度。此外,与MMO不同,FPS玩家通常可以自由移动到另一个服务器,如果他们发现自己的游戏被作弊破坏了。

一些额外的阅读材料:


您是否有任何在线资源可以让我进一步了解这个问题? - Hooray Im Helping
2
我在答案中添加了一些链接。我特别喜欢阅读Gamedev.net论坛并从中学到了很多东西。 - Kylotan
1
非常棒的资源,特别是Source Multiplayer Networking。我本来就想用它来回答了。+1 - Leftium

3

一般的策略应该是不信任客户端,这意味着开发者应该假设任何人都能够从头开始重写客户端。

话虽如此,我认为很难避免向客户端发送这种信息(并防止这种欺骗)。即使没有视线,您仍可能需要发送位置(间接地),因为客户端可能希望利用某些环绕声系统,这需要声源的三维位置等信息。


1
不幸的是,“应该是土地”是一个遥远的地方,不符合现实。 ;) - dash-tom-bang
1
然而,重点仍然存在 - 你不应该相信客户端,因为人们会利用这种信任来欺骗。这适用于向客户端提供比它应该知道的更多信息,也适用于接收准确的命令(例如,客户端告诉服务器它正在穿过墙壁)。 - Numeron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接