HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <engine>
  5. #include <hamsandwich>
  6. #include <zombieplague>
  7. #include <xs>
  8.  
  9. #define PLUGIN "[ZP] Bazooka + new modes"
  10. #define VERSION "1.0"
  11. #define AUTHOR "Vechta"
  12.  
  13. // Set " // " before custom models if you want to use standart Rpg models
  14. #define CUSTOM_MODEL
  15.  
  16. // Set " // " before if you dont want that Admin get free Bazooka
  17. //#define ADMIN_BAZOOKA
  18.  
  19. #if defined ADMIN_BAZOOKA
  20. #define BAZOOKA_ACCESS ADMIN_LEVEL_H
  21. #endif
  22.  
  23. #define TASK_SEEK_CATCH 9000
  24. #define fm_is_valid_ent(%1) pev_valid(%1)
  25.  
  26. #if defined CUSTOM_MODEL
  27. static const mrocket[] = "models/zombie_plague/rpgrocket_vechta.mdl";
  28. static const mrpg_w[] = "models/zombie_plague/w_rpg_vechta.mdl";
  29. static const mrpg_v[] = "models/zombie_plague/v_rpg_vechta.mdl";
  30. static const mrpg_p[] = "models/zombie_plague/p_rpg_vechta.mdl";
  31. #else
  32. static const mrocket[] = "models/rpgrocket.mdl";
  33. static const mrpg_w[] = "models/w_rpg.mdl";
  34. static const mrpg_v[] = "models/v_rpg.mdl";
  35. static const mrpg_p[] = "models/p_rpg.mdl";
  36. #endif
  37.  
  38. static const sfire[] = "weapons/rocketfire1.wav";
  39. static const sfly[] = "weapons/nuke_fly.wav";
  40. static const shit[] = "weapons/mortarhit.wav";
  41. static const spickup[] = "items/gunpickup2.wav";
  42. static const reload[] = "items/9mmclip2.wav";
  43.  
  44. // Time between can witch to next mode (Thanks to Nihilanth)
  45. #define SWITCH_TIME 0.5
  46.  
  47. // Register the item
  48. new g_itemid;
  49.  
  50. // Cvars
  51. new pcvar_delay, pcvar_maxdmg, pcvar_radius, pcvar_map, pcvar_speed,
  52. pcvar_dmgforpacks, pcvar_award, pcvar_count, pcvar_speed_homing,
  53. pcvar_speed_camera
  54.  
  55. // Sprites
  56. new rocketsmoke, white
  57.  
  58. // Variables
  59. new dmgcount[33], user_controll[33], mode[33]
  60.  
  61. // Bools
  62. new bool:g_hasbazooka[33], bool:CanShoot[33]
  63.  
  64. // Floats
  65. new Float:lastSwitchTime[33]
  66.  
  67. // Messages
  68. new gmsg_screenshake, gmsg_death, gmsg_damage, gmsgBarTime
  69.  
  70. // Others
  71. new Saytxt
  72.  
  73. public plugin_init()
  74. {
  75. register_plugin(PLUGIN, VERSION, AUTHOR)
  76.  
  77. // Cvars
  78. pcvar_delay = register_cvar("zp_bazooka_delay", "10")
  79. pcvar_maxdmg = register_cvar("zp_bazooka_damage", "1800")
  80. pcvar_radius = register_cvar("zp_bazooka_radius", "250")
  81. pcvar_map = register_cvar("zp_bazooka_map", "0")
  82. pcvar_dmgforpacks = get_cvar_pointer("zp_human_damage_reward")
  83. pcvar_award = register_cvar("zp_bazooka_awardpacks", "1")
  84. pcvar_speed = register_cvar("zp_bazooka_speed", "800")
  85. pcvar_speed_homing = register_cvar("zp_bazooka_homing_speed", "350")
  86. pcvar_speed_camera = register_cvar("zp_bazooka_camera_speed", "300")
  87. pcvar_count = register_cvar("zp_bazooka_count", "4")
  88.  
  89. // Register the Extra Item
  90. g_itemid = zp_register_extra_item("Bazooka \r[New Modes]", 40, ZP_TEAM_HUMAN)
  91.  
  92. // Events
  93. register_event("CurWeapon","switch_to_knife","be","1=1","2=29");
  94. register_event("HLTV", "event_HLTV", "a", "1=0", "2=0")
  95.  
  96. // Clcmd's
  97. register_clcmd("drop", "drop_call");
  98. register_concmd("zp_bazooka", "give_bazooka", ADMIN_BAN, "<name/@all> egy jatekosnak tudsz Bazookat adni. Add meg a jatekos nevet.")
  99.  
  100. // Forwards
  101. register_forward(FM_PlayerPreThink, "client_PreThink");
  102. register_forward(FM_Touch, "fw_touch");
  103. register_forward(FM_CmdStart, "fw_CmdStart")
  104.  
  105. // Msgid >.<
  106. gmsg_screenshake = get_user_msgid("ScreenShake");
  107. gmsg_death = get_user_msgid("DeathMsg");
  108. gmsg_damage = get_user_msgid("Damage");
  109. Saytxt = get_user_msgid("SayText")
  110. gmsgBarTime = get_user_msgid( "BarTime" )
  111.  
  112. // Check for Admin on ban
  113. #if defined ADMIN_BAZOOKA
  114. RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
  115. #endif
  116. }
  117.  
  118. public client_putinserver(id)
  119. {
  120. mode[id] = 1
  121. g_hasbazooka[id] = false
  122. CanShoot[id] = false
  123. }
  124.  
  125. public plugin_cfg()
  126. {
  127. new cfgdirecction[32]
  128. get_configsdir(cfgdirecction, sizeof cfgdirecction - 1);
  129.  
  130. server_cmd("exec %s/zp_bazooka_modes.cfg", cfgdirecction)
  131. }
  132.  
  133. public event_HLTV()
  134. {
  135. new rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
  136.  
  137. while( rpg_temp > 0)
  138. {
  139. engfunc(EngFunc_RemoveEntity, rpg_temp);
  140. rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
  141. }
  142.  
  143. if ( get_pcvar_num(pcvar_map) ) return;
  144.  
  145. for( new id = 1; id <= 32; id++ )
  146. {
  147. g_hasbazooka[id] = false;
  148.  
  149. #if defined ADMIN_BAZOOKA
  150. set_task(1.0, "AdminBazooka", id)
  151. #endif
  152. }
  153. }
  154.  
  155. public zp_extra_item_selected(player, itemid)
  156. {
  157. if (itemid == g_itemid)
  158. {
  159. if ( g_hasbazooka[player] )
  160. {
  161. bazooka_message(player, "^x04[ZP]^x01 Neked mar van Bazooka!");
  162. return ZP_PLUGIN_HANDLED
  163. }
  164. else if (baz_count() > get_pcvar_num(pcvar_count))
  165. {
  166. bazooka_message(player, "^x04[ZP]^x01 Sajnalom, de most nem lehet nalad Bazooka!");
  167. return ZP_PLUGIN_HANDLED;
  168. }
  169. else
  170. {
  171. g_hasbazooka[player] = true;
  172. CanShoot[player] = true;
  173. bazooka_message(player, "^x04[ZP]^x01 Te megvetted a Bazookat! [Jobb egergomb: Loves modok] [Ujratoltesi ido:^x04 %2.1f^x01 masodperc]", get_pcvar_float(pcvar_delay))
  174. emit_sound(player, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  175. }
  176. }
  177. return PLUGIN_CONTINUE
  178. }
  179.  
  180. public give_bazooka(id,level,cid)
  181. {
  182. if (!cmd_access(id,level,cid,1))
  183. {
  184. console_print(id,"Neked nincs elerhetoseged ehhez a parancshoz.");
  185. return;
  186. }
  187. if (read_argc() > 2)
  188. {
  189. console_print(id,"Too many arguments supplied.");
  190. return;
  191. }
  192.  
  193. new arg1[32];
  194. read_argv(1, arg1, sizeof(arg1) - 1);
  195. new player = cmd_target(id, arg1, 10);
  196.  
  197. if ( !player )
  198. {
  199. if ( arg1[0] == '@' )
  200. {
  201. for ( new i = 1; i <= 32; i++ )
  202. {
  203. if ( is_user_connected(i) && !g_hasbazooka[i] && !zp_get_user_zombie(i) )
  204. {
  205. g_hasbazooka[id] = true
  206. CanShoot[id] = true
  207. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  208. bazooka_message(player, "^x04[ZP]^x01 Te megvetted a Bazookat! [Jobb egergomb: Loves modok] [Ujratoltesi ido:^x04 %2.1f^x01 masodperc]", get_pcvar_float(pcvar_delay))
  209. }
  210. }
  211. }
  212. else
  213. {
  214. client_print(id, print_center, "[ZP] No Such Player/Team");
  215. return;
  216. }
  217. }
  218. else if ( !g_hasbazooka[player] && !zp_get_user_zombie(player) )
  219. {
  220. g_hasbazooka[id] = true
  221. CanShoot[id] = true
  222. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  223. bazooka_message(player, "^x04[ZP]^x01 Te megvetted a Bazookat! [Jobb egergomb: Loves modok] [Ujratoltesi ido:^x04 %2.1f^x01 masodperc]", get_pcvar_float(pcvar_delay))
  224. }
  225. }
  226.  
  227. public zp_user_infected_post(id, infector)
  228. {
  229. if ( g_hasbazooka[id] )
  230. {
  231. drop_rpg_temp(id);
  232. }
  233. }
  234.  
  235. public zp_user_humanized_post(id, survivor)
  236. {
  237. #if defined ADMIN_BAZOOKA
  238. if (get_user_flags(id) & BAZOOKA_ACCESS)
  239. {
  240. g_hasbazooka[id] = true
  241. CanShoot[id] = true
  242. }
  243. #endif
  244. }
  245.  
  246. public plugin_precache()
  247. {
  248. precache_model(mrocket);
  249.  
  250. precache_model(mrpg_w);
  251. precache_model(mrpg_v);
  252. precache_model(mrpg_p);
  253.  
  254. precache_sound(sfire);
  255. precache_sound(sfly);
  256. precache_sound(shit);
  257. precache_sound(spickup);
  258. precache_sound(reload);
  259.  
  260. rocketsmoke = precache_model("sprites/smoke.spr");
  261. white = precache_model("sprites/white.spr");
  262. }
  263.  
  264. public switch_to_knife(id)
  265. {
  266. if ( !is_user_alive(id) ) return;
  267.  
  268. if ( g_hasbazooka[id] && CanShoot[id] )
  269. {
  270. set_pev(id, pev_viewmodel2, mrpg_v);
  271. set_pev(id, pev_weaponmodel2, mrpg_p);
  272. }
  273. }
  274.  
  275. fire_rocket(id)
  276. {
  277. if (!CanShoot[id] ) return;
  278.  
  279. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  280.  
  281. if (!pev_valid(ent) || !is_user_alive(id) )
  282. return;
  283.  
  284. new data[1]
  285. data[0] = id
  286. CanShoot[id] = false;
  287. set_task(0.0 + get_pcvar_num(pcvar_delay), "rpg_reload", id);
  288. engclient_cmd(id, "weapon_knife");
  289.  
  290. new Float:StartOrigin[3], Float:Angle[3];
  291. pev(id, pev_origin, StartOrigin);
  292. pev(id, pev_angles, Angle);
  293.  
  294. set_pev(ent, pev_classname, "rpgrocket");
  295. engfunc(EngFunc_SetModel, ent, mrocket);
  296. set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
  297. set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
  298. engfunc(EngFunc_SetOrigin, ent, StartOrigin);
  299. set_pev(ent, pev_angles, Angle);
  300.  
  301.  
  302. set_pev(ent, pev_solid, 2);
  303. set_pev(ent, pev_movetype, 5);
  304. set_pev(ent, pev_owner, id);
  305.  
  306. new Float:fAim[3],Float:fAngles[3],Float:fOrigin[3]
  307. velocity_by_aim(id,64,fAim)
  308. vector_to_angle(fAim,fAngles)
  309. pev(id,pev_origin,fOrigin)
  310.  
  311. fOrigin[0] += fAim[0]
  312. fOrigin[1] += fAim[1]
  313. fOrigin[2] += fAim[2]
  314.  
  315. new Float:nVelocity[3];
  316. if (mode[id] == 1)
  317. velocity_by_aim(id, get_pcvar_num(pcvar_speed), nVelocity);
  318. else if (mode[id] == 2)
  319. velocity_by_aim(id, get_pcvar_num(pcvar_speed_homing), nVelocity);
  320. else if (mode[id] == 3)
  321. velocity_by_aim(id, get_pcvar_num(pcvar_speed_camera), nVelocity);
  322.  
  323. set_pev(ent, pev_velocity, nVelocity);
  324. entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_BRIGHTLIGHT)
  325.  
  326.  
  327. emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  328. emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  329.  
  330. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  331. write_byte(22);
  332. write_short(ent);
  333. write_short(rocketsmoke);
  334. write_byte(50);
  335. write_byte(3);
  336. write_byte(255);
  337. write_byte(255);
  338. write_byte(255);
  339. write_byte(255);
  340. message_end();
  341.  
  342. if (mode[id] == 2)
  343. set_task(0.5, "rpg_seek_follow", ent + TASK_SEEK_CATCH, _, _, "b");
  344. else if (mode[id] == 3)
  345. {
  346. if (is_user_alive(id))
  347. {
  348. entity_set_int(ent, EV_INT_rendermode, 1)
  349. attach_view(id, ent)
  350. user_controll[id] = ent
  351. }
  352. }
  353. launch_push(id, 130)
  354. Progress_status(id, get_pcvar_num(pcvar_delay))
  355. }
  356.  
  357. public rpg_reload(id)
  358. {
  359. if (!g_hasbazooka[id]) return;
  360.  
  361. if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id);
  362. {
  363. CanShoot[id] = true
  364. client_print(id, print_center, "Bazooka ujratoltve!")
  365. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  366. }
  367. }
  368.  
  369. public fw_touch(ent, touched)
  370. {
  371. if ( !pev_valid(ent) ) return FMRES_IGNORED;
  372.  
  373. static entclass[32];
  374. pev(ent, pev_classname, entclass, 31);
  375.  
  376. if ( equali(entclass, "rpg_temp") )
  377. {
  378. static touchclass[32];
  379. pev(touched, pev_classname, touchclass, 31);
  380. if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
  381.  
  382. if( !is_user_alive(touched) || zp_get_user_zombie(touched) ) return FMRES_IGNORED;
  383.  
  384. emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
  385. g_hasbazooka[touched] = true;
  386.  
  387. engfunc(EngFunc_RemoveEntity, ent);
  388.  
  389. return FMRES_HANDLED;
  390. }
  391. else if ( equali(entclass, "rpgrocket") )
  392. {
  393. new Float:EndOrigin[3];
  394. pev(ent, pev_origin, EndOrigin);
  395. new NonFloatEndOrigin[3];
  396. NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
  397. NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
  398. NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
  399.  
  400. emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  401. emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  402.  
  403. make_explosion_effects(ent, 1, 1, 0, 0, 1)
  404.  
  405. new maxdamage = get_pcvar_num(pcvar_maxdmg);
  406. new damageradius = get_pcvar_num(pcvar_radius);
  407.  
  408. new PlayerPos[3], distance, damage;
  409. for (new i = 1; i <= 32; i++)
  410. {
  411. if ( is_user_alive(i))
  412. {
  413. new id = pev(ent, pev_owner)
  414.  
  415. if ((zp_get_user_zombie(id)) || ((zp_get_user_nemesis(id))))
  416. if ((zp_get_user_zombie(i)) || (zp_get_user_nemesis(i))) continue;
  417.  
  418. if ((!zp_get_user_zombie(id)) && (!zp_get_user_nemesis(id)))
  419. if ((!zp_get_user_zombie(i)) && (!zp_get_user_nemesis(i))) continue;
  420.  
  421. get_user_origin(i, PlayerPos);
  422.  
  423. distance = get_distance(PlayerPos, NonFloatEndOrigin);
  424.  
  425. if (distance <= damageradius)
  426. {
  427. make_explosion_effects(i, 0, 0, 0, 1, 0)
  428. damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));
  429. new attacker = pev(ent, pev_owner);
  430.  
  431. baz_damage(i, attacker, damage, "bazooka");
  432. }
  433. }
  434. }
  435. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  436. write_byte(21);
  437. write_coord(NonFloatEndOrigin[0]);
  438. write_coord(NonFloatEndOrigin[1]);
  439. write_coord(NonFloatEndOrigin[2]);
  440. write_coord(NonFloatEndOrigin[0]);
  441. write_coord(NonFloatEndOrigin[1]);
  442. write_coord(NonFloatEndOrigin[2] + 320);
  443. write_short(white);
  444. write_byte(0);
  445. write_byte(0);
  446. write_byte(16);
  447. write_byte(128);
  448. write_byte(0);
  449. write_byte(255);
  450. write_byte(255);
  451. write_byte(192);
  452. write_byte(128);
  453. write_byte(0);
  454. message_end();
  455.  
  456. attach_view(entity_get_edict(ent, EV_ENT_owner), entity_get_edict(ent, EV_ENT_owner))
  457. user_controll[entity_get_edict(ent, EV_ENT_owner)] = 0
  458. remove_entity(ent)
  459.  
  460. return FMRES_HANDLED;
  461. }
  462. return FMRES_IGNORED;
  463. }
  464.  
  465. public drop_call(id)
  466. {
  467. if ( g_hasbazooka[id] && get_user_weapon(id) == CSW_KNIFE )
  468. {
  469. drop_rpg_temp(id);
  470. return PLUGIN_HANDLED;
  471. }
  472. return PLUGIN_CONTINUE;
  473. }
  474.  
  475. drop_rpg_temp(id)
  476. {
  477. new Float:fAim[3] , Float:fOrigin[3];
  478. velocity_by_aim(id , 64 , fAim);
  479. pev(id , pev_origin , fOrigin);
  480.  
  481. fOrigin[0] += fAim[0];
  482. fOrigin[1] += fAim[1];
  483.  
  484. new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  485.  
  486. set_pev(rpg, pev_classname, "rpg_temp");
  487. engfunc(EngFunc_SetModel, rpg, mrpg_w);
  488.  
  489. set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
  490. set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
  491.  
  492. set_pev(rpg , pev_solid , 1);
  493. set_pev(rpg , pev_movetype , 6);
  494.  
  495. engfunc(EngFunc_SetOrigin, rpg, fOrigin);
  496.  
  497. g_hasbazooka[id] = false;
  498. }
  499.  
  500. baz_damage(id, attacker, damage, weaponDescription[])
  501. {
  502. if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
  503. if ( damage <= 0 ) return;
  504.  
  505. new userHealth = get_user_health(id);
  506.  
  507. if (userHealth - damage <= 0 )
  508. {
  509. dmgcount[attacker] += userHealth - damage;
  510. set_msg_block(gmsg_death, BLOCK_SET);
  511. ExecuteHamB(Ham_Killed, id, attacker, 2);
  512. set_msg_block(gmsg_death, BLOCK_NOT);
  513.  
  514.  
  515. message_begin(MSG_BROADCAST, gmsg_death);
  516. write_byte(attacker);
  517. write_byte(id);
  518. write_byte(0);
  519. write_string(weaponDescription);
  520. message_end();
  521.  
  522. set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
  523.  
  524. new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
  525.  
  526. get_user_name(attacker, kname, 31);
  527. get_user_team(attacker, kteam, 9);
  528. get_user_authid(attacker, kauthid, 31);
  529.  
  530. get_user_name(id, vname, 31);
  531. get_user_team(id, vteam, 9);
  532. get_user_authid(id, vauthid, 31);
  533.  
  534. log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  535. kname, get_user_userid(attacker), kauthid, kteam,
  536. vname, get_user_userid(id), vauthid, vteam, weaponDescription);
  537. }
  538. else
  539. {
  540. dmgcount[attacker] += damage;
  541. new origin[3];
  542. get_user_origin(id, origin);
  543.  
  544. message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
  545. write_byte(21);
  546. write_byte(20);
  547. write_long(DMG_BLAST);
  548. write_coord(origin[0]);
  549. write_coord(origin[1]);
  550. write_coord(origin[2]);
  551. message_end();
  552.  
  553. set_pev(id, pev_health, pev(id, pev_health) - float(damage));
  554. }
  555. if ( !get_pcvar_num(pcvar_award) ) return;
  556.  
  557. new breaker = get_pcvar_num(pcvar_dmgforpacks);
  558.  
  559. if ( dmgcount[attacker] > breaker )
  560. {
  561. new temp = dmgcount[attacker] / breaker
  562. if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible
  563. dmgcount[attacker] -= temp * breaker;
  564. zp_set_user_ammo_packs( attacker, zp_get_user_ammo_packs(attacker) + temp );
  565. }
  566. }
  567.  
  568. public rpg_seek_follow(ent)
  569. {
  570. ent -= TASK_SEEK_CATCH
  571.  
  572. new Float: shortest_distance = 500.0;
  573. new NearestPlayer = 0;
  574.  
  575. if (pev_valid(ent))
  576. {
  577. static entclass[32];
  578. pev(ent, pev_classname, entclass, 31);
  579.  
  580. if ( equali(entclass, "rpgrocket") )
  581. {
  582. new id_owner = pev(ent, pev_owner)
  583. new iClient[32], livePlayers, iNum;
  584. get_players(iClient, livePlayers, "a");
  585.  
  586. for(iNum = 0; iNum < livePlayers; iNum++)
  587. {
  588. if ( is_user_alive(iClient[iNum]) && pev_valid(ent) )
  589. {
  590. if ( id_owner != iClient[iNum] && zp_get_user_zombie(iClient[iNum]) )
  591. {
  592. new Float:PlayerOrigin[3], Float:RocketOrigin[3]
  593. pev(ent, pev_origin, RocketOrigin)
  594. pev(iClient[iNum], pev_origin, PlayerOrigin)
  595.  
  596. new Float: distance = get_distance_f(PlayerOrigin, RocketOrigin)
  597.  
  598. if ( distance <= shortest_distance )
  599. {
  600. shortest_distance = distance;
  601. NearestPlayer = iClient[iNum];
  602. }
  603. }
  604. }
  605. }
  606. if (NearestPlayer > 0)
  607. {
  608. entity_set_follow(ent, NearestPlayer, 250.0)
  609. }
  610. }
  611. }
  612. }
  613.  
  614. stock entity_set_follow(entity, target, Float:speed)
  615. {
  616. if(!fm_is_valid_ent(entity) || !fm_is_valid_ent(target))
  617. return 0
  618.  
  619. new Float:entity_origin[3], Float:target_origin[3]
  620. pev(entity, pev_origin, entity_origin)
  621. pev(target, pev_origin, target_origin)
  622.  
  623. new Float:diff[3]
  624. diff[0] = target_origin[0] - entity_origin[0]
  625. diff[1] = target_origin[1] - entity_origin[1]
  626. diff[2] = target_origin[2] - entity_origin[2]
  627.  
  628. new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))
  629.  
  630. new Float:velocity[3]
  631. velocity[0] = diff[0] * (speed / length)
  632. velocity[1] = diff[1] * (speed / length)
  633. velocity[2] = diff[2] * (speed / length)
  634.  
  635. set_pev(entity, pev_velocity, velocity)
  636.  
  637. return 1
  638. }
  639.  
  640. public fw_CmdStart(id, UC_Handle, Seed)
  641. {
  642. if(!is_user_alive(id) || !g_hasbazooka[id]) return
  643.  
  644. static Button, OldButton
  645. OldButton = get_user_oldbutton(id)
  646.  
  647. Button = get_uc(UC_Handle, UC_Buttons)
  648.  
  649. if (Button & IN_ATTACK)
  650. {
  651. if (!CanShoot[id] || (OldButton & IN_ATTACK2)) return;
  652.  
  653. if ( get_user_weapon(id) == CSW_KNIFE )
  654. fire_rocket(id);
  655. }
  656. else if (Button & IN_ATTACK2 && get_user_weapon(id) == CSW_KNIFE)
  657. {
  658. if ( get_gametime ( ) - lastSwitchTime [ id ] < SWITCH_TIME || (OldButton & IN_ATTACK2)) return
  659.  
  660. if (is_user_alive(id))
  661. {
  662. switch(mode[id])
  663. {
  664. case 1:
  665. {
  666. mode[id] = 2
  667. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  668. client_print(id, print_center, "Hokoveto tuzelesi mod")
  669. }
  670. case 2:
  671. {
  672. mode[id] = 3
  673. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  674. client_print(id, print_center, "Kamera tuzelesi mod")
  675. }
  676. case 3:
  677. {
  678. mode[id] = 1
  679. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  680. client_print(id, print_center, "Normal tuzelesi mod")
  681. }
  682. }
  683. lastSwitchTime [ id ] = get_gametime ( )
  684. }
  685. }
  686. else if (user_controll[id])
  687. {
  688. new RocketEnt = user_controll[id]
  689.  
  690. if (is_valid_ent(RocketEnt))
  691. {
  692. new Float:Velocity[3]
  693. VelocityByAim(id, 500, Velocity)
  694. entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)
  695.  
  696. new Float:NewAngle[3]
  697. entity_get_vector(id, EV_VEC_v_angle, NewAngle)
  698. entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)
  699. }
  700. else
  701. {
  702. attach_view(id, id)
  703. }
  704. }
  705. }
  706.  
  707. public client_connect(id)
  708. g_hasbazooka[id] = false
  709.  
  710. #if defined ADMIN_BAZOOKA
  711. public fw_PlayerSpawn(id)
  712. set_task(1.0, "AdminBazooka", id)
  713. #endif
  714.  
  715. #if defined ADMIN_BAZOOKA
  716. public AdminBazooka(id)
  717. {
  718. if (g_hasbazooka[id] || zp_get_user_nemesis(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id))
  719. return;
  720.  
  721. if (is_user_alive(id) && (get_user_flags(id) & BAZOOKA_ACCESS))
  722. {
  723. g_hasbazooka[id] = true
  724. CanShoot[id] = true
  725. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  726. bazooka_message(id, "^x04[ZP]^x01 Te megvetted a Bazookat! [Jobb egergomb: Loves modok] [Ujratoltesi ido:^x04 %2.1f^x01 masodperc]", get_pcvar_float(pcvar_delay))
  727. }
  728. }
  729. #endif
  730.  
  731. stock launch_push(id, velamount)
  732. {
  733. static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  734.  
  735. velocity_by_aim(id, -velamount, flNewVelocity)
  736.  
  737. get_user_velocity(id, flCurrentVelocity)
  738. xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  739.  
  740. set_user_velocity(id, flNewVelocity)
  741. }
  742.  
  743. baz_count()
  744. {
  745. new i, count = 0;
  746.  
  747. for(i = 1; i < 33; i++)
  748. {
  749. if(g_hasbazooka[i])
  750. count++;
  751. }
  752. return count;
  753. }
  754.  
  755. stock bazooka_message(const id, const input[], any:...)
  756. {
  757. new count = 1, players[32]
  758.  
  759. static msg[191]
  760. vformat(msg,190,input,3)
  761.  
  762. replace_all(msg,190,"/g","^4")
  763. replace_all(msg,190,"/y","^1")
  764. replace_all(msg,190,"/ctr","^3")
  765.  
  766. if (id) players[0] = id; else get_players(players,count,"ch")
  767.  
  768. for (new i = 0; i < count; i++)
  769. if (is_user_connected(players[i]))
  770. {
  771. message_begin(MSG_ONE_UNRELIABLE, Saytxt, _, players[i])
  772. write_byte(players[i])
  773. write_string(msg)
  774. message_end()
  775. }
  776. }
  777.  
  778. stock make_explosion_effects(index, explosion, decal, smoke, shake, texplo)
  779. {
  780. new Float:fOrigin[3];
  781. new iOrigin[3]
  782. pev(index, pev_origin, fOrigin);
  783. FVecIVec(fOrigin,iOrigin);
  784.  
  785. if(explosion)
  786. {
  787. message_begin(MSG_ALL ,SVC_TEMPENTITY)
  788. write_byte(TE_EXPLOSION)
  789. write_coord(iOrigin[0])
  790. write_coord(iOrigin[1])
  791. write_coord(iOrigin[2])
  792. write_short(explosion) // sprite index
  793. write_byte(65) // scale in 0.1's
  794. write_byte(10) // framerate
  795. write_byte(0) // flags
  796. message_end()
  797. }
  798. if(decal)
  799. {
  800. // Create the burn decal
  801. message_begin(MSG_ALL, SVC_TEMPENTITY)
  802. write_byte(TE_GUNSHOTDECAL)
  803. write_coord(iOrigin[0])
  804. write_coord(iOrigin[1])
  805. write_coord(iOrigin[2])
  806. write_short(0)
  807. write_byte(random_num(46,48)) // decal
  808. message_end()
  809. }
  810. if(smoke)
  811. {
  812. message_begin(MSG_ALL ,SVC_TEMPENTITY)
  813. write_byte(TE_SMOKE)
  814. write_coord(iOrigin[0])
  815. write_coord(iOrigin[1])
  816. write_coord(iOrigin[2])
  817. write_short(rocketsmoke) // sprite index
  818. write_byte(65) // scale in 0.1's
  819. write_byte(3) // framerate
  820. message_end()
  821. }
  822. if(shake)
  823. {
  824. message_begin(MSG_ALL, gmsg_screenshake, {0,0,0}, index)
  825. write_short(1<<14) // Amount
  826. write_short(1<<14) // Duration
  827. write_short(1<<14) // Frequency
  828. message_end()
  829. }
  830. if(texplo)
  831. {
  832. message_begin(MSG_ALL ,SVC_TEMPENTITY)
  833. write_byte(TE_TAREXPLOSION)
  834. write_coord(iOrigin[0])
  835. write_coord(iOrigin[1])
  836. write_coord(iOrigin[2])
  837. message_end()
  838. }
  839. }
  840.  
  841. public Progress_status( const id, const duration )
  842. {
  843. message_begin( MSG_ONE, gmsgBarTime, _, id )
  844. write_short( duration )
  845. message_end()
  846. }
  847.