Hallo Leute!
Seitdem es das neue CS Protokoll gibt funktioniert mein Serverinfoscript nicht mehr. Weiß jemand wo ich soetwas herbekomme?
Gruß,
ThorbenR
Seite 1 von 1
Problem Mit Cs1.6 Serverinfoscript
Anzeige
#2 _Benjamin_
geschrieben 25. Juli 2005 - 12:51
hmm meine glaskugel kann mir irgendwie nicht sagen wie dein script aussieht O.o
#4
geschrieben 25. Juli 2005 - 12:54
Zitat (ThorbenR: 25.07.2005, 13:53)
lol...wasn das für ein spruch?
<{POST_SNAPBACK}>
<{POST_SNAPBACK}>
Ok, bist noch nicht so lange bei uns. Naja, raus mit den Infos!
#5
geschrieben 25. Juli 2005 - 13:09
counterstrike.inc.php
server.cfg
Er will einfach die Daten nicht holen! Ich weiß das es ein neues Protokoll gibt, aber ich weiß nicht wie ich das verändern muss!
<? // ************************************************** ******************************************** // Class CounterStrike // Author : Henrik Schack Jensen ([email protected]) // // 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 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)); // $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 // 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 // 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 // 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 $players=ord($serverdata[5]); // 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; } } ?>
server.cfg
require("counterstrike.inc.php");
$serveradr = '62.75.220.40';
$serverport = '27015';
$csinfo = new CounterStrike;
$status = $csinfo->getServerInfo($serveradr,$serverport,1000);
$status = $csinfo->getServerPlayers($serveradr,$serverport,1000);
echo 'Spieler: '.$csinfo->m_servervars["currentplayers"].'';
Er will einfach die Daten nicht holen! Ich weiß das es ein neues Protokoll gibt, aber ich weiß nicht wie ich das verändern muss!
#6
geschrieben 25. Juli 2005 - 23:56
hmmm...das nächste mal ne datei anhängen...zum topic: was für eine fehlermeldung gibt das script denn aus?
I am away to look for my self. If I am back before I return keep me here. | Mein Server
#7
geschrieben 28. Juli 2005 - 13:48
sv_enable_old_queries 1
muss gesetzt sein, bin mir nich sicher wie der befehl genau war, aufjedenfall so ählich bin nämlich unterwegs..
muss gesetzt sein, bin mir nich sicher wie der befehl genau war, aufjedenfall so ählich bin nämlich unterwegs..
Thema verteilen:
Seite 1 von 1

Hilfe
Neues Thema
Antworten
Nach oben



