Salve, in questa guida vi spiegherò come meglio potrò come utilizzare i timer su sa-mp.
Ci sono 2 diversi tipi di timer
• Il SetTimerEx: la sua struttura si presenta così:
Codice:
SetTImerEx(funzione, intervallo, variabile booleana, formato variabile, parametri)
La Funzione: consiste nel nome del callback o della funzione che dovrà far funzionare il timer.
L'Intervallo: è settato in ms (millisecondi) e serve ad indicare dopo quanto dovrà agire la funzione, o se la variabile booleana sarà settata a true, indica ogni quanto agirà la funzione
La Variabile Booleana: serve ad indicare se il timer dovrà ripetersi o meno
Il formato variabile: serve ad indicare che tipo di variabile si andrà ad utilizzare nel timer, esistono 6 diversi tipi di variabili:
Formati i e d, servono per timer con variabili integer (con numeri interi)
Formato a, serve a creare un timer con variabili in array
Formato s, serve a creare un timer con variabili string per le stringhe di testo
Formato f, serve a creare un timer con variabili float (con numeri decimali)
Formato b, serve a creare un timer con variabili booleane (variabili che possono assumere 2 valori
true o
false)
Parametri: infine ci sono i parametri che servono a specificare il timer, esempio:
Codice:
forward vita(playerid);
public vita(playerid)
{
SetPlayerHealth(playerid, 250);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/vita", cmdtext, true) == 0)
{
SetTimerEx("vita", 500, true, "d", playerid);
return 1;
}
return 0;
}
In questo caso abbiamo creato un timer che setta la vita a 250 HP, ogni 500ms(che equivalgono a mezzo secondo), si ripete (notare la variabile booleana settata a true), e con il parametro settato per il player che digiterà il comando (playerid)
• Il SetTimer: questo timer a differenza del SetTimerEx ha molti meno parametri da settare e la sua struttura si presenterà più semplice:
Codice:
SetTimer(funzione, intervallo, variabile booleana)
La Funzione: consiste nel nome del callback o della funzione che dovrà far funzionare il timer.
L'Intervallo: è settato in ms (millisecondi) e serve ad indicare dopo quanto dovrà agire la funzione, o se la variabile booleana sarà a true, indica ogni quanto agirà la funzione
La Variabile Booleana: serve ad indicare se il timer dovrà ripetersi o meno.
Presenta questi 3 parametri da settare che hanno lo stesso significato del SetTimerEx.
Esempio:
Codice:
forward vita(playerid);
public vita(playerid)
{
SetPlayerHealth(playerid, 250);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/vita", cmdtext, true) == 0)
{
SetTimer("vita", 500, true);
return 1;
}
return 0;
}
Bene, a questo punto avrete settato il vostro timer, scegliendo il SetTimerEx o il SetTimer più semplice, ora avrete bisogno sicuramente anche di un modo con cui stoppare il timer, per farlo dovrete utilizzare la funzione
• KillTimer: questa funzione nativa serve a stoppare il timer da voi startato prima, la struttura del KillTimer si presenta così:
Codice:
KillTimer(timerid)
Il timerid: sarà la variabile da voi assegnata al timer
Per poterlo utilizzare dovrete assegnare una variabile al vostro SetTimer/SetTimerEx, esempio:
Codice:
//in Alto
new timerVita[MAX_PLAYERS];
//CallBack
forward vita(playerid);
public vita(playerid)
{
SetPlayerHealth(playerid, 250);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/vita", cmdtext, true) == 0)
{
timerVita[playerid] = SetTimer("vita", 500, true);
return 1;
}
if (strcmp("/vitaoff", cmdtext, true) == 0)
{
KillTimer(timerVita[playerid]);
return 1;
}
return 0;
}
A questo punto facendo /vitaoff avrete "killato" (stoppato) il vostro timer e potrete subire danni senza che il timer ricarichi la vita,
i timers possono essere killati o risettati infinite volte.
N.B: se nella vostra GameMode utilizzerete molti timers con intervalli di pochi millisecondi, il vostro server laggherà.
Guida creata da: Alby Fire
Spero che sarà di aiuto a qualcuno che vorrà imparare l'uso e la sintassi dei timer

.
I commenti sono ben accetti, non lo sono i "facepalm" o altri commenti e faccine sgradevoli, se nella guida ho commesso qualche errore o dimenticato qualcosa di cruciale, scrivetelo sotto e lo aggiungerò personalmente.
Alla prossima
