[Include] bCini (Sistema de Salvamento)
#1

bCini (Sistema de Salvamento)


Quase um mкs apуs eu ser banido, a bCini foi feita com sucesso, felizmente com lуgicas boas e rбpidas!

Eu pedi ajuda а alguns programadores e isto foi o essencial para mim, pois eu nunca tinha feito uma include tao importante antes, uma vez que hб poucas includes de Salvamento no Samp.

Chegou a sua vez de se impressionar com a bCini!

As funзoes delas sao simples como аs da Dini e rбpidas como аs da DOF2:

bCini_Criar


A funзao й usada para criar arquivos.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_Criar("Biel_COP.ini");
}
bCini_Existe


A funзao й usada como um fexist, ou seja, para ver se o tal arquivo existe.

Exemplo de Uso:

pawn Код:
main()
{
      if(bCini_Existe("Biel_COP.ini"))
      {
           return 1;
      }
}
bCini_Remover


A funзao й usada para remover um arquivo jб criado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_Remover("Biel_COP.ini");
}
bCini_SetarInt


A funзao й usada para setar em um arquivo as ints, ou seja: valores de alguma variбvel, etc.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_SetarInt("Biel_COP.ini","Olб",1);
}
bCini_SetarBool


A funзao й usada para setar em um arquivo as variaveis booleanas em um arquivo.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_SetarBool("Biel_COP.ini","Olб",false);
}
bCini_SetarFloat


A funзao й usada para setar em um arquivo as floats, ou seja: posiзoes, vida de um jogador, etc.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_SetarFloat("Biel_COP.ini","Olб",0.0);
}
bCini_SetarTexto


A funзao й usada para setar em um arquivo as algum texto.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_SetarTexto("Biel_COP.ini","Olб","Como vocк vai ?");
}
bCini_GetarInt


A funзao й usada para ler em um arquivo uma int jб setada.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%d",bCini_GetarInt("Biel_COP.ini,"Olб"));
}
bCini_GetarBool


A funзao й usada para ler em um arquivo uma booleana jб setada.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%d",bCini_GetarBool("Biel_COP.ini,"Olб"));
}
bCini_GetarFloat


A funзao й usada para ler em um arquivo um float jб setado.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%f",bCini_GetarFloat("Biel_COP.ini,"Olб")) ;
}
bCini_GetarTexto


A funзao й usada para ler em um arquivo um texto jб setado.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%s",bCini_GetarTexto("Biel_COP.ini,"Olб")) ;
}
bCini_Copiar


Em algumas includes .ini, esta funзao tem um uso prуprio para copiar arquivos.

Na bCini vocк nao gasta muitas linhas!

Com uma lуgica bem simples, ao invйs de usar isto:

pawn Код:
main()
{
      DOF2_CopyFile("Biel_COP.ini","Biel_COP2.ini");
      DOF2_RemoveFile("Biel_COP.ini");
}
Vocк pode usar isto para copiar e logo apуs deletar o arquivo:

pawn Код:
main()
{
      bCini_Copiar("Biel_COP.ini","Biel_COP2.ini",1);
}
Para apenas copiar, use isto:

pawn Код:
main()
{
      bCini_Copiar("Biel_COP.ini","Biel_COP2.ini",0);
}
Entenderam ? Simples, nao ?

bCini_Console


A funзao й usada para mostrar todas as configuraзoes (Line & Key) de um arquivo no console.

Exemplo de uso:

pawn Код:
main()
{
      bCini_Console("Biel_COP.ini");
}
Resultado:



Cуdigo usado:

pawn Код:
main()
{
      bCini_Criar("Biel_COP.ini");
      bCini_SetarTexto("Biel_COP.ini","Admin","Fundador" );
      bCini_SetarTexto("Biel_COP.ini","Gosta","De Pepecas");
      bCini_SetarInt("Biel_COP.ini","Faleceu",0);
      bCini_Console("Biel_COP.ini");
}
bCini_LimparArquivo


Como o prуprio nome diz, esta funзao faz a limpa de todo o conteъdo do arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini_LimparArquivo("Biel_COP.ini");
}
Testes de Velocidade


Um simples teste de velocidade feito com as includes: bCini, DOF2 e Dini, mostram que a bCini й superior а todas elas.

Trabalhando com arquivos ainda nao criados:



Trabalhando com arquivos jб criados:



Cуdigo usado:

pawn Код:
main()
{
      new Fala[128];

      // bCini

      new DS = GetTickCount();

      for(new i=0; i<10; i++)
      {
           format(Fala,sizeof(Fala),"Vips/Aq%d.ini",i);

           bCini_Criar(Fala);
           bCini_SetarTexto(Fala,Fala,"Teste");
      }
      printf("bCini (criando / setando 10 arquivos) %d ms",GetTickCount()-DS);

      // DOF2

      new DS2 = GetTickCount();

      for(new i=0; i<10; i++)
      {
           format(Fala,sizeof(Fala),"Socios/Aq%d.ini",i);

           DOF2_CreateFile(Fala);
           DOF2_SetString(Fala,Fala,"Teste");
      }
      printf("DOF2 (criando / setando 10 arquivos) %d ms",GetTickCount()-DS2);

      // Dini

      new DS3 = GetTickCount();

      for(new i=0; i<10; i++)
      {
           format(Fala,sizeof(Fala),"Contas/Aq%d.ini",i);

           dini_Create(Fala);
           dini_Set(Fala,Fala,"Teste");
      }
      printf("Dini (criando / setando 10 arquivos) %d ms",GetTickCount()-DS3);
}
Pontos Fracos


° Ela disputa muito com a DOF2, sendo assim, muitas vezes ela й mais rбpida que a mesma e tambйm й muitas vezes mais lenta.

° Nao possui algumas funзoes, exemplo: Isset e Unset (como na Dini e DOF2).

Pontos Fortes


° O uso й totalmente fбcil e pode ser usado em qualquer gamemode, sem precisar usar Save(), Open(), Close(), etc.

° Й feita toda em portuguкs.

° Й otimizada por completo.

pawn Код:
// bCini

stock bCiniFiles[128];

#define bCini_Criar(%0) if(!fexist(%0)) fclose(fopen(%0,io_write))
#define bCini_Existe(%0) fexist(%0)
#define bCini_Remover(%0) if(fexist(%0)) fremove(%0)

#define bCini_SetarInt(%0,%1,%2) format(bCiniFiles,sizeof(bCiniFiles),"%d",%2) && bCini_SetarTexto(%0,%1,bCiniFiles)
#define bCini_SetarBool(%0,%1,%2) format(bCiniFiles,sizeof(bCiniFiles),"%d",%2) && bCini_SetarTexto(%0,%1,bCiniFiles)
#define bCini_SetarFloat(%0,%1,%2) format(bCiniFiles,sizeof(bCiniFiles),"%f",%2) && bCini_SetarTexto(%0,%1,bCiniFiles)

#define bCini_GetarInt(%0,%1) strval(bCini_GetarTexto(%0,%1))
#define bCini_GetarBool(%0,%1) bool:strval(bCini_GetarTexto(%0,%1))
#define bCini_GetarFloat(%0,%1) floatstr(bCini_GetarTexto(%0,%1))

#define bCini_Capacidade 5000

#pragma dynamic 50000

stock bCini_SetarTexto(arquivo[],linha[],valor[])
{
    new Set = 0,bCiniFiles2[128];

    if(!fexist(arquivo))
    {
        goto Setar;
    }
    new File:File2 = fopen(arquivo,io_read); new Arquivo[5000];

    while(fread(File2, bCiniFiles2))
    {
        static Biel, bCiniFiles3[0xFF]; Biel = strfind(bCiniFiles2,"=");

        if(Biel != -1)
        {
            format(bCiniFiles3, sizeof(bCiniFiles3), bCiniFiles2); bCiniFiles3[Biel] = EOS;

            if(strcmp(linha, bCiniFiles3, true) == 0)
            {
                Set = 1; format(bCiniFiles2,sizeof(bCiniFiles2),"%s=%s\r\n",linha,valor);
            }
            format(Arquivo,sizeof(Arquivo),"%s%s",Arquivo,bCiniFiles2);
        }
    }
    fclose(File2);

    if(!Set)
    {
        Setar:

        format(bCiniFiles2,sizeof(bCiniFiles2),"%s=%s\r\n",linha,valor);
        format(Arquivo,sizeof(Arquivo),"%s%s",Arquivo,bCiniFiles2);
    }
    Set = 0;
    File2 = fopen(arquivo,io_write);

    fwrite(File2,Arquivo);
    fclose(File2);

    return 1;
}
stock bCini_GetarTexto(arquivo[],linha[])
{
    new bCiniFiles2[128],Linha = strlen(linha);

    if(Linha == 0 || Linha+2 > 128)
    {
        return bCiniFiles2;
    }
    new File:File2; File2 = fopen(arquivo,io_read);

    if(!File2)
    {
        return bCiniFiles2;
    }
    while(fread(File2,bCiniFiles2))
    {
        if(bCiniFiles2[Linha] == '=')
        {
            if(!strcmp(bCiniFiles2,linha,true,Linha))
            {
                bCini_NovaLinha(bCiniFiles2); strmid(bCiniFiles2,bCiniFiles2,Linha+1,strlen( bCiniFiles2),128); fclose(File2); return bCiniFiles2;
            }
        }
    }
    fclose(File2);
    return bCiniFiles2;
}
stock bCini_Copiar(arquivo[],arquivo2[],remover)
{
    if(fexist(arquivo))
    {
        if(!fexist(arquivo2))
        {
            new File:File2 = fopen(arquivo,io_read); new Arquivo[5000]; new bCiniFiles2[128];

            while(fread(File2, bCiniFiles2))
            {
                static Biel, bCiniFiles3[0xFF]; Biel = strfind(bCiniFiles2,"=");

                if(Biel != -1)
                {
                    format(bCiniFiles3, sizeof(bCiniFiles3), bCiniFiles2); bCiniFiles3[Biel] = EOS; format(Arquivo,sizeof(Arquivo),"%s%s",Arquivo,bCiniFiles2);
                }
            }
            new File:File3 = fopen(arquivo2,io_write);

            fwrite(File3,Arquivo);

            fclose(File2);
            fclose(File3);

            if(remover == 1)
            {
                bCini_Remover(arquivo);
            }
        }
    }
    return 1;
}
stock bCini_Console(arquivo[])
{
    if(fexist(arquivo))
    {
        new File:File2 = fopen(arquivo,io_read); new Arquivo[5000]; new bCiniFiles2[128];

        while(fread(File2, bCiniFiles2))
        {
            static Biel, bCiniFiles3[0xFF]; Biel = strfind(bCiniFiles2,"=");

            if(Biel != -1)
            {
                format(bCiniFiles3, sizeof(bCiniFiles3), bCiniFiles2); bCiniFiles3[Biel] = EOS; format(Arquivo,sizeof(Arquivo),"%s%s\n",Arquivo,bCiniFiles2);
            }
        }
        printf("Arquivo: %s\n\n%s",arquivo,Arquivo);
        fclose(File2);
    }
    return 1;
}
stock bCini_NovaLinha(linha[])
{
    new NovaLinha = strlen(linha);

    if(linha[0] != 0)
    {
        if(linha[NovaLinha-1] == '\n' || linha[NovaLinha-1] == '\r')
        {
            linha[NovaLinha-1] = 0;
        }
        if(linha[0] != 0)
        {
            if(linha[NovaLinha-2] == '\n' || linha[NovaLinha-2] == '\r')
            {
                linha[NovaLinha-2] = 0;
            }
        }
    }
    return 1;
}
stock bCini_Setado(arquivo[],linha[])
{
    new bCiniFiles2[128]; new Linha = strlen(linha);

    if(Linha == 0 || Linha+2 > 128)
    {
        return bCiniFiles2;
    }
    new File:File2; File2 = fopen(arquivo,io_read);

    if(!File2)
    {
        return bCiniFiles2;
    }
    while(fread(File2,bCiniFiles2))
    {
        if(bCiniFiles2[Linha] == '=')
        {
            if(!strcmp(bCiniFiles2,linha,true,Linha))
            {
                return 1;
            }
        }
    }
    return 0;
}
stock bCini_Desescrever(arquivo,linha[])
{
    new bCiniFiles2[128]; new Linha = strlen(linha);

    if(Linha == 0 || Linha+2 > 128)
    {
        return bCiniFiles2;
    }
    new File:File2; File2 = fopen(arquivo,io_read);

    if(!File2)
    {
        return bCiniFiles2;
    }
    while(fread(File2,bCiniFiles2))
    {
        if(bCiniFiles2[Linha] == '=')
        {
            if(!strcmp(bCiniFiles2,linha,true,Linha))
            {
                bCini_NovaLinha(bCiniFiles2);

                fwrite(File2,bCiniFiles2);
                fwrite(File2,"\r\n");
            }
        }
    }
    return 0;
}
Ajuda com o Cуdigo de Criar: zSuYaNw
Ajuda com o Cуdigo do Set: IpsBruno e Willian Luigi
bCini_NovaLinha: DracoBlue
Iniciativa, Lуgicas, Cуdigos, Complemento: Biel_COP


Atualizaзao V1.1


Agora ela tem cachк, feito por mim!

Novas funзoes:

bCini_Setado para ver se alguma KEY estб setada em um tal arquivo.

bCini_Desescrever para remover a KEY do arquivo.


O novo cуdigo jб estб ali em cima no Download /\

Obs: No OnGameModeExit, coloque bCini_Encerrar();

Obrigado!

Obs І: Ainda com um bug de WRITE que estб sendo Resolvido!

Atualizaзao V1.2


Cachк bugadaзo retirado, no entanto eu ganhei um pouco de velocidade otimizando algumas funзoes!

O download estб ali em cima /\
Reply
#2

hmmm

Legal.
Reply
#3

Maneiro
Reply
#4

Quote:
Originally Posted by Willian_Luigi
hmmm

Legal.
Eu tinha me esquecido de vocк, como eu pъde ? :O

Crйditos adicionados com Sucesso!
Reply
#5

Quote:
Originally Posted by BielCOP
Посмотреть сообщение
Eu tinha me esquecido de vocк, como eu pъde ? :O

Crйditos adicionados com Sucesso!
Eu pensei em comentar isso, mas deixei quieto, hehe.

Parabйns Biel.
Reply
#6

Obrigado Willian
Reply
#7

Ficou bom, parabйns
Reply
#8

Parabйm

Vocк aconselha usar qual das trкs includes? Independente de vocк ter feito esta. (Seja Justo e Verdadeiro)

Por que vocк nгo pede autorizaзгo pra juntar sua include com a DOF2 e fazer uma super rбpida?
Reply
#9

Legal

Mais rбpido que y_ini tambйm? Vocк poderia fazer o teste e postar

@OFF

Biel nгo vai bater o record de -rep, sinto muito cara kkk
Reply
#10

Quote:
Originally Posted by RuanRider
Посмотреть сообщение
Parabйm

Vocк aconselha usar qual das trкs includes? Independente de vocк ter feito esta. (Seja Justo e Verdadeiro)

Por que vocк nгo pede autorizaзгo pra juntar sua include com a DOF2 e fazer uma super rбpida?
Olha, como eu acabei de fazer esta e nao possui algumas funзoes como IsSet (Estб Setado) e UnSet (Desescrever), eu aconselho a DOF2.

E porquк o Double O Seven (criador DOF2) й gringo, e trabalhar com gringos й difнcil, й que nem eu respondendo o Dugi no SKYPE hueahueaheuahueahea
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)