Jump to content

návod Timer


Guest Mort

Recommended Posts

TIMER

 

Obtížnost: 2 / 5

 

Obsah

  • Co je to timer
  • Kde se dá využít
  • Rozdělení
  • Teorie SetTimer
  • Teorie SetTimerEx


 

 

Co je to timer

 

Timer (z ang. ,,časovač") jak už napovídá název je funkce, která podle časových úseků vyvolává nějaký callback.

 

Kde se dá využít

 

Říká se, že každý správný mód má svůj ,,sekundový timer". Ve většině je tomu tak, je to proto, že některou funkci prostě potřebujete vyvolávat za dobu zapnutého serveru. Mluvím o věcech které být nemusí (př. Tachometr).

Samozřejmě, timery se dají využít třeba i při závodech. Když jsou závody, tak se nám zobrazuje časovač který nám vypisuje 3,2,1,START. To vše má na svědomí timer, aneb pokud by jsme neměli timer, nemohli by jsme dělat tyto super věci.

 

Rozdělení

 

Máme celkem dvě funkce pro vyvolání timeru. SetTimer a SetTimerEx.

SetTimer nám odesílá prázdné parametry funkce, proto je méně zátěžový.

SetTimerEx nám ale dokáže hodnoty parametrů odeslat.

 

Teorie SetTimer

 

Zjistili jsme, že SetTimer nám odesílá prázdné parametry funkce. Ale co si pod tímto pojmem přestavit? Jednoduše, když vytvoříme callback (public), automaticky se všechny parametry které do něj vložíme mají hodnotu 0 (tedy pokud je nenastavíme). SetTimer nic nemění, odešle funkci tak jak je, jen provede kód uvnitř svorek { }.

SetTimer vkládáme nejčastěji do OnGameModeInit().

 

Parametry SetTimer:

funcname[],interval,bool:repeating

 

funcname[] - jméno publicu, který chceme vyvolat. Vždy zadáváme přesný název publicu

interval - interval opakování v milisekundách (ms). (1000ms = 1s)

bool:repeating - boolean má pouze dvě hodnoty - true & false ( 1 & 0 ). Při nastavení hodnoty true se nám public opakuje, při false pouze jednou.

 

Př.:

forward TestovniTimer();
public OnGameModeInit()
{
 SetTimer("TestovniTimer",1000,true);
 return 1;
}

public TestovniTimer()
{
 static x = 0;
 x++;
 printf("%d",x);
 return 1;
}

 

Nyní se nám každou sekundu přičte do statické proměnné x jedna hodnota a vypíše se do konzole. Bude se vypisovat tak dlouho dokuď nevypnete server :).

 

Teorie SetTimerEx

 

Jak už jsem říkal, SetTimer a SetTimerEx se liší odesílání parametrů. Tudíž můžeme odeslat např. hráčovo ID. To se hodí když chceme třeba na příkaz hráče za 5 vteřin zabít.

 

Parametry SetTimerEx

(funcname[], interval, bool:repeating, const format[], {Float,_}:...)

 

funcname[] - to samé jako u SetTimer, název publicu

interval - interval v milisekundách

bool:repeating - opakování (true/false)

const format[] - formát pro speciální typy hodnot (při něm se ještě pozastavím)

{Float,_}:... - parametry fcí

 

 

 

Takže pozastavím se u const format[]

const je konstatní proměnná (neměnná) ale to je teď jedno.

format[] značí parametry funkcí, třeba pokus chceme použít string, dáme jako format[] s , integer d atd.

 

Lepší to bude na příkladu:

 

SetTimerEx("TestPublic",5000,false,"ds",playerid,"Ahoj");

 

Můžeme to použít třeba do OnPlayerConnect

 

forward TestPublic(pid,str[]);
public OnPlayerConnect(playerid)
{
 SetTimerEx("TestPublic",5000,false,"ds",playerid,"Ahoj");
 return 1;
}

public TestPublic(pid,str[])
{
 SendClientMessage(pid,-1,str);
 return 1;
}

 

A za pět sekund po připojení hráče se mu vypíše zpráva "Ahoj"

 

Více parametrů: WIKI: SetTimerEx

 


 

Doufám že jste si něco nového přinesli,

Mort.

Link to comment
Share on other sites

  • 1 month later...
  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...