[TUT]Arrays para informaзхes de players
#1

jDB - Sistema de Arrays bбsicas para guardar valores por players

Sistema original - LARP

Edit por:

LeLeTe


Isto й ъtil para:
-Salvar informaзхes de um player, como kills, dinheiro, carros, armas, etc;
-Podem ser setadas, lidas, e escritas rapidamente;
-Fбcil de serem implementadas;


Bom, nгo hб muito o que explicar se vocк entendeu as pequenas descriзхes feitas no arquivo.

pawn Код:
//No Comeзo de Seu GM, Antes de Qualquer Public, adicione:
enum jInfo //Adicione aqui novas Vars, como exemplo: jChaveDaCasa;
{
    jArma1,
    jArma2,
    jArma3,
    jArma4,
    jArma5,
    jArma6,
    jArma7,
    jArma8,
    jArma9,
    jArma10,
    jArma11,
    jMunicao1,
    jMunicao2,
    jMunicao3,
    jMunicao4,
    jMunicao5,
    jMunicao6,
    jMunicao7,
    jMunicao8,
    jMunicao9,
    jMunicao10,
    jMunicao11,
    jChaveDoCarro,
    //jString[Tamanho_Da_String], //Exemplo de como definir uma nova string
    //Float:jFloat, //Exemplo de como definir um novo float. Notem que o nome da variavel, no caso "jFloat", deve ser escrita DEPOIS de Float:
    //jVar, //Exemplo de como definir uma nova variбvel(var)
}

new JogadorDataBase[MAX_PLAYERS][jInfo];

//Adicione isso no meio de qualquer public;

forward J_Salvar(playerid);
forward J_Carregar(playerid);
public J_Salvar(playerid)//Aqui, adicione a var que vocк criou no Enum. Veja exemplos abaixo.
{
    if(IsPlayerConnected(playerid))
    {
        new string3[64];
        new playername3[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername3, sizeof(playername3));
        format(string3, sizeof(string3), "LeLeTe/%s.ini", playername3);
        new File: hFile = fopen(string3, io_write);
        if (hFile)
        {
            new var[64];
            //format(var, 64, "jString=%s\n", JogadorDataBase[playerid][jString]);fwrite(hFile, var) //Isso salva uma string criada (jstring) na DB do player
            //format(var, 64, "jString=%s\n", JogadorDataBase[playerid][jString]);fwrite(hFile, var) //Isso salva um float criado (jFloat) na DB do player
            format(var, 64, "jArma1=%d\n", JogadorDataBase[playerid][jArma1]);fwrite(hFile, var);
            format(var, 64, "jArma2=%d\n", JogadorDataBase[playerid][jArma2]);fwrite(hFile, var);
            format(var, 64, "jArma3=%d\n", JogadorDataBase[playerid][jArma3]);fwrite(hFile, var);
            format(var, 64, "jArma4=%d\n", JogadorDataBase[playerid][jArma4]);fwrite(hFile, var);
            format(var, 64, "jArma5=%d\n", JogadorDataBase[playerid][jArma5]);fwrite(hFile, var);
            format(var, 64, "jArma6=%d\n", JogadorDataBase[playerid][jArma6]);fwrite(hFile, var);
            format(var, 64, "jArma7=%d\n", JogadorDataBase[playerid][jArma7]);fwrite(hFile, var);
            format(var, 64, "jArma8=%d\n", JogadorDataBase[playerid][jArma8]);fwrite(hFile, var);
            format(var, 64, "jArma9=%d\n", JogadorDataBase[playerid][jArma9]);fwrite(hFile, var);
            format(var, 64, "jArma10=%d\n", JogadorDataBase[playerid][jArma10]);fwrite(hFile, var);
            format(var, 64, "jArma11=%d\n", JogadorDataBase[playerid][jArma11]);fwrite(hFile, var);
            format(var, 64, "jMunicao1=%d\n", JogadorDataBase[playerid][jMunicao1]);fwrite(hFile, var);
            format(var, 64, "jMunicao2=%d\n", JogadorDataBase[playerid][jMunicao2]);fwrite(hFile, var);
            format(var, 64, "jMunicao3=%d\n", JogadorDataBase[playerid][jMunicao3]);fwrite(hFile, var);
            format(var, 64, "jMunicao4=%d\n", JogadorDataBase[playerid][jMunicao4]);fwrite(hFile, var);
            format(var, 64, "jMunicao5=%d\n", JogadorDataBase[playerid][jMunicao5]);fwrite(hFile, var);
            format(var, 64, "jMunicao6=%d\n", JogadorDataBase[playerid][jMunicao6]);fwrite(hFile, var);
            format(var, 64, "jMunicao7=%d\n", JogadorDataBase[playerid][jMunicao7);fwrite(hFile, var);
            format(var, 64, "jMunicao8=%d\n", JogadorDataBase[playerid][jMunicao8]);fwrite(hFile, var);
            format(var, 64, "jMunicao9=%d\n", JogadorDataBase[playerid][jMunicao9]);fwrite(hFile, var);
            format(var, 64, "jMunicao10=%d\n", JogadorDataBase[playerid][jMunicao10]);fwrite(hFile, var);
            format(var, 64, "jMunicao11=%d\n", JogadorDataBase[playerid][jMunicao11]);fwrite(hFile, var);
            format(var, 64, "jChaveDoCarro=%d\n", JogadorDataBase[playerid][jChaveDoCarro]);fwrite(hFile, var);
            fclose(hFile);
        }
    }
    return 1;
}

public J_Carregar(playerid)
{
    new tmp2[128];
    new string2[64];
    new playername2[MAX_PLAYER_NAME];
    new playernamesplit[3][MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    split(playername2, playernamesplit, '_');
    format(string2, sizeof(string2), "LeLeTe/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
        new key[ 256 ] , val[ 256 ];
        new Data[ 256 ];
        while ( fread( UserFile , Data , sizeof( Data ) ) )
        {
            key = ini_GetKey( Data );
            if( strcmp( key , "jArma1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma1] = strval( val ); }
            if( strcmp( key , "jArma2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma2] = strval( val ); }
            if( strcmp( key , "jArma3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma3] = strval( val ); }
            if( strcmp( key , "jArma4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma4] = strval( val ); }
            if( strcmp( key , "jArma5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma5] = strval( val ); }
            if( strcmp( key , "jArma6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma6] = strval( val ); }
            if( strcmp( key , "jArma7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma7] = strval( val ); }
            if( strcmp( key , "jArma8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma8] = strval( val ); }
            if( strcmp( key , "jArma9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma9] = strval( val ); }
            if( strcmp( key , "jArma10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma10] = strval( val ); }
            if( strcmp( key , "jArma11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma11] = strval( val ); }
            if( strcmp( key , "jMunicao1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao1] = strval( val ); }
            if( strcmp( key , "jMunicao2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao2] = strval( val ); }
            if( strcmp( key , "jMunicao3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao3] = strval( val ); }
            if( strcmp( key , "jMunicao4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao4] = strval( val ); }
            if( strcmp( key , "jMunicao5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao5] = strval( val ); }
            if( strcmp( key , "jMunicao6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao6] = strval( val ); }
            if( strcmp( key , "jMunicao7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao7] = strval( val ); }
            if( strcmp( key , "jMunicao8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao8] = strval( val ); }
            if( strcmp( key , "jMunicao9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao9] = strval( val ); }
            if( strcmp( key , "jMunicao10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao10] = strval( val ); }
            if( strcmp( key , "jMunicao11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao11] = strval( val ); }
            if( strcmp( key , "jChaveDoCarro" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jChaveDoCarro] = strval( val ); }
            //if( strcmp( key , "jFloat" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jFloat] = floatstr( val ); } // Notem que somente quando vocк define um Float vocк deve usar a tag "Float:"
            //if( strcmp( key , "jString" , true ) == 0 ) { val = ini_GetValue( Data ); strmid(JogadorDataBase[playerid][jString], val, 0, strlen(val)-1, 255); } //Use este exemplo para salvar strings.
        }
        fclose(UserFile);
    }
    return 1;
}

forward ini_GetKey( line[] )
forward ini_GetValue( line[] )
stock ini_GetKey( line[] )
{
    new keyRes[256];
    keyRes[0] = 0;
    if ( strfind( line , "=" , true ) == -1 ) return keyRes;
    strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
    return keyRes;
}

stock ini_GetValue( line[] )
{
    new valRes[256];
    valRes[0]=0;
    if ( strfind( line , "=" , true ) == -1 ) return valRes;
    strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
    return valRes;
}


Ainda nгo entendeu? Ok ._.


pawn Код:
enum jInfo //Adicione aqui novas Vars, como exemplo: jChaveDaCasa;
{
    jArma1,
    jArma2,
    jArma3,
    jArma4,
    jArma5,
    jArma6,
    jArma7,
    jArma8,
    jArma9,
    jArma10,
    jArma11,
    jMunicao1,
    jMunicao2,
    jMunicao3,
    jMunicao4,
    jMunicao5,
    jMunicao6,
    jMunicao7,
    jMunicao8,
    jMunicao9,
    jMunicao10,
    jMunicao11,
    jChaveDoCarro,
    //jString[Tamanho_Da_String], //Exemplo de como definir uma nova string
    //Float:jFloat, //Exemplo de como definir um novo float. Notem que o nome da variavel, no caso "jFloat", deve ser escrita DEPOIS de Float:
    //jVar, //Exemplo de como definir uma nova variбvel(var)
}

new JogadorDataBase[MAX_PLAYERS][jInfo];


O que isso faz?


enum [QualquerNome] serve para ENUMERAR um grupo de arrays, ou valores dentro de uma array.

No caso, o enum se chama jInfo.

Logo abaixo, temos os valores da array enumerada.

pawn Код:
{
    jArma1,
    jArma2,
    jArma3,
    jArma4,
    jArma5,
    jArma6,
    jArma7,
    jArma8,
    jArma9,
    jArma10,
    jArma11,
    jMunicao1,
    jMunicao2,
    jMunicao3,
    jMunicao4,
    jMunicao5,
    jMunicao6,
    jMunicao7,
    jMunicao8,
    jMunicao9,
    jMunicao10,
    jMunicao11,
    jChaveDoCarro,
}
Cada valor aqui enumerado, e separado por vнrgula, reperesenta uma "coordenada" da array jInfo.

Definindo arrays assim, podemos guardar um valor Integer, ou um nъmero. Seja ele positivo ou negativo.

pawn Код:
{
    jArma1,
    jArma2,
    jArma3,
    jArma4,
    jArma5,
    jArma6,
    jArma7,
    jArma8,
    jArma9,
    jArma10,
    jArma11,
    jMunicao1,
    jMunicao2,
    jMunicao3,
    jMunicao4,
    jMunicao5,
    jMunicao6,
    jMunicao7,
    jMunicao8,
    jMunicao9,
    jMunicao10,
    jMunicao11,
    jChaveDoCarro,
    jString[Tamanho_Da_String],
}
Perceba que agora inseri uma nova "coordenada" no array. jString.


Ela irб agora servir para podermos salvar Strings. Cada string equivale a uma letra. Ou seja, a palavra "String" contйm 6 letras. Entгo, se deve usar jString[7].

Porquк jString[7] e nгo jString[6]?

Pois numa array, deve se existir o carбctere "NULL", para identificar o tйrmino da aзгo.

O que significa que:

jString[7] = {"S", "t", "r", "i", "n", "g", \n};

O \n Identifica o carбctere NULL, cujo identifica o tйrmino do array.


Voltando ao assunto...

Para salvar qualquer String em algo simplesmente digite j[nomedasuastring][tamanhodesuastring],

Exemplo:

jDescriзгo[128];


pawn Код:
{
    jArma1,
    jArma2,
    jArma3,
    jArma4,
    jArma5,
    jArma6,
    jArma7,
    jArma8,
    jArma9,
    jArma10,
    jArma11,
    jMunicao1,
    jMunicao2,
    jMunicao3,
    jMunicao4,
    jMunicao5,
    jMunicao6,
    jMunicao7,
    jMunicao8,
    jMunicao9,
    jMunicao10,
    jMunicao11,
    jChaveDoCarro,
    jString[Tamanho_Da_String],
    Float:jFloat,
}
Agora, foi adicionado a coordenada Float:jFloat,

O que ela faz?

Ela guarda um valor float. Para quem nгo sabe, valores FLOAT sгo nъmeros quebrados. Ex: 1,50.

Algo que й de extrema importвncia ressaltar, й que a tag "FLOAT:" serve somente para identificar que o que vem escrito depois "jFloat". Ou Seja, nгo use Float:jFloat toda vez que for usar este float.

Isso significa que vocк sу deve usar 'Float:' quando definir a variбvel (No nosso caso, jFloat);

Exemplo Abaixo:

GetPlayerHealth(playerid, JogadorDataBase[playerid][jFloat]); // EXEMPLO CERTO!!!
GetPlayerHealth(playerid, JogadorDataBase[playerid][Float:jFloat]); // EXEMPLO ERRADO!


pawn Код:
new JogadorDataBase[MAX_PLAYERS][jInfo];
O que isso faz?

Define o nosso conjunto de arrays para players.

JogadorDataBase = Nome da nossa array principal. Pode ser qualquer nome.

[MAX_PLAYERS] = Tamanho da array principal. Ou seja, serб um jInfo (Array que guarda valores) para cada player.
Vocк pode definir como 200, por exemplo, para terem 199 jInfos (Lembrando de novo, que nгo sгo 200 pelo fato do ъltimo carбctere da array, que finaliza ela.).

[jInfo] = Array enumerada, a que guarda os valores descritos nela. Pode ser qualquer nome. O tamanho dela й definido no Enum.

pawn Код:
forward J_Salvar(playerid);
public J_Salvar(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new string3[64];
        new playername3[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername3, sizeof(playername3));
        format(string3, sizeof(string3), "LeLeTe/%s.ini", playername3);
        new File: hFile = fopen(string3, io_write);
        if (hFile)
        {
            new var[64];
            format(var, 64, "jArma1=%d\n", JogadorDataBase[playerid][jArma1]);fwrite(hFile, var);
            format(var, 64, "jArma2=%d\n", JogadorDataBase[playerid][jArma2]);fwrite(hFile, var);
            format(var, 64, "jArma3=%d\n", JogadorDataBase[playerid][jArma3]);fwrite(hFile, var);
            format(var, 64, "jArma4=%d\n", JogadorDataBase[playerid][jArma4]);fwrite(hFile, var);
            format(var, 64, "jArma5=%d\n", JogadorDataBase[playerid][jArma5]);fwrite(hFile, var);
            format(var, 64, "jArma6=%d\n", JogadorDataBase[playerid][jArma6]);fwrite(hFile, var);
            format(var, 64, "jArma7=%d\n", JogadorDataBase[playerid][jArma7]);fwrite(hFile, var);
            format(var, 64, "jArma8=%d\n", JogadorDataBase[playerid][jArma8]);fwrite(hFile, var);
            format(var, 64, "jArma9=%d\n", JogadorDataBase[playerid][jArma9]);fwrite(hFile, var);
            format(var, 64, "jArma10=%d\n", JogadorDataBase[playerid][jArma10]);fwrite(hFile, var);
            format(var, 64, "jArma11=%d\n", JogadorDataBase[playerid][jArma11]);fwrite(hFile, var);
            format(var, 64, "jMunicao1=%d\n", JogadorDataBase[playerid][jMunicao1]);fwrite(hFile, var);
            format(var, 64, "jMunicao2=%d\n", JogadorDataBase[playerid][jMunicao2]);fwrite(hFile, var);
            format(var, 64, "jMunicao3=%d\n", JogadorDataBase[playerid][jMunicao3]);fwrite(hFile, var);
            format(var, 64, "jMunicao4=%d\n", JogadorDataBase[playerid][jMunicao4]);fwrite(hFile, var);
            format(var, 64, "jMunicao5=%d\n", JogadorDataBase[playerid][jMunicao5]);fwrite(hFile, var);
            format(var, 64, "jMunicao6=%d\n", JogadorDataBase[playerid][jMunicao6]);fwrite(hFile, var);
            format(var, 64, "jMunicao7=%d\n", JogadorDataBase[playerid][jMunicao7);fwrite(hFile, var);
            format(var, 64, "jMunicao8=%d\n", JogadorDataBase[playerid][jMunicao8]);fwrite(hFile, var);
            format(var, 64, "jMunicao9=%d\n", JogadorDataBase[playerid][jMunicao9]);fwrite(hFile, var);
            format(var, 64, "jMunicao10=%d\n", JogadorDataBase[playerid][jMunicao10]);fwrite(hFile, var);
            format(var, 64, "jMunicao11=%d\n", JogadorDataBase[playerid][jMunicao11]);fwrite(hFile, var);
            format(var, 64, "jChaveDoCarro=%d\n", JogadorDataBase[playerid][jChaveDoCarro]);fwrite(hFile, var);
            fclose(hFile);
        }
    }
    return 1;
}

O que tudo ali encima faz?


Salva as informaзхes das arrays de um player em um arquivo. No caso, o arquivo localizado na pasta LeLeTe, com o nome do jogador que as arrays pertencem.
pawn Код:
new string3[64];
        new playername3[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername3, sizeof(playername3));
        format(string3, sizeof(string3), "LeLeTe/%s.ini", playername3);
        new File: hFile = fopen(string3, io_write);
        if (hFile)
Vamos "Desossar" esse cуdigo.

new string3[64]; = Serve para ser a string do nome do arquivo de qual pesquisamos. Ou seja, o nome do player. Abaixo vocкs entenderгo a utilidade dela.
new playername3[MAX_PLAYER_NAME]; = Array usada para guardar o nome do player que as arrays serгo salvas.
GetPlayerName(playerid, playername3, sizeof(playername3)); = Serve para pegar o nome do jogador e salvar ele na array playername3;
format(string3, sizeof(string3), "LeLeTe/%s.ini", playername3); = Formata a string3, String que serб usada para identificar o arquivo.
new File: hFile = fopen(string3, io_write); = Define um novo arquivo (File, de nome hFile, e executa o comando fopen, que abre o arquivo cujo nome seja igual ao valor da string3 (No caso, localizado na pasta LeLeTe/nomedoplayer.ini. Como exemplo, irei definir este nome do player como Scripter. Mais ele sempre serб o nome do player que a funзгo irб salvar as informaзхes);
if (hFile) = Checa se o arquivo hFile й verdadeiro (Ou seja, foi aberto);

pawn Код:
{
            new var[64];
            format(var, 64, "jArma1=%d\n", JogadorDataBase[playerid][jArma1]);fwrite(hFile, var);
            format(var, 64, "jArma2=%d\n", JogadorDataBase[playerid][jArma2]);fwrite(hFile, var);
            format(var, 64, "jArma3=%d\n", JogadorDataBase[playerid][jArma3]);fwrite(hFile, var);
            format(var, 64, "jArma4=%d\n", JogadorDataBase[playerid][jArma4]);fwrite(hFile, var);
            format(var, 64, "jArma5=%d\n", JogadorDataBase[playerid][jArma5]);fwrite(hFile, var);
            format(var, 64, "jArma6=%d\n", JogadorDataBase[playerid][jArma6]);fwrite(hFile, var);
            format(var, 64, "jArma7=%d\n", JogadorDataBase[playerid][jArma7]);fwrite(hFile, var);
            format(var, 64, "jArma8=%d\n", JogadorDataBase[playerid][jArma8]);fwrite(hFile, var);
            format(var, 64, "jArma9=%d\n", JogadorDataBase[playerid][jArma9]);fwrite(hFile, var);
            format(var, 64, "jArma10=%d\n", JogadorDataBase[playerid][jArma10]);fwrite(hFile, var);
            format(var, 64, "jArma11=%d\n", JogadorDataBase[playerid][jArma11]);fwrite(hFile, var);
            format(var, 64, "jMunicao1=%d\n", JogadorDataBase[playerid][jMunicao1]);fwrite(hFile, var);
            format(var, 64, "jMunicao2=%d\n", JogadorDataBase[playerid][jMunicao2]);fwrite(hFile, var);
            format(var, 64, "jMunicao3=%d\n", JogadorDataBase[playerid][jMunicao3]);fwrite(hFile, var);
            format(var, 64, "jMunicao4=%d\n", JogadorDataBase[playerid][jMunicao4]);fwrite(hFile, var);
            format(var, 64, "jMunicao5=%d\n", JogadorDataBase[playerid][jMunicao5]);fwrite(hFile, var);
            format(var, 64, "jMunicao6=%d\n", JogadorDataBase[playerid][jMunicao6]);fwrite(hFile, var);
            format(var, 64, "jMunicao7=%d\n", JogadorDataBase[playerid][jMunicao7);fwrite(hFile, var);
            format(var, 64, "jMunicao8=%d\n", JogadorDataBase[playerid][jMunicao8]);fwrite(hFile, var);
            format(var, 64, "jMunicao9=%d\n", JogadorDataBase[playerid][jMunicao9]);fwrite(hFile, var);
            format(var, 64, "jMunicao10=%d\n", JogadorDataBase[playerid][jMunicao10]);fwrite(hFile, var);
            format(var, 64, "jMunicao11=%d\n", JogadorDataBase[playerid][jMunicao11]);fwrite(hFile, var);
            format(var, 64, "jChaveDoCarro=%d\n", JogadorDataBase[playerid][jChaveDoCarro]);fwrite(hFile, var);
            format(var, 64, "jString=%s\n", JogadorDataBase[playerid][jString]);fwrite(hFile, var);
            format(var, 64, "jFloat=%1.f\n", JogadorDataBase[playerid][jFloat]);fwrite(hFile, var);            
            fclose(hFile);
        }
format(var, 64, "jMunicao11=%d\n", JogadorDataBase[playerid][jMunicao11]);fwrite(hFile, var); = Peguei como exemplo. Vamos "Quebrar" esse comando, e explicar.


var = Variбvel qualquer, necessбria para ser a string que guardarб o valor formatado na funзгo format();
64 = Tamanho da array "var";
"jMunicao11=%d\n" = Define o que serб escrito no arquivo. Exemplo:
JogadorDataBase[playerid][jMunicao11] = 35; // Seta o valor para 35.
Depois de executada a funзгo, ao abrir o arquivo, vocк irб encontrar:
jMunicao11=35
JogadorDataBase[playerid][jMunicao11] = Lugar de onde ele retira a informaзгo para colocar no '%d' descrito acima.
(Este '%d' serve pra identificar que o valor formatado й um nъmero. %s й uma string. %f й float.)
fwrite(hFile, var); = Escreve no arquivo hFile, a string var. Ou seja, no nosso exemplo, escreve no arquivo [NomeDoPlayer].ini o texto jMunicao=35

fclose = Fecha o arquivo, depois de ter sido usado. (Importante.)

Para salvar uma float, use o cуdigo:
pawn Код:
{
            new var[64];
            format(var, 64, "jArma1=%d\n", JogadorDataBase[playerid][jArma1]);fwrite(hFile, var);
            format(var, 64, "jArma2=%d\n", JogadorDataBase[playerid][jArma2]);fwrite(hFile, var);
            format(var, 64, "jArma3=%d\n", JogadorDataBase[playerid][jArma3]);fwrite(hFile, var);
            format(var, 64, "jArma4=%d\n", JogadorDataBase[playerid][jArma4]);fwrite(hFile, var);
            format(var, 64, "jArma5=%d\n", JogadorDataBase[playerid][jArma5]);fwrite(hFile, var);
            format(var, 64, "jArma6=%d\n", JogadorDataBase[playerid][jArma6]);fwrite(hFile, var);
            format(var, 64, "jArma7=%d\n", JogadorDataBase[playerid][jArma7]);fwrite(hFile, var);
            format(var, 64, "jArma8=%d\n", JogadorDataBase[playerid][jArma8]);fwrite(hFile, var);
            format(var, 64, "jArma9=%d\n", JogadorDataBase[playerid][jArma9]);fwrite(hFile, var);
            format(var, 64, "jArma10=%d\n", JogadorDataBase[playerid][jArma10]);fwrite(hFile, var);
            format(var, 64, "jArma11=%d\n", JogadorDataBase[playerid][jArma11]);fwrite(hFile, var);
            format(var, 64, "jMunicao1=%d\n", JogadorDataBase[playerid][jMunicao1]);fwrite(hFile, var);
            format(var, 64, "jMunicao2=%d\n", JogadorDataBase[playerid][jMunicao2]);fwrite(hFile, var);
            format(var, 64, "jMunicao3=%d\n", JogadorDataBase[playerid][jMunicao3]);fwrite(hFile, var);
            format(var, 64, "jMunicao4=%d\n", JogadorDataBase[playerid][jMunicao4]);fwrite(hFile, var);
            format(var, 64, "jMunicao5=%d\n", JogadorDataBase[playerid][jMunicao5]);fwrite(hFile, var);
            format(var, 64, "jMunicao6=%d\n", JogadorDataBase[playerid][jMunicao6]);fwrite(hFile, var);
            format(var, 64, "jMunicao7=%d\n", JogadorDataBase[playerid][jMunicao7);fwrite(hFile, var);
            format(var, 64, "jMunicao8=%d\n", JogadorDataBase[playerid][jMunicao8]);fwrite(hFile, var);
            format(var, 64, "jMunicao9=%d\n", JogadorDataBase[playerid][jMunicao9]);fwrite(hFile, var);
            format(var, 64, "jMunicao10=%d\n", JogadorDataBase[playerid][jMunicao10]);fwrite(hFile, var);
            format(var, 64, "jMunicao11=%d\n", JogadorDataBase[playerid][jMunicao11]);fwrite(hFile, var);
            format(var, 64, "jChaveDoCarro=%d\n", JogadorDataBase[playerid][jChaveDoCarro]);fwrite(hFile, var);
            format(var, 64, "jString=%s\n", JogadorDataBase[playerid][jString]);fwrite(hFile, var);
            format(var, 64, "jFloat=%1.f\n", JogadorDataBase[playerid][jFloat]);fwrite(hFile, var);            
            fclose(hFile);
        }
Repare que adicionei 2 formats.

format(var, 64, "jString=%s\n", JogadorDataBase[playerid][jString]);fwrite(hFile, var);
format(var, 64, "jFloat=%1.f\n", JogadorDataBase[playerid][jFloat]);fwrite(hFile, var);

Vou explicar eles.


"jString=%s\n" - Define que o que vai ser salvo й uma string (Ou seja, contйm mais do que somente nъmeros), de nome jString;
JogadorDataBase[playerid][jString] = String que serб escrita em jString=%s;
"jFloat=%1.f\n" - Define que o que vai ser salvo й um float (Ou seja, um nъmero quebrado), de nome jFloat;
JogadorDataBase[playerid][jFloat] = Float que serб escrito em jFloat=%1.f;


pawn Код:
public J_Carregar(playerid)
{
    new tmp2[128];
    new string2[64];
    new playername2[MAX_PLAYER_NAME];
    new playernamesplit[3][MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    split(playername2, playernamesplit, '_');
    format(string2, sizeof(string2), "%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
        new key[ 256 ] , val[ 256 ];
        new Data[ 256 ];
        while ( fread( UserFile , Data , sizeof( Data ) ) )
        {
            key = ini_GetKey( Data );
            if( strcmp( key , "jArma1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma1] = strval( val ); }
            if( strcmp( key , "jArma2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma2] = strval( val ); }
            if( strcmp( key , "jArma3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma3] = strval( val ); }
            if( strcmp( key , "jArma4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma4] = strval( val ); }
            if( strcmp( key , "jArma5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma5] = strval( val ); }
            if( strcmp( key , "jArma6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma6] = strval( val ); }
            if( strcmp( key , "jArma7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma7] = strval( val ); }
            if( strcmp( key , "jArma8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma8] = strval( val ); }
            if( strcmp( key , "jArma9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma9] = strval( val ); }
            if( strcmp( key , "jArma10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma10] = strval( val ); }
            if( strcmp( key , "jArma11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma11] = strval( val ); }
            if( strcmp( key , "jMunicao1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao1] = strval( val ); }
            if( strcmp( key , "jMunicao2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao2] = strval( val ); }
            if( strcmp( key , "jMunicao3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao3] = strval( val ); }
            if( strcmp( key , "jMunicao4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao4] = strval( val ); }
            if( strcmp( key , "jMunicao5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao5] = strval( val ); }
            if( strcmp( key , "jMunicao6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao6] = strval( val ); }
            if( strcmp( key , "jMunicao7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao7] = strval( val ); }
            if( strcmp( key , "jMunicao8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao8] = strval( val ); }
            if( strcmp( key , "jMunicao9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao9] = strval( val ); }
            if( strcmp( key , "jMunicao10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao10] = strval( val ); }
            if( strcmp( key , "jMunicao11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao11] = strval( val ); }
        }
        fclose(UserFile);
    }
    return 1;
}
new key[ 256 ] , val[ 256 ];
new Data[ 256 ];
while ( fread( UserFile , Data , sizeof( Data ) ) )
{
key = ini_GetKey( Data );


O que ser isso O_O?

Simples.
new key[ 256 ] , val[ 256 ];
new Data[ 256 ];

Definiзгo de arrays a serem usadas depois.
while ( fread( UserFile , Data , sizeof( Data ) ) )
{
key = ini_GetKey( Data );

Define que enquanto (while) a leitura do aqruivo (fread[Arquivo Que Serб Lido],[Array Para Ser Guardada O Que Foi Lido Do Arquivo],[Tamanho Da Array Que Serгo Guardadas As Informaзхes]), irб fazer algo:
{
key = ini_GetKey( Data );
Define que key й a array em que serгo guardadas as informaзхes lidas pelas strings(Data);

if( strcmp( key , "jMunicao11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao11] = strval( val ); }

if( strcmp( key , "jMunicao11" , true ) == 0 ) = Compara para ver se alguma string contida no arquivo for igual a jMunicao11;
val = ini_GetValue( Data ); = Coleta os valores daquela string;
JogadorDataBase[playerid][jMunicao11] = strval( val ); = Seta na array JogadorDataBase[playerid][jMunicao11] a informaзгo lida no arquivo.
pawn Код:
{
            key = ini_GetKey( Data );
            if( strcmp( key , "jArma1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma1] = strval( val ); }
            if( strcmp( key , "jArma2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma2] = strval( val ); }
            if( strcmp( key , "jArma3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma3] = strval( val ); }
            if( strcmp( key , "jArma4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma4] = strval( val ); }
            if( strcmp( key , "jArma5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma5] = strval( val ); }
            if( strcmp( key , "jArma6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma6] = strval( val ); }
            if( strcmp( key , "jArma7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma7] = strval( val ); }
            if( strcmp( key , "jArma8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma8] = strval( val ); }
            if( strcmp( key , "jArma9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma9] = strval( val ); }
            if( strcmp( key , "jArma10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma10] = strval( val ); }
            if( strcmp( key , "jArma11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jArma11] = strval( val ); }
            if( strcmp( key , "jMunicao1" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao1] = strval( val ); }
            if( strcmp( key , "jMunicao2" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao2] = strval( val ); }
            if( strcmp( key , "jMunicao3" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao3] = strval( val ); }
            if( strcmp( key , "jMunicao4" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao4] = strval( val ); }
            if( strcmp( key , "jMunicao5" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao5] = strval( val ); }
            if( strcmp( key , "jMunicao6" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao6] = strval( val ); }
            if( strcmp( key , "jMunicao7" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao7] = strval( val ); }
            if( strcmp( key , "jMunicao8" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao8] = strval( val ); }
            if( strcmp( key , "jMunicao9" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao9] = strval( val ); }
            if( strcmp( key , "jMunicao10" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao10] = strval( val ); }
            if( strcmp( key , "jMunicao11" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jMunicao11] = strval( val ); }
            if( strcmp( key , "jFloat" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jFloat] = floatstr( val ); }
            if( strcmp( key , "jString" , true ) == 0 ) { val = ini_GetValue( Data ); strmid(JogadorDataBase[playerid][jString], val, 0, strlen(val)-1, 255); }
        }
Vejam que agora temos duas novas informaзхes para serem lidas:

if( strcmp( key , "jFloat" , true ) == 0 ) { val = ini_GetValue( Data ); JogadorDataBase[playerid][jFloat] = floatstr( val ); }
if( strcmp( key , "jString" , true ) == 0 ) { val = ini_GetValue( Data ); strmid(JogadorDataBase[playerid][jString], val, 0, strlen(val)-1, 255); }

Vou explicar a jFloat primeiro.
floatstr( val ); = Converte o valor lido no arquivo para float;

Agora, jString

strmid(JogadorDataBase[playerid][jString], val, 0, strlen(val)-1, 255); = ele seta na array JogadorDataBase[playerid][jString] o a string coletada no arquivo (val), que vai do carбctere 0, atй o limite da string(strlen(val)) -1 , pois existe o carбctere null, e termina de setar a string no carбctere 255;

fclose = fecha o arquivo.


Й isso, pessoal.


Espero que tenham entendido.

UPDATE:

IMPORTANTE:

Adicione
pawn Код:
forward ini_GetKey( line[] )
forward ini_GetValue( line[] )
stock ini_GetKey( line[] )
{
    new keyRes[256];
    keyRes[0] = 0;
    if ( strfind( line , "=" , true ) == -1 ) return keyRes;
    strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
    return keyRes;
}

stock ini_GetValue( line[] )
{
    new valRes[256];
    valRes[0]=0;
    if ( strfind( line , "=" , true ) == -1 ) return valRes;
    strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
    return valRes;
}
NO FINAL DO CУDIGO!!!(Veja o primeiro cуdigo no comeзo do tutorial) !!!

ATENЗГO:

Nos meus futuros FS's, serб usado este sistema de informaзхes para players!!!


Se necessбrio, farei um FS com este conteъdo.
Reply
#2

Parabйns Уtimo Tutorial,sу um pequena Correзгo,isto sгo Arrays mais especificadamente Enumeraзхes:
pawn Код:
new Enumeracao[2];
Mesmo que

pawn Код:
enum
{
Enum0,
Enum1,
Enum2;
};
Reply
#3

Bom tuto, vai me ajudar um pouco.
Reply
#4

Good Work Tutorial, Parabйns, йra isto mesmo que tava procurando para salvar dados.
Reply
#5

Vou adicionar isso nos FS's meus. Muito bom para organizar e salvar informaзхes.

@off.

E aн DraKon, tem algum gm aн pra eu trabalhar ?
Reply
#6

WTF, bom tut, depois usarei, estou a terminar meu gm (muito basico, tambem quero termina-lo ainda hoje), e na prуxima versгo, colocarei isso,


WTF ? olha o tamanho que ficou isso
Reply
#7

Update no tutorial ._.
Reply
#8

Prefiro o Dini.
mais pra quem nгo sabe usar ele, esse tah bacana!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)