Portal SAMP
[Include] e_dialog - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] e_dialog (/showthread.php?tid=2586)



e_dialog - Dr Editor - 21/07/2022

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
  1. Informações podem ser facilmente verificadas antes de ser entregues ao jogador
  • Proteção contra cheat
  1. Respostas de caixas de diálogo só são possíveis se forem chamadas via server-side
  2. Caixas de diálogo chamadas via cheat mesmo que abertas não terão efeito de resposta
  • Mais rápido e organizado
  1. Caixas de diálogo são identificadas por nome (callback de resposta) e não mais ID
  2. Problemas com hook ou má verificação na callback OnDialogResponse não é mais problema
  3. As respostas das caixas de diálogo podem ser criadas próximo ao código que as chamou
  • Compatibilidade
  1. Opção de hook para facilitar uso da include substituindo o ID pela callback de resposta
    Código:
    #define E_DIALOG_HOOK false

  2. 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
  1. Possibilidade de saber qual caixa de diálogo foi aberta
  2. Possibilidade de saber quando e qual foi a última caixa de diálogo fechada e o tempo em que ficou aberta
  3. Possibilidade de saber se o jogador possui uma caixa de diálogo (e_dialog) ativa
  4. Possibilidade de saber o nome (callback de resposta) da caixa de diálogo (e_dialog) ativa do jogador
  5. Possibilidade de saber o nome (callback de resposta) da última caixa de diálogo (e_dialog) aberta do jogador
  6. 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


RE: e_dialog - MarcosBrazz - 21/07/2022

Show de Bola, muito útil!


RE: e_dialog - xbruno1000x - 21/07/2022

Muito boa contribuição! +REP