new File:arquivo = fopen("Arquivo.txt", io_append);
fwrite(arquivo, "bla bla bla\n\r");
fclose(arquivo);
new File:arquivo = fopen("Arquivo.txt", io_append), string[100];
while(fread(arquivo, string)) {
// Valor de string, é o texto da linha atual.
print(string);
}
fclose(arquivo);
/*
Gere uma enum ou variáveis para armazenar os dados do jogador. Aconselho usar enum por ser uma
prática melhor e ter um código mais legivel, menos propenso a erros.
*/
enum E_PLAYER_DATA {
PlayerNome[MAX_PLAYER_NAME],
PlayerSenha[20],
PlayerIp[16],
PlayerDinheiro,
PlayerLevel
};
new Player[MAX_PLAYERS][E_PLAYER_DATA];
/*
Carregue os dados dele assim que ele entrar no servidor.
*/
public OnPlayerConnect(playerid) {
GetPlayerName(playerid, Player[playerid][PlayerNome], MAX_PLAYER_NAME);
GetPlayerIp(playerid, Player[playerid][PlayerIp], 16);
format(Player[playerid][PlayerSenha], 20, DOF2_GetString(PlayerFile(playerid), "Senha"));
Player[playerid][PlayerDinheiro] = DOF2_GetInt(PlayerFile(playerid), "Dinheiro");
Player[playerid][PlayerLevel] = DOF2_GetInt(PlayerFile(playerid), "Level");
return 1;
}
/*
Apartir daqui, os dados estão em variáveis. Use-as.
*/
public OnPlayerSpawn(playerid) {
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, Player[playerid][PlayerDinheiro]);
SetPlayerScore(playerid, Player[playerid][PlayerLevel]);
// Perceba que os dados estão todos armazenados nas variáveis.
return 1;
}
/*
Quando precisar salvar os dados dele na conta, aconselho criar uma função separada para poder
salvar os dados com mais facilidade.
*/
public OnPlayerDisconnect(playerid, reason) {
PlayerSave(playerid);
return 1;
}
PlayerSave(playerid) {
DOF2_SetString(PlayerFile(playerid), "Senha", Player[playerid][PlayerSenha]);
DOF2_SetInt(PlayerFile(playerid), "Dinheiro", Player[playerid][PlayerDinheiro]);
DOF2_SetInt(PlayerFile(playerid), "Level", Player[playerid][PlayerLevel]);
DOF2_SaveFile();
return 1;
}
/*
Essa função é apenas para pegar facilmente o arquivo do jogador.
*/
PlayerFile(playerid) {
new file[40];
format(file, sizeof(file), "Contas/%s.ini");
return file;
}
/*
Gere uma enum ou variáveis para armazenar os dados da casa. Aconselho usar enum por ser uma
prática melhor e ter um código mais legivel, menos propenso a erros.
*/
enum E_CASA_DATA {
CasaDono[MAX_PLAYER_NAME],
CasaID,
CasaValor,
};
new Casa[MAX_CASAS][E_CASA_DATA];
/*
Carregue os dados da casa assim que o servidor ligar.
*/
public OnGameModeInit() {
for(new i = 0; i < MAX_CASAS; ++i) {
if(DOF2_FileExists(CasaFile(i))) {
format(Casa[i][CasaDono], MAX_PLAYER_NAME, DOF2_GetString(CasaFile(i), "Dono"));
Casa[i][CasaID] = i;
Casa[i][CasaValor] = DOF_GetInt(CasaFile(i), "Valor");
}
}
return 1;
}
/*
Apartir daqui, use as variáveis para pegar e manipular os valores da casa e depois basta salva-lá quando
precisar. Aconselho novamente criar uma função de save assim como no sistema de contas.
*/
--------- Benchmark --------- Include: Bini | Mйtodo: Escrita | Mйdia: 111ms Include: Bini | Mйtodo: Leitura | Mйdia: 1ms Include: Dof2 | Mйtodo: Escrita | Mйdia: 103ms Include: Dof2 | Mйtodo: Leitura | Mйdia: 7ms Include: Dini | Mйtodo: Escrita | Mйdia: 4137ms Include: Dini | Mйtodo: Leitura | Mйdia: 71ms Include: Dini2 | Mйtodo: Escrita | Mйdia: 126ms Include: Dini2 | Mйtodo: Leitura | Mйdia: 2ms Include: bCini | Mйtodo: Escrita | Mйdia: 1877ms Include: bCini | Mйtodo: Leitura | Mйdia: 67ms --------- Fim Benchmark --------- |
print("\n\n\n--------- Benchmark ---------\n"); new tentat[10], tempo[2], media; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { INI_Open("bini.txt"); INI_WriteString("bini.txt", "key_1", "valor1"); INI_WriteString("bini.txt", "key_2", "valor2"); INI_WriteString("bini.txt", "key_3", "valor3"); INI_WriteString("bini.txt", "key_4", "valor4"); INI_WriteString("bini.txt", "key_5", "valor5"); INI_WriteFloat("bini.txt", "key_6", 999.00); INI_WriteFloat("bini.txt", "key_7", 999.00); INI_WriteFloat("bini.txt", "key_8", 999.00); INI_WriteFloat("bini.txt", "key_9", 999.00); INI_WriteFloat("bini.txt", "key_10", 999.00); INI_WriteInt("bini.txt", "key_11", 999); INI_WriteInt("bini.txt", "key_12", 999); INI_WriteInt("bini.txt", "key_13", 999); INI_WriteInt("bini.txt", "key_14", 999); INI_WriteInt("bini.txt", "key_15", 999); INI_Save(); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Bini | Mйtodo: Escrita | Mйdia: %ims", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { INI_Open("bini.txt"); INI_ReadString("bini.txt", "key_1"); INI_ReadString("bini.txt", "key_2"); INI_ReadString("bini.txt", "key_3"); INI_ReadString("bini.txt", "key_4"); INI_ReadString("bini.txt", "key_5"); INI_ReadFloat("bini.txt", "key_6"); INI_ReadFloat("bini.txt", "key_7"); INI_ReadFloat("bini.txt", "key_8"); INI_ReadFloat("bini.txt", "key_9"); INI_ReadFloat("bini.txt", "key_10"); INI_ReadInt("bini.txt", "key_11"); INI_ReadInt("bini.txt", "key_12"); INI_ReadInt("bini.txt", "key_13"); INI_ReadInt("bini.txt", "key_14"); INI_ReadInt("bini.txt", "key_15"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Bini | Mйtodo: Leitura | Mйdia: %ims\n", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!DOF2::FileExists("dof2.txt")) DOF2::CreateFile("dof2.txt"); DOF2::SetString("dof2.txt", "key_1", "valor1"); DOF2::SetString("dof2.txt", "key_2", "valor2"); DOF2::SetString("dof2.txt", "key_3", "valor3"); DOF2::SetString("dof2.txt", "key_4", "valor4"); DOF2::SetString("dof2.txt", "key_5", "valor5"); DOF2::SetFloat("dof2.txt", "key_6", 999.00); DOF2::SetFloat("dof2.txt", "key_7", 999.00); DOF2::SetFloat("dof2.txt", "key_8", 999.00); DOF2::SetFloat("dof2.txt", "key_9", 999.00); DOF2::SetFloat("dof2.txt", "key_10", 999.00); DOF2::SetInt("dof2.txt", "key_11", 999); DOF2::SetInt("dof2.txt", "key_12", 999); DOF2::SetInt("dof2.txt", "key_13", 999); DOF2::SetInt("dof2.txt", "key_14", 999); DOF2::SetInt("dof2.txt", "key_15", 999); DOF2::SaveFile(); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dof2 | Mйtodo: Escrita | Mйdia: %ims", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!DOF2::FileExists("dof2.txt")) DOF2::CreateFile("dof2.txt"); DOF2::GetString("dof2.txt", "key_1"); DOF2::GetString("dof2.txt", "key_2"); DOF2::GetString("dof2.txt", "key_3"); DOF2::GetString("dof2.txt", "key_4"); DOF2::GetString("dof2.txt", "key_5"); DOF2::GetFloat("dof2.txt", "key_6"); DOF2::GetFloat("dof2.txt", "key_7"); DOF2::GetFloat("dof2.txt", "key_8"); DOF2::GetFloat("dof2.txt", "key_9"); DOF2::GetFloat("dof2.txt", "key_10"); DOF2::GetInt("dof2.txt", "key_11"); DOF2::GetInt("dof2.txt", "key_12"); DOF2::GetInt("dof2.txt", "key_13"); DOF2::GetInt("dof2.txt", "key_14"); DOF2::GetInt("dof2.txt", "key_15"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dof2 | Mйtodo: Leitura | Mйdia: %ims\n", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!dini_Exists("dini.txt")) dini_Create("dini.txt"); dini_Set("dini.txt", "key_1", "valor1"); dini_Set("dini.txt", "key_2", "valor2"); dini_Set("dini.txt", "key_3", "valor3"); dini_Set("dini.txt", "key_4", "valor4"); dini_Set("dini.txt", "key_5", "valor5"); dini_FloatSet("dini.txt", "key_6", 999.00); dini_FloatSet("dini.txt", "key_7", 999.00); dini_FloatSet("dini.txt", "key_8", 999.00); dini_FloatSet("dini.txt", "key_9", 999.00); dini_FloatSet("dini.txt", "key_10", 999.00); dini_IntSet("dini.txt", "key_11", 999); dini_IntSet("dini.txt", "key_12", 999); dini_IntSet("dini.txt", "key_13", 999); dini_IntSet("dini.txt", "key_14", 999); dini_IntSet("dini.txt", "key_15", 999); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dini | Mйtodo: Escrita | Mйdia: %ims", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!dini_Exists("dini.txt")) dini_Create("dini.txt"); dini_Get("dini.txt", "key_1"); dini_Get("dini.txt", "key_2"); dini_Get("dini.txt", "key_3"); dini_Get("dini.txt", "key_4"); dini_Get("dini.txt", "key_5"); dini_Float("dini.txt", "key_6"); dini_Float("dini.txt", "key_7"); dini_Float("dini.txt", "key_8"); dini_Float("dini.txt", "key_9"); dini_Float("dini.txt", "key_10"); dini_Int("dini.txt", "key_11"); dini_Int("dini.txt", "key_12"); dini_Int("dini.txt", "key_13"); dini_Int("dini.txt", "key_14"); dini_Int("dini.txt", "key_15"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dini | Mйtodo: Leitura | Mйdia: %ims\n", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!dini2_Exists("dini2.txt")) dini2_Create("dini2.txt"); dini2_Set("dini2.txt", "key_1", "valor1"); dini2_Set("dini2.txt", "key_2", "valor2"); dini2_Set("dini2.txt", "key_3", "valor3"); dini2_Set("dini2.txt", "key_4", "valor4"); dini2_Set("dini2.txt", "key_5", "valor5"); dini2_FloatSet("dini2.txt", "key_6", 999.00); dini2_FloatSet("dini2.txt", "key_7", 999.00); dini2_FloatSet("dini2.txt", "key_8", 999.00); dini2_FloatSet("dini2.txt", "key_9", 999.00); dini2_FloatSet("dini2.txt", "key_10", 999.00); dini2_IntSet("dini2.txt", "key_11", 999); dini2_IntSet("dini2.txt", "key_12", 999); dini2_IntSet("dini2.txt", "key_13", 999); dini2_IntSet("dini2.txt", "key_14", 999); dini2_IntSet("dini2.txt", "key_15", 999); dini2_Timeout("dini2.txt"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dini2 | Mйtodo: Escrita | Mйdia: %ims", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!dini2_Exists("dini2.txt")) dini2_Create("dini2.txt"); dini2_Get("dini2.txt", "key_1"); dini2_Get("dini2.txt", "key_2"); dini2_Get("dini2.txt", "key_3"); dini2_Get("dini2.txt", "key_4"); dini2_Get("dini2.txt", "key_5"); dini2_Float("dini2.txt", "key_6"); dini2_Float("dini2.txt", "key_7"); dini2_Float("dini2.txt", "key_8"); dini2_Float("dini2.txt", "key_9"); dini2_Float("dini2.txt", "key_10"); dini2_Int("dini2.txt", "key_11"); dini2_Int("dini2.txt", "key_12"); dini2_Int("dini2.txt", "key_13"); dini2_Int("dini2.txt", "key_14"); dini2_Int("dini2.txt", "key_15"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: Dini2 | Mйtodo: Leitura | Mйdia: %ims\n", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!bCini_Existe("bcini.txt")) bCini_Criar("bcini.txt"); bCini_SetarTexto("bcini.txt", "key_1", "valor1"); bCini_SetarTexto("bcini.txt", "key_2", "valor2"); bCini_SetarTexto("bcini.txt", "key_3", "valor3"); bCini_SetarTexto("bcini.txt", "key_4", "valor4"); bCini_SetarTexto("bcini.txt", "key_5", "valor5"); bCini_SetarFloat("bcini.txt", "key_6", 999.00); bCini_SetarFloat("bcini.txt", "key_7", 999.00); bCini_SetarFloat("bcini.txt", "key_8", 999.00); bCini_SetarFloat("bcini.txt", "key_9", 999.00); bCini_SetarFloat("bcini.txt", "key_10", 999.00); bCini_SetarInt("bcini.txt", "key_11", 999); bCini_SetarInt("bcini.txt", "key_12", 999); bCini_SetarInt("bcini.txt", "key_13", 999); bCini_SetarInt("bcini.txt", "key_14", 999); bCini_SetarInt("bcini.txt", "key_15", 999); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: bCini | Mйtodo: Escrita | Mйdia: %ims", media / 10); media = 0; for(new tentativas = 0; tentativas < 10; tentativas ++) { tempo[0] = GetTickCount(); for(new teste = 0; teste < 100; teste ++) { if(!bCini_Existe("bcini.txt")) bCini_Criar("dini.txt"); bCini_GetarTexto("bcini.txt", "key_1"); bCini_GetarTexto("bcini.txt", "key_2"); bCini_GetarTexto("bcini.txt", "key_3"); bCini_GetarTexto("bcini.txt", "key_4"); bCini_GetarTexto("bcini.txt", "key_5"); bCini_GetarFloat("bcini.txt", "key_6"); bCini_GetarFloat("bcini.txt", "key_7"); bCini_GetarFloat("bcini.txt", "key_8"); bCini_GetarFloat("bcini.txt", "key_9"); bCini_GetarFloat("bcini.txt", "key_10"); bCini_GetarInt("bcini.txt", "key_11"); bCini_GetarInt("bcini.txt", "key_12"); bCini_GetarInt("bcini.txt", "key_13"); bCini_GetarInt("bcini.txt", "key_14"); bCini_GetarInt("bcini.txt", "key_15"); } tempo[1] = GetTickCount(); tentat[tentativas] = tempo[1] - tempo[0]; } for(new tentativas = 0; tentativas < 10; tentativas ++) media += tentat[tentativas]; printf("Include: bCini | Mйtodo: Leitura | Mйdia: %ims\n", media / 10); print("\n--------- Fim Benchmark ---------\n\n\n");