Enviar respuesta 
[PHP] Función A2S_PLAYER
Autor Mensaje
Kreeze Sin conexión
Miembro Junior


Mensajes: 28
Registro en: Jan 2019
Reputación: 0
Mensaje: #1
[PHP] Función A2S_PLAYER
Simplemente alguna función que envie A2S_PLAYER para obtener los jugadores online de un server. Gracias Sonrisa
08/02/2019 03:10 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
metita En línea
Miembro Sr.


Trebol verde
Mensajes: 427
Registro en: Feb 2015
Reputación: 9
Mensaje: #2
RE: [PHP] Función A2S_PLAYER
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

08/02/2019 03:13 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Sugisaki Sin conexión
Miembro Destacado


Medalla de aportes Trebol purpura 1k
Mensajes: 1,074
Registro en: Jul 2014
Reputación: 21
Mensaje: #3
RE: [PHP] Función A2S_PLAYER
(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
Image

(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();

(Este mensaje fue modificado por última vez en: 08/02/2019 06:37 PM por Sugisaki.)
08/02/2019 06:37 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Kreeze Sin conexión
Miembro Junior


Mensajes: 28
Registro en: Jan 2019
Reputación: 0
Mensaje: #4
RE: [PHP] Función A2S_PLAYER
Ahí envias Source Engine Query, yo estoy intentando enviar este formato:
[url]https://developer.valvesoftware.com/wiki/Server_queries#A2S_PLAYER[/url]

[ÿÿÿÿUÿÿÿÿ] -> [\xff\xff\xff\xff U $numberchallenge];
(CREO que es así, pero sí yo envio eso, me devuelve una A) nomás..
(Este mensaje fue modificado por última vez en: 09/02/2019 12:15 PM por Kreeze.)
09/02/2019 12:14 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Sugisaki Sin conexión
Miembro Destacado


Medalla de aportes Trebol purpura 1k
Mensajes: 1,074
Registro en: Jul 2014
Reputación: 21
Mensaje: #5
RE: [PHP] Función A2S_PLAYER
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
Image

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


Archivo(s) adjuntos Miniatura(s)
   

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
Image

(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();

09/02/2019 02:52 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS