Criando comandos com Pawn.CMD e zcmd
Comandos são a principal forma de interação dos jogadores com os sistemas do servidor. Em vez de um OnPlayerCommandText gigante cheio de strcmp, use um processador de comandos.
zcmd x Pawn.CMD
- zcmd: include clássico, muito usado em gamemodes antigos;
- Pawn.CMD: plugin moderno e rápido, com aliases e flags — muito usado hoje.
A sintaxe dos dois é parecida, o que facilita a migração. Verifique a versão compatível com o open.mp.
Comando básico (Pawn.CMD)
#include <Pawn.CMD>
cmd:dinheiro(playerid, params[])
{
new msg[64];
format(msg, sizeof(msg), "Você tem $%d.", GetPlayerMoney(playerid));
SendClientMessage(playerid, -1, msg);
return 1;
}
Parâmetros com sscanf
#include <sscanf2>
cmd:pagar(playerid, params[])
{
new alvo, valor;
if (sscanf(params, "ui", alvo, valor))
return SendClientMessage(playerid, -1, "Uso: /pagar [id/nome] [valor]");
if (!IsPlayerConnected(alvo) || alvo == playerid)
return SendClientMessage(playerid, -1, "Jogador inválido.");
if (valor <= 0 || valor > 1000000)
return SendClientMessage(playerid, -1, "Valor inválido.");
if (GetPlayerMoney(playerid) < valor)
return SendClientMessage(playerid, -1, "Dinheiro insuficiente.");
GivePlayerMoney(playerid, -valor);
GivePlayerMoney(alvo, valor);
return 1;
}
uaceita ID ou parte do nome do jogador;iinteiro,s[tamanho]texto,fdecimal.
Sempre valide: valores negativos e absurdos são exploits clássicos.
Aliases
alias:pagar("pay", "transferir");
Restringindo a administradores
cmd:kick(playerid, params[])
{
if (NivelAdmin[playerid] < 2)
return SendClientMessage(playerid, -1, "Sem permissão.");
// ...
return 1;
}
Pawn.CMD também suporta flags e o callback OnPlayerCommandReceived, onde você pode bloquear comandos para quem não está logado, está preso etc.
Anti-spam
Limite a frequência de comandos pesados por jogador usando GetTickCount().
Mensagem para comandos inexistentes
No callback de resultado (OnPlayerCommandPerformed, no Pawn.CMD), responda com uma mensagem amigável quando o comando não existir.
Hospede seu servidor com a VittHost
Nos planos OPENMP-BR da VittHost, você instala plugins como Pawn.CMD e sscanf pelo painel Pterodactyl. Servidores no Brasil, proteção DDoS, MySQL incluso, compatibilidade total com scripts SA-MP e teste grátis de 3 dias.