12.01.2015, 19:03
(
Последний раз редактировалось JonathanFeitosa; 10.07.2015 в 13:41.
)
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
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.
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:
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
Й 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
Outro exemplo muito conhecido, o sistema de payday:
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
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.
Agora que tal um sistema de carregar suas informaзхes simples?
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.
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.
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);
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,_}:...)
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
// [...]
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)
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;
}
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;
}
Bizuzinho do Jonathan
PHP код:
for(new i; i < MAX_PLAYERS; ++i)
{
SendClientMessage(i, -1, "Vocк recebeu o PayDay!");
}
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;
}
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;
}
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).