sscanf: lendo parâmetros de comandos com segurança
Separar "/dar 12 5000" em partes com strtok é trabalhoso e cheio de armadilhas. O sscanf2 faz isso em uma linha, com tipos e validação.
Especificadores mais usados
| Especificador | Lê |
|---|---|
i ou d |
Inteiro |
f |
Decimal (Float) |
s[tamanho] |
Texto (tamanho obrigatório) |
u |
Jogador (ID ou parte do nome) |
r |
Jogador, incluindo NPCs |
c |
Um caractere |
I(padrão) |
Inteiro opcional com valor padrão |
S(padrão)[tamanho] |
Texto opcional |
Exemplo: /dar [jogador] [valor]
cmd:dar(playerid, params[])
{
new alvo, valor;
if (sscanf(params, "ui", alvo, valor))
return SendClientMessage(playerid, -1, "Uso: /dar [id/nome] [valor]");
if (alvo == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, "Jogador não encontrado.");
// validações de valor...
return 1;
}
sscanf retorna 0 em caso de sucesso. Por isso o if trata o erro.
Texto no fim do comando
new alvo, motivo[64];
if (sscanf(params, "us[64]", alvo, motivo))
return SendClientMessage(playerid, -1, "Uso: /kick [id] [motivo]");
O último s captura o resto da linha, com espaços.
Parâmetros opcionais
new pagina;
sscanf(params, "I(1)", pagina); // /ajuda ou /ajuda 2
Validação: o sscanf não faz tudo
O sscanf garante o tipo, não a regra de negócio. Sempre valide:
- Negativos:
/dar 3 -5000pode tirar dinheiro de outro jogador; - Limites: valores absurdos ou overflow;
- Alvo:
INVALID_PLAYER_ID, o próprio jogador, jogador não logado; - Texto: tamanho e caracteres, principalmente se for para o banco (use escape ou consultas preparadas).
Mensagens de uso claras
Mostre sempre o formato correto quando o comando for digitado errado. Jogadores agradecem e a staff recebe menos dúvidas.
Instalação
Use a versão do sscanf compatível com o open.mp (plugin e include da mesma versão) e a build Linux em servidores Linux.
Hospede seu servidor com a VittHost
Nos planos OPENMP-BR da VittHost, você instala o sscanf e outros plugins pelo painel Pterodactyl. Servidores no Brasil, proteção DDoS, MySQL incluso, compatibilidade total com scripts SA-MP e teste grátis de 3 dias.