2009-05-27 8 views
20

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

+1

ここではネットワークプロトコルが正しいとは思わないので、タグを削除しました。 –

+1

JtRが求めているようなものだから、タグを読んだ。 –

答えて

39

ハーフライフ2、カウンターストライク:ソースなどはすべてバルブソースエンジンを使用します。バルブは、多くのものをカバーdeveloper wikiを持っている...

をこれらの記事は、あなたが興味かもしれません(そのかなりクールそれをチェックアウト!):

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

Source Multiplayer Networking

+0

リンクを追加するにはどのくらいの担当者が必要なのだろうか。 faqには表示されません。 – Copas

+0

数日前にアカウントを作っているだけのことかもしれません:) –

+3

私は、デルタの圧縮とパケットヘッダーの構造に興味があり、その情報を見つけることができませんでした。 – JtR

3

これは本当に複雑な問題であり、私の提案は、オープンソースのネットワークゲームエンジンのいくつかを見て次のようになります。

また、ソースを見ることもできますオリジナルの半減期エンジンが基づいている地震シリーズのコード。

+0

Quakeエンジンのブランチに重点を置いています。その中には、Half-Lifeとの互換性の点までビルドアップしたものもあります。 FTEQuakeWorldやTomazQuakeのようなエンジンは良い飛び降り点かもしれません。 –

+0

@A。 Scagnelli、Sourceエンジン(Half-Life 2のエンジン)は、Quakeエンジンに基づいていません。だから、基本的なクライアントサーバーの概念を学ぶのは良いでしょうが、それはあなたに正確なコードを与えるつもりはありません。 –

+0

エンジンのライセンス供与を除いて、正確なコードは何も表示されません。ソースエンジンはQuake Engineのルーツを持っています。 – Aistina

2

詳細は異なるかもしれないが、一般的なフレームワークはかなり古いです。ここで概要を簡単に説明します:

doomやQuakeなどの初期のfpsゲームでは、あなたの移動コマンドに対するサーバーの応答でプレーヤーの位置が更新されました。つまり、前進ボタンを押した後、クライアントがサーバーにその情報を伝えた場合、サーバーは自分の位置を記憶に追いやって、新しい位置でクライアントに新しいゲーム状態を中継します。これは非常に遅い遊びにつながりました。撮影、狭い廊下を移動することさえも、遅れを予測するゲームでした。

新しいゲームでは、クライアントがプレーヤーの撮影と移動を単独で処理できるようになりました。これは遅れのない動きと火災につながりましたが、クライアントのコードをハッキングすることで不正行為の可能性をさらに広げました。すべてのプレイヤーは、自分のコンピュータ上で独立して移動して発砲し、サーバーに行ったことを伝えます。これは、2人のプレーヤーがお互いにぶつかり合ったり、同時に電源を入れようとするときに壊れます。

これで、サーバーには各プレーヤーからのこのクライアント状態ストリームがあり、それらを同期させて一貫性のあるゲームを作成する必要があります。トリックは各プレーヤーのレイテンシを測定することです。究極の目標は、敵が横に動いて、それが正しく命中するように、非常に低いレイテンシーの武器(スナイパーライフルやレールガンなど)を発射できることです。各プレイヤーのレイテンシが分かっている場合、プレーヤーA(レイテンシ50ms)がBのガンを発射したとします(レイテンシ60ms)。ヒットするには、ショットはBが60ms前、ここでAは50ms前からBになる必要があります。

これは非常に概要がわかりますが、一般的な考え方を示す必要があります。

+0

これは、異なる種類のメッセージがパケット内でどのように符号化されるかを説明しません。 – JtR

+2

"すべてのプレイヤーは、自分のコンピュータ上で独立して移動して発砲し、サーバーと通信します。これは、少なくとも半減期1では真実ではありません。クライアントは、同じシミュレーションをローカルで実行してゼロラグの錯覚を作成することができますが、サーバーは完全な状態ではなく通常は制御入力を受け取ります。サーバーはまた何が起こっているかについて最後の言葉を残しているので、クライアントはこれを使ってゲームルールを破ることはできません –

5

ハーフライフでLuigi Auriemmas papersをチェックしてください。パケットデコーダとその中のいくつかの逆アセンブルされたアルゴリズムも見つかります。

ハーフライフ2のリバースエンジニアリング情報は、不正行為との関連性があるため、やむを得ない場合があります。私はmpcforumのようなボードはあなたの最善の策だと思います。

+0

正確な答えが含まれていなくてもこれまでのところ最高の答えです。少なくとも私はこのフォーラムからこれについて知ってくれる誰かを見つける機会があります。ありがとうございます! – JtR

1

私は、Quake 1-3エンジンを調べることをお勧めします。それらはソースコードで利用可能です。半減期のプロトコルは多少異なるかもしれませんが、おそらく十分に近いでしょう。

関連する問題