Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.79 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <nvault>
  4. #include <fun>
  5. #include <fakemeta_util>
  6. #include <hamsandwich>
  7. #include <dhudmessage>
  8. #include <zombieplague>
  9.  
  10. #define PLUGIN "[ZP] Level System 3.2c"
  11. #define VERSION "3.2c"
  12. #define AUTHOR "Re.Act!ve"
  13. #define ACCES ADMIN_CVAR
  14. #pragma tabsize 0
  15. new SayText
  16. new bool:g_FreezeTime;
  17. new g_level[32], g_level_data, g_frags_level, g_ScreenFade
  18. new g_level_max, g_give_ammo, g_give_ammopacks, g_level_num, g_level_info, g_player_name, g_levels[32], g_h_damage
  19. new g_h_health, g_h_speed, g_z_damage, h_health[32], h_speed[32], h_damage[32], z_damage[32], level_exp[32]
  20. new g_level_exp[32], g_exp_data, g_Players, nameid[32]
  21. new bool:g_bonus[32], g_trime[33]
  22. new sound_level_up[] = { "misc/zp_level_up.wav"}
  23. new sound_health[] = { "items/medshot4.wav" }
  24. // Zombie Classes MUST be registered on plugin_precache
  25.  
  26. public plugin_precache()
  27. {
  28. precache_sound( sound_level_up )
  29. precache_sound( sound_health )
  30. }
  31.  
  32. public plugin_init()
  33. {
  34. g_frags_level = register_cvar("zp_level_frags", "40")
  35. g_level_max = register_cvar("zp_level_max", "50")
  36. g_give_ammo = register_cvar("zp_level_give_ammo", "1")
  37. g_give_ammopacks = register_cvar("zp_level_ammo", "50")
  38.  
  39. g_h_damage = register_cvar("zp_level_h_damage", "1")
  40. g_h_health = register_cvar("zp_level_h_health", "5")
  41. g_h_speed = register_cvar("zp_level_h_speed", "1.0")
  42. g_z_damage = register_cvar("zp_level_z_damage", "2")
  43.  
  44. g_level_info = register_cvar("zp_level_info", "1")
  45. g_player_name = register_cvar("zp_player_name", "1")
  46. g_level_num = register_cvar("zp_level_number", "100")
  47.  
  48. g_level_data = nvault_open("Leveling_Save")
  49. g_exp_data = nvault_open("Exp_Save")
  50. register_clcmd("say","say_info");
  51. register_clcmd("say_team","say_info");
  52. register_clcmd("zp_levelexp","expa_give", ADMIN_CVAR, "use to give Exp")
  53. register_clcmd("zp_level_is","level_give", ADMIN_CVAR, "use to give Level")
  54. SayText = get_user_msgid("SayText")
  55. g_Players = get_maxplayers();
  56. register_event("HLTV", "Round_Start", "a", "1=0", "2=0")
  57. register_event("DeathMsg", "Frags_Manager", "a", "1>0")
  58. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  59. register_event("StatusValue","show_status","be","1=2","2!0")
  60. register_event("StatusValue","hide_status","be","1=1","2=0")
  61. g_ScreenFade = get_user_msgid( "ScreenFade" )
  62. RegisterHam(Ham_Item_PreFrame, "player", "fw_Player_ResetMaxSpeed", 1);
  63. register_logevent("logevent_round_start", 2, "1=Round_Start");
  64. register_plugin(PLUGIN, VERSION, AUTHOR)
  65. }
  66.  
  67. public plugin_natives()
  68. {
  69. register_native("zp_set_user_exp", "native_set_level", 1);
  70. register_native("zp_get_user_exp", "native_get_level", 1);
  71. }
  72.  
  73. public native_set_level(index, level)
  74. {
  75. g_level[index] = level;
  76. }
  77.  
  78. public native_get_level(index, level)
  79. {
  80. return g_level[index];
  81. }
  82.  
  83. public native_set_exp(index, exp)
  84. {
  85. g_level_exp[index] = exp;
  86. }
  87.  
  88. public native_get_exp(index)
  89. {
  90. return g_level_exp[index];
  91. }
  92.  
  93. public Round_Start()
  94. {
  95. for(new id=1;id<=g_Players;id++)
  96. set_task(3.0, "Level", id)
  97. }
  98.  
  99. public fw_Player_ResetMaxSpeed(id){
  100. if(is_user_alive(id) && !zp_get_user_zombie(id)){
  101. fw_Player_ResetMaxSpeedVip(id);
  102. }
  103. }
  104. public logevent_round_start(){
  105. g_FreezeTime=false;
  106. }
  107. public event_new_round(){
  108. g_FreezeTime=true;
  109. }
  110. public fw_Player_ResetMaxSpeedVip(id){
  111. if(!g_FreezeTime){
  112. set_user_maxspeed(id,get_user_maxspeed(id) + h_speed[id]);
  113. }
  114. }
  115.  
  116. public Level(id)
  117. {
  118. if( !zp_get_user_zombie(id) && is_user_alive(id) )
  119. {
  120. g_trime[id] = false;
  121. new n = 1;
  122. while( n < g_level[id] )
  123. {
  124. h_health[id] = n * get_pcvar_num(g_h_health);
  125. h_damage[id] = n * get_pcvar_num(g_h_damage);
  126. z_damage[id] = n * get_pcvar_num(g_z_damage);
  127. h_speed[id] = n * get_pcvar_num(g_h_speed);
  128. n = n + 1
  129. }
  130. new Float:speed[32];
  131. speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
  132. fm_set_user_health( id, get_user_health(id) + h_health[id] )
  133. set_pev(id, pev_maxspeed, speed[id] )
  134. //set_user_maxspeed(id, speed[id])
  135. emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  136. }
  137. }
  138.  
  139. public expa_give(id, level, cid)
  140. {
  141. if (!cmd_access(id, level, cid, 2))
  142. {
  143. console_print(id, "Nie mozesz uzyc tej komendy")
  144. return PLUGIN_HANDLED
  145. }
  146. new target[32]
  147. new count[32]
  148.  
  149. read_argv(1,target,31)
  150. read_argv(2,count,31)
  151. new target_id, name[32], nameid[32]
  152. target_id = find_player("bl", target)
  153. get_user_name(target_id, name, sizeof name - 1)
  154. get_user_name(id, nameid, sizeof nameid - 1)
  155. if(!target_id)
  156. {
  157. console_print(id, "Nie ma takiego gracza")
  158. return PLUGIN_HANDLED
  159. }
  160. if(read_argc() != 3)
  161. return PLUGIN_HANDLED
  162.  
  163. if(str_to_num(count) < (g_level_exp[target_id] - level_exp[target_id]) )
  164. {
  165. if(str_to_num(count) == 0)
  166. console_print(id, "Exp Player %s in %i / %i", name, level_exp[target_id], g_level_exp[target_id])
  167. else
  168. {
  169. console_print(id, "Gracz %s otrzymal exp za %i exp, Jego maksymalny exp %i", name, str_to_num(count), g_level_exp[target_id])
  170. level_exp[target_id] = level_exp[target_id] + str_to_num(count);
  171. }
  172.  
  173. }
  174. else
  175. {
  176. console_print(id, "Minimalny exp dla gracza %i", g_level_exp[target_id])
  177. }
  178. return PLUGIN_HANDLED
  179. }
  180.  
  181. public level_give(id, level, cid)
  182. {
  183. if (!cmd_access(id, level, cid, 2))
  184. {
  185. console_print(id, "Nie mozesz uzyc tej komendy")
  186. return PLUGIN_HANDLED
  187. }
  188. new target[32]
  189. new count[32]
  190.  
  191. read_argv(1,target,31)
  192. read_argv(2,count,31)
  193. new target_id, name[32], level_id
  194. level_id = str_to_num(count);
  195. target_id = find_player("bl", target)
  196. get_user_name(target_id, name, sizeof name - 1)
  197. if(!target_id)
  198. {
  199. console_print(id, "Nie ma takiego gracza")
  200. return PLUGIN_HANDLED
  201. }
  202. if(read_argc() != 3)
  203. return PLUGIN_HANDLED
  204.  
  205. if( ((g_level[target_id] + level_id) <=get_pcvar_num(g_level_max)) && (level_id != 0) && ((g_level[target_id] + level_id) > 0 ) )
  206. {
  207. if(level_id > 0)
  208. {
  209. g_level[target_id] = g_level[target_id] + level_id;
  210. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id)
  211. write_short(1<<12) // duration
  212. write_short(1) // hold time
  213. write_short(0x0000) // fade type
  214. write_byte(1) // red
  215. write_byte(200) // green
  216. write_byte(0) // blue
  217. write_byte(205) // alpha
  218. message_end()
  219. emit_sound(target_id, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  220. }
  221. else
  222. {
  223. g_level[target_id] = g_level[target_id] + level_id;
  224. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id)
  225. write_short(1<<12) // duration
  226. write_short(1) // hold time
  227. write_short(0x0000) // fade type
  228. write_byte(200) // red
  229. write_byte(40) // green
  230. write_byte(0) // blue
  231. write_byte(205) // alpha
  232. message_end()
  233. }
  234. console_print(id, "Gracz %s otrzymal %i level", name, level_id)
  235. }
  236. else
  237. console_print(id, "Operation Invalid")
  238. return PLUGIN_HANDLED
  239. }
  240.  
  241. public client_putinserver(id)
  242. {
  243. Level_Load(id)
  244. new name[32]
  245. g_trime[id] = false;
  246. g_bonus[id] = true;
  247. nameid[id] = get_user_name(id, name, sizeof name - 1)
  248. if( !zp_get_user_zombie(id) && is_user_alive(id))
  249. {
  250. g_trime[id] = false;
  251. new n = 1;
  252. while( n != g_level[id] )
  253. {
  254. h_health[id] = n * get_pcvar_num(g_h_health);
  255. h_damage[id] = n * get_pcvar_num(g_h_damage);
  256. z_damage[id] = n * get_pcvar_num(g_z_damage);
  257. h_speed[id] = n * get_pcvar_num(g_h_speed);
  258. n = n + 1;
  259. }
  260. new Float:speed[32];
  261. speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
  262. fm_set_user_health( id, get_user_health(id) + h_health[id] )
  263. set_pev(id, pev_maxspeed, speed[id] )
  264. //set_user_maxspeed(id, speed[id])
  265. emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  266. }
  267.  
  268. if( g_level[id] == 0) g_level[id] = 1;
  269. if( level_exp[id] == g_level[id] ) level_exp[id] = 0;
  270. if(g_level[id] < get_pcvar_num(g_level_num))
  271. g_levels[id] = get_pcvar_num(g_level_num);
  272. else
  273. {
  274. if(g_level[id] != g_levels[id])
  275. {
  276. new x = 1;
  277. while( g_level[id] > ( x * get_pcvar_num(g_level_num)) )
  278. {
  279. x = x + 1;
  280. g_levels[id] = x * get_pcvar_num(g_level_num);
  281. }
  282. }
  283. }
  284. new y = 1;
  285. while( g_level[id] != y )
  286. {
  287. y = y + 1;
  288. g_level_exp[id] = y * get_pcvar_num(g_frags_level);
  289. }
  290. }
  291.  
  292. public client_disconnect(id)
  293. {
  294. new name[32], player_nick[32]
  295. player_nick[id] = get_user_name(id, name, sizeof name - 1)
  296. if(player_nick[id] == nameid[id])
  297. Level_Save(id)
  298.  
  299. g_trime[id] = false;
  300. }
  301.  
  302. public hide_status(id)
  303. {
  304. set_hudmessage(0,0,0,0.0,0.0,0, 0.0, 0.01, 0.0, 0.0, 4)
  305. show_hudmessage(id,"")
  306. }
  307.  
  308. public show_status(id)
  309. {
  310. new name[32],pid = read_data(2)
  311. get_user_name(pid,name,31)
  312. if (!zp_get_user_zombie(pid) && !zp_get_user_zombie(id) && (get_pcvar_num(g_player_name) == 1) )
  313. {
  314. set_hudmessage(0,0,255,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4)
  315. show_hudmessage(id,"[%s] ^nLevel: %i^n Zycie: %d | Armor: %d | Ammo Packi: %d", name, g_level[pid], get_user_health(pid), get_user_armor(pid), zp_get_user_ammo_packs(pid))
  316. }
  317. if(zp_get_user_zombie(id) && zp_get_user_zombie(pid) && (get_pcvar_num(g_player_name) == 1) )
  318. {
  319. set_hudmessage(255,0,0,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4)
  320. show_hudmessage(id,"[%s] ^nLevel: %i^n Zycie: %d | Ammo Packi: %d", name, g_level[pid], get_user_health(pid), zp_get_user_ammo_packs(pid))
  321. }
  322. }
  323.  
  324. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
  325. {
  326. if (!(1 <= attacker <= 18)) return;
  327.  
  328. if ( !zp_get_user_zombie(attacker) && is_user_alive(attacker) )
  329. SetHamParamFloat(4, damage + h_damage[attacker])
  330. else
  331. {
  332. if ( zp_get_user_zombie(attacker) && is_user_alive(attacker) && !zp_get_user_nemesis(attacker))
  333. SetHamParamFloat(4, damage + z_damage[attacker]);
  334. }
  335. }
  336.  
  337. public say_info(id)
  338. {
  339. new text[70], arg1[32], target[32], count[32]
  340. read_args(text, sizeof(text)-1);
  341. remove_quotes(text);
  342. arg1[0] = '^0';
  343. target[0] = '^0';
  344. count[0] = '^0';
  345. parse(text, arg1, sizeof(arg1)-1, target, sizeof(target)-1, count, sizeof(count)-1);
  346. if ( equali(arg1, "info", 4) )
  347. {
  348. info_player(id, target);
  349. }
  350. if ( equali(arg1, "level", 7) && (get_pcvar_num(g_level_info) == 1))
  351. {
  352. expa_player(id);
  353. }
  354. return PLUGIN_CONTINUE;
  355. }
  356.  
  357. public zp_extra_item_selected(id, itemid)
  358. {
  359. Level_Save(id)
  360. }
  361.  
  362. public zp_user_infected_pre(id, infector)
  363. {
  364. if( is_user_alive(infector) && (level_exp[infector] < (g_level_exp[infector] - 1)) && zp_get_user_zombie(infector))
  365. {
  366. level_exp[infector] = level_exp[infector] + 1;
  367. Level_Save(infector);
  368. }
  369. }
  370.  
  371. public info_player(id, target[])
  372. {
  373. new target_2;
  374. target_2 = find_player("bl", target)
  375. static name[32], nameid[32];
  376. get_user_name(target_2, name, sizeof name - 1)
  377. get_user_name(id, nameid, sizeof nameid - 1)
  378. if(!target_2)
  379. {
  380. ChatColor(id, "!g[ZP]!y Taki nick nie zostal znaleziony na serwerze lub nie istnieje")
  381. return PLUGIN_HANDLED
  382. }
  383.  
  384. if(zp_get_user_zombie(id))
  385. {
  386. if(id != target_2)
  387. {
  388. ChatColor(id, "!g[ZP]!y Statystyki Gracza !g%s !y| Level : !g%i !y, !yExp : !g%i !y| Posiada aktualnie : !g%i !yAmmo Packow", name, g_level[target_2], level_exp[target_2], zp_get_user_ammo_packs(target_2) )
  389. ChatColor(target_2, "!g[ZP]!y Gracz %s sprawdzil twoje statystyki", nameid)
  390. }
  391. else
  392. {
  393. ChatColor(id, "!g[ZP]!y Wiecej obrazen z lapy !tzombie!y : !g+%i", z_damage[target_2] )
  394. }
  395. }
  396. else
  397. {
  398. if(id != target_2)
  399. {
  400. ChatColor(id, "!g[ZP]!y Statystyki Gracza !g%s !y| Level : !g%i !y, !yExp : !g%i !y| Posiada aktualnie : !g%i !yAmmo Packow", name, g_level[target_2], level_exp[target_2], zp_get_user_ammo_packs(target_2) )
  401. ChatColor(target_2, "!g[ZP]!y Gracz %s sprawdzil twoje statystyki", nameid)
  402. }
  403. else
  404. {
  405. ChatColor(id, "!g[ZP]!y Wiecej obrazen z !tbroni!y : !g+%i !y, !tszybkosci!y : !g+%i !y, !tHP!y : !g+%i", h_damage[target_2], h_speed[target_2], h_health[target_2] )
  406. }
  407. }
  408. return PLUGIN_HANDLED
  409. }
  410.  
  411. public expa_player(id)
  412. {
  413. ChatColor(id, "!g[ZP]!y Twoj Exp: !g%i !y/ !g%i", level_exp[id], g_level_exp[id])
  414. return PLUGIN_HANDLED
  415. }
  416.  
  417. public level_status(id)
  418. {
  419. if( is_user_alive(id))
  420. {
  421. if( !zp_get_user_zombie(id) )
  422. {
  423. set_hudmessage(250, 180, 10, 0.02, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
  424. show_hudmessage(id,"Level: %i | Exp: %i", g_level[id], level_exp[id])
  425. }
  426. else
  427. {
  428. set_hudmessage(250, 180, 10, 0.02, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
  429. show_hudmessage(id,"Level: %i | Exp: %i", g_level[id], level_exp[id])
  430. }
  431. }
  432. }
  433.  
  434. public Level_Save(id)
  435. {
  436. new key[64], data[256], data_exp[256], key_exp[64]
  437. new name[33];
  438. get_user_name(id,name,32)
  439.  
  440. format(key, 63, "%s-/", name)
  441. format(data, 255, "%i#", g_level[id])
  442.  
  443. format(key_exp, 63, "%s-/", name)
  444. format(data_exp, 255, "%i#", level_exp[id])
  445.  
  446. nvault_set(g_level_data, key, data)
  447. nvault_set(g_exp_data, key_exp, data_exp)
  448. return PLUGIN_CONTINUE;
  449. }
  450.  
  451. public Level_Load(id)
  452. {
  453. new key[64], data[256], data_exp[256], key_exp[64]
  454. new name[33];
  455. get_user_name(id,name,32)
  456.  
  457. format(key, 63, "%s-/", name)
  458. format(data, 255, "%i#", g_level[id])
  459.  
  460. format(key_exp, 63, "%s-/", name)
  461. format(data_exp, 255, "%i#", level_exp[id])
  462.  
  463. nvault_get(g_level_data, key, data, 255)
  464. nvault_get(g_exp_data, key_exp, data_exp, 255)
  465. replace_all(data, 255, "#", " ")
  466. replace_all(data_exp, 255, "#", " ")
  467.  
  468. new givelevel[32], give_exp[32]
  469. parse(data, givelevel, 31)
  470. parse(data_exp, give_exp, 31)
  471. g_level[id] = str_to_num(givelevel)
  472. level_exp[id] = str_to_num(give_exp)
  473.  
  474. set_task(1.0, "level_status", id, _, _, "b")
  475. return PLUGIN_CONTINUE;
  476. }
  477.  
  478. public Frags_Manager()
  479. {
  480. new aname[32], attacker; attacker = read_data(1)
  481. new y; y = 1;
  482. get_user_name(attacker, aname, sizeof aname - 1)
  483. if( ( level_exp[attacker] >= (g_level_exp[attacker] - 1) ) && (g_level[attacker] <= get_pcvar_num(g_level_max)) && is_user_alive(attacker) )
  484. {
  485. g_bonus[attacker] = true;
  486. g_level[attacker] = g_level[attacker] + 1;
  487. level_exp[attacker] = 0;
  488. while( g_level[attacker] != y )
  489. {
  490. y = y + 1;
  491. g_level_exp[attacker] = y * get_pcvar_num(g_frags_level);
  492. }
  493. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, attacker)
  494. write_short(1<<12) // duration
  495. write_short(1) // hold time
  496. write_short(0x0000) // fade type
  497. write_byte(1) // red
  498. write_byte(200) // green
  499. write_byte(0) // blue
  500. write_byte(205) // alpha
  501. message_end()
  502. emit_sound(attacker, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  503. set_dhudmessage(0, 200, 0, -1.0, 0.12, 0, 0.0, 3.0, 2.0, 1.0)
  504. show_dhudmessage(0, "%s awansowal na %i level", aname, g_level[attacker])
  505. if(get_pcvar_num(g_give_ammo) == 1)
  506. {
  507. ChatColor(attacker, "!g[ZP]!y Zdobyles bonus w postaci !g%i !yAmmo Packow za nowy level", get_pcvar_num(g_give_ammopacks) )
  508. zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(g_give_ammopacks) )
  509. }
  510. Level_Save(attacker);
  511. }
  512. else
  513. {
  514.  
  515. if(g_level[attacker] == get_pcvar_num(g_level_max))
  516. ChatColor(attacker, "!g[ZP]!y Osiagneles maksymalny level:!g%i !yGratulujemy !", g_level[attacker] )
  517. level_exp[attacker] = level_exp[attacker] + 1;
  518. Level_Save(attacker);
  519. }
  520. }
  521.  
  522. public zp_round_ended(winteam)
  523. {
  524.  
  525. for(new id=1;id<=g_Players;id++)
  526. g_trime[id] = true;
  527. }
  528.  
  529. stock ChatColor(const id, const input[], any:...)
  530. {
  531. new count = 1, players[32]
  532. static msg[191]
  533. vformat(msg, 190, input, 3)
  534.  
  535. replace_all(msg, 190, "!g", "^4") // Green Color
  536. replace_all(msg, 190, "!y", "^1") // Default Color
  537. replace_all(msg, 190, "!t", "^3") // Team Color
  538. replace_all(msg, 190, "!t2", "^0") // Team2 Color
  539.  
  540. if (id) players[0] = id; else get_players(players, count, "ch")
  541. {
  542. for (new i = 0; i < count; i++)
  543. {
  544. if (is_user_connected(players[i]))
  545. {
  546. message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i])
  547. write_byte(players[i]);
  548. write_string(msg);
  549. message_end();
  550. }
  551. }
  552. }
  553. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement