SetTimer SetTimerEx
#include <a_samp>
/* Exemplo */
public OnFilterScriptInit()
{
LoopingEx("Exemplo", 0, 10, 20, 2000);
/*
Irб chamar a callback Exemplo em 2 em 2 segundos (2000 MS)
*/
return 1;
}
forward Exemplo();
public Exemplo()
{
static
VezesChamadas;
VezesChamadas ++;
printf("%d", VezesChamadas);
return false;
}
/* Funзгo */
new
StopLooping;
stock LoopingEx(Callback[], paramsCall, NumInicial, NumFinal, Delay){
KillTimer(StopLooping);
StopLooping = SetTimerEx("Filtro", Delay, true, "sddd", Callback,paramsCall, NumInicial, NumFinal);
}
forward Filtro(Callback[], paramsCall, NumInicial, NumFinal);
public Filtro(Callback[], paramsCall, NumInicial, NumFinal)
{
static
func[30],
NumRodando,
bool:AntiBug;
if(AntiBug) { AntiBug = true; NumRodando = NumInicial; }
NumRodando ++;
if(NumRodando >= NumFinal) { KillTimer(StopLooping); NumRodando = 0; AntiBug = false; return true; }
format(func, sizeof func, "%s", Callback);
CallLocalFunction(func, "d", paramsCall);
return false;
}
Fiz um pra vocк:
PHP код:
Funзгo: LoopingEx(Callback[], paramsCall, NumInicial, NumFinal, Delay) |
forward LoopFunc(callback[], from, to, order, interval);
public LoopFunc(callback[], from, to, order, interval)
{
static cbck[30];
format(cbck, sizeof(cbck), "%s", callback);
if(CallLocalFunction(cbck, "d", from) == 0) return 0;
if((order < 0) ? (to >= from) : (from >= to)) return 0;
SetTimerEx("LoopFunc", interval, false, "sdddd", cbck, (order < 0) ? (from-1) : (from+1), to, order, interval);
return 1;
}
//Exemplo 01 (i--)
LoopFunc("Exemplo", 5, 0, -1, 1000); //loop do nъmero 5 ao 0 com delay de 1000ms a cada iteraзгo
//Exemplo 02 (i++)
LoopFunc("Exemplo", 0, 5, 1, 1000); //loop do nъmero 0 ao 5 com delay de 1000ms a cada iteraзгo
forward Exemplo(i);
public Exemplo(i)
{
printf("%d", i);
return 1;
}
/*--------------------------------------------------------------------------------
no inicio do gamemode */
#include <a_samp>
#include <ZCMD>
#include <SSCANF>
//------------------------------------------------------------------------------
new
CriarTime[MAX_PLAYERS],
TimeEmAndamento[MAX_PLAYERS]
;
CMD:loopplayer(playerid, params[])
{
if(TimeEmAndamento[playerid] == 1)
{
KillTimer(CriarTime[playerid]);
TimeEmAndamento[playerid] = 0;
SendClientMessage(playerid, -1, "Funзгo cancelada(finalizada).");
return 1;
}
new
FUNCOES[30],
ID,
PARAMETRO_1,
TIMER,
REPEAT
;
if(sscanf(params, "sdddd",FUNCOES, ID, PARAMETRO_1, TIMER, REPEAT))
return SendClientMessage(playerid, -1, "Use: /loop [nome-da-public] [player] [parвmetro1] [segundos] [repetiзгo 0 = off | 1 = on]");
if(REPEAT > 1 || REPEAT < 0)
return SendClientMessage(playerid, -1, "[ repetiзгo > 0 = off/ 1 = on ]");
new
nomeplayer[25],
nomefuncao[50],
corpomsg[128],
DefinirDepeticao[2][13] = {"sem repetзгo", "com repetзгo"}
;
GetPlayerName(ID, nomeplayer, 25)
;
format(corpomsg, sizeof corpomsg,"Voce usou %s %d em %s, daqui a % segundos %s", nomefuncao, PARAMETRO_1, nomeplayer, TIMER, DefinirDepeticao[REPEAT]);
SendClientMessage(playerid, -1, corpomsg);
format(nomefuncao, sizeof nomefuncao, "%s", FUNCOES);
CriarTime[playerid] = SetTimerEx(nomefuncao, TIMER*1000, REPEAT, "id", ID, PARAMETRO_1);
TimeEmAndamento[playerid] = 1;
return true;
}