Přejít na obsah

Scydovy YSI návody | #3 | YSI_Coding\y_timers [**]

YSI Scydo SkiBig18 YSI4 y_timers YSI_Coding

  • Pokud chcete odpovědět, přihlaste se
6 odpovědí

#1
SkiBig18

SkiBig18

    Expert ve satanistickém díle YSI4

  • Uživatel
  • Příspěvků: 1 255
  • Je tu celkem: 10d 15h 44m 7s

YSI_Coding\y_timers
*****

Timery v a_samp jsou skvělá a učitečná věc. Avšak, každý timer vyžaduje neustále psát forward, public a fci. Ale za pomocí YSI stačí napsat jen typ timeru a způsob, jak ho spustíte.

Nejdříve si ukážeme použití y_timers. Tady jsem si vymyslel menší kód za použití čístě jen a_sampu:

forward pPrvniTimer();
forward pDruhyTimer(playerid);

new 
	pTimer[MAX_PLAYERS];

public 
	OnPlayerCommandText(playerid, cmdtext[]) {

	if (!strcmp("/timer1", cmdtext)) {

		SetTimer("pPrvniTimer", 1000*60*2, false);
		return 1;
	}

	if (!strcmp("/timer2", cmdtext)) {

		pTimer[playerid] = SetTimerEx("pDruhyTimer", 1000*60*3, true, "i", playerid);
		return 1;
	}

	return 0;
}

public pPrvniTimer() {

	SendClientMessageToAll(-1, "Tohle se všem odešle po 2 minutách poté, co jsem zadal příkaz");
}

public pDruhyTimer(playerid) {

	SendClientMessage(playerid, -1, "Tohle se odešle speciálně jen tobě po 3 minutách dokola");
}

public OnPlayerDisconnect(playerid, reason) {

	KillTimer(pTimer[playerid]);
	return 1;
}
Teď ten samý kód za použít YSI:

#include <YSI_Visual\y_commands>

YCMD:timer1(playerid, params[], help) {

	defer pPrvniTimer();
	return true;
}

timer pPrvniTimer[1000*60*2]() {

	SendClientMessageToAll(-1, "Tohle se všem odešle po 2 minutách poté, co jsem zadal příkaz");
}

ptask pDruhyTimer[1000*60*3](playerid) {

	SendClientMessage(playerid, -1, "Tohle se odešle speciálně jen tobě po 3 minutách dokola");
}

public OnPlayerDisconnect(playerid, reason) {

	stop timer_Druhy[playerid];
}
O dost kradší a přehlednější, že?

Manipulace s timery
Než budeme moct použít y_timer, musíme nejdříve si ujasnit, co v základech vůbec obsahuje a jaké fce co dělají:

defer

Spustí timer pouze jednou(stejně, jako by jste u fce SetTimer(Ex) dali u repeating false).

defer TimerPozdrav(playerid);

repeat

Timer se bude neustále volat(jeho obsažený kód), dokud ho uživatel nezastaví nebo se nevypne server.

repeat TimerTipy();

stop

Zastaví opakující se timer. ALE POZOR. Při přidávání timerů jmenujete timery jmény, které normálně vkládáte do funcname[] ve fci SetTimer(Ex), avšak ve YSI vy musíte vypnout jeho ID. Tudíž využijete tag Timer:(který YSI obsahuje) pro jeho zjištění a následné vypnutí:

		new Timer: timer_tipy = repeat TimerTipy();
	stop timer_tipy;

Typy

Následné fce(inf. slovíčka) už vkládáme rovnou do zdrojového kód. Nikam do žádného callbacku či kamkoliv jinam.

timer

Základní "jednotka". Používá se v případě, že pracujete s timery, který spouštíte za pomocí defer či repeat(a nebo klidně i obyčejně).

task

Opakující se timer, který se ihned spustí po spuštění serveru. U task nelze přidávat parametry. Vyjímka tvoří ptask, kde je parametr playerid.

ptask

Stejně jako pro task, s tím rozdílem, že se opakuje, spustí se u daného hráče, a počet spuštěných timerů se zvyšuje s počtem hráčů na serveru.

Použití - tipy
#include <YSI_Coding\y_timers>

ptask TipSystem[1000*60*2](playerid) {

	new 
		iZprava = random(5);
	switch(iZprava) {

		case 0: SendClientMessage(playerid, -1, "[ TIP ] Tip číslo 1 ");
		case 1: SendClientMessage(playerid, -1, "[ TIP ] Tip číslo 2 ");
		case 2: SendClientMessage(playerid, -1, "[ TIP ] Tip číslo 3 ");
		case 3: SendClientMessage(playerid, -1, "[ TIP ] Tip číslo 4 ");
		case 4: SendClientMessage(playerid, -1, "[ TIP ] Tip číslo 5 ");
	}
}
[font=verdana](Rád bych dodal, že jsem se snažil do návodu přidat jen ty nejpodstatnější informace. Složitější a zajímavější využití include si může i každý uživatel dohledat a naučit individuélně. Kdyby jste samozřejmě měli dotaz, ptejte se).

Scydovy YSI návody, hlavní topic: odkaz

  • 2

#2
vEnd

vEnd

    Programátor apod.

  • Globální moderátor
  • Příspěvků: 424
  • Je tu celkem: 34d 7h 1s

Kompenzují tyto časovače zpoždění, které generují běžné časovače (např. když máš časovač přes SetTimer na 30 sekund, může být až o x % delší, tedy přes 30 sekund)?


  • 0

96b259ac47244701b5097887d9439120.png

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
Roses are gay, violets are gayer, fuck the poem and listen to Slayer.

Roses are red. Violets are blue. When I Listen to Metallica My neighbors do too!

Unix is user friendly. It just happens to be very selective about who it decides to make friends with.

What's the object-oriented way to become wealthy? Inheritance.


#3
SkiBig18

SkiBig18

    Expert ve satanistickém díle YSI4

  • Uživatel
  • Příspěvků: 1 255
  • Je tu celkem: 10d 15h 44m 7s

Kompenzují tyto časovače zpoždění, které generují běžné časovače (např. když máš časovač přes SetTimer na 30 sekund, může být až o x % delší, tedy přes 30 sekund)?


Pokud jsem správně pochopil otázce, tak snad tohle bude stačit jako odpověď:
 

Tasks with the same delays are automatically balanced to not occur at the same time. For example if you have three with a one second period, they will be called a third of a second apart.

The balancing algorithm is not perfect. If you have one timer at 400ms and one at 700ms, they will conflict once every 2.8s. This currently only offsets timers with the same periods, however cross-period-collisions are much rarer so not an issue most of the time.


-->> http://forum.sa-mp.c...ad.php?t=571044
  • 0

#4
vEnd

vEnd

    Programátor apod.

  • Globální moderátor
  • Příspěvků: 424
  • Je tu celkem: 34d 7h 1s

Ne, to není to, na co jsem se ptal. Časovače mají už od přírody (:d) zpoždění. Když dáš třeba 1 000 milisekund (aka 1 sekunda) a zvolíš opakovat, vznikne tam vždy čas navíc (~ 1 100 milisekund). Proto dávám pro sekundové časovače jen 900 ms, popř. 950 ms.

 

Otázka zní, jestli tohle YSI kompenzuje. Vím, že na tom byl include od Slice, ten to kompenzoval. Dělá to i y_timers?


  • 0

96b259ac47244701b5097887d9439120.png

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
Roses are gay, violets are gayer, fuck the poem and listen to Slayer.

Roses are red. Violets are blue. When I Listen to Metallica My neighbors do too!

Unix is user friendly. It just happens to be very selective about who it decides to make friends with.

What's the object-oriented way to become wealthy? Inheritance.


#5
SkiBig18

SkiBig18

    Expert ve satanistickém díle YSI4

  • Uživatel
  • Příspěvků: 1 255
  • Je tu celkem: 10d 15h 44m 7s

Ne, to není to, na co jsem se ptal. Časovače mají už od přírody ( :d) zpoždění. Když dáš třeba 1 000 milisekund (aka 1 sekunda) a zvolíš opakovat, vznikne tam vždy čas navíc (~ 1 100 milisekund). Proto dávám pro sekundové časovače jen 900 ms, popř. 950 ms.
 
Otázka zní, jestli tohle YSI kompenzuje. Vím, že na tom byl include od Slice, ten to kompenzoval. Dělá to i y_timers?


Jo ták :d. To ti nedokážu říct na 100 %, protože když jsem používal opakující timery, nějakou změnu v intervalu jsem nepostřehl(jinak řečeno nestalo se mi to, takže ano), ale co si pamatuju tak y_timers byly proslavené spousty úprav a i oprav obyčejných timerů(např. možnosti volat i string a array), takže je dosti pravděpodobně, že se tam implementovala i tahle úprava.
  • 0

#6
ATomas

ATomas

    RZE for life, SP for ever !

  • Uživatel
  • Příspěvků: 2 764
  • Je tu celkem: 22h 14m 55s

Tak vam to hosi rozseknu :)

http://wiki.sa-mp.com/wiki/SetTimer

 

Timer intervals are not accurate (roughly 25% off).

Resenim je udelat mensi timer a kontrolovat podle funkce GetTickCount().


  • 0

play.superparba.eu:7777

www.superparba.eu

pawno.cz kazí dva typy lidí:

1. "Najdi do to na googlu/wiki" <- sakra tak od toho je tu ta sekce help ne ? Protože to asi nenašel / nepochopil / neví

2. Ovce. <- Člověk by se mohl smát kdyby to nebylo tak smutné jak tu někdo zavedl termín kid/děcko a všichni ho začali bezhlavě používat na každého, kdo se jenom opováží na něco zeptat nebo projevit svůj nazor.

 


#7
Satoshi

Satoshi

    松本サトシ

  • Uživatel
  • Příspěvků: 3 104
  • Je tu celkem: 26d 23h 59m 57s

Ne, to není to, na co jsem se ptal. Časovače mají už od přírody ( :d) zpoždění. Když dáš třeba 1 000 milisekund (aka 1 sekunda) a zvolíš opakovat, vznikne tam vždy čas navíc (~ 1 100 milisekund). Proto dávám pro sekundové časovače jen 900 ms, popř. 950 ms.

 

Otázka zní, jestli tohle YSI kompenzuje. Vím, že na tom byl include od Slice, ten to kompenzoval. Dělá to i y_timers?

 

 

Asi myslis, jestli se casovac spousti kazdych 1000ms nebo 1000ms po ukonceni volani cb predosleho ticku.

To si zmeris jednoducho. Udelej si casovac (5sec), do kteryho das vypis casu do konzole a pod nej jeste nejaky sleep na 3 sec.


  • 0

What’s the difference between peanut butter and jam? I can’t peanut butter my dick up your ass.
Visual Basic... No neviem ci je otrasne jednoduchy alebo jednoducho otrasny (https://rikarin.org/)

Zensky jsou jako parkovaci mista, ty nejlepsi jsou uz zabrany a ty, co zbyvaji, jsou bud pro postizeny a nebo jsou placeny.

Obsah sáčku vysypeme do 0,5l vroucí vody, přidáme vejce a promícháme. Hotové dogma podáváme téplé a šíříme řetězovou reakcí.

Please stop posting non-informative and non-specific questions. Respect others' time. Debug your stuff first, don't throw it at people.

15027530_10211115224940762_3579412360712






Také označeno jedním nebo více klíčovými slovy: Návod, YSI, Scydo, SkiBig18, YSI4, y_timers, YSI_Coding

0 uživatelů si prohlíží toto fórum

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

© 2015 IPS, Inc.

TOPlist

Zajímat Vás mohou ještě aktuální zprávy. sleviště, slevy dnes Herbalife je skvělou cestou pro dobré zdraví. Je libo dětský web?