22

我想知道半条命 2 多人游戏协议如何在反恐精英:来源或失败之日:来源等模组中发挥作用。我相信他们使用了某种混淆和专有压缩算法。我想知道不同类型的消息是如何编码在一个数据包中的。

4

5 回答 5

41

半条命 2、反恐精英:来源等都使用 Valves Source 引擎。Valve 有一个开发者 wiki,它涵盖了很多东西(它很酷,看看吧!)...

这些文章可能会让您感兴趣:

客户端/服务器游戏内协议、设计和优化中的延迟补偿方法

源多人网络

于 2009-05-27T21:51:26.567 回答
5

你应该查看关于半条命的Luigi Auriemmas 论文。你也会在那里找到一个数据包解码器和一些反汇编的算法。

半条命 2 的逆向工程信息可能很难获得,因为它与作弊有关。我猜像mpcforum这样的板是你最好的选择。

于 2009-08-03T08:25:38.593 回答
3

这是一个非常复杂的问题,我的建议是看一些开源网络游戏引擎:

您还可以查看原始半衰期引擎所基于的地震系列的源代码。

于 2009-05-27T21:50:56.397 回答
2

尽管细节可能有所不同,但总体框架已经很老了。这是一个快速概述:

在诸如毁灭战士和雷神之锤等早期 fps 游戏中,玩家的位置仅在服务器对您的移动命令的响应时更新。也就是说,您按下前进按钮,客户端将其传达给服务器,服务器更新您在其内存中的位置,然后使用您的新位置将新的游戏状态传递给您的客户端。这导致了非常滞后的比赛:射击,甚至在狭窄的走廊中移动都是预测滞后的游戏。

较新的游戏让客户端自己处理玩家的射击和移动。尽管这导致了无延迟的移动和火灾,但它通过破解客户端代码打开了更多作弊的可能性。现在每个玩家都在自己的计算机上独立移动和射击,并将他们所做的事情传达给服务器。只有当两名玩家相互碰撞或试图同时获得能量时,这才会失效。

现在服务器拥有来自每个玩家的客户端状态流,并且必须同步它们并用它们制作一个连贯的游戏。诀窍是测量每个玩家的延迟。最终目标是能够向侧向移动的敌人发射非常低延迟的武器(例如狙击步枪或轨道炮)并使其正确命中。如果知道每个玩家的延迟,假设玩家 A(延迟 50 毫秒)向 B 开枪(延迟 60 毫秒)。要命中,必须击中 B,B 是 60 毫秒前的位置,而 A 是 50 毫秒前的位置。

这是一个非常粗略的概述,但应该给你一个大致的想法。

于 2009-08-02T19:08:14.543 回答
2

我建议您查看 Quake 1-3 引擎。它们与源代码一起提供。半条命的协议可能有点不同,但很可能足够接近。

于 2009-08-03T11:59:30.013 回答