Advertisement
Guest User

Untitled

a guest
Nov 12th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.97 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fvault>
  3. #include <cstrike>
  4. #include <wm_play>
  5.  
  6. #define maxranks 15
  7. #define maxlevels 50
  8.  
  9. #define xPrefix "XP System"
  10.  
  11. #define RANKS_Newborn 0
  12. #define RANKS_Killer 1
  13. #define RANKS_Assassin 2
  14. #define RANKS_Creed 3
  15. #define RANKS_Devil 4
  16. #define RANKS_Respected 5
  17. #define RANKS_Legendary 6
  18. #define RANKS_Monster 7
  19. #define RANKS_Specialist 8
  20. #define RANKS_Rampage 9
  21. #define RANKS_Invader 10
  22. #define RANKS_Elite_Master 11
  23. #define RANKS_Dominator 12
  24. #define RANKS_Lucky_13 13
  25. #define RANKS_Big_BoSS 14
  26.  
  27. new const VERSION[] = "1.1"
  28.  
  29. new SzMaxPlayers, SzSayText;
  30. new playerPrefix,rankLevelBonus,rankSaveType;
  31.  
  32. new const db_save[] = "cs_rank_system"
  33.  
  34. new level[33], xp[33], rank[33], g_status_sync
  35.  
  36. new SzGTeam[3][] = {
  37. "Spectator",
  38. "Terrorist",
  39. "Counter-Terrorist"
  40. }
  41.  
  42. new const xp_num[maxlevels+1] =
  43. {
  44. 15, 70, 150, 250, 350, 450, 550, 650, 750, 850, 950, 1050, 1150, 1250, 1350, 1450, 1550, 1650,
  45. 1750, 1850, 1950, 2050, 2150, 2250, 2350, 2450, 2550,2650, 2750, 2850, 2950, 3050, 3150, 3250, 3350, 3450, 3550, 3650,
  46. 3750, 3850, 3950, 4050, 4150, 4250, 4350, 4450, 4550, 4650, 4750, 5000
  47. }
  48.  
  49. new const ranks_names[maxranks][]=
  50. {
  51. "Newborn",
  52. "Killer",
  53. "Assassin",
  54. "Creed",
  55. "Devil",
  56. "Respected",
  57. "Legendary",
  58. "Monster",
  59. "Specialist",
  60. "Rampage",
  61. "Invader",
  62. "Elite Master",
  63. "Dominator",
  64. "Lucky 13",
  65. "Big BoSS"
  66. }
  67.  
  68. public plugin_init()
  69. {
  70. register_plugin("XP + LEVEL + RANK SYSTEM", VERSION, AUTHOR)
  71.  
  72. // system of xp+lvl+rank
  73. playerPrefix = register_cvar("Player Prefix", "1") //1-Prefix by RANK, 2-Prefix by LEVEL
  74. rankLevelBonus = register_cvar("Level Up Bonus", "10000") // Amount of money when passing level.
  75. rankSaveType = register_cvar("XP Save Type", "2") // 1 - IP || 2 - Nick || 3 - SteamID
  76.  
  77. register_cvar("XPLvlRankSystem", VERSION, FCVAR_SERVER | FCVAR_SPONLY ) //Search for variable on Gametracker.com
  78.  
  79. register_event("StatusValue", "showStatus", "be", "1=2", "2!0")
  80. register_event("StatusValue", "hideStatus", "be", "1=1", "2=0")
  81.  
  82. register_clcmd("say", "hook_say");
  83. register_clcmd("say_team", "hook_say_team");
  84.  
  85. register_dictionary("cs_rank_system.txt");
  86.  
  87. SzSayText = get_user_msgid ("SayText");
  88. SzMaxPlayers = get_maxplayers();
  89.  
  90. register_message(SzSayText, "MsgDuplicate");
  91.  
  92. g_status_sync = CreateHudSyncObj()
  93. }
  94.  
  95. /*----------------------------------------------------------------------------------------------------------------
  96. -HUD OF THE GAME
  97. ----------------------------------------------------------------------------------------------------------------*/
  98. public hud_status(id)
  99. {
  100. if(!is_user_alive(id) || !is_user_connected(id) )
  101. return;
  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_names[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_names[rank[id]], xp[id], xp_num[level[id]])
  112. }
  113. }
  114.  
  115. /*----------------------------------------------------------------------------------------------------------------
  116. -CHAT PREFIX
  117. ----------------------------------------------------------------------------------------------------------------*/
  118. public MsgDuplicate(id){ return PLUGIN_HANDLED; }
  119.  
  120. public hook_say(id)
  121. {
  122. new SzMessages[192], SzName[32];
  123. new SzAlive = is_user_alive(id);
  124.  
  125. read_args(SzMessages, 191);
  126. remove_quotes(SzMessages);
  127. get_user_name(id, SzName, 31);
  128.  
  129. if(!is_valid_msg(SzMessages))
  130. return PLUGIN_CONTINUE;
  131.  
  132. switch(get_pcvar_num(playerPrefix))
  133. {
  134. case 1 :(SzAlive ? format(SzMessages, 191, "^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages));
  135. case 2 :(SzAlive ? format(SzMessages, 191, "^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages));
  136. }
  137.  
  138. for(new i = 1; i <= SzMaxPlayers; i++)
  139. {
  140. if(!is_user_connected(i))
  141. continue;
  142.  
  143. message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
  144. write_byte(id);
  145. write_string(SzMessages);
  146. message_end();
  147. }
  148.  
  149. return PLUGIN_CONTINUE;
  150. }
  151.  
  152. public hook_say_team(id)
  153. {
  154. new SzMessages[192], SzName[32];
  155. new SzAlive = is_user_alive(id);
  156. new SzGetTeam = get_user_team(id);
  157.  
  158. read_args(SzMessages, 191);
  159. remove_quotes(SzMessages);
  160. get_user_name(id, SzName, 31);
  161.  
  162. if(!is_valid_msg(SzMessages))
  163. return PLUGIN_CONTINUE;
  164.  
  165. switch(get_pcvar_num(playerPrefix))
  166. {
  167. case 1 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages));
  168. case 2 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages));
  169. }
  170.  
  171. for(new i = 1; i <= SzMaxPlayers; i++)
  172. {
  173. if(!is_user_connected(i))
  174. continue;
  175.  
  176. if(get_user_team(i) != SzGetTeam)
  177. continue;
  178.  
  179. message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
  180. write_byte(id);
  181. write_string(SzMessages);
  182. message_end();
  183. }
  184.  
  185. return PLUGIN_CONTINUE;
  186. }
  187.  
  188. bool:is_valid_msg(const SzMessages[])
  189. {
  190. if( SzMessages[0] == '@'
  191. || !strlen(SzMessages)){ return false; }
  192. return true;
  193. }
  194.  
  195. /*----------------------------------------------------------------------------------------------------------------
  196. -EVENT TO ADD XP
  197. ----------------------------------------------------------------------------------------------------------------*/
  198.  
  199. public client_death(killer, victim, weapon, hitplace)
  200. {
  201. new victim_name[32]
  202. get_user_name(victim, victim_name, charsmax(victim_name))
  203.  
  204. new killer_team = get_user_team(killer)
  205. new victim_team = get_user_team(victim)
  206.  
  207. //Devil KILL
  208. if((killer != victim) && !(killer_team == victim_team) && !(hitplace == HIT_HEAD) && !(weapon == CSW_HEGRENADE) && !(weapon == CSW_KNIFE))
  209. {
  210. xp[killer]++
  211. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_Devil_KILL", victim_name)
  212. }
  213.  
  214. //HEADSHOT
  215. if(hitplace == HIT_HEAD && !(weapon == CSW_KNIFE) && !(killer_team == victim_team))
  216. {
  217. xp[killer]+=3
  218. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_HEADSHOT_KILL", victim_name)
  219. }
  220.  
  221. //KNIFE KILL
  222. if(weapon == CSW_KNIFE && !(hitplace == HIT_HEAD) && !(killer_team == victim_team))
  223. {
  224. xp[killer]+=5
  225. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_KILL", victim_name)
  226. }
  227.  
  228. //KNIFE + HEADSHOT
  229. if(weapon == CSW_KNIFE && (hitplace == HIT_HEAD) && !(killer_team == victim_team))
  230. {
  231. xp[killer]+=7
  232. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_HEAD_KILL", victim_name)
  233. }
  234.  
  235. //GRENADE KILL
  236. if(weapon == CSW_HEGRENADE && (killer != victim) && !(killer_team == victim_team))
  237. {
  238. xp[killer]+=5
  239. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_GRENADE_KILL", victim_name)
  240. }
  241.  
  242. //SUICIDE
  243. if(killer == victim)
  244. {
  245. xp[killer]-=2
  246. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_SUICIDE")
  247. }
  248.  
  249. //TEAM KILL
  250. if(killer != victim && (killer_team == victim_team))
  251. {
  252. xp[killer]-=10
  253. client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_TEAM_KILL")
  254. }
  255.  
  256. check_level(killer, 1)
  257. save_data(killer)
  258. }
  259.  
  260.  
  261. /*----------------------------------------------------------------------------------------------------------------
  262. -CHECK LEVEL OF ADD ++
  263. ----------------------------------------------------------------------------------------------------------------*/
  264. public check_level(id, sound)
  265. {
  266. if(!is_user_connected(id))
  267. return PLUGIN_HANDLED;
  268.  
  269. new name[32]; get_user_name(id, name, 31)
  270.  
  271. if(level[id] < maxlevels)
  272. {
  273. while(xp[id] >= xp_num[level[id]])
  274. {
  275. level[id]++
  276.  
  277. if(sound)
  278. {
  279. if(level[id] == maxlevels)
  280. {
  281. client_print_color(id, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_MAXLVL_ID", level[id])
  282. client_print_color(0, "!g[%s] %L",xPrefix, LANG_PLAYER, "MSG_MAXLVL_ALL", name, level[id])
  283.  
  284. client_cmd(0, "spk ambience/wolfhowl02.wav")
  285.  
  286. return PLUGIN_HANDLED
  287. }
  288.  
  289. client_print_color(id,"!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ID", get_pcvar_num(rankLevelBonus))
  290. client_print_color(0, "!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ALL", name, get_pcvar_num(rankLevelBonus))
  291. cs_set_user_money(id, cs_get_user_money(id) + get_pcvar_num(rankLevelBonus))
  292.  
  293. client_cmd(0, "spk ambience/lv_fruit1.wav")
  294.  
  295. set_ranks(id)
  296. }
  297. }
  298. }
  299.  
  300. // Bug Preventions... (Back to top)
  301. if(level[id] == maxlevels && xp[id] > xp_num[level[id]-1])
  302. {
  303. xp[id] = xp_num[level[id]-1]
  304. save_data(id)
  305. }
  306.  
  307. if(level[id] >= maxlevels)
  308. {
  309. level[id] = maxlevels
  310. xp[id] = xp_num[level[id]-1]
  311. save_data(id)
  312. }
  313.  
  314. return PLUGIN_HANDLED
  315. }
  316.  
  317. /*----------------------------------------------------------------------------------------------------------------
  318. -SET THE RANK POSITION
  319. ----------------------------------------------------------------------------------------------------------------*/
  320. public set_ranks(id)
  321. {
  322. if(level[id] <= 2) rank[id] = RANKS_Newborn
  323. if(level[id] >= 2) rank[id] = RANKS_Killer
  324. if(level[id] >= 5) rank[id] = RANKS_Assassin
  325. if(level[id] >= 8) rank[id] = RANKS_Creed
  326. if(level[id] >= 11) rank[id] = RANKS_Devil
  327. if(level[id] >= 14) rank[id] = RANKS_Respected
  328. if(level[id] >= 17) rank[id] = RANKS_Legendary
  329. if(level[id] >= 20) rank[id] = RANKS_Monster
  330. if(level[id] >= 23) rank[id] = RANKS_Specialist
  331. if(level[id] >= 26) rank[id] = RANKS_Rampage
  332. if(level[id] >= 29) rank[id] = RANKS_Invader
  333. if(level[id] >= 32) rank[id] = RANKS_Elite_Master
  334. if(level[id] >= 33) rank[id] = RANKS_Dominator
  335. if(level[id] >= 36) rank[id] = RANKS_Lucky_13
  336. if(level[id] >= 43) rank[id] = RANKS_Big_BoSS
  337. }
  338.  
  339. /*----------------------------------------------------------------------------------------------------------------
  340. -SAVE LEVEL, XP AND RANK
  341. ----------------------------------------------------------------------------------------------------------------*/
  342. public save_data(id)
  343. {
  344. if(!is_user_connected(id))
  345. return PLUGIN_HANDLED;
  346.  
  347. new auth[40], data[50]
  348.  
  349. switch(get_pcvar_num(rankSaveType))
  350. {
  351. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  352. case 2: get_user_name(id, auth, charsmax(auth))
  353. case 3: get_user_authid(id, auth, charsmax(auth))
  354. }
  355.  
  356. formatex(data, charsmax(data), "%d %d", level[id], xp[id])
  357.  
  358. fvault_pset_data(db_save, auth, data)
  359.  
  360. return PLUGIN_HANDLED;
  361. }
  362.  
  363. /*----------------------------------------------------------------------------------------------------------------
  364. -LOAD DATA
  365. ----------------------------------------------------------------------------------------------------------------*/
  366.  
  367. public client_authorized(id)
  368. {
  369. new auth[40], data[50], x1[10], x2[10]
  370.  
  371. switch(get_pcvar_num(rankSaveType))
  372. {
  373. case 1: get_user_ip(id, auth, charsmax(auth), 1)
  374. case 2: get_user_name(id, auth, charsmax(auth))
  375. case 3: get_user_authid(id, auth, charsmax(auth))
  376. }
  377.  
  378. fvault_get_data(db_save, auth, data, charsmax(data))
  379. parse(data, x1, charsmax(x1), x2, charsmax(x2))
  380.  
  381. level[id] = str_to_num(x1)
  382. xp[id] = str_to_num(x2)
  383.  
  384. set_task(2.0, "set_ranks", id)
  385. check_level(id, 0)
  386.  
  387. set_task(1.1, "hud_status", id, _, _, "b")
  388. }
  389.  
  390. /*----------------------------------------------------------------------------------------------------------------
  391. -SHOW XP BY LOOKING AT THE PERSON
  392. ----------------------------------------------------------------------------------------------------------------*/
  393.  
  394. public showStatus(id)
  395. {
  396. if(!is_user_bot(id) && is_user_connected(id))
  397. {
  398. new name[32], pid = read_data(2)
  399.  
  400. get_user_name(pid, name, 31)
  401.  
  402. new xxx = get_user_team(id)
  403. new xxx2 = get_user_team(pid)
  404.  
  405. static r, g, b;
  406. r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255);
  407.  
  408. if (xxx == xxx2) // friend
  409. {
  410. set_hudmessage(r, g, b, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
  411. ShowSyncHudMsg(id, g_status_sync, "Name: %s^nRank: %s^nLevel: %d^nXP: %d/%d", name, ranks_names[rank[pid]], level[pid], xp[pid], xp_num[level[pid]])
  412. }
  413. }
  414. }
  415.  
  416. public hideStatus(id)
  417. {
  418. ClearSyncHud(id, g_status_sync)
  419. }
  420.  
  421. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  422. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par }
  423. */
  424. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  425. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang16393\\ f0\\ fs16 \n\\ par }
  426. */
  427.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement