[Pedido] Timer No Dialog
#1

Como bloquear uma dialog por 5 segundos.

dialogs de tutorial
Reply
#2

Pode comeзar adicionando um prefixo ao seu tуpico. Depois disto, basta vocк utilizar SetTimerEx para chamar uma callback que contenha o dialog, logo apos o outro. Vocк pode usar uma mesma callback para todos os dialogs, basta passar uma variбvel como parвmetro.


Parabйns por adicionar o prefixo, a comunidade agradece. Caso nгo tenha compreendido muito bem, posso lhe dar um exemplo.
Reply
#3

Jб que vocк pediu por MP ajuda, veja este exemplo.

Quote:
Originally Posted by rjjj
Посмотреть сообщение
Vou ensinб-lo a base, depois dela voce saberб o que fazer:

Primeiro de tudo, coloque:

pawn Код:
//No Topo do GM:

new TutorialVariavel = 0;//Cria uma variбvel normalmente com valor "0", predefinido.


//Em algum lugar:
SetTimer("Tutorial", 1000, true);//Ativarб o timer, fazendo com que a funзгo seja executada a cada 1 segundo


//No Final do GM:
forward Tutorial();
public Tutorial()
{
    TutorialVariavel += 1;//Vai aumentar a variбvel (que й 0) em 1.
    if(TutorialVariavel == 60)//Checa se a variбvel estб com valor 60
    {
        //SendClientMessage etc aqui.
    }
    return 1;
}

Agora, й na lуgica.

Quando o timer й ativado ele vai fazer a callback(public e forward) serem executadas certo ?

Como o timer tem true, a callback ficarб sendo ativada sem parar, a cada 1 segundo (1000 que foi definido no parametro do SetTimer).


Mas, sabe a variбvel TutorialVariavel ?


Ela vai aumentar +1 toda vez que a callback for executada certo ?


Entгo podemos concluir que jб que a callback й executada a cada 1 segundo, a cada 1 segundo a variбvel vai ganhar +1 de valor.


Percebeu ? o if vai checar se a variбvel й 60, e ela sу vai ser 60 se tiver crescido 60 vezes (e pra isso teria que ter se passado 60 segundos, jб que a cada 1 segundo a variбvel cresce em 1).


Por fim, o if que checa 60 vai ter checado 1 minuto, um outro if que voce criasse de 120 seria 2 minutos etc.


E os intervalos em que a TutorialVariavel estaria crescendo pra entrar no prуximo if seria o intervalo entre as cenas do tutorial, viu como tudo tem sentido ?


Espero ter ajudado
Detalhes, crie um vetor para cada player.
Reply
#4

pawn Код:
//Quando o jogador registrar:


SetPVarInt(playerid, "Step", 0);
SendClientMessage(playerid, -1, "Vocк agora vai ver nosso tutorial");
new Timer = SetTimerEx("Tutorial", 10000, true, "d", playerid );
SetPVarInt(playerid, "Timer", Timer);

//Final do script

forward Tutorial(playerid);
public Tutorial(playerid)
{
    new step = GetPVarInt(playerid, "Step");
    switch(step)
    {
        case 0:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 1", "Esse й o primeiro passo do tutorial", "Ok", "" );
        }
        case 1:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 2", "Esse й o segundo passo do tutorial", "Ok", "" );
        }
        case 2:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 3", "Esse й o terceiro passo do tutorial", "Ok", "" );
        }
        default:
        {
            KillTimer(GetPVarInt(playerid, "Timer"));
            //Fim do tutorial
        }
        SetPVarInt(playerid, "Step", step + 1);
    }
    return 1;
}
Agora basta implementa-la.
Reply
#5

deu esses erros

pawn Код:
(16838) : error 002: only a single statement (or expression) can follow each "case"
(16838) : warning 215: expression has no effect
(16840) : error 010: invalid function or declaration

SetPVarInt(playerid, "Step", step + 1);//16838

return 1;  //16840
Reply
#6

Quote:
Originally Posted by Ivison
Посмотреть сообщение
deu esses erros

pawn Код:
(16838) : error 002: only a single statement (or expression) can follow each "case"
(16838) : warning 215: expression has no effect
(16840) : error 010: invalid function or declaration

SetPVarInt(playerid, "Step", step + 1);//16838

return 1;  //16840
Opa
pawn Код:
forward Tutorial(playerid);
public Tutorial(playerid)
{
    new step = GetPVarInt(playerid, "Step");
    switch(step)
    {
        case 0:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 1", "Esse й o primeiro passo do tutorial", "Ok", "" );
        }
        case 1:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 2", "Esse й o segundo passo do tutorial", "Ok", "" );
        }
        case 2:
        {
            ShowPlayerDialog(playerid, 5800, 0, "Tutorial - Parte 3", "Esse й o terceiro passo do tutorial", "Ok", "" );
        }
        default:
        {
            KillTimer(GetPVarInt(playerid, "Timer"));
            //Fim do tutorial
        }
    }
    SetPVarInt(playerid, "Step", step + 1);
    return 1;
}
Reply
#7

uma pergunta eu tenho varios dialog de tutorial tutorial 1 2 3 4 5 6 7 8 9 10 ja prontos la onde tem o 11 abaixo todos tem que ser 11 й?

pawn Код:
ShowPlayerDialog(playerid, 11, DIALOG_STYLE_MSGBOX,"Tutorial 02", "Aqui Vocк Pode Andar.", "Proximo","Sair");
Reply
#8

Como й apenas um dialog que nгo acarretara alguma aзгo, nгo й necessбrio um ID ъnico para ele. Veja que eu utilizei o mesmo ID para vбrios dialogs.
Reply
#9

Vocк pode me ajudar aqui onde й que eu estou errando

pawn Код:
//Acima Outros Com A Mesma funзгo de baixo pra outras orgs         
            if(listitem == 2)
            {

                PlayerInfo[playerid][pOrgs] = 5;

                new dialotut[8090];
               
                format(dialotut, sizeof(dialotut),"%s%s",dialotut,"Bem Vindo.........");
                ShowPlayerDialog(playerid,10, DIALOG_STYLE_MSGBOX, "Tutorial 01", dialogrande, "dialotut", "Cancelar");
                levelPm[playerid] = 1;
                PlayerInfo[playerid][pPm] = 1;
                SalvarPlayer(playerid);
               
            }
        }
        return 1;
    }


    SetPVarInt(playerid, "Step", 0);
    SendClientMessage(playerid, -1, "prosiga o tut");
    new Timer = SetTimerEx("Tutorial", 10000, true, "d", playerid );
    SetPVarInt(playerid, "Timer", Timer);

//quando acaba a dialogresponse


forward Tutorial(playerid);
public Tutorial(playerid)
{
    new step = GetPVarInt(playerid, "Step");
    switch(step)
    {
        case 0:
        {
            ShowPlayerDialog(playerid, 5800, 10, "Tutorial - Parte 2", "Esse й o primeiro passo do tutorial", "Ok", "" );
        }

        default:
        {
            KillTimer(GetPVarInt(playerid, "Timer"));
           
        }
    }
    SetPVarInt(playerid, "Step", step + 1);
    return 1;
}

nгo estou conseguindo fazer akele tutorial 1 se conerctar com o tutorial 2
Reply
#10

Vocк adiciona os novos eventos na callback Tutorial, nгo hб necessidade de alterar as outras.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)