GTA-Center.com » Forum
http://www.gta-center.com/forums/

[GUIDA]Uso del y_ini
http://www.gta-center.com/forums/viewtopic.php?f=40&t=1254
Pagina 1 di 2

Autore:  Angelo [ 23/06/2011, 22:14 ]
Oggetto del messaggio:  [GUIDA]Uso del y_ini

In questa guida vi spiegherò come usare il y_ini.
Prima di tutto bisogna sapere che il y_ini è un sistema di gestione file simile al dini ma molto più veloce.
In questa pagina: Click trovate il download di tutti gli include di y_less, però a noi per ora servirà soltanto il y_ini.

Prima di tutto dobbiamo sapere che il y_ini, come ogni include per la gestione dei file, ha delle funzioni per salvare variabili in un file e alcune per gettare variabili da un file già esistente.

Salvare nel File


Salvare nel file una variabile, cioè un numero intero, decimale o una stringa ecc..., è il lavoro più semplice, prima dobbiamo aprire il file, poi salviamo ciò che vogliamo ed infine richiudiamo il file, la struttura è molto simile al file, quindi chi sa usare il file capirà prima come fare, esempio:

Codice:
new INI:iniFile; //File INI che verrà aperto
INI:iniFile = INI_Open("Esempio.ini"); //aprirà il file nel percorso "CartellaServer/scriptfiles/Esempio.ini"
INI_Write(iniFile, "Esempio", "Ciao");
INI_Close(iniFile);


Come abbiamo visto nello script qua sopra, prima creiamo la variabile che conterrà il file, poi apriamo il file, scriviamo nel file "Esempio = Ciao" e infine chiudiamo il file

Ovviamente nei file si potranno salvare altre cose oltre le stringhe, qui sotto posto tutte le funzioni che potrete utilizzare per salvare Float, Interi, Hex, Binari, Variabili Booleane ecc...

- INI_Open(file[]); //Apre il file nel percorso indicato da "file", per poterci scrivere sopra

- INI_Close(file); //Chiude il file su cui abbiamo scritto qualcosa

- INI_WriteString(INI:file, key[], value[]);

Il INI_WriteString scrive nel file una stringa, esempio
Codice:
INI_WriteString(file, "Nome", "Giovanni");

Nel file troveremo scritto "Nome = Giovanni"

- INI_WriteInt(INI:file, key[], value);

Uguale al INI_WriteString solo che invece di scrivere una stringa scrive un numero, esempio:
Codice:
INI_WriteInt(file, "Numero", 4);

Nel file troveremo Numero = 4

- INI_WriteFloat(INI:file, key[], Float:value);

Uguale al INI_WriteInt, differenzia dal fatto che invece di salvare numeri interi salva numeri decimali

- INI_WriteHex(INI:file, key[], value);

Il INI_WriteHex salva nel file un esadecimale, esempio

Codice:
INI_WriteHex(file, "Nero", 0x000000FF);

Scriverà nel file: Nero = 0x000000FF

- INI_WriteBin(INI:file, key[], value);

Il INI_WriteBin salva nel file un Binario, esempio:

Codice:
INI_WriteBin(file, "Binario", 010101);

Scriverà nel file Binario = 010101

- INI_WriteBool(INI:file, key[], value);

Il INI_WriteBool scrive nel file la condizione della variabile booleana, cioè true o false, esempio:

Codice:
INI_WriteBool(file, "Registrato", false);


Scriverà nel file Registrato = false

- INI_RemoveEntry(INI:file, key[]);

Il INI_RemoveEntry elimina dal file una riga segnalata da key, esempio:

Codice:
INI_WriteInt(file, "Numero", 0);
INI_WriteString(file, "Stringa", "Ciao");
INI_RemoveEntry(file, "Numero");


Nel file troveremo scritto: Stringa = Ciao
questo perchè prima abbiamo scritto nel file: Numero = 0, ma poi con INI_RemoveEntry l'abbiamo cancellato.

Una specialità che troviamo nel y_ini sono le tag, ovvero targhette che verranno scritte nel file, la funzione è la seguente:

- INI_SetTag(file, tag[]);

Le tag servono per ordinare le righe inserite nel file.ini, ma possono essere anche omesse, le tag si possono rivelare utili nel momento in cui carichiamo da un file.

Codice:
INI_SetTag(file, "Esempio");
INI_WriteString(file, "Stringa", "Ciao");

Nel file troveremo scritto:
Codice:
[Esempio]
Stringa = Ciao


Caricare da un file


Dopo che il file verrà compilato e salvato, dovrà pur sempre servire a qualcosa, e qui dobbiamo gettare dal file i valori.
Col dini basta creare una variabile ed usare un = per settare il valore alla variabile, qui invece abbiamo due procedimenti, il primo lo utilizziamo quando conosciamo il nome del file.ini salvato mentre il secondo lo utilizziamo quando non sappiamo il nome del file salvato.
Il primo caso, per esempio, verrà utilizzato quando abbiamo creato un file di impostazioni per il server, il quale ha un nome già conosciuto dal momento della compilazione di pawn mentre il secondo caso può essere utilizzato per salvare gli account dei player, infatti quando compiliamo non possiamo sapere in anticipo il nome degli account del player.

Primo caso: INI_Load



Nel primo caso, cioè quando sappiamo il nome del file.ini, per caricare da un file useremo il INI_Load.
In questo caso dobbiamo creare una funzione simile a questa:
Codice:
INI:we[esempio](name[], value[])
{
    return 1;
}


we sta ad indicare il nome del file mentre esempio è la tag setta quando abbiamo salvato il file, in questo modo leggeremo(nel file) soltanto le righe che si trovano sotto "[esempio]" e che si trovano sopra una altra targhetta

dentro questa funzione possiamo gettare dalle righe i valori molto semplicemente, esempio:

In un callback o funzione
Codice:
new Percorso[32];
new INI:File;
Percorso = "Percorso.ini";
File = INI_Open(Percorso);
INI_SetTag(File, "Info");
INI_WriteString(File, "Colore", "Blu");
INI_WriteFloat(File, "Vita", 100.0);
INI_Close(File);


Dove vogliamo che vengano gettati i file, io uso il main come esempio
Codice:
new health;
INI:Percorso[Info](name[], value[])
{
    if(!strcmp(name, "Vita", false)) health = float(strval(value));
    return 1;
}

main()
{
    INI_Load(Percorso);
    printf("Vita = %f", health);
}


Come possiamo vedere, INI_Load ripeterà ciò che ha c'è nella funzione INI:Percorso, però sempre sotto la tag [Info]

Nel file possiamo anche trovare più di una tag, esempio:
Codice:
new Percorso[32];
new INI:File;
Percorso = "Percorso.ini";
File = INI_Open(Percorso);
INI_SetTag(File, "Colore");
INI_WriteString(File, "Colore", "Blu");
INI_SetTag(File, "Info");
INI_WriteFloat(File, "Vita", 100.0);
INI_Close(File);


Codice:
new health, colore[8];

INI:Percorso[Colore](name[], value[])
{
    if(!strcmp(name, "Colore", false)) colore = Name;
    return 1;
}

INI:Percorso[Info](name[], value[])
{
    if(!strcmp(name, "Vita", false)) health = float(strval(value));
    return 1;
}

main()
{
    INI_Load(Percorso);
    printf("Vita = %f", health);
}


In Questo caso abbiamo creato due funzioni, in questo caso INI_Load avrà caricherà sia l'una che l'altra quindi se mettiamo nel main:

Codice:
main()
{
    INI_Load(Percorso);
    printf("Vita = %f", health);
    printf("Colore = %s", colore);
}


Printerà:

Vita = 100.0
Colore = Blu

Come avete visto nelle funzioni io ho usato per esempio:

Codice:
if(!strcmp(name, "Vita", false)) health = float(strval(value));


potete anche usare le funzioni per caricare da un file, sono le seguenti:

- INI_Int(key[], dest);

Il INI_Int caricherà un valore dal file e lo attribuirà a dest, esempio:

Codice:
new destination;
INI_Int("Numero", destination);


a destination verrà dato il valore di "Numero"

- INI_String(key[], dest[], sizeof(dest));

Il INI_String caricherà una stringa dal file e la attribuirà a dest, esempio:

Codice:
new dest[12];
INI_String("Stringa", dest, 12);


dest prenderà la stringa che era stata attribuita alla key "Stringa"

- INI_Bool(key[], dest);

Il INI_Bool caricherà la condizione (true o false) di key e la darà a dest

- INI_Float(key[], Float:dest);

Il INI_Float caricherà il valore decimale di key e lo darà a dest

- INI_Hex(key[], dest); | INI_Bin(key[], dest);

INI_Hex e INI_Bin caricheranno il valore esadecimale o binario di key e lo daranno a dest

In questo modo lo script sopra:

Codice:
new health, colore[8];

INI:Percorso[Colore](name[], value[])
{
    if(!strcmp(name, "Colore", false)) colore = Name;
    return 1;
}

INI:Percorso[Info](name[], value[])
{
    if(!strcmp(name, "Vita", false)) health = float(strval(value));
    return 1;
}

main()
{
    INI_Load(Percorso);
    printf("Vita = %f", health);
}


Lo trasformeremo in:

Codice:
new health, colore[8];

INI:Percorso[Colore](name[], value[])
{
    INI_String("Colore", colore, 8);
    return 1;
}

INI:Percorso[Info](name[], value[])
{
    INI_Float("Vita", health);
    return 1;
}

main()
{
    INI_Load(Percorso);
    printf("Vita = %f", health);
}


Ma non cambierà assolutamente niente.

Secondo Caso: INI_ParseFile


Nel secondo caso useremo la funzione: INI_ParseFile grazie alla quale potremmo caricare da file di cui il compilatore non sa il nome come un account utente.

Prima di tutto spieghiamo cos'è il INI_ParseFile:

Il INI_ParseFile è simile al INI_Load, solo che è più avanzato e sfrutta più memoria, vediamo però cosa cambia:

Codice:
forward ini_Info_Percorso(name[], value[]);
public ini_Info_Percorso(name[], value[])
{
    return 1;
}

main()
{
    INI_ParseFile("Percorso.ini", "ini_%s_%s");
}


quindi cambia soltanto che la funzione diventa callback, per farvi capire meglio:

Codice:
INI:Percorso[Info](name[], value[])

diventa

forward ini_Info_Percorso(name[], value[]);
public ini_Info_Percorso(name[], value[])

mentre:

INI_Load(Percorso);

diventa

INI_ParseFile(Percorso, "ini_%s_%s");


Come possiamo vedere INI_ParseFile ha un parametro che INI_Load non ha, ovvero il nome della funzione da chiamare, il quale va lasciato così in questo caso


Codice:
forward Esempio_Info(name[], value[]);
public Esempio_Info(name[], value[])
{
    return 1;
}

forward Esempio_Info2(name[], value[]);
public Esempio_Info2(name[], value[])
{
    return 1;
}

main()
{
    INI_ParseFile("we.ini", "Esempio_%s");
    INI_ParseFile("ciao.ini", "Esempio_%s");
}


Come possiamo vedere abbiamo due file (we.ini e ciao.ini) che potrebbero caricare dalla stessa funzione, per ovviare a questo problema dobbiamo separarli tramite le Extra Data.

Extra Data


Le Extra data sono degli ulteriori parametri inseriti nel INI_ParseFile o nel INI_Load, esempio:
Codice:
new
    Intero[2],
    Float:Decimale[2],
    Stringa[2][32];

forward Esempio_Info(idx, name[], value[]);
public Esempio_Info(idx, name[], value[])
{
    INI_Int("Numero", Intero[idx]);
}

forward Esempio_Info2(idx, name[], value[]);
public Esempio_Info2(idx, name[], value[])
{
    INI_Int("Decimale", Decimale[idx]);
    INI_String("Stringa", Stringa[idx], sizeof (Stringa[]));
}

main()
{
    INI_ParseFile("we.ini", "anyini_%s", .bExtra = true, .extra = 0);
    INI_ParseFile("ciao.ini", "anyini_%s", .bExtra = true, .extra = 1);
}


Come possiamo vedere abbiamo aggiunto bExtra = true per indicare che metto un extra il quale poi sarà idx, nella prima funzione con valore 0, nella seconda con valore 1

File Untenti


Infine vi spiego come creare un account utente col nome del player

Codice:
enum Info
{
    Float:health,
    weapon,
    pass[24]
}

new
    PlayerInfo[MAX_PLAYERS][Info];

public User_Info(playerid, name[], value[])
{
    INI_String("Password", PlayerInfo[playerid][pass], 24);
}

CMD:login(playerid, params[])
{
    new
        pName[24];
    GetPlayerName(playerid, pName, 24);
    new
        userFile[32];
    format(userFile, sizeof (userFile), "users\%s.ini", pName);
    INI_ParseFile(userFile, "User_%s", .bExtra = true, .extra = playerid);
    if(!strcmp(PlayerInfo[playerid][pass], params, false))
    {
        INI_Float("health", PlayerInfo[playerid][health]);
        INI_Int("weapon", PlayerInfo[playerid][weapon]);
        SendClientMessage(playerid, -1, "Ti sei loggato con successo");
    }
    else SendClientMessage(playerid, -1, "Password Sbagliata");
}



Guida finita, se non avete capito qualcosa chiedete pure ;)

Autore:  Giovanni94m [ 23/06/2011, 22:17 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Angelo lavoro fantastico. Ottima alternativa veloce rispetto al vecchissimo dini.
Se non sbaglio è anche il più veloce

Autore:  Angelo [ 23/06/2011, 22:20 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Grazie mille giova :D
Comunque si è il sistema di gestione file più veloce dopo il mysql se non mi sbaglio

Autore:  Peppinux AKA Peppe_Stasu [ 23/06/2011, 22:27 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Il MySQL non è un sistema di gestione file. E' il più veloce dopo il file.inc :asd:.

Autore:  Giovanni94m [ 23/06/2011, 22:30 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Angelo ha scritto:
Grazie mille giova :D
Comunque si è il sistema di gestione file più veloce dopo il mysql se non mi sbaglio

Tecnicamente non so che velocità ha il mysql. Ma se il server non risiede in locale la velocità diminuisce notevolmente.

Autore:  Angelo [ 23/06/2011, 22:30 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

quella del mysql la sapevo, volevo dire che è molto utilizzato per creare account ecc...
quella del file non la sapevo

Autore:  mitosking [ 24/06/2011, 1:14 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Beh, per quanto puoi conoscere il MySQL, l'aiuto di un include è sempre richiesto. File.inc come dice Peppinux è più veloce dell'y_ini (visto che usa funzioni del file.inc).

Magari un giorno creeranno un include autonomo... Che magari sarà più veloce del file.inc... Ma sinceramente, la velocità è già buona :sisi:.

Autore:  Giovanni94m [ 24/06/2011, 17:27 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Ci sono dei plugin che sono più veloci del file.inc

Autore:  Peppinux AKA Peppe_Stasu [ 24/06/2011, 19:07 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Sì tipo il File Manager di Ryder.

Autore:  mitosking [ 25/06/2011, 1:02 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Boh che ne so... qua ne sfoderano una ogni 5 secondi questi due pazzi ._.

Comunque credo che già la velocità del file.inc basti ed avanzi.

Autore:  mitosking [ 12/08/2011, 13:14 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Non ho ancora capito una cosa... Se io devo gettare un parametro dentro un file, posso usare solo INI_Int (ecc...) senza inserire INI_Load oppure INI_ParseFile?

Autore:  Angelo [ 12/08/2011, 13:42 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Se conosci il nome del file da cui gettare allora usi INI_Load altrimenti INI_ParseFile

Autore:  mitosking [ 12/08/2011, 13:54 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Si, ma non capisco... Non posso fare come il Dini? Cioè:

Codice:
dini_Int("Percorso.ini", "Numero");


Con Y_Ini non posso fare in questo modo?

Codice:
new INI:File, dest, pName[24], string[128];
GetPlayerName(playerid, pName, 24);
format(string, 128, "%s.ini", pName);
File = INI_Open(string);
INI_Int(string, "Numero", dest);
INI_Close(File);

Autore:  Angelo [ 12/08/2011, 15:22 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Ma il INI_Open serve per salvare nel file D:

Autore:  mitosking [ 13/08/2011, 1:27 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Ok adesso ho capito... Però ho ancora dei dubbi riguardo l'INI_ParseFile, ovvero: tu, nell'esempio del login, hai inserito un "User_%s". Perché hai messo questo "_%s"?

Autore:  Angelo [ 13/08/2011, 9:16 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

User_%s sta ad indicare la funzione User_Info, ovvero la funzione dove possiamo caricare i dati del player tramite le funzioni, non so se funziona anche se metti User_Info al posto di User_%s

Autore:  mitosking [ 13/08/2011, 14:15 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Ok... Un'ultima cosa: perché si inserisce %s?

Autore:  Angelo [ 13/08/2011, 16:22 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Bhe potrebbero essererci più funzioni, tipo:

Codice:
public User_Info(playerid, name[], value[])
{
    INI_String("Password", PlayerInfo[playerid][pass], 24);
}

public User_Data(playerid, name[], value[])
{
    INI_Int(Soldi, PlayerInfo[playerid][money]);
}


Così puoi usare uno dei due, per usare quello che vuoi usi appunto le extra data

Autore:  mitosking [ 14/08/2011, 1:32 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Ok credo di aver capito...

Autore:  S&C [ 14/08/2011, 15:53 ]
Oggetto del messaggio:  Re: [GUIDA]Uso del y_ini

Io non capisco bene l'INI_ParseFile, Me lo puoi spiegare meglio?

Pagina 1 di 2 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/