Uma API completa para ambientes Node.js, projetada para consultas a servidores SA-MP (San Andreas Multiplayer) e compatível com o OPEN.MP (Open Multiplayer). Oferece recursos avançados de monitoramento e coleta de informações em tempo real.
Sobre a API:
O SA-MP Query Node é uma API desenvolvida especificamente para interagir com servidores SA-MP, permitindo a coleta de informações detalhadas sobre o servidor em tempo real. A API utiliza o protocolo de consulta nativo do SA-MP e implementa várias camadas de otimização para garantir consultas eficientes e confiáveis.
A API foi projetada com foco em:
Confiabilidade nas consultas
Eficiência no processamento
Facilidade de uso
Tratamento robusto de erros
Suporte completo a todas as funcionalidades do protocolo SA-MP
Funcionalidades
Sistema de Consulta Principal:
A API oferece um sistema de consulta completo que permite obter:
1 - Informações Básicas do Servidor:
Nome do servidor
Modo de jogo atual
Idioma configurado
Status de proteção por senha
Número máximo de jogadores
Número atual de jogadores online
2 - Lista Detalhada de Jogadores:
ID do jogador
Nome do jogador
Pontuação atual
Latência (ping) do jogador
3 - Regras do Servidor:
Configurações de lag compensation
Clima atual
Outras regras personalizadas definidas pelo servidor
4 - Medições de Desempenho:
Latência do servidor (ping)
Tempo de resposta das consultas
Estatísticas de conexão
Estrutura da API
1 - DNS_Cache
Código:
class DNS_Cache {
constructor() {
this.cache = new Map();
this.Resolve_DNS = promisify(dns.resolve4);
}
}
A classe DNS_Cache é responsável por:
Armazenar temporariamente resoluções DNS
Otimizar consultas repetidas
Reduzir a latência de conexão
Gerenciar o tempo de vida do cache
Métodos principais:
Get_IP_Address(host_name): Resolve e cache endereços IP
Cache automático com duração configurável (padrão: 5 minutos)
Fallback para hostname em caso de falha na resolução
2 - Query_Manager
Código:
class Query_Manager extends EventEmitter {
constructor() {
super();
this.Active_Queries = new Map();
}
}
O Query_Manager controla:
Gerenciamento de consultas ativas
Timeouts e retentativas
Eventos de conclusão de consulta
Limpeza de consultas expiradas
Funcionalidades:
Sistema de retry automático
Controle de tempo limite
Gerenciamento de múltiplas consultas simultâneas
Emissão de eventos de conclusão
3 - SAMP_Strings
Código:
class SAMP_Strings {
static charset = [/* conjunto de caracteres SA-MP */];
static Decode_String(buffer_data) { /* ... */ }
}
Responsável por:
Decodificação de strings do SA-MP
Suporte a caracteres especiais
Limpeza e sanitização de strings
Conversão de buffers para texto
Exemplos de Uso
1 - Consulta Básica
Código:
const query = require('samp-query-node');
query('127.0.0.1:7777', (erro, resposta) => {
if (erro) {
console.error('Erro na consulta:', erro);
return;
}
console.log('Informações do servidor:', resposta);
});
console.log('Nome do servidor:', resposta.hostname);
console.log('Jogadores:', resposta.onlinePlayers);
console.log('Modo de jogo:', resposta.gamemode);
// Processando lista de jogadores
resposta.players.forEach(jogador => {
console.log(`${jogador.name}: ${jogador.score} pontos`);
});
});
A API retorna um objeto detalhado com todas as informações do servidor:
Código:
{
// Informações básicas
address: "127.0.0.1", // Endereço do servidor
port: 7777, // Porta do servidor
hostname: "Server", // Nome do servidor
gamemode: "RolePlay", // Modo de jogo
language: "Português - Brasil", // Idioma
// Status do servidor
password: false, // Proteção por senha
maxPlayers: 100, // Máximo de jogadores
onlinePlayers: 45, // Jogadores online
ping: 58, // Latência em ms
queryTime: 1635789012345, // Timestamp da consulta
// Lista de jogadores
players: [
{
id: 0, // ID do jogador
name: "Calasans", // Nome
score: 63, // Pontuação
ping: 117 // Ping do jogador
},
],
// Regras do servidor
rules: {
allowed_clients: "0.3.7, 0.3.DL", // Versões permitidas de clientes
artwork: 1, // Habilitação de artwork
lagcomp: "On", // Status do lag comp
mapname: "San Andreas", // Nome do mapa
version: "0.3.7", // Versão do servidor
weather: 10, // ID do clima
weburl: "website.com", // URL do site do servidor
worldtime: "12:00" // Hora do mundo no servidor
}
}
Leia o repositório disponibilizado no GitHub para saber mais!
como impedir um player que fi banido pela rcon e se encontra com o ip dentro das samp.ban
tentei fazer isso mas nao ler
Código:
public OnPlayerConnect(playerid)
{
new playerIP[16];
GetPlayerIp(playerid, playerIP, sizeof(playerIP)); // Obtém o IP do jogador
new File:banFile = fopen("samp.ban", io_read); // Abre o arquivo samp.ban para leitura
if (banFile)
{
new banData[128]; // Buffer para armazenar cada linha
while (fread(banFile, banData)) // Lê cada linha do arquivo
{
// Exibe as informações para depuração
printf("Verificando IP: %s contra: %s", playerIP, banData);
// Remove espaços em branco antes e depois para garantir a comparação correta
banData[strlen(banData) - 1] = 0; // Remove o caractere de nova linha no final
if (strfind(banData, playerIP, true) != -1) // Verifica se o IP do jogador está na linha atual
{
SendClientMessage(playerid, -1, "Você está banido deste servidor.");
Kick(playerid); // Expulsa o jogador
fclose(banFile); // Fecha o arquivo antes de sair
return 0; // Impede qualquer outra ação
}
}
fclose(banFile); // Fecha o arquivo após a leitura completa
}
else
{
SendClientMessage(playerid, -1, "Erro: não foi possível carregar o arquivo samp.ban.");
}
return 1; // Permite a conexão do jogador se não estiver banido
}
boa noite, estou precisando de ajuda em um sistema de avisar guerra, a ajuda que eu necessito é na parte da dialog, eu preciso que a dialog chega para apenas dois frentes da favela selecionada, e quando a dialog chegar para os frentes os dois deveram aceitar a proposta da guerra para a guerra começar, caso um dos frentes aceite e o outro não, a guerra não começara, e aparecer uma mensagem de tipo, 'o frente s% aceitou a proposta (1/2) "ai devera aparecer isso (1/2), e quando o outro frente aceitar ela ficar (2/2), a guerra começara quando os dois frentes aceitar, agora caso ele não aceite a proposta de guerra ira expirar!
o código estará abaixo:
Código:
public Start_Guerra(playerid, fid)
{
for(new f = 1; f < MAX_FACCOES; f++)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[i][pFrente] == f && PlayerInfo[i][pFavela] == fid)
{
new String[128];
format(String, sizeof(String), "[Guerra] %s fez uma proposta de guerra para comunidade '%s'!", Nome(playerid), FaccaoInfo[fid][fNome]);
SendClientMessageToAllEx(COLOR_WHITE, String);
format(String, sizeof(String), "%s fez uma proposta de guerra contra a sua comunidade\n", Nome(playerid));
ShowPlayerDialog(i, DIALOG_ACTGUERRA, DIALOG_STYLE_MSGBOX, "{FFFFFF}Convite Guerra", String, "Aceitar", "Recusar");
break;
}
}
}
return true;
}
case DIALOG_ACTGUERRA:
{
if(response)
{
new i = GetPVarInt(i, "namewar"), fid = PlayerInfo[i][pFavela];
SendFormattedMessageToAll(COLOR_WHITE, "[Guerra] '%s' iniciou uma guerra contra a comunidade '%s'!", FaccaoInfo[GuerraInfo[fid][gAtaque]][fNome], FaccaoInfo[GuerraInfo[fid][gDefende]][fNome]);
SendFormattedMessage(i, COLOR_LIGHTYELLOW, "[PROPOSTA] %s aceitou a guerra.", Nome(playerid));
SendClientMessage(i, COLOR_ORANGE, "[PROPOSTA] Voce aceitou a guerra.");
}
}
}
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.
Características:
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.
Incluir no projeto:
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.
queria saber como posso quebrar a linha para o nome ficar em baixo do outro
pois aqui format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]); fica assim tudo na mesma linha 1 andre 2 aleatorio 3 aleatorio pois queria que ficasse assim um abaixo do outro estou tentando mas ja nao sei oq fazer coloquei para ser exbido em uma textdraw sou leigo em pawno e queria ajuda
1 andre 2 aleatorio 3 blablabla
#include <a_samp>
new Text:TextdrawRank;
new CheckpointCount[MAX_PLAYERS];
public OnPlayerEnterRaceCheckpoint(playerid)
{
CheckpointCount[playerid]++;
UpdateRankings();
}
UpdateRankings()
{
new string[256];
new rankString[512];
rankString[0] = '\0';
new ranks[MAX_PLAYERS];
new rankCount = 0;
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (CheckpointCount[i] > 0)
{
ranks[rankCount++] = i;
}
}
for (new i = 0; i < rankCount - 1; i++)
{
for (new j = i + 1; j < rankCount; j++)
{
if (CheckpointCount[ranks[i]] < CheckpointCount[ranks[j]])
{
new temp = ranks[i];
ranks[i] = ranks[j];
ranks[j] = temp;
}
}
}
for (new i = 0; i < rankCount && i < 5; i++) // Exibe apenas os 5 primeiros
{
new playerName[24];
GetPlayerName(ranks[i], playerName, sizeof(playerName));
format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]);
strcat(rankString, string);
}
TextDrawSetString(TextdrawRank, rankString);
}
Olá pessoal, tudo bem com vocês? Espero que todos estejam bem!
Venho vos apresentar o mais novo servidor do GTA SAMP. O Novo Mundo Virtual RPG, ele se encontra em sua fase BETA ( v1.0.0 ). Estamos lançando novas atualizações diariamente
No NMV você terá uma segunda vida virtual, onde você poderá ter um emprego, cidadania, casas, empresas, veículos, entre muitas outras coisas. Venha viver essas experiência inesquecível conosco!
O servidor foi totalmente criado do zero. Possuímos profissões, sistemas em geral muito bem desenvolvidos e inovadores, alguns nunca vistos antes ( Ainda serão criados muitos outros ). A nossa equipe de administração é formada por membros competentes, que sempre estarão prontos para te ajudar ou proteger o servidor de pessoas mal intencionadas, para garantir uma boa jogatina de todos.
Estamos com as vagas abertas na Administração, pois prezamos pela segurança de todos(as) os(as) nossos(as) jogadores(as), dentro e fora do game.
Fique por dentro de tudo o que acontece em nosso servidor, como por exemplo: Avisos, Atualizações, Eventos, Regras e muito mais.
Vamos estar esperando muito ansiosos e de portas abertas todos vocês! Lembrando que o servidor está em fase BETA, mas suas contas não serão perdidas quando lançarmos a versão final.
Eae pessoal tudo bem? como faço pra procurar no banco de dados MySQL todos os jogadores de uma organização?
Alguém poderia me dar um exemplo de comando?
Tipo:
/pcc
Variavel da organização do banco de dados 'Org_PCC'
ai vai mostrar todos que estão nessa organização sendo offline ou online
Nick_exemplo_01 (Offiline) - Dono do PCC Nick_exemplo_02 (Online) - Traficante
Então, estou tendo alguns problemas com a include DOF2, nos quais ela não esta reconhecndo certos parametros
Eu ja procurei MUITO e vi que: Ou a include esta desatualizada ou estes parametros realmente não existem.
Durante a procura, eu abri o DOF2.inc, tentei definir os parametros lá dentro, porem apareceu mais erros.
No final de tudo eu resolvi voltar atras e vir pedir ajuda aqui no Forum.
Código:
error 017: undefined symbol "DOF2_Open"
warning 213: tag mismatch
error 017: undefined symbol "DOF2_INVALID_FILE"
error 035: argument type mismatch (argument 1)
error 035: argument type mismatch (argument 1)
error 017: undefined symbol "DOF2_Close"