HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <hamsandwich>
  4. #include <fakemeta_util>
  5.  
  6. #define PLUGIN "KillStreak"
  7. #define VERSION "1.12"
  8. #define AUTHOR "cypis"
  9.  
  10. new const maxAmmo[31]={0,52,0,90,1,32,1,100,90,1,120,100,100,90,90,90,100,120,30,120,200,32,90,120,90,2,35,90,90,0,100};
  11.  
  12. new sprite_blast, cache_trail;
  13.  
  14. new licznik_zabic[33], radar[33], nalot[33], predator[33], nuke[33], emp[33], cuav[33], uav[33], pack[33];
  15. new user_controll[33];
  16. new emp_czasowe[33];
  17.  
  18. new PobraneOrigin[3];
  19.  
  20. public plugin_init() {
  21. register_plugin(PLUGIN, VERSION, AUTHOR)
  22.  
  23. register_forward(FM_Touch, "fw_Touch");
  24. register_forward(FM_PlayerPreThink, "player_predator");
  25. register_forward(FM_ClientKill, "cmdKill")
  26.  
  27. RegisterHam(Ham_Killed, "player", "SmiercGracza", 1);
  28.  
  29. register_event("CurWeapon","CurWeapon","be", "1=1");
  30.  
  31. register_clcmd("say /ks", "uzyj_nagrody");
  32. register_clcmd("say /killstreak", "uzyj_nagrody");
  33. register_clcmd("killstreak", "uzyj_nagrody");
  34. set_task (2.0,"radar_scan",_,_,_,"b");
  35. }
  36.  
  37. public plugin_precache()
  38. {
  39. sprite_blast = precache_model("sprites/dexplo.spr")
  40. cache_trail = precache_model("sprites/smoke.spr")
  41. precache_model("models/p_hegrenade.mdl");
  42. precache_model("models/cod_carepackage.mdl")
  43. precache_model("models/cod_plane.mdl")
  44. precache_model("models/cod_predator.mdl")
  45.  
  46. precache_sound("mw/nuke_friend.wav");
  47. precache_sound("mw/nuke_enemy.wav");
  48. precache_sound("mw/nuke_give.wav");
  49.  
  50. precache_sound("mw/jet_fly1.wav");
  51.  
  52. precache_sound("mw/emp_effect.wav");
  53. precache_sound("mw/emp_friend.wav");
  54. precache_sound("mw/emp_enemy.wav");
  55. precache_sound("mw/emp_give.wav");
  56.  
  57. precache_sound("mw/counter_friend.wav");
  58. precache_sound("mw/counter_enemy.wav");
  59. precache_sound("mw/counter_give.wav");
  60.  
  61. precache_sound("mw/air_friend.wav");
  62. precache_sound("mw/air_enemy.wav");
  63. precache_sound("mw/air_give.wav");
  64.  
  65. precache_sound("mw/predator_friend.wav");
  66. precache_sound("mw/predator_enemy.wav");
  67. precache_sound("mw/predator_give.wav");
  68.  
  69. precache_sound("mw/uav_friend.wav");
  70. precache_sound("mw/uav_enemy.wav");
  71. precache_sound("mw/uav_give.wav")
  72. }
  73.  
  74. public uzyj_nagrody(id)
  75. {
  76. new menu = menu_create("KillStreak:", "Nagrody_Handler");
  77. new cb = menu_makecallback("Nagrody_Callback");
  78. menu_additem(menu, "UAV", _, _, cb);
  79. menu_additem(menu, "Care Package", _, _, cb);
  80. menu_additem(menu, "Counter-UAV", _, _, cb);
  81. menu_additem(menu, "Predator Missle", _, _, cb);
  82. menu_additem(menu, "Airstrike", _, _, cb);
  83. menu_additem(menu, "EMP", _, _, cb);
  84. menu_additem(menu, "Nuke", _, _, cb);
  85. menu_setprop(menu, MPROP_EXITNAME, "Kilepes");
  86. menu_display(id, menu)
  87. }
  88.  
  89. public Nagrody_Callback(id, menu, item)
  90. {
  91. if(!uav[id] && item == 0)
  92. return ITEM_DISABLED;
  93.  
  94. if(!pack[id] && item == 1)
  95. return ITEM_DISABLED;
  96.  
  97. if(!cuav[id]&& item == 2)
  98. return ITEM_DISABLED;
  99.  
  100. if(!predator[id] && item == 3)
  101. return ITEM_DISABLED;
  102.  
  103. if(!nalot[id] && item == 4)
  104. return ITEM_DISABLED;
  105.  
  106. if(!emp[id] && item == 5)
  107. return ITEM_DISABLED;
  108.  
  109. if(!nuke[id] && item == 6)
  110. return ITEM_DISABLED;
  111.  
  112. return ITEM_ENABLED;
  113. }
  114.  
  115. public Nagrody_Handler(id, menu, item)
  116. {
  117. if(!is_user_alive(id))
  118. return PLUGIN_HANDLED;
  119.  
  120. if(item == MENU_EXIT)
  121. {
  122. menu_destroy(menu);
  123. return PLUGIN_HANDLED;
  124. }
  125.  
  126. switch(item)
  127. {
  128. case 0:{
  129. if(!emp_czasowe[id])
  130. CreateUVA(id)
  131. }
  132. case 1:{
  133. if(!emp_czasowe[id])
  134. CreatePack(id)
  135. }
  136. case 2:{
  137. if(!emp_czasowe[id])
  138. CreateCUVA(id)
  139. }
  140. case 3:{
  141. if(!emp_czasowe[id])
  142. CreatePredator(id)
  143. }
  144. case 4:{
  145. if(!emp_czasowe[id])
  146. CreateNalot(id)
  147. }
  148. case 5:{
  149. if(!emp_czasowe[id])
  150. CreateEmp(id)
  151. }
  152. case 6: CreateNuke(id)
  153. }
  154. return PLUGIN_HANDLED;
  155. }
  156.  
  157. public client_putinserver(id){
  158. licznik_zabic[id] = 0;
  159. user_controll[id] = 0
  160. nalot[id] = 0;
  161. predator[id] = 0
  162. nuke[id] = false;
  163. radar[id] = false;
  164. cuav[id] = false;
  165. uav[id] = false;
  166. emp[id] = false;
  167. pack[id] = false;
  168. }
  169.  
  170. public SmiercGracza(id, attacker, shouldgib)
  171. {
  172. if(is_user_alive(attacker) && is_user_connected(attacker))
  173. {
  174. if(get_user_team(attacker) != get_user_team(id))
  175. {
  176. new name[32]
  177. licznik_zabic[attacker]++;
  178. set_dhudmessage(42, 42, 255, -1.0, 0.30, 2, 0.0, 3.0, 0.02, 0.02, true)
  179. get_user_name(attacker,name,31);
  180. if(licznik_zabic[attacker] > 0)
  181. {
  182. switch(licznik_zabic[attacker])
  183. {
  184. case 3:
  185. {
  186. uav[attacker] = true;
  187. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  188. client_print(attacker, print_chat, "UAV Reacon Elerheto, Hogy aktivald ird be /ks");
  189. client_cmd(attacker, "spk sound/mw/uav_give.wav")
  190. }
  191. case 4:
  192. {
  193. switch(random_num(0,1))
  194. {
  195. case 0:{
  196. pack[attacker] = true;
  197. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  198. client_print(attacker, print_chat, "Care Package Ledobasra kesz, Hogy aktivald ird be /ks");
  199. }
  200. case 1:{
  201. cuav[attacker] = true;
  202. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  203. client_print(attacker, print_chat, "Counter-UAV Elerheto, Hogy aktivald ird be /ks");
  204. client_cmd(attacker, "spk sound/mw/counter_give.wav")
  205. }
  206. }
  207. }
  208. case 5:
  209. {
  210. predator[attacker]++;
  211. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  212. client_print(attacker, print_chat, "Predator Missile Keszen all a bevetesre, Hogy aktivald ird be /ks");
  213. client_cmd(attacker, "spk sound/mw/predator_give.wav")
  214. }
  215. case 6:
  216. {
  217. nalot[attacker]++;
  218. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  219. client_print(attacker, print_chat, "Harrier Aistrike Elerheto, Hogy aktivald ird be /ks");
  220. client_cmd(attacker, "spk sound/mw/air_give.wav")
  221. }
  222. case 15:
  223. {
  224. emp[attacker] = true;
  225. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  226. client_print(attacker, print_chat, "EMP Elerheto. Hogy aktivald ird be /ks");
  227. client_cmd(attacker, "spk sound/mw/emp_give.wav")
  228. }
  229. case 20:
  230. {
  231. nuke[attacker] = true;
  232. show_dhudmessage(0, "", name, licznik_zabic[attacker]);
  233. client_print(attacker, print_chat, "Tactical Nuke Elerheto, Hogy aktivald ird be /ks");
  234. client_cmd(attacker, "spk sound/mw/nuke_give.wav")
  235. licznik_zabic[attacker] = false;
  236. }
  237. }
  238. }
  239. }
  240. }
  241. if(!is_user_alive(id))
  242. {
  243. licznik_zabic[id] = 0;
  244. user_controll[id] = 0
  245. }
  246. }
  247.  
  248. //uav
  249. public CreateUVA(id)
  250. {
  251. uav[id] = false;
  252. radar[id] = true;
  253. new num, players[32]
  254. get_players(players, num, "gh")
  255. for(new a = 0; a < num; a++)
  256. {
  257. new i = players[a]
  258. if(get_user_team(id) != get_user_team(i))
  259. client_cmd(i, "spk sound/mw/uav_enemy.wav")
  260. else
  261. client_cmd(i, "spk sound/mw/uav_friend.wav")
  262. }
  263. radar_scan()
  264. }
  265.  
  266. public radar_scan()
  267. {
  268. new PlayerCoords[3];
  269.  
  270. for (new id=1; id<=32; id++)
  271. {
  272. if(!is_user_alive(id) || !radar[id] || emp_czasowe[id])
  273. continue;
  274.  
  275. for (new i=1;i<=32;i++)
  276. {
  277. if(!is_user_alive(i) || get_user_team(i) == get_user_team(id))
  278. continue;
  279.  
  280. get_user_origin(i, PlayerCoords)
  281.  
  282. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HostagePos"), {0,0,0}, id)
  283. write_byte(id)
  284. write_byte(i)
  285. write_coord(PlayerCoords[0])
  286. write_coord(PlayerCoords[1])
  287. write_coord(PlayerCoords[2])
  288. message_end()
  289.  
  290. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HostageK"), {0,0,0}, id)
  291. write_byte(i)
  292. message_end()
  293. }
  294. }
  295. }
  296. //dotyk enta
  297. public fw_Touch(ent, id)
  298. {
  299. if (!pev_valid(ent))
  300. return FMRES_IGNORED
  301.  
  302. new class[32];
  303. pev(ent, pev_classname, class, charsmax(class))
  304. if(equal(class, "Pack") && pev_valid(id))
  305. {
  306. if((pev(id, pev_flags) & FL_CLIENT) && (pev(ent, pev_flags) & FL_ONGROUND))
  307. {
  308. new weapons[32];
  309. new weaponsnum;
  310. get_user_weapons(id, weapons, weaponsnum);
  311. for(new i=0; i<weaponsnum; i++)
  312. if(maxAmmo[weapons[i]] > 0)
  313. cs_set_user_bpammo(id, weapons[i], maxAmmo[weapons[i]]);
  314.  
  315. fm_give_item(id, "weapon_hegrenade")
  316. fm_give_item(id, "weapon_flashbang")
  317. fm_give_item(id, "weapon_flashbang")
  318. fm_give_item(id, "weapon_smokegrenade");
  319.  
  320. fm_remove_entity(ent)
  321. return FMRES_IGNORED
  322. }
  323. }
  324. if(equal(class, "Bomb"))
  325. {
  326. bombs_explode(ent, 100.0, 150.0)
  327. fm_remove_entity(ent)
  328. return FMRES_IGNORED
  329. }
  330. if(equal(class, "Predator"))
  331. {
  332. new owner = pev(ent, pev_owner)
  333. bombs_explode(ent, 220.0, 400.0)
  334. fm_attach_view(owner, owner)
  335. user_controll[owner] = 0
  336. fm_remove_entity(ent)
  337. return FMRES_IGNORED
  338. }
  339. return FMRES_IGNORED
  340. }
  341. //airpack
  342. public CreatePack(id)
  343. {
  344. CreatePlane(id)
  345. pack[id] = false
  346. set_task(1.0, "airpack", id+742)
  347. }
  348.  
  349. public airpack(taskid)
  350. {
  351. new id = (taskid - 742)
  352.  
  353. PobraneOrigin[2] += 150;
  354.  
  355. new Float:LocVecs[3];
  356. IVecFVec(PobraneOrigin, LocVecs);
  357.  
  358. new g_pack = fm_create_entity("info_target")
  359. fm_create_ent(id, g_pack, "Pack", "models/cod_carepackage.mdl", 1, 6, LocVecs)
  360. }
  361.  
  362. //counter-uva
  363. public CreateCUVA(id)
  364. {
  365. cuav[id] = false
  366. new num, players[32]
  367. get_players(players, num, "gh")
  368. for(new a = 0; a < num; a++)
  369. {
  370. new i = players[a]
  371. if(get_user_team(id) != get_user_team(i))
  372. {
  373. client_cmd(i, "spk sound/mw/counter_enemy.wav")
  374. radar[i] = false;
  375. }
  376. else
  377. client_cmd(i, "spk sound/mw/counter_friend.wav")
  378. }
  379. }
  380. //emp
  381. public CreateEmp(id)
  382. {
  383. client_cmd(0, "spk sound/mw/emp_effect.wav")
  384. emp[id] = false;
  385. new num, players[32]
  386. get_players(players, num, "gh")
  387. for(new a = 0; a < num; a++)
  388. {
  389. new i = players[a]
  390. if(get_user_team(id) != get_user_team(i))
  391. {
  392. if(is_user_alive(i))
  393. {
  394. Display_Fade(i,1<<12,1<<12,1<<16,255, 255,0,166)
  395. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, i)
  396. write_byte((1<<0)|(1<<3)|(1<<5))
  397. message_end()
  398. }
  399. client_cmd(i, "spk sound/mw/emp_enemy.wav")
  400. emp_czasowe[i] = true;
  401. }
  402. else
  403. client_cmd(i, "spk sound/mw/emp_friend.wav")
  404. }
  405. set_task(90.0,"usun_emp", id+2315)
  406. }
  407.  
  408. public usun_emp(taskid)
  409. {
  410. new id = (taskid - 2315);
  411.  
  412. new num, players[32]
  413. get_players(players, num, "gh")
  414. for(new a = 0; a < num; a++)
  415. {
  416. new i = players[a]
  417. if(get_user_team(id) != get_user_team(i))
  418. {
  419. if(is_user_alive(i))
  420. {
  421. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, i)
  422. write_byte(0)
  423. message_end()
  424. }
  425. emp_czasowe[i] = false;
  426. }
  427. }
  428. }
  429.  
  430. public CurWeapon(id)
  431. {
  432. if(emp_czasowe[id])
  433. {
  434. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
  435. write_byte((1<<0)|(1<<3)|(1<<5))
  436. message_end()
  437. }
  438. }
  439.  
  440. //nuke
  441. public CreateNuke(id)
  442. {
  443. new num, players[32]
  444. get_players(players, num, "gh")
  445. for(new a = 0; a < num; a++)
  446. {
  447. new i = players[a]
  448. if(is_user_alive(i))
  449. Display_Fade(i,10<<12,10<<12,1<<16,255, 42, 42,171)
  450.  
  451. if(get_user_team(id) != get_user_team(i))
  452. client_cmd(i, "spk sound/mw/nuke_enemy.wav")
  453. else
  454. client_cmd(i, "spk sound/mw/nuke_friend.wav")
  455. }
  456. set_task(10.0,"trzesienie")
  457. set_task(13.5,"usun", id)
  458. nuke[id] = false;
  459. }
  460.  
  461. public trzesienie()
  462. {
  463. new num, players[32]
  464. get_players(players, num, "gh")
  465. for(new a = 0; a < num; a++)
  466. {
  467. new i = players[a]
  468. if(is_user_alive(i))
  469. {
  470. Display_Fade(i,3<<12,3<<12,1<<16,255, 85, 42,215)
  471. message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, i)
  472. write_short(255<<12)
  473. write_short(4<<12)
  474. write_short(255<<12)
  475. message_end()
  476. }
  477. }
  478. }
  479.  
  480. public usun(id)
  481. {
  482. new num, players[32]
  483. get_players(players, num, "gh")
  484. for(new a = 0; a < num; a++)
  485. {
  486. new i = players[a]
  487. if(is_user_alive(i))
  488. {
  489. if(get_user_team(id) != get_user_team(i))
  490. {
  491. fm_set_user_frags(id, get_user_frags(id)+1);
  492. }
  493. user_silentkill(i)
  494. }
  495. }
  496. }
  497. //nalot
  498. public CreateNalot(id)
  499. {
  500. new num, players[32]
  501. get_players(players, num, "gh")
  502. for(new a = 0; a < num; a++)
  503. {
  504. new i = players[a]
  505. if(get_user_team(id) != get_user_team(i))
  506. client_cmd(i, "spk sound/mw/air_enemy.wav")
  507. else
  508. client_cmd(i, "spk sound/mw/air_friend.wav")
  509. }
  510. set_task(1.0, "CreateBombs", id+997, _, _, "a", 3);
  511. CreatePlane(id)
  512. nalot[id]--;
  513. }
  514.  
  515. public usun_ent()
  516. fm_remove_entity_name("Samolot");
  517.  
  518. public CreateBombs(taskid)
  519. {
  520. new id = (taskid-997)
  521.  
  522. new g_bomby[15], radlocation[3], randomx, randomy;
  523.  
  524. PobraneOrigin[2] += 50;
  525.  
  526. for(new i=0; i<15; i++)
  527. {
  528. randomx = random_num(-150,150);
  529. randomy = random_num(-150,150);
  530.  
  531. radlocation[0] = PobraneOrigin[0]+1*randomx;
  532. radlocation[1] = PobraneOrigin[1]+1*randomy;
  533. radlocation[2] = PobraneOrigin[2];
  534.  
  535. new Float:LocVec[3];
  536. IVecFVec(radlocation, LocVec);
  537.  
  538. g_bomby[i] = fm_create_entity("info_target")
  539. fm_create_ent(id, g_bomby[i], "Bomb", "models/p_hegrenade.mdl", 2, 10, LocVec)
  540. }
  541. }
  542.  
  543. public CreatePlane(id)
  544. {
  545. new Float:Origin[3], Float: Angle[3], Float: Velocity[3];
  546.  
  547. get_user_origin(id, PobraneOrigin, 3);
  548.  
  549. velocity_by_aim(id, 1000, Velocity);
  550. pev(id, pev_origin, Origin);
  551. pev(id, pev_v_angle, Angle);
  552.  
  553. Origin[2] += 250;
  554. Angle[0] = 0.0;
  555. Velocity[2] = Origin[2];
  556.  
  557. new ent = fm_create_entity("info_target");
  558. fm_create_ent(id, ent, "Samolot", "models/cod_plane.mdl", 2, 8, Origin);
  559.  
  560. set_pev(ent, pev_velocity, Velocity);
  561. set_pev(ent, pev_angles, Angle);
  562.  
  563. emit_sound(ent, CHAN_ITEM, "mw/jet_fly1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  564. set_task(4.5, "usun_ent");
  565. }
  566.  
  567. //predator
  568. public CreatePredator(id){
  569. new num, players[32]
  570. get_players(players, num, "gh")
  571. for(new a = 0; a < num; a++)
  572. {
  573. new i = players[a]
  574. if(get_user_team(id) != get_user_team(i))
  575. client_cmd(i, "spk sound/mw/predator_enemy.wav")
  576. else
  577. client_cmd(i, "spk sound/mw/predator_friend.wav")
  578. }
  579.  
  580. new Float:Origin[3], Float:Angle[3], Float:Velocity[3]
  581.  
  582. velocity_by_aim(id, 700, Velocity)
  583. pev(id, pev_origin, Origin)
  584. pev(id, pev_v_angle, Angle)
  585.  
  586. Angle[0] *= -1.0
  587.  
  588. new g_predator = fm_create_entity("info_target")
  589. fm_create_ent(id, g_predator, "Predator", "models/cod_predator.mdl", 2, 5, Origin)
  590.  
  591. set_pev(g_predator, pev_velocity, Velocity)
  592. set_pev(g_predator, pev_angles, Angle)
  593.  
  594. message_begin( MSG_BROADCAST, SVC_TEMPENTITY)
  595. write_byte(TE_BEAMFOLLOW)
  596. write_short(g_predator)
  597. write_short(cache_trail)
  598. write_byte(10)
  599. write_byte(5)
  600. write_byte(205)
  601. write_byte(237)
  602. write_byte(163)
  603. write_byte(200)
  604. message_end()
  605.  
  606. predator[id] = false;
  607.  
  608. fm_attach_view(id, g_predator)
  609. user_controll[id] = g_predator
  610. }
  611.  
  612. public player_predator(id)
  613. {
  614. if(user_controll[id] > 0)
  615. {
  616. new ent = user_controll[id]
  617. if (pev_valid(ent))
  618. {
  619. new Float:Velocity[3], Float:Angle[3]
  620. velocity_by_aim(id, 500, Velocity)
  621. pev(id, pev_v_angle, Angle)
  622.  
  623. set_pev(ent, pev_velocity, Velocity)
  624. set_pev(ent, pev_angles, Angle)
  625. }
  626. else
  627. {
  628. fm_attach_view(id, id)
  629. }
  630. }
  631. }
  632.  
  633. bombs_explode(ent, Float:zadaje, Float:promien)
  634. {
  635. if (!pev_valid(ent))
  636. return;
  637.  
  638. new attacker = pev(ent, pev_owner)
  639.  
  640. new Float:entOrigin[3], Float:fDistance, Float:fDamage, Float:vOrigin[3]
  641. pev(ent, pev_origin, entOrigin)
  642. entOrigin[2] += 1.0
  643.  
  644. new victim = -1
  645. while((victim = engfunc(EngFunc_FindEntityInSphere, victim, entOrigin, promien)) != 0)
  646. {
  647. if (attacker==victim || !pev_valid(victim))
  648. continue;
  649.  
  650. pev(victim, pev_origin, vOrigin)
  651. fDistance = get_distance_f(vOrigin, entOrigin)
  652. fDamage = zadaje - floatmul(zadaje, floatdiv(fDistance, promien))
  653. fDamage *= estimate_take_hurt(entOrigin, victim, 0)
  654. if(fDamage>0.0)
  655. {
  656. if(get_user_team(attacker)!=get_user_team(victim))
  657. if(pev(victim, pev_health) > 0.0)
  658. ExecuteHam(Ham_TakeDamage, victim, ent, attacker, fDamage, DMG_BULLET)
  659. }
  660. }
  661. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  662. write_byte(TE_EXPLOSION);
  663. write_coord(floatround(entOrigin[0]));
  664. write_coord(floatround(entOrigin[1]));
  665. write_coord(floatround(entOrigin[2]));
  666. write_short(sprite_blast);
  667. write_byte(32);
  668. write_byte(20);
  669. write_byte(0);
  670. message_end();
  671. }
  672.  
  673. public cmdKill()
  674. return FMRES_SUPERCEDE;
  675.  
  676. stock fm_create_ent(id, ent, const szName[], const szModel[], iSolid, iMovetype, Float:fOrigin[3])
  677. {
  678. if(!pev_valid(ent))
  679. return;
  680.  
  681. set_pev(ent, pev_classname, szName)
  682. engfunc(EngFunc_SetModel, ent, szModel)
  683. set_pev(ent, pev_solid, iSolid)
  684. set_pev(ent, pev_movetype, iMovetype)
  685. set_pev(ent, pev_owner, id)
  686. set_pev(ent, pev_origin, fOrigin)
  687. }
  688.  
  689. stock Float:estimate_take_hurt(Float:fPoint[3], ent, ignored)
  690. {
  691. new Float:fOrigin[3]
  692. new tr
  693. new Float:fFraction
  694. pev(ent, pev_origin, fOrigin)
  695. engfunc(EngFunc_TraceLine, fPoint, fOrigin, DONT_IGNORE_MONSTERS, ignored, tr)
  696. get_tr2(tr, TR_flFraction, fFraction)
  697. if(fFraction == 1.0 || get_tr2(tr, TR_pHit) == ent)
  698. return 1.0
  699. return 0.6
  700. }
  701.  
  702. stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
  703. {
  704. message_begin(MSG_ONE, get_user_msgid("ScreenFade"),{0,0,0},id);
  705. write_short(duration);
  706. write_short(holdtime );
  707. write_short(fadetype);
  708. write_byte(red);
  709. write_byte(green);
  710. write_byte(blue);
  711. write_byte(alpha);
  712. message_end();
  713. }
  714.  
  715. //dhudmessage
  716. new dhud_color;
  717. new dhud_x;
  718. new dhud_y;
  719. new dhud_effect;
  720. new dhud_fxtime;
  721. new dhud_holdtime;
  722. new dhud_fadeintime;
  723. new dhud_fadeouttime;
  724. new dhud_reliable;
  725.  
  726. stock set_dhudmessage(red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false)
  727. {
  728. #define clamp_byte(%1) (clamp(%1, 0, 255))
  729. #define pack_color(%1,%2,%3) (%3 + (%2<<8) + (%1<<16))
  730.  
  731. dhud_color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue));
  732. dhud_x = _:x;
  733. dhud_y = _:y;
  734. dhud_effect = effects;
  735. dhud_fxtime = _:fxtime;
  736. dhud_holdtime = _:holdtime;
  737. dhud_fadeintime = _:fadeintime;
  738. dhud_fadeouttime = _:fadeouttime;
  739. dhud_reliable = _:reliable;
  740. return 1;
  741. }
  742.  
  743. stock show_dhudmessage(index, const message[], any:...)
  744. {
  745. new buffer[128];
  746. new numArguments = numargs();
  747.  
  748. if(numArguments == 2)
  749. send_dhudMessage(index, message);
  750. else if(index || numArguments == 3)
  751. {
  752. vformat(buffer, charsmax(buffer), message, 3);
  753. send_dhudMessage(index, buffer);
  754. }
  755. else
  756. {
  757. new playersList[32], numPlayers;
  758. get_players(playersList, numPlayers, "ch");
  759.  
  760. if(!numPlayers)
  761. return 0;
  762.  
  763. new Array:handleArrayML = ArrayCreate();
  764.  
  765. for(new i = 2, j; i < numArguments; i++)
  766. {
  767. if(getarg(i) == LANG_PLAYER)
  768. {
  769. while((buffer[j] = getarg(i + 1, j++))) {}
  770. j = 0;
  771.  
  772. if(GetLangTransKey(buffer) != TransKey_Bad)
  773. ArrayPushCell(handleArrayML, i++);
  774. }
  775. }
  776.  
  777. new size = ArraySize(handleArrayML);
  778.  
  779. if(!size)
  780. {
  781. vformat(buffer, charsmax(buffer), message, 3);
  782. send_dhudMessage(index, buffer);
  783. }
  784. else
  785. {
  786. for(new i = 0, j; i < numPlayers; i++)
  787. {
  788. index = playersList[i];
  789.  
  790. for(j = 0; j < size; j++)
  791. setarg(ArrayGetCell(handleArrayML, j), 0, index);
  792.  
  793. vformat(buffer, charsmax(buffer), message, 3);
  794. send_dhudMessage(index, buffer);
  795. }
  796. }
  797. ArrayDestroy(handleArrayML);
  798. }
  799. return 1;
  800. }
  801.  
  802. stock send_dhudMessage(const index, const message[])
  803. {
  804. message_begin(dhud_reliable? (index? MSG_ONE: MSG_ALL): (index? MSG_ONE_UNRELIABLE: MSG_BROADCAST), SVC_DIRECTOR, _, index);
  805. {
  806. write_byte(strlen(message) + 31);
  807. write_byte(DRC_CMD_MESSAGE);
  808. write_byte(dhud_effect);
  809. write_long(dhud_color);
  810. write_long(dhud_x);
  811. write_long(dhud_y);
  812. write_long(dhud_fadeintime);
  813. write_long(dhud_fadeouttime);
  814. write_long(dhud_holdtime);
  815. write_long(dhud_fxtime);
  816. write_string(message);
  817. }
  818. message_end();
  819. }