Counterstrike Script
Joachim
- php
hi
Ich bräuchte ein counterstrike source script der mit die daten eines Servers ausliest. Also wer gerade spielt, welche map und vor allem die steam id um die eindeutigkit des spielers feststellen zu können. Früher gabs ja dazu die wonid.
Vielen dank, Joachim
gay
26.1. Wo finde ich ein Script, das "xyz" kann?
http://www.php-faq.de/q/q-scripte-finden.html
<? // ********************************************************************************************** // 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 :-(