SetTimer e SetTimerEx - Bбsico -
JonathanFeitosa - 12.01.2015
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(NomeFuncao, Tempo, Repetiзг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(NomeFuncao, Tempo, Repeticao, formato, {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", 10000, false);
// 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 i; i < MAX_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 i; i < MAX_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", 5000, true, "iif", playerid, Idade, PontosNaEscola);
return true;
}
forward CarregInfo(playerid, Idade, PontosNaEscola);
public CarregInfo(playerid, Idade, PontosNaEscola)
{
static StringJFS[70];
format(StringJFS, sizeof(StringJFS), "ID: %d | Idade: %d | PontosNaEscola %f", playerid , Idade, PontosNaEscola);
SendClientMessage(playerid, -1, StringJFS);
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.
Re: SetTimer e SetTimerEx - Bбsico -
GM_KoDi - 12.01.2015
Muito bem explicado e organizado em
JonathanFeitosa, parabйns pelo tutorial, vai ajudar muitos.
+REP
Re: SetTimer e SetTimerEx - Bбsico -
Adejair_Junior - 12.01.2015
Esta mais para cуdigo ъtil e praticamente tudo que esta digitado ai й facilmente encontrado na wiki e para conversгo de ms para segundos minutos horas, basta ter um cerebro e ter terminado a quinta sйrie
Re: SetTimer e SetTimerEx - Bбsico -
JonathanFeitosa - 12.01.2015
Quote:
Originally Posted by Adejair_Junior
Esta mais para cуdigo ъtil e praticamente tudo que esta digitado ai й facilmente encontrado na wiki e para conversгo de ms para segundos minutos horas, basta ter um cerebro e ter terminado a quinta sйrie
|
Quer um tutorial pra ti? Se quiser eu crio. Tenho vбrios sistemas aqui utilizando SetTimer(Ex). Desde sistemas de dominios(+63 dominios/57 teams/rank) atй sistema de nгo sei oq lб. Mas meu objetivo й dar conhecimento aos iniciantes do fуrum, por isso 'Bбsico' no tнtulo. Ou se vocк for iniciante e jб souber isso, me desculpa cara. Tem gente que ainda nгo sabia mesmo sendo considerado programador 'mйdio'. :/
Re: SetTimer e SetTimerEx - Bбsico -
Bieeel_Cwb - 12.01.2015
Bem explicado seu cotoco, ajudara muitos novatos...
abз
Re: SetTimer e SetTimerEx - Bбsico -
ZeZin - 12.01.2015
Nice me ajudara muito REP.
Re: SetTimer e SetTimerEx - Bбsico -
Artista - 12.01.2015
Muito bem explicado, parabйns.
Foi bem legal vocк ter introduzido o que й mito e conceito, para que os novatos nгo comecem com convicзхes erradas.
Re: SetTimer e SetTimerEx - Bбsico -
ReyMysterio - 12.01.2015
Excelente tutorial, parabйns.
Pede para o Input colocar na
[Quick-List] SA:MP Tutoriais
Re: SetTimer e SetTimerEx - Bбsico -
Nenzittow - 12.01.2015
Уtimo tutorial, parabйns!
Re: SetTimer e SetTimerEx - Bбsico -
DwScript - 12.01.2015
Belo tutorial Jonathan, Tirou grandes dъvidas minhas!
Jб que estou iniciando em Pawn.
Re: SetTimer e SetTimerEx - Bбsico -
Rodney Francalim - 12.01.2015
Quote:
Originally Posted by Adejair_Junior
Esta mais para cуdigo ъtil e praticamente tudo que esta digitado ai й facilmente encontrado na wiki e para conversгo de ms para segundos minutos horas, basta ter um cerebro e ter terminado a quinta sйrie
|
Nгo fala asneiras. Isso й um tutorial sim, e um tutorial bem explicado. Principalmente na parte das analogias.
Parabйns, JonathanFeitosa.
Re: SetTimer e SetTimerEx - Bбsico -
Dolpin - 13.01.2015
Tutorial й bom, mas o assunto й para realmente quem desceu de nнvel depois que entrou para uma certa equipe(Editora de GF).
Nгo venho difamar, mas desceu de nнvel, porйm o tutorial й bom, explicativo...
Re: SetTimer e SetTimerEx - Bбsico -
DanDRT - 13.01.2015
Quote:
Originally Posted by Dolpin
Tutorial й bom, mas o assunto й para realmente quem desceu de nнvel depois que entrou para uma certa equipe(Editora de GF).
Nгo venho difamar, mas desceu de nнvel, porйm o tutorial й bom, explicativo...
|
Й, uma 'Editora de GF' que mantem 500/500 diariamente
@Topic
Muito bem explicado, parabens
+= 2 Rep
Re: SetTimer e SetTimerEx - Bбsico -
JonathanFeitosa - 13.01.2015
Quote:
Originally Posted by Dolpin
Tutorial й bom, mas o assunto й para realmente quem desceu de nнvel depois que entrou para uma certa equipe(Editora de GF).
Nгo venho difamar, mas desceu de nнvel, porйm o tutorial й bom, explicativo...
|
Te garanto que a GT nгo usa nem strtok, muito menos GF. Servidor nem ao menos й RPG. Quem criou a base dele foi o Caio, Dev, Vini, Dan.
E sobre desceu de nнvel, vocк estб muito engano, quem estб lendo o tutorial estб ganhando mais conhecimentos. Vocк que desceu de nнvel lendo um assunto que "TALVEZ" vocк jб saiba.
Re: SetTimer e SetTimerEx - Bбsico -
Bieeel_Cwb - 13.01.2015
Quote:
Originally Posted by DanDRT
Й, uma 'Editora de GF' que mantem 500/500 diariamente
@Topic
Muito bem explicado, parabens
+= 2 Rep
|
mais a GT nгo editou o UGW? '-'
Re: SetTimer e SetTimerEx - Bбsico -
DanDRT - 13.01.2015
Quote:
Originally Posted by bielzera[:
mais a GT nгo editou o UGW? '-'
|
E saiu tudo que tinha lб, no ano passado, quando mudamos e tiramos alguns sistemas.
Re: SetTimer e SetTimerEx - Bбsico -
Dolpin - 13.01.2015
Quote:
Originally Posted by JonathanFeitosa
Te garanto que a GT nгo usa nem strtok, muito menos GF. Servidor nem ao menos й RPG. Quem criou a base dele foi o Caio, Dev, Vini, Dan.
E sobre desceu de nнvel, vocк estб muito engano, quem estб lendo o tutorial estб ganhando mais conhecimentos. Vocк que desceu de nнvel lendo um assunto que "TALVEZ" vocк jб saiba.
|
Uhm, eu penso vбrias coisas erradas mesmo, vocк й apenas um programador 'pawn'.
nгo usa strtok mas vive em manutenзгo bloqueando comandos, vive desbugando aquele Gamemode velho.
E te garanto mais ainda que foi Editado de algum gamemode, aliбs Empregos, Paydays, vбrios sistemas retirado de outro servidor.
E nгo sei se vocк jб viu o Gamemode, porйm te garanto que peguei uma casquinha e jб deu para ver como era(Ruim), e tambйm as manutenзхes acontecem e demoram muito tempo pois й grande de mais o Gamemode(Sinal nгo muito bom nй).
Desceu sim, 'SetTimer', Pensava que vocк era um garoto que progredia, mas nгo.
Aliбs vocкs estгo apenas defendendo porque й considerado o 'Scripter' de lб, parabйns sua vida de programador estб na frente!
Re: SetTimer e SetTimerEx - Bбsico -
WLSF - 13.01.2015
Gostaria de dizer que achei bacana da sua parte utilizar o ICMD nas amostras, realmente й algo positivo para quem usa, e me anima ver que estгo de acordo com isso.
Sobre essa discussгo acima, evitem isso, ele escolheu falar sobre SetTimer, entгo й problema dele. Eu mesmo, por exemplo, nгo sou muito chegado ao Jonathan, com tudo, tento manter a йtica e deixar esses comentбrios de fora.
Avaliem apenas a qualidade do tutorial.
Abraзos.
Re: SetTimer e SetTimerEx - Bбsico -
JonathanFeitosa - 13.01.2015
Quote:
Originally Posted by Dolpin
Uhm, eu penso vбrias coisas erradas mesmo, vocк й apenas um programador 'pawn'.
nгo usa strtok mas vive em manutenзгo bloqueando comandos, vive desbugando aquele Gamemode velho.
E te garanto mais ainda que foi Editado de algum gamemode, aliбs Empregos, Paydays, vбrios sistemas retirado de outro servidor.
E nгo sei se vocк jб viu o Gamemode, porйm te garanto que peguei uma casquinha e jб deu para ver como era(Ruim), e tambйm as manutenзхes acontecem e demoram muito tempo pois й grande de mais o Gamemode(Sinal nгo muito bom nй).
Desceu sim, 'SetTimer', Pensava que vocк era um garoto que progredia, mas nгo.
Aliбs vocкs estгo apenas defendendo porque й considerado o 'Scripter' de lб, parabйns sua vida de programador estб na frente!
|
Sobre a GT nгo vou falar nada cara sendo verdade ou nгo, esse tуpico que criei nгo foi pra isso.
Nгo vou perder meu tempo criando FS/GM bons e postando aqui. Postei meu FS de Login/Registro com Recuperaзгo via Email, vбrios svs usam e ninguйm bota crйditos, isso dar nojo.
Quote:
Originally Posted by Willian_Luigi
Gostaria de dizer que achei bacana da sua parte utilizar o ICMD nas amostras, realmente й algo positivo para quem usa, e me anima ver que estгo de acordo com isso.
Sobre essa discussгo acima, evitem isso, ele escolheu falar sobre SetTimer, entгo й problema dele. Eu mesmo, por exemplo, nгo sou muito chegado ao Jonathan, com tudo, tento manter a йtica e deixar esses comentбrios de fora.
Avaliem apenas a qualidade do tutorial.
Abraзos.
|
Valeu
Pessoal nгo tem o que falar, e leva pra "Caminho pessoal", sendo que nem conheзo essa pessoa '-'
Re: SetTimer e SetTimerEx - Bбsico -
humildadeforever - 13.01.2015
Parabйns, vocк conseguiu bastante conteъdo para explicar duas simples funзхes. Acho que poderia aproveitar o embalo e explicar outras formas de contagem utilizando variбvel + repetiзгo true + KillTimer.
Como por exemplo:
pawn Код:
new TimerCont;
new vContagem;
//
vContagem = 10;
TimerCont = SetTimer("Contando", 1000, true);
//
forward Contando()
public Contando()
{
vContagem --;
printf("%d segundos restantes.", vContagem);
if(vContagem < 1)
{
KillTimer(TimerCont);
}
return 1;
}