Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.89 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fvault>
  3. #include <cstrike>
  4. #include <ColorChat>
  5.  
  6. #define maxranks 15
  7. #define maxlevels 50
  8.  
  9. #define xPrefix "RANK"
  10.  
  11. #define RANKS_RECRUTA 0
  12. #define RANKS_SOLDADO 1
  13. #define RANKS_SOLDADO_RASO 2
  14. #define RANKS_ESPECIALISTA 3
  15. #define RANKS_ESPECIALISTA_TECNICO 4
  16. #define RANKS_PATRULEIRO 5
  17. #define RANKS_CABO 6
  18. #define RANKS_LIDER_DE_TIRO 7
  19. #define RANKS_SARGENTO 8
  20. #define RANKS_SARGENTO_DE_APOIO 9
  21. #define RANKS_SARGENTO_MESTRE 10
  22. #define RANKS_SARGENTO_MAIOR 11
  23. #define RANKS_INTENDENTE 12
  24. #define RANKS_ASPIRANTE 13
  25. #define RANKS_GUERREIRO 14
  26.  
  27. #define PLUGIN "Patente Magnatas"
  28. #define VERSION "1.3"
  29. #define AUTHOR "Feeh SK' [CLAN MAGNATAS]"
  30.  
  31. new const db_save[] = "level_xp_rank"
  32.  
  33. new message[192], nome[32]
  34. new sayText, teamInfo, maxPlayers, g_AdminListen, g_AdminListenFlag
  35. new strName[191], strText[191], alive[11]
  36. new level[33], xp[33], rank[33], cvars[3], g_status_sync
  37.  
  38. new const xp_num[maxlevels+1] = { 15, 70, 150, 250, 350, 450, 550, 650, 750, 850, 950, 1050, 1150, 1250, 1350, 1450, 1550, 1650,
  39. 1750, 1850, 1950, 2050, 2150, 2250, 2350, 2450, 2550,2650, 2750, 2850, 2950, 3050, 3150, 3250, 3350, 3450, 3550, 3650,
  40. 3750, 3850, 3950, 4050, 4150, 4250, 4350, 4450, 4550, 4650, 4750, 5000 }
  41.  
  42. new const g_szTag[][] = {
  43. "",
  44. "DONO",
  45. "GIRL",
  46. "VIP",
  47. "MASTER",
  48. "ADMIN",
  49. "SUPREMO"
  50. }
  51.  
  52. new const ranks_nomes[maxranks][]=
  53. {
  54. "Recruta",
  55. "Soldado",
  56. "Soldado Raso",
  57. "Especialista",
  58. "Especialista Tecnico",
  59. "Patrulheiro",
  60. "Cabo",
  61. "Lider de Tiro",
  62. "Sargento",
  63. "Sargento de Apoio",
  64. "Sargento Mestre",
  65. "Sargento Maior",
  66. "Intendente",
  67. "Aspirante",
  68. "Gurreiro Das Trevas"
  69. }
  70.  
  71. public plugin_init()
  72. {
  73. register_plugin(PLUGIN, VERSION, AUTHOR);
  74.  
  75. g_AdminListen = register_cvar("amx_listen", "1")
  76. g_AdminListenFlag = register_cvar("amx_listen_flag", "c")
  77.  
  78. // sistema de xp+lvl+rank
  79. cvars[1] = register_cvar("rank_salvamente_tipo", "2") // 1 - IP || 2 - Nick || 3 - SteamID
  80.  
  81.  
  82. register_event("StatusValue", "showStatus", "be", "1=2", "2!0")
  83. register_event("StatusValue", "hideStatus", "be", "1=1", "2=0")
  84. register_event("DeathMsg", "xDeathMsg", "a", "1>0") // Usado para add xps, e etc..
  85. register_clcmd("say", "hook_say")
  86. register_clcmd("say_team", "hook_teamsay")
  87.  
  88. sayText = get_user_msgid("SayText")
  89. teamInfo = get_user_msgid("TeamInfo")
  90. maxPlayers = get_maxplayers()
  91. g_status_sync = CreateHudSyncObj()
  92. }
  93.  
  94. /*----------------------------------------------------------------------------------------------------------------
  95. -HUD DO JOGO
  96. ----------------------------------------------------------------------------------------------------------------*/
  97. public hud_status(id)
  98. {
  99. if(!is_user_alive(id) || !is_user_connected(id) )
  100. return;
  101.  
  102. if(level[id] >= maxlevels)
  103. {
  104. static r, g, b; r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255);
  105. set_hudmessage(r, g, b, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
  106. show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_nomes[rank[id]], xp[id], xp[id])
  107. }
  108. else
  109. {
  110. set_hudmessage(255, 255, 255, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
  111. show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_nomes[rank[id]], xp[id], xp_num[level[id]])
  112. }
  113. }
  114.  
  115. /*----------------------------------------------------------------------------------------------------------------
  116. -EVENTO PARA ADD XP
  117. ----------------------------------------------------------------------------------------------------------------*/
  118. public xDeathMsg()
  119. {
  120. new id = read_data(1)
  121. new hs = read_data(3)
  122.  
  123. xp[id]++
  124.  
  125. if(hs)
  126. xp[id] += 3
  127.  
  128. check_level(id, 1)
  129. salvar_dados(id)
  130. }
  131.  
  132. /*----------------------------------------------------------------------------------------------------------------
  133. -PATENTE NO SAY
  134. ----------------------------------------------------------------------------------------------------------------*/
  135. public hook_say(id)
  136. {
  137. read_args(message, 191)
  138. remove_quotes(message)
  139.  
  140. if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, ""))
  141. return PLUGIN_CONTINUE
  142.  
  143. get_user_name(id, nome, charsmax(nome))
  144.  
  145. new isAlive
  146. new admin = 0, iFlags = get_user_flags(id)
  147. if(iFlags & ADMIN_LEVEL_A) admin = 1 //dono
  148. else if(iFlags & ADMIN_LEVEL_B) admin = 2 //girl
  149. else if(iFlags & ADMIN_LEVEL_C) admin = 3 //vip
  150. else if(iFlags & ADMIN_LEVEL_D) admin = 4 //master
  151. else if(iFlags & ADMIN_LEVEL_G) admin= 5 //admin
  152. else if(iFlags & ADMIN_LEVEL_F) admin = 8 //supremo
  153.  
  154.  
  155. if(is_user_alive(id))
  156. {
  157. isAlive = 1
  158. alive = "^x01"
  159. }
  160. else
  161. {
  162. isAlive = 0
  163. alive = "^x01*MORTO* "
  164. }
  165.  
  166. static color[10]
  167. if(admin)
  168. {
  169. get_user_team(id, color, 9)
  170. format(strName, 191, "%s^x04[%s] ^x01[^x04%s^x01] ^x03%s", alive, g_szTag[admin], ranks_nomes[rank[id]], nome)
  171. format(strText, 191, "^x04%s", message)
  172. }
  173. else
  174. {
  175. get_user_name(id, nome, 32)
  176. get_user_team(id, color, 9)
  177. format(strName, 191, "%s^x01[^x04%s^x01] ^x03%s", alive, ranks_nomes[rank[id]], nome)
  178. format(strText, 191, "%s", message)
  179. }
  180.  
  181. format(message, 191, "%s^x01: %s", strName, strText)
  182.  
  183. sendMessage(color, isAlive)// Sends the colored message
  184. return PLUGIN_CONTINUE;
  185. }
  186.  
  187. public hook_teamsay(id)
  188. {
  189. read_args(message, 191)
  190. remove_quotes(message)
  191.  
  192. if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, "")) // Ignores Admin Hud Messages, Admin Slash commands
  193. return PLUGIN_CONTINUE
  194.  
  195. new playerTeam = get_user_team(id)
  196. new playerTeamName[19]
  197.  
  198. switch(playerTeam) // Team names which appear on team-only messages
  199. {
  200. case 1: copy(playerTeamName, 3, "TRs")
  201. case 2: copy(playerTeamName, 3, "CTs")
  202. default: copy(playerTeamName, 9, "Spectador")
  203. }
  204.  
  205. get_user_name(id, nome, charsmax(nome))
  206. new isAlive
  207. new admin = 0, iFlags = get_user_flags(id)
  208. if(iFlags & ADMIN_LEVEL_A) admin = 1 //dono
  209. else if(iFlags & ADMIN_LEVEL_B) admin = 2 //girl
  210. else if(iFlags & ADMIN_LEVEL_C) admin = 3 //vip
  211. else if(iFlags & ADMIN_LEVEL_D) admin = 4 //master
  212. else if(iFlags & ADMIN_LEVEL_G) admin= 5 //admin
  213. else if(iFlags & ADMIN_LEVEL_F) admin = 8 //supremo
  214.  
  215. if(is_user_alive(id))
  216. {
  217. isAlive = 1
  218. alive = "^x01"
  219. }
  220. else
  221. {
  222. isAlive = 0
  223. alive = "^x01*MORTO* "
  224. }
  225.  
  226. static color[10]
  227. if(admin)
  228. {
  229. get_user_team(id, color, 9)
  230. format(strName, 191, "%s(%s) ^x04[%s] ^x01[^x04%s^x01] ^x03%s", alive, playerTeamName, g_szTag[admin], ranks_nomes[rank[id]], nome)
  231. format(strText, 191, "^x04%s", message)
  232. }
  233. else
  234. {
  235. get_user_name(id, nome, 32)
  236. get_user_team(id, color, 9);
  237. format(strName, 191, "%s(%s) ^x01[^x04%s^x01] ^x03%s", alive, playerTeamName, ranks_nomes[rank[id]], nome)
  238. format(strText, 191, "%s", message)
  239. }
  240.  
  241. format(message, 191, "%s^x01: %s", strName, strText)
  242. sendTeamMessage(color, isAlive, playerTeam)
  243. return PLUGIN_CONTINUE
  244. }
  245.  
  246. public sendMessage(color[], alive)
  247. {
  248. new teamName[10]
  249.  
  250. for(new player = 1; player < maxPlayers; player++)
  251. {
  252. if(!is_user_connected(player))
  253. continue
  254.  
  255. get_pcvar_string(g_AdminListenFlag, cvars, charsmax(cvars))
  256. if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  257. {
  258. get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
  259. changeTeamInfo(player, color)// Changes user's team according to color choosen
  260. writeMessage(player, message)// Writes the message on player's chat
  261. changeTeamInfo(player, teamName)// Changes user's team back to original
  262. }
  263. }
  264. }
  265.  
  266. public sendTeamMessage(color[], alive, playerTeam)
  267. {
  268. new teamName[10]
  269.  
  270. for(new player = 1; player < maxPlayers; player++)
  271. {
  272. if(!is_user_connected(player))
  273. continue
  274.  
  275. get_pcvar_string(g_AdminListenFlag, cvars, charsmax(cvars))
  276. if(get_user_team(player) == playerTeam || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  277. {
  278. if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(cvars))
  279. {
  280. get_user_team(player, teamName, 9)// Armazena o nome da equipe do usuário para mudar de volta depois de enviar a mensagem
  281. changeTeamInfo(player, color)// Changes user's team according to color choosen
  282. writeMessage(player, message)// Writes the message on player's chat
  283. changeTeamInfo(player, teamName)// Changes user's team back to original
  284. }
  285. }
  286. }
  287. }
  288.  
  289.  
  290. public changeTeamInfo(player, team[])
  291. {
  292. message_begin(MSG_ONE, teamInfo, _, player)// Tells to to modify teamInfo(Which is responsable for which time player is)
  293. write_byte(player)// Write byte needed
  294. write_string(team)// Changes player's team
  295. message_end()// Also Needed
  296. }
  297.  
  298.  
  299. public writeMessage(player, message[])
  300. {
  301. message_begin(MSG_ONE, sayText, {0, 0, 0}, player)// Tells to modify sayText(Which is responsable for writing colored messages)
  302. write_byte(player)// Write byte needed
  303. write_string(message)// Effectively write the message, finally, afterall
  304. message_end()// Needed as always
  305. }
  306.  
  307. /*----------------------------------------------------------------------------------------------------------------
  308. -CHECAR O LEVEL OU ADD++
  309. ----------------------------------------------------------------------------------------------------------------*/
  310. public check_level(id, sound)
  311. {
  312. if(!is_user_connected(id)) return PLUGIN_HANDLED;
  313.  
  314. new nome[32]; get_user_name(id, nome, 31)
  315.  
  316. if(level[id] < maxlevels)
  317. {
  318. while(xp[id] >= xp_num[level[id]])
  319. {
  320. level[id]++
  321.  
  322. if(sound)
  323. {
  324. if(level[id] == maxlevels)
  325. {
  326. ColorChat(id, NORMAL, "!g[%s] !yVoce atingiu o level maximo. Level maximo: !t%s!y.", xPrefix, level[id])
  327. ColorChat(0, NORMAL, "!g%s !yatingiu o level maximo. Level maximo: !t%s!y.", nome, level[id])
  328.  
  329. client_cmd(0, "spk ambience/wolfhowl02.wav")
  330.  
  331. return PLUGIN_HANDLED
  332. }
  333.  
  334. set_ranks(id)
  335. }
  336. }
  337. }
  338.  
  339. // Prevençoes de bugs... (Voltar ao maximo)
  340. if(level[id] == maxlevels && xp[id] > xp_num[level[id]-1])
  341. {
  342. xp[id] = xp_num[level[id]-1]
  343. salvar_dados(id)
  344. }
  345.  
  346. if(level[id] >= maxlevels)
  347. {
  348. level[id] = maxlevels
  349. xp[id] = xp_num[level[id]-1]
  350. salvar_dados(id)
  351. }
  352.  
  353. return PLUGIN_HANDLED
  354. }
  355.  
  356. /*----------------------------------------------------------------------------------------------------------------
  357. -SETAR A POSICAO DO RANK
  358. ----------------------------------------------------------------------------------------------------------------*/
  359. public set_ranks(id)
  360. {
  361. if(level[id] <= 2) rank[id] = RANKS_RECRUTA
  362. if(level[id] >= 2) rank[id] = RANKS_SOLDADO
  363. if(level[id] >= 5) rank[id] = RANKS_SOLDADO_RASO
  364. if(level[id] >= 8) rank[id] = RANKS_ESPECIALISTA
  365. if(level[id] >= 11) rank[id] = RANKS_ESPECIALISTA_TECNICO
  366. if(level[id] >= 14) rank[id] = RANKS_PATRULEIRO
  367. if(level[id] >= 17) rank[id] = RANKS_CABO
  368. if(level[id] >= 20) rank[id] = RANKS_LIDER_DE_TIRO
  369. if(level[id] >= 23) rank[id] = RANKS_SARGENTO
  370. if(level[id] >= 26) rank[id] = RANKS_SARGENTO_DE_APOIO
  371. if(level[id] >= 29) rank[id] = RANKS_SARGENTO_MESTRE
  372. if(level[id] >= 32) rank[id] = RANKS_SARGENTO_MAIOR
  373. if(level[id] >= 33) rank[id] = RANKS_INTENDENTE
  374. if(level[id] >= 36) rank[id] = RANKS_ASPIRANTE
  375. if(level[id] >= 43) rank[id] = RANKS_GUERREIRO
  376. }
  377.  
  378. /*----------------------------------------------------------------------------------------------------------------
  379. -SALVAR LEVEL,XP E RANK
  380. ----------------------------------------------------------------------------------------------------------------*/
  381. public salvar_dados(id)
  382. {
  383. if(!is_user_connected(id)) return PLUGIN_HANDLED;
  384.  
  385. new auth[40], data[50]
  386.  
  387. switch(get_pcvar_num(cvars[1]))
  388. {
  389. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  390. case 2: get_user_name(id, auth, charsmax(auth))
  391. case 3: get_user_authid(id, auth, charsmax(auth))
  392. }
  393.  
  394. formatex(data, charsmax(data), "%d %d", level[id], xp[id])
  395.  
  396. fvault_pset_data(db_save, auth, data)
  397.  
  398. return PLUGIN_HANDLED;
  399. }
  400.  
  401. /*----------------------------------------------------------------------------------------------------------------
  402. -CARREGAR DADOS
  403. ----------------------------------------------------------------------------------------------------------------*/
  404. public client_putinserver(id)
  405. {
  406. new auth[40], data[50], x1[10], x2[10]
  407.  
  408. switch(get_pcvar_num(cvars[1]))
  409. {
  410. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  411. case 2: get_user_name(id, auth, charsmax(auth))
  412. case 3: get_user_authid(id, auth, charsmax(auth))
  413. }
  414.  
  415. fvault_get_data(db_save, auth, data, charsmax(data))
  416. parse(data, x1, charsmax(x1), x2, charsmax(x2))
  417.  
  418. level[id] = str_to_num(x1)
  419. xp[id] = str_to_num(x2)
  420.  
  421. set_task(2.0, "set_ranks", id)
  422. check_level(id, 0)
  423.  
  424. set_task(1.1, "hud_status", id, _, _, "b")
  425. }
  426.  
  427. /*----------------------------------------------------------------------------------------------------------------
  428. -MOSTRAR XP AO MIRAR NA PESSOA
  429. ----------------------------------------------------------------------------------------------------------------*/
  430.  
  431. public showStatus(id)
  432. {
  433. if(!is_user_bot(id) && is_user_connected(id))
  434. {
  435. new name[32], pid = read_data(2)
  436.  
  437. get_user_name(pid, name, 31)
  438. new color1 = 0, color2 = 0
  439.  
  440. new xxx = get_user_team(id)
  441. new xxx2 = get_user_team(pid)
  442.  
  443. new team1 = xxx == 1, team2 = xxx2 == 1
  444.  
  445. if (team2 == 1)
  446. color1 = 255
  447. else
  448. color2 = 255
  449.  
  450. if (team1 == team2) // friend
  451. {
  452. set_hudmessage(color1, 50, color2, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
  453. ShowSyncHudMsg(id, g_status_sync, "Nome: %s^nRank: %s^nLevel: %d^nXP: %d/%d", name, ranks_nomes[rank[pid]], level[pid], xp[pid], xp_num[level[pid]])
  454. }
  455. }
  456. }
  457.  
  458. public hideStatus(id)
  459. {
  460. ClearSyncHud(id, g_status_sync)
  461. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement