HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* -----------------------------------------
  2. Credits: Only for Raulitop, for the hook say :3
  3.  
  4. Version With Saved NFVAULT
  5. ------------------------------- */
  6.  
  7. #include <amxmisc>
  8. #include <fakemeta>
  9. #include <nfvault>
  10.  
  11. new const PLUGIN[] = "Ranges CS:GO"
  12. #define VERSION "1.0"
  13. new const AUTHOR[] = "kikizon"
  14.  
  15. /* =============================================
  16. |= [START MODIFIED SECTION] =|
  17. ==============================================*/
  18. /* ====================================
  19. *[CONST]*
  20. =====================================*/
  21. new const Prefix[] = "!g[Információ]!y" // Prefix a chaten
  22. new const Sonido[] = "hang/up.wav" // Hang amikor rankot lépsz
  23. /* ====================================
  24. *[CONST NAMES OF RANGES]*
  25. =====================================*/
  26. enum _:DATA
  27. {
  28. NAMES[30],
  29. FRAGS
  30. }
  31. new const Ranges[][DATA] = {
  32. { "Unranked", 100 },
  33. { "Silver I", 200 },
  34. { "Silver II", 300 },
  35. { "Silver III", 500 },
  36. { "Silver IV", 700 },
  37. { "Silver Elite", 800 },
  38. { "Silver Elite Master", 900 },
  39. { "Gold NovaI", 1000 },
  40. { "Gold Nova II", 1200 },
  41. { "Gold Nova III", 1300 },
  42. { "Gold Nova Master", 1400 },
  43. { "Master Guardian I",1500 },
  44. { "Master Guardian II", 1700 },
  45. { "Master Guardian Elite", 1800 },
  46. { "Distinguished Master Guardian", 1900 },
  47. { "Legendary Eagle", 2000 },
  48. { "Legendary Eagle Master", 2100 },
  49. { "Supreme Master First Class", 2200 },
  50. { "The Global Elite", 2500 }
  51. }
  52.  
  53. /* =============================================
  54. |= [END MODIFIED SECTION] =|
  55. ==============================================*/
  56. /* ====================================
  57. *[VARIABLES]*
  58. =====================================*/
  59. new g_range[33], g_frags[33]
  60. new SyncHUD, g_maxplayers, g_msgTeamInfo, g_msgSayText, g_playername[33][32];
  61. #define TASK_HUD 2100
  62. #define ID_HUD (taskid - TASK_HUD)
  63. #define XD is_user_connected(id) || !is_user_bot(id) || !is_user_hltv(id)
  64. new VaultRanges[128], szRanges[180], szKey[30]
  65.  
  66. /* ====================================
  67. *[Cvars]*
  68. =====================================*/
  69. new cvar_Hud, cvar_knifex2, cvar_hsx2
  70. /* ====================================
  71. *[INIT]*
  72. =====================================*/
  73. public plugin_init() {
  74. register_plugin(PLUGIN, VERSION, AUTHOR)
  75.  
  76. register_event("DeathMsg", "Event_DeathMsg", "a")
  77. register_logevent("logevent_round_end", 2, "1=Round_End")
  78.  
  79. register_clcmd("say", "message_saytext")
  80. register_clcmd("say_team", "message_sayteam")
  81.  
  82.  
  83. /* =============================================
  84. |= [START MODIFIED SECTION] =|
  85. ==============================================*/
  86. cvar_Hud = register_cvar("ranges_hud", "1") // Hud: 1 = BE, 2 = KI
  87. cvar_knifex2 = register_cvar("ranges_knifex2", "1") // 2x Kés frag: 1 = BE, 2 = KI
  88. cvar_hsx2 = register_cvar("ranges_hsx2", "1") // 2x Fejlövés frag: 1 = BE, 2 = KI
  89. /* =============================================
  90. |= [END MODIFIED SECTION] =|
  91. ==============================================*/
  92.  
  93.  
  94. SyncHUD = CreateHudSyncObj()
  95. g_maxplayers = get_maxplayers()
  96. g_msgTeamInfo = get_user_msgid("TeamInfo")
  97. g_msgSayText = get_user_msgid("SayText")
  98.  
  99. nfv_file("Ranges", VaultRanges, charsmax(VaultRanges))
  100. }
  101. /* ====================================
  102. *[PRECACHE]*
  103. =====================================*/
  104. public plugin_precache()
  105. precache_sound(Sonido)
  106. /* ===================================
  107. *[HUD]*
  108. =====================================*/
  109. public HUD(taskid) {
  110. new id = ID_HUD
  111.  
  112. if (!is_user_alive(id)) {
  113. id = pev(id, pev_iuser2)
  114. if (!is_user_alive(id)) return;
  115. }
  116.  
  117. if(id != ID_HUD) {
  118. set_hudmessage(255, 255, 255, 0.60, 0.67, 1, 6.0, 1.0)
  119. ShowSyncHudMsg(ID_HUD, SyncHUD, "Frags: %d || Rank: %s", g_frags[id], Ranges[g_range[id]][NAMES])
  120. } else {
  121. set_hudmessage(0, 255, 0, 0.0, 0.20, 1, 6.0, 1.0)
  122. ShowSyncHudMsg(ID_HUD, SyncHUD, "=======================^nÖlések: %d^nRank: %s^n=======================^nKövetkező: %s^nSzüks. Ölés: %d^n=======================^n%s",
  123. g_frags[id], Ranges[g_range[id]][NAMES], Ranges[g_range[id]+1][NAMES], Ranges[g_range[id]][FRAGS] - g_frags[id])
  124. }
  125.  
  126. }
  127. /* ==================================
  128. [PUTINSERVER]
  129. ===================================*/
  130. public client_putinserver(id) {
  131. get_user_name( id, g_playername[ id ], charsmax( g_playername[ ] ) );
  132. g_range[id] = 0
  133. g_frags[id] = 0
  134.  
  135. load(id)
  136.  
  137. if(get_pcvar_num(cvar_Hud))
  138. set_task(1.0, "HUD", id+TASK_HUD, _, _, "b")
  139. }
  140. /* ==================================
  141. [DISCONNECT]
  142. ===================================*/
  143. public client_disconnect(id) {
  144. if(XD) Save(id);
  145.  
  146. remove_task(id+TASK_HUD)
  147. }
  148.  
  149. /* ==================================
  150. [ROUND END]
  151. ===================================*/
  152. public logevent_round_end() {
  153. for(new id = 1; id <= g_maxplayers; id++) {
  154. if(XD)
  155. Save(id);
  156. }
  157. }
  158. /* ==================================
  159. [DEATHMSG]
  160. ===================================*/
  161. public Event_DeathMsg() {
  162. new attacker = read_data(1)
  163. new victim = read_data(2)
  164. new hs = read_data(3)
  165. new weaponid = get_user_weapon(attacker)
  166.  
  167. if(victim == attacker) return;
  168.  
  169. if(is_user_alive(attacker)) {
  170. g_frags[attacker]++
  171.  
  172. if(get_pcvar_num(cvar_knifex2)) {
  173. if(weaponid == CSW_KNIFE)
  174. g_frags[attacker]++
  175. }
  176. if(get_pcvar_num(cvar_hsx2)) {
  177. if(hs) g_frags[attacker]++
  178. }
  179. IncreaseRanges(attacker)
  180. }
  181. }
  182. /* ================================
  183. [UPDATE RANK]
  184. =================================*/
  185. IncreaseRanges(id) {
  186. new Increase = false
  187.  
  188. while(g_frags[id] >= Ranges[g_range[id]][FRAGS]) {
  189. Increase = true
  190. g_range[id]++
  191. }
  192.  
  193. if(Increase) {
  194. chatcolor(id, "%s Gratulálunk új rankba léptél: !g[ %s ]", Prefix, Ranges[g_range[id]][NAMES])
  195. client_cmd(id, "spk %s", Sonido)
  196. Increase = false
  197. }
  198. }
  199. /*=====================================
  200. *[SAY]*
  201. =====================================*/
  202. public message_saytext(id) {
  203. static said[192]
  204. read_args(said, charsmax(said))
  205. remove_quotes(said)
  206.  
  207. if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, ""))
  208. return PLUGIN_HANDLED
  209.  
  210. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  211.  
  212. static color[11], name[32], alive[11]
  213. get_user_team(id,color,charsmax(color))
  214. get_user_name(id,name,charsmax(name))
  215.  
  216. if (is_user_alive (id)) {
  217. alive = ""
  218. } else {
  219. alive = "[Dead]"
  220. }
  221.  
  222. if (is_user_admin(id)) {
  223. if (get_user_flags(id) & ADMIN_KICK)
  224. format(said, charsmax(said), "^x01%s^x04%s ^x03%s ^x04: %s", alive, Ranges[g_range[id]][NAMES], name, said)
  225. } else {
  226. format(said, charsmax(said), "^x01%s^04%s ^x03%s ^x01: %s", alive, Ranges[g_range[id]][NAMES], name, said)
  227. }
  228.  
  229. static i, team[11]
  230. for (i = 1; i <= g_maxplayers; i++) {
  231. if (!is_user_connected(i)) continue
  232. get_user_name(id,name,charsmax(name))
  233.  
  234. if (is_user_admin(i) || is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) {
  235. get_user_team(i, team, charsmax(team))
  236. changeTeamInfo(i, color)
  237. writeMessage(i, said)
  238. changeTeamInfo(i, team)
  239. }
  240. }
  241. return PLUGIN_HANDLED_MAIN;
  242. }
  243.  
  244. public message_sayteam(id)
  245. {
  246. static said[192]
  247. read_args(said, charsmax(said))
  248. remove_quotes(said)
  249.  
  250. if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, ""))
  251. return PLUGIN_HANDLED
  252.  
  253. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  254.  
  255. static playerTeam, playerTeamName[19]
  256. playerTeam = get_user_team(id)
  257.  
  258. switch (playerTeam) {
  259. case 1: copy (playerTeamName, 6, "TE")
  260. case 2: copy (playerTeamName, 8, "CT")
  261. default: copy (playerTeamName, 11, "SPEC")
  262. }
  263.  
  264. static color[11], name[32], alive[11]
  265. get_user_team(id,color,charsmax(color))
  266. get_user_name(id,name,charsmax(name))
  267.  
  268. if (is_user_alive (id)) {
  269. alive = ""
  270. } else {
  271. alive = "[Dead]"
  272. }
  273.  
  274. if (is_user_admin(id)) {
  275. if (get_user_flags(id) & ADMIN_RCON)
  276. format(said, charsmax(said), "^x01%s [ %s ] ^x04%s ^x03%s ^x04: %s", alive, playerTeam, Ranges[g_range[id]], name, said)
  277. } else {
  278. format(said, charsmax(said), "^x01%s [ %s ] ^04%s ^x03%s ^x01: %s", alive, playerTeam, Ranges[g_range[id]],name, said)
  279. }
  280.  
  281. static i, team[11]
  282. for (i = 1; i <= g_maxplayers; i++) {
  283. if (!is_user_connected(i)) continue;
  284. get_user_name(id,name,charsmax(name))
  285.  
  286. if (get_user_team(i) == playerTeam || is_user_admin(i)) {
  287. if (is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) {
  288. get_user_team(i, team, charsmax(team))
  289. changeTeamInfo(i, color)
  290. writeMessage(i, said)
  291. changeTeamInfo(i, team)
  292. }
  293. }
  294. }
  295. return PLUGIN_HANDLED_MAIN;
  296. }
  297. public changeTeamInfo(player, team[]) {
  298. message_begin(MSG_ONE, g_msgTeamInfo, _, player)
  299. write_byte(player)
  300. write_string(team)
  301. message_end()
  302. }
  303.  
  304.  
  305.  
  306.  
  307. public writeMessage(player, message[]) {
  308. message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  309. write_byte(player)
  310. write_string(message)
  311. message_end()
  312. }
  313. /* ===================================
  314. *[SAVE]*
  315. =====================================*/
  316. Save(id) {
  317. formatex(szKey, charsmax(szKey), "data_ranges")
  318. formatex(szRanges, charsmax(szRanges), "%d %d", g_frags[id], g_range[id])
  319.  
  320. nfv_set_data(VaultRanges, szKey, g_playername[id], szRanges)
  321. }
  322.  
  323. load(id) {
  324. new g_load_c1[25], g_load_c2[25]
  325. formatex(szKey, charsmax(szKey), "data_ranges")
  326.  
  327. if(!nfv_get_data(VaultRanges, szKey, g_playername[id], szRanges, sizeof(szRanges) - 1)) return;
  328.  
  329. parse(szRanges, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2))
  330.  
  331. g_frags[id] = str_to_num(g_load_c1)
  332. g_range[id] = str_to_num(g_load_c2)
  333. }
  334. /* ===================================
  335. *[STOCKS]*
  336. =====================================*/
  337. // stock of chatcolor
  338. stock chatcolor(id, const input[], any:...) {
  339. new count = 1, players[32];
  340. static msg[191];
  341. vformat(msg, 190, input, 3);
  342.  
  343. replace_all(msg, 190, "!g", "^4"); // Green
  344. replace_all(msg, 190, "!y", "^1"); // Default
  345. replace_all(msg, 190, "!t", "^3"); // Color of team
  346.  
  347. if (id) players[0] = id; else get_players(players, count, "ch"); {
  348. for (new i = 0; i < count; i++) {
  349. if (is_user_connected(players[i])) {
  350. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  351. write_byte(players[i]);
  352. write_string(msg);
  353. message_end();
  354. }
  355. }
  356. }
  357. }
  358. // Stock to Know If the message is valid
  359. stock ValidMessage(text[], maxcount) {
  360. static len, i, count
  361. len = strlen(text)
  362. count = 0
  363.  
  364. if (!len)
  365. return false;
  366.  
  367. for (i = 0; i < len; i++) {
  368. if (text[i] != ' ') {
  369. count++
  370. if (count >= maxcount)
  371. return true;
  372. }
  373. }
  374. return false;
  375. }
  376. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  377. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3082\\ f0\\ fs16 \n\\ par }
  378. */
  379.