SA-MP Forums

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

 
 
Thread Tools Display Modes
Old 16/03/2011, 02:45 PM   #1
leaNN!
Gangsta
 
Join Date: Jun 2009
Posts: 795
Reputation: 9
Default [Tutorial]Uso de Dini - Update 1

Hola gente!
Bueno, en el tutorial anterior explique las funciones de dini, para que servian y como usarlas.

Ahora, voy a explicarles como cargar y guardar datos.

Les dejo el codigo, explicado con comments.

pawn Code:
new Float:pX[MAX_PLAYERS], Float:pY[MAX_PLAYERS], Float:pZ[MAX_PLAYERS], NoPos[MAX_PLAYERS];
public OnPlayerConnect(playerid) //callback OnPlayerConnect, aqui se definen las cosas que pasaran cuando el player se conecte.
{
    new archivo[256], pname[MAX_PLAYER_NAME]; //Creamos "archivo" y "pname"
    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 el archivo exista:
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Cuando spawnees se cargara la ultima posicion en la que estuviste!"); //Enviamos un mensaje al jugador
    }
    else //En caso de que el archivo NO exista:
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "De ahora en mas, cuando spawnees se cargara la ultima posicion en la que estuviste!"); //Enviamos otro mensaje al jugador
    }
    return 1; // Cerramos el callback OnPlayerConnect.
}

public OnPlayerDisconnect(playerid, reason) //callback OnPlayerDisconnect, aqui se definen las cosas que pasaran cuando el player se desconecte.
{
    new archivo[256], pname[MAX_PLAYER_NAME]; //Creamos "archivo" y "pname"
    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 el archivo exista:
    {
        GetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]); //Obtenemos las coordenadas del jugador.
        dini_IntSet(archivo, "X", pX[playerid]); //Seteamos que "X" es igual a "pX[playerid]"
        dini_IntSet(archivo, "Y", pY[playerid]); //Seteamos que "Y" es igual a "pY[playerid]"
        dini_IntSet(archivo, "Z", pZ[playerid]); //Seteamos que "Z" es igual a "pZ[playerid]"
    }
    else //En caso de que el archivo NO exista:
    {
        dini_Create(archivo); //Creamos el archivo.
        GetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]); //Obtenemos las coordenadas del jugador.
        dini_IntSet(archivo, "X", pX[playerid]); //Seteamos que "X" es igual a "pX[playerid]"
        dini_IntSet(archivo, "Y", pY[playerid]); //Seteamos que "Y" es igual a "pY[playerid]"
        dini_IntSet(archivo, "Z", pZ[playerid]); //Seteamos que "Z" es igual a "pZ[playerid]"
    }
    return 1; // Cerramos el callback OnPlayerConnect.
}

public OnPlayerSpawn(playerid)
{
    new archivo[256], pname[MAX_PLAYER_NAME]; //Creamos "archivo" y "pname"
    GetPlayerName(playerid, pname, sizeof(pname)); //Obtenemos el nombre del jugador
    format(archivo, sizeof(archivo), "%s.ini", pname); //Le damos formato a "archivo".
    if(NoPos[playerid] == 0) // Nos aseguramos de que el jugador solo tome sus pos viejas cuando spawnea por primera vez.
    {
        if(dini_Exists(archivo)) // En caso de que el archivo exista,
        {
            pX[playerid] = dini_Int(archivo, "X"); //Obtenemos el valor de "X" y lo guardamos en "pX"
            pY[playerid] = dini_Int(archivo, "Y"); //Obtenemos el valor de "Y" y lo guardamos en "pY"
            pZ[playerid] = dini_Int(archivo, "Z"); //Obtenemos el valor de "Z" y lo guardamos en "pZ"
            SetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]); //Seteamos las coordenadas del jugador
        }
        else return 0; // Y en caso de que no exista, no se produce ninguna accion
    }
    else return 0; // Y en caso de que sea cualquier valor distinto a 0, no pasa nada.
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(NoPos[playerid] == 0)
    {
        NoPos[playerid] = 1;
    }
    return 1;
}


Esta todo en el codigo, no hay mucho que explicar acá.

Si tienen alguna duda, consulten.
__________________
-MISTER ROOT ONE-

Last edited by leaNN!; 16/03/2011 at 07:52 PM.
leaNN! is offline  
Old 16/03/2011, 04:55 PM   #2
[J]ulian
High-roller
 
[J]ulian's Avatar
 
Join Date: Feb 2010
Location: Argentina, Buenos Aires.
Posts: 1,684
Reputation: 94
Default Respuesta: [Tutorial]Uso de Dini - Update 1

Porqué no editás el mismo? Porque si vas a crear un tema para cada uno, va a quedar todo separado y cuando alguien lo quiera buscar no lo va a encontrar.


Por cierto, cada vez que muera irá donde se conectó. Tenes que hacer que en On..Death setee una variable a 1, y si esa variable es 1, se saltee lo del cargado de datos.
Un saludo!
__________________
Podrás imitarme, igualarme jamás.

Busco gente que sepa hacer mapas texturizados.
Para GameMode Roleplay que se aportará a la comunidad.
Interesados contacten por Mensaje Privado.


[J]ulian is offline  
Old 16/03/2011, 07:42 PM   #3
leaNN!
Gangsta
 
Join Date: Jun 2009
Posts: 795
Reputation: 9
Default Respuesta: [Tutorial]Uso de Dini - Update 1

Tenés razon con lo de OnPlayerDeath,no me di cuenta.

Y con respecto a lo de que juntos, los pongo por separado porque sino va a quedar un post todo feo, y ademas luego Chaoz los agregará a la lista de tutoriales, y seran mas faciles de buscar.
Agregando lo de OnPlayerDeath.
__________________
-MISTER ROOT ONE-
leaNN! is offline  
Old 16/03/2011, 09:35 PM   #4
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,656
Reputation: 239
Default Respuesta: [Tutorial]Uso de Dini - Update 1

Quote:
Originally Posted by leaNN! View Post
Tenés razon con lo de OnPlayerDeath,no me di cuenta.

Y con respecto a lo de que juntos, los pongo por separado porque sino va a quedar un post todo feo, y ademas luego Chaoz los agregará a la lista de tutoriales, y seran mas faciles de buscar.
Agregando lo de OnPlayerDeath.
ah raton me haces trabajar mas a mi
__________________
TheChaoz is offline  
Old 17/03/2011, 12:14 AM   #5
murdoxix
Gangsta
 
Join Date: Jan 2011
Posts: 560
Reputation: -4
Default Re: Respuesta: [Tutorial]Uso de Dini - Update 1

Quote:
Originally Posted by the_chaoz View Post
ah raton me haces trabajar mas a mi
Jajajajajaja!
Muy bueno el tutorial !

EDIT: SOY HUGE CLUCKER
__________________
murdoxix is offline  
Old 17/03/2011, 03:21 PM   #6
leaNN!
Gangsta
 
Join Date: Jun 2009
Posts: 795
Reputation: 9
Default Respuesta: [Tutorial]Uso de Dini - Update 1

Gracias murdox, ahora dentro de poco hago el update 2.
OFF:
Quote:
Originally Posted by Chaozman
ah raton me haces trabajar mas a mi
Exaaacto JAJAJAJAJAJAJAJA.
No desvirtuemos xD.
__________________
-MISTER ROOT ONE-
leaNN! is offline  
Old 18/03/2011, 12:08 AM   #7
superpol1
Little Clucker
 
Join Date: Jun 2008
Posts: 25
Reputation: 0
Default Re: [Tutorial]Uso de Dini - Update 1

Una pregunta de un novato XD
Es Necesario el return y el else, osea se podria usar menos lineas asi o no??
pawn Code:
public OnPlayerSpawn(playerid)
{
    new archivo[256], pname[MAX_PLAYER_NAME]; //Creamos "archivo" y "pname"
    GetPlayerName(playerid, pname, sizeof(pname)); //Obtenemos el nombre del jugador
    format(archivo, sizeof(archivo), "%s.ini", pname); //Le damos formato a "archivo".
    if(NoPos[playerid] == 0) // Nos aseguramos de que el jugador solo tome sus pos viejas cuando spawnea por primera vez.
    {
        if(dini_Exists(archivo)) // En caso de que el archivo exista,
        {
            pX[playerid] = dini_Int(archivo, "X"); //Obtenemos el valor de "X" y lo guardamos en "pX"
            pY[playerid] = dini_Int(archivo, "Y"); //Obtenemos el valor de "Y" y lo guardamos en "pY"
            pZ[playerid] = dini_Int(archivo, "Z"); //Obtenemos el valor de "Z" y lo guardamos en "pZ"
            SetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]); //Seteamos las coordenadas del jugador
        }// SIMPLEMENTE SE PUEDE SACAR EL ELSE?
    } // AQUI TAMBIEN.... O NO???
    return 1;
}
creo q el else es innecesario o me equivoco, corriganme please.
Y aprovechando el muy buen post de leann (siempre paro aprovechando XD), xq el dini o y_less o djson o etc de inc q sirven para manejar archivos son mas rapidos, yo que sepa los tres usan el fwrite o fread, etc del mismo samp? entoncs como son mas rapidos??, yo pienso que deberian ser mas lentos x la redundancia...
y Otra pregunta el Dini es + rapido que el fwrite, etc del samp?
GRACIAS X RESOLVER MIS DUDAD. Saludos
superpol1 is offline  
Old 18/03/2011, 06:15 PM   #8
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,656
Reputation: 239
Default Respuesta: Re: [Tutorial]Uso de Dini - Update 1

Quote:
Originally Posted by superpol1 View Post
Una pregunta de un novato XD
Es Necesario el return y el else, osea se podria usar menos lineas asi o no??
pawn Code:
public OnPlayerSpawn(playerid)
{
    new archivo[256], pname[MAX_PLAYER_NAME]; //Creamos "archivo" y "pname"
    GetPlayerName(playerid, pname, sizeof(pname)); //Obtenemos el nombre del jugador
    format(archivo, sizeof(archivo), "%s.ini", pname); //Le damos formato a "archivo".
    if(NoPos[playerid] == 0) // Nos aseguramos de que el jugador solo tome sus pos viejas cuando spawnea por primera vez.
    {
        if(dini_Exists(archivo)) // En caso de que el archivo exista,
        {
            pX[playerid] = dini_Int(archivo, "X"); //Obtenemos el valor de "X" y lo guardamos en "pX"
            pY[playerid] = dini_Int(archivo, "Y"); //Obtenemos el valor de "Y" y lo guardamos en "pY"
            pZ[playerid] = dini_Int(archivo, "Z"); //Obtenemos el valor de "Z" y lo guardamos en "pZ"
            SetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]); //Seteamos las coordenadas del jugador
        }// SIMPLEMENTE SE PUEDE SACAR EL ELSE?
    } // AQUI TAMBIEN.... O NO???
    return 1;
}
creo q el else es innecesario o me equivoco, corriganme please.
Y aprovechando el muy buen post de leann (siempre paro aprovechando XD), xq el dini o y_less o djson o etc de inc q sirven para manejar archivos son mas rapidos, yo que sepa los tres usan el fwrite o fread, etc del mismo samp? entoncs como son mas rapidos??, yo pienso que deberian ser mas lentos x la redundancia...
y Otra pregunta el Dini es + rapido que el fwrite, etc del samp?
GRACIAS X RESOLVER MIS DUDAD. Saludos
Bueno vamos de a pasos

si el else y esos return en este caso se pueden obiar.

la diferencia entre djson y_ini y los demas parsers de archivos es que dini x cada valor q escribe/lee abre y cierra el archivo mientras q los otros no, lo cual hace q sea mucho mas lento.

en realidad no, solo facilita el guardado de los datos y su posterior lectura.
__________________
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
Dini/Dudb Tutorial Torran Everything and Nothing 2 07/03/2010 12:57 PM
Password does not save in Update of Accounts [DINI] pagie1111 Help Archive 3 05/01/2010 07:24 PM
Problem tutorial retaking or update account stats Mechscape Help Archive 10 30/10/2009 05:34 PM


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


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