hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.23. 11:28



Jelenlévő felhasználók

Jelenleg 223 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 222 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 8 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Bazooka
HozzászólásElküldve: 2013.07.07. 16:21 
Offline
Félisten

Csatlakozott: 2012.06.19. 15:12
Hozzászólások: 926
Megköszönt másnak: 109 alkalommal
Megköszönték neki: 31 alkalommal
Valaki beálitaná ebbe a bazookába hogy admin ne kapjon ingyen minden körben.
SMA Forráskód: [ Mindet kijelol ]
  1. /* Try it please */
  2. #include <amxmodx>
  3. #include <amxmisc>
  4. #include <fakemeta>
  5. #include <engine>
  6. #include <hamsandwich>
  7. #include <xs>
  8. #include <zp50_core>
  9. #include <zp50_items>
  10. #include <zp50_class_nemesis>
  11. #include <zp50_ammopacks>
  12. #include <zp50_class_survivor>
  13.  
  14. #define PLUGIN "[ZP] Bazooka + new modes"
  15. #define VERSION "1.6"
  16. #define AUTHOR "Vechta, Snaker Beatter, JoKeR LauGh, isaac999"
  17.  
  18. // Set " // " before custom models if you want to use standart Rpg models
  19. //#define CUSTOM_MODEL
  20.  
  21. // Set " // " before if you dont want that Admin get free Bazooka
  22. #define ADMIN_BAZOOKA
  23.  
  24. #if defined ADMIN_BAZOOKA
  25. #define BAZOOKA_ACCESS ADMIN_LEVEL_H
  26. #endif
  27.  
  28. #define TASK_SEEK_CATCH 9000
  29. #define fm_is_valid_ent(%1) pev_valid(%1)
  30.  
  31. #if defined CUSTOM_MODEL
  32. static const mrocket[] = "models/zombie_plague/rpgrocket_vechta.mdl";
  33. static const mrpg_w[] = "models/zombie_plague/w_rpg_vechta.mdl";
  34. static const mrpg_v[] = "models/zombie_plague/v_rpg_vechta.mdl";
  35. static const mrpg_p[] = "models/zombie_plague/p_rpg_vechta.mdl";
  36. #else
  37. static const mrocket[] = "models/rpgrocket.mdl";
  38. static const mrpg_w[] = "models/w_rpg.mdl";
  39. static const mrpg_v[] = "models/v_rpg.mdl";
  40. static const mrpg_p[] = "models/p_rpg.mdl";
  41. #endif
  42.  
  43. static const sfire[] = "weapons/rocketfire1.wav";
  44. static const sfly[] = "weapons/nuke_fly.wav";
  45. static const shit[] = "weapons/mortarhit.wav";
  46. static const spickup[] = "items/gunpickup2.wav";
  47. static const reload[] = "items/9mmclip2.wav";
  48.  
  49. // Time between can witch to next mode (Thanks to Nihilanth)
  50. #define SWITCH_TIME 0.5
  51.  
  52. // Register the item
  53. new g_itemid;
  54.  
  55. // Sprites
  56. new rocketsmoke, white, explosion, bazsmoke
  57.  
  58. // Variables
  59. new dmgcount[33], user_controll[33], mode[33]
  60.  
  61. // Bools
  62. new bool:g_hasbazooka[33], Float:LastShoot[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. register_cvar("zp_bazooka_delay", "10")
  79. register_cvar("zp_bazooka_damage", "550")
  80. register_cvar("zp_bazooka_radius", "250")
  81. register_cvar("zp_bazooka_map", "0")
  82. register_cvar("zp_bazooka_awardpacks", "0")
  83. register_cvar("zp_bazooka_speed", "800")
  84. register_cvar("zp_bazooka_homing_speed", "350")
  85. register_cvar("zp_bazooka_camera_speed", "300")
  86. register_cvar("zp_bazooka_count", "4")
  87.  
  88. // Register the Extra Item
  89. g_itemid = zp_items_register("Bazooka", 60)
  90.  
  91. // Events
  92. register_event("CurWeapon","switch_to_knife","be");
  93. register_event("HLTV", "event_HLTV", "a", "1=0", "2=0")
  94. register_event("DeathMsg", "player_die", "a")
  95.  
  96. // Clcmd's
  97. register_clcmd("drop", "drop_call");
  98. register_concmd("zp_bazooka", "give_bazooka", ADMIN_BAN, "<name/@all> gives a bazooka to the spcified target")
  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. LastShoot[id] = 0.0
  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_cvar_num("zp_bazooka_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_fw_items_select_pre(player, itemid)
  156. {
  157. if (itemid == g_itemid)
  158. {
  159. if (zp_core_is_zombie(player) || zp_class_nemesis_get(player))
  160. {
  161. return ZP_ITEM_DONT_SHOW;
  162. }
  163. }
  164.  
  165. return ZP_ITEM_AVAILABLE;
  166. }
  167.  
  168. public zp_fw_items_select_post(player, itemid)
  169. {
  170. if (itemid == g_itemid)
  171. {
  172. if ( g_hasbazooka[player] )
  173. {
  174. bazooka_message(player, "^x04[ZP]^x01 Neked ma'r van Bazooka'd!");
  175. zp_ammopacks_set(player, zp_ammopacks_get(player) + 25) // 25 = cost
  176. }
  177. else if (baz_count() > get_cvar_num("zp_bazooka_count"))
  178. {
  179. bazooka_message(player, "^x04[ZP]^x01 Sajna'ljuk,de az osszes Bazzoka mennyise'get ma'r ele'rte'k!");
  180. zp_ammopacks_set(player, zp_ammopacks_get(player) + 25) // 25 = cost
  181. }
  182. else
  183. {
  184. g_hasbazooka[player] = true;
  185. LastShoot[player] = 0.0;
  186. emit_sound(player, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  187. }
  188. }
  189. return ZP_ITEM_AVAILABLE;
  190. }
  191.  
  192. public give_bazooka(id,level,cid)
  193. {
  194. if (!cmd_access(id,level,cid,1))
  195. {
  196. console_print(id,"You have no access to that command");
  197. return;
  198. }
  199. if (read_argc() > 2)
  200. {
  201. console_print(id,"Too many arguments supplied.");
  202. return;
  203. }
  204.  
  205. new arg1[32];
  206. read_argv(1, arg1, sizeof(arg1) - 1);
  207. new player = cmd_target(id, arg1, 10);
  208.  
  209. if ( !player )
  210. {
  211. if ( arg1[0] == '@' )
  212. {
  213. for ( new i = 1; i <= 32; i++ )
  214. {
  215. if ( is_user_connected(i) && !g_hasbazooka[i] && !zp_core_is_zombie(i) )
  216. {
  217. g_hasbazooka[id] = true
  218. LastShoot[id] = 0.0
  219. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  220. }
  221. }
  222. }
  223. else
  224. {
  225. client_print(id, print_center, "[ZP] Nincs ilyen Ja'te'kos/Csapat");
  226. return;
  227. }
  228. }
  229. else if ( !g_hasbazooka[player] && !zp_core_is_zombie(player) )
  230. {
  231. g_hasbazooka[id] = true
  232. LastShoot[id] = 0.0
  233. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  234. bazooka_message(player, "^x04[ZP]^x01 Kaptal egy Bazookat! [Attack2: Loves valtoztatas] [Ujratoltes:^x04 %2.1f^x01 Masodperc]", get_cvar_float("zp_bazooka_delay"))
  235. }
  236. }
  237.  
  238. public zp_fw_core_infect_post(id, infector)
  239. {
  240. if ( g_hasbazooka[id] )
  241. {
  242. drop_rpg_temp(id);
  243. }
  244. }
  245.  
  246. public zp_fw_core_cure_post(id)
  247. {
  248. #if defined ADMIN_BAZOOKA
  249. if (get_user_flags(id) & BAZOOKA_ACCESS)
  250. {
  251. g_hasbazooka[id] = true
  252. LastShoot[id] = 0.0
  253. }
  254. #endif
  255. }
  256.  
  257. public plugin_precache()
  258. {
  259. precache_model(mrocket);
  260.  
  261. precache_model(mrpg_w);
  262. precache_model(mrpg_v);
  263. precache_model(mrpg_p);
  264.  
  265. precache_sound(sfire);
  266. precache_sound(sfly);
  267. precache_sound(shit);
  268. precache_sound(spickup);
  269. precache_sound(reload);
  270.  
  271. rocketsmoke = precache_model("sprites/smoke.spr");
  272. white = precache_model("sprites/white.spr");
  273. explosion = precache_model("sprites/fexplo.spr");
  274. bazsmoke = precache_model("sprites/steam1.spr");
  275. }
  276.  
  277. public switch_to_knife(id)
  278. {
  279. if ( !is_user_alive(id) ) return;
  280.  
  281. if ( g_hasbazooka[id] )
  282. {
  283. if (get_user_weapon(id) == CSW_KNIFE)
  284. {
  285. set_pev(id, pev_viewmodel2, mrpg_v);
  286. set_pev(id, pev_weaponmodel2, mrpg_p);
  287. }
  288. }
  289. }
  290.  
  291. fire_rocket(id)
  292. {
  293. if (!CanShoot(id) ) return;
  294.  
  295. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  296.  
  297. if (!pev_valid(ent) || !is_user_alive(id) )
  298. return;
  299.  
  300. new data[1]
  301. data[0] = id
  302. LastShoot[id] = get_gametime();
  303. set_task(0.0 + get_cvar_num("zp_bazooka_delay"), "rpg_reload", id);
  304. engclient_cmd(id, "weapon_knife");
  305.  
  306. new Float:StartOrigin[3], Float:Angle[3];
  307. pev(id, pev_origin, StartOrigin);
  308. pev(id, pev_angles, Angle);
  309.  
  310. set_pev(ent, pev_classname, "rpgrocket");
  311. engfunc(EngFunc_SetModel, ent, mrocket);
  312. set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
  313. set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
  314. engfunc(EngFunc_SetOrigin, ent, StartOrigin);
  315. set_pev(ent, pev_angles, Angle);
  316.  
  317.  
  318. set_pev(ent, pev_solid, 2);
  319. set_pev(ent, pev_movetype, 5);
  320. set_pev(ent, pev_owner, id);
  321.  
  322. new Float:fAim[3],Float:fAngles[3],Float:fOrigin[3]
  323. velocity_by_aim(id,64,fAim)
  324. vector_to_angle(fAim,fAngles)
  325. pev(id,pev_origin,fOrigin)
  326.  
  327. fOrigin[0] += fAim[0]
  328. fOrigin[1] += fAim[1]
  329. fOrigin[2] += fAim[2]
  330.  
  331. new Float:nVelocity[3];
  332. if (mode[id] == 1)
  333. velocity_by_aim(id, get_cvar_num("zp_bazooka_speed"), nVelocity);
  334. else if (mode[id] == 2)
  335. velocity_by_aim(id, get_cvar_num("zp_bazooka_homing_speed"), nVelocity);
  336. else if (mode[id] == 3)
  337. velocity_by_aim(id, get_cvar_num("zp_bazooka_camera_speed"), nVelocity);
  338.  
  339. set_pev(ent, pev_velocity, nVelocity);
  340. entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_BRIGHTLIGHT)
  341.  
  342.  
  343. emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  344. emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  345.  
  346. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  347. write_byte(22);
  348. write_short(ent);
  349. write_short(rocketsmoke);
  350. write_byte(50);
  351. write_byte(3);
  352. write_byte(255);
  353. write_byte(255);
  354. write_byte(255);
  355. write_byte(255);
  356. message_end();
  357.  
  358. if (mode[id] == 2)
  359. set_task(0.5, "rpg_seek_follow", ent + TASK_SEEK_CATCH, _, _, "b");
  360. else if (mode[id] == 3)
  361. {
  362. if (is_user_alive(id))
  363. {
  364. entity_set_int(ent, EV_INT_rendermode, 1)
  365. attach_view(id, ent)
  366. user_controll[id] = ent
  367. }
  368. }
  369. launch_push(id, 130)
  370. Progress_status(id, get_cvar_num("zp_bazooka_delay"))
  371. }
  372.  
  373. public rpg_reload(id)
  374. {
  375. if (!g_hasbazooka[id]) return;
  376.  
  377. if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id);
  378. {
  379. // CanShoot[id] = true
  380. client_print(id, print_center, "Bazooka reloaded!")
  381. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  382. }
  383. }
  384.  
  385. public fw_touch(ent, touched)
  386. {
  387. if ( !pev_valid(ent) ) return FMRES_IGNORED;
  388.  
  389. static entclass[32];
  390. pev(ent, pev_classname, entclass, 31);
  391.  
  392. if ( equali(entclass, "rpg_temp") )
  393. {
  394. static touchclass[32];
  395. pev(touched, pev_classname, touchclass, 31);
  396. if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
  397.  
  398. if( !is_user_alive(touched) || zp_core_is_zombie(touched) ) return FMRES_IGNORED;
  399.  
  400. emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
  401. g_hasbazooka[touched] = true;
  402.  
  403. engfunc(EngFunc_RemoveEntity, ent);
  404.  
  405. return FMRES_HANDLED;
  406. }
  407. else if ( equali(entclass, "rpgrocket") )
  408. {
  409. new Float:EndOrigin[3];
  410. pev(ent, pev_origin, EndOrigin);
  411. new NonFloatEndOrigin[3];
  412. NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
  413. NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
  414. NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
  415.  
  416. emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  417. emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  418.  
  419. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  420. write_byte(17);
  421. write_coord(NonFloatEndOrigin[0]);
  422. write_coord(NonFloatEndOrigin[1]);
  423. write_coord(NonFloatEndOrigin[2] + 128);
  424. write_short(explosion);
  425. write_byte(60);
  426. write_byte(255);
  427. message_end();
  428.  
  429. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  430. write_byte(5);
  431. write_coord(NonFloatEndOrigin[0]);
  432. write_coord(NonFloatEndOrigin[1]);
  433. write_coord(NonFloatEndOrigin[2] + 256);
  434. write_short(bazsmoke);
  435. write_byte(125);
  436. write_byte(5);
  437. message_end();
  438.  
  439. new maxdamage = get_cvar_num("zp_bazooka_damage");
  440. new damageradius = get_cvar_num("zp_bazooka_radius");
  441.  
  442. new PlayerPos[3], distance
  443. for (new i = 1; i <= 32; i++)
  444. {
  445. if ( is_user_alive(i))
  446. {
  447. new id = pev(ent, pev_owner)
  448.  
  449. if (is_user_alive(id)) {
  450. if ((zp_core_is_zombie(id)) || ((zp_class_nemesis_get(id))))
  451. if ((zp_core_is_zombie(i)) || (zp_class_nemesis_get(i))) continue;
  452.  
  453. if ((!zp_core_is_zombie(id)) && (!zp_class_nemesis_get(id)))
  454. if ((!zp_core_is_zombie(i)) && (!zp_class_nemesis_get(i))) continue;
  455. }
  456.  
  457. get_user_origin(i, PlayerPos);
  458.  
  459. distance = get_distance(PlayerPos, NonFloatEndOrigin);
  460.  
  461. if (distance <= damageradius)
  462. {
  463. message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i);
  464. write_short(1<<14);
  465. write_short(1<<14);
  466. write_short(1<<14);
  467. message_end();
  468.  
  469. new attacker = pev(ent, pev_owner);
  470.  
  471. baz_damage(i, attacker, maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius)))), "bazooka");
  472. }
  473. }
  474. }
  475. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  476. write_byte(21);
  477. write_coord(NonFloatEndOrigin[0]);
  478. write_coord(NonFloatEndOrigin[1]);
  479. write_coord(NonFloatEndOrigin[2]);
  480. write_coord(NonFloatEndOrigin[0]);
  481. write_coord(NonFloatEndOrigin[1]);
  482. write_coord(NonFloatEndOrigin[2] + 320);
  483. write_short(white);
  484. write_byte(0);
  485. write_byte(0);
  486. write_byte(16);
  487. write_byte(128);
  488. write_byte(0);
  489. write_byte(255);
  490. write_byte(255);
  491. write_byte(192);
  492. write_byte(128);
  493. write_byte(0);
  494. message_end();
  495.  
  496. attach_view(entity_get_edict(ent, EV_ENT_owner), entity_get_edict(ent, EV_ENT_owner))
  497. user_controll[entity_get_edict(ent, EV_ENT_owner)] = 0
  498. remove_entity(ent)
  499.  
  500. return FMRES_HANDLED;
  501. }
  502. return FMRES_IGNORED;
  503. }
  504.  
  505. public drop_call(id)
  506. {
  507. if ( g_hasbazooka[id] && get_user_weapon(id) == CSW_KNIFE )
  508. {
  509. drop_rpg_temp(id);
  510. return PLUGIN_HANDLED;
  511. }
  512. return PLUGIN_CONTINUE;
  513. }
  514.  
  515. drop_rpg_temp(id)
  516. {
  517. new Float:fAim[3] , Float:fOrigin[3];
  518. velocity_by_aim(id , 64 , fAim);
  519. pev(id , pev_origin , fOrigin);
  520.  
  521. fOrigin[0] += fAim[0];
  522. fOrigin[1] += fAim[1];
  523.  
  524. new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  525.  
  526. set_pev(rpg, pev_classname, "rpg_temp");
  527. engfunc(EngFunc_SetModel, rpg, mrpg_w);
  528.  
  529. set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
  530. set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
  531.  
  532. set_pev(rpg , pev_solid , 1);
  533. set_pev(rpg , pev_movetype , 6);
  534.  
  535. engfunc(EngFunc_SetOrigin, rpg, fOrigin);
  536.  
  537. g_hasbazooka[id] = false;
  538. }
  539.  
  540. baz_damage(id, attacker, damage, weaponDescription[])
  541. {
  542. if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
  543. if ( damage <= 0 ) return;
  544.  
  545. new userHealth = get_user_health(id);
  546.  
  547. if (userHealth - damage <= 0 )
  548. {
  549. dmgcount[attacker] += userHealth - damage;
  550. set_msg_block(gmsg_death, BLOCK_SET);
  551. ExecuteHamB(Ham_Killed, id, attacker, 2);
  552. set_msg_block(gmsg_death, BLOCK_NOT);
  553.  
  554.  
  555. message_begin(MSG_BROADCAST, gmsg_death);
  556. write_byte(attacker);
  557. write_byte(id);
  558. write_byte(0);
  559. write_string(weaponDescription);
  560. message_end();
  561.  
  562. set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
  563.  
  564. new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
  565.  
  566. get_user_name(attacker, kname, 31);
  567. get_user_team(attacker, kteam, 9);
  568. get_user_authid(attacker, kauthid, 31);
  569.  
  570. get_user_name(id, vname, 31);
  571. get_user_team(id, vteam, 9);
  572. get_user_authid(id, vauthid, 31);
  573.  
  574. log_message("^"%s<%d><%s><%s>^" megolte ^"%s<%d><%s><%s>^" egy ^"%s^"",
  575. kname, get_user_userid(attacker), kauthid, kteam,
  576. vname, get_user_userid(id), vauthid, vteam, weaponDescription);
  577. }
  578. else
  579. {
  580. dmgcount[attacker] += damage;
  581. new origin[3];
  582. get_user_origin(id, origin);
  583.  
  584. message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
  585. write_byte(21);
  586. write_byte(20);
  587. write_long(DMG_BLAST);
  588. write_coord(origin[0]);
  589. write_coord(origin[1]);
  590. write_coord(origin[2]);
  591. message_end();
  592.  
  593. set_pev(id, pev_health, pev(id, pev_health) - float(damage));
  594. }
  595. if ( !get_cvar_num("zp_bazooka_awardpacks") ) return;
  596. }
  597.  
  598. public rpg_seek_follow(ent)
  599. {
  600. ent -= TASK_SEEK_CATCH
  601.  
  602. new Float: shortest_distance = 500.0;
  603. new NearestPlayer = 0;
  604.  
  605. if (pev_valid(ent))
  606. {
  607. static entclass[32];
  608. pev(ent, pev_classname, entclass, 31);
  609.  
  610. if ( equali(entclass, "rpgrocket") )
  611. {
  612. new id_owner = pev(ent, pev_owner)
  613. new iClient[32], livePlayers, iNum;
  614. get_players(iClient, livePlayers, "a");
  615.  
  616. for(iNum = 0; iNum < livePlayers; iNum++)
  617. {
  618. if ( is_user_alive(iClient[iNum]) && pev_valid(ent) )
  619. {
  620. if ( id_owner != iClient[iNum] && zp_core_is_zombie(iClient[iNum]) )
  621. {
  622. new Float:PlayerOrigin[3], Float:RocketOrigin[3]
  623. pev(ent, pev_origin, RocketOrigin)
  624. pev(iClient[iNum], pev_origin, PlayerOrigin)
  625.  
  626. new Float: distance = get_distance_f(PlayerOrigin, RocketOrigin)
  627.  
  628. if ( distance <= shortest_distance )
  629. {
  630. shortest_distance = distance;
  631. NearestPlayer = iClient[iNum];
  632. }
  633. }
  634. }
  635. }
  636. if (NearestPlayer > 0)
  637. {
  638. entity_set_follow(ent, NearestPlayer, 250.0)
  639. }
  640. }
  641. }
  642. }
  643.  
  644. stock entity_set_follow(entity, target, Float:speed)
  645. {
  646. if(!fm_is_valid_ent(entity) || !fm_is_valid_ent(target))
  647. return 0
  648.  
  649. new Float:entity_origin[3], Float:target_origin[3]
  650. pev(entity, pev_origin, entity_origin)
  651. pev(target, pev_origin, target_origin)
  652.  
  653. new Float:diff[3]
  654. diff[0] = target_origin[0] - entity_origin[0]
  655. diff[1] = target_origin[1] - entity_origin[1]
  656. diff[2] = target_origin[2] - entity_origin[2]
  657.  
  658. new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))
  659.  
  660. new Float:velocity[3]
  661. velocity[0] = diff[0] * (speed / length)
  662. velocity[1] = diff[1] * (speed / length)
  663. velocity[2] = diff[2] * (speed / length)
  664.  
  665. set_pev(entity, pev_velocity, velocity)
  666.  
  667. return 1
  668. }
  669.  
  670. public fw_CmdStart(id, UC_Handle, Seed)
  671. {
  672. if(!is_user_alive(id) || !g_hasbazooka[id]) return
  673.  
  674. static Button, OldButton
  675. OldButton = get_user_oldbutton(id)
  676.  
  677. Button = get_uc(UC_Handle, UC_Buttons)
  678.  
  679. if (Button & IN_ATTACK)
  680. {
  681. if (!CanShoot(id) || (OldButton & IN_ATTACK2)) return;
  682.  
  683. if ( get_user_weapon(id) == CSW_KNIFE )
  684. fire_rocket(id);
  685. }
  686. else if (Button & IN_ATTACK2 && get_user_weapon(id) == CSW_KNIFE)
  687. {
  688. if ( get_gametime ( ) - lastSwitchTime [ id ] < SWITCH_TIME || (OldButton & IN_ATTACK2)) return
  689.  
  690. if (is_user_alive(id))
  691. {
  692. switch(mode[id])
  693. {
  694. case 1:
  695. {
  696. mode[id] = 2
  697. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  698. client_print(id, print_center, "Homing fire mode")
  699. }
  700. case 2:
  701. {
  702. mode[id] = 3
  703. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  704. client_print(id, print_center, "Camera fire mode")
  705. }
  706. case 3:
  707. {
  708. mode[id] = 1
  709. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  710. client_print(id, print_center, "Normal fire mode")
  711. }
  712. }
  713. lastSwitchTime [ id ] = get_gametime ( )
  714. }
  715. }
  716. else if (user_controll[id])
  717. {
  718. new RocketEnt = user_controll[id]
  719.  
  720. if (is_valid_ent(RocketEnt))
  721. {
  722. new Float:Velocity[3]
  723. VelocityByAim(id, 500, Velocity)
  724. entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)
  725.  
  726. new Float:NewAngle[3]
  727. entity_get_vector(id, EV_VEC_v_angle, NewAngle)
  728. entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)
  729. }
  730. else
  731. {
  732. attach_view(id, id)
  733. }
  734. }
  735. }
  736.  
  737. public client_connect(id)
  738. g_hasbazooka[id] = false
  739.  
  740. #if defined ADMIN_BAZOOKA
  741. public fw_PlayerSpawn(id)
  742. set_task(1.0, "AdminBazooka", id)
  743. #endif
  744.  
  745. #if defined ADMIN_BAZOOKA
  746. public AdminBazooka(id)
  747. {
  748. if (!is_user_alive(id))
  749. return;
  750.  
  751. if (g_hasbazooka[id] || zp_class_nemesis_get(id) || zp_core_is_zombie(id) || zp_class_survivor_get(id))
  752. return;
  753.  
  754. if (get_user_flags(id) & BAZOOKA_ACCESS)
  755. {
  756. g_hasbazooka[id] = true
  757. LastShoot[id] = 0.0
  758. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  759. bazooka_message(id, "^x04[ZP]^x01 Kapta'l egy Bazooka't! [Attack2: Love's va'lta's] [U'jratolte's:^x04 %2.1f^x01 Ma'sodperc]", get_cvar_float("zp_bazooka_delay"))
  760. }
  761. }
  762. #endif
  763.  
  764. stock launch_push(id, velamount)
  765. {
  766. static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  767.  
  768. velocity_by_aim(id, -velamount, flNewVelocity)
  769.  
  770. get_user_velocity(id, flCurrentVelocity)
  771. xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  772.  
  773. set_user_velocity(id, flNewVelocity)
  774. }
  775.  
  776. baz_count()
  777. {
  778. new i, count = 0;
  779.  
  780. for(i = 1; i < 33; i++)
  781. {
  782. if(g_hasbazooka[i])
  783. count++;
  784. }
  785. return count;
  786. }
  787.  
  788. stock bazooka_message(const id, const input[], any:...)
  789. {
  790. new count = 1, players[32]
  791.  
  792. static msg[191]
  793. vformat(msg,190,input,3)
  794.  
  795. replace_all(msg,190,"/g","^4")
  796. replace_all(msg,190,"/y","^1")
  797. replace_all(msg,190,"/ctr","^3")
  798.  
  799. if (id) players[0] = id; else get_players(players,count,"ch")
  800.  
  801. for (new i = 0; i < count; i++)
  802. if (is_user_connected(players[i]))
  803. {
  804. message_begin(MSG_ONE_UNRELIABLE, Saytxt, _, players[i])
  805. write_byte(players[i])
  806. write_string(msg)
  807. message_end()
  808. }
  809. }
  810.  
  811. public Progress_status( const id, const duration )
  812. {
  813. message_begin( MSG_ONE, gmsgBarTime, _, id )
  814. write_short( duration )
  815. message_end()
  816. }
  817.  
  818. public player_die() {
  819.  
  820. new id = read_data(2)
  821.  
  822. if ( g_hasbazooka[id] )
  823. drop_rpg_temp(id);
  824.  
  825. return PLUGIN_CONTINUE
  826. }
  827.  
  828. public CanShoot(id)
  829. {
  830. return get_gametime() - LastShoot[id] >= get_cvar_float("zp_bazooka_delay")
  831. }
  832. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  833. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  834. */
  835.  

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.07. 17:10 
Offline
Őskövület
Avatar

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

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.07. 20:24 
Offline
Félisten

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


Még mindig ad

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.08. 17:12 
Offline
Őskövület
Avatar

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

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.08. 17:43 
Offline
Félisten

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


Tesztelem

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.08. 17:53 
Offline
Félisten

Csatlakozott: 2012.06.19. 15:12
Hozzászólások: 926
Megköszönt másnak: 109 alkalommal
Megköszönték neki: 31 alkalommal
Még mindig ad

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.08. 18:01 
Offline
Félisten

Csatlakozott: 2012.06.19. 15:12
Hozzászólások: 926
Megköszönt másnak: 109 alkalommal
Megköszönték neki: 31 alkalommal
Egyszerűbb lenne ebből kivenni ezt

[Bazooka \r[New Modes]]
NAME = Bazooka \r[New Modes]

[Bazooka \r[New Modes]]
COST = 40

SMA Forráskód: [ Mindet kijelol ]
  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.  

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Bazooka
HozzászólásElküldve: 2013.07.08. 19:19 
Offline
Őskövület
Avatar

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

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 8 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole