SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Español/Spanish > Lanzamientos/Releases

 
 
Thread Tools Display Modes
Old 15/03/2011, 05:57 PM   #1
leaNN!
Gangsta
 
Join Date: Jun 2009
Posts: 795
Reputation: 9
Default [Tutorial]Uso de Dini

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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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.
__________________
-MISTER ROOT ONE-

Last edited by leaNN!; 16/03/2011 at 02:13 PM. Reason: Agregadas funciones.
leaNN! is offline  
Old 15/03/2011, 06:04 PM   #2
DragonMu
Little Clucker
 
DragonMu's Avatar
 
Join Date: Nov 2009
Posts: 10
Reputation: 0
Default Respuesta: [Tutorial]Uso de Dini

Muy bueno Lean, bienvenido a los tutoriales para players que tardamos en entender xD
__________________
Includes
-[Include]Armas
DragonMu is offline  
Old 15/03/2011, 07:04 PM   #3
Code8976Man
Huge Clucker
 
Code8976Man's Avatar
 
Join Date: Oct 2009
Location: Stalingrad
Posts: 359
Reputation: 3
Default Respuesta: [Tutorial]Uso de Dini

Buen tutorial, hacía falta uno de estos.
__________________
__________________________________________________

Мощность - вымогательство - Гордость

' только невежественные манипулируют '

_____________________________________________


Code8976Man is offline  
Old 15/03/2011, 07:25 PM   #4
Lunnatiicz
High-roller
 
Lunnatiicz's Avatar
 
Join Date: Dec 2010
Location: Torreóи CФahuila
Posts: 1,495
Reputation: 7
Default Respuesta: [Tutorial]Uso de Dini

Muy bien Lean!

Conecciones no es así xD Es Conexiones :P Jojo saludos!
__________________

Lunnatiicz is offline  
Old 15/03/2011, 07:33 PM   #5
Code8976Man
Huge Clucker
 
Code8976Man's Avatar
 
Join Date: Oct 2009
Location: Stalingrad
Posts: 359
Reputation: 3
Default Respuesta: [Tutorial]Uso de Dini

Aunque dini ya se quedó atras, seria útil un tuto sobre y_ini por ejemplo, cosa que es mas complejo.
__________________
__________________________________________________

Мощность - вымогательство - Гордость

' только невежественные манипулируют '

_____________________________________________


Code8976Man is offline  
Old 15/03/2011, 07:57 PM   #6
leaNN!
Gangsta
 
Join Date: Jun 2009
Posts: 795
Reputation: 9
Default Respuesta: [Tutorial]Uso de Dini

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)
__________________
-MISTER ROOT ONE-
leaNN! is offline  
Old 15/03/2011, 08:23 PM   #7
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,649
Reputation: 239
Default Respuesta: [Tutorial]Uso de Dini

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 Code:
new Conecciones[MAX_PLAYERS];
debe ir fuera del callback OnPlayerConnect

= buen tuto. lo agrego a los demas cuando este terminado
__________________
TheChaoz is offline  
Old 15/03/2011, 09:07 PM   #8
MrDeath537
High-roller
 
Join Date: Nov 2009
Location: Argentina
Posts: 1,959
Reputation: 29
Default Re: [Tutorial]Uso de Dini

¿Y dónde explicás como usar dINI?

Yo no veo donde explicás como usar las funciones que trae.
__________________
Sometimes I return.
MrDeath537 is offline  
Old 15/03/2011, 09:49 PM   #9
SuperMarioRol
High-roller
 
SuperMarioRol's Avatar
 
Join Date: Dec 2009
Location: Castellón, Comunidad Valenciana, España
Posts: 1,726
Reputation: 13
Default Re: [Tutorial]Uso de Dini

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!!!
__________________


¿Necesitas que tu servidor esté en la lista "Hosted"?
¡Pues poco puedo ofrecerte! Me borraron la cuenta, parece
SuperMarioRol is offline  
Old 15/03/2011, 09:59 PM   #10
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,649
Reputation: 239
Default Respuesta: Re: [Tutorial]Uso de Dini

Quote:
Originally Posted by SuperMarioRol View Post
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
__________________
TheChaoz is offline  
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Admin tutorial with dini Freght Help Archive 2 12/02/2011 10:31 AM
Dini/Dudb Tutorial Torran Everything and Nothing 2 07/03/2010 12:57 PM


All times are GMT. The time now is 11:15 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.