Servidores de Jogos

Diálogos (dialogs): menus e formulários no jogo

Diálogos (dialogs): menus e formulários no jogo

Os diálogos são janelas nativas do cliente que permitem menus, formulários de login, lojas e confirmações — sem precisar desenhar textdraws.

Estilos

Estilo Uso
DIALOG_STYLE_MSGBOX Mensagem com botões
DIALOG_STYLE_INPUT Campo de texto
DIALOG_STYLE_PASSWORD Campo de senha (texto oculto)
DIALOG_STYLE_LIST Lista de opções
DIALOG_STYLE_TABLIST Lista em colunas
DIALOG_STYLE_TABLIST_HEADERS Lista em colunas com cabeçalho

Exemplo: login

#define DIALOG_LOGIN 1

ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,
    "Login", "Digite sua senha para entrar:", "Entrar", "Sair");
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_LOGIN)
    {
        if (!response) return Kick(playerid);
        VerificarSenha(playerid, inputtext);
        return 1;
    }
    return 0;
}

Exemplo: loja com lista

#define DIALOG_LOJA 2

ShowPlayerDialog(playerid, DIALOG_LOJA, DIALOG_STYLE_TABLIST_HEADERS, "Loja",
    "Item\tPreço\nKit médico\t$500\nCelular\t$1200", "Comprar", "Fechar");

Em OnDialogResponse, use listitem para saber qual item foi escolhido — e busque o preço no servidor, nunca no texto.

Segurança: valide sempre

Clientes modificados podem enviar respostas de diálogos que não foram abertos ou com listitem fora do intervalo. Proteja-se:

  • Guarde qual diálogo o jogador tem aberto (DialogoAtual[playerid] = DIALOG_LOJA) e compare em OnDialogResponse;
  • Verifique se listitem está dentro do intervalo;
  • Trate inputtext como texto não confiável (tamanho, caracteres, SQL injection).

O open.mp traz melhorias nessa área, mas a validação no seu código continua importante.

Organize os IDs

Use enum ou #define com nomes claros e IDs únicos para evitar conflitos entre sistemas. Em gamemodes grandes, bibliotecas de diálogos com callbacks inline (como as do YSI) deixam o código mais limpo.

Hospede seu servidor com a VittHost

Nos planos OPENMP-BR da VittHost, seu gamemode roda em servidores no Brasil com proteção DDoS, painel Pterodactyl, 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