【问题标题】:How does the Half-Life 2 multiplayer protocol work?半条命 2 多人游戏协议如何运作?
【发布时间】:2010-10-29 09:59:36
【问题描述】:

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

【问题讨论】:

  • 我不认为网络协议在这里是正确的术语,所以我删除了标签。
  • 重新添加标签,因为这正是 JtR 似乎要问的。

标签: client-server network-protocols


【解决方案1】:

Half-Life 2、Counter-Strike:Source 等都使用 Valves Source 引擎。 Valve 有一个 developer wiki,它涵盖了很多东西(它很酷,看看吧!)...

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

Latency Compensating Methods in Client/Server In-game Protocol, Design and Optimization

Source Multiplayer Networking

【讨论】:

  • 我想知道添加链接需要多少代表。它没有出现在常见问题中。
  • 我想这可能与我几天前才创建帐户有关 :)
  • 我最感兴趣的是数据包标头的增量压缩和结构,但我找不到这些信息。
  • 把 cmets 放在这里,不要放在答案里。
  • 这些链接没有揭示它是如何对数据包中不同类型的消息进行编码的。
【解决方案2】:

您应该在《半条命》中查看Luigi Auriemmas papers。您还可以在那里找到一个数据包解码器和一些反汇编算法。

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

【讨论】:

  • 这是迄今为止最好的答案,即使它不包含确切的答案。至少我有一个遥远的机会从那个论坛找到知道这件事的人,谢谢!
【解决方案3】:

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

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

【讨论】:

  • 专注于 Quake 引擎的分支——一些最终构建到与半条命兼容的地步。 FTEQuakeWorld 或 TomazQuake 等引擎可能是不错的起点。
  • @A. Scagnelli,The Source 引擎(Half-Life 2 的引擎)并非基于 Quake 引擎。因此,虽然它有助于学习基本的客户端服务器概念,但它不会为您提供确切的代码。
  • 除了许可引擎之外,没有什么可以为您提供确切的代码。源引擎确实起源于 Quake 引擎。
  • @nemo:HL2 应该主要是新代码,但 AFAIK 一些 Quake 引擎代码仍然存在其中。不过网络代码可能不同。
  • Quake 引擎坚如磐石,我希望尽可能多地做 id 所做的事情。
【解决方案4】:

虽然细节可能有所不同,但总体框架已经很老了。以下是简要概述:

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

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

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

这是一个非常粗略的概述,但应该可以为您提供大致的概念。

【讨论】:

  • 这并没有解释不同类型的消息是如何在数据包中编码的。
  • “现在每个玩家都在自己的计算机上独立移动和射击,并将他们所做的事情传达给服务器。”这不是真的,至少在半条命 1 中是这样。客户端只能在本地运行相同的模拟以创建零延迟的假象,但服务器仍然正常获取控制输入,而不是完整状态。服务器仍然对正在发生的事情有最终决定权,因此客户端不能使用它来“破坏游戏规则”
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2013-05-22
    • 2013-11-23
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多