Source Query PHP Library を使ってMinecraftやRUSTのサーバー情報を表示する

thumbnail

PHP Source Query とは、Rcon・Queryを使ってゲームサーバーから情報を取得できるPHPライブラリです。

これ使えば自分のゲームサーバーの死活監視を行ったり、ログインしているプレイヤー名一覧などを自分のHP上へ表示したり、ゲーム内にいるキャラクターにアイテムを付与したり出来ます。

GitHub – xPaw/PHP-Source-Query
https://github.com/xPaw/PHP-Source-Query

動作環境

PHP 5.5 (64-bit) 以上

対応ゲーム一覧

  • Counter-Strike 1.6
  • Team Fortress 2
  • Left 4 Dead 2
  • Counter-Strike: Global Offensive
  • Rag Doll Kung Fu
  • The Ship
  • Garry’s Mod
  • Nuclear Dawn
  • Dino D-Day
  • Arma 3(Queryのみ)
  • Call of Duty: Modern Warfare 3
  • Starbound
  • Space Engineers(Queryのみ)
  • Rust(Queryのみ)
  • Quake Live(Queryのみ)
  • ARK: Survival Evolved
  • Minecraft(RCONのみ)

ファイルのダウンロード

ソースファイルをこちらからダウンロードしてください。

ダウンロード方法は、緑色の「Clone or download」を押して「Download ZIP」を押します。

次に、ダウンロードしたZIPファイルを展開します。
この中で実際に使用するのは「SourceQuery」、「Examples」フォルダのみです。

Examplesフォルダの中には表示用のサンプルが入っているので、今回はこれを流用します。

RCONを使うならRconExample.phpを、Queryを使うならExample.phpかView.php(デザイン付。こちらがおすすめ)を使用します。

ソースの書き換え

使用する前に、ダウンロードしたファイルを書き換える必要があります。
ここでは例としてMinecraftサーバーにRCONで接続してみることにします。(Minecraft側のrcon設定は省略します。)

Examplesフォルダにある、RconExample.phpを下記のように書き換えます。IPアドレスやRCONパスワードは自分のものに置き換えてください。

<?php
	require __DIR__ . '/../SourceQuery/bootstrap.php';

	use xPaw\SourceQuery\SourceQuery;

	// For the sake of this example
	Header( 'Content-Type: text/plain' );
	Header( 'X-Content-Type-Options: nosniff' );

	// Edit this ->
	define( 'SQ_SERVER_ADDR', 'XXX.XXX.XXX.XXX' );
	// ①ゲームサーバーのIPアドレスを入力
	define( 'SQ_SERVER_PORT', 25575 );
	// ②ゲームサーバーのrconポートを入力
	define( 'SQ_TIMEOUT',     1 );
	define( 'SQ_ENGINE',      SourceQuery::SOURCE );
	// Edit this <-

	$Query = new SourceQuery( );

	try
	{
		$Query->Connect( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE );

		$Query->SetRconPassword( 'PASSWORD' );
		// ③ゲームサーバーに設定したrconパスワードを入力

		var_dump( $Query->Rcon( 'list' ) );
		// ④実行したいコマンドを入力。listはプレイヤー一覧を出力する。
	}
	catch( Exception $e )
	{
		echo $e->getMessage( );
	}
	finally
	{
		$Query->Disconnect( );
	}

Minecraftサーバーに接続する

出来上がったファイルは web サーバーにアップロードしてください。
ブラウザでアクセスするとこのように表示されます。

サーバーにログインしているユーザー名と人数が表示されました。

Can’t connect to RCON server: Connection refused

と表示される場合は、ゲームサーバーとの通信が上手くいっていないので「rconポートの開放」「ゲームサーバーの設定」などを見直してみてください。

listの他にも、sayやtitle、gamemodeなど、Minecraft内で使用できる様々なコマンドをweb上から実行することが出来ます。

これを利用して一定時間ごとにランダムに難易度が変わるプログラムとか書くと面白そうですよね。

RUSTサーバーに接続する

RUSTは、このライブラリではRCONに対応していないのでQueryを使用します。先程と同じ感じで View.php のIPアドレスとポート番号の部分を書き換えてアップロードします。

表示してみるとこんな感じ。

サーバー名・マップサイズ・シード値・ログインしているユーザー数などが表示されました。
RCONではないのでコマンドなどは送信できませんが、一通りの情報を取得できます。

RCONコマンドを送信したい場合には 、Facepunch公式の 「webrcon」ツールがあるのでそちらを使用してください。https://github.com/Facepunch/webrcon/tree/gh-pages

この他に、ブラウザを使用しない「RustAdmin」ツールもあります。
ユーザーのpingやkick、ban、サーバーの説明文の変更などを起動中に行える優秀なツールです。
イベントのタイマー機能でユーザーがログインした時にメッセージを表示する事も出来ます。
https://www.rustadmin.com/

セキュリティにご注意を

rconでコマンドを外部から実行できてしまうので、rconパスワードは必ず複雑なものを使用してください。

また、コマンドによってはサーバーを停止出来たり、BANやKICKも行えるので取り扱いには十分ご注意ください。