Just nu i M3-nätverket
Gå till innehåll

Får inte igång gratisscript


Grains

Rekommendera Poster

Hej igen. Nu har jag efter mycket letande och skrivande till folk lyckats få tag på ett "gamer server viewer script". Men hur mycket jag än tricksar inne i det så vägrar det att visa något annat än en helt blank sida.

Antar att man bör ha liten baskunskap på php för att inte plocka bort fel saker för nu tycker jag att jag testat allt.....

 

Någon som bara skulle kunna antingen förklara eller möblera scriptet så det funkar vore helt underbart!

 

Följande uppgifter är det för servern(den är ej på):

Game: Counter-Strike Source(Antar det går under Half-life2 "HL2"

Port: 27015

IP: 83.227.193.230

 

Och här har vi scriptet:

[log]<?php

 

 

class gQuery

{

 

// gQuery system variables

var $errors = array(); // Errors in the script

var $fp; // File pointer

 

// The info you give the script

var $cgametype; // Type of game

var $caddress; // Connection address

var $cport; // Connection port

 

// Responders

var $serverinfo; // Server info array

var $playerinfo; // Player info array

var $systeminfo; // System info array

var $pcount = 0; // Player count

 

// Debug variables

var $DEBUG; // DEBUG

var $DEBUG2; // DEBUG

 

// Types of games

var $gametypes = array(

"HL" => "Half-Life",

"HL2" => "Half-Life 2",

"Q1" => "Quake",

"Q2" => "Quake 2",

"Q3" => "Quake: Arena",

"QW" => "Quake World",

"UT" => "Unreal Tournament",

"TB2" => "Tribes 2"

);

 

// default ports for games

var $defaultports = array(

"HL" => "27015",

"HL2" => "27015",

"Q1" => "26000",

"Q2" => "27910",

"Q3" => "27960",

"QW" => "27500",

"UT" => "7777",

"TB2" => "28000"

);

 

// Activation commands

var $commands = array(

"HL" => array(

"Serverinfo" => "ÿÿÿÿdetails\x00",

"Playerlist" => "ÿÿÿÿplayers\x00"

),

"Q2" => array(

"Serverinfo" => "ÿÿÿÿstatus\x00"

),

"Q3" => array(

"Serverinfo" => "ÿÿÿÿgetstatus\x00"

),

"UT" => array(

"Serverinfo" => "\\status\\",

"Playerlist" => "\\status\\",

"TheEnd" => "\\final\\"

)

);

 

 

/**

* Function gameinfo(GAMETYPE=string, ADDRESS=string, [PORT=string])

* The main function. Loads info on the server

*/

function gQuery($gametype ,$address, $port = "")

{

 

 

// Set the user provided connection settings

$this->cgametype = $gametype;

$this->caddress = $address;

 

// Set the port to default if not defined

if ($ports != "")

{

 

$this->cport = $this->defaultports[$this->cgametype];

}

else

{

$this->cport = $port;

}

 

 

 

// Make the connection

$this->fp = fsockopen("udp://" . $this->caddress, $this->cport, &$errno, &$errstr, 4);

 

if (!$this->fp)

{

//unable to connect to host

$this->serverinfo["name"] = "Error connecting to server";

$this->serverinfo["address"] = $this->caddress;

$this->addError("gQuery// had an error connecting to " . $this->caddress . ":" . $this->cport . "($errno - $errstr)");

}

else

{

// Run the appropriate parser.

eval("\$this->parseServerstat" . $this->cgametype . "();");

 

// Close the connection

fclose($this->fp);

}

 

 

 

// Put up the list of variabes so ppl can see what info is available

$this->systeminfo["gamevariables_count"] = 0;

while (list($key) = each ($this->serverinfo))

{

if ($this->systeminfo["gamevariables_count"] != 0) $this->systeminfo["gamevariables"] .= ", ";

$this->systeminfo["gamevariables"] .= $key;

$this->systeminfo["gamevariables_count"]++;

}

 

$this->systeminfo["playervariables_count"] = 0;

if ( $this->serverinfo["player"] != 0 )

{

while (list($key) = each ($this->playerinfo[0]))

{

if ($this->systeminfo["playervariables_count"] != 0) $this->systeminfo["playervariables"] .= ", ";

$this->systeminfo["playervariables"] .= $key;

$this->systeminfo["playervariables_count"]++;

}

}

}

 

 

/**

* Function about()

* Displays info about this class.

*/

function about()

{

echo "<P><B>gQuery// gameserver info class. Version 0.4.0. \n";

echo "<BR>© 2001 Jón Grétar Borgþórsson <I>(jongretar@users.sourceforge.net)</I> \n";

echo "<BR>http://gdome.sourceforge.net/</B></P> \n";

}

 

 

/**

* Function debug()

* Mostly just for debugging. Displays all kinds of info.

*/

function debug()

{

 

echo "<TABLE cellspacing='1' cellpadding='10'><TR><TD bgcolor='lightgreen'>";

echo "<B>Debug Info:</B><BLOCKQUOTE>";

echo "Address: " . $this->caddress . "<BR>\n";

echo "Port: " . $this->cport . "<BR>\n";

echo "Gametype: " . $this->cgametype . " <I>(" . $this->gametypes[$this->cgametype] . ")</I><BR>\n";

echo "Server Vars: " . $this->systeminfo["gamevariables_count"] . " vars <I>(" . $this->systeminfo["gamevariables"] . ")</I><BR>\n";

echo "Player Vars: " . $this->systeminfo["playervariables_count"] . " vars <I>(" . $this->systeminfo["playervariables"] . ")</I><BR>\n";

 

echo "<B>Errors:</B><OL>";

for ($i = 0; $i <= sizeof($this->errors)-1; $i++)

{

echo "<LI> " . $this->errors[$i] . "\n";

}

echo "</OL>";

 

echo "</BLOCKQUOTE>";

 

echo "</TD></TR></TABLE>";

 

}

 

 

/**

* Function addError(ERRORMSG=string, [HALT=bool])

* Adds an error into the error array

*/

function addError($errorMsg, $halt = false)

{

// Check wether to stop the script or not

if (!$halt)

{

$this->errors[count($this->errors)] = "WARNING: " . $errorMsg;

}

else

{

$this->errors[count($this->errors)] = "ERROR: " . $errorMsg;

exit;

}

}

 

 

/**

* Function parseServerstatHL()

* Requests the server info from the server and parses it down

*/

function parseServerstatHL()

{

 

fwrite($this->fp,$this->commands[$this->cgametype]["Serverinfo"]);

// Get rid of the header

$header = fread($this->fp,5);

 

// Get server address and Port

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["address"] = $result;

 

// Get server name

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["name"] = $result;

 

// Get server map

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["map"] = $result;

 

// Get server moddir

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["moddir"] = $result;

 

// Get server modname

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["modname"] = $result;

 

// Get number of players online

$str = fread($this->fp,1);

$this->serverinfo["players"] = ord($str);

 

// Get maximum number of online player

$str = fread($this->fp,1);

$this->serverinfo["maxplayers"] = ord($str);

 

// Get server protocol

$str = fread($this->fp,1);

$this->serverinfo["protocol"] = ord($str);

 

// Get Type of server

$str = fread($this->fp,1);

if ($str == "l")

{

$this->serverinfo["typeofserver"] = "Listen";

}

else if ($str == "d")

{

$this->serverinfo["typeofserver"] = "Deticated";

}

else

{

$this->serverinfo["typeofserver"] = "Unknown";

}

 

// Get server OS

$str = fread($this->fp,1);

if ($str == "l")

{

$this->serverinfo["serveros"] = "Linux";

}

else if ($str == "w")

{

$this->serverinfo["serveros"] = "Win32";

}

else

{

$this->serverinfo["serveros"] = "Unknown";

}

 

// Get wether server locked or not

$str = fread($this->fp,1);

if (ord($str) == 1)

{

$this->serverinfo["locked"] = "true";

}

else

{

$this->serverinfo["locked"] = "false";

}

 

// Get the unknown thing

// Don't know what this variable stands for

// Please send me info if you find out

$str = fread($this->fp,1);

$this->serverinfo["unknown"] = ord($str);

 

// Get the URL of the mod

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ($str == "\x00") $do = false;

}

$this->serverinfo["modurl"] = $result;

 

 

// Then get the Playerinfo

// We will trust that the connection is ok.

fclose($this->fp);

$this->fp = fsockopen("udp://" . $this->caddress, $this->cport, &$errno, &$errstr, 4);

 

fwrite($this->fp,$this->commands[$this->cgametype]["Playerlist"]);

//wait till we receive a header and store it (isn't used at the moment)

 

$str = fread($this->fp, 6);

$top = ord($str[5]);

$this->pcount = $top;

 

 

//socket_set_blocking($this->fp,0);

for($usr = 0; $usr <= ($top-1); $usr++)

{

$do = true;

 

// Get player id

$str = fread($this->fp, 1);

$this->playerinfo[$usr]["index"] = ord($str);

 

 

// Get player name

$temp = "";

while($do)

{

$str = fread($this->fp,1);

if($str == "\x00")

{

$do = false;

}

else

{

$temp .= $str;

}

}

$this->playerinfo[$usr]["name"] = $temp;

 

// Get player frags

$tot = 0;

$str = fread($this->fp, 1);

$tot += ord($str);

$str = fread($this->fp, 1);

$tot += ord($str) * 256;

$str = fread($this->fp, 1);

$tot += ord($str) * 65536;

$str = fread($this->fp, 1);

$tot += ord($str) * 16777216;

 

if($tot >= 16777216)

{ // ie is negative

$tot -= (4294967296);

}

$this->playerinfo[$usr]["frags"] = $tot;

 

 

// Get player time

$bin = '';

 

for($loop = 0; $loop <= 3; $loop++)

{

$bin = str_pad(decbin(ord(fread($this->fp, 1))), 8, '0', STR_PAD_LEFT).$bin;

}

 

// get sign

$sign = bindec(substr($bin, 0, 1));

 

// get exponent and adjust for special case and bias

$exponent = bindec(substr($bin, 1, 8));

$exponent = ($exponent)? $exponent - 127 : $exponent;

 

if($exponent) {

// get the binary number of the mantissa

$int = bindec('1'.substr($bin, 9, $exponent));

$dec = bindec(substr($bin, 9 + $exponent));

 

$time = "$int.$dec";

 

$this->playerinfo[$usr]["time"] = number_format($time / 60, 2);

}

else

{

$this->playerinfo[$usr]["time"] = "0.0";

}

 

}

}

 

 

 

/**

* Function parseServerstatQ2()

* Requests the server info from the server and parses it down

*/

function parseServerstatQ2()

{

 

fwrite($this->fp,$this->commands[$this->cgametype]["Serverinfo"]);

 

// Get rid of the header

$header = fread($this->fp,10);

 

// Read in the info from the server.

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ( $str == "\n" ) $do = false;

}

$this->serverinfo["allinfo"] = $result;

 

// Now recieve the player info

socket_set_blocking($this->fp,0);

 

 

echo $temp;

 

$do = true;

$i = 0;

while ($do)

{

$temp = fgets($this->fp, 100);

if ($temp == "")

{

$do = false;

}

else

{

$tempplayers[$i] = $temp;

}

$i++;

}

$this->pcount = sizeof($tempplayers);

$this->serverinfo["players"] = sizeof($tempplayers);

 

 

// Now resolve the server info

$temparray = explode ("\\", $this->serverinfo["allinfo"]);

 

$i = 1;

while($i <= sizeof($temparray))

{

$this->serverinfo[$temparray[$i++]] = $temparray[$i++];

}

 

// Resolve the player info

$i = 0;

while($i <= $this->pcount-1)

{

$this->playerinfo[$i]["index"] = "$i";

$temparray = explode ("\"", $tempplayers[$i]);

 

$this->playerinfo[$i]["name"] = $temparray[1];

 

/*

$this->playerinfo[$i]["namecolored"] = $temparray[1];

//Remove colortags

$result = "";

$b = 0;

while($b <= strlen($temparray[1]))

{

$str = substr($temparray[1], $b, 1);

if ($str == "^")

{

$b++;

}

else

{

$result .= $str;

}

$b++;

}

$this->playerinfo[$i]["name"] = $result;

*/

$temparray2 = explode (" ", $temparray[0]);

$this->playerinfo[$i]["frags"] = $temparray2[0];

$this->playerinfo[$i]["ping"] = $temparray2[1];

$i++;

}

 

 

 

// Standardize. For easyer info.

$this->serverinfo["address"] = $this->caddress . ":" . $this->cport;

$this->serverinfo["name"] = $this->serverinfo["hostname"];

$this->serverinfo["moddir"] = $this->serverinfo["gamename"];

$this->serverinfo["maxplayers"] = $this->serverinfo["maxclients"];

$this->serverinfo["map"] = $this->serverinfo["mapname"];

$this->serverinfo["typeofserver"] = "Unknown";

$this->serverinfo["serveros"] = "Unknown";

if ($this->serverinfo["needpass"] == 1) { $this->serverinfo["locked"] = "true"; }

else { $this->serverinfo["locked"] = "false"; }

 

}

 

/**

* Function parseServerstatQ3()

* Requests the server info from the server and parses it down

*/

function parseServerstatQ3()

{

 

fwrite($this->fp,$this->commands[$this->cgametype]["Serverinfo"]);

 

$header=fgets($this->fp, 20);

//now we get the the servers statusdata in one line

$this->serverinfo["allinfo"] = fgets($this->fp, 1500);

// echo $returnstring; // DEBUG

$temparray = explode ("\\", $this->serverinfo["allinfo"]);

 

$i = 1;

while($i <= sizeof($temparray))

{

$this->serverinfo[$temparray[$i++]] = $temparray[$i++];

}

 

 

// Now recieve the player info

socket_set_blocking($this->fp,0);

 

$do = true;

$i = 0;

while ($do)

{

$temp = fgets($this->fp, 100);

if ($temp == "")

{

$do = false;

}

else

{

$tempplayers[$i] = $temp;

}

$i++;

}

$this->pcount = sizeof($tempplayers);

 

// Resolve the player info

$i = 0;

while($i <= $this->pcount-1)

{

$this->playerinfo[$i]["index"] = "$i";

$temparray = explode ("\"", $tempplayers[$i]);

$this->playerinfo[$i]["namecolored"] = $temparray[1];

 

//Remove colortags

$result = "";

$b = 0;

while($b <= strlen($temparray[1]))

{

$str = substr($temparray[1], $b, 1);

if ($str == "^")

{

$b++;

}

else

{

$result .= $str;

}

$b++;

}

$this->playerinfo[$i]["name"] = $result;

 

$temparray2 = explode (" ", $temparray[0]);

$this->playerinfo[$i]["frags"] = $temparray2[0];

$this->playerinfo[$i]["ping"] = $temparray2[1];

$i++;

}

 

 

// Standardize. For easyer info.

$this->serverinfo["address"] = $this->caddress . ":" . $this->cport;

$this->serverinfo["name"] = $this->serverinfo["sv_hostname"];

$this->serverinfo["moddir"] = $this->serverinfo["gamename"];

$this->serverinfo["players"] = $this->serverinfo["sv_privateClients"];

$this->serverinfo["maxplayers"] = $this->serverinfo["sv_maxclients"];

$this->serverinfo["map"] = $this->serverinfo["mapname"];

$this->serverinfo["typeofserver"] = "Unknown";

$this->serverinfo["serveros"] = "Unknown";

$this->serverinfo["players"] = $this->pcount;

if ($this->serverinfo["g_needpass"] == 1) { $this->serverinfo["locked"] = "true"; }

else { $this->serverinfo["locked"] = "false"; }

 

 

}

 

 

 

 

/**

* Function parseServerstatUT()

* Requests the server info from the server and parses it down

*/

function parseServerstatUT()

{

 

fwrite($this->fp,$this->commands[$this->cgametype]["Serverinfo"]);

 

// Get server address and Port

$do = true;

$result = "";

while($do)

{

$str = fread($this->fp,1);

$result .= $str;

if ( substr($result,strlen($result)-7) == $this->commands[$this->cgametype]["TheEnd"] ) $do = false;

}

$this->serverinfo["allinfo"] = $result;

 

// Remove the \final\ from the var list

$this->serverinfo["allinfo"] = substr($this->serverinfo["allinfo"],0,strlen($this->serverinfo["allinfo"])-7);

 

// Now resolve the info

$temparray = explode ("\\", $this->serverinfo["allinfo"]);

 

$i = 1;

while($i <= sizeof($temparray))

{

$this->serverinfo[$temparray[$i++]] = $temparray[$i++];

}

 

// Standardize. For easyer info.

$this->serverinfo["address"] = $this->caddress . ":" . $this->cport;

$this->serverinfo["name"] = $this->serverinfo["hostname"];

$this->serverinfo["modname"] = $this->serverinfo["gamename"];

$this->serverinfo["players"] = $this->serverinfo["numplayers"];

$this->serverinfo["map"] = strtolower($this->serverinfo["mapname"]);

$this->serverinfo["version"] = $this->serverinfo["gamever"];

$this->serverinfo["typeofserver"] = "Unknown";

$this->serverinfo["serveros"] = "Unknown";

if ($this->serverinfo["password"] != "False") { $this->serverinfo["locked"] = "true"; }

else { $this->serverinfo["locked"] = "false"; }

 

 

// Get those users fixed up

for($i=0; $i <= $this->serverinfo["numplayers"]; $i++)

{

$this->playerinfo[$i]["index"] = $i;

$this->playerinfo[$i]["name"] = $this->serverinfo["player_".$i];

$this->playerinfo[$i]["ping"] = $this->serverinfo["ping_".$i];

$this->playerinfo[$i]["frags"] = $this->serverinfo["frags_".$i];

$this->playerinfo[$i]["team"] = $this->serverinfo["team_".$i];

$this->playerinfo[$i]["skin"] = $this->serverinfo["skin_".$i];

$this->playerinfo[$i]["mesh"] = $this->serverinfo["mesh_".$i];

$this->playerinfo[$i]["face"] = $this->serverinfo["face_".$i];

$this->playerinfo[$i]["ngsecret"] = $this->serverinfo["ngsecret_".$i];

 

//Unset those variables so the will stop being in the way.

unset( $this->serverinfo["player_".$i] );

unset( $this->serverinfo["ping_".$i] );

unset( $this->serverinfo["frags_".$i] );

unset( $this->serverinfo["team_".$i] );

unset( $this->serverinfo["skin_".$i] );

unset( $this->serverinfo["mesh_".$i] );

unset( $this->serverinfo["face_".$i] );

unset( $this->serverinfo["ngsecret_".$i] );

unset( $this->serverinfo[""] );

}

}

 

 

}

?>[/log]

 

STORT tack på förhand!

 

//Templar

 

[inlägget ändrat 2005-08-30 07:10:56 av Templar]

[inlägget ändrat 2005-08-30 07:12:37 av Templar]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...