Advertisement
Guest User

1

a guest
Apr 14th, 2017
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.82 KB | None | 0 0
  1. /*
  2. Caixas de armas
  3. Jelly23
  4. */
  5.  
  6. /*Config*/
  7. #define CAIXAS_MAXIMAS 500
  8. #define CAIXAS_CUSTO 10000
  9.  
  10. /*Includes*/
  11. #include <a_samp>
  12. #include <a_mysql>
  13. #include <izcmd>
  14. #include <foreach>
  15. #include <streamer>
  16.  
  17. /*MySQL*/
  18. #define MYSQL_HOST "localhost"
  19. #define MYSQL_USUARIO "root"
  20. #define MYSQL_BDADOS "crates"
  21. #define MYSQL_SENHA ""
  22.  
  23. /*Enumerador*/
  24. enum jCrate
  25. {
  26. CrateID,
  27. Text3D:Label,
  28. Weapon1,
  29. Weapon2,
  30. Weapon3,
  31. Ammo1,
  32. Ammo2,
  33. Ammo3,
  34. Float:cX,
  35. Float:cY,
  36. Float:cZ,
  37. cWorld,
  38. cInterior
  39. };
  40. new cInfo[CAIXAS_MAXIMAS][jCrate],
  41.  
  42. /*Iterator*/
  43. Iterator:CrateLoop<CAIXAS_MAXIMAS>,
  44.  
  45. /*Con-MySQL*/
  46. mysql,
  47.  
  48. /*Matrizes*/
  49. CurrentCrate[MAX_PLAYERS],
  50. bool:HasBox[MAX_PLAYERS];
  51.  
  52. /*Dialogo*/
  53. #define DIALOG_CRATE (0)
  54. #define DIALOG_RCON (1)
  55. #define DIALOG_CRTGO (2)
  56. #define DIALOG_CRTET (3)
  57.  
  58. public OnFilterScriptInit()
  59. {
  60. print("\n--------------------------------------");
  61. print("Caixas de Armas - Carregado");
  62. print("--------------------------------------\n");
  63. mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);
  64. mysql = mysql_connect(MYSQL_HOST, MYSQL_USUARIO, MYSQL_BDADOS, MYSQL_SENHA);
  65. if(mysql_errno(mysql) != 0)
  66. {
  67. print("Não foi possível conectar ao banco de dados!"); SendRconCommand("hostname MySQL | ERRO");
  68. }
  69. else
  70. {
  71. printf("MySQL: Conectado ao banco de dados (%s)",MYSQL_BDADOS);
  72. }
  73. if(!mysql_tquery(mysql, "SELECT * FROM `crates`", "LoadCrates", ""))
  74. {
  75. printf("MySQL: Não foi possível carregar nenhuma caixa.");
  76. }
  77. return 1;
  78. }
  79.  
  80. public OnFilterScriptExit()
  81. {
  82. SaveCrates();
  83. return 1;
  84. }
  85.  
  86. /*Functions*/
  87. CreateCrate(Float:X, Float:Y, Float:Z, world, interior)
  88. {
  89. new FreeID = Iter_Free(CrateLoop),string[21],query[300];
  90. Iter_Add(CrateLoop, FreeID);
  91. format(string,sizeof(string),"Caixa de Armas (%i)",FreeID);
  92. cInfo[FreeID][CrateID] = CreateDynamicObject(3014, X, Y, Z-0.8, 0.0, 0.0, 0.0, world);
  93. cInfo[FreeID][Label] = Create3DTextLabel(string, 0xAA3333FF,X,Y,Z-0.4, 5.0,world, 0);
  94. cInfo[FreeID][cX] = X;
  95. cInfo[FreeID][cY] = Y;
  96. cInfo[FreeID][cZ] = Z-0.8;
  97. cInfo[FreeID][Weapon1] = cInfo[FreeID][Weapon2] = cInfo[FreeID][Weapon3] = -1;
  98. cInfo[FreeID][cWorld] = world;
  99. cInfo[FreeID][cInterior] = interior;
  100. mysql_format(mysql, query, sizeof(query), "INSERT INTO `crates` (`ID`, `cX`, `cY`, `cZ`, `Weapon1`, `Weapon2` ,`Weapon3`, `Ammo1`, `Ammo2`, `Ammo3`) VALUES ('%i', '%f', '%f', '%f', '%i', '%i', '%i', '%i','%i', '%i')",
  101. FreeID,cInfo[FreeID][cX],cInfo[FreeID][cY],cInfo[FreeID][cZ],cInfo[FreeID][Weapon1],cInfo[FreeID][Weapon2],cInfo[FreeID][Weapon3],cInfo[FreeID][Ammo1],cInfo[FreeID][Ammo2],cInfo[FreeID][Ammo3]);
  102. mysql_tquery(mysql, query, "","");
  103. return 1;
  104. }
  105.  
  106. DestroyCrate(crateid)
  107. {
  108. new query[41];
  109. Iter_Remove(CrateLoop, crateid);
  110. DestroyDynamicObject(cInfo[crateid][CrateID]);
  111. Delete3DTextLabel(cInfo[crateid][Label]);
  112. mysql_format(mysql,query,sizeof(query),"DELETE FROM `crates` WHERE `ID` ='%i'",crateid);
  113. mysql_tquery(mysql,query,"","");
  114. return 1;
  115. }
  116.  
  117. GetWeapName(playerid,weapid,slot)
  118. {
  119. new weapname[46];
  120. if(weapid == -1)
  121. {
  122. weapname = "Vazio";
  123. }
  124. else
  125. {
  126. GetWeaponName(weapid, weapname, sizeof(weapname));
  127. switch(slot)
  128. {
  129. case 0: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo1]);
  130. case 1: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo2]);
  131. case 2: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo3]);
  132. }
  133. }
  134. return weapname;
  135. }
  136.  
  137. stock SaveCrates() //Keyword stock por que acusa a função de não ser usada, mesmo sendo.
  138. {
  139. new count;
  140. foreach(new i: CrateLoop)
  141. {
  142. UpdateCrates(i);
  143. count++;
  144. }
  145. printf("\n=======================================\n");
  146. printf(" Caixas salvas!\n");
  147. printf(" Um total de %i Caixas de %i foram salvas\n", count, CAIXAS_MAXIMAS);
  148. printf("\n=======================================\n");
  149. }
  150.  
  151. stock UpdateCrates(i) //Keyword stock por que acusa a função de não ser usada, mesmo sendo.
  152. {
  153. new query[321];
  154. mysql_format(mysql, query, sizeof(query), "UPDATE `crates` SET `cX` ='%f' , `cY` ='%f' , `cZ` ='%f' , `Weapon1` ='%i', `Weapon2` = '%i', `Weapon3` ='%i', `Ammo1` ='%i', `Ammo2` ='%i', `Ammo3` ='%i' WHERE `ID` = '%i'",
  155. cInfo[i][cX],cInfo[i][cY],cInfo[i][cZ],cInfo[i][Weapon1],cInfo[i][Weapon2],cInfo[i][Weapon3],cInfo[i][Ammo1],cInfo[i][Ammo2],cInfo[i][Ammo3],i);
  156. mysql_tquery(mysql,query,"","");
  157. }
  158.  
  159. DropCrate(playerid)
  160. {
  161. new Float:X,Float:Y,Float:Z,string[21];
  162. format(string,sizeof(string),"Caixa de Armas (%i)",CurrentCrate[playerid]);
  163. GetPlayerPos(playerid,X,Y,Z);
  164. HasBox[playerid] = false;
  165. cInfo[CurrentCrate[playerid]][CrateID] = CreateDynamicObject(3014, X, Y, Z-0.8, 0.0, 0.0, 0.0, GetPlayerVirtualWorld(playerid));
  166. cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,X,Y,Z-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
  167. cInfo[CurrentCrate[playerid]][cX] = X;
  168. cInfo[CurrentCrate[playerid]][cY] = Y;
  169. cInfo[CurrentCrate[playerid]][cZ] = Z-0.8;
  170. RemovePlayerAttachedObject(playerid,0);
  171. }
  172.  
  173. /*Commands*/
  174. CMD:comprarcaixa(playerid)
  175. {
  176. if(GetPlayerMoney(playerid) < CAIXAS_CUSTO) return SendClientMessage(playerid,-1,"Você precisa de $10,000 para comprar uma caixa.");
  177. new Float:X,Float:Y,Float:Z;
  178. GetPlayerPos(playerid,X,Y,Z);
  179. GivePlayerMoney(playerid,-CAIXAS_CUSTO);
  180. CreateCrate(X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
  181. return 1;
  182. }
  183.  
  184. CMD:caixa(playerid)
  185. {
  186. new count;
  187. foreach(new i: CrateLoop)
  188. {
  189. if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
  190. {
  191. CurrentCrate[playerid] = i;
  192. count++;
  193. }
  194. }
  195. if(count == 0) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Você não está próximo de nenhuma caixa de armas.");
  196. new string[119];
  197. format(string,sizeof(string),"%s» %s\n» %s\n» %s\n{FF0000}» Colocar arma\n{FF0000}» Pegar caixa",
  198. string,GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon1],0),GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon2],1),GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon3],2));
  199. ShowPlayerDialog(playerid, DIALOG_CRATE, DIALOG_STYLE_LIST, "Caixa de armas",string, "Selecionar", "Cancelar");
  200. return 1;
  201. }
  202.  
  203. CMD:ctest222(playerid)
  204. {
  205. if(IsPlayerAdmin(playerid))
  206. {
  207. GivePlayerWeapon(playerid,24,100);
  208. }
  209. return 1;
  210. }
  211.  
  212. CMD:cmenu(playerid)
  213. {
  214. if(IsPlayerAdmin(playerid))
  215. {
  216. new count,string[143];
  217. foreach(new c: CrateLoop)
  218. {
  219. count++;
  220. }
  221. format(string,sizeof(string),"%s» Remover caixas {FF0000}(%i)\n{FFFFFF}» Remover caixa próxima\n» Resetar caixa próxima\n» Criar caixa\n» Ir para caixa\n» Editar pos da caixa",string,count);
  222. ShowPlayerDialog(playerid, DIALOG_RCON, DIALOG_STYLE_LIST, "Caixas de armas (Admin)",string, "Selecionar", "Cancelar");
  223. }
  224. return 1;
  225. }
  226.  
  227. /*Callbacks*/
  228. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  229. {
  230. switch(dialogid)
  231. {
  232. case DIALOG_CRATE:
  233. {
  234. if(response)
  235. {
  236. switch(listitem)
  237. {
  238. case 0:
  239. {
  240. if(cInfo[CurrentCrate[playerid]][Weapon1] == -1)
  241. {
  242. SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Slot vazia.");
  243. }
  244. else
  245. {
  246. GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon1],cInfo[CurrentCrate[playerid]][Ammo1]);
  247. cInfo[CurrentCrate[playerid]][Weapon1] = -1;
  248. }
  249. }
  250. case 1:
  251. {
  252. if(cInfo[CurrentCrate[playerid]][Weapon2] == -1)
  253. {
  254. SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Slot vazia.");
  255. }
  256. else
  257. {
  258. GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon2],cInfo[CurrentCrate[playerid]][Ammo2]);
  259. cInfo[CurrentCrate[playerid]][Weapon2] = -1;
  260. }
  261. }
  262. case 2:
  263. {
  264. if(cInfo[CurrentCrate[playerid]][Weapon3] == -1)
  265. {
  266. SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Slot vazia.");
  267. }
  268. else
  269. {
  270. GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon3],cInfo[CurrentCrate[playerid]][Ammo3]);
  271. cInfo[CurrentCrate[playerid]][Weapon3] = -1;
  272. }
  273. }
  274. case 3:
  275. {
  276. if(cInfo[CurrentCrate[playerid]][Weapon1] != -1 && cInfo[CurrentCrate[playerid]][Weapon2] != -1 && cInfo[CurrentCrate[playerid]][Weapon3] != -1)
  277. {
  278. SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Caixa cheia, nenhuma outra arma pode ser colocada dentro.");
  279. }
  280. else
  281. {
  282. if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Você não tem armas em mãos.");
  283. if(cInfo[CurrentCrate[playerid]][Weapon1] == -1)
  284. {
  285. cInfo[CurrentCrate[playerid]][Weapon1] = GetPlayerWeapon(playerid);
  286. cInfo[CurrentCrate[playerid]][Ammo1] = GetPlayerAmmo(playerid);
  287. SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
  288. return 1;
  289. }
  290. if(cInfo[CurrentCrate[playerid]][Weapon2] == -1)
  291. {
  292. cInfo[CurrentCrate[playerid]][Weapon2] = GetPlayerWeapon(playerid);
  293. cInfo[CurrentCrate[playerid]][Ammo2] = GetPlayerAmmo(playerid);
  294. SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
  295. return 1;
  296. }
  297. if(cInfo[CurrentCrate[playerid]][Weapon3] == -1)
  298. {
  299. cInfo[CurrentCrate[playerid]][Weapon3] = GetPlayerWeapon(playerid);
  300. cInfo[CurrentCrate[playerid]][Ammo3] = GetPlayerAmmo(playerid);
  301. SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
  302. return 1;
  303. }
  304. }
  305. }
  306. case 4:
  307. {
  308. ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 1, 1, 1, 1, 1);
  309. DestroyDynamicObject(cInfo[CurrentCrate[playerid]][CrateID]);
  310. Delete3DTextLabel(cInfo[CurrentCrate[playerid]][Label]);
  311. SetPlayerAttachedObject(playerid, 0, 3014, 6, 0.000000, 0.207999, -0.184999, -105.700004, 3.399999, -8.600002, 1.000000, 1.000000, 1.000000);
  312. HasBox[playerid] = true;
  313. cInfo[CurrentCrate[playerid]][cX] = 0.0;
  314. cInfo[CurrentCrate[playerid]][cY] = 0.0;
  315. cInfo[CurrentCrate[playerid]][cZ] = 0.0;
  316. }
  317. }
  318. }
  319. }
  320. case DIALOG_RCON:
  321. {
  322. if(response)
  323. {
  324. switch(listitem)
  325. {
  326. case 0:
  327. {
  328. foreach(new i: CrateLoop)
  329. {
  330. new query[41];
  331. DestroyDynamicObject(cInfo[i][CrateID]);
  332. Delete3DTextLabel(cInfo[i][Label]);
  333. mysql_format(mysql,query,sizeof(query),"DELETE FROM `crates` WHERE `ID` ='%i'",i);
  334. mysql_tquery(mysql,query,"","");
  335. Iter_SafeRemove(CrateLoop, i, i);
  336. }
  337. SendClientMessageToAll(-1,"{FFFF00}[!] {FFFFFF} Todas as caixas foram removidas por um(a) administrador(a).");
  338. }
  339. case 1:
  340. {
  341. new count = -1;
  342. foreach(new i: CrateLoop)
  343. {
  344. if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
  345. {
  346. count = i;
  347. }
  348. }
  349. if(count == -1) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Você não está próximo de nenhuma caixa de armas.");
  350. DestroyCrate(count);
  351. }
  352. case 2:
  353. {
  354. new count = -1;
  355. foreach(new i: CrateLoop)
  356. {
  357. if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
  358. {
  359. count = i;
  360. }
  361. }
  362. if(count == -1) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Você não está próximo de nenhuma caixa de armas.");
  363. cInfo[count][Weapon1] = cInfo[count][Weapon2] = cInfo[count][Weapon3] = -1;
  364. }
  365. case 3:
  366. {
  367. new Float:X,Float:Y,Float:Z;
  368. GetPlayerPos(playerid,X,Y,Z);
  369. CreateCrate(X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
  370. }
  371. case 4:
  372. {
  373. ShowPlayerDialog(playerid,DIALOG_CRTGO, DIALOG_STYLE_INPUT, "Caixas »{FFFFFF} Ir para caixa", "O ID da caixa vai abaixo:", "Ir", "Cancelar");
  374. }
  375. case 5:
  376. {
  377. ShowPlayerDialog(playerid,DIALOG_CRTET, DIALOG_STYLE_INPUT, "Caixas »{FFFFFF} Editar pos da caixa", "O ID da caixa vai abaixo:", "Confirmar", "Cancelar");
  378. }
  379. }
  380. }
  381. }
  382. case DIALOG_CRTGO:
  383. {
  384. if(response)
  385. {
  386. if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} ID inválido.");
  387. SetPlayerPos(playerid,cInfo[strval(inputtext)][cX],cInfo[strval(inputtext)][cY],cInfo[strval(inputtext)][cZ]+1);
  388. }
  389. }
  390. case DIALOG_CRTET:
  391. {
  392. if(response)
  393. {
  394. if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} ID inválido.");
  395. EditDynamicObject(playerid, cInfo[strval(inputtext)][CrateID]);
  396. CurrentCrate[playerid] = strval(inputtext);
  397. Delete3DTextLabel(cInfo[strval(inputtext)][Label]);
  398. }
  399. }
  400. }
  401. return 1;
  402. }
  403.  
  404. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  405. {
  406. new string[21];
  407. format(string,sizeof(string),"Caixa de Armas (%i)",CurrentCrate[playerid]);
  408. if(response == EDIT_RESPONSE_FINAL)
  409. {
  410. cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cX] = x;
  411. cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cY] = y;
  412. cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cZ] = z;
  413. cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,x,y,z+0.8-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
  414. SetDynamicObjectPos(cInfo[CurrentCrate[playerid]][CrateID],x,y,z);
  415. SetDynamicObjectRot(cInfo[CurrentCrate[playerid]][CrateID],rx,ry,rz);
  416. SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} Nova posição salva.");
  417. }
  418. else if(response == EDIT_RESPONSE_CANCEL)
  419. {
  420. cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,cInfo[CurrentCrate[playerid]][cX],cInfo[CurrentCrate[playerid]][cY],cInfo[CurrentCrate[playerid]][cZ]+0.8-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
  421. SetDynamicObjectPos(cInfo[CurrentCrate[playerid]][CrateID],cInfo[CurrentCrate[playerid]][cX],cInfo[CurrentCrate[playerid]][cY],cInfo[CurrentCrate[playerid]][cZ]);
  422. }
  423. return 1;
  424. }
  425.  
  426. public OnPlayerSpawn(playerid)
  427. {
  428. ApplyAnimation(playerid,"CARRY","null",0.0,0,0,0,0,0); //Pré-Carregar livraria de animação.
  429. if(HasBox[playerid] == true)
  430. {
  431. DropCrate(playerid);
  432. }
  433. return 1;
  434. }
  435.  
  436. public OnPlayerDeath(playerid,killerid,reason)
  437. {
  438. if(HasBox[playerid] == true)
  439. {
  440. DropCrate(playerid);
  441. }
  442. return 1;
  443. }
  444.  
  445. forward LoadCrates();
  446. public LoadCrates()
  447. {
  448. new t,string[21];
  449. for(new i = 0; i < cache_get_row_count(); i++)
  450. {
  451. t = cache_get_field_content_int(i,"ID");
  452. Iter_Add(CrateLoop,t);
  453.  
  454. cInfo[t][cX] = cache_get_field_content_float(i, "cX");
  455. cInfo[t][cY] = cache_get_field_content_float(i, "cY");
  456. cInfo[t][cZ] = cache_get_field_content_float(i, "cZ");
  457.  
  458. format(string,sizeof(string),"Caixa de Armas (%i)",t);
  459. cInfo[t][CrateID] = CreateDynamicObject(3014, cInfo[t][cX], cInfo[t][cY], cInfo[t][cZ], 0.0, 0.0, 0.0, 0);
  460. cInfo[t][Label] = Create3DTextLabel(string, 0xAA3333FF,cInfo[t][cX],cInfo[t][cY],cInfo[t][cZ]+0.8-0.4, 5.0,0, 0);
  461.  
  462. cInfo[t][Weapon1] = cache_get_field_content_int(i,"Weapon1");
  463. cInfo[t][Weapon2] = cache_get_field_content_int(i,"Weapon2");
  464. cInfo[t][Weapon3] = cache_get_field_content_int(i,"Weapon3");
  465.  
  466. cInfo[t][Ammo1] = cache_get_field_content_int(i,"Ammo1");
  467. cInfo[t][Ammo2] = cache_get_field_content_int(i,"Ammo2");
  468. cInfo[t][Ammo3] = cache_get_field_content_int(i,"Ammo3");
  469. }
  470. printf("\n=======================================\n");
  471. printf(" Caixas carregadas!\n");
  472. printf(" Um total de %d caixas de %d foram carregadas\n", cache_get_row_count(), CAIXAS_MAXIMAS);
  473. printf("\n=======================================\n");
  474. }
  475.  
  476. public OnPlayerDisconnect(playerid,reason)
  477. {
  478. if(HasBox[playerid] == true)
  479. {
  480. DropCrate(playerid);
  481. HasBox[playerid] = false;
  482. }
  483. CurrentCrate[playerid] = -1;
  484. }
  485.  
  486. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  487. {
  488. if (newkeys & KEY_YES)
  489. {
  490. if(HasBox[playerid] == true)
  491. {
  492. DropCrate(playerid);
  493. SetPlayerSkin(playerid,GetPlayerSkin(playerid));
  494. }
  495. }
  496. return 1;
  497. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement