14.06.2014, 20:26
(
Последний раз редактировалось Swedky; 25.12.2014 в 19:44.
)
file_system v2.0 (25/12/2014)
Introducciуn:
file_system es un include creado por mн que lee informaciуn de cualquier archivo de cualquier extensiуn mucho mбs rбpido que Dini o SII (aunque desconozco si lee mas rбpido que Y_Ini), pues su uso es bastante sencillo pero rбpido y eficaz.
- Funcionamiento:
- Funciones:
pawn Код:
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
- Ejemplo de uso:
pawn Код:
#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;
}
- F.A.Q:
- Pruebas de velocidad:
pawn Код:
// 100 iteracciones - Abrir el archivo, leer 5 datos y cerrarlo.
13 milisegundos.
15 milisegundos.
14 milisegundos.
- Descargas:
Si tienen dudas, estoy aquн para responderlas.