[Tutorial] Fini Cache File System
#1

Fini Cache File System
Principais funзхes || Modos de uso || Exemplos incluнdos

Olб.

Hoje venho trazer um tutorial sobre algumas coisas fundamentais para a utilizaзгo de Fini. Alguns dias atrбs eu recebi algumas mensagens solicitando ajuda sobre como usa-la, e tambйm andei vendo que algumas pessoas estгo deixando de utiliza-la por causa de falta de informaзгo, entгo eis que venho lhe da toda a informaзгo necessбria para estб criando o que vocк bem quiser.


Primeiramente nуs devemos saber algumas coisas e o por que utilizar Fini ao invйs de outros sistemas. Pois bem, Fini й um sistema de salvamento de dados que trabalha em armazenamento em cache o que o torna mais rбpido que outros sistemas como por exemplo dini.
Em relaзгo а outros sistemas que trabalham da mesma forma que Fini, ele se destaca pela sua velocidade e fбcil utilizaзгo. Abaixo alguns testes realizados em sua ъltima versгo(4).
Superando Dini em atй 400 vezes mais rбpido na escrita, como 120 vezes mais rбpido na leitura


Agora que sabemos o por que utilizar Fini e como ele irб melhorar e muito nossos scripts, vamos conhecer as funзхes que estгo contidas na include:



Principais Funзхes

Fini_Exists:
Verifica se um determinado arquivo й existente

Fini_OpenFile:
Abri um arquivo para ser utilizado, antes de ler ou escrever algo em seus arquivo vocк deverб abri-lo.

Fini_CloseFile:
Fecha um arquivo que foi recentemente aberto, toda vez que vocк abrir um arquivo vocк deverб fecha-lo, caso contrбrio irб causar um "conflito" e gerar erros no que vocк estiver fazendo(escrita e/ou leitura)

Fini_SaveFile:
Salva um determinado arquivo, deve ser usado sempre que vocк alterar o valor de alguma coisa em seu arquivo(Em casos de salvar)

Fini_Remove:
Remove um arquivo, deleta, apaga.

Fini_Create:
Como o prуprio nome sugere ele cria um arquivo.


Escrita

Fini_SetStr:
Escreve "string's" em seu arquivo. Como por exemplo "Falcon", logo abaixo a alguns exemplos de utilizaзгo, juntamente com um FilterScript

Fini_SetVal:
Escreve nъmeros inteiros, por exemplo: ( 1234 ), sendo tambйm utilizados em casos como GivePlayerMoney, SetPlayerScore, etc...

Fini_SetBool:
Faz a escrita em forma booleana. Ele nгo escreve dentro do arquivo true e false, ele pega o valor contido dentro de true e false e transforma em: 0 e 1

Fini_SetFloat:
Escreve floats em seu arquivo. Como por exemplo: 1234.5678, podendo ser utilizado em casos de salvar vida, colete, coordenadas de players.


Leitura

Fini_GetStr:
Funзгo a leitura de "string's", como no exemplo dado acima ele irб ler o valor contido: "Falcon", mais exemplos abaixo e tambйm no FilterScript a ser mostrado.

Fini_GetValue:
Faz a leitura de nъmeros inteiros ( 1234 ), tambйm sendo utilizado por exemplo em GetPlayerMoney, GetPlayerScore...

Fini_GetBool:
Realiza a leitura de valores booleanos, como citado no treco acima ele vai entender o valor salvo(1 ou 0) como true e false na hora que vocк utilizar em alguma funзгo

Fini_GetFloat:
Faz a leitura de nъmeros em floats ( 12345.67890 ) , como o caso de posiзхes de players, health, armour, etc...




Agora que jб sabemos para que cada funзгo serve, iremos ver alguns exemplos em que se encaixam elas, assim tambйm retirando algumas dъvidas de forma de utilizaзгo. Apуs ser concluнdo este tutorial, irб ser postado alguns sistemas feitos a base de Fini. A visualizaзгo do mesmo tambйm ajudarб a compreender melhor o funcionamento.


!! Exemplos em prбtica !!

Vale lembrar tambйm que Fini faz a leitura e escrita em dois formatos: .txt e .ini
Vocк poderб fazer a junзгo das duas extensхes de arquivos para vбrios fatores como por exemplo salvar dois arquivos com o mesmo nome no mesmo diretуrio, colocando algumas informaзхes em um e outras no outro arquivo com extenзгo diferente. Alguns exemplos tambйm irб mostrando sobre a junзгo dos dois arquivos
Atenзгo: Cuidado para nгo se embaralhar e trocar as extensхes que vocк deseja utilizar em algo !!

Para facilitar mais o entendimento irб ser colocado uma parte de somente a funзгo e outra das funзхes anteriores juntamente com a que vai ser estб sendo falada no momento !!

Fini_Exists:

Em modo de somente uma extensгo:
pawn Код:
if(Fini_Exists("MeuArquivo.ini"))
{
    print("Meu arquivo .ini nгo existe");
}
else
{
    print("Meu arquivo .ini й existente");
}


if(!Fini_Exists("MeuArquivo.ini")) return print("Meu arquivo nгo existe, entгo vamos parar por aqui");
Junзгo das duas extensхes:
pawn Код:
if(!Fini_Exists("MeuArquivo.ini") && !Fini_Exists("MeuArquivo.txt"))
{
    print("Meus arquivos em .ini e .txt nгo existem");
}
else
{
    print("Meus arquivo .ini e .txt sгo existentes");
}


if(Fini_Exists("MeuArquivo.ini") && !Fini_Exists("MeuArquivo.txt"))
{
    print("Meus arquivo .ini existe e meu arquivo .txt nгo existe");
}

Fini_OpenFile:

Em modo de somente uma extensгo:
pawn Код:
if(Fini_Exists("ForumSamp.ini"))
{
    Fini_OpenFile("ForumSamp.ini");
}


if(Fini_Exists("ForumSamp.ini")) Fini_OpenFile("ForumSamp.ini");
Junзгo das duas extensхes:
pawn Код:
if(!Fini_Exists("ForumSamp.ini"))
{
    Fini_OpenFile("ForumSamp.txt");
    print("Nosso arquivo .ini nгo existe entгo abriremos o .txt");
}


if(Fini_Exists("ForumSamp.txt") && Fini_Exists("ForumSamp.ini"))
{
    Fini_OpenFile("ForumSamp.txt");
    print("Os dois arquivos sгo existentes. Entretanto sу podemos abrir um deles");
}

Fini_CloseFile:

pawn Код:
if(Fini_Exists("Falcon.ini"))
{
    Fini_OpenFile("Falcon.ini");
    print("Agora nуs abrimos nosso arquivo e iremos fazer o que queremos dentro dele");
    Fini_CloseFile();
    print("Fechamos o arquivo pois jб fizemos tudo que tinha que ser feito");
}

Fini_SaveFile:
pawn Код:
if(Fini_Exists("Galinha.ini"))
{
    Fini_OpenFile("Galinha.ini");
    //Salvamos aqui - iremos ver logo abaixo juntamente com este cуdigo como salvar coisas
    Fini_SaveFile("Galinha.ini");
    Fini_CloseFile();
}

Fini_Remove:
pawn Код:
if(Fini_Exists("Gatinho.txt")) Fini_Remove("Gatinho.txt");

if(strcmp(cmdtext, "/apagargatinho", true))
{
    if(!Fini_Exists("Gatinho.ini")) return SendClientMessage(playerid, 0xFFFFFFAA, "O arquivo Gatinho.ini nгo existe");

    SendClientMessage(playerid, 0xFFFFFFAA, "O arquivo Gatinho.ini exite, portando agora ele nгo existirб mais ..:: Deletando  ::..");
    Fini_Remove("Gatinho.ini");
    return true;
}


Fini_Create:

Em modo de somente uma extensгo:
pawn Код:
if(!Fini_Exists("MeuFini.ini")) Fini_Create("MeuFini.ini");

if(!Fini_Exists("MeuFini.ini"))
{
    Fini_Create("MeuFini.ini");
    Fini_OpenFile("MeuFini.ini");
    Fini_SaveFile("MeuFini.ini");
    Fini_CloseFile();
    Fini_Remove("MeuFini.ini");
}
Junзгo de duas extensхes:
pawn Код:
if(!Fini_Exists("Teste.ini")) Fini_Create("Teste.txt");

if(!Fini_Exists("Teste.ini") && !Fini_Exists("Teste.txt"))
{
    Fini_Create("Teste.ini");
    Fini_Create("Teste.txt");
}


Fini_SetStr:
pawn Код:
if(!Fini_Exists("Escrevendo.ini")) Fini_Create("Escrevendo.ini");

Fini_OpenFile("Escrevendo.ini");
Fini_SetStr("Ola", "Oi");
Fini_SetStr("SeuNome", "Falcon");
Fini_SaveFile("Escrevendo.ini");//lembre-se de salvar o arquivo apуs escrever
Fini_CloseFile()//Lembre-se de fechar o arquivo que foi aberto

//Ficando da seguinte forma no arquivo:

Ola=Oi
SeuNome=Falcon


Fini_SetVal:
pawn Код:
Fini_OpenFile("SemNome.txt");
Fini_SetVal("Dinheiro", GetPlayerMoney(playerid));
Fini_SetVal("Numeros", 1234);
Fini_SaveFile("SemNome.txt");//Lembre-se de salvar pois acabamos de escrever
Fini_CloseFile();


Fini_SetBool:
pawn Код:
new bool:Falcon;

Falcon = true;
Fini_OpenFile("OtherFile.ini");
Fini_SetBool("Booleana", Falcon);
Falcon = false;
Fini_SetBool("Booleana", Falcon);
Fini_SaveFile("OtherFile.ini");
Fini_CloseFile();
}


Fini_SetFloat:
pawn Код:
new Float:MinhaVida, Float:MeuColete;
GetPlayerHealth(playerid, MinhaVida);
GetPlayerArmour(playerid, MeuColete);
Fini_OpenFile("Posting.ini");
Fini_SetFloat("Health", MinhaVida);
Fini_SetFloat("Armour", MeuColete);
Fini_SaveFile("Posting.ini");//lembre-se de salvar, acabamos de escrever !!
Fini_CloseFile();


Fini_GetStr:
pawn Код:
new fString[21];

if(!Fini_Exists("MeuArquivo.txt")) Fini_Create("MeuArquivo.txt");

Fini_OpenFile("MeuArquivo.txt");
Fini_SetStr("MeuNome", "Joazinho");
Fini_SaveFile("MeuArquivo.txt");//salve aqui porque acabamos de escrever !!
format(fString, , "Meu nome й: %s", Fini_GetStr("MeuNome"));
SendClientMessage(playerid, 0xFFFFFFAA, fString);
Fini_CloseFile();


Fini_GetValue:
pawn Код:
Fini_OpenFile("Janela.ini");
GivePlayerMoney(playerid, Fini_GetValue("Dinheiro"));
Fini_CloseFile();

if(Fini_Exists("Janela.txt") && Fini_Exists("Janela.ini"))
{
    Fini_OpenFile("Janela.ini");
    GivePlayerMoney(playerid, Fini_GetValue("Dinheiro"));
    Fini_CloseFile();
    Fini_OpenFile("Janela.txt");
    GivePlayerMoney(playerid, Fini_GetValue("Dinheiro"));
    Fini_CloseFile();
}
}



Fini_GetBool:
pawn Код:
new bool:Tutorial;

Tutorial = false;
if(Tutorial == false)
{
    Fini_OpenFile("NossoArquivo.ini");
    Fini_SetBool("Booleana", false);
    Fini_SaveFile("NossoArquivo.ini");
    Fini_CloseFile();
}
   
if(Tutorial == Fini_GetBool("Booleana"))
{
    print("O valor da booleana tutorial й igual ao valor encontrado no arquivo");
}


Fini_GetFloat:
pawn Код:
new Float:fX, Float:fY, Float:fZ;
GetPlayerPos(playerid, fX, fY, fZ);
Fini_Create("Falcon.ini");
Fini_OpenFile("Falcon.ini");
Fini_SetFloat("PosX", fX);
Fini_SetFloat("PosY", fY);
Fini_SetFloat("PosZ", fZ);
Fini_SaveFile("Falcon.ini");

SetPlayerPos(playerid, Fini_GetFloat("PosX"), Fini_GetFloat("PosY"), Fini_GetFloat("PosZ"));
Fini_CloseFile();


Bem atй momento todo o assunto que me veio a cabeзa relacionado a Fini eu coloquei aqui, Caso alguйm tenha alguma dъvida poste aqui que serб resolvida.
Caso tenham alguma dica ou sugestгo envie-me um MP que eu irei acrescentar ao tutorial juntamente com o nome na participaзгo !!

Em alguns instantes eu irei estб terminando alguns sistemas feitos com Fini e estarei postando tambйm, nele vocкs poderгo estб visualizando todo o funcionamento de Fini.
Espero que todos que tinham as dъvidas e deixaram de utilizar Fini por causa de dificuldades comece a utilizar agora pois desculpas nгo hб mais
Atй mais galerinha do fуrum sa-mp.


Agradecimentos:

Eu - Tutorial, Sherlock Holmes do Bugs(by drakins)
Bloco de Notas - Utilizei para salvar o que fiz, pois as vezes a internet caia enquanto eu visualizava e perdia todo o trabalho.
Drakins(banido) e KylePT pelo Desenvolvimento de Fini Cache File System
Jhony - Tester



Atenciosamente,
Falcon.
Reply
#2

AEEE CAPETAAA ERA ISSO FODAA FALCON FICO BAOO EMMM !!

IRAIRIA
Reply
#3

muito bom, explicando certim ^^
Reply
#4

Obrigado,

Joey_R
&&
robeto013

Reply
#5

coloca o link para download.
pois ainda nгo achei o Fini para download!
Reply
#6

PHP код:
forward Dini_Save(playerid);
public 
Dini_Save(playerid)
{
    new 
arquivo[45], nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnomesizeof(nome));
    
format(arquivosizeof(arquivo), "%s.ini",nome);
    if(!
fexist(arquivo))
    {
        
format(arquivosizeof(arquivo), "%s.ini",nome);
        
Fini_Create(arquivo);
    }
    
Fini_OpenFile(arquivo);
    {
        
Fini_SetVal("Dinheiro"GetPlayerMoney(playerid));
        
Fini_SetVal("Profissao",  gTeam[playerid]);
      }
           
Fini_SaveFile(arquivo);
        
Fini_CloseFile();
        return 
1;
}
forward Dini_Load(playerid);
public 
Dini_Load(playerid)
{
    new 
arquivo[45],nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnomesizeof(nome));
    
format(arquivo,sizeof(arquivo),"%s.ini",nome);
    if(!
fexist(arquivo))
    {
        
format(arquivosizeof(arquivo), "%s.ini",nome);
        
Fini_Create(arquivo);
    }
    
Fini_OpenFile(arquivo);
    
gTeam[playerid] = Fini_GetValue("Profissao");
    
GivePlayerMoney(playeridFini_GetValue("Dinheiro"));
    
Fini_SaveFile(arquivo);
    
Fini_CloseFile();
    return 
1;

Porque nгo estб pegando ?
Reply
#7

Olб Lucas_. Aqui estб a include:
http://pastebin.com/Gu9UVz1v

Olб JOKERBOY.
Tente desta forma:

Utilize Profissao[playerid] ou entгo troque pelo seu gTeam[playerid]..
Use SalvarDadosPlayer para salvar e CarregarDadosPlayer para carregar:

pawn Код:
new Profissao[MAX_PLAYERS];
new nome[MAX_PLAYER_NAME];
new arquivo[30];

stock SalvarDadosPlayer(playerid)
{
    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), "%s.ini", nome);
    if(!Fini_Exists(arquivo)) Fini_Create(arquivo);
    Fini_OpenFile(arquivo);
    Fini_SetStr("Profissao", Profissao[playerid]);
    Fini_SetVal("Dinheiro", GetPlayerMoney(playerid));
    Fini_SaveFile(arquivo);
    Fini_CloseFile();
    return true;
}

stock CarregarDadosPlayer(playerid)
{
    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), "%s.ini", nome);
    if(!Fini_Exists(arquivo))
    {
        Fini_Create(arquivo);
        Fini_OpenFile(arquivo);
        Fini_SetVal("Profissao", 0);
        Fini_SetVal("Dinheiro", 0);
        Fini_SaveFile(arquivo);
        return Fini_CloseFile();
    }
    Fini_OpenFile(arquivo);
    Profissao[playerid] = Fini_GetValue("Profissao");
    GivePlayerMoney(playerid, Fini_GetValue("Dinheiro"));
    Fini_CloseFile();
    return true;
}
Atenciosamente,
Falcon.
Reply
#8

Funciono porйm nгo й
pawn Код:
Fini_SetStr("Profissao", Profissao[playerid]);
e sim

pawn Код:
Fini_SetVal("Profissao", Profissao[playerid]);
Reply
#9

Olб JOKERBOY.

Provavelmente vocк deve estб utilizando da seguinte maneira o mйtodo de profissхes:

pawn Код:
#define Taxista 1
#define Scripter 2
Entгo utiliza a variavel gTeam[playerid] para controlar as funзхes de cada profissгo.
Й correto afirmar que ao utilizar:

pawn Код:
gTeam[playerid] = Taxista;
serб o mesmo que:
pawn Код:
gTeam[playerid] = 1;
Salvando o valor '1' no arquivo. Em alguns casos como eu meu pode variar, pois sу funcionarб caso ele salvar a variбvel, entгo como de costume coloquei para salvar a variбvel.
Jб citando que das duas formas funcionam corretamente, sem necessidade de escolha entre si.

Atenciosamente,
Falcon.
Reply
#10

Ah, eu sу acho estranho que o fini usa string pra todos os tipos de dados. Acho que й porisso que й rбpido D:

Bom tuto sherlock
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)