- 2022.03.28 Monday
- スポンサーサイト
-
一定期間更新がないため広告を表示しています
- | スポンサードリンク | - | | - | - | pookmark |
- 2017.02.01 Wednesday
- developer.valve
-
カウンターストライク:グローバルな攻撃的なゲーム状態の統合
このページでは、Counter-Strike:Global Offensiveゲームを実行してゲーム状態の統合を設定する際の基本を概説します。
カウンターストライク:グローバル攻勢
サードパーティがサービスをゲームに統合するには多くの方法があります。ゲーム中にステージ照明と火工を起動し、ゲーム中にプレーヤーのPCに接続されている周辺機器の照明や触覚要素を有効にし、同期されたカスタムインタラクティブグラフィックスでストリーミングオーバーレイを補完します。ゲーム状態、記録されたVODに注釈を付けるためにすべてのゲーム状態変化を収集する
ゲームクライアントはデフォルトですべてのゲーム状態を公開し、クライアントのゲーム状態が変更されるとすぐに更新通知をゲーム状態構造としてJSONを使用してローカルまたはリモートのHTTP POSTエンドポイントに送信することができます。それは、プレーヤーがゲームの状態を提出したい場所と中継する通知を知る必要があります。このドキュメントは、第三者がCS:GOゲームの状態と統合してツールとプロセスを開発するのに役立ちます。
内容
[ 隠す ]
- 1 CS:GOインストールディレクトリの検索
- 2 サンプル設定ファイル
- 3 エンドポイントセクションの設定
- 4 ゲームクライアント認証
- 5 ゲーム状態コンポーネント
- 6 サンプルHTTP POSTエンドポイントサーバー
- 7 外部リンク
CSの検索:GOインストールディレクトリ
CS:GOクライアントは、エンドポイントに送信する宛先およびゲームの状態コンポーネントを見つけるために、エンドポイント構成ファイルを読み取る必要があります。競争の激しいイベントのシステム管理者は、プレーヤーのためにドライブをイメージする時点でトーナメントプレーヤーのコンピュータにゲームクライアントがインストールされている場所を知っているため、インストールディレクトリの検出プロセスは必要ありません。周辺機器の統合を有効にするためにHTTP POSTエンドポイントを実装するキーボードまたはヘッドセットドライバは、ユーザに既存のCS:GOインストールディレクトリを手動で探すように促したり、次のアプローチを使用して自動的に探します。
WindowsのSteamインストールディレクトリは、レジストリのキーの下にあります
HKEY_CURRENT_USER¥Software¥Valve¥Steam
。値 "SteamPath"には、Steamインストールディレクトリの名前を表す文字列が含まれています。SteamがインストールされているD:¥Steam
場合、Steamライブラリのフォルダが一覧表示されD:¥Steam¥steamapps¥libraryfolders.vdf
ます。ほとんどの場合、OSXのSteamライブラリのフォルダファイルは、にあり
~/Library/Application Support/Steam/steamapps/libraryfolders.vdf
ます。ほとんどの場合、LinuxのSteamライブラリフォルダのファイルはで見つかり
~/.local/share/Steam/SteamApps/libraryfolders.vdf
ます。CS:GOのインストールディレクトリ
libraryfolders.vdf
をlibraryfolders.vdf
自動的に検索するプロセスは、共通のCS:GOインストールを探している場所を含め、見つかったすべてのユーザーのSteam Library Foldersを繰り返し処理できるようになりました。Steamがインストールされていて
D:¥Steam
、CS:GOがSteamインストールディレクトリに直接インストールされている場合、CS:GO設定ファイルの場所は次のようになり"D:¥Steam¥steamapps¥common¥Counter-Strike Global Offensive¥csgo¥cfg"
ます。あなたのサービスでゲームの状態を統合する
gamestate_integration_yourservicenamehere.cfg
には、csgo / cfg ディレクトリに名前をつけたテキストファイルを置く必要があります.CS:GOは次にゲームが始まる時にそれを取ります。異なるサービスは、独自のゲーム状態統合ファイルをcsgo / cfgディレクトリに置くことができ、ゲームクライアントは登録されたすべてのサービス設定に情報を中継します。たとえば、私のサンプルサービスは設定ファイルをここに配置します:
D:¥Steam¥steamapps¥common¥Counter-Strike Global Offensive¥csgo¥cfg¥gamestate_integration_consolesample.cfg
gamestate_intergration_node
設定ファイルの例
以下は、プレーヤー自身のゲームプレイ体験を統合するための設定ファイルのサンプル
gamestate_integration_consolesample.cfg
です:"Console Sample v.1" { "uri" "http://127.0.0.1:3000" "timeout" "5.0" "buffer" "0.1" "throttle" "0.5" "heartbeat" "60.0" "auth" { "token" "CCWJu64ZV3JHDT8hZc" } "data" { "provider" "1" "map" "1" "round" "1" "player_id" "1" "player_state" "1" "player_weapons" "1" "player_match_stats" "1" } }
チーム観戦者に接続されたトーナメントオブザーバーのマシンから駆動されるステージ照明の設定ファイルの例を次に示します
gamestate_integration_observerspectator.cfg
。"Observer All Players v.1" { "uri" "http://10.0.1.3:8080" "timeout" "5.0" "buffer" "0.1" "throttle" "0.1" "heartbeat" "30.0" "auth" { "token" "Q79v5tcxVQ8u" } "data" { "provider" "1" "map" "1" "round" "1" "player_id" "1" "allplayers_id" "1" "player_state" "1" "allplayers_state" "1" "allplayers_match_stats" "1" "allplayers_weapons" "1" } }
注: allplayers_weaponsペイロードはゲームアップデート1.35.4.1から利用可能になったため、LANハートビートエンドポイントにのみ使用することをお勧めします。有効にするとペイロードサイズと頻度が大幅に増加するためです。
重要:設定ファイルにUTF8-BOMがないことを確認してください。そうしないと、設定ファイルが読み込まれません。CS:GOを起動した後、コンソールの出力によってファイルが正常にロードされたかどうかを確認できます。
エンドポイントセクションの設定
- uri:ゲームはこのuriにPOSTリクエストを行います。エンドポイントがトラフィックを暗号化する必要がある場合は、セキュアなURIを指定し、サービス終了時にSSLを使用することを推奨します。スチーム・クライアントは自動的にSSLを使用し、https宛先のエンドポイント証明書を検証します。
- タイムアウト:ゲームはHTTP POSTリクエストからHTTP 2XXレスポンスコードを期待し、ゲームは前のリクエストがまだ飛行中に次のHTTP POSTリクエストを送信しようとしません。ゲームは、応答が非常に多くの秒間に受信されなかった場合、要求がタイムアウトしたものとみなし、次にデルタ計算を省略したフル状態で次の時間に再鼓動します。この設定が指定されていない場合、デフォルトの1.1秒のタイムアウトが使用されます。
エンドポイントでJSONペイロードブロックが「以前の」または「追加された」というメッセージを受信しない場合、これはゲームクライアントがHTTP 2XX応答を受け取らないことを示している可能性があります。
- バッファー:複数のゲームイベントが次々に発生する傾向があるため、ゼロ以外のバッファーを指定することをお勧めします。バッファリングが有効になっている場合、ゲームはより大きなデルタを報告するために非常に多くの秒間イベントを収集します。localhostサービスの統合では、これは問題ではなく、バッファリングを完全に無効にするために、サービスのニーズに合わせて調整するか、0.0に設定することができます。この設定が指定されていない場合、0.1秒のデフォルトバッファが使用されます。
- スロットル:トラフィックの多いエンドポイントの場合、ゲームの状態があまりにも頻繁に変更されたときに、サービスに通知するのを避けるために、この設定では、少なくとも2秒前のHTTP 2XX応答を受信した後、設定が指定されていない場合は、デフォルトのスロットル1.0秒が使用されます。
- ハートビート:ゲームの状態が変化しなくても、この設定は、以前のHTTP 2XXレスポンスを受信してから数秒後にリクエストを送信するようにゲームに指示します。このサービスは、ハートビート間隔を超えるかなりの期間、通知を受け取らなかった場合、ゲームをオフラインまたは非接続とみなすように構成することができます。
ゲームクライアント認証
このドキュメントで提供されている両方のサンプルcfgファイルには、オプションの
"auth"
構成セクションが含まれています。ほとんどのローカルホストやLAN統合シナリオでは、このセクションは完全に省略できますが、存在する場合、このセクションのフィールドはJSON文字列フィールドとしてエンドポイントに送信され、ペイロードを認証します。エンドポイントは、認証ブロックを含む飛行中のペイロードを保護するためにSSLも使用することが推奨されます。ゲームの状態コンポーネント
すべてのゲームの状態は、サービスを独立して購読できる独立したブロックに分かれています。たとえば、発射されたすべての弾薬に対する触覚フィードバックを提供するサービスは、
"player_weapons"
ペイロードと兵器および弾薬データの変更を取得することに関心がありますが、ビデオストリームに注釈を付けるサービスは、"map"
コンポーネントの登録のみでマップ名とラウンド数得点した。サービスを開発する場合は、ゲームで送信されたJSONペイロードを出力し、サービス操作に不要な不要なコンポーネントを削除するために、以下に示すサンプルコンソールプログラムを使用することをお勧めします。
報告されたコンポーネントのデータが変更されると、ゲームクライアントはバッファタイマーを開始し、経過した後、または即座にバッファリングが無効にされた場合、最後の成功したHTTP 2XX応答でペイロードから計算されたエンドポイントから。以前のレポートから変更されたデータの場合、グローバルブロックに
"previously"
は変更されたゲーム状態の古い状態が含まれますが、新しいデータの場合、グローバルブロックに"added"
は新しいゲーム状態に存在するが古いゲーム状態。サンプルHTTP POSTエンドポイントサーバー
ゲームのペイロードをコンソールに表示するHTTP POSTサーバー実装の例は、https: //nodejs.orgフレームワークを使用してここで提供されています。あなたは、提供されたスクリプトを保存することができます
mysample.js
し、実行するnode mysample.js
ローカルホストのポート3000でHTTP POSTサーバを起動します。http = require('http'); fs = require('fs'); port = 3000; host = '127.0.0.1'; server = http.createServer( function(req, res) { if (req.method == 'POST') { console.log("Handling POST request..."); res.writeHead(200, {'Content-Type': 'text/html'}); var body = ''; req.on('data', function (data) { body += data; }); req.on('end', function () { console.log("POST payload: " + body); res.end( '' ); }); } else { console.log("Not expecting other request types..."); res.writeHead(200, {'Content-Type': 'text/html'}); var html = '<html><body>HTTP Server at http://' + host + ':' + port + '</body></html>'; res.end(html); } }); server.listen(port, host); console.log('Listening at http://' + host + ':' + port);
外部リンク
- | whaison | V A L V E Developer Community For S t e a m | 10:44 | comments(0) | - | pookmark |