Originally Posted by Sothclaw
Dou crйdito para [FEK] DraKins, por ter usado o FINI para aprender a ultilizar Cache.
Uma das caracterнsticas й a correзгo de bug em Windows e Linux de linha ( \r \n) |
//Caso vocк esteje usando Windows, defina no OnGameModeInit:
file_OS(WINDOWS);
//Caso vocк esteje usando LINUX, defina no OnGameModeInit
file_OS(LINUX);
// - Ediзгo
file_Create(filename[])
// Cria um arquivo com o nome <filename> sem esquecer da extensгo ( .txt .ini.cfg )
file_Delete(filename[])
// Deleta o arquivo com o nome <filename>
// - Abrindo e fechando
file_Open(filename[])
//Abre o arquivo <filename> e salva os arquivos na memуria [Ele nгo vai ler arquivos sem o sinal ' = ' ]
// <NOTA> Nгo abra vбrios arquivos em um sу cуdigo, use file_Close e depois abra o outro arquivo!
file_Save(filename[])
// Salva o arquivo <filename>
// Vocк nгo precisa salvar o arquivo ao ler o mesmo.
file_Close()
//Sempre use file_Close para fechar o arquivo, nгo abra vбrios arquivos sem fechбr os mesmos.
//- Escrevendo
file_SetStr(key[], value[])
//Escreve uma STRING na KEY
file_SetVal(key[], value)
//Escreve um VALOR na KEY
file_SetFloat(key[], value)
//Escreve uma FLOAT na KEY
file_IncVal(key[], amount)
//Just a simple macro to save space when writing, Increments the value of <key> by <amount>
file_Remove(key[])
//Remove a KEY do arquivo.
//- LENDO
file_GetStr(key[])
//Retorna a string do arquivo
file_GetVal(key[])
// Retorna o valor da Key
Float:file_GetFloat(key[])
// Retorna a Float da Key
file_IsKey(key[])
//Checa se a chave й valida
// < - Outros >
file_PrintAll()
//Jб se diz por sн sу.
file_OS(type = LINUX or WINDOWS)
//USE ISSO PARA DEFINIR O SISTEMA OPERACIONAL EM 'OnGameModeInit' ( ex: file_OS(WINDOWS); )
#include <a_samp>
#include <inifile>
stock SalvarDados(playerid)
{
new arquivo[0x30], nome[0x20]; GetPlayerName(playerid, nome, sizeof(nome));
format(arquivo, sizeof(arquivo), "%s.ini", nome);
if(!fexist(arquivo)) file_Create(arquivo); //Caso nгo exista
file_Open(arquivo); // Abre o arquivo.
file_SetVal("Dinheiro", GetPlayerMoney(playerid)); // SETA um VALOR no arquivo
file_SetVal("Skin", GetPlayerSkin(playerid)); // SETA UM VALOR NO ARQUIVO
file_SetVal("Score", GetPlayerScore(playerid)); //SETA UM VALOR NO ARQUIVO
file_SetStr("Ricop522", "Lindo"); //SETA UMA STRING NO ARQUIVO
file_Save(arquivo); //SALVA !
file_Close();//Fecha
return 0x01;
}
stock CarregarDados(playerid)
{
new arquivo[0x30], nome[0x20]; GetPlayerName(playerid, nome, sizeof(nome));
format(arquivo,sizeof(arquivo),"%s.txt",nome);
if(!fexist(arquivo)) file_Create(arquivo); //Caso nгo exista, ele cria o arquivo
file_Open(arquivo);
GivePlayerMoney(playerid, file_GetVal("Dinheiro"));
SetPlayerSkin(playerid, file_GetVal("Skin"));
SetPlayerScore(playerid, file_GetVal("Score"));
//Carregar arquivos: file_GetStr("Ricop522");
file_Close();
return 0x01;
}
///
#include a_samp
#include fini
#include shot
//gambiarras
#define IsPlayerConnected(%0) ppa[%0]
#define MaxClients 4000
#define LoopClients(%0) for(new %0; %0 < MaxClients; %0++) if(IsPlayerConnected(%0))
main(){OnInit();}
static stock bool:ppa[MaxClients] = {true,...};
OnInit();public OnInit()
{
///===
new tickfile = GetTickCount();
file_Create("File.ini");
file_OS(WINDOWS); file_Open("File.ini");
{
LoopClients(i) {
file_SetVal("ValueTeste", random(91891));
file_SetStr("StringTeste", RandomString(12,true));
file_Save("File.ini");
}
}
file_Close();
tickfile = GetTickCount() - tickfile;
///===
new tickfini = GetTickCount();
Fini_Create("Fini.ini");
Fini_OpenFile("Fini.ini");
{
LoopClients(i) {
Fini_SetVal("ValueTeste", random(91891));
Fini_SetStr("StringTeste",RandomString(12,true));
Fini_SaveFile("Fini.ini");
}
}
Fini_CloseFile();
tickfini = GetTickCount() - tickfini;
//===
printf("FINI %d ms",tickfini);
printf("FILE %d ms",tickfile);
return true;
}
RandomString(len,bool:lowercase)
{
new
string[26] // maxchars ...
;
for(new i = 0; i < len; i++) {
string[i] = lowercase? tolower(random(25)+65) : (random(25)+65);
}
return string;
}
#define WINDOWS
stock Fini_SaveFile(sFile[])
{
iFile = fopen(sFile,io_write),
sTemp[0] = EOS;
iLoop = 0x0;
while((sCacheKeys[iLoop][0x0]) && (iLoop < MaxLines)) {
#if defined WINDOWS
format(sTemp,MaxKeys,"%s=%s\r\n",sCacheKeys[iLoop],sCacheValue[iLoop]);
#else
format(sTemp,MaxKeys,"%s=%s\n",sCacheKeys[iLoop],sCacheValue[iLoop]);
#endif
fwrite(iFile,sTemp);
++iLoop;
}
return fclose(iFile);
}
/*////////////////////////////////////////////////////////////////////////////////
_ ____ _____ __ __
(_) _ \ ___ |_ _|__ __ _| \/ |
| | |_) / __| | |/ _ \/ _` | |\/| |
| | __/\__ \ | | __/ (_| | | | |
|_|_| |___/ |_|\___|\__,_|_| |_|
Intelligent Programming Style ®
____________________________
http://www.ips-team.blogspot.com
http://www.ips-team.forumeiros.com
____________________________
Created By DraKiNs & SlashPT
Thanks to [iPs]TeaM and Jhony
*/
////////////////////////////////////////////////////////////////////////////////
//========= [ Configs of Read/Write Files ] ====================================
#define MaxLines (999)
#define MaxKeys (064)
#define Fini_GetBool(%0) (bool:strval(Fini_GetStr(%0)))
#define Fini_GetValue(%0) (strval(Fini_GetStr(%0)))
#define Fini_Exists(%0) (fexist(%0))
#define Fini_GetFloat(%0) floatstr(Fini_GetStr(%0))
#define Fini_Remove(%0) (fremove(%0))
#define WINDOWS //delete if use linux
//========= [ Variables of Set/Get Ini ] ========================================
new
sCacheKeys[MaxLines][MaxKeys],
sCacheValue[MaxLines][MaxKeys],
iLoop = 0x0,
iFind = 0x0,
iKeySet = 0x0,
File:iFile = File:0,
sTemp[MaxKeys] = " ";
//============ [ Functions ] ================================================
//Get ~ Read Functions
stock Fini_GetStr(sKey[])
{
iLoop = 0x0;
while((sCacheKeys[iLoop][0x0]) && (iLoop < MaxLines)) {
if(!strcmp(sCacheKeys[iLoop],sKey,false))
return sCacheValue[iLoop];
++iLoop;
}
return sCacheKeys[0];
}
//Others Funcions
stock Fini_Create(sFile[])
{
if(Fini_Exists(sFile)) return false;
iFile = fopen(sFile,io_write);
return fclose(iFile);
}
stock Fini_OpenFile(sFile[])
{
iFile = fopen(sFile,io_read),
iFind = 0x0;
iLoop = 0x0;
while(fread(iFile,sTemp)) {
sTemp[strlen(sTemp) - 2] = EOS;
iFind = strfind(sTemp,"=");
format(sCacheValue[iLoop],MaxKeys,sTemp[iFind + 1]);
sTemp[iFind] = EOS;
format(sCacheKeys[iLoop],MaxKeys,sTemp);
++iLoop;
}
return fclose(iFile);
}
stock Fini_SaveFile(sFile[])
{
iFile = fopen(sFile,io_write),
sTemp[0] = EOS;
iLoop = 0x0;
while((sCacheKeys[iLoop][0x0]) && (iLoop < MaxLines)) {
#if defined WINDOWS
format(sTemp,MaxKeys,"%s=%s\r\n",sCacheKeys[iLoop],sCacheValue[iLoop]);
#else
format(sTemp,MaxKeys,"%s=%s\n",sCacheKeys[iLoop],sCacheValue[iLoop]);
#endif
fwrite(iFile,sTemp);
++iLoop;
}
return fclose(iFile);
}
stock Fini_CloseFile()
{
sCacheKeys[0][0] = EOS;
sCacheValue[0][0] = EOS;
iLoop = 0x0;
iFind = 0x0;
iKeySet = 0x0;
sTemp[0] = EOS;
return true;
}
stock Fini_IsSet(sTag[])
{
iLoop = 0x0;
while((sCacheKeys[iLoop][0x0]) && (iLoop < MaxLines)) {
if(!strcmp(sCacheKeys[iLoop],sTag,false)) {
return true;
}
iLoop++;
}
return false;
}
//Set ~ Write Functions
stock Fini_SetStr(sKey[],sValue[])
{
iLoop = 0x0;
while((sCacheKeys[iLoop][0x0]) && (iLoop < MaxLines)) {
if(!strcmp(sCacheKeys[iLoop],sKey,false)) {
sCacheValue[iLoop][0] = EOS;
strcat(sCacheValue[iLoop],sValue);
iKeySet = 1;
}
++iLoop;
}
if(!iKeySet) {
while(sCacheKeys[iLoop][0]) iLoop++;
strcat(sCacheValue[iLoop],sValue);
strcat(sCacheKeys[iLoop],sKey);
}
return EOS;
}
stock Fini_SetFloat(sTag[],Float:iVal)
{
format(sTemp,MaxKeys,"%f",iVal);
return Fini_SetStr(sTag,sTemp);
}
stock Fini_SetVal(sTag[],iVal)
{
format(sTemp,MaxKeys,"%d",iVal);
return Fini_SetStr(sTag,sTemp);
}
stock Fini_SetBool(sTag[],bool:iVal)
{
format(sTemp,MaxKeys,"%d",iVal);
return Fini_SetStr(sTag,sTemp);
}
for(new i; i < 10; ++i)
for(new i; i < 10; i++)