Kiggede lidt på det.
Du skal have 2 filer
CounterstrikeClass.php
- <?
- //***************************************************
- // Peter Huizenga CS status Script v1.0
- // This is an Counter Strike Server info script!
- //
- //
- // This Script is Free and may not be for sale in any way!
- // You can change it very easy to youre own will,
- // and server info!
- //
- // Thanks Peter Huizenga
- // webmaster@clandoa.tk
- //***************************************************
-
-
- // Edit below to youre own server info!
-
- // Server info
- $serv_ip = "78.109.212.45"; // IP of the server
- $serv_port = "27015"; // Port of the server server
-
- // Site style
- $title = "Server Info and player stats"; // Title of the site
- $players = "There are no players online!"; // If no players are on the server this message will apere
- $pics = "/images/csmaps/"; // Place of the map images!!
- $error = "Can't connect to gameserver!<br>Server is down!!"; // Message if no connection to server!
- $bgcolor = "#262d40"; // Background color
-
- $font1 = "#FF0000"; // Color of the Error!
- $font2 = "#FFFFFF"; // Color of the Name
- $font3 = "#f5d300"; // Color of the information leters
- $size1 = "10"; // Size of the Error!
- $size2 = "4"; // Size of Name
- $size3 = "2"; // Size of the information leters
-
- $copy = "#333333"; // color for copyright
- $border ="#000000"; // colot tabelen
-
- $tab1 = "#8898A8"; // Tabellenkop
- $tab2 = "#41556D"; // Tabellenkleur 2
-
- $creator = true; //true; or false; Support the Creator!
-
-
- //Do not Edit Below this line!!
- //*******************************************************************************************************
-
- 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]);
-
- // 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;
- }
- }
- ?>
og
Index.php
- <? require("counterstrikeclass.php"); ?>
-
- <html>
- <head>
- <TITLE><? echo $title ?></TITLE>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></HEAD>
- <BODY bgcolor="<? echo $bgcolor ?>">
- </head>
-
- <body background="achtergrondje.gif" leftmargin="0" topmargin="7" marginwidth="0" marginheight="0">
- <div align="left">
- <table width="748" height="355" border="1" cellpadding="1" cellspacing="1" bordercolor="#000000" bgcolor="#F3F3F3">
- <tr>
- <td height="351" valign="top">
- <?
- // Get server Adress and port!
- $serveradr ="$serv_ip";
- $serverport="$serv_port";
-
- // Get server info!
- $csinfo=new CounterStrike;
- $status=$csinfo->getServerInfo($serveradr,$serverport,1000);
- if ($status) {
-
- // Get info about players, frags, timep!
- $server = new CounterStrike;
- $status=$server->getServerPlayers($serveradr,$serverport,1000);
- if ($status) {
-
-
- ?>
- <TABLE>
- <TR>
- <TD width="598" height="196">
- <TABLE width="400">
- <TR>
- <TD width="75"><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Servername :</font></TD>
- <TD width="313"><font color="<? echo $font3 ?>" size="<? echo $size3 ?>">
- <?=$csinfo->m_servervars["servername"] ?>
- </font></TD>
- </TR>
- <TR>
- <TD><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Server ip :</font></TD>
- <TD><font color="<? echo $font3 ?>" size="<? echo $size3 ?>">
- <?=$csinfo->m_servervars["serveraddress"] ?>
- </font></TD>
- </TR>
- <TR>
- <TD><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Spelers :</font></TD>
- <TD><font color="<? echo $font3 ?>" size="<? echo $size3 ?>">
- <?=$csinfo->m_servervars["currentplayers"] ?>
- </font><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">/</font> <font color="<? echo $font3 ?>" size="<? echo $size3 ?>">
- <?=$csinfo->m_servervars["maxplayers"]?>
- </font></TD>
- </TR>
- <TR>
- <TD><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Map :</font></TD>
- <TD><font color="<? echo $font3 ?>" size="<? echo $size3 ?>">
- <?=$csinfo->m_servervars["mapname"]?>
- </font></TD>
- </TR>
- <TR>
- <TD COLSPAN="2"> </TD>
- </TR>
- <TR>
- <TD height="106" COLSPAN="2" ALIGN="CENTER">
- <div align="left"><IMG
- SRC="<?
- if(is_file($pics . $csinfo->m_servervars["mapname"] . ".gif")) { print $pics . $csinfo->m_servervars["mapname"] . ".gif"; }
- else { print $pics . "cstrike_nopicture.gif"; } ?>" width="130"
- height="100" ALT="<?=$csinfo->m_servervars["mapname"]?>"> </div></TD>
- </TR>
- </TABLE>
- <table>
- <tr>
- <td width="85"><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Name</font></td>
- <td width="78"><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Frags</font></td>
- <td width="84"><font color="<? echo $font2 ?>" size="<? echo $size2 ?>">Time</font></td>
- </tr>
- <?
- if (is_array($server->m_playerinfo)) {
- while (list(,$player) = each ($server->m_playerinfo)) {
- ?>
- <tr>
- <td><?=$player['name'];?></td>
- <td><?=$player['frags'];?></td>
- <td><?=$player['time'];?></td>
- </tr>
- <?
- }
- } else {
- ?>
- <tr>
- <td class="error" colspan="3"><font color="<? echo $font3 ?>" size="<? echo $size13 ?>"><? echo $players ?></font></td>
- </tr>
- <?
- }
- ?>
- </table></TD>
- </TR>
- <? } else {
- } ?>
- </TABLE>
- <?
- } else {
- ?>
- <strong><font color="<? echo $font1 ?>" size="<? echo $size1 ?>"><? echo $error ?></font></strong>
- <?
- }
- ?>
- <? if($creator) { echo(" <font color='#FFFFFF' size='2'>Peter Huizenga CS status Script v1.0</font>"); } ?> </td>
- </tr>
- </table>
- </div>
- </body>
- </html>
Koden burde være rettet her, men jeg har problemer med scriptet timer out når den henter date, jeg er ikke sikker på om det er scriptet eller det er serverne der er beskyttet mod at "leeche" data med et script. Du kan eventuelt teste din egen hvor det jo skulle være sat til