Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu cs 1.6 serverstatus abfrage
Yan-13
2005-08-06, 14:43:00
Hi,
Ich habe beim googlen folgenden Link zur Serverstatusabfrage gefunden http://www.resourcecode.de/view.php?id=774
So nun meine Frage reicht es wenn ich nur den untersten Code der bei "Man könnte die Klasse nun folgendermaßen einbinden: " In eine .php datei einfüge ?
Wenn nicht könnt ihr mir sagen was ich noch machen muss ?
mfg Yan13
bArToN
2005-08-06, 14:46:15
Soweit ich das jetzt sehe sollte es funktionieren. Probiers doch einfach mal aus. Du musst es halt dann noch an dein Desgin etc. anpassen ;)
Yan-13
2005-08-06, 15:17:07
lol meistens is es ja so wenn ich hier was frage das ich es schon probiert habe ;)
<?php
/* === serverinfo2.php ================================================ */
require("class_hlserver.inc");
if(isset($address))
{
$hls = new hlserver($address);
}
else
{
$hls = new hlserver("192.168.0.1:27015");
}
$serverinfos = $hls->infos(); // Array mit den Serverinfos
$servercvars = $hls->cvars(); // Array mit den CVARs
$serverplayers = $hls->players(); // Array mit den Spielern
?>
<html>
<head>
<title>Server-Infos von <? echo $serverinfos["name"]; ?> (<? echo $serverinfos["address"]; ?>)</title>
</head>
<body>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan="2"><b>Server Infos</b><br><br></td>
</tr>
<?php
foreach($serverinfos as $info_name => $info_value)
{
echo "<tr>\n";
echo " <td><i><font size=\"2\" face=\"Verdana\">".ucfirst($info_name).":</font></i></td>\n";
echo " <td><font size=\"2\" face=\"Verdana\">$info_value</font></td>\n";
echo "</tr>\n\n";
}
?>
</table>
<br><br>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan=4><b>Spieler</b><br><br></td>
</tr>
<tr>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">#</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Name</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Frags</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Time</font></b></td>
</tr>
<?php
if(!empty($serverplayers))
{
foreach($serverplayers as $player)
{
echo "<tr>\n";
foreach($player as $pl_value)
{
echo " <td><font size=\"2\" face=\"Verdana\">$pl_value</font></td>\n";
}
echo "</tr>";
}
}
?>
</table>
<br><br>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan=2><b>Server CVARs</b><br><br></td>
</tr>
<tr>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Name</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Wert</font></b></td>
</tr>
<?php
foreach($servercvars as $cvar_name => $cvar_value)
{
echo "<tr>\n";
echo " <td><i><font size=\"2\" face=\"Verdana\">$cvar_name</font></i></td>\n";
echo " <td><font size=\"2\" face=\"Verdana\">$cvar_value</font></td>\n";
echo "</tr>\n\n";
}
?>
</table>
<br><br>
</body>
</html>
?>
Den Code habe ich gemeint nur nochma zu veranschaulichung ......
Ich habe ihn in eine .php datei getan und auf meinen Funpic Server geladen ... so nun ist mein problem wenn ich die öffnen will tut er das mit nem malprogramm ..... da ich das via normalem ie ftp mache und ich auf eigenschaften von der datei gehe und da die url in den ie einfüge dteht da Server konnte net gefunden werden .......
mfg Yan13
Yan-13
2005-08-06, 16:51:59
weiß kener ?
Yan-13
2005-08-08, 13:03:48
hat das noch kener gemacht ?
codingworld
2005-08-11, 09:04:45
also,
man braucht den code aus dem 3. kasten in einer extra include datei
erstell eine datei mit dem namen class_hlserver.inc und füge diesen code ein:
<?php
/* === class_hlserver.inc ============================================= */
class hlserver
{
var $ip; // Variable für die IP
var $port; // Variable für den Port
var $fp; // Variable für das File-Handle (die Verbindung)
// weitere Variablen
var $serverinfo;
var $playerlist;
var $cvarlist;
// unsere erste Funktion ist der Klassen-Konstruktor
function hlserver($server_address=0)
{
// keine IP angegeben?
if($server_address == 0)
{
$this->ip = "192.168.0.1";
$this->port = 27015;
}
else
{
// $server_address, bestehend aus IP und Port (ip:port) aufsplitten
list($this->ip, $this->port) = explode(':', $server_address);
}
}
// Verbindung zum Server aufbauen
function connect()
{
// UDP Verbindung aufbauen
if(!$this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3))
{
// Timeout setzen
@socket_set_timeout($this->fp, 3);
die(sprintf("Verbindung zu %s:%s konnte nicht hergestellt werden!", $this->ip, $this->port));
}
}
// Verbindung schließen
function disconnect()
{
if($this->fp)
{
fclose($this->fp);
}
}
// String-Command senden
function send_strcmd($strcmd)
{
fwrite($this->fp, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00));
}
// 1 Byte vom Server holen
function get_byte()
{
return ord(fread($this->fp, 1));
}
// 1 Zeichen (1 Byte) vom Server holen
function get_char()
{
return fread($this->fp, 1);
}
// einen int16-Wert (2 Bytes) vom Server holen
function get_int16()
{
$unpacked = unpack('sint', fread($this->fp, 2));
return $unpacked[int];
}
// einen int32-Wert (4 Bytes) vom Server holen
function get_int32()
{
$unpacked = unpack('iint', fread($this->fp, 4));
return $unpacked[int];
}
// einen float32-Wert (4 Bytes) vom Server holen
function get_float32()
{
$unpacked = unpack('fint', fread($this->fp, 4));
return $unpacked[int];
}
// einen String vom Server holen
function get_string()
{
// so lange ein Zeichen vom Server holen, bis das Zero-Zeichen zurückgegeben wird
while(($char = fread($this->fp, 1)) != chr(0))
{
$str .= $char;
}
return $str;
}
// Server-Ping ermitteln
function ping()
{
$this->connect();
$time1 = explode(' ', microtime());
$this->send_strcmd("ping");
$time2 = explode(' ', microtime());
$this->serverinfo["ping"] = ($time2[0]-$time1[0])*1000000;
$this->disconnect();
return $serverinfo["ping"];
}
// Infos vom Server holen
function infos()
{
$this->connect();
$this->send_strcmd("details");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'm' (S2A_INFO_DETAILED)
$this->serverinfo["address"] = $this->get_string();
$this->serverinfo["name"] = $this->get_string();
$this->serverinfo["map"] = $this->get_string();
$this->serverinfo["gamedir"] = $this->get_string();
$this->serverinfo["game"] = $this->get_string();
$this->serverinfo["players"] = $this->get_byte();
$this->serverinfo["maxplayers"] = $this->get_byte();
$this->serverinfo["protocol"] = $this->get_byte();
$this->serverinfo["type"] = $this->get_char();
$this->serverinfo["os"] = $this->get_char();
$this->serverinfo["password"] = $this->get_byte();
$this->serverinfo["mod"] = $this->get_byte();
if($this->serverinfo["mod"] == 1)
{
$this->serverinfo["mod_info"] = $this->get_string();
$this->serverinfo["mod_dl"] = $this->get_string();
$this->serverinfo["mod_version"] = $this->get_int32()/256;
}
if($this->serverinfo["type"] == 'd')
{
$this->serverinfo["type"] = "Dedicated";
}
else
{
$this->serverinfo["type"] = "Listen";
}
if($this->serverinfo["os"] == 'w')
{
$this->serverinfo["os"] = "Windows";
}
else
{
$this->serverinfo["os"] = "Linux";
}
if($this->serverinfo["password"] == '1')
{
$this->serverinfo["password"] = "Ja";
}
else
{
$this->serverinfo["password"] = "Nein";
}
$this->send_strcmd("infostring");
$this->get_int32(); // -1
fread($this->fp, 20);
$infostring = explode("\\", $this->get_string());
$this->serverinfo["proxytarget"] = $infostring[7];
if($this->serverinfo["proxytarget"] == '1')
{
$this->serverinfo["proxytarget"] = "Ja";
}
else
{
$this->serverinfo["proxytarget"] = "Nein";
}
$this->disconnect();
return $this->serverinfo;
}
// Player-Liste vom Server holen
function players()
{
$this->connect();
$this->send_strcmd("players");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'D' (S2A_PLAYERS)
$playercount = $this->get_byte();
for($i=0; $i < $playercount; $i++)
{
$this->playerlist[$i]["index"] = $this->get_byte();
$this->playerlist[$i]["name"] = $this->get_string();
$this->playerlist[$i]["frags"] = $this->get_int32();
$this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800);
}
$this->disconnect();
return $this->playerlist;
}
// Rules-Liste (CVARs) vom Server holen
function cvars()
{
$this->connect();
$this->send_strcmd("rules");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'E' (S2A_RULES)
$cvarcount = $this->get_int16();
for($i=0; $i < $cvarcount; $i++)
{
$this->cvarlist[$this->get_string()] = $this->get_string();
}
$this->disconnect();
return $this->cvarlist;
}
};
?>
danach musst du noch erstellst du noch eine datei mit egal welchem namen, mit der endung .php. dort fügst du diesen code ein:
<?php
/* === serverinfo2.php ================================================ */
require("class_hlserver.inc");
if(isset($address))
{
$hls = new hlserver($address);
}
else
{
$hls = new hlserver("192.168.0.1:27015");
}
$serverinfos = $hls->infos(); // Array mit den Serverinfos
$servercvars = $hls->cvars(); // Array mit den CVARs
$serverplayers = $hls->players(); // Array mit den Spielern
?>
<html>
<head>
<title>Server-Infos von <? echo $serverinfos["name"]; ?> (<? echo $serverinfos["address"]; ?>)</title>
</head>
<body>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan="2"><b>Server Infos</b><br><br></td>
</tr>
<?php
foreach($serverinfos as $info_name => $info_value)
{
echo "<tr>\n";
echo " <td><i><font size=\"2\" face=\"Verdana\">".ucfirst($info_name).":</font></i></td>\n";
echo " <td><font size=\"2\" face=\"Verdana\">$info_value</font></td>\n";
echo "</tr>\n\n";
}
?>
</table>
<br><br>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan=4><b>Spieler</b><br><br></td>
</tr>
<tr>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">#</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Name</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Frags</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Time</font></b></td>
</tr>
<?php
if(!empty($serverplayers))
{
foreach($serverplayers as $player)
{
echo "<tr>\n";
foreach($player as $pl_value)
{
echo " <td><font size=\"2\" face=\"Verdana\">$pl_value</font></td>\n";
}
echo "</tr>";
}
}
?>
</table>
<br><br>
<table cellspacing="2" cellpadding="1" border="0" width="50%" valign="middle">
<tr>
<td colspan=2><b>Server CVARs</b><br><br></td>
</tr>
<tr>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Name</font></b></td>
<td bgcolor="#205896"><b><font size="2" face="Verdana" color="#ffffff">Wert</font></b></td>
</tr>
<?php
foreach($servercvars as $cvar_name => $cvar_value)
{
echo "<tr>\n";
echo " <td><i><font size=\"2\" face=\"Verdana\">$cvar_name</font></i></td>\n";
echo " <td><font size=\"2\" face=\"Verdana\">$cvar_value</font></td>\n";
echo "</tr>\n\n";
}
?>
</table>
<br><br>
</body>
</html>
wenn du jetzt die 2. datei auf dem server ausführst, müsste die ausgabe erfolgen - die ip muss man natürlich noch anpassen
DR.DEATH
2005-08-14, 17:30:05
Ohne das Script angeschaut zu haben, bin ich der Meinung dass es nicht richtig funktionieren wird. Also zumindest dann nicht wenn auch die Player und eine Serversettings abgefragt werden.
Valve hat innerhalb des letzten halben Jahres? was am Abfrageprotokoll geaendert. Da musst du dir einfach das SDK fuer die HL Version saugen, da ist eine .txt Datei, wo alle Parameter aufgelistet sind.
Yan-13
2005-08-14, 17:54:46
@dr.death sorry kannst du das genauer erklären
DR.DEATH
2005-08-14, 19:26:37
Ich hab mir den Link nochmal angeguckt. Es wird wohl doch noch funktionieren.
Bei jeder Abfrage steht ja: "ASCII 'C' (C++ Konstante: S2A_INFO)", Valve hat aber wohl nur die C++ Konstanten geaendert, ob die ASCIIs geaendert wurden weiss ich nicht. Ich kann mich nurnoch dran erinnern, dass mit einem Update innerhalb des letzten halben Jahres bestimmte Abfrageparameter geaendert wurden, und einige dieser C++ Konstanten waren beschrieben. Deswegen solltest du evtl. das Ganze ausprobieren oder eben einen Blick in den HL SDK werfen, bei den C++ Konstanten bin ich mir sicher, nur bei den ASCIIs eben nicht.
Yan-13
2005-09-06, 15:32:10
also kann ma wer erklären was ich jetzt machen muss um des zum laufen zu bekommen ? habe jetzt beide dateien auf dem server und das ergebnis is dies :
http://web164.server104.rhs-it.de/server.php
was muss ich machen damit es funzt sind nun die beiden dokumente von oben
mfg Yan13
Sphinx
2005-09-07, 17:56:21
Nur nebenbei - ich erinnere mich das ich diese Serverabfragen bei 1&1 mit den Webspace Angeboten ~ nicht durchführen konnte - ich erinnere mich ganz fade daran, das dieses and deren Firewall settings lag.
A - Es lief auf dem RootServer worauf der gameserverlief (auch bei 1und1)
B - Es lief auf meinem "WAMP" System .Welches keine Firewall hatte.
and so on.
Yan-13
2005-09-07, 18:06:48
Hm jo das kann natürlich gut seien muss ma bei meinem space anbieter fragen ......
wo hattest du es denn schonma zum laufen gebracht auf servern von welchem anbieter ?
Sphinx
2005-09-07, 23:18:49
Auf meinem eigenen PC liefen die Scripts die auf UDP Connections basierten. -> Deswegen WAMP (windows,apache,mysql,php)...
Yan-13
2005-09-08, 16:03:04
hast du deine scripte ggf. noch ?
NOLTE
2005-09-14, 21:05:35
Hallo Yan,
Bei Webhostern wie Funpic, ohost, oder wie sie auch alle heissen wollen, ist es so daß aus sicherheitsgründen die funktion "fsockopen" deaktiviert ist. Somit kannst du keinen Verbindung zu deinem Game- bzw. CS-Server aufbauen.
Normalerweise solltest du aber auch eine Fehlermeldung bekommen, wenn du eine "fsockopen"-funktion aufrufst (in einer PHP-Datei).
Außerdem würde ich mir einen anständigen Webhoster suchen. Ich halte von Funpic nur wenig.
Gruß NOLTE
Webmaster LAN
Yan-13
2005-09-14, 21:21:29
jop habe die ******* von funpic voll geht mir aufn wecker habe mir jetzt nen anderen anbieter gesucht und schwups funzt das server script ^^
mfg Yan13
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.