SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 24/04/2011, 12:51 AM   #1
Falcon.
High-roller
 
Falcon.'s Avatar
 
Join Date: Jul 2010
Location: Brasília - DF
Posts: 1,743
Reputation: 173
Lightbulb Fini Cache File System

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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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.
__________________

Republic Adventure RPG
em breve...

Falcon. is offline   Reply With Quote
Old 24/04/2011, 01:04 AM   #2
Joey_R
Little Clucker
 
Joey_R's Avatar
 
Join Date: Aug 2010
Location: From Hell
Posts: 28
Reputation: 3
Default Respuesta: Fini Cache File System

AEEE CAPETAAA ERA ISSO FODAA FALCON FICO BAOO EMMM !!

IRAIRIA
Joey_R is offline   Reply With Quote
Old 24/04/2011, 01:58 AM   #3
roberto013
Little Clucker
 
Join Date: Aug 2010
Posts: 26
Reputation: 0
Default Re: Fini Cache File System

muito bom, explicando certim ^^
roberto013 is offline   Reply With Quote
Old 24/04/2011, 02:30 AM   #4
Falcon.
High-roller
 
Falcon.'s Avatar
 
Join Date: Jul 2010
Location: Brasília - DF
Posts: 1,743
Reputation: 173
Default Re: Fini Cache File System

Obrigado,

Joey_R
&&
robeto013

__________________

Republic Adventure RPG
em breve...

Falcon. is offline   Reply With Quote
Old 24/04/2011, 02:30 AM   #5
Lucas_
Big Clucker
 
Join Date: Apr 2011
Posts: 149
Reputation: 0
Default Re: Fini Cache File System

coloca o link para download.
pois ainda não achei o Fini para download!
Lucas_ is offline   Reply With Quote
Old 24/04/2011, 02:48 AM   #6
JOKERBOY
Huge Clucker
 
Join Date: Mar 2011
Posts: 203
Reputation: 3
Default Re: Fini Cache File System

PHP Code:
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 ?
__________________
** CSS e PHOTOSHOP **
Duvida de CSS, e PHOTOSHOP gabriel_swt@hotmail.com
JOKERBOY is offline   Reply With Quote
Old 24/04/2011, 03:07 AM   #7
Falcon.
High-roller
 
Falcon.'s Avatar
 
Join Date: Jul 2010
Location: Brasília - DF
Posts: 1,743
Reputation: 173
Default Re: Fini Cache File System

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 Code:
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.
__________________

Republic Adventure RPG
em breve...

Falcon. is offline   Reply With Quote
Old 24/04/2011, 03:28 AM   #8
JOKERBOY
Huge Clucker
 
Join Date: Mar 2011
Posts: 203
Reputation: 3
Default Re: Fini Cache File System

Funciono porém não é
pawn Code:
Fini_SetStr("Profissao", Profissao[playerid]);

e sim

pawn Code:
Fini_SetVal("Profissao", Profissao[playerid]);
__________________
** CSS e PHOTOSHOP **
Duvida de CSS, e PHOTOSHOP gabriel_swt@hotmail.com
JOKERBOY is offline   Reply With Quote
Old 24/04/2011, 03:40 AM   #9
Falcon.
High-roller
 
Falcon.'s Avatar
 
Join Date: Jul 2010
Location: Brasília - DF
Posts: 1,743
Reputation: 173
Default Re: Fini Cache File System

Olá JOKERBOY.

Provavelmente você deve está utilizando da seguinte maneira o método de profissões:

pawn Code:
#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 Code:
gTeam[playerid] = Taxista;
será o mesmo que:
pawn Code:
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.
__________________

Republic Adventure RPG
em breve...

Falcon. is offline   Reply With Quote
Old 24/04/2011, 10:31 AM   #10
pGibson
Little Clucker
 
Join Date: Apr 2011
Posts: 43
Reputation: 0
Default Re: Fini Cache File System

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
__________________
[iPs]Gibson - iPs TeaM|Comandante

_______________________________________________

[iPs]TeaM
Uma das melhores equipes de programadores do sul da america latina com mais de 100 mil visitas em seu blog oficial ®.
Visitada e todos paises via diversos meios de comunicação com centenas de projetos lançados se torna uma equipe de exelência com acesso e reconhecimento internacional.
Venha fazer parte dessa equipe.

_______________________________________________
pGibson is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Include] Fini Cache File System (72x Faster than DINI!) SlashPT Includes 94 21/06/2011 03:41 PM
[FilterScript] [FS] File Cars - Vehicle File Storing System! lavamike Filterscripts 11 27/08/2010 11:02 PM
[Include] [INC]BFX Ini System - Cache Based BlackFoX Includes 3 01/05/2010 05:01 PM
Large System Cache and DisablePagingExecutive BP13 Everything and Nothing 4 30/03/2010 12:38 AM


All times are GMT. The time now is 02:38 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.