OnDialogResponse PT

From SA-MP Wiki

Jump to: navigation, search


link= Esta callback foi adicionada no SA-MP 0.3 e não irá funcionar em versões anteriores!


Descrição:

Esta Callback é chamada quando um player responde a um dialog mostrado, usando ShowPlayerDialog clicando um botão, pressionar ENTER / ESC ou clicando duas vezes em um item da lista (se estiver usando um dialog de estilo lista [DIALOG_STYLE_LIST] ).


Parâmetros:
(playerid, dialogid, response, listitem, inputtext[])
playeridID do jogador que respondeu ao dialog.
dialogidID do dialog que o jogador respondeu, Definidas em ShowPlayerDialog.
response1 Para botão esquerdo e 0 para botão direito (Se usar somente um botão, sempre será 1)
listitemID do item da lista, selecionada pelo jogador (começa em 0) (somente se usar DIALOG_STYLE_LIST).
inputtext[]O texto digitado no dialog pelo jogador ou o texto do item da lista selecionado.


Valores de retorno:

Retornar 0 nesta callback vai passar o dialog para outro script caso nenhum código correspondente for encontrado.


Exemplo de uso:

DIALOG_STYLE_MSGBOX

// Define o ID do dialog
#define DIALOG_RULES 1
 
// Em algum comando
ShowPlayerDialog(playerid, DIALOG_RULES, DIALOG_STYLE_MSGBOX, "Regras", "- Sem cheater\n- Sem spam\n- Respeite os administradores\n\nVocê concorda com esta regras?", "Sim", "Não");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_RULES)
    {
        if(response) // Se clicou no botão 'Sim' ou apertou enter
        {
            SendClientMessage(playerid, COLOR_GREEN, "Obrigado por concordar com as regras do servidor!");
        }
        else // Caso pressione ESC ou click no botão 'Não'
        {
            KickWithMessage(playerid, COLOR_RED, "Você precisa concordar com as regras para jogar aqui!");
        }
        return 1; /
    }
 
    return 0; // Você precisa retornar 0 aqui! Assim como OnPlayerCommandText.
}

DIALOG_STYLE_INPUT/DIALOG_STYLE_PASSWORD

#define DIALOG_LOGIN 2
 
// Em algum comando
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor, insira sua senha:", "Login", "Cancelar");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_LOGIN)
    {
        if(!response) // Se pressionou ESC ou click no botão 'Cancelar'
        {
            KickWithMessage(playerid, COLOR_RED, "Você precisa se logar para jogar!");
        }
        else // Se clicou no botão 'Login' ou apertou enter
        {
            if(CheckPassword(playerid, inputtext)) // Função imaginaria para comparar a senha, se esta correta ou não.
            {
                SendClientMessage(playerid, COLOR_RED, "Você esta logado!");
            }
            else
            {
                SendClientMessage(playerid, COLOR_RED, "Falha no Login!");
 
                // Re-mostra o dialog de Login
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor, insira sua senha:", "Login", "Cancelar");
            }
        }
        return 1; // Lidamos com um dialog, então retornamos 1. Assim como OnPlayerCommandText.
    }
 
    return 0; // Você precisa retornar 0 aqui! Assim como OnPlayerCommandText.
}

DIALOG_STYLE_LIST

#define DIALOG_WEAPONS 3
 
// Em algum comando
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Armas", "Desert Eagle\nAK-47\nCombat Shotgun", "Selecionar", "Fechar");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_WEAPONS)
    {
        if(response) // Se clicou no botão 'Selecionar' ou apertou enter
        {
            // Dê a arma
            if(listitem == 0) // Caso selecione o primeiro item - Desert Eagle
            {
                GivePlayerWeapon(playerid, WEAPON_DEAGLE, 14);
            }
            if(listitem == 1) // Caso selecione o segundo item - AK-47
            {
                GivePlayerWeapon(playerid, WEAPON_AK47, 120);
            }
            if(listitem == 2) // Caso selecione o terceiro item - Combat Shotgun
            {
                GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28);
            }
        }
        return 1; // Lidamos com um dialog, então retornamos 1. Assim como OnPlayerCommandText.
    }
 
    return 0; // Você precisa retornar 0 aqui! Assim como OnPlayerCommandText.
}

Função KickWithMessage:

forward KickPublic(playerid);
public KickPublic(playerid) { Kick(playerid); }
 
stock KickWithMessage(playerid, color, message[])
{
    SendClientMessage(playerid, color, message);
    SetTimerEx("KickPublic", 1000, 0, "d", playerid);
}

Funções Relacionadas

As seguintes funções podem ser úteis, pois estão relacionadas a esta callback.

Personal tools