[Plugin] zSINI - Rбpido e Seguro!
#1

zSINI



Introduзгo:
Em 2012 que comecei a desenvolver essa plugin no intuito de criar funзхes extras e tambйm rapidez com eficiкncia e seguranзa, Tendo em visto que o principal mйtodo de salvamento de arquivos era o "sistema ini" e que hoje em dia estб perdendo espaзo para bancos em SQL ( MySL / SQLite ). Inicialmente eu estava desenvolvendo meu servidor e precisava de algumas funзхes para manipular diretуrio. Como eu estava tambйm iniciando na linguagem C/C++ resolvi desenvolver uma plugin para me desenvoler e apurar meu 6є sentido. Desenvolvi essa plugin livres de bugs e ainda considerando uma rapidez enorme comparada ao DOF2 e os atuais sistemas de arquivos.





Caracterнsticas:
O Algorнtimo й realmente simples! Nгo utilizei nenhuma tecnologia do C++ apenas procurei programar totalmente em cache que й um mйtodo rбpido e totalmente eficaz.
* Pensei em utilizar thread porйm pela velocidade que eu consegui com cache, nгo achei necessбrio.
  • Funзхes
  • IniOpen(filename[]);
    • IniOpen abre um arquivo. Ela й essencial para vocк comeзar a manipular o arquivo
    • Parвmetro: Filename - nome do arquivo
    • Essa funзгo retorna 1 caso encontrar o arquivo. Caso nгo encontrar retorna 0.
    • Exemplo:
      PHP код:
      IniOpen("Contas/zSuYaNw.ini"); 
  • IniClose()
    • IniClose fecha o arquivo que vocк abriu. para poder salvar as alteraзхes sem arquivo essa funзгo й totalmente necessбria!
    • Parвmetro: essa funзгo nгo precisa de parвmetros.
    • Essa funзгo returna 1.
    • Exemplo:
      PHP код:
          IniOpen("Contas/zSuYaNw.ini");
          {
              
      printf("Senha: %s"IniGet("Senha"));
          }
          
      IniClose(); 
  • IniSet(key[], value[])
    • IniSet cria ou modifica um valor em seu arquivo.
    • Parвmetros: Key - Chave do seu arquivo / value - Valor que vocк irб modificar. Se nгo existir a "key" no arquivo ela й criada.
    • Essa funзгo sempre retorna 1.
    • Exemplo:
      PHP код:
          IniOpen("contas/zSuYaNw.ini");
          {
              
      IniSet("Nome""Forum SA MP");
              
      IniSet("Data""01/01/2006");
          }
          
      IniClose(); 
  • IniGet(key[])
    • IniGet pega o valor de uma chave em determinado arquivo.
    • Parвmetro: Key - Chave que vocк quer pegar.
    • Essa funзгo retorna o valor da Key.
    • Exemplo:
      PHP код:
          IniOpen("contas/zSuYaNw.ini");
          {
              
      printf("- %s / %s"IniGet("Nome"), IniGet("Data"));
          }
          
      IniClose(); 
  • IniUnset(key[])
    • IniUnset remove uma key e seu valor de determinado arquivo.
    • Parвmetro: Key - Chave que vocк deseja remover.
    • Essa funзгo retorna 1 caso encontrar, se nгo encontrar ela retorna 0.
    • Exemplo:
      PHP код:
          IniOpen("contas/zSuYaNw.ini");
          {
              
      IniUnset("Data");
              
              
      printf("Chave \"Data\" existe? %s"IniIsset("Data") ? ("SIM") : ("NГO"));
              
          }
          
      IniClose(); 
  • IniClean(filename[])
    • IniClean limpa totalmente um arquivo. Remove todas as entradas dele.
    • Parвmetro: filename - Arquivo que deseja limpar.
    • Essa funзгo retorna 1 caso encontrar o arquivo, se nгo encontrar retorna 0.
    • Exemplo:
      PHP код:
      IniClean("quente.txt"); 
      Obs* Essa funзгo nгo precisa estar entre IniOpen e IniClose.

  • IniIsset(key[])
    • IniIsset verifica se alguma key existe em determinado arquivo.
    • Parвmetro: Key - Chave que й verificada.
    • Retorna 1 caso ela existir, se nгo encontrar retorna 0.
    • Exemplo:
      PHP код:
          IniOpen("contas/zSuYaNw.ini");
          {
              if(!
      IniIsset("Senha")){
                  print (
      "O Usuбrio nгo tem uma senha!");
              }else{
                  print (
      "O Usuario tem uma senha :)");
              }
          }
          
      IniClose(); 
  • IniCreate(filename[])
    • IniCreate cria um arquivo limpo, sem nenhuma entrada.
    • Parвmetros: filename - Nome do arquivo em que deseja criar.
    • Se o arquivo jб existe returna 0, caso nгo existir ele cria e retorna 1.
    • Exemplo:
      PHP код:
      IniCreate("meurquivo.inc"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • IniRename(filename[], newname[i])
    • IniRename renomeia o arquivo.
    • Parвmetros: filename - Nome do arquivo que deseja renomear / newname - novo nome do arquivo.
    • Essa funзгo retorna 1 caso o arquivo existir, se nгo existir retorna 0.
    • Exemplo:
      PHP код:
      IniRename("Garfield.ini""zSuYaNw.ini"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • IniRemove(filename[])
    • IniRemove deleta/remove seu arquivo.
    • Parвmetro: filename - Nome do arquivo que desja remover.
    • Essa funзгo retorna 1 caso o arquivo existir, se nгo existir retorna 0.
    • Exemplo:
      PHP код:
      IniRemove("Garfield.ini"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • IniCopy(filename[], nextname[])
    • IniCopy copia um arquivo no mesmo diretуrio.
    • Parвmetro: filename - Nome do arquivo que deseja copiar. / nextname - nome da cуpia do arquivo.
    • Caso o arquivo existir retorna 1, se nгo existir retorna 0.
    • Exemplo:
      PHP код:
      IniCopy("suyanw.ini""suyaaaaaaan.txt"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • IniIntGet(key[])
    • IniIntGet pega o valor inteiro de determinada chave.
    • Parвmetro: key - chave que desja pegar o valor.
    • Retorna a chave caso ela existir, caso contrбrio retorna 0.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              
      printf("Score: %d - Senha: %d"IniIntGet("Score"),IniIntGet("Senha"));
          }
          
      IniClose(); 
  • IniFloatGet(key[])
    • IniFloatGet pega um valor float de determinada chave.
    • Parвmetro: key - chave que deseja pegar o float.
    • Retorna o float caso ele existir, caso contrбrio retorna 0.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              
      printf("Posiзгo: %f, %f, %f"IniFloatGet("Posx"), IniFloatGet("Posy"), IniFloatGet("Posz"));
          }
          
      IniClose(); 
  • IniBoolGet(key[])
    • IniBoolGet pega a bool de determinado key.
    • Parвmetro: key - chave aonde deseja extrair a bool.
    • Caso nгo existir a key, ela retorna 0.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              new 
      boolgang;
              
              
      gang IniBoolGet("CriarGang");
              
              
      printf("Valor: %d"gang);
              
          }
          
      IniClose(); 
  • IniBoolSet(key[], bool: value)
    • IniBoolSet modifica a bool em determinado arquivo, caso nгo existir a key ela й criada.
    • Parвmetros: Key chave aonde deseja modificar a bool / bool valor da chave.
    • Retorna 1.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              new 
      boolgang;
              
              
      gang false;
              
              
      IniBoolSet("CriarGang"gang);
          }
          
      IniClose(); 
  • IniIntSet(key[], value[])
    • IniIntSet modifica um valor inteiro em determinado arquivo, caso nгo existir a key, ela й criada.
    • Parвmetros: Key chave aonde deseja modificar / value valor da chave.
    • Retorna 1.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              new 
      mortes;
              
              
      mortes 1423;
              
              
      IniIntSet("Matou"mortes);
          }
          
      IniClose(); 
  • IniFloatSet(key[], Float: value)
    • IniFloatSet modifica um valor flutuante ( float ) em determinado arquivo, caso ele nгo existir ela й criada.
    • Parвmetros: Key chave aonde deseja modificar / value valor da float.
    • Retorna 1.
    • Exemplo:
      PHP код:
          IniOpen("suyanw.ini");
          {
              new 
      Float:Angulo;
              
              
      Angulo 45.5644;
              
              
      IniFloatSet("Angulo"Angulo);
          }
          
      IniClose(); 
  • DirCreate(dirname[])
    • DirCreate cria uma pasta no scriptfiles.
    • Parвmetros: dirname - nome da pasta que desja criar.
    • Retorna 1 se ela nгo existir, caso contrбrio ela retorna 0.
    • Exemplo:
      PHP код:
      DirCreate("Forum"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • DirDelete(dirname[])
    • DirDelete deleta uma pasta e todos os arquivos contidos nela..
    • Parвmetros: dirname - nome da pasta que deseja excluir.
    • Retorna 1 se ela nгo existir, caso contrбrio ela retorna 0.
    • Exemplo:
      PHP код:
      DirDelete("Forum"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • DirRename(dirname[], newname[])
    • DirRename(dirname[], newname[]) renomeia uma pasta.
    • Parвmetros: dirname - Nome da pasta que deseja renomear / newname - novo nome da pasta.
    • Essa funзгo retorna 1 caso a pasta existir, se nгo existir retorna 0.
    • Exemplo:
      PHP код:
      DirRename("contas""Accounts"); 
      *Obs: Essa funзгo nгo precisa estrar entre IniOpen e IniClose.

  • OpenDir(dirname[]) - ( zSINI Versгo 1.1 )
    • OpenDir(dirname[]) abre um diretуrio.
    • Parвmetros: dirname - pasta que desejas abrir.
    • Essa funзгo retorna 1 caso conseguir abrir, retorna 0 caso nгo conseguir.
    • Exemplo:
      PHP код:
          OpenDir("corridas/");
          {
          
          }
          
      CloseDir(); 
      *Obs: Essa funзгo precisa do CloseDir().

  • CloseDir() - ( zSINI Versгo 1.1 )
    • CloseDir() fecha um diretуrio aberto.
    • Parвmetros: essa funзгo nгo contйm parвmetros.
    • Retorna 1 jб foi aberto algum diretуrio com a funзгo OpenDir, caso contrбrio retorna 0.
    • Exemplo:
      PHP код:
          OpenDir("corridas/");
          {
          
          }
          
      CloseDir(); 
      *Obs: Essa funзгo precisa do OpenDir().

  • ReadDir(dest[] ) - ( zSINI Versгo 1.1 )
    • ReadDir(dest[] Lк um diretуrio aberto.
    • Parвmetros: Dest[] - String para o nome do arquivo encontrado.
    • Retorna 1 jб foi aberto algum diretуrio com a funзгo OpenDir, caso contrбrio retorna 0.
    • Exemplo:
      PHP код:
          new string[24];
          new 
      arquivos;
          
      OpenDir("corridas/");
          {
              
      arquivos DirSize();
              
      printf("Essa pasta contйm %d corridas!"arquivos);
              for(new 
      i!= arquivos; ++i){
                  
      ReadDir(string);
                  
      printf("Arquivo: %d - %s"istring);
              }
          }
          
      CloseDir(); 
      *Obs: Essa funзгo precisa estar entre OpenDir e CloseDir.

  • DirSize() - ( zSINI Versгo 1.1 )
    • DirSize() informa o nъmeros de arquivos e pastas em um diretуrio.
    • Parвmetros: Essa funзгo nгo contйm parвmetros.
    • Retorna a quantidade de pastas ou arquivos em um diretуrio. caso nгo for aberto nenhum diretуrio, retorna 0.
    • Exemplo:
      PHP код:
          OpenDir("casas/");
          {
              
      printf("Essa pasta contйm %d arquivos!"DirSize());
          }
          
      CloseDir(); 
      *Obs: Essa funзгo precisa estar entre OpenDir e CloseDir.

Exemplo:
Fiz um pequeno sistema de registro para vocкs entenderem o uso dessa plugin!
PHP код:
#include <a_samp>
#include zcmd
#include zsini
public OnFilterScriptInit()
{
    
    print(
"Simples sistema de registro e login carregado com sucesso!");
    return 
1;
}
public 
OnPlayerRequestSpawn(playerid)
{
    new 
string[128];
    new 
Nome[24];
    
GetPlayerName(playeridNome24);
    
format(stringsizeof(string),"%s.ini"Nome);
    
    if(
IniExists(string)){
        
SendClientMessage(playerid, -1"[INFO]:  Vocк tem uma conta! digite /logar");
    }
    return 
true;
}
CMD:logar(playeridparams[]){
    if(
isnull(params)){
        return 
SendClientMessage(playerid, -1"[INFO]: Por favor, digite uma senha!");
    }
    new 
string[128];
    new 
Nome[24];
    
GetPlayerName(playeridNome24);
    
format(stringsizeof(string),"%s.ini"Nome);
    
    if(!
IniExists(string)){
        return 
SendClientMessage(playerid, -1"[INFO]:  Vocк nгo tem uma conta! digite /registrar");
    }
    
    
    new 
senha[10];
    
    
IniOpen(string);
    {
    
        
format(senhasizeof(senha), IniGet("Senha"));
        
    }
    
IniClose();
    
    if(
strcmp(senhaparams) != 0){
        return 
SendClientMessage(playerid, -1"[INFO]:  senha errada!");
    }
    
    
    
    
IniOpen(string);
    {
        
SetPlayerScore(playeridIniIntGet("Score"));
    }
    
IniClose();
    
format(stringsizeof(string), "Nome: %s - %s"Nomesenha);
    
SendClientMessage(playerid, -1string);
    
    
    
    
SendClientMessage(playerid, -1"[INFO]:  Logado!!");
    return 
1;
}
CMD:registrar(playeridparams[]){
    
    if(
isnull(params)){
        return 
SendClientMessage(playerid, -1"[INFO]: Por favor, digite uma senha!");
    }
    
    if(
strlen(params) > || strlen(params) < 3){
        return 
SendClientMessage(playerid, -1"[INFO]: Por favor, digite uma senha de no mнnimo 3 caracteres, e no mбximo 8");
    }
    
    new 
string[128];
    new 
Nome[24];
    
    
GetPlayerName(playeridNome24);
    
    
format(stringsizeof(string),"%s.ini"Nome);
    
    
IniCreate(string);
    
    
IniOpen(string);
    {
        
IniSet("Senha"params);
        
IniIntSet("Score"GetPlayerScore(playerid));
    }
    
IniClose();
    
    
format(stringsizeof(string), "Cadastrado %s! Senha: %s"Nomeparams);
    
SendClientMessage(playerid, -1string);
    return 
true;




Crйditos:
Essa plugin foi desenvolvida totalmente por mim, vendo alguns tutoriais no fуrum e estudando bastante. Nгo permito a postagem da mesma em quaisquer meio de comunicaзгo sem minha concepзгo. Obra registrada.


Agradecimentos:
- Breakdrift ( Marcelo )
- ipsLeon ( Leonardo )
- Dolby ( Gustavo Araъjo )
- Multikill



Nota:
Caso falte algumas DLL's em seu computador, sugiro que atualize os seguintes aplicativos da microsoft:



Download:


Versгo 1.1:
#Linux ( zSINI.so )
#Windows ( zSINI.dll )
#Include
#Source
Reply
#2

Bom trabalho gato, eu jб disse que te amo nй ? <3

Agora sim, temos uma уtima opзгo para substituir os outros que existem aqui pelo fуrum.

Te pago um aзai mais tarde ��
Reply
#3

Nгo olhei bem o cуdigo, mas nunca vн nenhum trabalho ruim seu, SuYaN. Afinal, evolui do 0 no pawn com seu tutorial geral sobre pawn, sou agradecido meu caro.

Link do tutorial do SuYaN: Link
Reply
#4

Quote:
Originally Posted by BreakDriFT
Посмотреть сообщение
Bom trabalho gato, eu jб disse que te amo nй ? <3

Agora sim, temos uma уtima opзгo para substituir os outros que existem aqui pelo fуrum.

Te pago um aзai mais tarde ��
Obrigado meu anjo, te amo e considero como se fosse meu pote de whey hidrolisado! Daqui uns anos estaremos subindo no palco do Mr. Olympia! hahahahah




Quote:
Originally Posted by iTzMatheus
Посмотреть сообщение
Nгo olhei bem o cуdigo, mas nunca vн nenhum trabalho ruim seu, SuYaN. Afinal, evolui do 0 no pawn com seu tutorial geral sobre pawn, sou agradecido meu caro.

Link do tutorial do SuYaN: Link
Obrigado pela preferкncia, dб uma analisada na plugin e me dб sua opiniгo.. ela й muito importante para mim :P
Reply
#5

Eu vi o cуdigo feito por vocк, estб bastante explicado de fбcil entendimento. Gostei da simplicidade que vocк deixou no plugin, se for rбpido como vocк realmente disse eu pretendo utiliza-lo em sistemas externos da gamemode pois ainda assim, acho que continuaria com MySQL. Excelente trabalho brother.
Reply
#6

Muito bom Suyan, sу faltou tratar a palavra plug-in como sendo do gкnero masculino, fora esse shemale aн que vocк cisma em usar, уtimo trabalho!
Reply
#7

Quote:
Originally Posted by iTzMatheus
Посмотреть сообщение
Eu vi o cуdigo feito por vocк, estб bastante explicado de fбcil entendimento. Gostei da simplicidade que vocк deixou no plugin, se for rбpido como vocк realmente disse eu pretendo utiliza-lo em sistemas externos da gamemode pois ainda assim, acho que continuaria com MySQL. Excelente trabalho brother.
Bom, ele й realmente rбpido e totalmente seguro e com vбrias funзхes extras...

Fiz um pequeno benchmark comparando com o mais utilizado DOF2,


Na leitura, o zSINI consegue ser atй o dobro de velocidade contra o DOF2, e na escrita consegue ser atй 3x mais rбpido..
source
PHP код:
#include <a_samp>
#include zsini
#include dof2
#define START_BENCH(%0); {new __a=%0,__b=0,__c,__d=GetTickCount(),__e=1;do{}\
    
while(__d==GetTickCount());__c=GetTickCount();__d=__c;while(__c-__d<__a||\
    
__e){if(__e){if(__c-__d>=__a){__e=0;__c=GetTickCount();do{}while(__c==\
    
GetTickCount());__c=GetTickCount();__d=__c;__b=0;}}{
    
#define FINISH_BENCH(%0); }__b++;__c=GetTickCount();}printf(" Bench for "\
    
%0": executes, by average, %.2f times/ms.",floatdiv(__b,__a));}
    
#define time 1500
#pragma tabsize 0
public OnFilterScriptInit()
{
    
// do no remove
    
START_BENCHtime );
    
FINISH_BENCH# );
    //
    // testing
    
printf("===[ LEITURA ]====");
    {
    
        
START_BENCH(time);
        {
            
DOF2_GetString("zSuYaNw.ini""Senha");
        }
        
FINISH_BENCH("DOF2");
    }
    
    
IniOpen("zSuYaNw.ini");
    {
        
START_BENCH(time);
        {
             
IniGet("Senha");
        }
        
FINISH_BENCH("zsini");
    }
    
IniClose();
    
printf("==================");
    
    
    
    
printf("===[ Escrita ]====");
    {
        
START_BENCH(time);
        {
            
DOF2_SetString("zSuYaNw.ini""Senha""HelloWorld");
            
        }
        
FINISH_BENCH("DOF2");
    }
    
DOF2_Exit();
    
    
IniOpen("zSuYaNw.ini");
    {
        
START_BENCH(time);
        {
             
IniSet("Senha","Amoooor");
        }
        
FINISH_BENCH("zsini");
    }
    
IniClose();
    
printf("==================");
    return 
1;





Comparei tambйm com bcini:


source
PHP код:
#include <a_samp>
#include zsini
#include bcini
#define START_BENCH(%0); {new __a=%0,__b=0,__c,__d=GetTickCount(),__e=1;do{}\
    
while(__d==GetTickCount());__c=GetTickCount();__d=__c;while(__c-__d<__a||\
    
__e){if(__e){if(__c-__d>=__a){__e=0;__c=GetTickCount();do{}while(__c==\
    
GetTickCount());__c=GetTickCount();__d=__c;__b=0;}}{
    
#define FINISH_BENCH(%0); }__b++;__c=GetTickCount();}printf(" Bench for "\
    
%0": executes, by average, %.2f times/ms.",floatdiv(__b,__a));}
    
#define time 1500
#pragma tabsize 0
public OnFilterScriptInit()
{
    
// do no remove
    
START_BENCHtime );
    
FINISH_BENCH# );
    //
    // testing write speed
    
printf("===[ LEITURA ]====");
    {
    
        
START_BENCH(time);
        {
            
bCini6_ReadText("zSuYaNw.ini""Senha");
        }
        
FINISH_BENCH("bCINI");
    }
    
    
IniOpen("zSuYaNw.ini");
    {
        
START_BENCH(time);
        {
             
IniGet("Senha");
        }
        
FINISH_BENCH("zsini");
    }
    
IniClose();
    
printf("==================");
    
    
    
    
printf("===[ Escrita ]====");
    {
        
START_BENCH(time);
        {
            
bCini6_SetText("zSuYaNw.ini""Senha""HelloWorld");
            
        }
        
FINISH_BENCH("bCINI");
    }
    
    
IniOpen("zSuYaNw.ini");
    {
        
START_BENCH(time);
        {
             
IniSet("Senha","Amoooor");
        }
        
FINISH_BENCH("zsini");
    }
    
IniClose();
    
printf("==================");
    return 
1;

Observaзгo: Nгo estou buscando super rapidez nessa projeto! Apenas quero que esteja rбpida mantendo a total seguranзa!



Quote:
Originally Posted by ipsLeon
Посмотреть сообщение
Muito bom Suyan, sу faltou tratar a palavra plug-in como sendo do gкnero masculino, fora esse shemale aн que vocк cisma em usar, уtimo trabalho!
Obrigado mano, este mйtodo shemale nгo sei da onde vem mas acaba escapando
Reply
#8

Um feedback bacana, era vocк colocar aquela mesma funзгo do DOF2, onde vocк cria o arquivo e de quebra cria a senha junto.
Reply
#9

Que legal Gato, pena que minha vibe nгo й arquivos ini, sou da equipe SQLite, banco de dados; Mas para quem gosta tб ai um bom projeto super rбpido e eficaz.
Reply
#10

Й quase uma dini em c++ gostei do seu trabalho!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)