Servidores de Jogos

Criando comandos com Pawn.CMD e zcmd

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;
}
  • u aceita ID ou parte do nome do jogador;
  • i inteiro, s[tamanho] texto, f decimal.

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.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS