0% found this document useful (0 votes)
43 views

Tutorial12 PWN

This document defines functions and constants for a gamemode script in SA-MP (San Andreas Multiplayer). It includes: 1) Defines for includes, functions, constants like weapon slots, dialogs, player data fields. 2) Main function to initialize the gamemode and exit functions. 3) Event handlers for player connect, spawn, death etc to handle player data loading/saving. 4) Functions to initialize the MySQL database connection and load player login/registration dialogs.

Uploaded by

Wanessa Ferrari
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views

Tutorial12 PWN

This document defines functions and constants for a gamemode script in SA-MP (San Andreas Multiplayer). It includes: 1) Defines for includes, functions, constants like weapon slots, dialogs, player data fields. 2) Main function to initialize the gamemode and exit functions. 3) Event handlers for player connect, spawn, death etc to handle player data loading/saving. 4) Functions to initialize the MySQL database connection and load player login/registration dialogs.

Uploaded by

Wanessa Ferrari
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 13

#include <a_samp>

#include <a_mysql>
#include <sscanf2>
#include <zcmd>
#include <DOF2>

#define function%0(%1) forward %0(%1); public %0(%1)

#define MAX_PASS_LEN 65
#define SALT_LEN 13

#define MAX_WEAPONS 13

enum //Weapon Slots


{
WEAPONSLOT_FIST,
WEAPONSLOT_WHITEGUN,
WEAPONSLOT_PISTOL,
WEAPONSLOT_SHOTGUN,
WEAPONSLOT_MACHINEGUN,
WEAPONSLOT_FUZIL,
WEAPONSLOT_RIFLE
};

enum //Dialogs
{
DIALOG_LOGIN,
DIALOG_REGISTRO
};

new MySQL:DBConn, host[16], username[MAX_PLAYER_NAME], database[MAX_PLAYER_NAME],


pass[16];

enum PLAYER_DATA
{
accid,
nome[MAX_PLAYER_NAME],
senha[MAX_PASS_LEN],
admin,
Float:posX,
Float:posY,
Float:posZ,
Float:angulo,
Float:health,
Float:armor,
money,
interior,
vw,
skin,
score,
ORM:ormid,
bool:logado,
pSalt[SALT_LEN]
};
new PlayerData[MAX_PLAYERS][PLAYER_DATA];

enum WEAPON_DATA
{
weaponid,
ammo
};
new WeaponData[MAX_PLAYERS][MAX_WEAPONS][WEAPON_DATA];

main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}

public OnGameModeInit()
{
SetGameModeText("Blank Script");
LoadMap("maps/favela_objects.txt");
DataBaseInit();
return 1;
}

public OnGameModeExit()
{
DOF2_Exit();
mysql_close(DBConn);
return 1;
}

public OnPlayerRequestClass(playerid, classid)


{
return 1;
}

public OnPlayerConnect(playerid)
{
RemoveBuildingFromFile(playerid, "maps/favela_buildings.txt");
LoadPlayerData(playerid);
return 1;
}

public OnPlayerDisconnect(playerid, reason)


{
if(PlayerData[playerid][logado] == true)
{
SavePlayerData(playerid);

new rsnstr[3][] =
{
"Timeout/Crash",
"Saiu",
"Kickado/Banido"
};
new string[64];
format(string, sizeof(string), "%s foi desconectado (%s)",
GetPlayerNameEx(playerid), rsnstr[reason]);
SendClientMessageToAll(-1, string);
}

orm_destroy(PlayerData[playerid][ormid]);
for(new PLAYER_DATA:i; i < PLAYER_DATA; i++)
PlayerData[playerid][i] = 0;
return 1;
}

public OnPlayerSpawn(playerid)
{
if(PlayerData[playerid][logado] == false)
{
SetPlayerData(playerid);
SetPlayerWeaponData(playerid);
PlayerData[playerid][logado] = true;
}
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)


{
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)


{
return 1;
}

public OnPlayerText(playerid, text[])


{
return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)


{
return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)


{
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)


{
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}

public OnRconCommand(cmd[])
{
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnObjectMoved(objectid)
{
return 1;
}

public OnPlayerObjectMoved(playerid, objectid)


{
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)


{
return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)


{
return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)


{
return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)


{
return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)


{
return 1;
}

public OnPlayerExitedMenu(playerid)
{
return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)


{
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)


{
return 1;
}

public OnRconLoginAttempt(ip[], password[], success)


{
return 1;
}

public OnPlayerUpdate(playerid)
{
return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)


{
return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)


{
return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)


{
return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)


{
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


{
switch(dialogid)
{
case DIALOG_LOGIN:
{
if(!response)
Kick(playerid);
else
{
new hash[MAX_PASS_LEN];
SHA256_PassHash(inputtext, PlayerData[playerid][pSalt],
hash, MAX_PASS_LEN);
if(strlen(inputtext) < 1 || strcmp(PlayerData[playerid]
[senha], hash))
{
SendClientMessage(playerid, -1, "ERRO: Senha
incorreta!");
ShowPlayerDialog(playerid, DIALOG_LOGIN,
DIALOG_STYLE_PASSWORD, "Login", "Digite sua senha para logar:", "Logar", "Sair");
}
else
{
SendClientMessage(playerid, -1, "Logado com
sucesso!");
SetSpawnInfo(playerid, NO_TEAM, PlayerData[playerid]
[skin],
PlayerData[playerid][posX], PlayerData[playerid]
[posY],PlayerData[playerid][posZ],
PlayerData[playerid][angulo],
WeaponData[playerid][WEAPONSLOT_FIST][weaponid],
WeaponData[playerid][WEAPONSLOT_FIST][ammo],
WeaponData[playerid][WEAPONSLOT_WHITEGUN][weaponid],
WeaponData[playerid][WEAPONSLOT_WHITEGUN][ammo],
WeaponData[playerid][WEAPONSLOT_PISTOL][weaponid],
WeaponData[playerid][WEAPONSLOT_PISTOL][ammo]);
SpawnPlayer(playerid);
}
}
}
case DIALOG_REGISTRO:
{
if(!response)
Kick(playerid);
else
{
if(strlen(inputtext) < 1 || strlen(inputtext) > 16)
{
SendClientMessage(playerid, -1, "ERRO: Sua senha deve
conter entre 1 e 16 caracteres!");
ShowPlayerDialog(playerid, DIALOG_REGISTRO,
DIALOG_STYLE_PASSWORD, "Registro", "Entre com uma senha para se registrar:",
"Registrar", "Sair");
}
else
{
PlayerData[playerid][pSalt] = Salt();
SendClientMessage(playerid, -1, "Registrado com
sucesso!");
SHA256_PassHash(inputtext, PlayerData[playerid]
[pSalt], PlayerData[playerid][senha], MAX_PASS_LEN);
orm_insert(PlayerData[playerid][ormid]);
PlayerData[playerid][logado] = true;
SetSpawnInfo(playerid, NO_TEAM, 0, 1958.3783,
1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
}
}
}
}

return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)


{
return 1;
}

public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)


{
return 1;
}

// FUNCOES

function OnPlayerLogin(playerid)
{
orm_setkey(PlayerData[playerid][ormid], "id");

if(orm_errno(PlayerData[playerid][ormid]) == ERROR_OK) // jogador ja existe


na database
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,
"Login", "Digite sua senha para logar:", "Logar", "Sair");
else // jogador não encontrado na database
ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD,
"Registro", "Entre com uma senha para se registrar:", "Registrar", "Sair");
return 1;
}

function DataBaseInit()
{
//new MYSQL:DBConn, host[16], username[MAX_PLAYER_NAME],
database[MAX_PLAYER_NAME], pass[16];
LoadDBSettings("dbconfig.ini");
DBConn = mysql_connect(host, username, pass, database);
if(mysql_errno() == 0)
{
printf("[MySQL] Database '%s' conectada com sucesso!", database);
print("[MySQL] Verificando tabelas...");

mysql_query(DBConn, "CREATE TABLE IF NOT EXISTS Player (\


id int NOT NULL AUTO_INCREMENT,\
nome varchar(25) NOT NULL,\
senha varchar(255) NOT NULL,\
admin int DEFAULT 0,\
PRIMARY KEY(id));", false);

mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS health float


DEFAULT 100;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS armor float
DEFAULT 100;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS dinheiro int
DEFAULT 100;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posX double
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posY double
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posZ double
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS angulo double
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS interior int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS vw int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS score int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS skin int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS salt
varchar(65) DEFAULT 0;", false);

mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fist int


DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS white_gun int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS pistol int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS pistol_ammo int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS shotgun int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS shotgun_ammo int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS machinegun int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS machinegun_ammo
int DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fuzil int DEFAULT
0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fuzil_ammo int
DEFAULT 0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS rifle int DEFAULT
0;", false);
mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS rifle_ammo int
DEFAULT 0;", false);

print("[MySQL] Tabela 'Players' verificada com sucesso!");


}
else
{
printf("[MySQL] ERRO: Não foi possível se conectar a database '%s'!",
database);
SendRconCommand("exit");
}

return 1;
}

function RemoveBuildingFromFile(playerid, const file[])


{
new File:map = fopen(file, io_read);
if(map)
{
new string[256];
while(fread(map, string))
{
new modelid, Float:pos[3], Float:rad;
if(!sscanf(string, "dffff", modelid, pos[0], pos[1], pos[2],
rad))
RemoveBuildingForPlayer(playerid, modelid, pos[0], pos[1],
pos[2], rad);
else
return printf("Carregamento do mapa '%s' falhou para o
jogador %s(%d).", file, GetPlayerNameEx(playerid), playerid);
}
}
return printf("Jogador %s(%d) carregou o mapa '%s' com êxito.",
GetPlayerNameEx(playerid), playerid, file);
}

function LoadMap(const file[])


{
printf("Carregando Mapa '%s'...", file);
new File:map = fopen(file, io_read);
if(map)
{
new string[256];
while(fread(map, string))
{
new modelid, Float:pos[3], Float:rot[3];
if(sscanf(string, "dffffff", modelid, pos[0], pos[1], pos[2],
rot[0], rot[1], rot[2]))
return printf("Erro ao carregar o mapa '%s'!",file);
else
CreateObject(modelid, pos[0], pos[1], pos[2], rot[0],
rot[1], rot[2]);

}
return printf("Mapa '%s' carregado com sucesso!",file);
}
else return printf("Erro ao carregar o mapa '%s'!",file);
}

// COMANDOS

CMD:pos(playerid, const params[])


{
new Float:pos[3], giveplayerid;
if(sscanf(params, "ufff", giveplayerid, pos[0], pos[1], pos[2]))
return SendClientMessage(playerid, -1, "USO: /pos [id] [x] [y] [z]");

if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID)


return SendClientMessage(playerid, -1, "ERRO: ID Inválido!");

SetPlayerPos(giveplayerid, pos[0], pos[1], pos[2]);


return 1;
}

CMD:info(playerid, const params[])


{
new giveplayerid, string[64];

if(sscanf(params, "u", giveplayerid))


return SendClientMessage(playerid, -1, "USO: /info [id]");

if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID)


return SendClientMessage(playerid, -1, "ERRO: ID Inválido!");

format(string, sizeof(string), "Jogador: %s", GetPlayerNameEx(giveplayerid));


SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "ID: %d", giveplayerid);
SendClientMessage(playerid, -1, string);

format(string, sizeof(string), "Score: %d", GetPlayerScore(giveplayerid));


SendClientMessage(playerid, -1, string);

format(string, sizeof(string), "Dinheiro: %d", GetPlayerMoney(giveplayerid));


SendClientMessage(playerid, -1, string);

format(string, sizeof(string), "Life: %f", GetPlayerHealthEx(giveplayerid));


SendClientMessage(playerid, -1, string);

format(string, sizeof(string), "Armor: %f", GetPlayerArmourEx(giveplayerid));


SendClientMessage(playerid, -1, string);

new Float:pos[3];
GetPlayerPos(giveplayerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), "PosX: %f PosY: %f PosZ: %f", pos[0], pos[1],
pos[2]);
SendClientMessage(playerid, -1, string);

format(string, sizeof(string),"Int: %d", GetPlayerInterior(giveplayerid));


SendClientMessage(playerid, -1, string);

format(string, sizeof(string),"Virtual World: %d",


GetPlayerVirtualWorld(giveplayerid));
SendClientMessage(playerid, -1, string);

return 1;
}

// PROCEDIMENTOS

stock SavePlayerData(playerid)
{
PlayerData[playerid][armor] = GetPlayerArmourEx(playerid);
PlayerData[playerid][health] = GetPlayerHealthEx(playerid);
PlayerData[playerid][money] = GetPlayerMoney(playerid);
PlayerData[playerid][skin] = GetPlayerSkin(playerid);
PlayerData[playerid][interior] = GetPlayerInterior(playerid);
PlayerData[playerid][vw] = GetPlayerVirtualWorld(playerid);
PlayerData[playerid][score] = GetPlayerScore(playerid);
GetPlayerFacingAngle(playerid, PlayerData[playerid][angulo]);
GetPlayerPos(playerid,
PlayerData[playerid][posX],
PlayerData[playerid][posY],
PlayerData[playerid][posZ]);

for(new i=0; i < MAX_WEAPONS; i++)


GetPlayerWeaponData(playerid, i, WeaponData[playerid][i][weaponid],
WeaponData[playerid][i][ammo]);

orm_update(PlayerData[playerid][ormid]);
}

stock SetPlayerWeaponData(playerid)
{
GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_SHOTGUN][weaponid],
WeaponData[playerid][WEAPONSLOT_SHOTGUN][ammo]);
GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_MACHINEGUN]
[weaponid], WeaponData[playerid][WEAPONSLOT_MACHINEGUN][ammo]);
GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_FUZIL][weaponid],
WeaponData[playerid][WEAPONSLOT_FUZIL][ammo]);
GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_RIFLE][weaponid],
WeaponData[playerid][WEAPONSLOT_RIFLE][ammo]);
SetPlayerArmedWeapon(playerid,0);
}

stock SetPlayerData(playerid)
{
SetPlayerScore(playerid, PlayerData[playerid][score]);
SetPlayerHealth(playerid, PlayerData[playerid][health]);
SetPlayerArmour(playerid, PlayerData[playerid][armor]);
GivePlayerMoney(playerid, PlayerData[playerid][money]);
SetPlayerInterior(playerid, PlayerData[playerid][interior]);
SetPlayerVirtualWorld(playerid, PlayerData[playerid][vw]);
}

stock LoadPlayerWeaponData(playerid)
{
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_FIST][weaponid], "fist");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_WHITEGUN][weaponid], "white_gun");

orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_PISTOL][weaponid], "pistol");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_PISTOL][ammo], "pistol_ammo");

orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_SHOTGUN][weaponid], "shotgun");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_SHOTGUN][ammo], "shotgun_ammo");

orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_MACHINEGUN][weaponid], "machinegun");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_MACHINEGUN][ammo], "machine_ammo");

orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_FUZIL][weaponid], "fuzil");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_FUZIL][ammo], "fuzil_ammo");

orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_RIFLE][weaponid], "rifle");
orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid]
[WEAPONSLOT_RIFLE][ammo], "rifle_ammo");
}

stock LoadPlayerData(playerid)
{
PlayerData[playerid][logado] = false;
format(PlayerData[playerid][nome], MAX_PLAYER_NAME, "%s",
GetPlayerNameEx(playerid));
PlayerData[playerid][ormid] = orm_create("Player", DBConn);

orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][accid],
"id");
orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][nome],
MAX_PLAYER_NAME, "nome");
orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][senha],
MAX_PASS_LEN, "senha");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][admin],
"admin");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posX],
"posX");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posY],
"posY");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posZ],
"posZ");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][angulo],
"angulo");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][health],
"health");
orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][armor],
"armor");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][money],
"dinheiro");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][score],
"score");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][skin],
"skin");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][interior],
"interior");
orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][vw], "vw");
orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][pSalt],
SALT_LEN, "salt");

//LoadPlayerWeaponData(playerid);
orm_setkey(PlayerData[playerid][ormid], "nome");
orm_select(PlayerData[playerid][ormid], "OnPlayerLogin", "d", playerid);
}

stock LoadDBSettings(filename[])
{
//new host[16], username[MAX_PLAYER_NAME], database[MAX_PLAYER_NAME],
pass[16];
if(DOF2_FileExists(filename))
{
format(host, sizeof(host), "%s", DOF2_GetString(filename,"address"));
format(username, sizeof(username), "%s",
DOF2_GetString(filename,"username"));
format(database, sizeof(database), "%s",
DOF2_GetString(filename,"database"));
format(pass, sizeof(pass), "%s", DOF2_GetString(filename,"password"));
}
else
{
DOF2_CreateFile(filename);
DOF2_SetString(filename,"address","127.0.0.1");
DOF2_SetString(filename,"username","root");
DOF2_SetString(filename,"database", " ");
DOF2_SetString(filename,"password", " ");
DOF2_SaveFile();
}
}

stock Salt()
{
new salt[SALT_LEN];
for(new i; i < SALT_LEN-1; i++)
salt[i] = random(79) + 47;
salt[SALT_LEN-1] = 0;
return salt;
}

stock GetPlayerNameEx(playerid)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
return PlayerName;
}

function Float:GetPlayerHealthEx(playerid)
{
new Float:playerhealth;
GetPlayerHealth(playerid, playerhealth);
return playerhealth;
}

function Float:GetPlayerArmourEx(playerid)
{
new Float:playerarmor;
GetPlayerArmour(playerid, playerarmor);
return playerarmor;
}

You might also like