[Tutorial]Uso de Dini
#1

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[]);
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;
}
dini_Exists(filename[]);
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;
}
dini_Remove(filename[]);
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;
}
dini_Int(filename[], key[]); y dini_IntSet(filename[], key[], value);
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 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 (//)
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.
}
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.

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.
}
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.
Reply
#2

Muy bueno Lean, bienvenido a los tutoriales para players que tardamos en entender xD
Reply
#3

Buen tutorial, hacнa falta uno de estos.
Reply
#4

Muy bien Lean!

Conecciones no es asн xD Es Conexiones :P Jojo saludos!
Reply
#5

Aunque dini ya se quedу atras, seria ъtil un tuto sobre y_ini por ejemplo, cosa que es mas complejo.
Reply
#6

Lunna, lo pense mientras lo hacia pero ignore mis pensamientos xD.

Codeman, es cierto, estaria bueno hacer un tutto sobre y_ini o DJSon, son mas completos y rapidos seguramente, pero yo estoy aprendiendo a usarlos y no quiero confundir a otros con mis pocos conocimientos sobre los mismos.
Cuando los maneje mas o menos bien, hare tutoriales de los dos sistemas mencionados. (y_ini y DJSon)
Reply
#7

Un par de cosas:
1є hay un tuto de como crear un sist de registro con dini asi q es =.
2є el codigo dos no funciona correctamente. їPor quй?
pawn Код:
new Conecciones[MAX_PLAYERS];
debe ir fuera del callback On‌PlayerConnect

= buen tuto. lo agrego a los demas cuando este terminado
Reply
#8

їY dуnde explicбs como usar dINI?

Yo no veo donde explicбs como usar las funciones que trae.
Reply
#9

Que crueldad :P
Es una explicaciуn mas prбctica de como usarlo.
Buen post, pero podrнa estar en lanzamientos con el prefijo [TUTORIAL] no? :P

PD: HIgh ROller!!!
Reply
#10

Quote:
Originally Posted by SuperMarioRol
Посмотреть сообщение
Que crueldad :P
Es una explicaciуn mas prбctica de como usarlo.
Buen post, pero podrнa estar en lanzamientos con el prefijo [TUTORIAL] no? :P

PD: HIgh ROller!!!
bien ahi mario. pd: si pero son mas visibles en esta seccion
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)