WinFuture-Forum.de: Problem Mit Cs1.6 Serverinfoscript - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Problem Mit Cs1.6 Serverinfoscript


#1 Mitglied ist offline   ThorbenR 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 25. Juli 05
  • Reputation: 0

geschrieben 25. Juli 2005 - 12:22

Hallo Leute!

Seitdem es das neue CS Protokoll gibt funktioniert mein Serverinfoscript nicht mehr. Weiß jemand wo ich soetwas herbekomme?

Gruß,
ThorbenR
0

Anzeige



#2 _Benjamin_

  • Gruppe: Gäste

geschrieben 25. Juli 2005 - 12:51

hmm meine glaskugel kann mir irgendwie nicht sagen wie dein script aussieht O.o
0

#3 Mitglied ist offline   ThorbenR 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 25. Juli 05
  • Reputation: 0

geschrieben 25. Juli 2005 - 12:53

lol...wasn das für ein spruch?
0

#4 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.198
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 25. Juli 2005 - 12:54

Zitat (ThorbenR: 25.07.2005, 13:53)

lol...wasn das für ein spruch?
<{POST_SNAPBACK}>

Ok, bist noch nicht so lange bei uns. Naja, raus mit den Infos! :) Wie sieht das Skript denn aus?
0

#5 Mitglied ist offline   ThorbenR 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 25. Juli 05
  • Reputation: 0

geschrieben 25. Juli 2005 - 13:09

counterstrike.inc.php
<?
// **************************************************
********************************************
// Class CounterStrike
// Author : Henrik Schack Jensen ([email protected])
//
// Changelog:
// Version 1.01                03/11/2001         Removed ASP style tags
//                                                                                                                 Removed usort warning
//                                                                                                                Fixed error on empty server
// Version 1.00                03/05/2001 Initial (& a bit messy ) release
//
// A utilityclass (PHP4 only) to do serverstatus-queries against Halflife/Counterstrike servers
//
// The following functions are available:
//
// Function getServerInfo(serveraddress,serverport)
// Get info about servername,serveraddress,mapname,currentplayers & maxplayers.
//
// Function getServerPlayers(serveraddress,serverport)
// Get info about players currently playing on the server.
// Players are sortet by frags.
//
// Function getServerRules(serveraddress,serverport)
// Get info about serverrules/settings.
//
// All results are returned in membervariables:
//
//
// Demosource is available at http://www.gameserver.dk/
// **************************************************
********************************************

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));
                //
                $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
        // 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
        // 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
        // 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
                $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;
        }
}
?>


server.cfg
require("counterstrike.inc.php");
$serveradr = '62.75.220.40';
$serverport = '27015';
$csinfo = new CounterStrike;
$status = $csinfo->getServerInfo($serveradr,$serverport,1000);
$status = $csinfo->getServerPlayers($serveradr,$serverport,1000);

echo 'Spieler: '.$csinfo->m_servervars["currentplayers"].'';


Er will einfach die Daten nicht holen! Ich weiß das es ein neues Protokoll gibt, aber ich weiß nicht wie ich das verändern muss!
0

#6 Mitglied ist offline   Meatwad 

  • Gruppe: aktive Mitglieder
  • Beiträge: 784
  • Beigetreten: 07. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Bad Vilbel
  • Interessen:Computer, Inliner, Chatten...

geschrieben 25. Juli 2005 - 23:56

hmmm...das nächste mal ne datei anhängen...zum topic: was für eine fehlermeldung gibt das script denn aus?
I am away to look for my self. If I am back before I return keep me here. | Mein Server
0

#7 Mitglied ist offline   MaliMaster 

  • Gruppe: aktive Mitglieder
  • Beiträge: 905
  • Beigetreten: 10. April 02
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Deutschland

geschrieben 28. Juli 2005 - 13:48

sv_enable_old_queries 1

muss gesetzt sein, bin mir nich sicher wie der befehl genau war, aufjedenfall so ählich bin nämlich unterwegs..
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0