Joachim: Counterstrike Script

Beitrag lesen

<? // ********************************************************************************************** // Class CounterStrike // Author : Henrik Schack Jensen (henrik@schack.dk) // // Changelog: // Version 1.01                03/11/2001         Removed ASP style tags //                                                                                                                 Removed usort warning //                                                                                                                Fixed error on empty server // Version 1.00                03/05/2001 Initial (& a bit messy ) release // // A utilityclass (PHP4 only) to do serverstatus-queries against Halflife/Counterstrike servers // // The following functions are available: // // Function getServerInfo(serveraddress,serverport) // Get info about servername,serveraddress,mapname,currentplayers & maxplayers. // // Function getServerPlayers(serveraddress,serverport) // Get info about players currently playing on the server. // Players are sortet by frags. // // Function getServerRules(serveraddress,serverport) // Get info about serverrules/settings. // // All results are returned in membervariables: // // // Demosource is available at http://www.gameserver.dk/ // ********************************************************************************************** // // Function used to sort players by frags // Needs to be defined globally in order for usort to call it //

function fragsort ($a, $b) {         if ($a["frags"] == $b["frags"]) return 0;         if ($a["frags"] > $b["frags"]) {                 return -1;         } else {                 return 1;         } }

Class CounterStrike {         var $m_playerinfo                ="";                // Info about players         var $m_servervars                ="";                // Info about the server current map, players etc         var $m_serverrules  ="";                // Serverrules

//         // Get exact time, used for timeout counting         //         function timenow() {                 return doubleval(ereg_replace('^0.([0-9]) ([0-9])$','\2.\1',microtime()));         }

//         // Read raw data from server         //         function getServerData($command,$serveraddress,$portnumber,$waittime) {                 $serverdata                ="";                 $serverdatalen=0;

if ($waittime< 500) $waittime= 500;                 if ($waittime>2000) $waittime=2000;                 $waittime=doubleval($waittime/1000.0);

if (!$cssocket=fsockopen("udp://".$serveraddress,$portnumber,$errnr)) {                         $this->errmsg="No connection";                         return "";                 }

socket_set_blocking($cssocket,true);                 socket_set_timeout($cssocket,0,500000);                 fwrite($cssocket,$command,strlen($command));                 // Mark                 $starttime=$this->timenow();                 do {                         $serverdata.=fgetc($cssocket);                         $serverdatalen++;                         $socketstatus=socket_get_status($cssocket);                         if ($this->timenow()>($starttime+$waittime)) {                                 $this->errmsg="Connection timed out";                                 fclose($cssocket);                                 return "";                         }                 } while ($socketstatus["unread_bytes"] );                 fclose($cssocket);                 return $serverdata;         }

function getnextstring(&$data) {                 $temp="";                 $counter=0;                 while (ord($data[$counter++])!=0) $temp.=$data[$counter-1];                 $data=substr($data,strlen($temp)+1);                  return $temp;         }

function getnextbytevalue(&$data) {                 $temp=ord($data[0]);           $data=substr($data,1);           return $temp;         }

function getnextfragvalue(&$data) {                 $frags=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);                 if ($frags>=4294967294) $frags-=4294967296;                 $data=substr($data,4);                 return $frags;         }

function getnextplaytime(&$data) {                 $decnumber=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);                 $binnumber=base_convert($decnumber,10,2);                 while (strlen($binnumber) < 32) $binnumber="0".$binnumber;                 $exp=abs(base_convert(substr($binnumber,1,8),2,10))-127;                 if (substr($binnumber,0,1)=="1") $exp=0-$exp;                 $man=1;$manadd=0.5;                 for ($counter=9;$counter<32;$counter++) {                         if (substr($binnumber,$counter,1)=="1") $man+=$manadd;                         $manadd=$manadd/2;                 }                 $time=round(pow(2,$exp)*$man);                 $playtime="";                 if ($time>3600) {                         $playtime=sprintf("%2dh",$time/3600);                 }                 $time%=3600;                 $playtime=$playtime.sprintf("%2dm",$time/60);                 $time%=60;                 $playtime=$playtime.sprintf("%2ds",$time);                 $data=substr($data,5);                 return $playtime;         }

// **********************************************************************         // getServerRules         // Read rules/setup from the gameserver into m_serverrules         // Return true if successful         // **********************************************************************         function getServerRules($serveraddress,$portnumber,$waittime) {                 $cmd="\xFF\xFF\xFF\xFFrules\x00";                 $serverdata=$this->getServerData($cmd,$serveraddress,$portnumber,$waittime)        ;                 // Check length of returned data, if < 5 something went wrong                 if (strlen($serverdata)<5) return false;                 // Figure out how many rules there are                 $rules=(ord($serverdata[5]))+(ord($serverdata[6])*256);                 if ($rules!=0) {                         // Strip OOB data                         $serverdata=substr($serverdata,7);                         for ($i=1;$i<=$rules;$i++) {                                 $rulename                =$this->getnextstring($serverdata);                                 $rulevalue        =$this->getnextstring($serverdata);                                 $this->m_serverrules[$rulename]=$rulevalue;                         }                         return true;                 } else {                         return false;                 }         }

// **********************************************************************         // getServerinfo         // Read information about the gameserver into m_servervars         // Serveraddress,servername,current map etc etc         // Return true if successful         // **********************************************************************         function getServerInfo($serveraddress,$portnumber,$waittime) {                 $cmd="\xFF\xFF\xFF\xFFinfo\x00";                 $serverdata=$this->getServerData($cmd,$serveraddress,$portnumber,$waittime)        ;                 // Check length of returned data, if < 5 something went wrong                 if (strlen($serverdata)<5) return false;                 // Strip OOB data                 $serverdata=substr($serverdata,5);                 $this->m_servervars["serveraddress"]        =$this->getnextstring($serverdata);                 $this->m_servervars["servername"]                        =$this->getnextstring($serverdata);                 $this->m_servervars["mapname"]                                =$this->getnextstring($serverdata);                 $this->m_servervars["game"]                                                =$this->getnextstring($serverdata);                 $this->m_servervars["gamename"]                                =$this->getnextstring($serverdata);                 $this->m_servervars["currentplayers"]        =$this->getnextbytevalue($serverdata);                 $this->m_servervars["maxplayers"]                        =$this->getnextbytevalue($serverdata);                 return true; }

// **********************************************************************         // Get Playerinfo         // Read information about the players into m_playerinfo         // Name,frags,playtime         // Return true if successful         // **********************************************************************         function getServerPlayers($serveraddress,$portnumber,$waittime) {                 // Servercommand                 $cmd="\xFF\xFF\xFF\xFFplayers\x00";                 $serverdata=$this->getServerData($cmd,$serveraddress,$portnumber,$waittime);

// Check length of returned data, if < 5 something went wrong                 if (strlen($serverdata)<5) return false;

// Check number of players to read data for $players=ord($serverdata[5]);

$i = ord($serverdata[5]);

$i =ord($serverdata[2]);

$i =ord($serverdata[6]);

// Strip OOB data and other stuff                 $serverdata=substr($serverdata,7);                 for ($i=1;$i<=$players;$i++) {                         $playername                                                        =htmlspecialchars($this->getnextstring($serverdata));                         $frags                                                                        =$this->getnextfragvalue($serverdata);                         $playtime                                                                =$this->getnextplaytime($serverdata);                         $this->m_playerinfo[$i] =array("name"=>$playername,"frags"=>$frags,"time"=>$playtime);

}                 // Sort players in fragorder                 if ($players>1) usort($this->m_playerinfo,"fragsort");                 return true;         } }

?>

so schaut das script aus, wie kann ich jetzt schaun ob der Server noch mehr daten ausspuckt, bzw wie?bin echt kein php profi :-(