21/07/2022 14:45
(Esta mensagem foi modificada pela última vez a: 21/07/2022 14:48 por Dr Editor.)
E_Dialog
Há um bom tempo estava desenvolvendo esta include para um projeto pessoal e decidi publicá-la.
Sei que há outra(s) include(s) parecida(s), mas decidi criar a minha própria, pois sempre surgem novas ideias e novas implementações e não gosto de mexer em bibliotecas de terceiros.
A propósito: nunca usei este tipo de biblioteca para gerenciar caixas de diálogo, pois nunca tinha tarabalhado (até então) com a função de diálogos em massa
Por que usar?
- Proteção contra crash
- Informações podem ser facilmente verificadas antes de ser entregues ao jogador
- Proteção contra cheat
- Respostas de caixas de diálogo só são possíveis se forem chamadas via server-side
- Caixas de diálogo chamadas via cheat mesmo que abertas não terão efeito de resposta
- Mais rápido e organizado
- Caixas de diálogo são identificadas por nome (callback de resposta) e não mais ID
- Problemas com hook ou má verificação na callback OnDialogResponse não é mais problema
- As respostas das caixas de diálogo podem ser criadas próximo ao código que as chamou
- Compatibilidade
- Opção de hook para facilitar uso da include substituindo o ID pela callback de resposta
Código:#define E_DIALOG_HOOK false
- Pode ser usado em conjunto com a função nativa sem interferências com a mesma (apenas não usar o mesmo ID da include)
Código:#define E_DIALOG_ID 32760
- Funcionalidade extendida
- Possibilidade de saber qual caixa de diálogo foi aberta
- Possibilidade de saber quando e qual foi a última caixa de diálogo fechada e o tempo em que ficou aberta
- Possibilidade de saber se o jogador possui uma caixa de diálogo (e_dialog) ativa
- Possibilidade de saber o nome (callback de resposta) da caixa de diálogo (e_dialog) ativa do jogador
- Possibilidade de saber o nome (callback de resposta) da última caixa de diálogo (e_dialog) aberta do jogador
- Possibilidade de abrir a última caixa de diálogo (e_dialog) do jogador sem precisar preencher os dados da caixa novamente
Callback's:
Chamada quando o jogador abre uma caixa de diálogo.
Código:
OnOpenPlayerDialog(playerid, response_callback[])
Chamada quando o jogador fecha a última caixa de diálogo informando o tempo em que ela permaneceu aberta.
Código:
OnClosePlayerDialog(playerid, response_callback[], delay)
Funções:
Abre uma nova caixa de diálogo.
Código:
// Hook
ShowPlayerDialog(playerid, const response_callback[], style, const caption[], const info[], const button1[], const button2[])
// Sem hook
ShowDialogForPlayer(playerid, style, const caption[], const info[], const button1[], const button2[], const response_callback[])
Retorna se o jogador possui uma caixa de diálogo (e_dialog) ativa.
Código:
HasPlayerOpenDialog(playerid)
Retorna o nome da callback de resposta da caixa de diálogo (e_dialog) ativa.
Código:
GetPlayerDialogResponseName(playerid)
Retorna o nome da callback de resposta da ultima caixa de diálogo (e_dialog).
Código:
GetPlayerLastDialogResponseName(playerid)
Força a chamada da função "OnClosePlayerDialog" e remove o suporte a respostas da caixa de diálogo aberta.
Código:
ClosePlayerDialog(playerid, bool:blank_dialog = false)
Abre a última caixa de diálogo fechada.
Código:
OpenLastPlayerDialog(playerid)
Uso:
Código:
// Opção sem hook
ShowDialogForPlayer(playerid, DIALOG_STYLE_MSGBOX, "Opções", "Selecione uma opção:", "Sim", "Não", "DialogoOpcaoSimNao");
// Opção com hook
ShowPlayerDialog(playerid, "DialogoOpcaoSimNao", DIALOG_STYLE_MSGBOX, "Opções", "Selecione uma opção:", "Sim", "Não");
forward DialogoOpcaoSimNao(playerid, response, listitem, inputtext[]);
public DialogoOpcaoSimNao(playerid, response, listitem, inputtext[])
{
return true;
}
Download:
e_dialog.inc
Créditos:
Eduardo AC © 2022
SA:MP Dev Tools
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140