[Tutorial] SetTimer e SetTimerEx - Bбsico
#1

Como vejo muitas dificuldades nas diferenзas entre SetTimer e SetTimerEx, venho aqui trazer um tutorial simples para vocкs.

1. 'Mito'

De certeza vocк jб ouviu falar daquela expressгo: "SetTimer й para todos os jogadores e SetTimerEx й para cada um." Isso estб meio que errado. Nгo й pra isso que foi criado o SetTimer e SetTimerEx.

2. Conceito

Usamos SetTimer e SetTimerEx quando queremos chamar uma funзгo com atraso, ou seja, por um determinado tempo depois.

3. Diferenзa

SetTimer: Sem parametros.
SetTimerEx: Com parвmetros.

4. Explicaзгo e Exemplos de SetTimer e SetTimerEx

PHP код:
SetTimer(NomeFuncaoTempoRepetiзгo); 
NomeFuncao: Serб o nome de sua funзгo pъblica.
Tempo: O tempo de duraзгo que vocк quer chamar ela.
Repetiзгo: true = repetir sempre, false = apenas uma vez.

PHP код:
SetTimerEx(NomeFuncaoTempoRepeticaoformato, {Float,_}:...) 
NomeFuncao: Serб o nome de sua funзгo pъblica.
Tempo: O tempo de duraзгo que vocк quer chamar ela.
Repetiзгo: true = repetir sempre, false = apenas uma vez.
formato: tipos de valores.
{Float,_}:... : parвmetros (seguindo o formato definido anteriormente).

Atй agora, se vocк й iniciante, vocк provavelmente estб pensando: Eu nгo entendi nada!
Enfim, para isso estou aqui, vou explicar na sua experiкncia dia-dia.

Vamos imaginar na sua casa: O Microondas, vocк bota algo apenas para esquentar, programa ele pra 1 minuto e a contagem comeзa a descer atй chegar ao 0... ( porйm o SetTimer(Ex) й incrementando(subindo), e nгo descendo.

Outro exemplo: vocк estб brincando de esconde-esconde e tem que contar atй 10. Quando chegar ao 10, vocк jб pode procurar eles..
Isso й o SetTimer(Ex). Vocк faz um SetTimer que 'conte' atй 10, e quando chegar no 10, irб executar a funзгo de procurar eles.

Agora digamos que vocк tenha roubado e parou de contar antes dos 10 segundos. Nesse caso, utilizamos o KillTimer para parar o SetTimer(Ex)!

Esse й o conceito de SetTimer(Ex)... Ele vai atй onde vocк mandar!

Vamos a uns exemplos prбticos para entendermos melhor!

5.0 - Diminuindo tempo pensando em milissegundos.

O tempo do SetTimer(Ex) й feito em milissegundos. Ou Seja:

PHP код:
1 segundo 1000
60 segundos 
60000
// [...] 
Se vocк precisa de 2 minutos e 27 segundos por exemplo, sem gerador ou algo do tipo vocк teria que bater muita cabeзa atй conseguir. Para facilitar seu trabalho, iniciante, vocк bota isso no topo do seu GM/FS. Nгo me lembro do criador do code, mas vou deixar aqui os crйditos pro ******. Se alguem souber de quem criou isso, coloca nos comentбrios

PHP код:
#define minutos(%0) (1000 * %0 * 60)
#define horas(%0) (1000 * %0 * 60 * 60)
#define segundos(%0) (1000 * %0)
#define dias(%0) (1000 * %0 * 60 * 60  * 24)
#define semanas(%0) (1000 * %0 * 60 * 60  * 24 * 7)
#define meses(%0) (1000 * %0 * 60 * 60  * 24 * 30)
#define anos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12)
#define decadas(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10)
#define seculos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10 * 10) 
Й claro que vocк nгo usaria pra dias, semanas, meses, anos, dйcada e muito menos seculos. Para isso usamos GetTimer, mas fica pra outra explicaзгo.
Agora sim! Com esse code definido, fica muito mais fбcil trabalharmos! Vamos ver na prбtica.

6.0 - Mгo na massa

Como ficaria o exemplo: "Vocк estб brincando de esconde-esconde e tem que contar atй 10. Quando chegar ao 10, vocк jб pode procurar eles.." na prбtica?


6.1 - SetTimer

PHP код:
SetTimer("Contando"segundos(10), false);
// Veja como ficou mais fбcil definir o tempo. Mas vocк tambйm pode optar pelo normal:
SetTimer("Contando"10000false);
// Ele cria uma funзгo contando 10 segundos sem repetiзгo!
// Como SetTimer nгo tem parametro, nunca passamos valor para ela. Sempre utilizaremos ( ).
forward Contando();
public 
Contando()  // Quando completar os 10 segundos, funciona a callback.
{
    print(
"Contei atй 10 segundos ! Agora posso comeзar a procurar!");
    return 
true;

Outro exemplo muito conhecido, o sistema de payday:

PHP код:
public OnGameModeInit()
{
    
SetTimer("PayDay"horas(1), true);
/* Criamos um Timer com o nome da funзгo PayDay
Ele irб contar atй 1 hora.
/ true = ele irб se repetir depois de terminar. ( voltarб a funcionar sozinho ).*/
    
return true;
}
forward PayDay();
public 
PayDay() // Quando completar as 1 hora, funciona a Callback:
{
    for(new 
iMAX_PLAYERS; ++i// Loop - Todos os Players
    
{
        
// Mensagem para todos os players.
        
SendClientMessage(i, -1"Vocк recebeu o PayDay!");
    }
    return 
true;

Realmente, SetTimer poderia ser para todos os players(usando loop). Mas nгo й isso o conceito dela. Ela vai muito alйm disso, como utilizar pra sistema de salvamentos ou outras coisas.

Bizuzinho do Jonathan

PHP код:
for(new iMAX_PLAYERS; ++i)
{
    
SendClientMessage(i, -1"Vocк recebeu o PayDay!");

Para quem nгo entendeu isso, peзo para que leia os tutoriais de Loop.
MAX_PLAYERS definido por padrгo й 500... Ou seja vai pegar 500 nъmeros que sгo os slots. Atй aqui tudo bem. Mas porque trocou no meu SendClientMessage playerid por i ?

playerid = ID DO PLAYER! LEMBREM-SE DISSO!

O Loop, portanto, vai dar 500 voltas... e vai mandar para todos os ID's.
O ID 0 que й o Fulano com Nick A...
Pro ID 1 que й o Fulano com Nick B...
Assim vai atй os 500 players(slots).


6.2 - SetTimerEx


Existem vбrios exemplos. Mais vou dar apenas dois.

Esse, й um simples bloqueio de comando. Depois de usar, ele permitirб que vocк utilize o comando de novo sу depois de 15 segundos.

PHP код:
new bool:BloquearComando[MAX_PLAYERS char];
get_cmd_noparams(bloquearcomando// ICMD ( mesma coisa que /bloquearcomando )
{
    if(
BloquearComando{playerid} == true)
        return 
SendClientMessage(playerid, -1"Vocк jб utilizou o comando! Aguarde 15 segundos para utlizar de novo.");
    
BloquearComando{playerid} = true;
    
SetTimerEx("BloqComando"segundos(15), false"i"playerid);
    
// Ele irб criar uma funзгo de 15 segundos e nгo vai ficar se repetindo.
    // Como eu falei no meu BIZU: playerid carrega o ID do Player. Ele vai levar o ID do player para a funзгo.
    
SendClientMessage(playerid, -1"Vocк Utilizou o Comando: /BloquearComando");
     return 
true;
}
forward BloqComando(playerid);
public 
BloqComando(playerid// playerid CARREGA O ID DO PLAYER !
{
    
BloquearComando{playerid} = false;
    
SendClientMessage(playerid, -1"Jб se passou 15 segundos! Agora vocк jб pode utilizar o comando!");
    return 
true;

Agora que tal um sistema de carregar suas informaзхes simples?

PHP код:
get_cmd_noparams(minhasinfo// ICMD ( mesma coisa que /minhasinfo )
{
    new 
Idade 18;
    new 
Float:PontosNaEscola 9.0;
    
// playerid = seu ID
     
SetTimerEx("CarregInfo"5000true"iif"playeridIdadePontosNaEscola);
    return 
true;
}
forward CarregInfo(playeridIdadePontosNaEscola);
public 
CarregInfo(playeridIdadePontosNaEscola
{
    static 
StringJFS[70];
    
format(StringJFSsizeof(StringJFS), "ID: %d | Idade: %d | PontosNaEscola %f"playerid IdadePontosNaEscola);
    
SendClientMessage(playerid, -1StringJFS);
    return 
true;

7.0 - Lembretes e informaзхes importвntes

Temporizadores nгo sгo 100% precisos e sim 75%;
Uso de muitos temporizadores aumentarб o uso de Memуria/CPU.
Lembrando daqueles "i", "iif", etc.. Sugiro ver melhor os tutoriais de Format https://sampwiki.blast.hk/wiki/Format.
Код:
i	Integer.
d	Integer.
a	Array. The next parameter must be an integer ("i") with the array's size. [CURRENTLY UNUSABLE]
s	String. [CURRENTLY UNUSABLE]
f	Float.
b	Boolean (true/false).
Foi isso que deu pra fazer nesse frio e com esse sono, erros de conceitos, portuguкs, cуdigos... basta comentar, eu fiz sem testar.
Reply


Messages In This Thread
SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 12.01.2015, 19:03
Re: SetTimer e SetTimerEx - Bбsico - by GM_KoDi - 12.01.2015, 19:14
Re: SetTimer e SetTimerEx - Bбsico - by Adejair_Junior - 12.01.2015, 19:24
Re: SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 12.01.2015, 19:29
Re: SetTimer e SetTimerEx - Bбsico - by Bieeel_Cwb - 12.01.2015, 19:40
Re: SetTimer e SetTimerEx - Bбsico - by ZeZin - 12.01.2015, 19:55
Re: SetTimer e SetTimerEx - Bбsico - by Artista - 12.01.2015, 20:52
Re: SetTimer e SetTimerEx - Bбsico - by ReyMysterio - 12.01.2015, 21:05
Re: SetTimer e SetTimerEx - Bбsico - by Nenzittow - 12.01.2015, 21:57
Re: SetTimer e SetTimerEx - Bбsico - by DwScript - 12.01.2015, 23:22
Re: SetTimer e SetTimerEx - Bбsico - by Rodney Francalim - 12.01.2015, 23:36
Re: SetTimer e SetTimerEx - Bбsico - by Dolpin - 13.01.2015, 00:50
Re: SetTimer e SetTimerEx - Bбsico - by DanDRT - 13.01.2015, 01:05
Re: SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 13.01.2015, 01:23
Re: SetTimer e SetTimerEx - Bбsico - by Bieeel_Cwb - 13.01.2015, 01:24
Re: SetTimer e SetTimerEx - Bбsico - by DanDRT - 13.01.2015, 01:37
Re: SetTimer e SetTimerEx - Bбsico - by Dolpin - 13.01.2015, 17:43
Re: SetTimer e SetTimerEx - Bбsico - by WLSF - 13.01.2015, 17:52
Re: SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 13.01.2015, 18:03
Re: SetTimer e SetTimerEx - Bбsico - by humildadeforever - 13.01.2015, 20:29
Re: SetTimer e SetTimerEx - Bбsico - by Rodney Francalim - 13.02.2015, 23:30
Re: SetTimer e SetTimerEx - Bбsico - by ClaudioF - 14.02.2015, 00:15
Re: SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 14.02.2015, 02:29
Re: SetTimer e SetTimerEx - Bбsico - by AlucardSnow - 14.02.2015, 02:51
Re: SetTimer e SetTimerEx - Bбsico - by JonathanFeitosa - 14.02.2015, 03:02
Re: SetTimer e SetTimerEx - Bбsico - by LockedLucas - 05.05.2015, 12:52
Re: SetTimer e SetTimerEx - Bбsico - by matheusspohr - 05.05.2015, 18:49
Re: SetTimer e SetTimerEx - Bбsico - by JkS - 05.05.2015, 20:39
Re: SetTimer e SetTimerEx - Bбsico - by #Coringa - 06.05.2015, 13:52
Re: SetTimer e SetTimerEx - Bбsico - by Estratosfera - 02.11.2016, 20:10
Re: SetTimer e SetTimerEx - Bбsico - by TIAGOO - 28.04.2018, 16:02
Re: SetTimer e SetTimerEx - Bбsico - by Minerva - 30.04.2018, 21:21

Forum Jump:


Users browsing this thread: 2 Guest(s)