samp-query-php é uma API em PHP desenvolvida para consultar e obter informações de servidores SA-MP (San Andreas Multiplayer). Esta API permite que você verifique se um servidor está online, obtenha o ping, informações básicas e detalhadas sobre o servidor, jogadores conectados e regras do servidor. A API também inclui um sistema de tentativas automáticas para garantir que os dados sejam obtidos de forma confiável.
- English > README / Code.
- Español > README / Código.
- Polski > README / Kod.
- Türk > README / Kod.
- Deutsch > README / Code.
- Русский > README / Код.
- Français > README / Code.
- Italiano > README / Codice.
- Svensk > README / Koda.
- SA-MP Query PHP
- Consulta rápida e eficiente de servidores SA-MP.
- Requisição de informações básicas e detalhadas do servidor.
- Possibilidade de obtenção de dados sobre jogadores e regras do servidor.
- Sistema de tentativas automático para garantir a obtenção dos dados.
- Configuração de timeouts para conexão e resposta.
- Fechamento automático do socket ao término da operação.
- Suporte a múltiplos idiomas para informações do servidor.
- Limitação personalizada para a exibição de jogadores.
Clone o repositório para sua máquina local:
git clone https://github.com/ocalasans/samp-query-php.git
Inclua o arquivo samp-query.php
no seu projeto e instancie a classe samp_query
passando o endereço IP e a porta do servidor SA-MP que deseja consultar.
require 'samp-query.php';
$server = new samp_query('127.0.0.1', 7777);
if ($server->Esta_Online()) {
echo "Servidor está online!";
echo "Ping: " . $server->Obter_Ping() . " ms";
$info = $server->Obter_Informacoes();
print_r($info);
$jogadores = $server->Obter_Jogadores_0();
print_r($jogadores);
$regras = $server->Obter_Regras();
print_r($regras);
} else {
echo "Servidor está offline.";
}
require 'samp-query.php';
$servidores = [
['ip' => '127.0.0.1', 'porta' => 7777],
['ip' => '192.168.0.1', 'porta' => 7778],
];
foreach ($servidores as $dados) {
$server = new samp_query($dados['ip'], $dados['porta']);
if ($server->Esta_Online()) {
echo "Servidor " . $dados['ip'] . ":" . $dados['porta'] . " está online!";
echo "Ping: " . $server->Obter_Ping() . " ms\n";
} else {
echo "Servidor " . $dados['ip'] . ":" . $dados['porta'] . " está offline.\n";
}
}
public function Esta_Online()
Retorna true
se o servidor estiver online, caso contrário, false
. A verificação é realizada ao tentar conectar-se ao servidor e enviar um pacote inicial. Se a conexão falhar, o servidor é considerado offline.
public function Obter_Ping()
Retorna o ping do servidor em milissegundos, calculado com base no tempo que leva para o pacote ser enviado e a resposta ser recebida. Se o servidor estiver offline ou não puder obter o ping, retorna null
.
public function Obter_Informacoes()
Retorna um array com informações básicas do servidor, como:
passworded
: Indica se o servidor é protegido por senha.players
: Número atual de jogadores.maxplayers
: Número máximo de jogadores permitido.hostname
: Nome do servidor.gamemode
: Modo de jogo do servidor.language
: Idioma utilizado no servidor.
Este método faz uso do sistema de tentativas automáticas para garantir que os dados sejam obtidos corretamente.
public function Obter_Jogadores_0()
Retorna um array com a lista de jogadores conectados, contendo nickname
e score
(pontuação) de cada jogador. Esse método é adequado para obter uma visão geral dos jogadores conectados.
public function Obter_Jogadores_1()
Retorna um array com informações detalhadas sobre cada jogador, incluindo playerid
, nickname
, score
e ping
. Esse método fornece dados mais profundos sobre os jogadores conectados.
public function Obter_Regras()
Retorna um array com as regras do servidor, onde a chave é o nome da regra e o valor é o valor associado a essa regra. Esse método também utiliza o sistema de tentativas para assegurar a obtenção dos dados.
A API incorpora um sistema de tentativas (retryLimit
) que permite tentar a obtenção de informações até três vezes antes de desistir. Isso aumenta a confiabilidade, especialmente em situações onde a conexão pode ser instável.
Ao instanciar a classe samp_query
, dois tipos de timeouts são configurados:
timeouts['connect']
: Define o tempo máximo em segundos para estabelecer uma conexão com o servidor. O padrão é 1 segundo.timeouts['response']
: Define o tempo máximo em segundos para esperar uma resposta do servidor após o envio de um pacote. O padrão é 120 segundos que já é um tempo extremamente alto.
Esses timeouts garantem que a API não fique indefinidamente aguardando uma resposta, melhorando a eficiência.
Os pacotes de consulta ao servidor SA-MP são construídos manualmente, utilizando o prefixo 'SAMP'
seguido pelo endereço IP do servidor e pela porta. Dependendo do tipo de informação solicitada (i
, c
, d
, r
), o comando correspondente é adicionado ao pacote.
A API inclui um método privado toInt()
que converte dados binários recebidos do servidor para inteiros. Esse método garante que os dados sejam manipulados corretamente, mesmo em casos de grandes valores.
private function toInt($data)
O método utiliza operações bit a bit para reconstruir o valor inteiro a partir dos dados binários, convertendo as quatro partes separadas de um número inteiro para o formato original.
É possível personalizar os timeouts no momento da instância da classe samp_query
. Por exemplo, para definir o tempo máximo de conexão para 5 segundos e o tempo de resposta para 60 segundos:
$server = new samp_query('127.0.0.1', 7777);
$server->setTimeouts([
'connect' => 5,
'response' => 60
]);
A API é projetada para capturar erros e falhas de conexão, retornando mensagens de erro claras em caso de falhas. Por exemplo, se um servidor não puder ser alcançado, a API retorna null
para métodos como Obter_Informacoes()
, Obter_Jogadores_0()
, Obter_Jogadores_1()
e Obter_Regras()
.
if ($server->Obter_Informacoes() === null) {
echo "Não foi possível obter informações do servidor.";
}
Instagram: ocalasans
YouTube: Calasans
Discord: Calasans
Comunidade: SA-MP Programming Community