25.09.2013, 22:55
(
Последний раз редактировалось Adoniiz; 27.10.2013 в 13:51.
)
Uso de Y_INI
Hola a todos, he decidido crear este tutorial porque en la secciуn espaсola hay gente que tiene dudas sobre el funcionamiento de Y_INI o no sabe como funciona.En este tutorial, me estarй basando entre mis conocimientos, en el tutorial original de ****** y la wiki.sa-mp/ysi
Si tienes conocimientos con Dini, poco a poco entenderбs como funciona este. se te harб mas facil..
- Que es Y_INI?
Y_INI, actualmente es el include, codigo, sistema o como quieran llamarlo, mas rapido en guardar datos en una extensiуn .ini (tambien en otras ej: .cfg. txt etc)
- Descarga
Lo puedes descargar desde el topic de ******
https://sampforum.blast.hk/showthread.php?tid=321092
- Uso
Principalmente, tienes que declarar que vas a usar dicho include, queda asн
pawn Код:
#include <YSI\y_ini>
OJO: Si deseas guardar una contraseсa con WHIRPOOL (whirlpool hashes) con este sistema. tienes que aumentar el tamaсo bъfer del .AMX
pawn Код:
#define MAX_INI_ENTRY_TEXT 160
#include <YSI\y_ini>
Para leer archivos, y datos que contiene ese archivo ahi dos formas
-INI_Load
-INI_ParseFile
explicarй primero el funcionamiento de INI_Load.
- INI_Load
pawn Код:
// definiremos las variables que utilizaremos...
new Var1;
new Float:Var2;
new Var3[5] = Hola;
Var1 = dini_Get("miarchivo.ini", "a");
Var2 = dini_Get("miarchivo.ini", "b");
Var3 = dini_Get("miarchivo.ini", "c");
pawn Код:
a = 1
b = 2.02223
c = Hola
para sacar/cargar los datos que estбn guardados, serнa asн
pawn Код:
INI:miarchivo[](name[], value[])
{
INI_Int("a", Var1);
INI_Float("b", Var2);
INI_String("c", Var3, Longitud_de_Var3); // la longitud en este caso de Var3, es 5 ya que Var3[5]; "5" es la longitud, las celdas que definistes.
return 0; // Se tiene que retornar 0, segъn ******.
}
pawn Код:
CMD:cargardatos(playerid, params[])
{
INI_Load("miarchivo.ini");
SendClientMessage(playerid, -1, "Los datos de \"miarchivo.ini\" se han cargado con йxito!");
return 1;
}
- INI_ParseFile
pawn Код:
// como arriba, definiremos las variables
new Var1;
new Var2;
new Var3;
forward CargarDatos_Datos(name[], value[]);
CMD:cargardatos(playerid, params[])
{
INI_ParseFile("miarchivo.ini", "CargarDatos");
SendClientMessage(playerid, -1, "Los datos de \"miarchivo.ini\" se han cargado con йxito!");
return 1;
}
public CargarDatos_Datos(name[], value[])
{
INI_Int("a", Var1);
INI_Float("b", Var2);
INI_String("c", Var3, Longitud_de_Var3); // la longitud en este caso de Var3, es 5 ya que Var3[5]; "5" es la longitud, las celdas que definistes.
return 1;
}
pawn Код:
[Datos]
a = 1
b = 2.02223
c = Hola
- Guardando/escribiendo archivos/datos..
Para escribir datos tendremos que declarar que vamos a abrir el archivo y allн procederemos a escribir o reemplazar los datos..
En este caso le pondrй un ejemplo diferente al anterior.. esta vez guardando datos de un jugador
pawn Код:
CMD:modificar(playerid, params[])
{
new celdas[5] = "Hola";
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo,"Datos"); // esto si estбs usando INI_ParseFile, de lo contrario, lo podrнas quitar
INI_WriteString(archivo,"Texto", celdas);
INI_WriteInt(archivo,"Dinero", GetPlayerMoney(playerid));
INI_Close(archivo);
return 1;
}
INI_SetTag(archivo,"Datos"); - estamos diciendo que crearemos o que leera el tag "Datos" y esto hace que solo se carguen los datos que estan dentro de ese tag
un ejemplo:
pawn Код:
[Datos]
Dinero = 4000
[otrosDatos]
Dinero = 5000
INI_WriteInt(archivo,"Dinero",GetPlayerMoney(playe rid)); - aquн estamos escribiendo/creando un dato, en este caso, "Dinero". Dinero llevarб caracteres, texto lo que tu quieras guardar, pero aquн estoy declarando que se escribira o reemplazara el dinero que contiene el jugador que escribiу ese comando.
INI_WriteString(archivo,"Texto", celdas); -aquн escribiremos que se guarde el contenido de "celdas" en este caso "Hola"
INI_Close(archivo); - y aquн declaramos que se cierre el .ini y no sea modificable hasta que se abra.
Quedarнa asн en el archivo.
pawn Код:
[Datos] // Si no estбs usando el tag, no te aparecera esto.
Dinero = 4000
Texto = Hola
Tomaremos el mismo ejemplo anterior
pawn Код:
CMD:modificar(playerid, params[])
{
new celdas[5] = "Hola";
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo,"Datos"); // esto si estбs usando INI_ParseFile, de lo contrario, lo podrнas quitar
INI_WriteString(archivo,"Texto", celdas);
INI_WriteInt(archivo,"Dinero",GetPlayerMoney(playerid));
INI_WriteInt(archivo,"Score", GetPlayerScore(playerid));
INI_RemoveEntry(archivo, "Texto");
INI_Close(archivo);
return 1;
}
INI_WriteString(archivo,"Texto", celdas); - escribimos el dato
INI_RemoveEntry(archivo, "Texto"); - eliminaremos el dato (en este caso "Texto")
- Tags
en Y_INI, se utiliza tags para separar datos de otros, un ejemplo de ello es:
pawn Код:
[primerTag]
Score = 100
Vida = 100
[segundoTag]
Score = 50
Vida = 10
en INI_Load, es de estб forma:
pawn Код:
INI:miarchivo[nombredeltag](name[], value[])
{
// funciones
}
pawn Код:
INI:miarchivo[primerTag](name[], value[])
{
INI_Int("Score", VarScore[playerid]);
INI_Int("Vida", VarVida[playerid]);
return 1;
}
pawn Код:
en otras funciones...
SetPlayerScore(playerid, VarScore[playerid]); // para cada jugador
pawn Код:
INI_ParseFile("miarchivo.ini", "CargarDatos_%s",.bExtra = true, .extra = playerid);
їno sabes que significan esto: .bExtra = true, .extra = playerid? mбs abajo lo explicarй!
Eso serнa para cargar las variables a un jugador, por eso he puesto esto: .bExtra = true, .extra = playerid
ahora, tenemos que cargar las variables desde una callback
pawn Код:
forward CargarDatos_segundoTag(playerid, name[], value[]);
public CargarDatos_segundoTag(playerid, name[], value[])
{
INI_Int("Score", VarScore[playerid]);
INI_Int("Vida", VarVida[playerid]);
}
Diferencias:
Para cada jugador: aquн cada jugador tendrб una variable que tenga un valor de su personaje en su defecto
Global: la variable global ( new VarGlobal; ) esa variable, el valor para todos serб el mismo.
Para escribir un dato con tag's serнa como siempre, pero siempre se tiene que poner el INI_SetTag.
pawn Код:
CMD:modificar(playerid, params[])
{
new Float:VariableVida; GetPlayerHealth(playerid, VariableVida);
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo,"primerTag"); // para colocar el tag
INI_WriteInt(archivo,"Score", GetPlayerScore(playerid));
INI_WriteInt(archivo, "Vida", VariableVida);
INI_Close(archivo);
return 1;
}
Acб explicarй para que sirve cada funciуn y sus parametros
INI_Int
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
INI_Int solo lee numeros enteros (1, 2, 3, 4) si quieres leer por ejemplo, floats, debes usar INI_Float. al igual que string se usa INI_String
pawn Код:
new VarMaxPing;
// en el .ini
MaxPing = 500;
// cargandolo
INI_Int("MaxPing", VarMaxPing);
INI_Float
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
pawn Код:
new Float:VarChaleco; // es IMPORTANTE declarar la variable como " Float ", si no lo haces, no harб dicha acciуn ( almacenar '50.0' )
// en el .ini
Chaleco = 50.0;
// cargandolo
INI_Float("Chaleco", VarChaleco);
pawn Код:
new Float:VarCoordenadas; // es IMPORTANTE declarar la variable como " Float ", si no lo haces, no harб dicha acciуn ( almacenar '2500 1968 7.3' )
// en el .ini
Coordenadas = 2500 1968 7.3;
// cargandolo
if (!strcmp(name, "Coordenadas") && !sscanf(value, "fff", X, Y, Z))
{
INI_Float("Coordenadas",VarCoordenadas);
}
VarCoordenadas variable que serб seteada/modificada a 2500 1968 7.3.
INI_Bin
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
INI_Bin solo lee datos binarios ( ej: 0b1001101 )
pawn Код:
new VarCodigoBinario;
// en el .ini
Binario = 1001101;
// cargandolo
INI_Int("Binario", VarCodigoBinario);
INI_Hex
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
INI_Hex lee solo hexadecimales
pawn Код:
new VarHexadecimal;
// en el .ini
Hex = 0xFFFFFF;
// cargandolo
INI_Hex("Hex", VarHexadecimal);
INI_Bool
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
pawn Код:
new bool:VarBool;
// en el .ini
Bool = true;
// cargandolo
INI_Bool("Bool", VarBool);
INI_String
name[] - el nombre de la variable/dato guardad@
variable - La variable que guarda/almacena ese dato
longitud - Longitud de la variable
pawn Код:
new VarString[17]; // la longitud de esa variable es "17"
// en el .ini
String = Hola Forum SAMP;
// cargandolo
INI_String("String", VarString, 17); // o tambien puedes usar sizeof, pero es tu gusto.
INI_Open
filename[] - Nombre del INI a abrir
INI_Open abre el archivo .INI para empezar a modificar/setear/escribir valores y guardarlos en el archivo.
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini"); // abre el archivo (miarchivo.ini)
INI_SetTag(archivo, "NombreTag");
INI_WriteInt(archivo, "Valor", variablevalor);
INI_WriteString(archivo, "Texto", variablestring);
INI_Close(archivo);
INI_Close
INI:file - Nombre del archivo que sera modificado
INI_Close cierra el archivo INI para que esta no sea modificada
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteInt(archivo, "Valor", variablevalor);
INI_WriteString(archivo, "Texto", variablestring);
INI_Close(archivo); // cierra el archivo (miarchivo.ini)
INI:file - Nombre del archivo que sera modificado.
tag[] - Nombre del tag donde se guardan los datos de ese dicho tag
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag"); // nombre del tag que sera agregado.
INI_WriteInt(archivo, "Valor", variablevalor);
INI_WriteString(archivo, "Texto", variablestring);
INI_Close(archivo);
INI_RemoveEntry
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteInt(archivo, "Valor", variablevalor);
INI_WriteString(archivo, "Texto", variablestring);
INI_RemoveEntry(archivo, "Texto"); // se elimina el dato "Texto"
INI_Close(archivo);
INI_WriteString
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
data[] - Datos
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteString(archivo, "Texto", variablestring); // guarda el texto que estб dentro de la variable "variablestring"
INI_Close(archivo);
INI_WriteInt
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
data[] - Datos
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteInt(archivo, "Valor", variablevalor); // guarda el valor de la variable "variablevalor"
INI_Close(archivo);
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
data[] - Datos
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteHex(archivo, "Hex", variablehex); // guarda el valor hexadecimal de la variable "varhex"
INI_Close(archivo);
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
data[] - Datos (bool: true/false)
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteBool(archivo, "Bool", variablebool); // guarda el valor de la variable booleana (variablebool)
INI_Close(archivo);
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
data[] - Datos (numeros enteros)
pawn Код:
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteBin(archivo, "Bin", variablebin); // guarda el valor de la variable que tiene almacenada cуdigo binario (variablebin)
INI_Close(archivo);
INI_WriteFloat
INI:file - Nombre del archivo que sera modificado.
name[] - Nombre de datos
Float:data - Datos
accuracy - Nombre de decimales a escribir
pawn Код:
new Float:variablefloat;
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteFloat(archivo, "Float", variablefloat); // guarda el valor de la variable (variablefloat)
INI_Close(archivo);
si guardo una coordenada, y la coordenada es esta: 2.456433, si te das cuenta, la coordenada tiene 6 decimales, con accuracy lo disminuimos al nъmero que tu quieras, 2, 3, 4..
entonces:
pawn Код:
new Float:variablefloat;
new INI:archivo = INI_Open("miarchivo.ini");
INI_SetTag(archivo, "NombreTag");
INI_WriteFloat(archivo, "Float", variablefloat, 2); // 2 es el nъmero de decimales que contendrб ese valor, queda asн: 2.45
INI_Close(archivo);
INI_Load
filename[] - Nombre del archivo a cargar/leer
bool:bExtra - Leer datos adicionales
extra - Datos adicionales a leer
bLocal - Funciones de llamada local en lugar de los globales.
leyendo un archivo sin parametros adicionales
pawn Код:
INI_Load(nombredearchivo);
pawn Код:
INI_Load(nombredearchivo, true, playerid);
pawn Код:
INI:nombredearchivo[nombretag](playerid, name[], value[])
{
// funciones, INI_Int y todo eso.
}
pawn Код:
INI_Load(nombredearchivo, .bLocal = false);
filename[] - Nombre del archivo a cargar/leer
remoteFormat[] - Funciуn a llamar
bool:bFileFirst - El orden de la funciуn a llamar (Que pase primero el archivo)
bool:bExtra - Leer datos adicionales
extra - El dato a leer
bLocal - Funciones de llamada local en lugar de los globales.
bool:bPassTag - El orden de la funciуn a llamar (Que pase despuйs el tag, es decir, que estй donde estб el name[],value[])
remoteFormat - define el formato o orden a la hora de llamar la funciуn. ejemplo:
si estamos leyendo el archivo de de estб forma en la callback
pawn Код:
forward CargarDatos_Datos(name[], value[]);
public CargarDatos_Datos(name[], value[])
pawn Код:
INI_ParseFile("miarchivo.ini", "CargarDatos_%s");
bFileFirst - Esto intercambia el orden de los datos que se pasan al formato de la funciуn, si esto es cierto (por defecto falso (false) ) la primera %s en el remoteFormat es el nombre del archivo y el segundo es el tag.
pawn Код:
forward CargarDatos_miarchivo_Datos(name[], value[]);
public CargarDatos_miarchivo_Datos(name[], value[])
pawn Код:
INI_ParseFile("miarchivo.ini", "CargarDatos_%s_%s", .bFileFirst = true); // primero el nombre del archivo (primer %s) y de segundo el nombre del tag (segundo %s)
es decir, que sн se llamarнa o se coloca el bPassTag en INI_ParseFile, en la callback se ordena de esta forma, y tambiйn se cargarнan todos los datos de todos los tags de una sola vez:
pawn Код:
forward CargarDatos(tag[], name[], value[]);
public CargarDatos(tag[], name[], value[])
{
if (!strcmp(tag, "primernombretag"))
{
// funciones, datos
}
if (!strcmp(tag, "segundonombretag"))
{
// funciones, datos
}
}
pawn Код:
INI_ParseFile("miarchivo.ini", "CargarDatos", .bPassTag = true);
he aquн un ejemplo para que se carguen los datos para cada jugador (sus propios datos guardados)
pawn Код:
forward CargarDatos_Datos(playerid, name[], value[]);
public CargarDatos_Datos(playerid, name[], value[])
pawn Код:
INI_ParseFile(archivodejugador(playerid), "CargarDatos_%s", .bExtra = true, .extra = playerid);
pawn Код:
forward CargarDatos(playerid, tag[], name[], value[]);
public CargarDatos(playerid, tag[], name[], value[])
pawn Код:
INI_ParseFile(archivodejugador(playerid), "CargarDatos",.bExtra = true, .extra = playerid, .bPassTag = true);
pawn Код:
#define Jugadores "Jugadores/%s.ini"
stock archivodejugador(playerid)
{
new Celdas[128], Nombre[MAX_PLAYER_NAME];
GetPlayerName(playerid,Nombre,sizeof(Nombre));
format(Celdas,128,Jugadores,Nombre);
return Celdas;
}
ejemplo:
pawn Код:
forward CargarDatos_miarchivo(playerid, tag[], name[], value[]);
public CargarDatos_miarchivo(playerid, tag[], name[], value[])
{
}
en INI_ParseFile:
pawn Код:
INI_ParseFile("miarchivo.ini", "Load_%s", true, true, playerid, false, true);
si no entendistes, fijate el orden de los parametros. de donde comenzу INI_ParseFile
- Tiempos, comparaciуn entre otros sistemas
resaltare esta nota de ******
Код:
dini: 63810 - Sн, un poco mбs de un minuto (63810 milisegundos) yini: 1564 - Sн, es un poco mбs de un segundo yini y dini 1: 6009 - Un poco mбs de 6 segundos, o en su defecto, 6 segundos. yini y dini 2: 91159 - Alrededor de un minuto y medio SII: 52807 - 52 segundos
****** por Y_INI
SA-MP Wiki y ****** - tutorial de Y_INI, sin eso no habrнa aprendido a usarlo.
Y a mн por poder enseсarles a como usar Y_INI.
Si me ha faltado explicar algo, o me equivoquй, por favor haganme avisar para modificarlo