Comment afficher l'état d'un serveur de jeux sur un siteweb

IyF
Petit nouveau ! | 2 Messages

18 mai 2007, 02:35

La question figure donc dans le topic. Je cherche un code a inserer dans mon index afin de montrer le nombre de joueur, la carte jouée, si possible une image de la carte jouée. et les infos détaillées sur le temps ou chaque joueur joue et son pseudo. Des codeurs de site pour joueurs arrivent a faire ceci mais je ne sais pas le retrouvé. plz help :)

IyF
Petit nouveau ! | 2 Messages

18 mai 2007, 02:46

je vien de trouver qq petits fichiers... :

index.php
<?php 
include("cssource_class.php");
include("template_class.php");
set_time_limit(120);

if(isset($_GET['ip']) && isset($_GET['port'])) {
	$css = new cssource($_GET['ip'], $_GET['port']);
	$css->setSortBy("frags"); // Sort players by Frags (supported: index, time, frags)
	$output = $css->status();
	
	$wrap_template = new temp("wrapper");
	$wrap_template->replace("net_protocol", $output['net_protocol']);
	$wrap_template->replace("ip", $output['ip']);
	$wrap_template->replace("port", $output['port']);
	$wrap_template->replace("hostname", $output['hostname']);
	$wrap_template->replace("map", $output['map']);
	$wrap_template->replace("game_dir", $output['game_dir']);
	$wrap_template->replace("game_type", $output['game_type']);
	$wrap_template->replace("appid", $output['appid']);
	$player_status = ($output['num_players'] == $output['max_players']) ? "full" : "notfull";
	$wrap_template->replace("player_status", $player_status);
	$wrap_template->replace("num_players", $output['num_players']);
	$wrap_template->replace("max_players", $output['max_players']);
	$wrap_template->replace("bot_players", $output['bot_players']);
	$dedicated = ($output['dedicated'] == "d") ? "Yes" : "No";
	$wrap_template->replace("dedicated", $dedicated);
	$server_os = ($output['server_os'] == "w") ? "Windows" : "Linux";
	$wrap_template->replace("server_os", $server_os);
	$needpass = ($output['needpass'] == "1") ? "Yes" : "No";
	$wrap_template->replace("needpass", $needpass);
	$secure = ($output['secure'] == "1") ? "Yes" : "No";
	$wrap_template->replace("secure", $secure);
	
	$players_html = "";
	foreach($output['players'] AS $player) {
		$player_template = new temp("player");
		$player_template->replace("index", $player['index']);
		$player_template->replace("name", $player['name']);
		$player_template->replace("frags", $player['frags']);
		$player_template->replace("time", date("H:i:s", $player['time']));
		$players_html .= $player_template->show();
	}
	$wrap_template->replace("players", $players_html);
	
	$rules_html = "";
	foreach($output['rules'] AS $rule => $value) {
		$rule_template = new temp("rule");
		$rule_template->replace("rule", $rule);
		$rule_template->replace("value", $value);
		$rules_html .= $rule_template->show();
	}
	$wrap_template->replace("rules", $rules_html);
	
	echo $wrap_template->show();
}
else {
	$wrap_template = new temp("wrapper_empty");
	echo $wrap_template->show();
}
?>
cssource_class.php :
<?php
class cssource {
	var $ip;
	var $port;
	var $timeout;
	var $sock;
	var $data;
	var $output = array();
	var $sortBy;
	
	function cssource($ip, $port="", $timeout=200) {
		$this->ip = $ip;
		$this->port = (empty($port)) ? 27015 : $port;
		$this->timeout = $timeout;
	}
	
	function status() {
		if(!$this->sock = @fsockopen("udp://".$this->ip, $this->port)) {
			die("Could not connect to the socket.");	
		}
		else {
			$querys[] = "\xFF\xFF\xFF\xFF\x54";
			$querys[] = "\xFF\xFF\xFF\xFF\x55";
			$querys[] = "\xFF\xFF\xFF\xFF\x56";
			
			$wait = 0;
			foreach($querys AS $querystring) {
				fwrite($this->sock, $querystring);
				while($wait < $this->timeout) {
					$string = fread($this->sock, 4096);
					$wait += 10;
					
					if(!empty($string)) {
						$this->data[] = $string;
						if(strlen($string) < 4096)
							break;
					}
				}
			}
			@fclose($this->sock);
			
			if(empty($this->data[0]))
				die("No data was returned from the query.");
			
			$this->parseStatus();
			$this->parsePlayers();
			$this->parseRules();

			return $this->output;
		}
	}
	
	function parseStatus() {
		$status = $this->data[0];
		$i = 5;
			
		$this->output['net_protocol']	= ord($status{$i++});
		$this->output['ip']				= $this->ip;
		$this->output['port']			= $this->port;
		$this->output['hostname']		= $this->readString($status, $i);
		$this->output['map']			= $this->readString($status, $i);
		$this->output['game_dir']		= $this->readString($status, $i);
		$this->output['game_type']		= $this->readString($status, $i);
		$this->output['appid']			= ord($status{$i++}.$status{$i++});
		$this->output['num_players']	= ord($status{$i++});
		$this->output['max_players']	= ord($status{$i++});
		$this->output['bot_players']	= ord($status{$i++});
		$this->output['dedicated']		= $status{$i++};
		$this->output['server_os']		= $status{$i++};
		$this->output['needpass']		= ord($status{$i++});
		$this->output['secure']			= ord($status{$i++});
		
		return TRUE;
	}
	
	function parsePlayers() {
		$players = $this->data[1];
		$i = 5;
		$num_players = ord($players{$i++});
		
		$this->output['players'] = array();
		if($num_players > 0) {
			for($p = 0; $p < $num_players-1; $p++) {
				if(!empty($players{$i+1})) {
					$this->output['players'][$p]['index'] = ord($players{$i++});
					$this->output['players'][$p]['name'] = $this->readString($players, $i);
					
					$frags = unpack("L", substr($players, $i, $i+4)); $i+=4;
					$this->output['players'][$p]['frags'] = $frags[1];
					
					$time = unpack("f", substr($players, $i, $i+4)); $i+=4;
					$time = mktime(0, 0, $time[1]);
					//$time = date("H:i:s", $time);
					$this->output['players'][$p]['time'] = $time;
				}
			}	
		}
		
		$this->sortPlayers($this->sortBy);
		
		return TRUE;
	}
	
	function parseRules() {
		$rules = $this->data[2];
		$rule = explode("\x00", $rules);
		$num_rules = count($rule);
		
		for($i = 6; $i < $num_rules; $i+=2)
			$this->output['rules'][$rule[$i-1]] = $rule[$i];
		
		return TRUE;
	}
	
	function readString($string, &$i) {
		$begin = $i;
		$strlen = strlen($string);
		for ($i; ($i < $strlen) && ($string{$i} != chr(0)); $i++);
		$result = substr($string, $begin, $i-$begin);
		$i++;
		
		return $result;
	}
	
	function sortPlayers($sortvar="index") {
		$players = $this->output['players'];
		$num_players = count($players);
		
		for($i = 0; $i != $num_players; $i++) {
			$a = $i;
			$b = $num_players-1;
			while ($a != $b){
				if ($players[$a][$sortvar] > $players[$b][$sortvar])
					$b--;
				else
					$a++;
			}
			$h = $players[$i];
			$players[$i] = $players[$a];
			$players[$a] = $h;
		}
		$this->output['players'] = $players;
		
		return TRUE;
	}
	
	function setSortBy($sortvar) {
		$this->sortBy = $sortvar;	
	}
}
?>
template_class.php :
<?php
class temp {
	var $template;
	var $html;
	
	function temp($template) {
		$this->template = $template;
		$this->html = implode("", file("./templates/".$this->template.".tpl"));
		return TRUE;
	}
	
	function replace($variable, $replace) {
		$this->html = str_replace("{\$".$variable."}", $replace, $this->html);
		return TRUE;
	}
	
	function show() {
		return $this->html;
	}
}
?>
players.php :

		<tr>
			<td>{$name}</td>
			<td>{$frags}</td>
			<td>{$time}</td>
		</tr>
rule.php
		<tr>
			<td>{$rule}</td>
			<td>{$value}</td>
		</tr>

wrapper.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>CS:Source Server Query</title>
<style type="text/css">
<!--
BODY {
	margin: 10px;
	background: #52A5F2;
	color: #666666;
	font: normal 12px Arial, Helvetica, sans-serif;
}

.main {
	margin-bottom: 25px;
	background: #DDDDDD;
	border: 2px solid #FFFFFF;
}

.main TD.title {
	background: #2A6DAC;
	color: #DBF0FE;
	font: bold 13px Arial, Helvetica, sans-serif;
	letter-spacing: -1px;
	text-transform: uppercase;
}

.main TD {
	background: #F7F7F7;
}

#wrapper {
	width: 500px;
	margin: auto;
}

.full {
	color: #A20000;
}

.notfull {
	color: #44C32B;
}

INPUT {
	font: normal 11px Arial, Helvetica, sans-serif;
	background: #FFFFFF;
	border: 1px solid #AAAAAA;
}

INPUT.submit {
	background: #DDDDDD;
	border: 1px solid #AAAAAA;
}
-->
</style>
</head>

<body>
<div id="wrapper">
	<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
		<tr>
			<td class="title">query a server</td>
	    </tr>
		<form action="index.php" method="GET">
		<tr>
			<td>
			IP: <input name="ip" type="text" size="25" /> : PORT: <input name="port" type="text" size="10" /> <input class="submit" type="submit" value="Query" />
			</td>
		</tr>
		</form>
	</table>
	<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
		<tr>
			<td colspan="2" class="title">server details</td>
	    </tr>
		<tr>
			<td colspan="2"><img src="maps/de_dust.jpg" /></td>
		</tr>
		<tr>
			<td width="15%">Name</td>
			<td width="85%">{$hostname}</td>
		</tr>
		<tr>
			<td>Address</td>
			<td>{$ip}:{$port}</td>
		</tr>
		<tr>
			<td>Map</td>
			<td>{$map}</td>
		</tr>
		<tr>
			<td>Game</td>
			<td>Counter-Strike Source</td>
		</tr>
		<tr>
			<td>Players</td>
			<td><span class="{$player_status}">{$num_players}/{$max_players}</span> ({$bot_players} Bots)</td>
		</tr>
		<tr>
			<td>Password</td>
			<td>{$needpass}</td>
		</tr>
		<tr>
			<td>Protocol</td>
			<td>{$net_protocol}</td>
		</tr>
		<tr>
			<td>Dedicated</td>
			<td>{$dedicated}</td>
		</tr>
		<tr>
			<td>Server OS</td>
			<td>{$server_os}</td>
		</tr>
	</table>
	<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
		<tr>
			<td colspan="3" class="title">currently playing</td>
	    </tr>
		<tr>
			<td><b>Name</b></td>
			<td><b>Frags</b></td>
			<td><b>Time</b></td>
		</tr>
{$players}
	</table>
	<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
		<tr>
			<td colspan="2" class="title">rules</td>
	    </tr>
{$rules}
	</table>
	<div style="text-align: center; color: #DBF0FE;">Query generated using noginn's CS:Source query class.</div>
</div>
</body>
</html>
wrapper_empty.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>CS:Source Server Query</title>
<style type="text/css">
<!--
BODY {
	margin: 10px;
	background: #52A5F2;
	color: #666666;
	font: normal 12px Arial, Helvetica, sans-serif;
}

.main {
	margin-bottom: 25px;
	background: #DDDDDD;
	border: 2px solid #FFFFFF;
}

.main TD.title {
	background: #2A6DAC;
	color: #DBF0FE;
	font: bold 13px Arial, Helvetica, sans-serif;
	letter-spacing: -1px;
	text-transform: uppercase;
}

.main TD {
	background: #F7F7F7;
}

#wrapper {
	width: 500px;
	margin: auto;
}

.full {
	color: #A20000;
}

.notfull {
	color: #44C32B;
}

INPUT {
	font: normal 11px Arial, Helvetica, sans-serif;
	background: #FFFFFF;
	border: 1px solid #AAAAAA;
}

INPUT.submit {
	background: #DDDDDD;
	border: 1px solid #AAAAAA;
}
-->
</style>
</head>

<body>
<div id="wrapper">
	<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
		<tr>
			<td class="title">query a server</td>
	    </tr>
		<form action="index.php" method="GET">
		<tr>
			<td>
			IP: <input name="ip" type="text" size="25" /> : PORT: <input name="port" type="text" size="10" /> <input class="submit" type="submit" value="Query" />
			</td>
		</tr>
		</form>
	</table>
	<div style="text-align: center; color: #DBF0FE;">Query generated using noginn's CS:Source query class.</div>
</div>
</body>
</html>
Bon beh voila... qu'est qu'il y a a personaliser quelles valeurs changer. Comment inserer tout ceci dans un template deja existant : http://itx.free.fr/ ?? Merci de bien vouloir méclaircir ou de me proposer un code plus simple ^^