OnDialogResponse ES

From SA-MP Wiki

Jump to: navigation, search




Description:

Esta callback es llamada cuando un jugador responde a un diálogo (usando ShowPlayerDialog), ya sea por presionar un botón (button1 o button2), presionando ENTER/ESC o haciendo doble clic en un ítem (si el diálogo es estilo "lista").


Parámetros:
(playerid, dialogid, response, listitem, inputtext[])
playeridID del jugador que respondió al diálogo.
dialogidID del diálogo que fue respondido. Esta ID se asigna durante la creación del mismo con ShowPlayerDialog.
responseSi el botón presionado fue el primero (button1) ésto devolverá 1, caso contrario (button2) devolverá 0.
listitemID del ítem seleccionado.
inputtext[]El texto que ingresó el jugador en la caja del diálogo (si el diálogo era estilo DIALOG_STYLE_INPUT/PASSWORD)


Return Values:

Retornando 0 en esta callback, el diálogo pasará a otro script en caso de que no se encontrara ninguna ID que coincida con ésta (ID) dentro del callback de tu gamemode.


Ejemplo: (Cuando se tienen muy pocos diálogos)

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 4)
    {
        if(!response) return SendClientMessage(playerid, 0xFF0000FF, "Cancelado"); // Presionó el button2 (o ESC)
 
        new string[128];
        format(string, 128, "Seleccionaste el item %i de la lista", listitem);
        return SendClientMessage(playerid, 0xFFFF00FF, string);
    }
    return 0;
}

Ejemplo 2: (Cuando se tienen muchos diálogos)

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid) // "switch" es mucho más organizado y optimizado que usando muchas "if"s
    {
        case 1: // Diálogo cuya ID es 1 (usando DIALOG_STYLE_LIST)
        {
            if(!response) return SendClientMessage(playerid, 0xFF0000FF, "Cancelado");
            switch(listitem) // Buscamos el ítem seleccionado
            {
                case 0: // ítem 1
                {
                    // Lo que sucederá al seleccionar el 1º ítem del diálogo 1.
                }
                case 1: //item 2
                {
                    // Lo que sucederá al seleccionar el 2º ítem del diálogo 1.
                }
                case 2: //item 3
                {
                    // Lo que sucederá al seleccionar el 3º ítem del diálogo 1.
                }
                //Aca podemos continuar agregando más ítems, según lo que tenga el diálogo.
            }
        }
        case 2: // Diálogo cuya ID es 2 (usando DIALOG_STYLE_INPUT)
        {
            if(!response) return SendClientMessage(playerid, 0xFF0000FF, "Cancelado");
 
            new name[MAX_PLAYER_NAME], string[128];
            GetPlayerName(playerid, name, MAX_PLAYER_NAME);
            format(string, 128, "El jugador %s(%i) dice %s", name, playerid, inputtext);
            return SendClientMessageToAll(0x00FF00FF, string);
        }
        case 3: // Diálogo cuya ID es 3
        {
            if(!response) return SendClientMessage(playerid, 0xFF0000FF, "Cancelado");
            if(GetPlayerMoney(playerid) < 1000) return SendClientMessage(playerid, 0xFF0000FF, "Error: Necesitas $1000 para curarte.");
 
            SetPlayerHealth(playerid, 100);
            GivePlayerMoney(playerid, -1000);
            return SendClientMessage(playerid, 0x00FF00FF, "Server: Has sido curado.");
        }
        // Aquí podemos continuar agregando mas diálogos.
    }
    return 0; //Si retornas 1, el callback no seguirá siendo ejecutado en otros filterscripts.
}

Ten en cuenta que la ID del diálogo no depende de su estilo (DIALOG_STYLE_*).

Funciones relacionadas

Las siguientes funciones pueden ser útiles, ya que éstas están relacionadas con esta función de alguna u otra manera.