HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fun>
  4. #include <fakemeta_util>
  5. #include <cstrike>
  6.  
  7. #define CMOD 1
  8. #define CLIGHTS 2
  9. #define CSPEED 3
  10. #define CREGEN 4
  11. #define CDAMAGE 5
  12. #define CTIME 6
  13. #define CGRAV 7
  14. #define CRED 8
  15. #define CGREEN 9
  16. #define CBLUE 10
  17. #define COBJEC 11
  18. #define CALC 12
  19. #define CLAST 13
  20.  
  21. #define TASK_LIGHT 111
  22. #define TASK_REGEN 222
  23. #define TASK_INVIS 333
  24. #define TASK_CHOOSE 444
  25. #define TASK_RESTART 555
  26. #define TASK_VISION 666
  27.  
  28. #define MAXPLAYERS 33
  29.  
  30. new claws[] = "models/v_claws.mdl"
  31. new knife[] = "models/v_knife.mdl"
  32.  
  33. new pcvar[CLAST];
  34. new maxhealth, maxarmor;
  35. new monster = 0;
  36. new cached_gametime, curr_gametime;
  37. new told;
  38. new bool:selected;
  39. new bool:gKilledByMonster = false;
  40.  
  41. new bombMap = 0;
  42. new hostageMap = 0;
  43.  
  44. public plugin_precache() {
  45. precache_model("models/player/monster/monster.mdl");
  46. precache_model(claws);
  47. precache_model(knife);
  48. }
  49.  
  50. public plugin_init() {
  51. register_plugin("Monster Mod", "1.3", "Rolnaaba");
  52.  
  53. pcvar[CMOD] = register_cvar("sv_sewermonster", "1"); //mod on or off?
  54. pcvar[CLIGHTS] = register_cvar("sm_lights", "1"); //set lights down low and flickering, with sewermonster having night vision.
  55. pcvar[CSPEED] = register_cvar("sm_speed", "9999.0"); //how much FASTER the sewer monster runs.
  56. pcvar[CREGEN] = register_cvar("sm_regen", "25"); //how much health the sewermonster gets every five seconds.
  57. pcvar[CDAMAGE] = register_cvar("sm_damage", "2.0"); //damage multiplier for Sewer Monster!
  58. pcvar[CTIME] = register_cvar("sm_time", "30"); //time in whihc the monster must kill to not starve (starts over every kill)
  59. pcvar[CGRAV] = register_cvar("sm_grav", "0.3"); //half the gravity
  60. pcvar[COBJEC] = register_cvar("sm_block", "1"); //block objectives?
  61. pcvar[CALC] = register_cvar("sm_calc", "0");
  62.  
  63. //these are for the RGB values of the monster's nightvision.
  64. pcvar[CRED] = register_cvar("sm_nvgr", "35"); //red value
  65. pcvar[CGREEN] = register_cvar("sm_nvgg", "65"); //green value
  66. pcvar[CBLUE] = register_cvar("sm_nvgb", "120"); //blue value
  67.  
  68. register_clcmd("nightvision", "_NightVision"); //to block use of nightvision thanks to teame06
  69.  
  70. register_concmd("amx_monster", "set_monster", ADMIN_CHAT, "<name> -Makes that player the monster!");
  71. register_concmd("amx_toggle_sm", "toggle_mod", ADMIN_CVAR, "-Toggles on and off the mod");
  72.  
  73. register_event("HLTV", "BeginingNewRound", "a", "1=0", "2=0");
  74. register_event("CurWeapon", "Event_CurWeapon", "be");
  75. register_event("Damage", "Event_Damage", "be");
  76. register_event("DeathMsg", "Event_Death", "a");
  77. register_event("TeamInfo", "event_team_info", "a");
  78.  
  79. register_logevent("Event_NewRound", 2, "1=Round_Start");
  80.  
  81. set_task(1.0, "lighting_loop", TASK_LIGHT);
  82. set_task(10.0, "_choose_monster", TASK_CHOOSE);
  83.  
  84.  
  85. register_message(get_user_msgid("DeathMsg"), "msg_Death");
  86.  
  87. //For blocking Objectives, from gungame!
  88. register_message(get_user_msgid("Scenario"),"message_scenario");
  89. register_message(get_user_msgid("BombDrop"),"message_bombdrop");
  90. register_message(get_user_msgid("WeapPickup"),"message_weappickup");
  91. register_message(get_user_msgid("AmmoPickup"),"message_ammopickup");
  92. register_message(get_user_msgid("TextMsg"),"message_textmsg");
  93. register_message(get_user_msgid("HostagePos"),"message_hostagepos");
  94.  
  95. // identify this as a bomb map
  96. if(fm_find_ent_by_class(1, "info_bomb_target") || fm_find_ent_by_class(1, "func_bomb_target"))
  97. bombMap = 1;
  98.  
  99. // identify this as a hostage map
  100. if(fm_find_ent_by_class(1,"hostage_entity"))
  101. hostageMap = 1;
  102.  
  103. selected = false;
  104. }
  105.  
  106. public toggle_mod(id, level, cid) {
  107. if(!cmd_access(id, level, cid, 1))
  108. return PLUGIN_HANDLED;
  109.  
  110. if(!get_pcvar_num(pcvar[CMOD])) {
  111. set_pcvar_num(pcvar[CMOD], 1);
  112. console_print(id, "[MM] MonsterMod:BEKAPCSOLVA");
  113. client_print(0, print_chat, "[MM]MonsterMod:BEKAPCSOLVA");
  114. } else {
  115. set_pcvar_num(pcvar[CMOD], 0);
  116. console_print(id, "[MM]MonsterMod:KIKAPCSOLVA");
  117. client_print(0, print_chat, "[MM]MonsterMod:KIKAPCSOLVA");
  118. }
  119.  
  120. if(monster) {
  121. set_user_rendering(monster);
  122. cs_reset_user_model(monster);
  123. }
  124.  
  125. remove_task(TASK_VISION+monster);
  126. remove_task(TASK_REGEN+monster);
  127. remove_task(TASK_INVIS+monster);
  128.  
  129. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, knife));
  130.  
  131. server_cmd("sv_restartround 5");
  132.  
  133. return PLUGIN_HANDLED;
  134. }
  135.  
  136. public set_monster(id, level, cid) {
  137. if(!get_pcvar_num(pcvar[CMOD])) {
  138. console_print(id, "A Monster Mod ot kikapcsolta egy admin!");
  139. return PLUGIN_HANDLED;
  140. }
  141. if(!cmd_access(id, level, cid, 2))
  142. return PLUGIN_HANDLED;
  143.  
  144. new arg[32];
  145. read_argv(1, arg, 31);
  146. new player = cmd_target(id, arg, 2);
  147.  
  148. if (!player) {
  149. console_print(id, "Nem talalhato a jatekos");
  150. return PLUGIN_HANDLED;
  151. }
  152. if(monster) {
  153. set_user_rendering(monster);
  154. }
  155.  
  156. remove_task(TASK_VISION+monster);
  157. remove_task(TASK_REGEN+monster);
  158. remove_task(TASK_INVIS+monster);
  159.  
  160. cs_set_user_team(monster, CS_TEAM_CT, CS_CT_GIGN);
  161.  
  162. cs_reset_user_model(monster);
  163. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, knife));
  164.  
  165. monster = player;
  166.  
  167. cs_set_user_team(monster, CS_TEAM_T, CS_T_TERROR);
  168. cs_set_user_model(monster, "monster");
  169. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, claws));
  170.  
  171. new aname[32], mname[32];
  172. get_user_name(id, aname, 31);
  173. get_user_name(player, mname, 31);
  174.  
  175. client_print(0, print_chat, "[SM] ADMIN: %s csinalt %s a MONSTER!", aname, mname);
  176.  
  177. server_cmd("sv_restartround 5");
  178.  
  179. return PLUGIN_HANDLED;
  180. }
  181.  
  182. public BeginingNewRound() {
  183. if(hostageMap && get_pcvar_num(pcvar[COBJEC]) && get_pcvar_num(pcvar[CMOD]))
  184. set_task(0.1,"move_hostages");
  185. }
  186.  
  187. public _choose_monster() {
  188. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  189.  
  190. new players[32], num;
  191. get_players(players, num);
  192. if(num <= 1) {
  193. client_print(0, print_center, "Nincs eleg jatekos a Monster kivalasztasahoz!");
  194. set_task(10.0, "_choose_monster", TASK_CHOOSE);
  195. } else {
  196. client_print(0, print_center, "A Monster kivalasztodik 5 masodperc mulva!");
  197. set_task(5.0, "choose_monster", TASK_CHOOSE);
  198. }
  199. return PLUGIN_CONTINUE;
  200. }
  201.  
  202. public sm_regen_loop() {
  203. if(!get_pcvar_num(pcvar[CMOD])) {
  204. set_task(5.0, "sm_regen_loop", TASK_REGEN);
  205. }
  206.  
  207. if((get_user_health(monster)+get_pcvar_num(pcvar[CREGEN])) >= maxhealth) {
  208. set_user_health(monster, maxhealth);
  209. } else {
  210. set_user_health(monster, get_user_health(monster)+get_pcvar_num(pcvar[CREGEN]));
  211. }
  212.  
  213. set_task(5.0, "sm_regen_loop", TASK_REGEN);
  214. }
  215.  
  216. public sm_invis_loop() {
  217. if(!get_pcvar_num(pcvar[CMOD])) {
  218. set_task(5.0, "sm_invis_loop", TASK_INVIS);
  219. }
  220.  
  221. set_task(random_float(0.5, 2.0), "_sm_invis_loop", TASK_INVIS);
  222. set_user_rendering(monster, kRenderFxPulseSlowWide, 0, 0, 0, kRenderTransAlpha, 85);
  223. }
  224.  
  225. public _sm_invis_loop() {
  226. set_task(random_float(5.0, 14.0), "sm_invis_loop", TASK_INVIS);
  227. set_user_rendering(monster, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 25);
  228. }
  229.  
  230. public lighting_loop() {
  231. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  232.  
  233. if(get_pcvar_num(pcvar[CLIGHTS])) {
  234. engfunc(EngFunc_LightStyle, 0, "a")
  235. set_task(random_float(4.0, 8.0), "thunder_clap", TASK_LIGHT);
  236. } else {
  237. engfunc(EngFunc_LightStyle, 0, "#OFF")
  238. remove_task(TASK_LIGHT);
  239. set_task(20.0,"lighting_loop", TASK_LIGHT);
  240. }
  241. return PLUGIN_HANDLED
  242. }
  243.  
  244. public thunder_clap() {
  245. engfunc(EngFunc_LightStyle, 0, "s")
  246. client_cmd(0,"speak ambience/thunder_clap.wav");
  247.  
  248. set_task(1.0,"lighting_loop",TASK_LIGHT);
  249. }
  250.  
  251. public choose_monster() {
  252. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  253.  
  254. new players[32],num;
  255. get_players(players,num, "a");
  256.  
  257. new ran = random(num);
  258. new id = players[ran];
  259.  
  260. monster = id;
  261.  
  262. client_print(0, print_center, "Monster Chosen!");
  263.  
  264. set_task(1.0, "begin", id);
  265.  
  266. return PLUGIN_CONTINUE;
  267. }
  268.  
  269. public set_user_vision(id) {
  270. if(id > TASK_VISION) id -= TASK_VISION;
  271.  
  272. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  273.  
  274. if(!get_pcvar_num(pcvar[CLIGHTS])) {
  275. if(task_exists(id+TASK_VISION)) remove_task(id+TASK_VISION);
  276. return PLUGIN_CONTINUE;
  277. }
  278.  
  279. new origin[3];
  280. get_user_origin(id, origin);
  281.  
  282. //NVG Entity
  283. message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id);
  284. write_byte(TE_DLIGHT); //entity type
  285. write_coord(origin[0]); //x
  286. write_coord(origin[1]); //y
  287. write_coord(origin[2]); //z
  288. write_byte(125); //visible distance
  289. write_byte(get_pcvar_num(pcvar[CRED])); //red
  290. write_byte(get_pcvar_num(pcvar[CGREEN])); //green
  291. write_byte(get_pcvar_num(pcvar[CBLUE])); //blue
  292. write_byte(5); //life in deciseconds (0.1's)
  293. write_byte(10); //distance flicker (decay rate)
  294. message_end();
  295.  
  296. set_task(0.1, "set_user_vision", TASK_VISION+id)
  297.  
  298. return PLUGIN_CONTINUE;
  299. }
  300.  
  301. public begin(id) {
  302. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  303.  
  304. for(new i = 1; i < MAXPLAYERS; i++) {
  305. if(is_user_connected(i)) {
  306. cs_set_user_team(i, CS_TEAM_CT, CS_CT_GIGN);
  307. cs_set_user_nvg(i, 0);
  308. }
  309. }
  310. cs_set_user_team(id, CS_TEAM_T, CS_DONTCHANGE);
  311. cs_set_user_model(monster, "monster");
  312.  
  313. selected = true;
  314. restart_round();
  315.  
  316. return PLUGIN_CONTINUE;
  317. }
  318.  
  319. public Event_CurWeapon(id) {
  320. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  321.  
  322. if(id != monster) return PLUGIN_CONTINUE;
  323.  
  324. set_user_maxspeed(id, get_user_maxspeed(id)+get_pcvar_float(pcvar[CSPEED]));
  325.  
  326. new WeaponActive = read_data(1);
  327. new wpnid = read_data(2);
  328.  
  329. if (!WeaponActive)
  330. return PLUGIN_CONTINUE;
  331.  
  332. if(wpnid != CSW_KNIFE) {
  333. engclient_cmd(id, "weapon_knife");
  334. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, claws))
  335. }
  336.  
  337. return PLUGIN_CONTINUE;
  338. }
  339.  
  340. public Event_Damage(id) {
  341. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  342.  
  343. new weapon, bodypart, attacker = get_user_attacker(id, weapon, bodypart);
  344. if(attacker != monster) return PLUGIN_CONTINUE;
  345.  
  346. new damage = read_data(2);
  347.  
  348. if(is_user_alive(id) && is_user_alive(attacker)) {
  349. new XtraDmg = floatround((damage * get_pcvar_float(pcvar[CDAMAGE])) - damage);
  350. if(get_user_health(id)-XtraDmg <= 0) {
  351. gKilledByMonster = true;
  352. set_task(0.3, "fix_scores", id);
  353. }
  354.  
  355. set_user_health(id, get_user_health(id)-XtraDmg);
  356. }
  357. return PLUGIN_CONTINUE;
  358. }
  359.  
  360. public msg_Death() {
  361. if(gKilledByMonster) {
  362. gKilledByMonster = false;
  363. set_msg_arg_int(1, 1, monster);
  364. set_msg_arg_string(4, "knife");
  365. empty_hunger_bar();
  366. }
  367. return PLUGIN_CONTINUE;
  368. }
  369.  
  370. public Event_Death() {
  371. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  372.  
  373. new killer = read_data(1);
  374. new victim = read_data(2);
  375.  
  376. if(killer == monster)
  377. empty_hunger_bar();
  378.  
  379. if(victim == monster) {
  380. set_user_rendering(monster);
  381. remove_task(TASK_VISION+monster);
  382. remove_task(TASK_REGEN+monster);
  383. remove_task(TASK_INVIS+monster);
  384.  
  385. cs_reset_user_model(monster);
  386. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, knife));
  387.  
  388. empty_hunger_bar();
  389.  
  390. cs_set_user_team(monster, CS_TEAM_CT, CS_CT_GIGN);
  391.  
  392. monster = killer;
  393.  
  394. cs_set_user_team(monster, CS_TEAM_T, CS_T_TERROR);
  395. cs_set_user_model(monster, "monster");
  396. set_pev(monster,pev_viewmodel, engfunc(EngFunc_AllocString, claws));
  397.  
  398. if(get_pcvar_num(pcvar[CLIGHTS]))
  399. set_user_vision(monster);
  400.  
  401. new name[32];
  402. get_user_name(killer, name, 31);
  403.  
  404. client_print(0, print_center, "A Monster meghalt! %s az uj Monster!", name);
  405. } else if(get_pcvar_num(pcvar[CLIGHTS])) set_user_vision(victim);
  406. return PLUGIN_CONTINUE;
  407. }
  408.  
  409. public fix_scores(victim) {
  410. set_pev(victim, pev_frags, pev(victim, pev_frags)+1.0);
  411. set_pev(monster, pev_frags, pev(monster, pev_frags)+1.0);
  412.  
  413. // Update killers scorboard with new info
  414. message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
  415. write_byte(monster)
  416. write_short(get_user_frags(monster))
  417. write_short(get_user_deaths(monster))
  418. write_short(0)
  419. write_short(get_user_team(monster))
  420. message_end()
  421.  
  422. // Update victims scoreboard with correct info
  423. message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
  424. write_byte(victim)
  425. write_short(get_user_frags(victim))
  426. write_short(get_user_deaths(victim))
  427. write_short(0)
  428. write_short(get_user_team(victim))
  429. message_end()
  430. }
  431.  
  432. public Event_NewRound() {
  433. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  434.  
  435. told = 0;
  436. if(!selected) return PLUGIN_CONTINUE;
  437. if(!is_user_connected(monster) || !is_user_alive(monster)) return PLUGIN_CONTINUE;
  438.  
  439. if(cs_get_user_team(monster) != CS_TEAM_T) cs_set_user_team(monster, CS_TEAM_T);
  440.  
  441. new num = get_playersnum(1);
  442.  
  443. if(!get_pcvar_num(pcvar[CALC])) {
  444. maxhealth = (25*num)+100;
  445. maxarmor = (25*num)+100;
  446. } else {
  447. maxhealth = get_pcvar_num(pcvar[CALC]);
  448. maxarmor = get_pcvar_num(pcvar[CALC]);
  449. }
  450.  
  451. set_user_health(monster, maxhealth);
  452. set_user_armor(monster, maxarmor);
  453.  
  454. cs_set_user_model(monster, "monster");
  455.  
  456. if(get_pcvar_num(pcvar[CLIGHTS])) {
  457. if(!task_exists(monster+TASK_VISION))
  458. set_user_vision(monster);
  459. } else if(task_exists(monster+TASK_VISION)) remove_task(TASK_VISION+monster);
  460.  
  461. set_user_maxspeed(monster, get_user_maxspeed(monster)+get_pcvar_float(pcvar[CSPEED]));
  462. set_user_gravity(monster, get_pcvar_float(pcvar[CGRAV]));
  463.  
  464. strip_user_weapons(monster);
  465. give_item(monster, "weapon_knife");
  466.  
  467. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, claws));
  468.  
  469. set_task(1.0, "sm_regen_loop", TASK_REGEN);
  470. set_task(random_float(3.0, 14.0), "sm_invis_loop", TASK_INVIS);
  471.  
  472. for(new i = 1; i < MAXPLAYERS; i++) {
  473. if(is_user_connected(i)) {
  474. if((i != monster && cs_get_user_team(i) != CS_TEAM_SPECTATOR) && task_exists(i+TASK_VISION)) remove_task(i+TASK_VISION);
  475.  
  476. if(cs_get_user_team(i) == CS_TEAM_T || cs_get_user_team(i) == CS_TEAM_UNASSIGNED) {
  477. if(i != monster) {
  478. cs_set_user_team(i, CS_TEAM_CT, CS_CT_GIGN);
  479. }
  480. }
  481. }
  482. }
  483. empty_hunger_bar();
  484.  
  485. return PLUGIN_CONTINUE;
  486. }
  487.  
  488. public restart_round() {
  489. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  490.  
  491. server_cmd("sv_restartround 1");
  492.  
  493. return PLUGIN_CONTINUE;
  494. }
  495.  
  496. public _NightVision(id) {
  497. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  498.  
  499. return PLUGIN_HANDLED;
  500. }
  501.  
  502. public event_team_info() {
  503. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  504.  
  505. new id = read_data(1);
  506.  
  507. new team[12];
  508. read_data(2, team, sizeof team - 1);
  509.  
  510. switch(team[0]) {
  511. case 'C' : return PLUGIN_CONTINUE;
  512. case 'T' : {
  513. if(id != monster) {
  514. cs_set_user_team(id, CS_TEAM_CT, CS_CT_GIGN);
  515. }
  516. }
  517. case 'S' : if(get_pcvar_num(pcvar[CLIGHTS])) set_user_vision(id);
  518. }
  519. return PLUGIN_CONTINUE;
  520. }
  521.  
  522. public empty_hunger_bar() {
  523. //takes there status bar and makes it finish
  524. message_begin(MSG_ONE, get_user_msgid("BarTime"), {0,0,0}, monster);
  525. write_byte(0);
  526. write_byte(0);
  527. message_end();
  528.  
  529. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  530.  
  531. //starts a new one!
  532. message_begin(MSG_ONE, get_user_msgid("BarTime"), {0,0,0}, monster);
  533. write_byte(get_pcvar_num(pcvar[CTIME]));
  534. write_byte(0);
  535. message_end();
  536.  
  537. cached_gametime = get_systime();
  538.  
  539. told = 0;
  540. return PLUGIN_CONTINUE;
  541. }
  542.  
  543. public client_PreThink(id) {
  544. if(!get_pcvar_num(pcvar[CMOD])) return PLUGIN_CONTINUE;
  545.  
  546. if(id != monster) return PLUGIN_CONTINUE;
  547.  
  548. curr_gametime = get_systime();
  549. new passed = curr_gametime-cached_gametime;
  550. new left = get_pcvar_num(pcvar[CTIME])-passed;
  551.  
  552. switch(told) {
  553. case 0: {
  554. if(left <= get_pcvar_num(pcvar[CTIME])/2 && left > get_pcvar_num(pcvar[CTIME])/4) {
  555. client_print(monster, print_center, "You must eat soon!!");
  556. told = 1;
  557. }
  558. }
  559. case 1: {
  560. if(left <= get_pcvar_num(pcvar[CTIME])/4 && left > 0) {
  561. client_print(monster, print_center, "Te vagy a HALAL!!");
  562. told = 2;
  563. }
  564. }
  565. case 2: {
  566. if(left <= 0) {
  567. told = 0;
  568. client_print(monster, print_center, "Ehen haltal...");
  569. user_kill(monster);
  570.  
  571. remove_task(TASK_VISION+monster);
  572. remove_task(TASK_REGEN+monster);
  573. remove_task(TASK_INVIS+monster);
  574. set_user_rendering(monster);
  575.  
  576. empty_hunger_bar();
  577.  
  578. cs_set_user_team(monster, CS_TEAM_CT, CS_CT_GIGN);
  579.  
  580. cs_reset_user_model(monster);
  581. set_pev(monster, pev_viewmodel, engfunc(EngFunc_AllocString, knife));
  582.  
  583. client_print(0, print_chat, "[MM] A Monster Ehenhalt!! A kovetkezo 2 masodperc mulva kivalasztodik!");
  584. set_task(2.0, "choose_monster", TASK_CHOOSE);
  585. }
  586. }
  587. }
  588. return PLUGIN_CONTINUE;
  589. }
  590.  
  591. public client_disconnect(id) {
  592. if(id == monster) {
  593. _choose_monster();
  594. }
  595. }
  596.  
  597. //To block Objectives...From gungame!
  598.  
  599. // block hostages from appearing on radar if we disabled objectives
  600. public message_hostagepos(msg_id,msg_dest,msg_entity) {
  601. if(!get_pcvar_num(pcvar[COBJEC]))
  602. return PLUGIN_CONTINUE;
  603.  
  604. return PLUGIN_HANDLED;
  605. }
  606.  
  607. // block dropped the bomb message if we disabled objectives
  608. public message_textmsg(msg_id,msg_dest,msg_entity) {
  609. if(!bombMap || !get_pcvar_num(pcvar[COBJEC]))
  610. return PLUGIN_CONTINUE;
  611.  
  612. static message[16];
  613. get_msg_arg_string(2, message, 15);
  614.  
  615. if(equal(message,"#Game_bomb_drop"))
  616. return PLUGIN_HANDLED;
  617.  
  618. return PLUGIN_CONTINUE;
  619. }
  620.  
  621. // block c4 ammo message if we disabled objectives
  622. public message_ammopickup(msg_id,msg_dest,msg_entity) {
  623. if(!bombMap || !get_pcvar_num(pcvar[COBJEC]))
  624. return PLUGIN_CONTINUE;
  625.  
  626. if(get_msg_arg_int(1) == 14) // C4
  627. return PLUGIN_HANDLED;
  628.  
  629. return PLUGIN_CONTINUE;
  630. }
  631.  
  632. // remove c4 if we disabled objectives
  633. public message_weappickup(msg_id,msg_dest,msg_entity) {
  634. if(!bombMap || !get_pcvar_num(pcvar[COBJEC]))
  635. return PLUGIN_CONTINUE;
  636.  
  637. if(get_msg_arg_int(1) == CSW_C4) {
  638. set_task(0.1, "strip_c4", msg_entity);
  639. return PLUGIN_HANDLED;
  640. }
  641.  
  642. return PLUGIN_CONTINUE;
  643. }
  644.  
  645. public message_bombdrop(msg_id,msg_dest,msg_entity) {
  646. if(!get_pcvar_num(pcvar[COBJEC]))
  647. return PLUGIN_HANDLED;
  648.  
  649. return PLUGIN_CONTINUE;
  650. }
  651.  
  652. public message_scenario(msg_id,msg_dest,msg_entity) {
  653. // block hostage display if we disabled objectives
  654. if(get_msg_args() > 1 && get_pcvar_num(pcvar[COBJEC])) {
  655. new sprite[8];
  656. get_msg_arg_string(2, sprite, 7);
  657.  
  658. if(equal(sprite,"hostage"))
  659. return PLUGIN_HANDLED;
  660. }
  661.  
  662. return PLUGIN_CONTINUE;
  663. }
  664.  
  665. // move the hostages so that CTs can't get to them
  666. public move_hostages() {
  667. new ent;
  668. while((ent = fm_find_ent_by_class(ent,"hostage_entity")) != 0)
  669. set_pev(ent, pev_origin, Float:{8192.0,8192.0,8192.0});
  670. }
  671.  
  672. // delay, since weappickup is slightly before we actually get the weapon
  673. public strip_c4(id) {
  674. fm_strip_user_gun(id, CSW_C4);
  675. }
  676.