我想知道半条命2多人游戏协议如何在反恐精英:来源或失败之日:来源等mod中运作。我相信他们使用某种混淆和专有压缩算法。我想知道在数据包中如何编码不同类型的消息。
答案 0 :(得分:39)
半条命2,反恐精英:来源等都使用了Valves Source引擎。 Valve有一个developer wiki,涵盖了很多东西(很酷的检查出来!)......
这些文章可能会让您感兴趣:
Latency Compensating Methods in Client/Server In-game Protocol, Design and Optimization
答案 1 :(得分:5)
您应该在半条命中查看Luigi Auriemmas papers。你也会在那里找到一个包解码器和一些反汇编的算法。
关于半条命2的逆向工程信息可能很难获得,因为它与作弊有关。我认为像mpcforum这样的董事会是你最好的选择。
答案 2 :(得分:3)
这是一个非常复杂的问题,我的建议是看看一些开源网络游戏引擎:
您还可以查看原始半衰期引擎所基于的地震序列的源代码。
答案 3 :(得分:2)
虽然细节可能不同,但总体框架已经相当陈旧了。这是一个快速概述:
在早期的fps游戏中,例如厄运和Quake,玩家的位置仅在服务器对你的移动命令的响应中更新。也就是说,您按下了前进按钮,客户端将其传达给服务器,服务器在您的内存中对您的位置进行了更新,然后使用您的新位置将新的游戏状态转发给您的客户。这导致了非常滞后的游戏:射击,甚至在狭窄的走廊中移动都是预测滞后的游戏。
较新的游戏让客户自己处理玩家的射击和移动。虽然这导致了无滞后的移动和火灾,但它通过黑客攻击客户端代码打开了更多的欺骗行为。现在,每个玩家都在自己的计算机上独立移动和射击,并与服务器通信他们所做的事情。这只会在两名球员相互撞击或试图同时接通电源时发生故障。
现在服务器拥有来自每个玩家的这个客户端状态流,并且必须同步它们并从中制作一个连贯的游戏。诀窍是衡量每个玩家的延迟。最终目标是能够向侧向移动的敌人发射非常低等待的武器(例如狙击步枪或轨道炮),并使其正确击中。如果知道每个玩家的等待时间,假设玩家A(等待时间50毫秒)在B上发射枪(等待时间为60毫秒)。为了击中,射击必须击中B,其中B是60ms前,A是50ms前。
这是一个非常粗略的概述,但应该给你一般的想法。
答案 4 :(得分:1)
我建议您查看Quake 1-3引擎。它们提供源代码。半衰期的协议可能有点不同,但很可能足够接近。