22

Counter-Strike: Source や Day Of Defeat: Source などの mod で、Half-Life 2 のマルチプレイヤー プロトコルがどのように機能するのか疑問に思っていました。彼らはある種の難読化と独自の圧縮アルゴリズムを使用していると思います。さまざまな種類のメッセージがパケットにどのようにエンコードされているかを知りたいです。

4

5 に答える 5

2

詳細は異なる場合がありますが、一般的なフレームワークはかなり古いものです。簡単な概要は次のとおりです。

doom や Quake などの初期の fps ゲームでは、プレーヤーの位置は、移動コマンドに対するサーバーの応答でのみ更新されました。つまり、あなたが前進ボタンを押すと、クライアントはそれをサーバーに伝え、サーバーはメモリ上のあなたの位置を更新し、新しいゲーム状態を新しい位置でクライアントに中継しました。これは非常にラグーなプレイにつながりました。狭い通路での射撃や移動でさえ、ラグを予測するゲームでした。

新しいゲームでは、クライアントがプレーヤーの射撃と動きを自分で処理できます。これにより、ラグのない動きと発砲が可能になりましたが、クライアント コードをハッキングすることで不正行為の可能性が広がりました。現在、すべてのプレイヤーは自分のコンピューターで独立して移動および発砲し、サーバーに何を行ったかを伝えます。これは、2 人のプレイヤーが互いに衝突したり、同時にパワーアップをキャッチしようとした場合にのみ機能しなくなります。

サーバーは、各プレイヤーからのクライアント状態のこのストリームを受け取り、それらを同期して、それらから一貫したゲームを作成する必要があります。コツは、各プレイヤーのレイテンシーを測定することです。最終的な目標は、横に移動する敵に非常に低遅延の武器 (スナイパーライフルやレールガンなど) を発射し、正しく命中させることです。各プレイヤーのレイテンシーがわかっている場合、プレイヤー A (レイテンシー 50ms) が B (レイテンシー 60ms) に向けて発砲したとします。ヒットするには、A が 50 ミリ秒前の位置から、B が 60 ミリ秒前の位置に B をヒットする必要があります。

これは非常に大まかな概要ですが、一般的なアイデアを提供する必要があります。

于 2009-08-02T19:08:14.543 に答える