[Tutorial] Creando Dialogs bien Explicado
#1

Crear cuadros de diбlogo puede parecer bastante difнcil, aunque son en realidad bastante sencillo de hacer. Este breve tutorial te mostrarб cуmo hacer una lista de diбlogo. Este diбlogo es con fines de demostraciуn y serб bastante limitado.

Este tutorial Explicara Los 3 Sencillos Estilos de Dialogos , DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT y DIALOG_STYLE_LIST.


Primera Explicacion

Primero que Todo Vamos a Explicar la Funcion Del ShowPlayerDialog.
Vamos a Ver Cuales Son Los Parametros de Esta Funcion:

pawn Код:
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
Код:
playerid	La id Del Jugador al Que se le va a Mostrar.
dialogid	La id Del Dialogo Definida en Los "define".
style          El Estilo Del Dialogo	.
caption[]	El Titulo En La Parte Superior Del Dialogo .
info[]	        El Texto a Mostrar en el Dialogo. Usa \n Para Comenzar una Nueva Linea y \t Para tabular.
button1[]	El texto con el botуn izquierdo.
button2[]	El texto con el botуn Derecho.
LA Funcion Que se Le Regresara al Llamar la Funcion.

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Код:
playerid	La id Del Jugador al Que se le va a Mostrar.
dialogid	La id Del Dialogo Par que el Jugador Clickee la Funcion
response	boolean, true if first button was pressed, false if second button was pressed
listitem	Solo se usa en el DIALOG_STYLE_LIST .
inputtext[]	Solo se usa en el DIALOG_STYLE_INPUT, Es una Cadena De Entrada Con el Dialogo.
Bueno Listo Ahora Podemos Proceder
Dialogo Estilo Lista

En Primer lugar vamos a mostrar el cuadro de dialogo. Para eso nos Vamos a OnPlayerCommandText:

pawn Код:
if(!strcmp(cmdtext, "/bebidas", true))
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Que Desea ?", "Bebidas ($1)\nCerveza ($2)\nVino ($3)", "Comprar", "Cancelar");
  return 1;
}
Listo ya hemos creado el Comando y a la ves el cuadro de dialogo Ahora Tenemos que Configurar OnDialogResponse .

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)// Si se pulsa el primer botуn.
 {
switch(dialogid)// Si sуlo tiene un cuadro de diбlogo, entonces esto no es necesario, pero es mбs Organizado para cuando se implementan mбs cuadros de diбlogo.
{
case 1:// Nuestro dialogo
            {
            switch(listitem)// Comprueba Si a Sido Seleccionado
            {
                case 0:// El Primer Boton Incluido
                {
                    if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Usted No Tiene Suficiente Dinero Para pagar Esta Bebida!");//El GetPlayerMoney Significa que mira el Dinero al Jugador. <1 Esto Significa Que Debe Tener mas de  1 Dolar
                    GivePlayerMoney(playerid, -1);//El GivePLayerMoney -1 Significa Que le Quita 1 Dolar
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);// Esto es una animacion Despues les paso el link de las animaciones
                }
                case 1: // Esto es el segundo boton
                {
                    if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Usted No Tiene suficiente Dinero.");
                    GivePlayerMoney(playerid, -2);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
                }
                case 2: // El Tercer boton
                {
                    if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "No Tiene dinero Para Pagar Esta bebida");
                    GivePlayerMoney(playerid, -3);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
                }
            }
            }
    }
    }
    return 1;
}
Voy a explicar lo que esto hace, hay dos interruptores. Uno para el dialogid, y una para el listitem. La parte if en la parte superior que se necesita, de lo contrario no se comprueba que el botуn ha hecho click.


Tipo de Dialogo

Код:
MSGBOX
Este es sencillo es un cuadro con solo 2 botones de Por ejemplo Aceptar o Cancelar
vamos a OnPlayerCommandText.

pawn Код:
if(!strcmp(cmdtext, "/Dormir", true))
{
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Desea Dormir?", "Tienes Tiempo de Relajarte?", "Si", "No");//el 2 Se Define en #define 2
    return 1;
}
Esto le mostrara el dilogo

DIALOG_STYLE_MSGBOX.

Ahora Configuraremos la funcion con la que respondera

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)// Cuando pulsa el 1 Boton  
    {
    switch(dialogid)// Comprueba el cuadro de dialogo que usamos
        {
        case 1:// Nuestro primer dialogo
            {
            switch(listitem)// Comprueba de Que Fue elejido
            {
                case 0: // la Primera funcion
                {
                    if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Usted no Tiene Suficiente dinero.");
                    GivePlayerMoney(playerid, -1);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
                }
                case 1: // Segundo Boton
                {
                    if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Usted No Tiene suficiente dinero.");
                    GivePlayerMoney(playerid, -2);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
                }
                case 2: // Tercer boton
                {
                    if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "No tienes suficiente dinero.");
                    GivePlayerMoney(playerid, -3);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
                }
            }
            }
            //Apartir de Aca aсadiremos cosas
            case 2:// El nuevo dialogo
            {
                 ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);//Esto Aplicara la Animacion Durante 10 segundos
            }
            // Aca Termina
    }
    }
    return 1;
}
Explicaciуn:

Esto sуlo comprueba el dialogo, porque ya despues de comprobar si se pulsa el primer botуn que es 'sн', y luego se aplica la animaciуn de 10 segundos.


Input dialog

Este diбlogo tendrб una lнnea de entrada. (como su nombre lo indica). una Linea de Ejecucion

Vamos a hacer un chatdialog (lo que se escribe en el cuadro de diбlogo aparecerб en el chat).
Este Comando sera Creado con strcmp osea ira en la callback OnPlayerCommandText.

pawn Код:
if(!strcmp(cmdtext, "/saludar", true))
{
    ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Saluda", "Escriba Aca su Saludo.", "Aceptar", "Cancelar");
    return 1;
}
Vamos a Poner en Marcha el Comando ira

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)// Comprueba si se Pulsa Aceptar y Sigue:
    {
    switch(dialogid)//Si no esta en uso un cuadro de dialogo pero nunca se sabe
        {
        case 1:// Tu dialogo
            {
            switch(listitem)// Comprueba Que Fue Elejido
            {
                case 0: // El Primer Elemento
                {
                    if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Usted no tiene suficiente dinero .");
                    GivePlayerMoney(playerid, -1);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
                }
                case 1: // Segundo item
                {
                    if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Usted no tiene suficiente dinero ");
                    GivePlayerMoney(playerid, -2);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
                }
                case 2: // El Tercer Item de la Lista
                {
                    if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Usted no tiene suficiente dinero .");
                    GivePlayerMoney(playerid, -3);
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
                }
            }
            }
 
            case 2:// El Nuevo Dialogo
            {
                 ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);// Esto lo Relajara Durante 10 Segundos Osea Aplicara la Animacion.
            }
            // Nuestro Nuevo Dialogo
            case 3:
            {
                 if(strlen(inputtext) > 0)
                 {
                     SendPlayerMessageToAll(playerid, inputtext);
                 }
                 else
                 {
                     SendClientMessage(playerid,0xFFFFFFAA,"Su Mensaje fue Muy Corto");
                 }
            }
            // Aca terminamos.
    }
    }
    return 1;
}
Esto Imprimira el Mensaje Para Todos



Creditos

Tutorial creado originalmente por Calgon / FreddoX, pero las adiciones implementado por legodude.

Agregadas Nuevas Cosas Por mi Daniel Ruiz Y Hecho Para Forum Samp

Guia: Wiki-samp

Si ven Algun error Avisarme Recuerda Hacer Criticas CONSTRUCTIVAS .
Reply
#2

Te falto un estilo de dialog; DIALOG_STYLE_PASSWORD.

Reply
#3

Ok Lo Pondre
Reply
#4

Bien heco, Gracias Daniel
Reply
#5

Buen tutorial
Reply
#6

Ya que englobaste todos los diбlogos con if(response), no se podrнa hacer diбlogos que tengan una funciуn en el segundo botуn. Me gustу que haya hecho uso de la estructura switch.
Reply
#7

Gracias por sus Respuestas.

T1nCh010

Estoy analisando bien el Dialog Pasword Para No Publicar cosas incompletas o con Errores.
Reply
#8

Quote:
Originally Posted by Daniel_Ruiz
Посмотреть сообщение
Gracias por sus Respuestas.

T1nCh010

Estoy analisando bien el Dialog Pasword Para No Publicar cosas incompletas o con Errores.
Es exactamente igual al de INPUT solo que oculta el texto con ••••• dejandolo como password.
Reply
#9

Si ya lose sino que estoy tratando de crear un include que guarde claves al poner el codigo :P xD
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)