[PHP] Función A2S_PLAYER
#1
Simplemente alguna función que envie A2S_PLAYER para obtener los jugadores online de un server. Gracias Sonrisa
Responder
#2
Código PHP:
public function GetPlayers( )
        {
            if( !
$this->Connected )
            {
                throw new 
SocketException'Not connected.'SocketException::NOT_CONNECTED );
            }
            
            
$this->GetChallengeself::A2S_PLAYERself::S2A_PLAYER );
            
            
$this->Socket->Writeself::A2S_PLAYER$this->Challenge );
            
$Buffer $this->Socket->Read14000 ); // Moronic Arma 3 developers do not split their packets, so we have to read more data
            // This violates the protocol spec, and they probably should fix it: https://developer.valvesoftware.com/wiki/Server_queries#Protocol
            
            
$Type $Buffer->GetByte( );
            
            if( 
$Type !== self::S2A_PLAYER )
            {
                throw new 
InvalidPacketException'GetPlayers: Packet header mismatch. (0x' DecHex$Type ) . ')'InvalidPacketException::PACKET_HEADER_MISMATCH );
            }
            
            
$Players = [];
            
$Count   $Buffer->GetByte( );
            
            while( 
$Count-- > && $Buffer->Remaining( ) > )
            {
                
$Player'Id' ]    = $Buffer->GetByte( ); // PlayerID, is it just always 0?
                
$Player'Name' ]  = $Buffer->GetString( );
                
$Player'Frags' ] = $Buffer->GetLong( );
                
$Player'Time' ]  = (int)$Buffer->GetFloat( );
                
$Player'TimeF' ] = GMDate( ( $Player'Time' ] > 3600 "H:i:s" "i:s" ), $Player'Time' ] );
                
                
$Players[ ] = $Player;
            }
            
            return 
$Players;
        } 

Source: https://github.com/xPaw/PHP-Source-Query...eQuery.php
Responder
#3
(01/04/2017, 05:15 PM)Sugisaki escribió: hacer un server query es mas facil de lo que creia Proud
por si alguien lo quiere
Código PHP:
<?php

$server 
get_server_status("127.0.0.1""27015");

if(!
$server)
{
    die();
}

echo(
$server['ip']."<br>");
echo(
$server['name']."<br>");
echo(
$server['map']."<br>");
echo(
$server['gamename']."<br>");
echo(
$server['players']."<br>");
echo(
$server['maxplayers']."<br>");

?>

<?php
function get_server_status($ip$port)
{
    
$socket = @fsockopen("udp://".$ip$port $errno$errstr1);
    if(!
$socket)
    {
        die(
"Servidor no responde...");
    }
    
fwrite($socket"\xFF\xFF\xFF\xFFTSource Engine Query\x00");
    
$r fread($socket4096);
    @
fclose($socket);
    
$server = array();
    if(
$r[4] == 'm'// Este tipo de query es si Dpronto quiero ver otro tipo de sv
    
{
        
$data explode("\x00"substr($r5));
        
$server['ip'] = $data[0];
        
$server['name'] = $data[1];
        
$server['map'] = $data[2];
        
$server['mod'] = $data[3];
        
$server['gamename'] = $data[4];

        
$l 5;
        
        
$l += strlen($data[0]) + 1;
        
$l += strlen($data[1]) + 1;
        
$l += strlen($data[2]) + 1;
        
$l += strlen($data[3]) + 1;
        
$l += strlen($data[4]) + 1;

        
$server['players'] = ord($r[$l]);
        
$l += 1;
        
$server['maxplayers'] = ord($r[$l]);
        return 
$server;
    }
    else if(
$r[4] == 'I')
    {
        
        
$data explode("\x00"substr($r6));
        
$server['ip'] = sprintf("%s:%s"$ip$port);
        
$server['name'] = $data[0];
        
$server['map'] = $data[1];
        
$server['mod'] = $data[2];
        
$server['gamename'] = $data[3];
        
        
$l 6;
        
$l += strlen($data[0]) + 1;
        
$l += strlen($data[1]) + 1;
        
$l += strlen($data[2]) + 1;
        
$l += strlen($data[3]) + 3;
        
$server['players'] = ord($r[$l]);
        
$l += 1;
        
$server['maxplayers'] = ord($r[$l]);
        return 
$server;
    }
    else 
    {
        die(
"Servidor no responde...");
    }
    return 
false;
    

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#4
Ahí envias Source Engine Query, yo estoy intentando enviar este formato:
https://developer.valvesoftware.com/wiki...A2S_PLAYER

[ÿÿÿÿUÿÿÿÿ] -> [\xff\xff\xff\xff U $numberchallenge];
(CREO que es así, pero sí yo envio eso, me devuelve una A) nomás..
Responder
#5
Cita:Example challenge request:
Código PHP:
FF FF FF FF 55 FF FF FF FF                         ÿÿÿÿUÿÿÿÿ
y retorna
Código PHP:
FF FF FF FF 41 4B A1 D5 22                         ÿÿÿÿAÿÿÿÿ
Esa es la "A" que te sale pero la primera peticion es para obtener el "challenge" lo cual nos retorno
Código:
4B A1 D5 22
solo queda hacer el AS2_PLAYER
que seria
Código PHP:
FF FF FF FF 55 4B A1 D5 22 
y nos retornaria algo asi
[Imagen: attachment.php?aid=6152]

Código PHP:
<?php
class sv
{
    function 
__construct($ip$port)
    {
        
$socket = @fsockopen("udp://".$ip$port$errno$errstr1.0);
        if(!
$socket)
        {
            echo(
"Servidor No responde");
            return;
        }
        
$as2player "\xFF\xFF\xFF\xFF\x55\xFF\xFF\xFF\xFF";
        
fwrite($socket$as2player);
        
$r fread($socket4096);
        
        
$r substr($r5);
        
$as2player2 "\xFF\xFF\xFF\xFF\x55".$r;
        
fwrite($socket$as2player2);
        
$r fread($socket4096);
        echo 
$r;
    }
}

$server = new sv("127.0.0.1""27015");
?>

le hace falta splitear los nombres de los users y bueh!! ya estaria


Archivos adjuntos Miniatura(s)
   
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)