· 5 years ago · Apr 24, 2020, 09:40 PM
1#include <a_samp>
2#include <a_mysql>
3#include <sscanf2>
4#include <zcmd>
5#include <DOF2>
6
7#define function%0(%1) forward %0(%1); public %0(%1)
8
9#define MAX_PASS_LEN 65
10#define SALT_LEN 13
11
12#define MAX_WEAPONS 13
13
14enum //Weapon Slots
15{
16 WEAPONSLOT_FIST,
17 WEAPONSLOT_WHITEGUN,
18 WEAPONSLOT_PISTOL,
19 WEAPONSLOT_SHOTGUN,
20 WEAPONSLOT_MACHINEGUN,
21 WEAPONSLOT_FUZIL,
22 WEAPONSLOT_RIFLE
23};
24
25enum //Dialogs
26{
27 DIALOG_LOGIN,
28 DIALOG_REGISTRO
29};
30
31new MySQL:DBConn, host[16], username[MAX_PLAYER_NAME], database[MAX_PLAYER_NAME], pass[16];
32
33enum PLAYER_DATA
34{
35 accid,
36 nome[MAX_PLAYER_NAME],
37 senha[MAX_PASS_LEN],
38 admin,
39 Float:posX,
40 Float:posY,
41 Float:posZ,
42 Float:angulo,
43 Float:health,
44 Float:armor,
45 money,
46 interior,
47 vw,
48 skin,
49 score,
50 ORM:ormid,
51 bool:logado,
52 pSalt[SALT_LEN]
53};
54new PlayerData[MAX_PLAYERS][PLAYER_DATA];
55
56enum WEAPON_DATA
57{
58 weaponid,
59 ammo
60};
61new WeaponData[MAX_PLAYERS][MAX_WEAPONS][WEAPON_DATA];
62
63main()
64{
65 print("\n----------------------------------");
66 print(" Blank Gamemode by your name here");
67 print("----------------------------------\n");
68}
69
70public OnGameModeInit()
71{
72 SetGameModeText("Blank Script");
73 LoadMap("maps/favela_objects.txt");
74 DataBaseInit();
75 return 1;
76}
77
78public OnGameModeExit()
79{
80 DOF2_Exit();
81 mysql_close(DBConn);
82 return 1;
83}
84
85public OnPlayerRequestClass(playerid, classid)
86{
87 return 1;
88}
89
90public OnPlayerConnect(playerid)
91{
92 RemoveBuildingFromFile(playerid, "maps/favela_buildings.txt");
93 LoadPlayerData(playerid);
94 return 1;
95}
96
97public OnPlayerDisconnect(playerid, reason)
98{
99 if(PlayerData[playerid][logado] == true)
100 {
101 SavePlayerData(playerid);
102
103 new rsnstr[3][] =
104 {
105 "Timeout/Crash",
106 "Saiu",
107 "Kickado/Banido"
108 };
109 new string[64];
110 format(string, sizeof(string), "%s foi desconectado (%s)", GetPlayerNameEx(playerid), rsnstr[reason]);
111 SendClientMessageToAll(-1, string);
112 }
113
114 orm_destroy(PlayerData[playerid][ormid]);
115 for(new PLAYER_DATA:i; i < PLAYER_DATA; i++)
116 PlayerData[playerid][i] = 0;
117
118 return 1;
119}
120
121public OnPlayerSpawn(playerid)
122{
123 if(PlayerData[playerid][logado] == false)
124 {
125 SetPlayerData(playerid);
126 SetPlayerWeaponData(playerid);
127 PlayerData[playerid][logado] = true;
128 }
129 return 1;
130}
131
132public OnPlayerDeath(playerid, killerid, reason)
133{
134 return 1;
135}
136
137public OnVehicleSpawn(vehicleid)
138{
139 return 1;
140}
141
142public OnVehicleDeath(vehicleid, killerid)
143{
144 return 1;
145}
146
147public OnPlayerText(playerid, text[])
148{
149 return 1;
150}
151
152public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
153{
154 return 1;
155}
156
157public OnPlayerExitVehicle(playerid, vehicleid)
158{
159 return 1;
160}
161
162public OnPlayerStateChange(playerid, newstate, oldstate)
163{
164 return 1;
165}
166
167public OnPlayerEnterCheckpoint(playerid)
168{
169 return 1;
170}
171
172public OnPlayerLeaveCheckpoint(playerid)
173{
174 return 1;
175}
176
177public OnPlayerEnterRaceCheckpoint(playerid)
178{
179 return 1;
180}
181
182public OnPlayerLeaveRaceCheckpoint(playerid)
183{
184 return 1;
185}
186
187public OnRconCommand(cmd[])
188{
189 return 1;
190}
191
192public OnPlayerRequestSpawn(playerid)
193{
194 return 1;
195}
196
197public OnObjectMoved(objectid)
198{
199 return 1;
200}
201
202public OnPlayerObjectMoved(playerid, objectid)
203{
204 return 1;
205}
206
207public OnPlayerPickUpPickup(playerid, pickupid)
208{
209 return 1;
210}
211
212public OnVehicleMod(playerid, vehicleid, componentid)
213{
214 return 1;
215}
216
217public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
218{
219 return 1;
220}
221
222public OnVehicleRespray(playerid, vehicleid, color1, color2)
223{
224 return 1;
225}
226
227public OnPlayerSelectedMenuRow(playerid, row)
228{
229 return 1;
230}
231
232public OnPlayerExitedMenu(playerid)
233{
234 return 1;
235}
236
237public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
238{
239 return 1;
240}
241
242public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
243{
244 return 1;
245}
246
247public OnRconLoginAttempt(ip[], password[], success)
248{
249 return 1;
250}
251
252public OnPlayerUpdate(playerid)
253{
254 return 1;
255}
256
257public OnPlayerStreamIn(playerid, forplayerid)
258{
259 return 1;
260}
261
262public OnPlayerStreamOut(playerid, forplayerid)
263{
264 return 1;
265}
266
267public OnVehicleStreamIn(vehicleid, forplayerid)
268{
269 return 1;
270}
271
272public OnVehicleStreamOut(vehicleid, forplayerid)
273{
274 return 1;
275}
276
277public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
278{
279 switch(dialogid)
280 {
281 case DIALOG_LOGIN:
282 {
283 if(!response)
284 Kick(playerid);
285 else
286 {
287 new hash[MAX_PASS_LEN];
288 SHA256_PassHash(inputtext, PlayerData[playerid][pSalt], hash, MAX_PASS_LEN);
289 if(strlen(inputtext) < 1 || strcmp(PlayerData[playerid][senha], hash))
290 {
291 SendClientMessage(playerid, -1, "ERRO: Senha incorreta!");
292 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Digite sua senha para logar:", "Logar", "Sair");
293 }
294 else
295 {
296 SendClientMessage(playerid, -1, "Logado com sucesso!");
297 SetSpawnInfo(playerid, NO_TEAM, PlayerData[playerid][skin],
298 PlayerData[playerid][posX], PlayerData[playerid][posY],PlayerData[playerid][posZ],
299 PlayerData[playerid][angulo],
300 WeaponData[playerid][WEAPONSLOT_FIST][weaponid], WeaponData[playerid][WEAPONSLOT_FIST][ammo],
301 WeaponData[playerid][WEAPONSLOT_WHITEGUN][weaponid], WeaponData[playerid][WEAPONSLOT_WHITEGUN][ammo],
302 WeaponData[playerid][WEAPONSLOT_PISTOL][weaponid], WeaponData[playerid][WEAPONSLOT_PISTOL][ammo]);
303 SpawnPlayer(playerid);
304 }
305 }
306 }
307 case DIALOG_REGISTRO:
308 {
309 if(!response)
310 Kick(playerid);
311 else
312 {
313 if(strlen(inputtext) < 1 || strlen(inputtext) > 16)
314 {
315 SendClientMessage(playerid, -1, "ERRO: Sua senha deve conter entre 1 e 16 caracteres!");
316 ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Entre com uma senha para se registrar:", "Registrar", "Sair");
317 }
318 else
319 {
320 PlayerData[playerid][pSalt] = Salt();
321 SendClientMessage(playerid, -1, "Registrado com sucesso!");
322 SHA256_PassHash(inputtext, PlayerData[playerid][pSalt], PlayerData[playerid][senha], MAX_PASS_LEN);
323 orm_insert(PlayerData[playerid][ormid]);
324 PlayerData[playerid][logado] = true;
325 SetSpawnInfo(playerid, NO_TEAM, 0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
326 SpawnPlayer(playerid);
327 }
328 }
329 }
330 }
331
332 return 1;
333}
334
335public OnPlayerClickPlayer(playerid, clickedplayerid, source)
336{
337 return 1;
338}
339
340public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
341{
342 return 1;
343}
344
345// FUNCOES
346
347function OnPlayerLogin(playerid)
348{
349 orm_setkey(PlayerData[playerid][ormid], "id");
350
351 if(orm_errno(PlayerData[playerid][ormid]) == ERROR_OK) // jogador ja existe na database
352 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Digite sua senha para logar:", "Logar", "Sair");
353 else // jogador não encontrado na database
354 ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Entre com uma senha para se registrar:", "Registrar", "Sair");
355 return 1;
356}
357
358function DataBaseInit()
359{
360 //new MYSQL:DBConn, host[16], username[MAX_PLAYER_NAME], database[MAX_PLAYER_NAME], pass[16];
361 LoadDBSettings("dbconfig.ini");
362 DBConn = mysql_connect(host, username, pass, database);
363 if(mysql_errno() == 0)
364 {
365 printf("[MySQL] Database '%s' conectada com sucesso!", database);
366 print("[MySQL] Verificando tabelas...");
367
368 mysql_query(DBConn, "CREATE TABLE IF NOT EXISTS Player (\
369 id int NOT NULL AUTO_INCREMENT,\
370 nome varchar(25) NOT NULL,\
371 senha varchar(255) NOT NULL,\
372 admin int DEFAULT 0,\
373 PRIMARY KEY(id));", false);
374
375 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS health float DEFAULT 100;", false);
376 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS armor float DEFAULT 100;", false);
377 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS dinheiro int DEFAULT 100;", false);
378 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posX double DEFAULT 0;", false);
379 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posY double DEFAULT 0;", false);
380 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS posZ double DEFAULT 0;", false);
381 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS angulo double DEFAULT 0;", false);
382 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS interior int DEFAULT 0;", false);
383 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS vw int DEFAULT 0;", false);
384 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS score int DEFAULT 0;", false);
385 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS skin int DEFAULT 0;", false);
386 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS salt varchar(65) DEFAULT 0;", false);
387
388 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fist int DEFAULT 0;", false);
389 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS white_gun int DEFAULT 0;", false);
390 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS pistol int DEFAULT 0;", false);
391 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS pistol_ammo int DEFAULT 0;", false);
392 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS shotgun int DEFAULT 0;", false);
393 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS shotgun_ammo int DEFAULT 0;", false);
394 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS machinegun int DEFAULT 0;", false);
395 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS machinegun_ammo int DEFAULT 0;", false);
396 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fuzil int DEFAULT 0;", false);
397 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS fuzil_ammo int DEFAULT 0;", false);
398 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS rifle int DEFAULT 0;", false);
399 mysql_query(DBConn, "ALTER TABLE Player ADD IF NOT EXISTS rifle_ammo int DEFAULT 0;", false);
400
401 print("[MySQL] Tabela 'Players' verificada com sucesso!");
402 }
403 else
404 {
405 printf("[MySQL] ERRO: Não foi possível se conectar a database '%s'!", database);
406 SendRconCommand("exit");
407 }
408
409 return 1;
410}
411
412function RemoveBuildingFromFile(playerid, const file[])
413{
414 new File:map = fopen(file, io_read);
415 if(map)
416 {
417 new string[256];
418 while(fread(map, string))
419 {
420 new modelid, Float:pos[3], Float:rad;
421 if(!sscanf(string, "dffff", modelid, pos[0], pos[1], pos[2], rad))
422 RemoveBuildingForPlayer(playerid, modelid, pos[0], pos[1], pos[2], rad);
423 else
424 return printf("Carregamento do mapa '%s' falhou para o jogador %s(%d).", file, GetPlayerNameEx(playerid), playerid);
425 }
426 }
427 return printf("Jogador %s(%d) carregou o mapa '%s' com êxito.", GetPlayerNameEx(playerid), playerid, file);
428}
429
430function LoadMap(const file[])
431{
432 printf("Carregando Mapa '%s'...", file);
433 new File:map = fopen(file, io_read);
434 if(map)
435 {
436 new string[256];
437 while(fread(map, string))
438 {
439 new modelid, Float:pos[3], Float:rot[3];
440 if(sscanf(string, "dffffff", modelid, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2]))
441 return printf("Erro ao carregar o mapa '%s'!",file);
442 else
443 CreateObject(modelid, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2]);
444
445 }
446 return printf("Mapa '%s' carregado com sucesso!",file);
447 }
448 else return printf("Erro ao carregar o mapa '%s'!",file);
449}
450
451// COMANDOS
452
453CMD:pos(playerid, const params[])
454{
455 new Float:pos[3], giveplayerid;
456 if(sscanf(params, "ufff", giveplayerid, pos[0], pos[1], pos[2]))
457 return SendClientMessage(playerid, -1, "USO: /pos [id] [x] [y] [z]");
458
459 if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID)
460 return SendClientMessage(playerid, -1, "ERRO: ID Inválido!");
461
462 SetPlayerPos(giveplayerid, pos[0], pos[1], pos[2]);
463 return 1;
464}
465
466CMD:info(playerid, const params[])
467{
468 new giveplayerid, string[64];
469
470 if(sscanf(params, "u", giveplayerid))
471 return SendClientMessage(playerid, -1, "USO: /info [id]");
472
473 if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID)
474 return SendClientMessage(playerid, -1, "ERRO: ID Inválido!");
475
476 format(string, sizeof(string), "Jogador: %s", GetPlayerNameEx(giveplayerid));
477 SendClientMessage(playerid, -1, string);
478
479 format(string, sizeof(string), "ID: %d", giveplayerid);
480 SendClientMessage(playerid, -1, string);
481
482 format(string, sizeof(string), "Score: %d", GetPlayerScore(giveplayerid));
483 SendClientMessage(playerid, -1, string);
484
485 format(string, sizeof(string), "Dinheiro: %d", GetPlayerMoney(giveplayerid));
486 SendClientMessage(playerid, -1, string);
487
488 format(string, sizeof(string), "Life: %f", GetPlayerHealthEx(giveplayerid));
489 SendClientMessage(playerid, -1, string);
490
491 format(string, sizeof(string), "Armor: %f", GetPlayerArmourEx(giveplayerid));
492 SendClientMessage(playerid, -1, string);
493
494 new Float:pos[3];
495 GetPlayerPos(giveplayerid, pos[0], pos[1], pos[2]);
496 format(string, sizeof(string), "PosX: %f PosY: %f PosZ: %f", pos[0], pos[1], pos[2]);
497 SendClientMessage(playerid, -1, string);
498
499 format(string, sizeof(string),"Int: %d", GetPlayerInterior(giveplayerid));
500 SendClientMessage(playerid, -1, string);
501
502 format(string, sizeof(string),"Virtual World: %d", GetPlayerVirtualWorld(giveplayerid));
503 SendClientMessage(playerid, -1, string);
504
505 return 1;
506}
507
508// PROCEDIMENTOS
509
510stock SavePlayerData(playerid)
511{
512 PlayerData[playerid][armor] = GetPlayerArmourEx(playerid);
513 PlayerData[playerid][health] = GetPlayerHealthEx(playerid);
514 PlayerData[playerid][money] = GetPlayerMoney(playerid);
515 PlayerData[playerid][skin] = GetPlayerSkin(playerid);
516 PlayerData[playerid][interior] = GetPlayerInterior(playerid);
517 PlayerData[playerid][vw] = GetPlayerVirtualWorld(playerid);
518 PlayerData[playerid][score] = GetPlayerScore(playerid);
519 GetPlayerFacingAngle(playerid, PlayerData[playerid][angulo]);
520 GetPlayerPos(playerid,
521 PlayerData[playerid][posX],
522 PlayerData[playerid][posY],
523 PlayerData[playerid][posZ]);
524
525 for(new i=0; i < MAX_WEAPONS; i++)
526 GetPlayerWeaponData(playerid, i, WeaponData[playerid][i][weaponid], WeaponData[playerid][i][ammo]);
527
528 orm_update(PlayerData[playerid][ormid]);
529}
530
531
532stock SetPlayerWeaponData(playerid)
533{
534 GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_SHOTGUN][weaponid], WeaponData[playerid][WEAPONSLOT_SHOTGUN][ammo]);
535 GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_MACHINEGUN][weaponid], WeaponData[playerid][WEAPONSLOT_MACHINEGUN][ammo]);
536 GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_FUZIL][weaponid], WeaponData[playerid][WEAPONSLOT_FUZIL][ammo]);
537 GivePlayerWeapon(playerid, WeaponData[playerid][WEAPONSLOT_RIFLE][weaponid], WeaponData[playerid][WEAPONSLOT_RIFLE][ammo]);
538 SetPlayerArmedWeapon(playerid,0);
539}
540
541stock SetPlayerData(playerid)
542{
543 SetPlayerScore(playerid, PlayerData[playerid][score]);
544 SetPlayerHealth(playerid, PlayerData[playerid][health]);
545 SetPlayerArmour(playerid, PlayerData[playerid][armor]);
546 GivePlayerMoney(playerid, PlayerData[playerid][money]);
547 SetPlayerInterior(playerid, PlayerData[playerid][interior]);
548 SetPlayerVirtualWorld(playerid, PlayerData[playerid][vw]);
549}
550
551stock LoadPlayerWeaponData(playerid)
552{
553 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_FIST][weaponid], "fist");
554 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_WHITEGUN][weaponid], "white_gun");
555
556 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_PISTOL][weaponid], "pistol");
557 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_PISTOL][ammo], "pistol_ammo");
558
559 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_SHOTGUN][weaponid], "shotgun");
560 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_SHOTGUN][ammo], "shotgun_ammo");
561
562 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_MACHINEGUN][weaponid], "machinegun");
563 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_MACHINEGUN][ammo], "machine_ammo");
564
565 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_FUZIL][weaponid], "fuzil");
566 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_FUZIL][ammo], "fuzil_ammo");
567
568 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_RIFLE][weaponid], "rifle");
569 orm_addvar_int(PlayerData[playerid][ormid], WeaponData[playerid][WEAPONSLOT_RIFLE][ammo], "rifle_ammo");
570}
571
572stock LoadPlayerData(playerid)
573{
574 PlayerData[playerid][logado] = false;
575 format(PlayerData[playerid][nome], MAX_PLAYER_NAME, "%s", GetPlayerNameEx(playerid));
576
577 PlayerData[playerid][ormid] = orm_create("Player", DBConn);
578
579 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][accid], "id");
580 orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][nome], MAX_PLAYER_NAME, "nome");
581 orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][senha], MAX_PASS_LEN, "senha");
582 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][admin], "admin");
583 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posX], "posX");
584 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posY], "posY");
585 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][posZ], "posZ");
586 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][angulo], "angulo");
587 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][health], "health");
588 orm_addvar_float(PlayerData[playerid][ormid], PlayerData[playerid][armor], "armor");
589 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][money], "dinheiro");
590 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][score], "score");
591 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][skin], "skin");
592 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][interior], "interior");
593 orm_addvar_int(PlayerData[playerid][ormid], PlayerData[playerid][vw], "vw");
594 orm_addvar_string(PlayerData[playerid][ormid], PlayerData[playerid][pSalt], SALT_LEN, "salt");
595
596 //LoadPlayerWeaponData(playerid);
597 orm_setkey(PlayerData[playerid][ormid], "nome");
598 orm_select(PlayerData[playerid][ormid], "OnPlayerLogin", "d", playerid);
599}
600
601stock LoadDBSettings(filename[])
602{
603 //new host[16], username[MAX_PLAYER_NAME], database[MAX_PLAYER_NAME], pass[16];
604 if(DOF2_FileExists(filename))
605 {
606 format(host, sizeof(host), "%s", DOF2_GetString(filename,"address"));
607 format(username, sizeof(username), "%s", DOF2_GetString(filename,"username"));
608 format(database, sizeof(database), "%s", DOF2_GetString(filename,"database"));
609 format(pass, sizeof(pass), "%s", DOF2_GetString(filename,"password"));
610 }
611 else
612 {
613 DOF2_CreateFile(filename);
614 DOF2_SetString(filename,"address","127.0.0.1");
615 DOF2_SetString(filename,"username","root");
616 DOF2_SetString(filename,"database", " ");
617 DOF2_SetString(filename,"password", " ");
618 DOF2_SaveFile();
619 }
620}
621
622stock Salt()
623{
624 new salt[SALT_LEN];
625 for(new i; i < SALT_LEN-1; i++)
626 salt[i] = random(79) + 47;
627 salt[SALT_LEN-1] = 0;
628 return salt;
629}
630
631stock GetPlayerNameEx(playerid)
632{
633 new PlayerName[MAX_PLAYER_NAME];
634 GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
635 return PlayerName;
636}
637
638function Float:GetPlayerHealthEx(playerid)
639{
640 new Float:playerhealth;
641 GetPlayerHealth(playerid, playerhealth);
642 return playerhealth;
643}
644
645function Float:GetPlayerArmourEx(playerid)
646{
647 new Float:playerarmor;
648 GetPlayerArmour(playerid, playerarmor);
649 return playerarmor;
650}