[PHP] Gameserver Status

M

Mc.Alcatraz

Gast
Ich suche ein gaaaaaaanz einfaches Status Script für Gameserver, vorrangig für battlefield Vietnam aber wäre gut wenn es auch andere games unterstützen würde. Das Script soll nur angeben wieviele Leute gerade auf dem Gameserver online sind. Es soll auch keinerlei Autoreload drin sein. Er soll nur Anzeigen wieviele Online sind. Soll auch keine NAmen anzeigen.
Also wenn einer sowas kennt oder das schnell in PHP schreiben kann helft mir???
Update:
ich habe es bei google eingegeben...
 
Zuletzt bearbeitet:
und welche uebernatuerlichen kraefte haben dich davon abgehalten, die drei worte mal bei google einzugeben?
 
ich hatte bisher folgenden code aber da kommt immer der fehler:
Warning: Invalid argument supplied for foreach() in /usr/export/www/hosting/mcalcatraz/serverstatus/serverstatus.php on line 176

PHP:
<html>
<head>
<title>Battlefield Vietnam Server Status</title>
<style type="text/css">
<!--
div.scroll {
   background-color: #FFFFFF;
   border: 1px solid #000000;
   overflow-y: scroll;
   position: absolute;
   height: 100px;
   width: 400px;
   left: 50px;
   top: 50px;
}
body,td,th {
   color: #000000;
   font-family:sans-serif;
}
body {
   background-color: #FFFFFF;
}
-->
</style>
</head>
<body>
<?
// Getting info from a Battlefield Vietnam Server Using
// the new Gamespy protocol. Written by Hans Nieser.
// h.nieser@xs4all.nl

// Some vars
$remoteIP = "213.202.206.23";
$remotePort = "15567";

$queryString = "\xFE\xFD\x00"."bfvs"."\xFF\xFF\xFF";
$timeOut = 2;

// Open socket
$sock = fsockopen("udp://".$remoteIP, $remotePort, $errno, $errstr, $timeOut);
stream_set_timeout($sock, $timeOut);

// Display error if socket failed to topen
if (!$sock) {
     
   // Display error
   echo "Error: $errno - $errstr<br />\n";
     
// Retrieve info and start parsing
} else {
     
   // Send query and get response
   fwrite($sock, $queryString) or die("Failed to send query to server");
   $response = fread($sock, 4096);
   //do {
   //    $data = fread($sock, 1024);
   //    if (strlen($data) == 0) {
   //        break;
   //    }
   //    $response .= $data;
   //} while (true);
   fclose($sock);
     
   // Remove first 4 chars from the response
   $response = substr($response, 5);
     
   // Start parsing server rules
   do {
       // Extract key
       $delimiterpos = strpos($response, chr(0));
       $ruleKey = substr($response, 0, $delimiterpos);
       $response = substr($response, $delimiterpos+1);
         
       // Extract value
       $delimiterpos = strpos($response, chr(0));
       $ruleValue = substr($response, 0, $delimiterpos);
       $response = substr($response, $delimiterpos+1);
         
       // Store parsed rule in a 2-dimensional array
       if ($ruleKey) {
           $rule["key"] = $ruleKey;
           $rule["value"] = $ruleValue;
           $rules[] = $rule;
           $cycle = true;
       // Stop parsing rules if we find an empty one
       } else {
           $cycle = false;
       }
   } while ($cycle);
     
   // Parse playercount
   $playercount = ord(substr($response, 0, 1));
   $response = substr($response, 1);
     
   // Remove player info headers (43 chars)
   $response = substr($response, 43);
     
   // Start parsing players
   do {
       // Extract playername
       $delimiterpos = strpos($response, chr(0));
       $playerName = substr($response, 0, $delimiterpos);
       $response = substr($response, $delimiterpos+1);
         
       // Only extract the rest if we actually found a new player
       if ($playerName) {
         
           // Extract score
           $delimiterpos = strpos($response, chr(0));
           $playerScore = substr($response, 0, $delimiterpos);
           $response = substr($response, $delimiterpos+1);
             
           // Extract deaths
           $delimiterpos = strpos($response, chr(0));
           $playerDeaths = substr($response, 0, $delimiterpos);
           $response = substr($response, $delimiterpos+1);
             
           // Extract ping
           $delimiterpos = strpos($response, chr(0));
           $playerPing = substr($response, 0, $delimiterpos);
           $response = substr($response, $delimiterpos+1);
             
           // Extract team
           $delimiterpos = strpos($response, chr(0));
           $playerTeam = substr($response, 0, $delimiterpos);
           $response = substr($response, $delimiterpos+1);
             
           // Extract kills
           $delimiterpos = strpos($response, chr(0));
           $playerKills = substr($response, 0, $delimiterpos);
           $response = substr($response, $delimiterpos+1);
       }
         
       // Store parsed player in a 2-dimensional array
       if ($playerName) {
           $player["name"] = $playerName;
           $player["score"] = $playerScore;
           $player["deaths"] = $playerDeaths;
           $player["ping"] = $playerPing;
           $player["team"] = $playerTeam;
           $player["kills"] = $playerKills;
           $players[] = $player;
           $cycle = true;
       // Stop parsing players if we find an empty one
       } else {
           $cycle = false;
       }
         
   } while($cycle);
     
   // Parse teamcount
   $teamcount = ord(substr($response, 0, 1));
   $response = substr($response, 1);
     
   // Remove team info headers (8 chars)
   $response = substr($response, 8);
     
   // Start parsing teams
   do {
       // Extract teamname
       $delimiterpos = strpos($response, chr(0));
       $teamName = substr($response, 0, $delimiterpos);
       $response = substr($response, $delimiterpos+1);
         
       // Store parsed teamname in an array
       if ($teamName) {
           $teams[] = $teamName;
           $cycle = true;
       // Stop parsing players if we find an empty one
       } else {
           $cycle = false;
       }
   } while($cycle);
   // Display parsed serverrules
echo("<table width='100%'  border='1'><tr><td>Ip Address </td><td>Game</td><td>Players(Total/Max)</td><td>Server Name</td><td>Game Type </td><td>Map</td></tr><tr><td>".$remoteIP.":15567</td>");
foreach($rules as $rule) {
/*    $file = fopen("rules.dat", "a");
   fwrite($file, $rule["key"]."=".$rule["value"]."<br>\n");
   fclose($file);*/
if ($rule["key"] == "game_id") {
   $grule= "<td>".$rule["value"]."</td>";
}
if ($rule["key"] == "mapname") {
$marule= "<td>".$rule["value"]."</td>";
}
if ($rule["key"] == "numplayers") {
$nrule = "<td>(".$rule["value"]."/";
}
if ($rule["key"] == "maxplayers") {
$mrule = $rule["value"].")</td>";
}
if ($rule["key"] == "hostname") {
$hrule = "<td>(".$rule["value"].")</td>";
}
if ($rule["key"] == "gametype") {
$grule = "<td>(".$rule["value"].")</td>";
}
}
echo($grule.$nrule.$mrule.$hrule.$grule.$marule);
echo("</tr></table>");

 
   // Display parsed players
?>
<table width="100%" border="1">
 <tr>
   <td>
     <div align="center">
     Players
     </div>
 </tr>
 <tr>
<td>
<div style="width:100%;height:100%;">
<table width='100%'  border='1'><tr><td>Name</td><td>Score(Kills/Deaths)</td><td>Ping</td></tr>
<?php
   if(is_array($players)) {
       foreach($players as $player) {
           $name = $player["name"];
           $score = $player["score"];
           $deaths = $player["deaths"];
           $ping = $player["ping"];
           $team = $player["team"];
           $kills = $player["kills"];
echo ("<tr><td>".$name."</td><td>".$score."(".$kills."/".$deaths.")</td><td>".$ping."</td></tr>");
       }
?>
</table>
<?php
   } else {
   }
}
?>
</div></td>
 </tr>
</table>
</body>
</html>
 
ja, und? hast du jetzt gegoogelt?
 
Zurück
Oben