Advertisement
Guest User

Untitled

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