HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*================================================================================
  2.  
  3. -------------------------------------------
  4. -*- [ZP] Server Addon: LevelUp System XP 3.2 || New Version-*-
  5. -------------------------------------------
  6.  
  7. ~~~~~~~~~~~~~~~
  8. - Description -
  9. ~~~~~~~~~~~~~~~
  10. Level System
  11.  
  12. ~~~~~~~~~~~~~~~
  13. - Changelog -
  14. ~~~~~~~~~~~~~~~
  15. v. 1.0 - Plugin Released. Testing...
  16. v. 1.1 - Fixed Save Level.
  17. v. 1.2 - Added New cvars, fixed codes + Added plugin code Player Name
  18. v. 1.3 - Update version: added new cvars + system bonuses
  19. v. 1.4 - New modes for nemesis level & survivor level, added cvars
  20. v. 1.5 - Testing...
  21. v. 1.6 - Added cvars, Plugin Released.
  22. v. 1.7 - Added Multilangual, Update plugin
  23. v. 1.8 - v. 1.9 - Fixed Level Up bugs
  24. v. 2.0 - Added new cvars + XP Level Extended: Real Level System.
  25. v. 2.1 - Fixed bugs.
  26. --
  27. v. 2.8 - It is globally altered on a new kind of the version of this plugin
  28. v. 2.9 - Added New cvars. Ful fixed.
  29. v. 3.0 - XP Mode Updated in EXP to level.
  30. v. 3.1 - Fixed Bug Shutting Down Server.
  31. v. 3.2 - Added Give Level & give exp.
  32. ================================================================================*/
  33.  
  34. #include <amxmodx>
  35. #include <amxmisc>
  36. #include <nvault>
  37. #include <fakemeta_util>
  38. #include <hamsandwich>
  39. #include <zombieplague>
  40.  
  41. #define PLUGIN "[ZP] Server Addon: LevelUp System XP 3.2"
  42. #define VERSION "3.2"
  43. #define AUTHOR "Re.Act!ve"
  44. #define ACCES ADMIN_CVAR
  45. #pragma tabsize 0
  46. new SayText
  47. new g_level[32], g_level_data, g_frags_level, g_ScreenFade, g_level_del[33], g_level_bonus, g_ammo
  48. 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
  49. 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]
  50. new g_level_exp[32], g_exp_data, g_Players, g_hud_color, red, green, blue, nameid[32]
  51. new bool:g_bonus[32], g_trime[32]
  52. new sound_level_up[] = { "misc/zp_level_up.wav"}
  53. new sound_health[] = { "items/medshot4.wav" }
  54. // Zombie Classes MUST be registered on plugin_precache
  55.  
  56. public plugin_precache()
  57. {
  58. precache_sound( sound_level_up )
  59. precache_sound( sound_health )
  60. }
  61.  
  62. public plugin_init()
  63. {
  64. g_frags_level = register_cvar("zp_level_frags", "20") // Сколько добавится экспы для получения след. уровня
  65. g_level_max = register_cvar("zp_level_max", "70") // Максимальный левел
  66. g_give_ammo = register_cvar("zp_level_give_ammo", "1") // Давать аммо паки при каждом полученном левле?
  67. g_give_ammopacks = register_cvar("zp_level_ammo", "10") // Сколько давать аммопаков? (если выше установлено 1)
  68.  
  69. g_h_damage = register_cvar("zp_level_h_damage", "1") // Увеличивать с каждым уровнем урон на Х у людей
  70. g_h_health = register_cvar("zp_level_h_health", "10") // Люди получают за каждый левел дополнительные Х хп
  71. g_h_speed = register_cvar("zp_level_h_speed", "1.0") // На сколько величивать скорость людей с каждым уровнем?
  72. g_z_damage = register_cvar("zp_level_z_damage", "3") // Увеличивать с каждым уровнем урон на Х у зомби
  73.  
  74. g_hud_color = register_cvar("zp_level_hud_type", "1") // 1 - Желтый, 2 - Рандомно каждую секунду 3 - 1 раз рандомно
  75. g_level_info = register_cvar("zp_level_info", "1") // Показывать инфу о игроке, когда вы вводите в чат info <nick>
  76. g_player_name = register_cvar("zp_player_name", "1") // Показывать инфу, при наведении курсором на игрока?
  77. g_level_bonus = register_cvar("zp_level_bonus_on", "0") // Можно ли будет снимать мегабонус? (за получение опр. левла)
  78. g_level_num = register_cvar("zp_level_number", "5") // Каждые Х левлов будет возможность снять мегабонус (если выше 1)
  79. g_ammo = register_cvar("zp_level_bonus", "0") // Сколько аммо паков этот мегабонус?
  80.  
  81. g_level_data = nvault_open("Leveling_Save")
  82. g_exp_data = nvault_open("Exp_Save")
  83. register_clcmd("say","say_info");
  84. register_clcmd("say_team","say_info");
  85. register_clcmd("zp_levelexp","expa_give", ADMIN_CVAR, "use to give Exp")
  86. register_clcmd("zp_level_is","level_give", ADMIN_CVAR, "use to give Level")
  87. SayText = get_user_msgid("SayText")
  88. g_Players = get_maxplayers();
  89. register_event("HLTV", "Round_Start", "a", "1=0", "2=0")
  90. register_event("DeathMsg", "Frags_Manager", "a", "1>0")
  91. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  92. register_dictionary("zp_level_system_xp.txt")
  93. register_event("StatusValue","show_status","be","1=2","2!0")
  94. register_event("StatusValue","hide_status","be","1=1","2=0")
  95. g_ScreenFade = get_user_msgid( "ScreenFade" )
  96. register_plugin(PLUGIN, VERSION, AUTHOR)
  97. }
  98.  
  99. public Round_Start()
  100. {
  101. for(new id=1;id<=g_Players;id++)
  102. set_task(3.0, "Level", id)
  103. }
  104.  
  105. public Level(id)
  106. {
  107. if( !zp_get_user_zombie(id) && is_user_alive(id) )
  108. {
  109. g_trime[id] = false;
  110. new n = 1;
  111. while( n < g_level[id] )
  112. {
  113. h_health[id] = n * get_pcvar_num(g_h_health);
  114. h_speed[id] = n * get_pcvar_num(g_h_speed);
  115. h_damage[id] = n * get_pcvar_num(g_h_damage);
  116. z_damage[id] = n * get_pcvar_num(g_z_damage);
  117. n = n + 1
  118. }
  119. new Float:speed[32];
  120. speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
  121. fm_set_user_health( id, get_user_health(id) + h_health[id] )
  122. set_pev(id, pev_maxspeed, speed[id] )
  123. emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  124. }
  125. }
  126.  
  127. public expa_give(id, level, cid)
  128. {
  129. if (!cmd_access(id, level, cid, 2))
  130. {
  131. console_print(id, "У вас нет доступа к команде")
  132. return PLUGIN_HANDLED
  133. }
  134. new target[32]
  135. new count[32]
  136.  
  137. read_argv(1,target,31)
  138. read_argv(2,count,31)
  139. new target_id, name[32], nameid[32]
  140. target_id = find_player("bl", target)
  141. get_user_name(target_id, name, sizeof name - 1)
  142. get_user_name(id, nameid, sizeof nameid - 1)
  143. if(!target_id)
  144. {
  145. console_print(id, "Can't find that player")
  146. return PLUGIN_HANDLED
  147. }
  148. if(read_argc() != 3)
  149. return PLUGIN_HANDLED
  150.  
  151. if(str_to_num(count) < (g_level_exp[target_id] - level_exp[target_id]) )
  152. {
  153. if(str_to_num(count) == 0)
  154. console_print(id, "Exp Player %s in %i / %i", name, level_exp[target_id], g_level_exp[target_id])
  155. else
  156. {
  157. console_print(id, "Player %s gives for %i exp, Her Maximum %i", name, str_to_num(count), g_level_exp[target_id])
  158. level_exp[target_id] = level_exp[target_id] + str_to_num(count);
  159. }
  160.  
  161. }
  162. else
  163. {
  164. console_print(id, "Maximum Exp in player %i", g_level_exp[target_id])
  165. }
  166. return PLUGIN_HANDLED
  167. }
  168.  
  169. public level_give(id, level, cid)
  170. {
  171. if (!cmd_access(id, level, cid, 2))
  172. {
  173. console_print(id, "У вас нет доступа к команде")
  174. return PLUGIN_HANDLED
  175. }
  176. new target[32]
  177. new count[32]
  178.  
  179. read_argv(1,target,31)
  180. read_argv(2,count,31)
  181. new target_id, name[32], level_id
  182. level_id = str_to_num(count);
  183. target_id = find_player("bl", target)
  184. get_user_name(target_id, name, sizeof name - 1)
  185. if(!target_id)
  186. {
  187. console_print(id, "Can't find that player")
  188. return PLUGIN_HANDLED
  189. }
  190. if(read_argc() != 3)
  191. return PLUGIN_HANDLED
  192.  
  193. if( ((g_level[target_id] + level_id) <=get_pcvar_num(g_level_max)) && (level_id != 0) && ((g_level[target_id] + level_id) > 0 ) )
  194. {
  195. if(level_id > 0)
  196. {
  197. g_level[target_id] = g_level[target_id] + level_id;
  198. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id)
  199. write_short(1<<12) // duration
  200. write_short(1) // hold time
  201. write_short(0x0000) // fade type
  202. write_byte(1) // red
  203. write_byte(200) // green
  204. write_byte(0) // blue
  205. write_byte(205) // alpha
  206. message_end()
  207. emit_sound(target_id, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  208. }
  209. else
  210. {
  211. g_level[target_id] = g_level[target_id] + level_id;
  212. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id)
  213. write_short(1<<12) // duration
  214. write_short(1) // hold time
  215. write_short(0x0000) // fade type
  216. write_byte(200) // red
  217. write_byte(40) // green
  218. write_byte(0) // blue
  219. write_byte(205) // alpha
  220. message_end()
  221. }
  222. console_print(id, "Player %s gives add %i level", name, level_id)
  223. }
  224. else
  225. console_print(id, "Operation Invalid")
  226. return PLUGIN_HANDLED
  227. }
  228.  
  229. public client_putinserver(id)
  230. {
  231. Level_Load(id)
  232. new name[32]
  233. g_trime[id] = false;
  234. g_bonus[id] = true;
  235. nameid[id] = get_user_name(id, name, sizeof name - 1)
  236. if( !zp_get_user_zombie(id) && is_user_alive(id))
  237. {
  238. g_trime[id] = false;
  239. new n = 1;
  240. while( n != g_level[id] )
  241. {
  242. h_health[id] = n * get_pcvar_num(g_h_health);
  243. h_speed[id] = n * get_pcvar_num(g_h_speed);
  244. h_damage[id] = n * get_pcvar_num(g_h_damage);
  245. z_damage[id] = n * get_pcvar_num(g_z_damage);
  246. n = n + 1;
  247. }
  248. new Float:speed[32];
  249. speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
  250. fm_set_user_health( id, get_user_health(id) + h_health[id] )
  251. set_pev(id, pev_maxspeed, speed[id] )
  252. emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  253. }
  254.  
  255. if( g_level[id] == 0) g_level[id] = 1;
  256. if( level_exp[id] == g_level[id] ) level_exp[id] = 0;
  257. if(g_level[id] < get_pcvar_num(g_level_num))
  258. g_levels[id] = get_pcvar_num(g_level_num);
  259. else
  260. {
  261. if(g_level[id] != g_levels[id])
  262. {
  263. new x = 1;
  264. while( g_level[id] > ( x * get_pcvar_num(g_level_num)) )
  265. {
  266. x = x + 1;
  267. g_levels[id] = x * get_pcvar_num(g_level_num);
  268. }
  269. }
  270. }
  271. new y = 1;
  272. while( g_level[id] != y )
  273. {
  274. y = y + 1;
  275. g_level_exp[id] = y * get_pcvar_num(g_frags_level);
  276. }
  277. red = random_num(10, 200)
  278. green = random_num(10, 200)
  279. blue = random_num(10, 200)
  280. }
  281.  
  282. public client_disconnect(id)
  283. {
  284. new name[32], player_nick[32]
  285. player_nick[id] = get_user_name(id, name, sizeof name - 1)
  286. if(player_nick[id] == nameid[id])
  287. Level_Save(id)
  288.  
  289. g_trime[id] = false;
  290. }
  291.  
  292. public hide_status(id)
  293. {
  294. set_hudmessage(0,0,0,0.0,0.0,0, 0.0, 0.01, 0.0, 0.0, 4)
  295. show_hudmessage(id,"")
  296. }
  297.  
  298. public show_status(id)
  299. {
  300. new name[32],pid = read_data(2)
  301. get_user_name(pid,name,31)
  302. if (!zp_get_user_zombie(pid) && !zp_get_user_zombie(id) && (get_pcvar_num(g_player_name) == 1) )
  303. {
  304. set_hudmessage(0,0,255,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4)
  305. show_hudmessage(id,"%L", LANG_PLAYER, "PLAYER_NAME_H", name, g_level[pid], get_user_health(pid),get_user_armor(pid),zp_get_user_ammo_packs(pid))
  306. }
  307. if(zp_get_user_zombie(id) && zp_get_user_zombie(pid) && (get_pcvar_num(g_player_name) == 1) )
  308. {
  309. set_hudmessage(255,0,0,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4)
  310. show_hudmessage(id,"%L", LANG_PLAYER, "PLAYER_NAME_Z", name, g_level[pid], get_user_health(pid), zp_get_user_ammo_packs(pid))
  311. }
  312. }
  313.  
  314. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
  315. {
  316. if ( !zp_get_user_zombie(attacker) && is_user_alive(attacker) )
  317. SetHamParamFloat(4, damage + h_damage[attacker])
  318. else
  319. {
  320. if ( zp_get_user_zombie(attacker) && is_user_alive(attacker) && !zp_get_user_nemesis(attacker))
  321. SetHamParamFloat(4, damage + z_damage[attacker]);
  322. }
  323. }
  324.  
  325. public say_info(id)
  326. {
  327. new text[70], arg1[32], target[32], count[32]
  328. read_args(text, sizeof(text)-1);
  329. remove_quotes(text);
  330. arg1[0] = '^0';
  331. target[0] = '^0';
  332. count[0] = '^0';
  333. parse(text, arg1, sizeof(arg1)-1, target, sizeof(target)-1, count, sizeof(count)-1);
  334. if ( equali(arg1, "info", 4) )
  335. {
  336. info_player(id, target);
  337. }
  338. if ( equali(arg1, "bonusme", 7) && (get_pcvar_num(g_level_info) == 1))
  339. {
  340. bonus_player(id);
  341. }
  342. if ( equali(arg1, "levelexp", 7) && (get_pcvar_num(g_level_info) == 1))
  343. {
  344. expa_player(id);
  345. }
  346. return PLUGIN_CONTINUE;
  347. }
  348.  
  349. public zp_extra_item_selected(id, itemid)
  350. {
  351. Level_Save(id)
  352. }
  353.  
  354. public zp_user_infected_pre(id, infector)
  355. {
  356. if( is_user_alive(infector) && (level_exp[infector] < (g_level_exp[infector] - 1)) && zp_get_user_zombie(infector))
  357. {
  358. level_exp[infector] = level_exp[infector] + 1;
  359. Level_Save(infector);
  360. }
  361. else
  362. if (zp_get_user_zombie(infector))
  363. ChatColor(infector, "!g[ZP] !y Killed Zombie")
  364. }
  365.  
  366. public info_player(id, target[])
  367. {
  368. new target_2;
  369. target_2 = find_player("bl", target)
  370. static name[32], nameid[32];
  371. get_user_name(target_2, name, sizeof name - 1)
  372. get_user_name(id, nameid, sizeof nameid - 1)
  373. if(!target_2)
  374. {
  375. ChatColor(id, "!g[ZP] !y%L", LANG_PLAYER, "LEVEL_INFO_NONAME")
  376. return PLUGIN_HANDLED
  377. }
  378.  
  379. if(zp_get_user_zombie(id))
  380. {
  381. if(id != target_2)
  382. {
  383. ChatColor(id, "!g[INFO]!t %L", LANG_PLAYER, "LEVEL_INFOZM", name, g_level[target_2], z_damage[target_2], zp_get_user_ammo_packs(target_2) )
  384. ChatColor(target_2, "!g[INFO]!t%L ", LANG_PLAYER, "LEVEL_INFO_YOU", nameid)
  385. }
  386. else
  387. {
  388. ChatColor(id, "!g[INFOME]!t%L", LANG_PLAYER, "LEVEL_INFOME_ZM", z_damage[target_2] )
  389. }
  390. }
  391. else
  392. {
  393. if(id != target_2)
  394. {
  395. ChatColor(id, "!g[INFO]!t %L", LANG_PLAYER, "LEVEL_INFO", name, g_level[target_2], h_damage[target_2], h_speed[target_2], h_health[target_2], zp_get_user_ammo_packs(target_2) )
  396. ChatColor(target_2, "!g[INFO]!t%L ", LANG_PLAYER, "LEVEL_INFO_YOU", nameid)
  397. }
  398. else
  399. {
  400. ChatColor(id, "!g[INFOME]!t%L", LANG_PLAYER, "LEVEL_INFOME", h_damage[target_2], h_speed[target_2], h_health[target_2] )
  401. }
  402. }
  403. return PLUGIN_HANDLED
  404. }
  405.  
  406. public bonus_player(id)
  407. {
  408. if( (g_level[id] >= g_levels[id]) && g_bonus[id] && get_pcvar_num(g_level_bonus))
  409. {
  410. g_levels[id] = g_levels[id] * 2;
  411. g_level_del[id] = g_level[id];
  412. g_bonus[id] = false;
  413. ChatColor(id, "!g[BONUS]%L", LANG_PLAYER, "LEVEL_MEGABONUS", g_level[id], get_pcvar_num(g_ammo) )
  414. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(g_ammo) )
  415. Level_Save(id)
  416. }
  417. else
  418. {
  419. if(g_level[id] < g_levels[id])
  420. {
  421. g_levels[id] = get_pcvar_num(g_level_num);
  422. ChatColor(id, "!g[BONUS]!y%L", LANG_PLAYER, "LEVEL_NOMEGABONUS", g_levels[id], get_pcvar_num(g_ammo) )
  423. }
  424. else
  425. {
  426. new x = 1;
  427. while( g_level[id] > ( x * get_pcvar_num(g_level_num)) )
  428. {
  429. g_levels[id] = x * get_pcvar_num(g_level_num);
  430. x = x + 1;
  431. }
  432. ChatColor(id, "!g[BONUS]!y%L", LANG_PLAYER, "LEVEL_NOMEGABONUS", g_levels[id], get_pcvar_num(g_ammo) )
  433. }
  434.  
  435. Level_Save(id)
  436. }
  437. return PLUGIN_HANDLED
  438. }
  439.  
  440. public expa_player(id)
  441. {
  442. ChatColor(id, "!g[EXPA] %L", LANG_PLAYER, "LEVEL_EXP", level_exp[id], g_level_exp[id])
  443. return PLUGIN_HANDLED
  444. }
  445.  
  446. public level_status(id)
  447. {
  448. if( is_user_alive(id))
  449. {
  450. switch( get_pcvar_num(g_hud_color) )
  451. {
  452. case 1:
  453. {
  454. set_hudmessage(255, 200, 3, 0.02, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
  455. show_hudmessage(id,"%L", LANG_PLAYER, "LEVEL_STATUS", g_level[id], level_exp[id])
  456. }
  457. case 2:
  458. {
  459. static r, g, b; r = random_num(10, 200), g = random_num(0, 200), b = random_num(0, 200);
  460. set_hudmessage(r, g, b, 0.02, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
  461. show_hudmessage(id,"%L", LANG_PLAYER, "LEVEL_STATUS", g_level[id], level_exp[id])
  462. }
  463. case 3:
  464. {
  465.  
  466. set_hudmessage(red, green, blue, 0.02, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
  467. show_hudmessage(id,"%L", LANG_PLAYER, "LEVEL_STATUS", g_level[id], level_exp[id])
  468. }
  469. }
  470. }
  471. }
  472.  
  473. public Level_Save(id)
  474. {
  475. new key[64], data[256], data_exp[256], key_exp[64]
  476. new name[33];
  477. get_user_name(id,name,32)
  478.  
  479. format(key, 63, "%s-/", name)
  480. format(data, 255, "%i#", g_level[id])
  481.  
  482. format(key_exp, 63, "%s-/", name)
  483. format(data_exp, 255, "%i#", level_exp[id])
  484.  
  485. nvault_set(g_level_data, key, data)
  486. nvault_set(g_exp_data, key_exp, data_exp)
  487. return PLUGIN_CONTINUE;
  488. }
  489.  
  490. public Level_Load(id)
  491. {
  492. new key[64], data[256], data_exp[256], key_exp[64]
  493. new name[33];
  494. get_user_name(id,name,32)
  495.  
  496. format(key, 63, "%s-/", name)
  497. format(data, 255, "%i#", g_level[id])
  498.  
  499. format(key_exp, 63, "%s-/", name)
  500. format(data_exp, 255, "%i#", level_exp[id])
  501.  
  502. nvault_get(g_level_data, key, data, 255)
  503. nvault_get(g_exp_data, key_exp, data_exp, 255)
  504. replace_all(data, 255, "#", " ")
  505. replace_all(data_exp, 255, "#", " ")
  506.  
  507. new givelevel[32], give_exp[32]
  508. parse(data, givelevel, 31)
  509. parse(data_exp, give_exp, 31)
  510. g_level[id] = str_to_num(givelevel)
  511. level_exp[id] = str_to_num(give_exp)
  512.  
  513. set_task(1.0, "level_status", id, _, _, "b")
  514. return PLUGIN_CONTINUE;
  515. }
  516.  
  517. public Frags_Manager()
  518. {
  519. new aname[32], attacker; attacker = read_data(1)
  520. new y; y = 1;
  521. get_user_name(attacker, aname, sizeof aname - 1)
  522. if( ( level_exp[attacker] >= (g_level_exp[attacker] - 1) ) && (g_level[attacker] <= get_pcvar_num(g_level_max)) && is_user_alive(attacker) )
  523. {
  524. g_bonus[attacker] = true;
  525. g_level[attacker] = g_level[attacker] + 1;
  526. level_exp[attacker] = 0;
  527. while( g_level[attacker] != y )
  528. {
  529. y = y + 1;
  530. g_level_exp[attacker] = y * get_pcvar_num(g_frags_level);
  531. }
  532. message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, attacker)
  533. write_short(1<<12) // duration
  534. write_short(1) // hold time
  535. write_short(0x0000) // fade type
  536. write_byte(1) // red
  537. write_byte(200) // green
  538. write_byte(0) // blue
  539. write_byte(205) // alpha
  540. message_end()
  541. emit_sound(attacker, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH )
  542. set_hudmessage(0, 200, 0, 0.65, 0.5, 0, 0.0, 3.0, 2.0, 1.0, -1)
  543. show_hudmessage(0, "%L", LANG_PLAYER, "LEVEL_UP", aname, g_level[attacker])
  544. if(get_pcvar_num(g_give_ammo) == 1)
  545. {
  546. ChatColor(attacker, "!g[LEVEL] !y %L", LANG_PLAYER, "BONUS_LEVEL", get_pcvar_num(g_give_ammopacks) )
  547. zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(g_give_ammopacks) )
  548. }
  549. Level_Save(attacker);
  550. }
  551. else
  552. {
  553.  
  554. if(g_level[attacker] == get_pcvar_num(g_level_max))
  555. ChatColor(attacker, "!g[LEVEL]!y %L", LANG_PLAYER, "LEVEL_MAX", g_level[attacker] )
  556. level_exp[attacker] = level_exp[attacker] + 1;
  557. Level_Save(attacker);
  558. }
  559. }
  560.  
  561. public zp_round_ended(winteam)
  562. {
  563. for(new id=1;id<=g_Players;id++)
  564. g_trime[id] = true;
  565. }
  566.  
  567. stock ChatColor(const id, const input[], any:...)
  568. {
  569. new count = 1, players[32]
  570. static msg[191]
  571. vformat(msg, 190, input, 3)
  572.  
  573. replace_all(msg, 190, "!g", "^4") // Green Color
  574. replace_all(msg, 190, "!y", "^1") // Default Color
  575. replace_all(msg, 190, "!t", "^3") // Team Color
  576. replace_all(msg, 190, "!t2", "^0") // Team2 Color
  577.  
  578. if (id) players[0] = id; else get_players(players, count, "ch")
  579. {
  580. for (new i = 0; i < count; i++)
  581. {
  582. if (is_user_connected(players[i]))
  583. {
  584. message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i])
  585. write_byte(players[i]);
  586. write_string(msg);
  587. message_end();
  588. }
  589. }
  590. }
  591. }