12.01.2014, 03:40
(
Последний раз редактировалось AlieN_.; 12.01.2014 в 13:48.
)
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 bCini2!
Agora totalmente em cachк, a bCini2 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.
A funзao й usada para criar arquivos.
Exemplo de Uso:
A funзao й usada como um fexist, ou seja, para verificar se o tal arquivo existe.
Exemplo de Uso:
A funзao й usada para remover um arquivo jб criado.
Exemplo de Uso:
A funзao й usada para setar em um arquivo as ints, ou seja: valores de alguma variбvel, etc.
Exemplo de Uso:
A funзao й usada para setar em um arquivo as variбveis booleanas em um arquivo.
Exemplo de Uso:
A funзao й usada para setar em um arquivo as floats, ou seja: posiзoes, vida de um jogador, etc.
Exemplo de Uso:
A funзao й usada para setar em um arquivo algum texto.
Exemplo de Uso:
A funзao й usada para ler em um arquivo uma int jб setada.
Exemplo de Uso:
A funзao й usada para ler em um arquivo uma booleana jб setada.
Exemplo de Uso:
A funзao й usada para ler em um arquivo um float jб setado.
Exemplo de Uso:
A funзao й usada para ler em um arquivo um texto jб setado.
Exemplo de Uso:
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:
Vocк pode usar isto para copiar e logo apуs deletar o arquivo:
Para apenas copiar, use isto:
Entenderam ? Simples, nao ? 
A funзao й usada para mostrar todas as configuraзoes (Linha e Valor) de um arquivo no console.
Exemplo de uso:
Resultado:

Cуdigo usado:
Como o prуprio nome diz, esta funзao faz a limpa de todo o conteъdo do arquivo especificado.
Exemplo de Uso:
Com esta funзao, vocк pode verificar se existe tal linha no arquivo especificado.
Exemplo de Uso:
A funзao й usada para desescrever alguma linha do arquivo especificado.
Exemplo de Uso:
A include tambйm possui vбrias 'funзoes redirecionadoras', que sao elas ~>
Tambйm й possнvel editб-la para que fique mais leve (ou mais pesada), de acordo com o seu gamemode:
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б.
Quais sao as mudanзas ?
Bom, mais funзoes, mais leveza, mais rapidez e um cуdigo mais limpo e menos pesado.
Eu fiz alguns testes de velocidade com a bCini e a bCini2, criando / setando / lendo e fechando 1000 arquivos e o resultado foi este:

Como podem ver, ela realmente estб muito mais rбpida.
IpsBruno: Ajudou na primeira Include (bCini), muito obrigado mano!
zSuYaNw: Ajudou na funзao de criar arquivos, valeu gato!
Willian_Luigi: Ajudou na funзao de Setar Textos, й nуis!
DracoBlue: Propфs uma lуgica melhor em questao da bCini2_GetarTexto, й nois gringo dlз!
Biel_COP: Idealizador da bCini e programador total da bCini2.
Obs: Adicione bCini2_FecharArquivo(); no OnGameModeExit();
Obs 2: A definiзao bCini2_Separador й a definiзao responsбvel pelo Set dos Arquivos, exemplo:
Linha bCini2_Separador Valor
Se o bCini2_Separador for :, o arquivo Ficarб assim:
Linha:Valor
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 bCini2!
Agora totalmente em cachк, a bCini2 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.
bCini2_Criar
A funзao й usada para criar arquivos.
Exemplo de Uso:
pawn Код:
main()
{
bCini2_Criar("Biel_COP.ini");
}
bCini2_Existe
A funзao й usada como um fexist, ou seja, para verificar se o tal arquivo existe.
Exemplo de Uso:
pawn Код:
main()
{
if(bCini2_Existe("Biel_COP.ini"))
{
return 1;
}
}
bCini2_Remover
A funзao й usada para remover um arquivo jб criado.
Exemplo de Uso:
pawn Код:
main()
{
bCini2_Remover("Biel_COP.ini");
}
bCini2_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()
{
bCini2_SetarInt("Biel_COP.ini","Olб",1);
}
bCini2_SetarBool
A funзao й usada para setar em um arquivo as variбveis booleanas em um arquivo.
Exemplo de Uso:
pawn Код:
main()
{
bCini2_SetarBool("Biel_COP.ini","Olб",false);
}
bCini2_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()
{
bCini2_SetarFloat("Biel_COP.ini","Olб",0.0);
}
bCini2_SetarTexto
A funзao й usada para setar em um arquivo algum texto.
Exemplo de Uso:
pawn Код:
main()
{
bCini2_SetarTexto("Biel_COP.ini","Olб","Como vocк vai ?");
}
bCini2_GetarInt
A funзao й usada para ler em um arquivo uma int jб setada.
Exemplo de Uso:
pawn Код:
main()
{
printf("%d",bCini2_GetarInt("Biel_COP.ini","Olб"));
}
bCini2_GetarBool
A funзao й usada para ler em um arquivo uma booleana jб setada.
Exemplo de Uso:
pawn Код:
main()
{
printf("%d",bCini2_GetarBool("Biel_COP.ini","Olб"));
}
bCini2_GetarFloat
A funзao й usada para ler em um arquivo um float jб setado.
Exemplo de Uso:
pawn Код:
main()
{
printf("%f",bCini2_GetarFloat("Biel_COP.ini","Olб")) ;
}
bCini2_GetarTexto
A funзao й usada para ler em um arquivo um texto jб setado.
Exemplo de Uso:
pawn Код:
main()
{
printf("%s",bCini2_GetarTexto("Biel_COP.ini","Olб")) ;
}
bCini2_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");
}
pawn Код:
main()
{
bCini2_Copiar("Biel_COP.ini","Biel_COP2.ini",true);
}
pawn Код:
main()
{
bCini2_Copiar("Biel_COP.ini","Biel_COP2.ini",false);
}

bCini2_Console
A funзao й usada para mostrar todas as configuraзoes (Linha e Valor) de um arquivo no console.
Exemplo de uso:
pawn Код:
main()
{
bCini2_Console("Biel_COP.ini");
}

Cуdigo usado:
pawn Код:
main()
{
bCini2_Criar("Biel_COP.ini");
bCini2_SetarTexto("Biel_COP.ini","Admin","Fundador" );
bCini2_SetarTexto("Biel_COP.ini","Gosta","De Pepecas");
bCini2_SetarInt("Biel_COP.ini","Faleceu",0);
bCini2_Console("Biel_COP.ini");
}
bCini2_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()
{
bCini2_LimparArquivo("Biel_COP.ini");
}
bCini2_Setado
Com esta funзao, vocк pode verificar se existe tal linha no arquivo especificado.
Exemplo de Uso:
pawn Код:
main()
{
if(bCini2_Setado("Biel_COP.ini","Admin"))
{
return 1;
}
return 0;
}
bCini2_Desescrever
A funзao й usada para desescrever alguma linha do arquivo especificado.
Exemplo de Uso:
pawn Код:
main()
{
bCini2_Desescrever("Biel_COP.ini","Admin");
}
pawn Код:
#define bCini2_Abrir fopen
#define bCini2_Existe fexist
#define bCini2_Escrever fwrite
#define bCini2_Ler fread
#define bCini2_Fechar fclose
pawn Код:
#define bCini2_Linhas 100
#define bCini2_Capacidade1 128
#define bCini2_Capacidade2 1280
#define bCini2_Separador "="
Obs І: Caso estas definiзoes sejam suficientes para suprir as nescessidades do seu gamemode, deixe como estб.
bCini e bCini2
Quais sao as mudanзas ?
Bom, mais funзoes, mais leveza, mais rapidez e um cуdigo mais limpo e menos pesado.
Eu fiz alguns testes de velocidade com a bCini e a bCini2, criando / setando / lendo e fechando 1000 arquivos e o resultado foi este:

Como podem ver, ela realmente estб muito mais rбpida.
Download e Crйditos
IpsBruno: Ajudou na primeira Include (bCini), muito obrigado mano!
zSuYaNw: Ajudou na funзao de criar arquivos, valeu gato!
Willian_Luigi: Ajudou na funзao de Setar Textos, й nуis!
DracoBlue: Propфs uma lуgica melhor em questao da bCini2_GetarTexto, й nois gringo dlз!
Biel_COP: Idealizador da bCini e programador total da bCini2.
pawn Код:
// bCini2
#define bCini2_Linhas 100
#define bCini2_Capacidade1 128
#define bCini2_Capacidade2 1280
#define bCini2_Separador "="
// Arquivos 1
#define bCini2_Abrir fopen
#define bCini2_Existe fexist
#define bCini2_Escrever fwrite
#define bCini2_Ler fread
#define bCini2_Fechar fclose
// Arquivos 2
#define bCini2_Criar(%0) if(!bCini2_Existe(%0)) bCini2_Fechar(bCini2_Abrir(%0,io_write))
#define bCini2_Remover(%0) if(bCini2_Existe(%0)) fremove(%0)
stock Include_Texto_bCini2[bCini2_Capacidade1];
#define bCini2_SetarInt(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%d",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)
#define bCini2_SetarBool(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%d",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)
#define bCini2_SetarFloat(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%f",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)
#define bCini2_GetarInt(%0,%1) strval(bCini2_GetarTexto(%0,%1))
#define bCini2_GetarBool(%0,%1) bool:strval(bCini2_GetarTexto(%0,%1))
#define bCini2_GetarFloat(%0,%1) floatstr(bCini2_GetarTexto(%0,%1))
// Variбveis
stock bCini2_Cache_Linha_Valor[bCini2_Linhas][bCini2_Capacidade1];
stock bCini2_Nome_Arquivo[bCini2_Capacidade1];
stock bCini2_Linhas_Arquivo;
// Funзхes Usadas
stock bCini2_SetarTexto(arquivo[],linha[],valor[])
{
SetarTexto:
if(bCini2_Existe(arquivo))
{
if(!strlen(linha))
{
strmid(linha,"(null)",0,6,bCini2_Capacidade1);
}
if(!strlen(valor))
{
strmid(valor,"(null)",0,6,bCini2_Capacidade1);
}
bCini2_AbrirArquivo(arquivo);
new Linha_Valor[bCini2_Capacidade1]; format(Linha_Valor,sizeof(Linha_Valor),"%s%s%s\r\n",linha,bCini2_Separador,valor);
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
{
strmid(bCini2_Cache_Linha_Valor[i],Linha_Valor,0,strlen(Linha_Valor),bCini2_Capacidade1);
return 1;
}
}
}
strmid(bCini2_Cache_Linha_Valor[bCini2_Linhas_Arquivo],Linha_Valor,0,strlen(Linha_Valor),bCini2_Capacidade1);
bCini2_Linhas_Arquivo++;
}
else
{
goto SetarTexto;
}
return 1;
}
stock bCini2_GetarTexto(arquivo[],linha[])
{
if(bCini2_Existe(arquivo))
{
bCini2_AbrirArquivo(arquivo);
if(strlen(linha) != 0)
{
if(strlen(linha)+2 < bCini2_Capacidade1)
{
new bCini2_Texto_Arquivo[bCini2_Capacidade1];
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
{
strmid(bCini2_Texto_Arquivo,bCini2_Cache_Linha_Valor[i],0,strlen(bCini2_Cache_Linha_Valor[i]),bCini2_Capacidade1);
bCini2_rn(bCini2_Texto_Arquivo);
strmid(bCini2_Texto_Arquivo,bCini2_Texto_Arquivo,strlen(linha)+1,strlen(bCini2_Texto_Arquivo),bCini2_Capacidade1);
return bCini2_Texto_Arquivo;
}
}
}
}
}
}
new bCini2_Texto_Arquivo_Final[bCini2_Capacidade1];
return bCini2_Texto_Arquivo_Final;
}
stock bCini2_Copiar(arquivo[],arquivo2[],bool:remover)
{
if(bCini2_Existe(arquivo))
{
if(!bCini2_Existe(arquivo2))
{
bCini2_AbrirArquivo(arquivo);
new bCini2_Texto_Arquivo[bCini2_Capacidade2],File:bCini2_Files;
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
format(bCini2_Texto_Arquivo,sizeof(bCini2_Texto_Arquivo),"%s%s",bCini2_Texto_Arquivo,bCini2_Cache_Linha_Valor[i]);
}
}
bCini2_Files = bCini2_Abrir(arquivo2,io_write);
bCini2_Escrever(bCini2_Files,bCini2_Texto_Arquivo);
bCini2_Fechar(bCini2_Files);
if(remover == true)
{
bCini2_FecharArquivo();
bCini2_Remover(arquivo);
}
}
}
return 1;
}
stock bCini2_Setado(arquivo[],linha[])
{
if(bCini2_Existe(arquivo))
{
bCini2_AbrirArquivo(arquivo);
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
{
return 1;
}
}
}
}
return 0;
}
stock bCini2_Desescrever(arquivo[],linha[])
{
if(bCini2_Existe(arquivo))
{
bCini2_AbrirArquivo(arquivo);
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
{
strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
bCini2_Linhas_Arquivo--;
break;
}
}
}
}
return 1;
}
stock bCini2_LimparArquivo(arquivo[])
{
if(bCini2_Existe(arquivo))
{
bCini2_AbrirArquivo(arquivo);
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
bCini2_Linhas_Arquivo--;
}
}
}
return 1;
}
stock bCini2_Console(arquivo[])
{
if(bCini2_Existe(arquivo))
{
bCini2_AbrirArquivo(arquivo);
printf("Console do Arquivo %s:\r\n",arquivo);
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
{
print(bCini2_Cache_Linha_Valor[i]);
}
}
}
return 1;
}
// Funзхes Inusadas
stock bCini2_AbrirArquivo(arquivo[])
{
if(bCini2_Existe(arquivo))
{
if(strlen(bCini2_Nome_Arquivo))
{
if(strcmp(bCini2_Nome_Arquivo,arquivo,true) == 0)
{
return 1;
}
else
{
bCini2_FecharArquivo();
}
}
new bCini2_Files[bCini2_Capacidade2],File:bCini2_Texto_Arquivo = bCini2_Abrir(arquivo,io_read);
while(bCini2_Ler(bCini2_Texto_Arquivo,bCini2_Files))
{
if(strlen(bCini2_Files))
{
strmid(bCini2_Cache_Linha_Valor[bCini2_Linhas_Arquivo],bCini2_Files,0,strlen(bCini2_Files),bCini2_Capacidade1);
bCini2_Linhas_Arquivo++;
}
}
bCini2_Linhas_Arquivo = bCini2_Linhas_Arquivo+1;
bCini2_Fechar(bCini2_Texto_Arquivo);
strmid(bCini2_Nome_Arquivo,arquivo,0,strlen(arquivo),bCini2_Capacidade1);
}
return 1;
}
stock bCini2_FecharArquivo()
{
if(strlen(bCini2_Nome_Arquivo))
{
if(bCini2_Existe(bCini2_Nome_Arquivo))
{
new bCini2_Variavel[bCini2_Capacidade2],File:bCini2_Texto_Arquivo;
if(bCini2_Linhas_Arquivo >= 1)
{
for(new i; i<bCini2_Linhas_Arquivo; i++)
{
if(strlen(bCini2_Cache_Linha_Valor[i]))
{
format(bCini2_Variavel,sizeof(bCini2_Variavel),"%s%s",bCini2_Variavel,bCini2_Cache_Linha_Valor[i]);
strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
}
}
bCini2_Texto_Arquivo = bCini2_Abrir(bCini2_Nome_Arquivo,io_write);
bCini2_Escrever(bCini2_Texto_Arquivo,bCini2_Variavel);
bCini2_Fechar(bCini2_Texto_Arquivo);
bCini2_Linhas_Arquivo = 0;
strmid(bCini2_Nome_Arquivo,"",0,strlen(""),bCini2_Capacidade1);
}
}
}
return 1;
}
stock bCini2_rn(rn[]) // By DracoBlue
{
new Len_rn = strlen(rn);
if(rn[0] != 0)
{
if(rn[Len_rn-1] == '\r' || rn[Len_rn-1] == '\n')
{
rn[Len_rn-1] = 0;
}
if(rn[0] != 0)
{
if(rn[Len_rn-2] == '\r' || rn[Len_rn-2] == '\n')
{
rn[Len_rn-2] = 0;
}
}
}
return 1;
}
// Fim bCini2
Obs 2: A definiзao bCini2_Separador й a definiзao responsбvel pelo Set dos Arquivos, exemplo:
Linha bCini2_Separador Valor
Se o bCini2_Separador for :, o arquivo Ficarб assim:
Linha:Valor