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 emOnDialogResponse; - Verifique se
listitemestá dentro do intervalo; - Trate
inputtextcomo 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.