[Include] bCini3 [Cache File Include - Progressao bCini]
#1

Desta vez, todos os cуdigos sao de autoria minha (Biel_COP).

Antes de tudo, eu peзo desculpas pelo que o Lixoso que logou na conta do Lucas fez --'

Obrigado por deletarem.

Primeira coisa: DanDRT, x9 do kct, vsf.

Segunda coisa: Vamos lб!

BY BIEL_COP ~>

O projeto da bCini comeзou quando eu nao tinha muito conhecimento em manuseiar arquivos.

Porйm de uns tempos para cб eu venho me aprofundando nisto, eu nao sou o melhor (e nunca serei), porйm o meu esforзo foi recompensado com a criaзao da bCini3!

Agora totalmente em cachк, a bCini3 estб 970x mais rбpida que a Dini e 2x mais rбpida que a DOF2 (em alguns casos), tambйm podendo competir com a bIni.

Obs: A include й muito leve, puxa muito pouco processamento de Amx (eu acho que й isto) e realmente dб um tom diferente, principalmente para iniciantes que querem comeзar aprendendo pelo prуprio portuguкs.

bCini3_Criar


A funзao й usada para criar arquivos.

Exemplo de Uso:

pawn Код:
main()
{
      bCini3_Criar("Biel_COP.ini");
}
bCini3_Existe


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

Exemplo de Uso:

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


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

Exemplo de Uso:

pawn Код:
main()
{
      bCini3_Remover("Biel_COP.ini");
}
bCini3_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()
{
      bCini3_SetarInt("Biel_COP.ini","Olб",1);
}
bCini3_SetarBool


A funзao й usada para setar em um arquivo as variбveis booleanas em um arquivo.

Exemplo de Uso:

pawn Код:
main()
{
      bCini3_SetarBool("Biel_COP.ini","Olб",false);
}
bCini3_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()
{
      bCini3_SetarFloat("Biel_COP.ini","Olб",0.0);
}
bCini3_SetarTexto


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

Exemplo de Uso:

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


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

Exemplo de Uso:

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


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

Exemplo de Uso:

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


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

Exemplo de Uso:

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


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

Exemplo de Uso:

pawn Код:
main()
{
      printf("%s",bCini3_GetarTexto("Biel_COP.ini","Olб")) ;
}
bCini3_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()
{
      bCini3_Copiar("Biel_COP.ini","Biel_COP2.ini",true);
}
Para apenas copiar, use isto:

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

bCini3_Console


A funзao й usada para mostrar todas as configuraзoes (Linha e Valor) de um arquivo no console.

Exemplo de uso:

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



Cуdigo usado:

pawn Код:
main()
{
      bCini3_Criar("Biel_COP.ini");
      bCini3_SetarTexto("Biel_COP.ini","Admin","Fundador" );
      bCini3_SetarTexto("Biel_COP.ini","Gosta","De Pepecas");
      bCini3_SetarInt("Biel_COP.ini","Faleceu",0);
      bCini3_Console("Biel_COP.ini");
}
bCini3_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()
{
      bCini3_LimparArquivo("Biel_COP.ini");
}
bCini3_Setado


Com esta funзao, vocк pode verificar se existe tal linha no arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      if(bCini3_Setado("Biel_COP.ini","Admin"))
      {
             return 1;
      }
      return 0;
}
bCini3_Desescrever


A funзao й usada para desescrever alguma linha do arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini3_Desescrever("Biel_COP.ini","Admin");
}
bCini3_Log


A funзao й usada para criar logs dinвmicas.

Exemplo de Uso:

pawn Код:
main()
{
      bCini3_Log("Biel_COP.txt","Biel_COP estб testando a include bCini3.\r\n");
}
A include tambйm possui vбrias 'funзoes redirecionadoras', que sao elas ~>

pawn Код:
#define bCini3_Abrir fopen
#define bCini3_Existe fexist
#define bCini3_Escrever fwrite
#define bCini3_Ler fread
#define bCini3_Fechar fclose
Tambйm й possнvel editб-la para que fique mais leve (ou mais pesada), de acordo com o seu gamemode:

pawn Код:
#define bCini3_Linhas 50
#define bCini3_Capacidade 64

#define bCini3_Separador "="
#define bCini3_Sim "Console do Arquivo %s:\r\n"
#define bCini3_Nao "O arquivo %s nгo existe!"
Obs: Й Recomendбvel que vocк mude de acordo com o seu gamemode, pois caso nao mude, complicaзoes ocorrerao.

Obs І: Caso estas definiзoes sejam suficientes para suprir as nescessidades do seu gamemode, deixe como estб.

bCini, bCini2 e bCini3


Quais sao as mudanзas ?

Bom, da bCini2 para a bCini3, tudo foi otimizado.

Eu refiz praticamente tudo, e a progressao da bCini3 usa um pouco da lуgica do IpsBruno, onde ele nao abre nada e nem fecha caso o arquivo foi apenas lido.

Tambйm й possнvel notar a diferenзa nos cуdigos, eles foram supervisionados por um professor de programaзao amigo meu, Joao.

Eu fiz um teste bбsico aqui usando benchmark, setando, criando e lendo alguns arquivos e deu nisto:



Download e Crйditos


IpsBruno: Ajudou na primeira Include (bCini) e pela lуgica da bIni, muito obrigado mano!
zSuYaNw: Ajudou na funзao de criar arquivos, valeu gato!
Willian_Luigi: Ajudou na funзao de Setar Textos, й nуis!
Biel_COP: Idealizador da bCini e programador total da bCini3.


pawn Код:
// Include bCini3

#define bCini3_Linhas 50
#define bCini3_Capacidade 64

#define bCini3_Separador "="
#define bCini3_Sim "Console do Arquivo %s:\r\n"
#define bCini3_Nao "O arquivo %s nгo existe!"

#define bCini3_Abrir fopen
#define bCini3_Existe fexist
#define bCini3_Escrever fwrite
#define bCini3_Ler fread
#define bCini3_Fechar fclose

#define bCini3_Iniciar() strmid(bCini3_Nome_Arquivo,"Vazio",0,5,6)
#define bCini3_Encerrar() bCini3_FecharArquivo()

#define bCini3_Criar(%0) if(!bCini3_Existe(%0)) bCini3_Fechar(bCini3_Abrir(%0,io_write)) && bCini3_AbrirArquivo(%0)
#define bCini3_Remover(%0) if(bCini3_Existe(%0)) fremove(%0)

stock Include_Texto_bCini3[bCini3_Capacidade];

#define bCini3_SetarInt(%0,%1,%2) format(Include_Texto_bCini3,sizeof(Include_Texto_bCini3),"%d",%2) && bCini3_SetarTexto(%0,%1,Include_Texto_bCini3)
#define bCini3_SetarBool(%0,%1,%2) format(Include_Texto_bCini3,sizeof(Include_Texto_bCini3),"%d",%2) && bCini3_SetarTexto(%0,%1,Include_Texto_bCini3)
#define bCini3_SetarFloat(%0,%1,%2) format(Include_Texto_bCini3,sizeof(Include_Texto_bCini3),"%f",%2) && bCini3_SetarTexto(%0,%1,Include_Texto_bCini3)

#define bCini3_GetarInt(%0,%1) strval(bCini3_GetarTexto(%0,%1))
#define bCini3_GetarBool(%0,%1) bool:strval(bCini3_GetarTexto(%0,%1))
#define bCini3_GetarFloat(%0,%1) floatstr(bCini3_GetarTexto(%0,%1))

stock bCini3_Linha_Valor[bCini3_Linhas][bCini3_Capacidade];
stock bCini3_Nome_Arquivo[bCini3_Capacidade];

stock bCini3_Linhas_Arquivo;
stock bCini3_Linha_ID;

stock bool:bCini3_Escreveu;

// Funзхes Usadas

stock bCini3_SetarTexto(arquivo[],linha[],valor[])
{
    if(!strlen(linha) || !strlen(valor))
    {
        return 1;
    }
    bCini3_Criar(arquivo);

    new bCini3_Texto_Arquivo[bCini3_Capacidade];

    format(bCini3_Texto_Arquivo,sizeof(bCini3_Texto_Arquivo),"%s%s%s\r\n",linha,bCini3_Separador,valor);

    if(bCini3_Setado(arquivo,linha))
    {
        strmid(bCini3_Linha_Valor[bCini3_Linha_ID],bCini3_Texto_Arquivo,0,strlen(bCini3_Texto_Arquivo),bCini3_Capacidade);
    }
    else
    {
        strmid(bCini3_Linha_Valor[bCini3_Linhas_Arquivo],bCini3_Texto_Arquivo,0,strlen(bCini3_Texto_Arquivo),bCini3_Capacidade);

        bCini3_Linhas_Arquivo++;
    }
    bCini3_Escreveu = true;
    return 1;
}
stock bCini3_GetarTexto(arquivo[],linha[])
{
    new bCini3_Texto_Arquivo[bCini3_Capacidade];

    if(!bCini3_Existe(arquivo) || !strlen(linha) || !bCini3_Setado(arquivo,linha))
    {
        return bCini3_Texto_Arquivo;
    }
    strmid(bCini3_Texto_Arquivo,bCini3_Linha_Valor[bCini3_Linha_ID],0,strlen(bCini3_Linha_Valor[bCini3_Linha_ID]),strlen(bCini3_Linha_Valor[bCini3_Linha_ID])+1);
    strdel(bCini3_Texto_Arquivo,0,strfind(bCini3_Texto_Arquivo,bCini3_Separador)+1);

    if(strfind(bCini3_Texto_Arquivo,"\r\n",true) != -1 || strfind(bCini3_Texto_Arquivo,"\n\r",true) != -1)
    {
        strdel(bCini3_Texto_Arquivo,strlen(bCini3_Texto_Arquivo)-2,strlen(bCini3_Texto_Arquivo));
    }
    if(strfind(bCini3_Texto_Arquivo,"\r",true) != -1 || strfind(bCini3_Texto_Arquivo,"\n",true) != -1)
    {
        strdel(bCini3_Texto_Arquivo,strlen(bCini3_Texto_Arquivo)-1,strlen(bCini3_Texto_Arquivo));
    }
    return bCini3_Texto_Arquivo;
}
stock bCini3_Setado(arquivo[],linha[])
{
    if(!bCini3_Existe(arquivo))
    {
        return 0;
    }
    bCini3_AbrirArquivo(arquivo);

    bCini3_Linha_ID = bCini3_Linhas-1;

    for(new i; i<bCini3_Linhas_Arquivo; i++)
    {
        if(strlen(bCini3_Linha_Valor[i]))
        {
            if(strfind(bCini3_Linha_Valor[i],bCini3_Separador,true) != -1)
            {
                if(strfind(bCini3_Linha_Valor[i],linha,true) != -1)
                {
                    bCini3_Linha_ID = i;
                    return 1;
                }
            }
        }
    }
    return 0;
}
stock bCini3_Desescrever(arquivo[],linha[])
{
    if(!bCini3_Existe(arquivo) || !strlen(linha) || !bCini3_Setado(arquivo,linha))
    {
        return 1;
    }
    strmid(bCini3_Linha_Valor[bCini3_Linha_ID],"Vazio",0,5,6);

    bCini3_Escreveu = true;
    return 1;
}
stock bCini3_LimparArquivo(arquivo[])
{
    if(!bCini3_Existe(arquivo))
    {
        return 1;
    }
    bCini3_AbrirArquivo(arquivo);

    for(new i; i<bCini3_Linhas_Arquivo; i++)
    {
        if(strlen(bCini3_Linha_Valor[i]))
        {
            strmid(bCini3_Linha_Valor[i],"",0,0,1);
        }
    }
    bCini3_Escreveu = true;
    return 1;
}
stock bCini3_Console(arquivo[])
{
    if(!bCini3_Existe(arquivo))
    {
        return 1;
    }
    bCini3_AbrirArquivo(arquivo);

    for(new i; i<bCini3_Linhas_Arquivo; i++)
    {
        if(strlen(bCini3_Linha_Valor[i]))
        {
            print(bCini3_Linha_Valor[i]);
        }
    }
    return 1;
}
stock bCini3_Copiar(arquivo[],arquivo2[],bool:remover)
{
    if(!bCini3_Existe(arquivo))
    {
        return 1;
    }
    bCini3_AbrirArquivo(arquivo);

    new bCini3_Texto_Arquivo[bCini3_Capacidade*10];

    for(new i; i<bCini3_Linhas_Arquivo; i++)
    {
        if(strlen(bCini3_Linha_Valor[i]))
        {
            format(bCini3_Texto_Arquivo,sizeof(bCini3_Texto_Arquivo),"%s%s",bCini3_Texto_Arquivo,bCini3_Linha_Valor[i]);
        }
    }
    bCini3_Log(arquivo2,bCini3_Texto_Arquivo);

    if(remover)
    {
        bCini3_Remover(arquivo);
    }
    return 1;
}
stock bCini3_Log(arquivo[],valor[])
{
    new File:bCini3_Arquivo_Open;

    bCini3_Arquivo_Open = bCini3_Abrir(arquivo,io_append);
    bCini3_Escrever(bCini3_Arquivo_Open,valor);
    bCini3_Fechar(bCini3_Arquivo_Open);

    return 1;
}
// Funзхes Inusadas

stock bCini3_AbrirArquivo(arquivo[])
{
    if(!bCini3_Existe(arquivo) || strcmp(arquivo,bCini3_Nome_Arquivo,true) == 0)
    {
        return 1;
    }
    bCini3_FecharArquivo();

    new File:bCini3_Arquivo_Open,bCini3_Texto_Arquivo[bCini3_Capacidade];

    strmid(bCini3_Nome_Arquivo,arquivo,0,strlen(arquivo),strlen(arquivo)+1);

    bCini3_Arquivo_Open = bCini3_Abrir(arquivo,io_read);

    while(bCini3_Ler(bCini3_Arquivo_Open,bCini3_Texto_Arquivo))
    {
        if(strlen(bCini3_Texto_Arquivo))
        {
            strmid(bCini3_Linha_Valor[bCini3_Linhas_Arquivo],bCini3_Texto_Arquivo,0,strlen(bCini3_Texto_Arquivo),strlen(bCini3_Texto_Arquivo)+1);

            bCini3_Linhas_Arquivo++;
        }
    }
    bCini3_Linhas_Arquivo = bCini3_Linhas_Arquivo+1;
    bCini3_Fechar(bCini3_Arquivo_Open);

    return 1;
}
stock bCini3_FecharArquivo()
{
    if(!bCini3_Existe(bCini3_Nome_Arquivo) || !bCini3_Escreveu)
    {
        strmid(bCini3_Nome_Arquivo,"Vazio",0,5,6);

        if(bCini3_Escreveu)
        {
            for(new i; i<bCini3_Linhas_Arquivo; i++)
            {
                strmid(bCini3_Linha_Valor[i],"",0,0,1);
            }
            bCini3_Escreveu = false;
        }
        bCini3_Linhas_Arquivo = 0;
        return 1;
    }
    new File:bCini3_Arquivo_Open,bCini3_Texto_Arquivo[bCini3_Capacidade*10];

    for(new i; i<bCini3_Linhas_Arquivo; i++)
    {
        if(strlen(bCini3_Linha_Valor[i]))
        {
            format(bCini3_Texto_Arquivo,sizeof(bCini3_Texto_Arquivo),"%s%s",bCini3_Texto_Arquivo,bCini3_Linha_Valor[i]);
        }
        strmid(bCini3_Linha_Valor[i],"",0,0,1);
    }
    bCini3_Arquivo_Open = bCini3_Abrir(bCini3_Nome_Arquivo,io_write);
    bCini3_Escrever(bCini3_Arquivo_Open,bCini3_Texto_Arquivo);
    bCini3_Fechar(bCini3_Arquivo_Open);

    bCini3_Escreveu = false;
    bCini3_Linhas_Arquivo = 0;

    strmid(bCini3_Nome_Arquivo,"Vazio",0,5,6);
    return 1;
}

// Fim da Include bCini3
Obs: Adicione bCini3_Iniciar(); no OnGameModeInit() e bCini3_Encerrar(); no OnGameModeExit();

Obs 2: A definiзao bCini3_Separador й a definiзao responsбvel pelo Set dos Arquivos, exemplo:

Linha bCini3_Separador Valor

Se o bCini3_Separador for :, o arquivo Ficarб assim:

Linha:Valor
Reply
#2

Legal, meu nome sempre aparece nos crйditos, obrigado cara.

Ainda bem que tu nгo desistiu da include, hehe assim que se evolui.
Reply
#3

Vlw Willian
Reply
#4

Boa include viado.
Reply
#5

Obrigado petrick viada1 -q -q

E sу para constar: Esta versao da bCini estб 0.154x mais lenta que a DOF2, ou seja:

Enquanto DOF2 executa algumas funзoes em 110 ms, a bCini3 executa em 112 ms.
Reply
#6

Bem mais rбpida que a outra, parabйns mano.
Reply
#7

Muito obrigado!

Realmente nesta include eu trabalhei a velocidade juntamente com a otimizaзao.

Eu estou me aproximando cada vez mais da bIni.

Se eu conseguir passar da bIni, eu chego а Y_Ini fбcil
Reply
#8

Em vez de utilizar strlen toda vez que deseja verificar se uma string й valida, vocк pode simplesmente checar se o primeiro char й EOS, desta forma:
pawn Код:
if(string[0] == EOS) // String Null
Vocк pode atй mesmo ganhar um pouco de velocidade desta forma.

De resto nгo tem muito a ser criticado, exceto a organizaзгo do cуdigo, parabйns.
Reply
#9

nгo gosto.
Reply
#10

Agora sim vocк esta entendendo o que muitos falava.
Depois vou analisar o code flw.
Parabйns fera.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)