PHP "Star Wars Battlefront II" Serverstatus abfragen

Manuel

Mitglied
Hallo,

ich suche schon lange nach einer Lösung wie ich meinen Server der in "Star Wars Battlefront II" mit der IP-Adresse "195.4.17.251" und dem Port "3658" abfragen kann. Ich google jetzt schon täglich auch hier benutze ich die Suchfunktion in der Hoffnung, dass ich irgendwann mal fündig wäre. Bisjetzt habe ich nur das geschafft den Serverstatus abfragen zu lassen. Sprich ob er online oder offline ist. Das reicht mir aber nicht.

Wie kann ich jetzt abfragen lassen wie viele Spieler auf dem Server von wie vielen maximalen Spielern drauf sind. Maximal ist 18 eingestellt. Freue mich auf eure Hilfe :)
 
Wenn man das Protokoll nicht kennt, kann man da wohl nix machen. Hast du irgendwo eine Spec, in der drin steht, wie das Protokoll aufgebaut ist?
 
Also ich hab imoment den Serverstatus von uns auf gametracker.com laufen der zeigt an, welche Spieler drauf sind (mit den Namen) dann wie viele drauf sind usw. Ich kenn blos paar Befehle die mir Xfire ausspuckt wenn ich im Server bin. Da wird z.B. das angezeigt (siehe Anhang).
 

Anhänge

  • bild1.png
    bild1.png
    7,3 KB · Aufrufe: 66
  • bild2.jpg
    bild2.jpg
    23,1 KB · Aufrufe: 94
Gut, ich kenne weder das Spiel noch hab ich Ahnung von XFire. Aber hast du schon versucht, diese Befehle, von denen du sprichst, mal über ein ganz normales Socket an den Server zu senden?
 
Ich habe es mal so versucht aber es kam nichts dabei raus. Ich habe in meiner Verzweiflung einfach was versucht:

PHP:
<?php
 $fp = @fsockopen("udp://195.4.17.251", 3658, $errno, $error, 5);
 echo $fp->autoaim;
?>

Und wie war dein Versuch gemeint (Beispiel) ?
 
Du erwähntest "Befehle". Ich sehe nun aber, dass eigentlich was anderes gemeint hast. Nämlich eine Statistik-Eigenschaft.

So funktioniert das aber nicht.

Server-Client-Prinzip sieht folgendermaßen aus (Beispiel, was nicht funktionieren wird):

PHP:
// Socket öffnen
$fp = fsockopen("195.4.17.251", 3658, $errno, $errstr);

// prüfen
if($fp)
{
  // Befehl senden
  if(fwrite($fp, "ein_befehl_den_der_server_versteht"))
  {
     // wenn erfolgreich, Ergebnis abholen
     $result = fgets($fp, 1024);
     if($result)
     {
       // und anzeigen
       echo "Ergebnis: " . $result;
     }
  }
}
else
{
  // Fehler: Socket konnte nicht geöffnet werden
  echo "Could not open socket: " . $errstr;
}
 
Schreib mal diese Befehle an den Anfang des Scripts:

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

Bist du sicher, das es eine UDP-Verbindung sein muss? Ich hätte eher auf TCP getippt.
 
Es wird ähnlich wie bei Battlefield 2 sein, Du musst sowas wie ein Magic-Request schicken, dann erst gibt es Infos.

Du : Ich möchte..
Server : Darfst Du? Frage : grumpflbumpfl
Du : Ich darf! Antwort : ratzibatzi
Server : Ok, Hier haste!.

Nimm Dies: http://gameq.sourceforge.net/
oder schaue Dir zumindest den Code an, damit Du verstehst, was es mit diesem Magic-Request auf sich hat.

Auszug aus der Ini
[swbattlefront2]
; Verify port
name = Star Wars: Battlefront 2
port = 3658
prot = gamespy2

Das Protokoll wird gamespy2 genannt.

mfg chmee
 
chmee, mach ich gleich mal und zu dir über chmee, ich hab das so versucht:

PHP:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);  
// Socket öffnen
$fp = fsockopen("tcp://195.4.17.251", 3658, $errno, $errstr);

// prüfen
if($fp)
{
  // Befehl senden
  if(fwrite($fp, "gametype"))
  {
     // wenn erfolgreich, Ergebnis abholen
     $result = fgets($fp, 1024);
     if($result)
     {
       // und anzeigen
       echo "Ergebnis: " . $result;
     }
  }
}
else
{
  // Fehler: Socket konnte nicht geöffnet werden
  echo "Could not open socket: " . $errstr;
}  
?>

Und raus kam das wenn ich tcp verwende:

Warning: fsockopen() [function.fsockopen]: unable to connect to tcp://195.4.17.251:3658 (Connection refused) in /is/htdocs/wp1122503_HO9IHST9QN/www/aus.php on line 5
Could not open socket: Connection refused

Bei udp wieder eine leere Seite.
 
Zurück