[TuT]YINI - YSI

Započeo |Pacino, Mart 04, 2011, 23:35:55 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

YINI[y_ini.inc]

[UPOZORENJE]Ovo je jedan od dijelova YSI skupa includova i datoteka koji mozete preuzeti
ovdje. Sam YINI ne mozete sami pronaci, tako da je jedina opcija preuzimanje citave kolekcije includova!


Ovaj sistem citanja/pisanja datoteka je do sada najbrzi koji je ikada kreiran ( kako tvrdi njegov autor - Y_Less).
Preporucljivo ga je koristiti kod spremanja acc-ova, kuca, bizova i drugih vrsta datoteka!

U sljedecem dijelu tutorijala objacnicu vam neke osnovne funkcije YINI sistema, i naravno objasniti zasto bas njega ( Puno je brzi od Dini-a i SII-a ) :

Komande su veoma slicne onima u Dini-u!


Koristenje:

Ako zelite da koristite ovaj sistem na vrhu skripte dodajte (podrazumjeva da ste skinuli ovaj paket i ubacili ga u svoj include folder):

#include <YSI\y_ini>

Dini sistem otvara datoteku svaki put kad trazi neku vrijednost otvara datoteku radi te 1 vrijednosti, pa zatvara datoteku, pa je opet otvara kad bude potrebno... YINI za razliku od Dini-a otvara datoteku jednom i ocita sve vrijednosti odmah, i to je ono sto ga cini drugacijim i boljim!


CITANJE

Zamislite Dini kod:


gA = dini_Get("datoteka.ini", "c");
gB = dini_Get("datoteka.ini", "b");
gC = dini_Get("datoteka.ini", "a");


I ove vrijednosti:

a = 10
b = 67
c = 42


Dini bi otvorio datoteku po 1 za svaku vrijednost ( znaci 3 puta otvara datoteku i 3 puta zatvora i tako iznova... )
Yini bi ipak otvorio ovu datoteku samo jednom i ocitao sve podatke odmah.









Ovako bi izgledao Yini kod:

INI:myini[](name[], value[])
{
   INI_String("a", gA);
   INI_String("b", gB);
   INI_String("c", gC);
   return 0; // returna 0 - obavezno
}


Sintaksa jeste duza, ali se isplati pisati malo duzi kod, pogotovo ako je brzina u pitanju. Yini koristi callback da ucita datoteke umjesto da cita svaku vrijednost pojedinacno ( Dini ).


PISANJE/ SPREMANJE


Nacin pisanja je veoma slican kao kod Dini-a... Ipak dok Dini otvara file za svaku vrijednost posebno, Yini pise vise vrijednosti odjednom!

Yini sintaksa:


new INI:ini = INI_Open("datoteka.ini");
INI_WriteString(ini, "Ime", "Pacino");
INI_WriteInt(ini, "Poeni", pPoeni);
INI_WriteFloat(ini, "HP", health);
INI_Close(ini);



BRISANJE

Takodjer mozete brisati vrijednosti i unose iz datoteke!

new INI:ini = INI_Open("datoteka.ini");
INI_RemoveEntry(ini, "Ime");
INI_Close(ini);


Ovo ce obrisati “Ime” unos iz datoteke! Brisanja mogu biti kombinirana sa pisanjem!

new INI:ini = INI_Open("datoteka.ini");
INI_WriteString(ini, "Ime", "Pacino");
INI_WriteInt(ini, "Poeni", pPoeni);
INI_RemoveEntry(ini, "Ime");
INI_WriteFloat(ini, "HP", health);
INI_Close(ini);


TAGOVI/NASLOVI


Jedna od mogucnosti kojih nema u Dini-u je postavljanje/unosenje naslova u Yini datoteci!


[SERVER]
HP = 24.68
pozicija = 1234.2345

[ROLEPLAY]
HP = 100
pozicija = -1234.2334


Ovo omogucuje spremanje vise stvari u jedan file!


Citanje:



Da biste citali samo vrijednosti pod [SERVER]  koristite sintaksu:

INI:filename[SERVER](name[], value[])
{
   INI_Float("HP", health);
   if (!strcmp(name, "pozicija") && !sscanf(value, "fff", gX, gY, gZ))
   {
       return;
   }
}

Funkcija:

INI:filename[naslov/tag](name[], value[])
{
}








Pisanje:


Da biste unijeli naslov jednostavno koristite sintaksu:

new INI:ini = INI_Open("datoteka.ini");
INI_SetTag(ini, "SERVER");
INI_WriteString(ini, "Ime", "Pacino");
INI_WriteInt(ini, "Poeni", pPoeni);
INI_Close(ini);


FUNKCIJE:

INI_Int
name[] â€" Ime INI vrijednosti.
variable â€" Varijabla koju sprema.


• INI:filename[tag](name[], value[])// Obavezno stavljati name [] i value []
{
   INI_Int("Nivo", pNivo);
}

• INI_Float
name[] - Ime INI vrijednosti.
variable - Varijabla koju treba spremiti.

Sprema Float vrijednost.
• INI_Hex
name[] - Ime INI vrijednosti.
variable - Varijabla koju treba spremiti.

Sprema HEX ( heksadecimalnu ) vrijednost â€" npr. boja u pawnu.
• INI_Bin
name[] - Ime INI vrijednosti.
variable - Varijabla koju treba spremiti.

Sprema broj u formatu 0b1001101 (binarni).
• INI_Bool
name[] - Ime INI vrijednosti.
variable - Varijabla koju treba spremiti.

Sprema vrijednost kao Boolean (true/false).
• INI_String
name[] - Ime INI vrijednosti.
variable - Varijabla koju treba spremiti.
length â€" Duzina arraya.

Sprema array u postavljenoj duzini!
• INI_Load
filename[] â€" Datoteka za ucitavanje.
bool:bExtra â€" Slanje dodatnih informacija (true/false).
extra â€" Dodatne informacije za poslati.
bLocal â€" Poziva lokalne funkcije umjesto globalnih.

Ucitava cijelu datoteku! Sve osim imena datoteke je opcijonalno.
• INI_Open
filename[] â€" INI datoteka za ucitavanje.

Ucitava .ini datoteku za ucitavanje! Returna sa tag tipom: "INI:".
• INI_Close
INI:file â€" INI datoteka za zatvoriti.

Zatvara trenutno otvorenu datoteku.
• INI_SetTag
INI:file - INI datoteka za izmjene.
tag[] â€" Ime taga/naslova u datoteci.

Postavlja [tag][naslov]. Dodatne vrijednosti se pisu ispod ovoga.
• INI_RemoveEntry
INI:file - INI datoteka za izmjene.
name[] â€" Za ukloniti.

Uklanja unos iz date datoteke.
• INI_WriteString
INI:file - INI datoteka za izmjene.
name[] â€" Ime unosa.
data[] - Unos.

Pise string u ini datoteku.
• INI_WriteInt
INI:file - INI datoteka za izmjene.
name[] - Ime unosa.
data â€" Vrijednost unosa.

Pise integer u trenutnu ini datoteku.

• INI_WriteHex
INI:file - INI datoteka za izmjene.
name[] - Ime unosa.
data - Vrijednost unosa.

Pise na ini datoteku hex (heksadecimalnu) vrijednost â€" npr. boja: (0x1F182).

• INI_WriteBool
INI:file - INI datoteka za izmjene.
name[] - Ime unosa.
data - Boolean vrijednost.
Pise bool vrijednost na datu ini datoteku.

• INI_WriteBin
INI:file - INI datoteka za izmjene.
name[] - Ime unosa.
data â€" Vrijednost unosa.

Pise na ini datoteku binarnu vrijednost â€" npr. (0b1001010).
• INI_WriteFloat
INI:file - INI datoteka za izmjene.
name[] â€" Ime unosta.
Float:data - Float vrijednost.
accuracy â€" Brojevi poslije , u vrijednosti.



Ostale funkcije kao: INI_ParseFile ; remoteFormat nisu toliko bitne za vas!


LATENCIJE

Usporedbe latencija izmedju Dini-a, SII i Yini-a. Ovo je ucitavanje preko 40000 vrijednosti srednje velicine!

dini: 63810 â€" Preko 1 minute
yini: 1564 â€" Preko 1 SEKUNDE
yini kao dini 1: 6009 â€" Preko 6 sekundi
yini kao dini 2: 91159 â€" Oko jedan i pol minut
SII: 52807


Dini â€" iako veoma popularan je zapravo 45 puta sporiji od Yini-a.


Konacni rezultati:

yini: 1564
dini: 63810
emu : 27297
SII: 52807



Preuzeto sa SA:MP foruma! I da, jesam kopirao sam neke dijelove, ali sam htio da vam pojednostavim neke stvari, posto je to YSI napisao u jeziku “vise matematike “ :D
Ovo je moj prvi tut, zato bez zamjerki :P

[
Poslednja Izmena: Mart 05, 2011, 00:33:16 PRE PODNE od ProGaming|Pacino

Cobra 11

INI:myini[](name[], value[])
{
   INI_String("a", gA);
   INI_String("b", gB);
   INI_String("c", gC);
   return 0; // returna 0 - obavezno
}

Malo sam gledao,evo jedna zamjerka.. :P
//return 0,a ne returna... :P
to je mala sala...xd
svaka cast...dobar tut... ;)



nije YSI pravio, vec Y_Less, a cijeli library se zove YSI(Y_Less's Script Includes)...

drugo, YINI nije najbrzi sistem pisanja u fileove vec je to fwrite na osnovi kojeg i sam YSI pise u filevove pa je naravno sporiji za otprilike nekih 30-40%, barem sam ja dosao do takvih podataka testirajuci...

Citatnije YSI pravio, vec Y_Less, a cijeli library se zove YSI(Y_Less's Script Includes)...

drugo, YINI nije najbrzi sistem pisanja u fileove vec je to fwrite na osnovi kojeg i sam YSI pise u filevove pa je naravno sporiji za otprilike nekih 30-40%, barem sam ja dosao do takvih podataka testirajuci...

Ama znam, nego ja sam rekao najbrzi sistem koji je kreiran, pod tim se ne podrazumjeva fwrite.

black_dota

Smanji font, izbaci iz center,boje su lose...

6/10 za izgled Tutoriala
7/10 za Tutorial jer si samo preuzeo i preveo

EDIT: Ako se razume neko u Y_Ini, nek mi objasni nesto...

stock SaveVehicle(vehicle, filename[36])
{
    new
iniid,
INI:File;

File = INI_Open(iniid);

    INI_WriteInt(iniid, "Model", carData[vehicle][model]);
    INI_Float(iniid, "XSpawn", carData[vehicle][xspawn]);
    INI_Float(iniid, "YSpawn", carData[vehicle][yspawn]);
    INI_Float(iniid, "ZSpawn", carData[vehicle][zspawn]);
    INI_Float(iniid, "AngleSpawn", carData[vehicle][anglespawn]);
    INI_WriteInt(iniid, "Color1", carData[vehicle][col1]);
    INI_WriteInt(iniid, "Color2", carData[vehicle][col2]);
    INI_WriteInt(iniid, "RespawnTime", carData[vehicle][respawn]);
    INI_WriteString(iniid, "Owner", carData[vehicle][owner]);
    INI_Close(iniid);
}


Krenuo sam raditi ownership za aute, ok to mi je stock za spremanje tih vozila
E sad me zanima kako da uradim stock za loadvehicle tj da ucitava vozilo, treba mi objasnjenje kako da napravim da cita iz neke datoteke neki red, naprimer taj model i to sve
Poslednja Izmena: Mart 07, 2011, 09:18:44 PRE PODNE od [IG]Volim^^Fiziku <3


INI:filename[](vehicle, name[], value[]) // filename zamijeni s nazivom svoje datoteke ( npr. ako ti datoteka zove vehicle.ini, ti napises vehicle umjesto filename )
{
if(!strcmp(name, "Model")) carData[vehicle][model] = strval(value);
else if(!strcmp(name, "XSpawn")) carData[vehicle][model] = floatstr(value);
// Model i XSpawn zamjenis s trazenom informacijom
}

stock LoadVehicle(vehicle)
{
INI_Load("filename.ini", true, vehicle); // Tu ide ime datoteke gdje ti se spremaju informacije
return 1;
}

Last nick: Paradox

skinuo sam YSI skup includova, i sad me zanima koji include moram koristiti, sto se tice spremanja acc-ova i toga?? jer vidim da ih ima puno...Hvala

Citat: [NS]Michael poslato Mart 10, 2011, 21:43:54 POSLE PODNE
skinuo sam YSI skup includova, i sad me zanima koji include moram koristiti, sto se tice spremanja acc-ova i toga?? jer vidim da ih ima puno...Hvala
Sve zajedno stavis u pawno --> scriptfiles --> stavis taj folder, ucitas gm i dodas #include <YSI/y_ini>, i dalje pravis sta hoces :D

PS. Svi su medjusobno povezani zato moras staviti folder :D
Poslednja Izmena: Mart 10, 2011, 21:49:35 POSLE PODNE od eXtreme

zanima me kako da napravim kod OnPlayerLogina, da mi cita?? napravio sam spremanje, al nekontam kak i citanje. pa ak bi mogao netko objasniti. hvala