native File_Create(location[]);
native File_Open(location[], open_mode);
native File_Close();
native File_WriteStr(name[], value[]);
native File_WriteInt(name[], value);
native File_WriteFloat(name[], Float:value);
native File_WriteBool(name[], bool:value);
native File_ReadStr(name[], store[]);
native File_ReadInt(name[], &store);
native File_ReadFloat(name[], &Float:store);
native File_ReadBool(name[], &bool:store);
// Definirб la longitud mбxima que se podrб leer de un archivo (ojo, no todo el archivo, solo una lнnea).
#define FILE_MAX_STRING 50
#include <a_samp>
#define File_MAX_STRING 25
#include <file_system>
#define DIALOG_REGISTER 100
#define DIALOG_LOGIN 101
enum PlayerInfoEnum
{
Kills,
Deaths,
Float:Health,
AdminLevel
};
static PlayerInfo[MAX_PLAYERS][PlayerInfoEnum];
static PasswordPlayer[MAX_PLAYERS][50];
static LocationUser[MAX_PLAYERS][32];
public OnPlayerConnect(playerid)
{
new Nick[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nick, sizeof(Nick));
format(LocationUser[playerid], 32, "users/%s.txt", Nick);
if(!fexist(LocationUser[playerid])) ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrar.", "Introduce una contraseсa.", "Aceptar", "");
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Identificarse.", "Introduce tu contraseсa.", "Aceptar", "");
File_Open(LocationUser[playerid], io_read)
{
File_ReadStr("Password", PasswordPlayer[playerid]);
File_Close();
}
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(!response) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrar.", "Introduce una contraseсa.", "Aceptar", "");
File_Create(LocationUser[playerid]);
File_WriteStr("Password", inputtext);
File_WriteFloat("Health", 0.0);
File_WriteInt("Kills", 0);
File_WriteInt("Deaths", 0);
File_WriteInt("Money", 0);
File_WriteInt("AdminLevel", 0);
File_Close();
// Aquн no serб necesario usar 'File_Open' ya que cuando usamos 'File_Create' el archivo se abriу en modo de escritura pero no se cerrу.
format(PasswordPlayer[playerid], 49, "%s", inputtext);
SendClientMessage(playerid, 0x00FF00AA, "[CUENTA] Bienvenido, gracias por registrarse.");
}
case DIALOG_LOGIN:
{
if(!response) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Identificarse.", "Introduce tu contraseсa.", "Aceptar", "");
if(strcmp(PasswordPlayer[playerid], inputtext) == 0)
{
File_Open(LocationUser[playerid], io_read)
{
new Float:health, money;
File_ReadStr("Password", PasswordPlayer[playerid]); // Es necesario leer otra vez la contraseсa.
File_ReadFloat("Health", health);
File_ReadInt("Kills", PlayerInfo[playerid][Kills]);
File_ReadInt("Deaths", PlayerInfo[playerid][Deaths]);
File_ReadInt("Money", money);
File_ReadInt("AdminLevel", PlayerInfo[playerid][AdminLevel]);
File_Close();
}
}
else return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Identificarse.", "Contraseсa incorrecta. Por favor, introduzca la correcta.", "Aceptar", "");
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(IsPlayerConnected(killerid)) PlayerInfo[killerid][Kills] ++;
if(IsPlayerConnected(playerid)) PlayerInfo[playerid][Deaths] ++;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
GetPlayerHealth(playerid, PlayerInfo[playerid][Health]);
File_Open(LocationUser[playerid], io_write)
{
File_WriteStr("Password", PasswordPlayer[playerid]);
File_WriteFloat("Health", PlayerInfo[playerid][Health]);
File_WriteInt("Kills", PlayerInfo[playerid][Kills]);
File_WriteInt("Deaths", PlayerInfo[playerid][Deaths]);
File_WriteInt("Money", GetPlayerMoney(playerid));
File_WriteInt("AdminLevel", PlayerInfo[playerid][AdminLevel]);
File_Close();
}
return 1;
}
// 100 iteracciones - Abrir el archivo, leer 5 datos y cerrarlo.
13 milisegundos.
15 milisegundos.
14 milisegundos.
Exelente trabajo.
Solo tengo una duda , por quй el nombre del include en inglйs?. |
No es por quererte a venir a joder el post pero esto a simple vista no funciona, que pasaria si intentas actualizar un dato? yo lo que veo ahн es que escribirнa un nuevo campo al final del documento en vez de remplazarlo o actualizar el dato, tu intento es bueno pero debes corregir ese error.
|
Le he echado un vistazo al cуdigo. No creo que la funciуn "File_Str" vaya a funcionar correctamente...
|