Guest User

monitoring

a guest
Mar 2nd, 2014
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.04 KB | None | 0 0
  1. <?php
  2.   //SERVERA ADRESE
  3.   $adrese = "xxxxxxxxxxxxxxxx";
  4.   //VAI JUS IZMANTOSIET MONITORU, KA INCLUDI - IEKLAUSIET LAPA, VAI NE yes/JA no/NE
  5.   $man_incluudot = "no";
  6.   //KARSU ADRESE
  7.   $adrese_mapeem = "xxxxxxxxxxxxxxxxxxxxxxxx";
  8.  
  9.  
  10.    
  11.  
  12.  
  13.  
  14. function fragsort ($a, $B) {  
  15.         if ($a["frags"] == $b["frags"]) return 0;
  16.         if ($a["frags"] > $b["frags"]) {
  17.                 return -1;
  18.         } else {
  19.                 return 1;
  20.         }
  21. }    
  22.  
  23.  
  24. Class CounterStrike {
  25.         var $m_playerinfo  = "yes";             // Info about players
  26.         var $m_servervars  = "";                // Info about the server current map, players etc
  27.         var $m_serverrules = "";                // Server rules
  28.         var $m_challenge   = "";                // Server challenge number
  29.        
  30.         //
  31.         // Get exact time, used for timeout counting
  32.         //
  33.         function timenow() {
  34.                 return doubleval(ereg_replace('^0\.([0-9]*) ([0-9]*)$','\\2.\\1',microtime()));
  35.         }
  36.        
  37.         //
  38.         // Read raw data from server
  39.         //
  40.         function getServerData($command,$serveraddress,$portnumber,$waittime) {
  41.                 $serverdata    = "";
  42.                 $serverdatalen = 0;
  43.                
  44.                 if ($waittime< 500) $waittime= 500;
  45.                 if ($waittime>2000) $waittime=2000;
  46.                 $waittime=doubleval($waittime/1000.0);
  47.  
  48.                 if (!$cssocket = @fsockopen("udp://".$serveraddress,$portnumber,$errnr)) {
  49.                         $this->errmsg="No connection";
  50.                         return "";
  51.                 }
  52.        
  53.                 socket_set_blocking($cssocket,true);
  54.                 socket_set_timeout($cssocket,0,500000);
  55.                 fwrite($cssocket,$command,strlen($command));
  56.                 // Mark
  57.                 $starttime=$this->timenow();
  58.                 do {
  59.                         $serverdata.=fgetc($cssocket);
  60.                         $serverdatalen++;
  61.                         $socketstatus=socket_get_status($cssocket);
  62.                         if ($this->timenow()>($starttime+$waittime)) {
  63.                                 $this->errmsg = "Connection timed out";
  64.                                 fclose($cssocket);
  65.                                 return "";
  66.                         }
  67.                 } while ($socketstatus["unread_bytes"] );
  68.                 fclose($cssocket);
  69.                 return $serverdata;        
  70.         }
  71.        
  72.         function getnextstring(&$data) {
  73.                 $temp="";
  74.                 $counter=0;
  75.                 while (ord($data[$counter++])!=0) $temp.=$data[$counter-1];
  76.                 $data=substr($data,strlen($temp)+1);
  77.                 return $temp;
  78.         }
  79.  
  80.         function getnextbytevalue(&$data) {
  81.                 $temp=ord($data[0]);
  82.           $data=substr($data,1);
  83.           return $temp;
  84.         }
  85.  
  86.         function getnextfragvalue(&$data) {
  87.                 $frags=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);
  88.                 if ($frags>=4294967294) $frags-=4294967296;
  89.                 $data=substr($data,4);
  90.                 return $frags;
  91.         }
  92.  
  93.         function getnextplaytime(&$data) {
  94.                 $decnumber=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);
  95.                 $binnumber=base_convert($decnumber,10,2);
  96.                 while (strlen($binnumber) < 32) $binnumber="0".$binnumber;
  97.                 $exp=abs(base_convert(substr($binnumber,1,8),2,10))-127;
  98.                 if (substr($binnumber,0,1)=="1") $exp=0-$exp;
  99.                 $man=1;$manadd=0.5;
  100.                 for ($counter=9;$counter<32;$counter++) {
  101.                         if (substr($binnumber,$counter,1)=="1") $man+=$manadd;
  102.                         $manadd=$manadd/2;
  103.                 }
  104.                 $time=round(pow(2,$exp)*$man);
  105.                 $playtime="";
  106.                 if ($time>3600) {
  107.                         $playtime=sprintf("%2d:",$time/3600);
  108.                 }
  109.                 $time%=3600;
  110.                 $playtime=$playtime.sprintf("%2d:",$time/60);    
  111.                 $time%=60;
  112.                 $playtime=$playtime.sprintf("%2d",$time);
  113.                 $data=substr($data,5);
  114.                 return $playtime;
  115.         }
  116.  
  117.  
  118.         // **********************************************************************
  119.         // getServerRules
  120.         // Read rules/setup from the gameserver into m_serverrules
  121.         // Return true if successful
  122.         // **********************************************************************
  123.         function getServerRules($serveraddress,$portnumber,$waittime) {
  124.                 // Get a challenge number
  125.                 if (!$this->getChallenge($serveraddress,$portnumber,$waittime)) return false;
  126.  
  127.                 // Send a request for "rules" to the server
  128.                 $cmd        = "\xFF\xFF\xFF\xFFV" . $this->m_challenge;
  129.                 $serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);
  130.  
  131.                 // Check length of returned data, if < 5 something went wrong
  132.                 if (strlen($serverdata)<5) return false;            
  133.                 // Figure out how many rules there are
  134.                 $rules=(ord($serverdata[5]))+(ord($serverdata[6])*256);
  135.                 if ($rules != 0) {
  136.                         // Strip OOB data                
  137.                         $serverdata = substr($serverdata,7);
  138.                         for ($i=1;$i<=$rules;$i++) {
  139.                                 $rulename  = $this->getnextstring($serverdata);
  140.                                 $rulevalue = $this->getnextstring($serverdata);
  141.                                 $this->m_serverrules[$rulename]=$rulevalue;
  142.                         }
  143.                         return true;
  144.                 } else {
  145.                         return false;
  146.                 }
  147.         }    
  148.  
  149.        
  150.         // **********************************************************************
  151.         // getServerinfo
  152.         // Read information about the gameserver into m_servervars
  153.         // Serveraddress,servername,current map etc etc
  154.         // Return true if successful
  155.         // **********************************************************************
  156.         function getServerInfo($serveraddress,$portnumber,$waittime) {
  157.                 // Send a request for "info" to the server
  158.                 $cmd        = "\xFF\xFF\xFF\xFFTSource Engine Query\x00";
  159.                 $serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);
  160.  
  161.                 // Check length of returned data, if < 5 something went wrong
  162.                 if (strlen($serverdata)<5) return false;      
  163.                 // Strip OOB data                
  164.                 $serverdata=substr($serverdata,6);
  165.                 $this->m_servervars["serveraddress"]  = $this->getnextstring($serverdata);
  166.                 $this->m_servervars["servername"]     = $this->getnextstring($serverdata);
  167.                 $this->m_servervars["mapname"]        = $this->getnextstring($serverdata);
  168.                 $this->m_servervars["game"]           = $this->getnextstring($serverdata);
  169.                 $this->m_servervars["gamename"]       = $this->getnextstring($serverdata);
  170.                 $this->m_servervars["currentplayers"] = $this->getnextbytevalue($serverdata);
  171.                 $this->m_servervars["maxplayers"]     = $this->getnextbytevalue($serverdata);    
  172.                
  173.                 // Get a challenge number
  174.                 if (!$this->getChallenge($serveraddress,$portnumber,$waittime)) return false;
  175.  
  176.                 // Send a request for "rules" to the server
  177.                 $cmd        = "\xFF\xFF\xFF\xFFU" . $this->m_challenge;
  178.                 $serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);
  179.                
  180.                 // Check length of returned data, if < 5 something went wrong
  181.                 if (strlen($serverdata)<5) return false;
  182.  
  183.                 // Check number of players to read data for
  184.                 $players = ord($serverdata[5]);
  185.                
  186.                  // Strip OOB data and other stuff
  187.                 $serverdata = substr($serverdata,7);
  188.                
  189.                 for ($i=1;$i<=$players;$i++) {
  190.                         $playername             = htmlspecialchars($this->getnextstring($serverdata));
  191.                         $frags                  = $this->getnextfragvalue($serverdata);
  192.                         $playtime               = $this->getnextplaytime($serverdata);
  193.                         $this->m_playerinfo[$i] = array("name"=>$playername,"frags"=>$frags,"time"=>$playtime);
  194.                 }
  195.                 // Sort players in fragorder
  196.                 if ($players>1) usort($this->m_playerinfo,"fragsort");
  197.                 return true;
  198.         }    
  199.  
  200.  
  201.         // **********************************************************************
  202.         // getChallenge
  203.         // Read a challenge number from the gameserver into m_challenge
  204.         // Return true if successful
  205.         // **********************************************************************
  206.         function getChallenge($serveraddress,$portnumber,$waittime) {
  207.                 $cmd        = "\xFF\xFF\xFF\xFFW";
  208.                 $serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);
  209.  
  210.                 // Check length of returned data, if < 5 something went wrong
  211.                 if (strlen($serverdata)<5) return false;
  212.                 $this->m_challenge = substr($serverdata,5);
  213.                 return true;
  214.         }
  215.  
  216. }
  217.  
  218. function applaunch($game) {
  219.   $game = str_replace("cstrike", "10", $game);
  220.   $game = str_replace("dod", "30", $game);
  221.   $game = str_replace("valve", "70", $game);
  222.   $game = str_replace("czero", "80", $game);
  223.   $game = str_replace("bshift", "130", $game);
  224.   $game = str_replace("dmc", "40", $game);
  225.   $game = str_replace("gearbox", "50", $game);
  226.   $game = str_replace("ricochet", "60", $game);
  227.   $game = str_replace("tfc", "20", $game);
  228.   $game = str_replace("czeror", "100", $game);
  229.   $game = str_replace("redorchestra", "1200", $game);  
  230.  
  231.   return $game;
  232. }
  233.  
  234. function applaunch2($game) {
  235.   $game = str_replace("cstrike", "240", $game);
  236.  
  237.   return $game;
  238. }
  239.  
  240. function joinip($ip, $port, $game, $type) {
  241.   if($type == "HL1") {
  242.     $game = applaunch($game);
  243.   }
  244.   elseif($type == "HL2") {
  245.     $game = applaunch2($game);
  246.   }
  247.   return "<a href='steam: \"-applaunch ".$game."\"  +connect ".$ip.":".$port."'>".$ip.":".$port."</a>";
  248. }
  249.  
  250. function getMapImage($map) {
  251.   if (!file_exists("csslmore/".$map.".gif"))
  252.   {
  253.         $map = "cstrike/cstrike_nopicture";
  254.   }
  255.  
  256.   return "<img border=\"1\" src=\"csslmore/".$map.".gif\">";
  257. }
  258.  
  259.  
  260.    
  261.                   list($serverip, $serverport) = explode(":", $adrese);
  262.                 $csinfo=new CounterStrike;
  263.                 $status=$csinfo->getServerInfo($serverip,$serverport,1000);
  264.                 if($csinfo->m_servervars["gamename"] == "?") {
  265.       $servers["servername"] = htmlentities($csinfo->m_servervars["serveraddress"]);
  266.       $servers["gamename"] = $csinfo->m_servervars["game"];
  267.       $servers["game"] = $csinfo->m_servervars["mapname"];
  268.       $servers["mapname"] = $csinfo->m_servervars["servername"];
  269.       $servers["currentplayers"] = $csinfo->m_servervars["currentplayers"];
  270.       $servers["maxplayers"] = $csinfo->m_servervars["maxplayers"];
  271.       $servers["type"] = "HL2";
  272.        }
  273.     //HL1
  274.       else {
  275.       $servers["servername"] = htmlentities($csinfo->m_servervars["servername"]);
  276.       $servers["gamename"] = $csinfo->m_servervars["gamename"];
  277.       $servers["game"] = $csinfo->m_servervars["game"];
  278.       $servers["mapname"] = $csinfo->m_servervars["mapname"];
  279.       $servers["currentplayers"] = $csinfo->m_servervars["currentplayers"];
  280.       $servers["maxplayers"] = $csinfo->m_servervars["maxplayers"];
  281.       $servers["type"] = "HL1";
  282.       }
  283.     $tag = $servers["currentplayers"];
  284.     $max = $servers["maxplayers"];
  285.     $nosaukums = $servers["servername"];
  286.     $mape = $servers["mapname"];
  287.     $statuss = $max-$tag;
  288.     if ($statuss == "1") {
  289.     $statuss = "viens brivs slots";
  290.     } else if ($statuss == "0") {
  291.     $statuss = "nav brivu slotu";
  292.     } else {
  293.     $statuss = "$statuss brivi sloti";
  294.     }
  295.     $players = "$tag/$max";
  296. if ($man_incluudot !== "yes") {
  297. echo '';
  298. }
  299. echo "<div class='serveris_nr'>
  300.                     <div class='label label-info servstat'><i class='icon-info-sign'></i> xxxxxxx DEATHRUN</div>
  301.                     <div class='label label-inverse servstat'><i class='icon-info-sign icon-white'></i> xxxxxxx.LV:27015</div>
  302.                     <div style='padding-left:6px;'><img src='$adrese_mapeem".$mape.".jpg' class='img-polaroid bnw' style='width:215px;height:135px;' alt='' /></div>
  303.                     <center>
  304.                         <div class='label label-success servstat'><i class='icon-eye-open'></i> ".$mape."</div>
  305.                         <div class='label label-inverse servstat'><i class='icon-user icon-white'></i> Spēlētāji: ".$tag."/".$max."</div>
  306.                        
  307.                     </center>
  308.                 </div>";
  309. if (empty($mape)) {
  310. echo "";
  311. }
  312. echo "";
  313. if ($man_incluudot !== "yes") {
  314. echo '';
  315. }
  316.  
  317. ?>
Advertisement
Add Comment
Please, Sign In to add comment