02.08.2013, 19:31
Cum sa creezi un timer.
M-am gandit sa creez un tutorial pentru incepatori, care, cred eu ii va ajuta foarte multe pe viitor.
Pentru inceput sa va explic din ce este compus SetTimer:
pawn Код:
SetTimer("message", 1000, false);
* 1000 = reprezinta cat timp trebuie sa se 'scurga' pentru a actiona publicul "message".
ATENTIE! Timpul se masoara in milisecunde NU secunde! 1 secunda = 1000 milisecunde.
* false = in acest caz, false inseamna ca timerul nu se repeta, daca era true, publicul "message" se declansa de fiecare data cand timerul termina numaratoarea.
Pana aici nu cred ca exista nelamuriri. Sa trecem mai departe cu tipurile de timere!
1. Timerul care se creeaza odata cu pornirea serverului fara a fi declansat de o comanda de catre player. Sa va explic cum il creăm.
Pentru inceput , il definim pentru a-l putea distruge.
pawn Код:
new NumeTimer;
Pasul urmator, il adaugam in OnGameModeInit:
pawn Код:
NumeTimer = SetTimer("message", 4000, false);
pawn Код:
NumeTimer = SetTimer("message", 4000, true);
Urmatorul pas este de a creea publicul "message":
pawn Код:
forward message();
public message()
{
//Actiune dvs. , in acest caz pun doar un simplu SendClientMessage();
foreach(Player, i)
SendClientMessage(i,-1,"Timer Actionat!");
}
return 1;
}
Si ultima parte, distrugerea acestuia:
pawn Код:
KillTimer(NumeTimer);
2. Timerul care nu se repeta si este actionat fie de OnPlayerConnect , fie de o comanda.
Pasul 1. Il definim pentru a-l putea distruge la un moment dat!
pawn Код:
new NumeTimer2[MAX_PLAYERS];
Daca vrem sa se declanseze cand playerul se connecteaza , adaugam la OnPlayerConnect:
pawn Код:
NumeTimer2[playerid] = SetTimerEx("ActiuneTimer", 5000, false, "i", playerid);
Iar daca vrem sa il facem sa se actioneze prin comanda, pur si simplu, adaugam in interiorii comenzii:
pawn Код:
NumeTimer2[playerid] = SetTimerEx("ActiuneTimer", 5000, false, "i", playerid);
pawn Код:
forward ActiuneTimer(playerid);
public ActiuneTimer(playerid)
{
SendClientMessage(playerid,-1,"Tocmai s-a declasat timerul!");
return 1;
}
Adaugam la OnPlayerDisconnect:
pawn Код:
KillTimer(NumeTimer2[playerid]);
3. Timerul ce se repeta si este actionat fie de OnPlayerConnect, fie de o comanda.
Pasul 1. Este acelasi lucru ca cel de la timerul care nu se repeta.
Pasul 2. Il cream:
Daca vrem sa se declanseze cand playerul se connecteaza si sa se repete pana cand iese, adaugam la OnPlayerConnect:
pawn Код:
NumeTimer2[playerid] = SetTimerEx("ActiuneTimer", 5000, true, "i", playerid);
Iar daca vrem sa il facem sa se actioneze prin comanda, pur si simplu, adaugam in interiorul comenzii:
pawn Код:
NumeTimer2[playerid] = SetTimerEx("ActiuneTimer", 5000, true, "i", playerid);
Pasul 3. Crearea publicului "ActiuneTimer":
pawn Код:
forward ActiuneTimer(playerid);
public ActiuneTimer(playerid)
{
SendClientMessage(playerid,-1,"Timerul este setat sa se repete!");
return 1;
}
Pasul 4. Distrugerea acestuia:
1. Adaugam la OnPlayerDisconnect in caz ca timerul inca ruleaza:
pawn Код:
KillTimer(NumeTimer2[playerid]);
Ex: Daca timerul este setat sa actioneze cat playerul este in viata, adaugam SetTimerEx, la OnPlayerSpawn si KillTimer la OnPlayerDeath.
------------------------------------------------------------------------------------------------------
ATENTIE!
Ce am pus eu NumeTimer si NumeTimer2 sunt doar exemple, voi le puteti numi si altfel, cu conditia sa respectati ce am scris mai sus.
NU trebuie sa existe 2 timere cu aceasi definitie, adica 2 timere de genu:
NumeTimer = SetTimerEx(...false);
NumeTimer = SetTimerEx(...true);
Repet! Timerele masoara timpul in MILISECUNDE nu secunde! Cum faceti din secunde/minute/ore in milisecunde? Simplu, www.gugăl.ro -> seconds to miliseconds.
Sper ca am fost destul de explicit, succes!