15.03.2011, 17:57
(
Последний раз редактировалось leaNN!; 16.03.2011 в 14:13.
Причина: Agregadas funciones.
)
Hola gente!
Bueno, que yo sepa no hay ningun post en espaсol en el que se explique el funcionamiento de Dini (by Dracoblue).
Ya se que este Include esta desactualizado, pero yo actualmente lo uso y no me ha traido ningun problema, y me funciona mas que bien.
Introducciуn
Dini es un sistema de cargado de datos, creado por Draco Blue.
En este tutorial les voy a enseсar su uso: cargado y guardado de datos, creacion y borrado de archivos, etc.
Funciones
dini_Create(filename[]); Crea un archivo con el nombre especificado.
dini_Exists(filename[]); Se usa en if's. Detecta si el archivo ya existe
dini_Remove(filename[]); Elimina el archivo especificado.
dini_Int(filename[], key[]); Obtiene el valor de "key"
dini_IntSet(filename[], key[], value); Cambia el valor de "key".
Funciones - Modo de Uso
dini_Create(filename[]);
dini_Exists(filename[]);
dini_Remove(filename[]);
dini_Int(filename[], key[]); y dini_IntSet(filename[], key[], value);
Gracias Muerteman por el comment, ahi agregue para que sirve cada una de las funciones y como usarlas.
Gracias Chaozman por el comment, ahi cambie la ubicacion de Conecciones[MAX_PLAYERS];
Ejemplos
Bueno, voy a usar un ejemplo bien bбsico, dejare el pawn y lo explicare con comments (//)
En este ejemplo, hemos creado el archivo "NOMBREDELJUGADOR.ini".
Bueno, ese es un ejemplo bбsico del uso de Dini para lectura y creado de archivos.
Ahora vamos a hacer lo mismo, solo que vamos a contar las veces que el jugador se conecto al servidor.
En este ejemplo, hemos creado el archivo "NOMBREDELJUGADOR.ini" y hemos creado el valor "Conecciones" dentro del mismo, que cada vez que el jugador se conecte aumentara su valor en 1.
Lo irй completando de a poco, por ahora dejo esto para que vayan viendo y probando.
Proximos updates:
Update 1: Cargar y guardar posiciones al conectarse/desconectarse.
Update 2: Usar X skin guardado por el usuario. Crear comando /stats.
Update 3: Sistema de registro bбsico.
Update 4: Sistema de niveles con premios.
Update 5: Sistema de Administracion bбsico (/kick, /ban, /warn, /unban, /savepos, /loadpos)
No se cuantos update's mas habrб, esos 5 estan asegurados.
Bueno, eso es todo por ahorita.
Bueno, que yo sepa no hay ningun post en espaсol en el que se explique el funcionamiento de Dini (by Dracoblue).
Ya se que este Include esta desactualizado, pero yo actualmente lo uso y no me ha traido ningun problema, y me funciona mas que bien.
Introducciуn
Dini es un sistema de cargado de datos, creado por Draco Blue.
En este tutorial les voy a enseсar su uso: cargado y guardado de datos, creacion y borrado de archivos, etc.
Funciones
dini_Create(filename[]); Crea un archivo con el nombre especificado.
dini_Exists(filename[]); Se usa en if's. Detecta si el archivo ya existe
dini_Remove(filename[]); Elimina el archivo especificado.
dini_Int(filename[], key[]); Obtiene el valor de "key"
dini_IntSet(filename[], key[], value); Cambia el valor de "key".
Funciones - Modo de Uso
dini_Create(filename[]);
pawn Код:
public OnPlayerConnect(playerid)
{
new archivo[256], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(archivo, sizeof(archivo), "%s.ini", pname);
dini_Create(archivo);
return 1;
}
pawn Код:
public OnPlayerConnect(playerid)
{
new archivo[256], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(archivo, sizeof(archivo), "%s.ini", pname);
if(!dini_Exists(archivo)) return dini_Create(archivo);
return 1;
}
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/borrar", 7) == 0)
{
new archivo[256], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(archivo, sizeof(archivo), "%s.ini", pname);
if(!dini_Exists(archivo)) return 0;
dini_Remove(archivo);
}
return 1;
}
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/spos", 5) == 0)
{
new archivo[256], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(archivo, sizeof(archivo), "%s.ini", pname);
if(!dini_Exists(archivo)) return dini_Create(archivo);
GetPlayerPos(playerid, dini_IntSet(archivo, "X"), dini_IntSet(archivo, "Y"), dini_IntSet(archivo, "Z"));
SendClientMessage(playerid, 0xFFFFFFFF, "Tu posicion ha sido guardadas! Utiliza /lpos para ir hacia ellas.");
}
if(strcmp(cmdtext, "/lpos", 5) == 0)
{
new archivo[256], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(archivo, sizeof(archivo), "%s.ini", pname);
if(!dini_Exists(archivo)) return dini_Create(archivo);
SetPlayerPos(playerid, dini_Int(archivo, "X"), dini_Int(archivo, "Y"), dini_Int(archivo, "Z"));
SendClientMessage(playerid, 0xFFFFFFFF, "Tu posicion fue cargada. Para cambiarla, utiliza /spos");
}
return 1;
}
Gracias Chaozman por el comment, ahi cambie la ubicacion de Conecciones[MAX_PLAYERS];
Ejemplos
Bueno, voy a usar un ejemplo bien bбsico, dejare el pawn y lo explicare con comments (//)
pawn Код:
public OnPlayerConnect(playerid) //callback OnPlayerConnect, aqui se definen las cosas que pasaran cuando el player se conecte.
{
new archivo[256], pname[MAX_PLAYER_NAME], str[128]; //Creamos "archivo" , "pname" y "str"
GetPlayerName(playerid, pname, sizeof(pname)); //Obtenemos el nombre del jugador
format(archivo, sizeof(archivo), "%s.ini", pname); //Le damos formato a "archivo".
if(dini_Exists(archivo)) //En caso de que un archivo con ese nombre ya exista:
{
format(str, sizeof(str), "Bienvenido de nuevo, %s!", pname); // Le damos formato a "str"
SendClientMessage(playerid, 0xFFFFFFFF, str); // Enviamos str al jugador.
}
else //En cambio, si el archivo no existia:
{
format(str, sizeof(str), "Bienvenido %s! Es tu primera vez en el servidor.", pname); // Le damos formato a "str"
SendClientMessage(playerid, 0xFFFFFFFF, str); // Enviamos str al jugador.
dini_Create(archivo); //Creamos un archivo con el nombre del jugador
}
return 1; // Cerramos el callback OnPlayerConnect.
}
Bueno, ese es un ejemplo bбsico del uso de Dini para lectura y creado de archivos.
Ahora vamos a hacer lo mismo, solo que vamos a contar las veces que el jugador se conecto al servidor.
pawn Код:
new Conecciones[MAX_PLAYERS]; // Creamos "Conecciones" para cada uno de los jugadores.
public OnPlayerConnect(playerid) //callback OnPlayerConnect, aqui se definen las cosas que pasaran cuando el player se conecte.
{
new archivo[256], pname[MAX_PLAYER_NAME], str[128]; //Creamos "archivo" , "pname" y "str"
GetPlayerName(playerid, pname, sizeof(pname)); //Obtenemos el nombre del jugador
format(archivo, sizeof(archivo), "%s.ini", pname); //Le damos formato a "archivo".
if(dini_Exists(archivo)) //En caso de que un archivo con ese nombre ya exista:
{
format(str, sizeof(str), "Bienvenido de nuevo, %s!", pname); // Le damos formato a "str"
SendClientMessage(playerid, 0xFFFFFFFF, str); // Enviamos str al jugador.
Conecciones[playerid] = dini_Int(archivo, "Conecciones"); //Conecciones[playerid] toma el valor de "Conecciones"
dini_IntSet(archivo, "Conecciones", Conecciones[playerid] +1); // Agregamos +1 a "Conecciones"
format(str, sizeof(str), "Levas %d veces entrando al servidor", dini_Int(archivo, Conecciones));
}
else //En cambio, si el archivo no existia:
{
format(str, sizeof(str), "Bienvenido %s! Es tu primera vez en el servidor.", pname); // Le damos formato a "str"
SendClientMessage(playerid, 0xFFFFFFFF, str); // Enviamos str al jugador.
dini_Create(archivo); //Creamos un archivo con el nombre del jugador
dini_IntSet(archivo, "Conecciones", Conecciones[playerid] +1); // Agregamos +1 a "Conecciones"
}
return 1; // Cerramos el callback OnPlayerConnect.
}
Lo irй completando de a poco, por ahora dejo esto para que vayan viendo y probando.
Proximos updates:
Update 1: Cargar y guardar posiciones al conectarse/desconectarse.
Update 2: Usar X skin guardado por el usuario. Crear comando /stats.
Update 3: Sistema de registro bбsico.
Update 4: Sistema de niveles con premios.
Update 5: Sistema de Administracion bбsico (/kick, /ban, /warn, /unban, /savepos, /loadpos)
No se cuantos update's mas habrб, esos 5 estan asegurados.
Bueno, eso es todo por ahorita.