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