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 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 . |
Autore: | Giovanni94m [ 23/06/2011, 22:30 ] |
Oggetto del messaggio: | Re: [GUIDA]Uso del y_ini |
Angelo ha scritto: Grazie mille giova 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 . |
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 |
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/ |