Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

PHP + Gameserver

Diskussion: PHP + Gameserver im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige hi. ich will über php einige variablen auf einem cs-server abfragen. wie mache ich das am besten? soweit bin ...

Antwort
Alt 08.06.03, 20:33   #1 (permalink)
Member of Honour
 
Registriert seit: 06.10.01
mido Leistung: Facit NTK
Likes: 1
Standard PHP + Gameserver

Anzeige

hi.

ich will über php einige variablen auf einem cs-server abfragen.

wie mache ich das am besten? soweit bin ich schon:

$log = "Log: ";

$h = fsockopen($ip, 7130, $errno, $errmsg, 5);

if (!$h) { die("keine verbindung."); }
else {

$log .= fputs($h, "rcon_password nix");
$log .= fputs($h, "rcon sv_gravity");

echo $log;

der rcon port ist meines wissens nach 7130..

wieso funktioniert das nicht?

ich bitte um hilfe.

thx,
little_Newbie

mido ist offline   Mit Zitat antworten
Alt 09.06.03, 03:46   #2 (permalink)
Moderator
 
Registriert seit: 17.10.01
soox Leistung: Facit NTK
Likes: 0
Standard

wird das ganze cleartext übertragen?
gibt es da n spezielles zeichen am ende jedes befehles?

...ach ja...hab mir gerade mal die hilfe zu fputs angeschaut...und verweise mal darauf..
http://ch.php.net/manual/de/function.fputs.php
da wird als rückgabewert ein int angegeben.
soox ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 09.06.03, 13:38   #3 (permalink)
Moderator
 
Registriert seit: 12.02.02
sirphreak Leistung: Facit NTK
Likes: 0
Standard

probier mal:

Code:
allgemein.php:
<?
$csinfo=new CounterStrike;
$status=$csinfo->getServerInfo($serveradr,$serverport,1000);
require(\\"cs.php\\");
?>

<?=$csinfo->m_servervars[\"servername\"]?>  //fragt den Servernamen ab 
<?=$csinfo->m_servervars[\"serveraddress\"]?> //fragt die Serveradresse ab
<?=$csinfo->m_servervars[\"mapname\"]?>  //fragt die aktuelle Map ab
<?=$csinfo->m_servervars[\"currentplayers\"]?>  //fragt die aktuellen Spieler  auf dem Server ab
<?=$csinfo->m_servervars[\"maxplayers\"]?>  //fragt nach der max. Spieleranzahl für den Server 

// Wenn man von jeder Map auf dem Server auch gleich ein Screenshort 
// anzeigen lassen möchte, so muss man die Bilder genauso wie die 
// eigentlichen Mapnamen nennen und diese folgend einbinden: 
<img border=\\"0\\" src=\\"maps/<?=$csinfo->m_servervars[\\"mapname\\"]?>.jpg\\" width=\\"289\\" height=\\"219\\">
<?
include(spieler.php);
include(regeln.php);
?>
Aufruf: http://www.lalala.de/allgemein.php?s...rverport=27015

Code:
spieler.php
<?
$csinfo=new CounterStrike;
$status=$csinfo->getServerPlayers($HTTP_GET_VARS[\\"serveradr\\"],$HTTP_GET_VARS[\\"serverport\\"],1000);
?>
//Nun müssen wir die Informationen eines jeden Spielers der auf dem 
// Server ist abfragen: 
<div align=\\"center\\">
<center>
<table border=\\"0\\" cellpadding=\\"0\\" cellspacing=\\"0\\" style=\\"border-collapse: collapse\\" bordercolor=\\"#111111\\" width=\\"304\\" height=\\"40\\" id=\\"AutoNumber1\\">
<tr>
<td width=\\"171\\" height=\\"15\\" align=\\"center\\"><b>
<font size=\\"2\\" face=\\"Verdana\\">Name</font></b></td>
<td width=\\"54\\" height=\\"15\\" align=\\"center\\">
<p align=\\"center\\"><b><font size=\\"2\\" face=\\"Verdana\\">Frags</font></b></td>
<td width=\\"72\\" height=\\"15\\" align=\\"center\\"><b>
<font size=\\"2\\" face=\\"Verdana\\">Spielzeit</font></b></td>
</tr>
<? if (is_array($csinfo->m_playerinfo)) { ?>
<? while (list(,$player) = each ($csinfo->m_playerinfo)) { ?>
<tr>
<td width=\\"171\\" height=\\"21\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\"><?=$player[\\"name\\"]?></font></td>
<td width=\\"54\\" height=\\"21\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\" color=\\"#FF0000\\"><?=$player[\\"frags\\"]?></font></td>
<td width=\\"72\\" height=\\"21\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\"><?=$player[\\"time\\"]?></font></td>
</tr>
<? } ?>
<? } else { ?>
<tr>
<td colspan=\\"3\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\">Keine Spieler auf dem Server</font></td>
</tr>
<? } ?>
</table>
</center>
</div>
Es stehen folgende Informationen der Spieler zur Verfügung:
<?=$player["name"]?> Spielername
<?=$player["frags"]?> Frags des Spielers
<?=$player["time"]?> Zeit, wie lange der Spieler schon auf dem Server ist


Code:
regeln.php
<?
$csinfo=new CounterStrike;
$status=$csinfo->getServerRules($HTTP_GET_VARS[\\"serveradr\\"],$HTTP_GET_VARS[\\"serverport\\"],1000);
?>
<div align=\\"center\\">
<center>
<table border=\\"0\\" cellpadding=\\"0\\" cellspacing=\\"0\\" style=\\"border-collapse: collapse\\" bordercolor=\\"#111111\\" width=\\"195\\" height=\\"19\\" id=\\"AutoNumber1\\">
<tr>
<td width=\\"124\\" height=\\"10\\" align=\\"center\\"><b>
<font size=\\"2\\" face=\\"Verdana\\">Einstellung</font></b></td>
<td width=\\"65\\" height=\\"10\\" align=\\"center\\"><b>
<font size=\\"2\\" face=\\"Verdana\\">Wert</font></b></td>
</tr>
<? while (list($name,$value) = each ($csinfo->m_serverrules)) { ?>
<tr>
<td width=\\"124\\" height=\\"5\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\"><?=$name?></font></td>
<td width=\\"65\\" height=\\"5\\" align=\\"center\\"><font size=\\"2\\" face=\\"Verdana\\"><?=$value?></font></td>
</tr>
<? } ?>
</table>
</center>
</div>
folgende Informationen sind hier verfügbar:
<?=$name?> Regelbezeichnung
<?=$value?> Wert der jeweiligen Regel

und zum Schluss brauchst du noch die oben per require einbezogene cs.php:

Code:
cs.php:

<?
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;
    }
}
?>
PS: php darf glaub ich nicht im safe_mode laufen, ansonsten müsste es funzen
(ich weiss der Code ist nicht besonders toll, und geschweige die HTML-Seiten, aber das kannst du ja anpassen )
sirphreak ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » PHP + Gameserver
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
gameserver erstellen keksinat0r Games 8 27.06.08 11:22
Gameserver Sponsor FuRiOuS Games 2 24.06.07 19:54
Gameserver Sierra Games 10 03.11.04 21:49
Gameserver Rconpassword - wie sicher? Darkhunter Virenschutz · Tools & Aggressive Software 6 19.02.04 22:58


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61