15.10.2013, 17:11
(
Последний раз редактировалось BielCOP; 27.10.2013 в 07:41.
)
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");
}
pawn Код:
main()
{
bCini_Copiar("Biel_COP.ini","Biel_COP2.ini",1);
}
pawn Код:
main()
{
bCini_Copiar("Biel_COP.ini","Biel_COP2.ini",0);
}
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");
}
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 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 /\