Scripts

[Class] Call of Duty Server Stats

Het is in preciepe het zelfde script als Call of Duty Server Stats versie 2, alleen dan in een Class vorm. Alle credits gaan dus ook naar de persoon die dat script gemaakt heeft !!!! (http://www.phphulp.nl/php/scripts/7/1293/) Uitleg + voorbeeld staat onderaan de class. (Dit is m'n eerste class die ik ooit gemaakt heb, dus fouten of wat beter kan melden A.U.B. ^^).

class-call-of-duty-server-stats
<?php
   class cod 
   {
      private $gamedata;
      public  $error      = false;
      public  $serverip   = '84.244.180.66';
      public  $serverport = 28960;
      public  $player     = Array ();
      public  $score      = Array ();
      public  $ping       = Array ();
      public  $players    = 0;
      public  $errormsg;
      
      
      public function set_ip ($ip, $port, $start = false)
      {
         if (is_numeric (str_replace (".", "", $ip)) && is_numeric ($port))
         {
            $this->serverip   = $ip;
            $this->serverport = $port;
         }
         else
         {
            $this->set_error ("De IP en / of Port is niet geldig.");
         }
         if ($start)
         {
            $this->start ();
         }
      }
      
      
      public function start ()
      {
         if (!empty ($gamedata))
         {
            $this->set_error ("Lees A.U.B. de uitleg onderaan de class.");
         }
         
         $sock = fsockopen ('udp://' . $this->serverip, $this->serverport);
         
            if ($sock && !$this->error)
            {
               fwrite ($sock, 'ÿÿÿÿ getstatus');
               fread  ($sock, 4);
               $status = stream_get_meta_data ($sock);
               
               if ($status['unread_bytes'] == 0) 
               {
                  echo "Error reading status";
                  exit;
               }
               
               $data = explode ("\n", fread ($sock, $status['unread_bytes']));
               array_shift ($data);
               $this->gamedata = explode ("\\", array_shift ($data));
               
               foreach ($data as $i => $player) 
               {
                  preg_match  ('#([0-9]+) ([0-9]+) "(.*)"#', $player, $stat);
                
                  array_shift ($stat);
                  
                  if (!empty ($stat))
                  {
                     $this->score[$i]  = $stat[0];
                     $this->ping[$i]   = $stat[1];
                     $this->player[$i] = $stat[2];
                  }
               }
               
               $this->players = count ($this->player);
            }
            else
            {
               $this->set_error ("Kon niet verbinden met " . $this->serverip . ":" . $this->serverport . "!");
            }
      }
      
      
      public function get_data ($one)
      {
         for ($i = 1; $i < count ($this->gamedata); $i++)
         {
            if ($this->gamedata[$i] == $one)
            {
               return $this->gamedata[$i + 1];
            }
         }
       
        return "Unknown";       
     }
     
     
     private function set_error ($emsg)
     {
        $this->error      = true;
        $this->errormsg   = $emsg;
     }
   }
   
   
   
   /* UITLEG
     
     Zo roepen we de class aan:
       $cod = new cod ();
     
     Daarna zetten we de IP van de server waar we de status van af gaan halen door dat zo te doen:
       $cod->set_ip ("ip", port);
     
     Omdat we kunnen kiezen of de class meteen de informatie van de server moet halen of niet, kunnen we een 3e parameter toevoegen:
       $cod->set_ip ("ip", port, true); // De class haalt meteen de server info op.
     
     Als we de 3e parameter NIET gebruiken, moeten we zelf de class met de server laten verbinden door dat zo te doen:
       $cod->start ();
     
     Als we geen errors voor onze neus krijgen, worden er een aantal vab. gevult met data over de players & server informatie:
       $cod->player;  (Array, bevat alle players op de server.)
       $cod->ping;    (Array, bevat de ping van alle players op de server.)
       $cod->score;   (Array, bevat de score van alle players op de server.)
       $cod->players; (INT, bevat het aantal players op de server.)
     
     Hieronder staat een voorbeeld hoe het eruit zou moeten zien:
   */
   
   
   
   $cod = new cod ();
   
   // Deze functie is nu weggelaten, zodat de class verbinding maakt met een andere CoD server.
   //$cod->set_ip ("0.0.0.0", 0000); 
   
   $cod->start();
   
   
      if (!$cod->error)
      {
         echo "<b>" . $cod->serverip . ":" . $cod->serverport . "</b><br /><br />";
         echo "Player 1 met naam: <b>" . $cod->player[0] . "</b>.<br />";
         echo "Heeft een ping van: <b>" . $cod->ping[0] . "</b>.<br />";
         echo "En z'n score is: <b>" . $cod->score[0] . "</b>.<br /><br />";
         echo "Er zijn(is) <b>" . $cod->players . "</b> player(s) op de server!";
      }
      else
      {
         echo $cod->errormsg;
         exit;
      }
?> 

Reacties

0
Nog geen reacties.