Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.09 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <engine >
  5. #include <fun>
  6. #include <fvault>
  7. #include <dhudmessage>
  8. #include <ColorChat>
  9.  
  10. #define maxlevels 25
  11.  
  12. #define PLUGIN "Patente Magnatas"
  13. #define VERSION "1.3"
  14. #define AUTHOR "Feeh SK' [CLAN MAGNATAS]"
  15.  
  16. //RANK-XP
  17. new const db_save[] = "magnatas_xp_rank"
  18.  
  19. new level[33], xp[33], message[192], g_status_sync
  20. new sayText, teamInfo, maxPlayers, g_AdminListen, g_AdminListenFlag
  21. new strName[191], strText[191], alive[11], cvars[3], g_name[32]
  22. new give[33],iTarget[33]
  23.  
  24. new const xp_num[maxlevels+1] = { 0, 50, 130, 220, 300, 450, 600, 850, 1200, 1800, 2300, 2700, 3500, 4500, 5500, 6500, 7500, 8000, 9500, 10000, 16000, 20000, 25000, 30000, 50000 }
  25.  
  26. new const g_szTag[][] = {
  27. "",
  28. "DONO",
  29. "GIRL",
  30. "VIP",
  31. "MASTER",
  32. "ADMIN",
  33. "SUPREMO"
  34. }
  35.  
  36. new const ranks_nomes[maxlevels][] =
  37. {
  38. "Novato",
  39. "Recruta",
  40. "Soldado",
  41. "SoldadoIII",
  42. "SoldadoII",
  43. "SoldadoI",
  44. "Soldado Raso",
  45. "Especialista",
  46. "Especialista Tecnico",
  47. "Patrulheiro",
  48. "Cabo",
  49. "Lider de Tiro",
  50. "Sargento",
  51. "Sargento de Apoio",
  52. "Sargento Mestre",
  53. "Sargento Maior",
  54. "Intendente",
  55. "Aspirante",
  56. "Gurreiro Das Trevas",
  57. "CAPITAO",
  58. "MAJOR",
  59. "TENENTE CORONEL",
  60. "CORONEL",
  61. "GENERAL",
  62. "MARECHAL"
  63. }
  64.  
  65. new cvar_xp_normal, cvar_xp_hs, cvar_xp_faca, cvar_xp_he, xp_salvar_tipo
  66. new SOUND_RANK [] = "mgtrank/promotion_rank.wav";
  67. new sz_gPlayer
  68.  
  69. public plugin_init()
  70. {
  71. register_plugin(PLUGIN, VERSION, AUTHOR);
  72.  
  73. g_AdminListen = register_cvar("amx_listen", "1")
  74. g_AdminListenFlag = register_cvar("amx_listen_flag", "c")
  75.  
  76. // Cvars do sistema de pontos
  77. xp_salvar_tipo = register_cvar("pontos_salvar_tipo", "3") // 1 - IP || 2 - Nick || 3 - SteamID e sXe Mode
  78. cvar_xp_normal = register_cvar("xp_matar_normal", "1")
  79. cvar_xp_hs = register_cvar("xp_matar_hs", "4")
  80. cvar_xp_faca = register_cvar("xp_matar_faca", "10")
  81. cvar_xp_he = register_cvar("xp_matar_he", "8")
  82.  
  83.  
  84. register_event("StatusValue", "showStatus", "be", "1=2", "2!0")
  85. register_event("StatusValue", "hideStatus", "be", "1=1", "2=0")
  86. register_clcmd("say", "hook_say")
  87. register_clcmd("say_team", "hook_teamsay")
  88. register_say("patente", "xpmenu")
  89. register_say("level", "xpmenu")
  90. register_say("xp", "xpmenu")
  91.  
  92. register_concmd("quantia_xp", "cmdTyped", ADMIN_RCON);
  93.  
  94. sayText = get_user_msgid("SayText")
  95. teamInfo = get_user_msgid("TeamInfo")
  96. maxPlayers = get_maxplayers()
  97. g_status_sync = CreateHudSyncObj()
  98.  
  99. register_message(sayText, "avoid_duplicated")
  100. register_event("DeathMsg", "event_deathmsg", "a", "1");
  101.  
  102. register_clcmd("say /xpdono","donoxp")
  103. register_clcmd("quantia_xp","setxp")
  104.  
  105. }
  106.  
  107. public cmdCheckLevel(id)
  108. {
  109. new iMenu = menu_create("\yMAGNATAS \d- \wEscolha o jogador\r:", "checklevel_menu_handler")
  110.  
  111. new iPlayers[32], iNum, iTarget;
  112. new UserName[34], szTempID[10];
  113. get_players(iPlayers, iNum);
  114. for(new i; i < iNum; i++)
  115. {
  116. iTarget = iPlayers[i];
  117. if(!is_user_connected(iTarget))
  118. continue;
  119. get_user_name(iTarget, UserName, sizeof UserName - 1);
  120. num_to_str(iTarget, szTempID, charsmax(szTempID));
  121. menu_additem(iMenu, UserName, szTempID);
  122. }
  123. menu_setprop(iMenu, MPROP_NEXTNAME, "Proximo");
  124. menu_setprop(iMenu, MPROP_BACKNAME, "Voltar");
  125. menu_setprop(iMenu, MPROP_EXITNAME, "Sair");
  126. menu_display(id, iMenu, 0);
  127. }
  128.  
  129. public checklevel_menu_handler(id, iMenu, Item)
  130. {
  131. if(Item == MENU_EXIT)
  132. {
  133. menu_destroy(iMenu);
  134. return PLUGIN_HANDLED;
  135. }
  136. new iData[6], iName[64];
  137. new access, callback;
  138. menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
  139. new target = str_to_num(iData);
  140. if(!is_user_connected(target))
  141. {
  142. ColorChat(id, GREEN, "^x04|MAGNATAS|^x01 O jogador que escolheu nao esta no servidor")
  143. menu_destroy(iMenu);
  144. cmdCheckLevel(id);
  145. return PLUGIN_HANDLED;
  146. }
  147.  
  148. menu_destroy(iMenu);
  149. new szText[256], player_name[32];
  150. get_user_name(target, player_name, 31);
  151. if(maxlevels == level[target]+1)
  152. formatex(szText, charsmax(szText), "<html><head></head><body><br/>Nome: %s<br/>XP: %d/%d<br/>Level: %d/%d<br/>Patente: %s<br/>", player_name, xp[target], level[target]+1, maxlevels, ranks_nomes[level[target]]);
  153. else
  154. formatex(szText, charsmax(szText), "<html><head></head><body><br/>Nome: %s<br/>XP: %d/%d<br/>Level: %d/%d<br/>Patente: %s<br/>Prox Patente: %s</body></html>", player_name, xp[target], xp_num[level[target]+1], level[target]+1, maxlevels, ranks_nomes[level[target]], ranks_nomes[level[target]+1]);
  155. show_motd(id, szText, "|MAGNATAS| Sistema de Level");
  156. cmdCheckLevel(id);
  157. return PLUGIN_HANDLED;
  158. }
  159.  
  160. /*----------------------------------------------------------------------------------------------------------------
  161. -HUD DO JOGO
  162. ----------------------------------------------------------------------------------------------------------------*/
  163. public hud_status(id)
  164. {
  165. if(!is_user_alive(id) || !is_user_connected(id) )
  166. return;
  167.  
  168. if(level[id] >= maxlevels)
  169. {
  170. static r, g, b; r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255);
  171. set_hudmessage(r, g, b, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
  172. show_hudmessage(id, "CLAN MAGNATAS ^n^n» Level: %d/%d^n» Rank: %s^n» XP: %d",level[id]+1, maxlevels, ranks_nomes[level[id]], xp[id])
  173. }
  174. else
  175. {
  176. set_hudmessage(255, 255, 255, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
  177. show_hudmessage(id, "CLAN MAGNATAS ^n^n» Level: %d/%d^n» Rank: %s^n» XP: %d/%d",level[id]+1, maxlevels, ranks_nomes[level[id]], xp[id], xp_num[level[id]+1])
  178. }
  179. }
  180.  
  181. /*----------------------------------------------------------------------------------------------------------------
  182. -doar xp
  183. ----------------------------------------------------------------------------------------------------------------*/
  184. public xpmenu(id)
  185. {
  186. new name[500]
  187.  
  188. formatex(name, 499, "\r|\dMAGNATAS\r| \wMenu Rank/Patente/XP^n^n\wXP\d: \r%d \y- \wPatente\d: \r%s \y- \wLevel\d: \r%d ^n\wNecessario\d: \r%d \wde XP para ser\d: \r%s", xp[id], ranks_nomes[level[id]], level[id]+1, xp_num[level[id]+1], ranks_nomes[level[id]+1])
  189.  
  190. new menu = menu_create(name, "menuplayer")
  191.  
  192. menu_additem(menu, "Doar Xp", "1")
  193. menu_additem(menu, "Ver level/Rank/Patente de um Jogador", "2")
  194.  
  195. menu_setprop(menu, MPROP_EXITNAME, "Sair")
  196.  
  197. menu_display(id, menu)
  198.  
  199. return PLUGIN_HANDLED
  200. }
  201.  
  202. public menuplayer(id, menu, item)
  203. {
  204. if(item == MENU_EXIT)
  205. return PLUGIN_HANDLED
  206.  
  207. switch(item)
  208. {
  209. case 0:
  210. {
  211. xDoar(id)
  212. }
  213.  
  214. case 1:
  215. {
  216. cmdCheckLevel(id)
  217. }
  218.  
  219. }
  220.  
  221. return PLUGIN_HANDLED
  222. }
  223.  
  224. /*----------------------------------------------------------------------------------------------------------------
  225. -DOAR XP
  226. ----------------------------------------------------------------------------------------------------------------*/
  227. public xDoar(id)
  228. {
  229. new szTitle[150];
  230. formatex(szTitle, charsmax(szTitle), "\r|MAGNATAS|\w Escolha um Jogador para Doar XP");
  231.  
  232. new szMenu = menu_create(szTitle, "cmdxp_Handler");
  233.  
  234. new iPlayers[32], iNum;
  235. get_players(iPlayers, iNum);
  236.  
  237. new szItem[64], szName[32], szNum[3], iPlayer;
  238.  
  239. for( new i; i < iNum; i++ )
  240. {
  241. iPlayer = iPlayers[i];
  242.  
  243. if(is_user_connected(iPlayer))
  244. {
  245. num_to_str(iPlayer, szNum, charsmax(szNum));
  246. get_user_name(iPlayer, szName, charsmax(szName));
  247.  
  248. formatex(szItem, charsmax(szItem), "\w%s", szName);
  249. menu_additem(szMenu, szItem, szNum);
  250. }
  251. }
  252.  
  253. menu_display(id, szMenu);
  254.  
  255. return PLUGIN_CONTINUE;
  256. }
  257. public cmdxp_Handler(id, szMenu, iItem)
  258. {
  259. if( iItem == MENU_EXIT )
  260. {
  261. return PLUGIN_HANDLED;
  262. }
  263.  
  264. new szData[6],szName[32], iAccess, iCallback;
  265. menu_item_getinfo(szMenu, iItem, iAccess, szData, charsmax(szData), _, _, iCallback);
  266.  
  267. new iPlayer = str_to_num(szData);
  268. sz_gPlayer = iPlayer
  269.  
  270. get_user_name(iPlayer, szName, charsmax(szName));
  271.  
  272. if(!is_user_connected(iPlayer))
  273. {
  274. ColorChat(id,GREEN,"^x04|MAGNATAS| ^1O Jogador ^4%s^1 nao esta Conectado",szName)
  275. return PLUGIN_HANDLED;
  276. }
  277.  
  278. client_cmd(id,"messagemode quantia_xp")
  279. ColorChat(id,GREEN,"^x04|MAGNATAS| ^1Digite a quantidade de xp para dar para ^4%s.",szName)
  280.  
  281. return PLUGIN_CONTINUE;
  282. }
  283. public setxp(id)
  284. {
  285. if(!is_user_connected(sz_gPlayer))
  286. {
  287. ColorChat(id,GREEN,"^x04|MAGNATAS| ^1Este jogador nao esta conectado")
  288. return PLUGIN_HANDLED;
  289. }
  290.  
  291. new szName[32]
  292. new szName2[32]
  293. new szArgs[16]
  294. get_user_name(id, szName, 31)
  295. get_user_name(sz_gPlayer, szName2, 31)
  296.  
  297. new amount[30]; read_args(amount, charsmax(amount)); remove_quotes(amount)
  298. new ammount = str_to_num(amount)
  299. new szNum = str_to_num(amount)
  300.  
  301. read_args(szArgs, charsmax(szArgs))
  302. remove_quotes(szArgs)
  303. trim(szArgs)
  304.  
  305. if(xp[id] < ammount)
  306. {
  307. ColorChat(id,GREEN,"^x04|MAGNATAS| ^1Vc nao tem XP Suficiente")
  308. return PLUGIN_HANDLED
  309. }
  310. if (szNum <= 0)
  311. {
  312. set_dhudmessage(255, 0, 0, 0.02, 0.17, 2, 0.3, 2.0, 0.07, 0.07)
  313. show_dhudmessage(id, "Quantia invalida.")
  314. ColorChat(id,GREEN, "^x04|MAGNATAS| ^1Quantia Invalida.")
  315. xDoar(id)
  316.  
  317. return PLUGIN_HANDLED
  318. }
  319. ColorChat(sz_gPlayer,GREEN,"^x04|MAGNATAS| ^1Voce recebeu ^4%d de XP^1 do Jogador ^4%s",ammount,szName)
  320. ColorChat(id,GREEN,"^x04|MAGNATAS| ^1Voce deu ^4%d^1 de XP para ^4%s",ammount,szName2)
  321. ColorChat(0,GREEN,"^x04|MAGNATAS| ^3%s ^1deu ^4%d^1 de XP para ^4%s",szName,ammount,szName2)
  322. xp[sz_gPlayer] += ammount
  323. xp[id] -= ammount
  324.  
  325. new currentlevel = 0;
  326. while(currentlevel < (maxlevels - 1))
  327. {
  328. if(xp[sz_gPlayer] >= xp_num[currentlevel + 1])
  329. ++currentlevel;
  330. else
  331. break;
  332. }
  333. level[sz_gPlayer] = currentlevel;
  334. iTarget[id] = 0;
  335.  
  336. return PLUGIN_HANDLED;
  337. }
  338. public donoxp(id)
  339. {
  340. new iMenu = menu_create("|MAGNATAS| \wEscolha o jogador que deseja doar/tirar XP", "rankmenu_menu_handler")
  341.  
  342. if(!(get_user_flags(id) & ADMIN_LEVEL_A))
  343. {
  344. ColorChat(id, GREEN, "^4|MAGNATAS| ^1Voce nao tem acesso a esse comando!")
  345. client_cmd(id, "spk buttons/button2.wav")
  346. return PLUGIN_HANDLED;
  347. }
  348. menu_additem(iMenu, "Doar XP", "1");
  349. menu_additem(iMenu, "Tirar XP", "2");
  350. menu_setprop(iMenu, MPROP_EXITNAME, "Sair");
  351. menu_display(id, iMenu, 0);
  352. return PLUGIN_HANDLED;
  353. }
  354.  
  355. public rankmenu_menu_handler(id, iMenu, Item)
  356. {
  357. if(Item == MENU_EXIT)
  358. {
  359. menu_destroy(iMenu);
  360. return PLUGIN_HANDLED;
  361. }
  362. new iData[6], iName[64];
  363. new access, callback;
  364. menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
  365. give[id] = str_to_num(iData);
  366. GiveTakeMenu(id);
  367. return PLUGIN_HANDLED;
  368. }
  369.  
  370. public GiveTakeMenu(id)
  371. {
  372. static szText[64]
  373. formatex(szText, 63, "%s XP", give[id] == 1 ? "Doar" : "Tirar")
  374. new iMenu = menu_create(szText, "givetake_menu_handler")
  375.  
  376. new iPlayers[32], iNum, iTarget;
  377. new UserName[34], szTempID[10];
  378. get_players(iPlayers, iNum);
  379. for(new i; i < iNum; i++)
  380. {
  381. iTarget = iPlayers[i];
  382. if(!is_user_connected(iTarget))
  383. continue;
  384. get_user_name(iTarget, UserName, sizeof UserName - 1);
  385. num_to_str(iTarget, szTempID, charsmax(szTempID));
  386. menu_additem(iMenu, UserName, szTempID);
  387. }
  388. menu_setprop(iMenu, MPROP_NEXTNAME, "Proximo");
  389. menu_setprop(iMenu, MPROP_BACKNAME, "Voltar");
  390. menu_setprop(iMenu, MPROP_EXITNAME, "Sair");
  391. menu_display(id, iMenu, 0);
  392. }
  393.  
  394. public givetake_menu_handler(id, iMenu, Item)
  395. {
  396. if(Item == MENU_EXIT)
  397. {
  398. menu_destroy(iMenu);
  399. return PLUGIN_HANDLED;
  400. }
  401.  
  402. new iData[6], iName[64];
  403. new access, callback;
  404. menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
  405. iTarget[id] = str_to_num(iData);
  406. if(!is_user_connected(iTarget[id]))
  407. {
  408. iTarget[id] = 0
  409. ColorChat(id, GREEN, "|MAGNATAS|^x01 O jogador que escolheu nao esta no servidor.")
  410. return PLUGIN_HANDLED;
  411. }
  412. menu_destroy(iMenu);
  413. client_cmd(id, "messagemode quantia_xp");
  414. return PLUGIN_HANDLED;
  415. }
  416.  
  417. public cmdTyped(id, rank, cid)
  418. {
  419. if(!cmd_access(id, rank, cid, 1))
  420. return PLUGIN_HANDLED;
  421.  
  422. if(!iTarget[id] || give[id] <= 0)
  423. return PLUGIN_HANDLED;
  424. if(!is_user_connected(iTarget[id]))
  425. {
  426. ColorChat(id, GREEN, "^x04|MAGNATAS|^x01 O jogador que escolheu nao esta no servidor.")
  427. return PLUGIN_HANDLED;
  428. }
  429.  
  430. new iTyped[12];
  431. read_argv(1, iTyped, sizeof iTyped - 1);
  432. new g_points = str_to_num(iTyped)
  433. new AdminName[32], PlayerName[32];
  434. get_user_name(id, AdminName, 31)
  435. get_user_name(iTarget[id], PlayerName, 31)
  436. if(give[id] == 1)
  437. {
  438. xp[iTarget[id]] += g_points
  439. ColorChat(0, GREEN, "^4|MAGNATAS| ^1Admin ^x03%s ^1deu ^x04%d ^x01xp para ^x03%s^x01.", AdminName, g_points, PlayerName)
  440. }
  441. else
  442. {
  443. if(g_points > xp[iTarget[id]])
  444. xp[iTarget[id]] = 0
  445. else
  446. xp[iTarget[id]] -= g_points;
  447. ColorChat(0, GREEN, "^4|MAGNATAS| ^1Admin ^x03%s ^x01tirou ^x04%d ^x01xp de ^x03%s^x01.", AdminName, g_points, PlayerName)
  448. }
  449. new currentlevel = 0;
  450. while(currentlevel < (maxlevels - 1))
  451. {
  452. if(xp[iTarget[id]] >= xp_num[currentlevel + 1])
  453. ++currentlevel;
  454. else
  455. break;
  456. }
  457. level[iTarget[id]] = currentlevel;
  458. iTarget[id] = 0;
  459. GiveTakeMenu(id);
  460. Save( id );
  461. return PLUGIN_HANDLED;
  462. }
  463.  
  464. public client_authorized( id )
  465. {
  466. Load( id );
  467. }
  468.  
  469. public client_disconnect( id )
  470. {
  471. Save( id );
  472. }
  473.  
  474. public client_putinserver(id)
  475. {
  476. new currentlevel = 0;
  477. while(currentlevel < (maxlevels - 1))
  478. {
  479. if(xp[id] >= xp_num[currentlevel + 1])
  480. ++currentlevel;
  481. else
  482. break;
  483. }
  484. level[id] = currentlevel;
  485. }
  486.  
  487. /*----------------------------------------------------------------------------------------------------------------
  488. -CARREGAR DADOS
  489. ----------------------------------------------------------------------------------------------------------------*/
  490. public Load(id)
  491. {
  492. new auth[40], data[50], x1[10], x2[10]
  493.  
  494. switch(get_pcvar_num(xp_salvar_tipo))
  495. {
  496. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  497. case 2: get_user_name(id, auth, charsmax(auth))
  498. case 3: get_user_authid(id, auth, charsmax(auth))
  499. }
  500.  
  501. fvault_get_data(db_save, auth, data, charsmax(data))
  502. parse(data, x1, charsmax(x1), x2, charsmax(x2))
  503.  
  504. level[id] = str_to_num(x1)
  505. xp[id] = str_to_num(x2)
  506.  
  507. check_level(id, 0)
  508. set_task(1.1, "hud_status", id, _, _, "b")
  509. }
  510.  
  511. /*----------------------------------------------------------------------------------------------------------------
  512. -SALVAR PONTOS
  513. ----------------------------------------------------------------------------------------------------------------*/
  514. public Save(id)
  515. {
  516. if(!is_user_connected(id)) return PLUGIN_HANDLED;
  517.  
  518. new auth[40], data[50]
  519.  
  520. switch(get_pcvar_num(xp_salvar_tipo))
  521. {
  522. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  523. case 2: get_user_name(id, auth, charsmax(auth))
  524. case 3: get_user_authid(id, auth, charsmax(auth))
  525. }
  526.  
  527. formatex(data, charsmax(data), "%d %d", level[id], xp[id])
  528.  
  529. fvault_pset_data(db_save, auth, data)
  530.  
  531. return PLUGIN_HANDLED;
  532. }
  533.  
  534. public avoid_duplicated(msgId, msgDest, receiver)
  535. return PLUGIN_HANDLED;
  536.  
  537. /*----------------------------------------------------------------------------------------------------------------
  538. -PATENTE NO SAY
  539. ----------------------------------------------------------------------------------------------------------------*/
  540. public hook_say(id)
  541. {
  542. read_args(message, 191)
  543. remove_quotes(message)
  544.  
  545. if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, ""))
  546. return PLUGIN_CONTINUE
  547.  
  548. get_user_name(id, g_name, charsmax(g_name))
  549.  
  550. new isAlive
  551. new admin = 0, iFlags = get_user_flags(id)
  552. if(iFlags & ADMIN_LEVEL_A) admin = 1 //dono
  553. else if(iFlags & ADMIN_LEVEL_B) admin = 2 //girl
  554. else if(iFlags & ADMIN_LEVEL_C) admin = 3 //vip
  555. else if(iFlags & ADMIN_LEVEL_D) admin = 4 //master
  556. else if(iFlags & ADMIN_LEVEL_G) admin= 5 //admin
  557. else if(iFlags & ADMIN_LEVEL_F) admin = 8 //supremo
  558.  
  559.  
  560. if(is_user_alive(id))
  561. {
  562. isAlive = 1
  563. alive = "^x01"
  564. }
  565. else
  566. {
  567. isAlive = 0
  568. alive = "^x01*MORTO* "
  569. }
  570.  
  571. static color[10]
  572. if(admin)
  573. {
  574. get_user_team(id, color, 9)
  575. format(strName, 191, "%s^x04[%s] ^x01[^x04%s^x01] ^x03%s", alive, g_szTag[admin], ranks_nomes[level[id]], g_name)
  576. format(strText, 191, "^x04%s", message)
  577. }
  578. else
  579. {
  580. get_user_name(id, g_name, 32)
  581. get_user_team(id, color, 9)
  582. format(strName, 191, "%s^x01[^x04%s^x01] ^x03%s", alive, ranks_nomes[level[id]], g_name)
  583. format(strText, 191, "%s", message)
  584. }
  585.  
  586. format(message, 191, "%s^x01: %s", strName, strText)
  587.  
  588. sendMessage(color, isAlive)// Sends the colored message
  589. return PLUGIN_CONTINUE;
  590. }
  591.  
  592. public hook_teamsay(id)
  593. {
  594. read_args(message, 191)
  595. remove_quotes(message)
  596.  
  597. if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, "")) // Ignores Admin Hud Messages, Admin Slash commands
  598. return PLUGIN_CONTINUE
  599.  
  600. new playerTeam = get_user_team(id)
  601. new playerTeamName[19]
  602.  
  603. switch(playerTeam) // Team names which appear on team-only messages
  604. {
  605. case 1: copy(playerTeamName, 3, "TRs")
  606. case 2: copy(playerTeamName, 3, "CTs")
  607. default: copy(playerTeamName, 9, "Spectador")
  608. }
  609.  
  610. get_user_name(id, g_name, charsmax(g_name))
  611. new isAlive
  612. new admin = 0, iFlags = get_user_flags(id)
  613. if(iFlags & ADMIN_LEVEL_A) admin = 1 //dono
  614. else if(iFlags & ADMIN_LEVEL_B) admin = 2 //girl
  615. else if(iFlags & ADMIN_LEVEL_C) admin = 3 //vip
  616. else if(iFlags & ADMIN_LEVEL_D) admin = 4 //master
  617. else if(iFlags & ADMIN_LEVEL_G) admin= 5 //admin
  618. else if(iFlags & ADMIN_LEVEL_F) admin = 8 //supremo
  619.  
  620. if(is_user_alive(id))
  621. {
  622. isAlive = 1
  623. alive = "^x01"
  624. }
  625. else
  626. {
  627. isAlive = 0
  628. alive = "^x01*MORTO* "
  629. }
  630.  
  631. static color[10]
  632. if(admin)
  633. {
  634. get_user_team(id, color, 9)
  635. format(strName, 191, "%s(%s) ^x04[%s] ^x01[^x04%s^x01] ^x03%s", alive, playerTeamName, g_szTag[admin], ranks_nomes[level[id]], g_name)
  636. format(strText, 191, "^x04%s", message)
  637. }
  638. else
  639. {
  640. get_user_name(id, g_name, 32)
  641. get_user_team(id, color, 9);
  642. format(strName, 191, "%s(%s) ^x01[^x04%s^x01] ^x03%s", alive, playerTeamName, ranks_nomes[level[id]], g_name)
  643. format(strText, 191, "%s", message)
  644. }
  645.  
  646. format(message, 191, "%s^x01: %s", strName, strText)
  647. sendTeamMessage(color, isAlive, playerTeam)
  648. return PLUGIN_CONTINUE
  649. }
  650.  
  651. public sendMessage(color[], alive)
  652. {
  653. new teamName[10]
  654.  
  655. for(new player = 1; player < maxPlayers; player++)
  656. {
  657. if(!is_user_connected(player))
  658. continue
  659.  
  660. get_pcvar_string(g_AdminListenFlag, cvars, charsmax(cvars))
  661. if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  662. {
  663. get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
  664. changeTeamInfo(player, color)// Changes user's team according to color choosen
  665. writeMessage(player, message)// Writes the message on player's chat
  666. changeTeamInfo(player, teamName)// Changes user's team back to original
  667. }
  668. }
  669. }
  670.  
  671. public sendTeamMessage(color[], alive, playerTeam)
  672. {
  673. new teamName[10]
  674.  
  675. for(new player = 1; player < maxPlayers; player++)
  676. {
  677. if(!is_user_connected(player))
  678. continue
  679.  
  680. get_pcvar_string(g_AdminListenFlag, cvars, charsmax(cvars))
  681. if(get_user_team(player) == playerTeam || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  682. {
  683. if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  684. {
  685. get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
  686. changeTeamInfo(player, color)// Changes user's team according to color choosen
  687. writeMessage(player, message)// Writes the message on player's chat
  688. changeTeamInfo(player, teamName)// Changes user's team back to original
  689. }
  690. }
  691. }
  692. }
  693.  
  694.  
  695. public changeTeamInfo(player, team[])
  696. {
  697. message_begin(MSG_ONE, teamInfo, _, player)// Tells to to modify teamInfo(Which is responsable for which time player is)
  698. write_byte(player)// Write byte needed
  699. write_string(team)// Changes player's team
  700. message_end()// Also Needed
  701. }
  702.  
  703.  
  704. public writeMessage(player, message[])
  705. {
  706. message_begin(MSG_ONE, sayText, {0, 0, 0}, player)// Tells to modify sayText(Which is responsable for writing colored messages)
  707. write_byte(player)// Write byte needed
  708. write_string(message)// Effectively write the message, finally, afterall
  709. message_end()// Needed as always
  710. }
  711.  
  712. /*----------------------------------------------------------------------------------------------------------------
  713. -CHECAR O LEVEL OU ADD++
  714. ----------------------------------------------------------------------------------------------------------------*/
  715. public check_level(id, sound)
  716. {
  717. if(!is_user_connected(id)) return PLUGIN_HANDLED;
  718.  
  719. new g_nome[32]; get_user_name(id, g_nome, 31)
  720.  
  721. if(level[id] == maxlevels)
  722. {
  723. while(xp[id] >= xp_num[level[id]])
  724. {
  725. ColorChat(0, GREEN, "^4%s ^1atingiu o level maximo. ^3Level maximo:^4 20^1.", g_name, level[id])
  726. return PLUGIN_HANDLED
  727. }
  728.  
  729. }
  730.  
  731. //Bugs
  732. if(level[id] == maxlevels && xp[id] > xp_num[level[id]-1])
  733. {
  734. xp[id] = xp_num[level[id]-1]
  735. Save(id)
  736. }
  737.  
  738. return PLUGIN_HANDLED
  739. }
  740.  
  741. /*----------------------------------------------------------------------------------------------------------------
  742. -EVENTO PARA ADD XP
  743. ----------------------------------------------------------------------------------------------------------------*/
  744. public event_deathmsg()
  745. {
  746. new id = read_data(1)
  747. new victim = read_data(2)
  748. new headshot = read_data(3)
  749.  
  750. if(victim != id && (is_user_connected(id) && is_user_connected(victim)))
  751. {
  752. new xp_add
  753.  
  754. if(!headshot)
  755. xp_add = get_pcvar_num(cvar_xp_normal)
  756. else
  757. xp_add = get_pcvar_num(cvar_xp_hs)
  758.  
  759. if(1 <= id <= maxPlayers)
  760. {
  761. new weapon = get_user_weapon(id)
  762.  
  763. if(weapon == CSW_KNIFE)
  764. xp_add = get_pcvar_num(cvar_xp_faca)
  765.  
  766. if(weapon == CSW_HEGRENADE)
  767. xp_add = get_pcvar_num(cvar_xp_he)
  768. }
  769. xp[id] += xp_add
  770.  
  771. set_dhudmessage(0, 255, 0, 0.03, 0.65, 2, 0.3, 2.0, 0.07, 0.07, false)
  772. show_dhudmessage(id, "+%d XP", xp_add)
  773.  
  774. if(level[id] < maxlevels-1)
  775. {
  776. if(xp[id] >= xp_num[level[id]+1])
  777. {
  778. level[id]++
  779.  
  780. static g_name[32]; get_user_name(id, g_name, 31)
  781.  
  782. client_cmd(0,"spk %s",SOUND_RANK)
  783. ColorChat(0, GREEN, "^4|MAGNATAS| ^3%s ^1Subiu de patente. ^3Agora eh: ^4%s.", g_name, ranks_nomes[level[id]])
  784. }
  785.  
  786. check_level(id, 0)
  787. Save(id)
  788. }
  789. }
  790. }
  791.  
  792. /*------------------------------------------------------------------------------------------
  793. -REGISTRA COMANDOS DE SAY E SAYTEAM
  794. --------------------------------------------------------------------------------------------*/
  795. stock register_say(szSay[], szFunction[])
  796. {
  797. new szTemp[64]
  798. formatex(szTemp, 63 , "say /%s", szSay)
  799. register_clcmd(szTemp, szFunction)
  800.  
  801. formatex(szTemp, 63 , "say .%s", szSay)
  802. register_clcmd(szTemp, szFunction)
  803.  
  804. formatex( szTemp, 63 , "say_team /%s", szSay)
  805. register_clcmd(szTemp, szFunction )
  806.  
  807. formatex( szTemp, 63 , "say_team .%s", szSay)
  808. register_clcmd(szTemp, szFunction)
  809. }
  810.  
  811. /*----------------------------------------------------------------------------------------------------------------
  812. -MOSTRAR XP AO MIRAR NA PESSOA
  813. ----------------------------------------------------------------------------------------------------------------*/
  814.  
  815. public showStatus(id)
  816. {
  817. if(!is_user_bot(id) && is_user_connected(id))
  818. {
  819. new name[32], pid = read_data(2)
  820.  
  821. get_user_name(pid, name, 31)
  822. new color1 = 0, color2 = 0
  823.  
  824. new xxx = get_user_team(id)
  825. new xxx2 = get_user_team(pid)
  826.  
  827. new team1 = xxx == 1, team2 = xxx2 == 1
  828.  
  829. if (team2 == 1)
  830. color1 = 255
  831. else
  832. color2 = 255
  833.  
  834. if (team1 == team2) // friend
  835. {
  836. set_hudmessage(color1, 50, color2, -1.0, 0.85, 1, 0.01, 3.0, 0.01, 0.01, -1)
  837. ShowSyncHudMsg(id, g_status_sync, "Nome: %s^nRank: %s^nLevel: %d^nXP: %d/%d", name, ranks_nomes[level[pid]], level[pid]+1, xp[pid], xp_num[level[pid]+1])
  838. }
  839. }
  840. }
  841.  
  842. public hideStatus(id)
  843. {
  844. ClearSyncHud(id, g_status_sync)
  845. }
  846.  
  847. public plugin_precache()
  848. {
  849. precache_sound(SOUND_RANK)
  850.  
  851.  
  852. return PLUGIN_CONTINUE
  853. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement