Započeo Osamu Dazai
•24. Avg. 2019.Very basic yet so useful y_iterate tutorial :D
6,641
pregleda
17
postova
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
24. Avg. 2019.
- YSI_Data\y_iterate -
Å ta je y_iterate?
To je još jedna od brojnih funkcija YSI paketa koja na omogućava brže pristupanje "indexima" koje mi kreiramo.
Zašto?
Zato što je brže nego korišćenje ostalih loopova, u daljem tekstu će biti objašnjeno zašto.
Kako se koristi?
Prosto je, prvo treba da kreiramo varijablu koja ima tag Iterator, ja ću u ovom primeru koristiti primer za uÄitavanje kuća iz baze.
const MAX_HOUSES = 500;
new Iterator:House;Sada smo kreirali iterator koji u sebi sadrži 500 mesta za nove vrednosti koje ćemo skladištiti dalje u tutorialu.
Sada treba da Init-ujemo (inicijalizujemo) taj Iterator, to uradite pre uÄitavanja iz baze ili gde ćete ga već koristiti 🙂
public OnGameModeInit()
{
Iter_Init(House);
//Loading
return 1;
}Sada ću vam pokazati kako da dodate odreÄ‘enu vrednost u ovom sluÄaju unique ID kuće u Iterator.
stock HouseLoaded(houseid)
{
// Ovaj kod se izvrÅ¡io kada smo uÄitali kuću 'houseid' iz baze.
Iter_Add(House, houseid);
}Sada smo dodali 'houseid' u Iterator House
Dobro, ali šta sada, zašto smo ga dodali?
Recimo želimo da proverimo nešto za sve kuće, Vi bi ste verovatno uradili nešto na fazon
for(new i = 1; i <= MAX_HOUSES) { //code }i unutar ove provere bi morali dodati jos provera tipa da li je je ID kuce validan i još dosta toga u zavisnosti od DBa koji koristite tj da li kuca postoji itd;
Dok u foreach-u ne morate to raditi jer smo sigurni da kuća postoji jer je Iter_Add izvršen i foreach će pristupati samo indexima koji si dodati u njega putem te funkcije.
foreach(new houseID : House)
{
//Ovde ne treba nikakva provera da li kuca postoji u bazi i slicno jer smo je dodali kada smo je inicijalizovali.
if(houseID == 69)
break;
}Brisanje vrednosti iz iteratora:
YCMD:deletehouse(playerid, args[])
{
//Code...
Iter_Remove(House, id_izbrisane_kuce);
}!!! PAŽNJA SADA MOLIM !!!
!!! Nikad ali nikada ne koristite Iter_Remove unutar samog foreach loop-a nego Iter_SafeRemove !!!
native Iter_SafeRemove(Iterator:Name<>, value, &next);Iterator:Name<> - Ime iteratora
value - vrednost koju brišete
&next - ovo vraća sledeći id na koji će foreach da ide, koristite i, i (i, j, k šta već budete koristili) slobodno.
Primer:
Iter_SafeRemove(Items, i, i);
native Iter_Random(Iterator:Name<>);Ova funkcija će uzeti Random vrednost iz Iteratora, na primer Players iterator je integrated u y_iterate i ako budete želeli recimo da napravite "happy ID" onda samo ovo iskoristite i dat će random igraÄu koji je konektovan na server neÅ¡to, mada ovde treba provera da li je igraÄ ulogovan ili jednostavno kreirajte iterator za ulogovane igraÄe.
native Iter_Count(Iterator:Name<>);Ova funkcija uzima ukupan broj već dodatih vrednosti unutar iteratora, primer:
printf("Na serveru je kreirano %d kuća.", Iter_Count(House));native Iter_Clear(IteratorArray:Name[]<>);Ova funkcija restartuje Iterator na default (brise sve vrednosti iz njega i sta je menjano od kada je inicijalizovan)
native Iter_FastClear(IteratorArray:Name[]<>);Ova funkcija direktno null-uje ceo iterator, brža je od Iter_Clear-a jer ona koristi loop.
native Iter_Alloc(Iterator:Name<>)Ova funkcija traži prazno mesto u Iteratoru i vraća ga (return-a ga).
native Iter_Next(Iterator:Name<>, current_index)Uzima sledeću vrednost iz iteratora, current_index je na primer i a ono će vratiti vrednost posle i.
native Iter_Prev(Iterator:Name<>, current_index)Suprotno od Iter_Next
native Iter_First(Iterator:Name<>)Uzima prvu vrednost iteratora.
native Iter_End(Iterator:Name<>)Uzima vrednost iza MAX_HOUSE (verujem da ovo postoji zbog jagged Array-a koji vam daje mogućnost menjanja maksimalnih elemenata array-a).
native Iter_Last(Iterator:Name<>)Uzima poslednju vrednost iteratora.
Za sve funkcije možete videti Wiki, ovo bi bilo to od osnovnih 😄
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
OG Legend
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
2,576
Postovi:
36
Teme:
Pridružio se:Avg. 2016
OG Legend
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
105 / 250 XP
Početnik(2)
3,781
Postovi:
192
Teme:
Pridružio se:Jan. 2017
24. Avg. 2019.
Nemoj davat takve naslove temi, napisi Basic y_iterate Tutorial i tjt, napisa roman u naslovu..
Tutorijal je odlican. 🙂
Tutorijal je odlican. 🙂
Former SA:MP server developer
Founder @ cyformat.rs
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
24. Avg. 2019.
#THEV1NNY_ wrote on August 24, 2019, 1:49 pm:
Extraa mackenzzii 😄
Hvala bebs <3
Vasic wrote on August 24, 2019, 1:52 pm:
Nemoj davat takve naslove temi, napisi Basic y_iterate Tutorial i tjt, napisa roman u naslovu..
Tutorijal je odlican. 🙂
Tutorijal je odlican. 🙂
A moram malo, nece drugacije uć haha
mumitza. wrote on August 24, 2019, 1:57 pm:
Za saferemove nisam znao, good 😄
Bot.si <3
Administrator
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP Doprinos25
Saradnik
25 / 500 XP
Doprinosilac(50)
2,746
Postovi:
151
Teme:
Pridružio se:Jul 2011
24. Avg. 2019.
Basic jeste ali nepotpuno dosta, postoje i tzv 2d iteratori, na 2d iteratorima koristis iter init metodu da ga inicijalizujes, za ostale iteratore nema potrebe osim ako se ne koristi zeexov kompajler.
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
24. Avg. 2019.
6cadilab9 wrote on August 24, 2019, 2:08 pm:
Basic jeste ali nepotpuno dosta, postoje i tzv 2d iteratori, na 2d iteratorima koristis iter init metodu da ga inicijalizujes, za ostale iteratore nema potrebe osim ako se ne koristi zeexov kompajler.
//Svakako sve ima ovde: https://forum.sa-mp.com/showthread.php?t=571159
EDIT: Evo i ovaj https://forum.sa-mp.com/showthread.php?t=570937
EDIT 2: Koristim Zeexov 😄
EDIT 3: Sad mislim ne znam ni zasto otvaram sve ovo kada imas sve i jos detaljnije od kreatora inc-ova na wikipediji al eto ako neko bas toliko ne zna engleski i hoce da "skripta" bez njega evo mu ovo
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
200 / 250 XP
Početnik(1)
632
Postovi:
80
Teme:
Pridružio se:Avg. 2013
25. Avg. 2019.
Da li je bolje tipa vozila sistem, uraditi sa iteratorima ili ne?
Moze malo objasnjenje brzine i to?
Razlika izmedju loop-a koji prolazi kroz vozila i iteratora?
Da li je mogucnost da zabaguje ovo sa Iter_Counter i Iter_FreeCount kako vec..
Ako mozes da odgovoris na sva pitanja, bio bih jako zahvalan.. 🙂
Ja po nacinu skriptanja vise preferiram loop pa ono voleo bih da objasnis pa da vidim sta cu 🙂
Hvala
Moze malo objasnjenje brzine i to?
Razlika izmedju loop-a koji prolazi kroz vozila i iteratora?
Da li je mogucnost da zabaguje ovo sa Iter_Counter i Iter_FreeCount kako vec..
Ako mozes da odgovoris na sva pitanja, bio bih jako zahvalan.. 🙂
Ja po nacinu skriptanja vise preferiram loop pa ono voleo bih da objasnis pa da vidim sta cu 🙂
Hvala
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
355
Postovi:
20
Teme:
Pridružio se:Avg. 2019
25. Avg. 2019.
LANMY.pwN wrote on August 25, 2019, 7:51 pm:
Da li je bolje tipa vozila sistem, uraditi sa iteratorima ili ne?
Moze malo objasnjenje brzine i to?
Razlika izmedju loop-a koji prolazi kroz vozila i iteratora?
Da li je mogucnost da zabaguje ovo sa Iter_Counter i Iter_FreeCount kako vec..
Ako mozes da odgovoris na sva pitanja, bio bih jako zahvalan.. 🙂
Ja po nacinu skriptanja vise preferiram loop pa ono voleo bih da objasnis pa da vidim sta cu 🙂
Hvala
Moze malo objasnjenje brzine i to?
Razlika izmedju loop-a koji prolazi kroz vozila i iteratora?
Da li je mogucnost da zabaguje ovo sa Iter_Counter i Iter_FreeCount kako vec..
Ako mozes da odgovoris na sva pitanja, bio bih jako zahvalan.. 🙂
Ja po nacinu skriptanja vise preferiram loop pa ono voleo bih da objasnis pa da vidim sta cu 🙂
Hvala
Pa pazi, sam koncept Iteratora je da brzo prođeš kroz svaki i ne pristupaš mestima koja nisu popunjena, ne verujem da bi išta moglo da zabaguje ali kao što sam napisao u postu oko Iter_SafeRemove -a gde treba da se koristi, a za brzinu imaš u temi gde sam pokazivao razliku između for i foreach za bitove, razlika je 945ms
EDIT: Ipak je razlika bila 1400ms
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava


