hlmod.hu

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



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: nincs regisztrált felhasználó 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  [ 5 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: ZP Bazooka
HozzászólásElküldve: 2014.01.21. 18:06 
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 lefordítaná nekem ezt a bazookát.

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.6"
  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, 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. pcvar_delay = register_cvar("zp_bazooka_delay", "10")
  79. pcvar_maxdmg = register_cvar("zp_bazooka_damage", "550")
  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", 25, ZP_TEAM_HUMAN)
  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_pcvar_num(pcvar_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_extra_item_selected(player, itemid)
  157. {
  158. if (itemid == g_itemid)
  159. {
  160. if ( g_hasbazooka[player] )
  161. {
  162. bazooka_message(player, "^x04[ZP]^x01 You already have a Bazooka!");
  163. return ZP_PLUGIN_HANDLED
  164. }
  165. else if (baz_count() > get_pcvar_num(pcvar_count))
  166. {
  167. bazooka_message(player, "^x04[ZP]^x01 Sorry, but maximum Bazooka's reached!");
  168. return ZP_PLUGIN_HANDLED;
  169. }
  170. else
  171. {
  172. g_hasbazooka[player] = true;
  173. LastShoot[player] = 0.0;
  174. bazooka_message(player, "^x04[ZP]^x01 You bought Bazooka! [Attack2: Change modes] [Reload:^x04 %2.1f^x01 seconds]", get_pcvar_float(pcvar_delay))
  175. emit_sound(player, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  176. }
  177. }
  178. return PLUGIN_CONTINUE
  179. }
  180.  
  181. public give_bazooka(id,level,cid)
  182. {
  183. if (!cmd_access(id,level,cid,1))
  184. {
  185. console_print(id,"You have no access to that command");
  186. return;
  187. }
  188. if (read_argc() > 2)
  189. {
  190. console_print(id,"Too many arguments supplied.");
  191. return;
  192. }
  193.  
  194. new arg1[32];
  195. read_argv(1, arg1, sizeof(arg1) - 1);
  196. new player = cmd_target(id, arg1, 10);
  197.  
  198. if ( !player )
  199. {
  200. if ( arg1[0] == '@' )
  201. {
  202. for ( new i = 1; i <= 32; i++ )
  203. {
  204. if ( is_user_connected(i) && !g_hasbazooka[i] && !zp_get_user_zombie(i) )
  205. {
  206. g_hasbazooka[id] = true
  207. LastShoot[id] = 0.0
  208. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  209. bazooka_message(player, "^x04[ZP]^x01 You got a Bazooka! [Attack2: Change modes] [Reload:^x04 %2.1f^x01 seconds]", get_pcvar_float(pcvar_delay))
  210. }
  211. }
  212. }
  213. else
  214. {
  215. client_print(id, print_center, "[ZP] No Such Player/Team");
  216. return;
  217. }
  218. }
  219. else if ( !g_hasbazooka[player] && !zp_get_user_zombie(player) )
  220. {
  221. g_hasbazooka[id] = true
  222. LastShoot[id] = 0.0
  223. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  224. bazooka_message(player, "^x04[ZP]^x01 You got a Bazooka! [Attack2: Change modes] [Reload:^x04 %2.1f^x01 seconds]", get_pcvar_float(pcvar_delay))
  225. }
  226. }
  227.  
  228. public zp_user_infected_post(id, infector)
  229. {
  230. if ( g_hasbazooka[id] )
  231. {
  232. drop_rpg_temp(id);
  233. }
  234. }
  235.  
  236. public zp_user_humanized_post(id, survivor)
  237. {
  238. #if defined ADMIN_BAZOOKA
  239. if (get_user_flags(id) & BAZOOKA_ACCESS)
  240. {
  241. g_hasbazooka[id] = true
  242. LastShoot[id] = 0.0
  243. }
  244. #endif
  245. }
  246.  
  247. public plugin_precache()
  248. {
  249. precache_model(mrocket);
  250.  
  251. precache_model(mrpg_w);
  252. precache_model(mrpg_v);
  253. precache_model(mrpg_p);
  254.  
  255. precache_sound(sfire);
  256. precache_sound(sfly);
  257. precache_sound(shit);
  258. precache_sound(spickup);
  259. precache_sound(reload);
  260.  
  261. rocketsmoke = precache_model("sprites/smoke.spr");
  262. white = precache_model("sprites/white.spr");
  263. explosion = precache_model("sprites/fexplo.spr");
  264. bazsmoke = precache_model("sprites/steam1.spr");
  265. }
  266.  
  267. public switch_to_knife(id)
  268. {
  269. if ( !is_user_alive(id) ) return;
  270.  
  271. if ( g_hasbazooka[id] )
  272. {
  273. if (get_user_weapon(id) == CSW_KNIFE)
  274. {
  275. set_pev(id, pev_viewmodel2, mrpg_v);
  276. set_pev(id, pev_weaponmodel2, mrpg_p);
  277. }
  278. }
  279. }
  280.  
  281. fire_rocket(id)
  282. {
  283. if (!CanShoot(id) ) return;
  284.  
  285. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  286.  
  287. if (!pev_valid(ent) || !is_user_alive(id) )
  288. return;
  289.  
  290. new data[1]
  291. data[0] = id
  292. LastShoot[id] = get_gametime();
  293. set_task(0.0 + get_pcvar_num(pcvar_delay), "rpg_reload", id);
  294. engclient_cmd(id, "weapon_knife");
  295.  
  296. new Float:StartOrigin[3], Float:Angle[3];
  297. pev(id, pev_origin, StartOrigin);
  298. pev(id, pev_angles, Angle);
  299.  
  300. set_pev(ent, pev_classname, "rpgrocket");
  301. engfunc(EngFunc_SetModel, ent, mrocket);
  302. set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
  303. set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
  304. engfunc(EngFunc_SetOrigin, ent, StartOrigin);
  305. set_pev(ent, pev_angles, Angle);
  306.  
  307.  
  308. set_pev(ent, pev_solid, 2);
  309. set_pev(ent, pev_movetype, 5);
  310. set_pev(ent, pev_owner, id);
  311.  
  312. new Float:fAim[3],Float:fAngles[3],Float:fOrigin[3]
  313. velocity_by_aim(id,64,fAim)
  314. vector_to_angle(fAim,fAngles)
  315. pev(id,pev_origin,fOrigin)
  316.  
  317. fOrigin[0] += fAim[0]
  318. fOrigin[1] += fAim[1]
  319. fOrigin[2] += fAim[2]
  320.  
  321. new Float:nVelocity[3];
  322. if (mode[id] == 1)
  323. velocity_by_aim(id, get_pcvar_num(pcvar_speed), nVelocity);
  324. else if (mode[id] == 2)
  325. velocity_by_aim(id, get_pcvar_num(pcvar_speed_homing), nVelocity);
  326. else if (mode[id] == 3)
  327. velocity_by_aim(id, get_pcvar_num(pcvar_speed_camera), nVelocity);
  328.  
  329. set_pev(ent, pev_velocity, nVelocity);
  330. entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_BRIGHTLIGHT)
  331.  
  332.  
  333. emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  334. emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  335.  
  336. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  337. write_byte(22);
  338. write_short(ent);
  339. write_short(rocketsmoke);
  340. write_byte(50);
  341. write_byte(3);
  342. write_byte(255);
  343. write_byte(255);
  344. write_byte(255);
  345. write_byte(255);
  346. message_end();
  347.  
  348. if (mode[id] == 2)
  349. set_task(0.5, "rpg_seek_follow", ent + TASK_SEEK_CATCH, _, _, "b");
  350. else if (mode[id] == 3)
  351. {
  352. if (is_user_alive(id))
  353. {
  354. entity_set_int(ent, EV_INT_rendermode, 1)
  355. attach_view(id, ent)
  356. user_controll[id] = ent
  357. }
  358. }
  359. launch_push(id, 130)
  360. Progress_status(id, get_pcvar_num(pcvar_delay))
  361. }
  362.  
  363. public rpg_reload(id)
  364. {
  365. if (!g_hasbazooka[id]) return;
  366.  
  367. if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id);
  368. {
  369. // CanShoot[id] = true
  370. client_print(id, print_center, "Bazooka reloaded!")
  371. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  372. }
  373. }
  374.  
  375. public fw_touch(ent, touched)
  376. {
  377. if ( !pev_valid(ent) ) return FMRES_IGNORED;
  378.  
  379. static entclass[32];
  380. pev(ent, pev_classname, entclass, 31);
  381.  
  382. if ( equali(entclass, "rpg_temp") )
  383. {
  384. static touchclass[32];
  385. pev(touched, pev_classname, touchclass, 31);
  386. if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
  387.  
  388. if( !is_user_alive(touched) || zp_get_user_zombie(touched) ) return FMRES_IGNORED;
  389.  
  390. emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
  391. g_hasbazooka[touched] = true;
  392.  
  393. engfunc(EngFunc_RemoveEntity, ent);
  394.  
  395. return FMRES_HANDLED;
  396. }
  397. else if ( equali(entclass, "rpgrocket") )
  398. {
  399. new Float:EndOrigin[3];
  400. pev(ent, pev_origin, EndOrigin);
  401. new NonFloatEndOrigin[3];
  402. NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
  403. NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
  404. NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
  405.  
  406. emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  407. emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  408.  
  409. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  410. write_byte(17);
  411. write_coord(NonFloatEndOrigin[0]);
  412. write_coord(NonFloatEndOrigin[1]);
  413. write_coord(NonFloatEndOrigin[2] + 128);
  414. write_short(explosion);
  415. write_byte(60);
  416. write_byte(255);
  417. message_end();
  418.  
  419. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  420. write_byte(5);
  421. write_coord(NonFloatEndOrigin[0]);
  422. write_coord(NonFloatEndOrigin[1]);
  423. write_coord(NonFloatEndOrigin[2] + 256);
  424. write_short(bazsmoke);
  425. write_byte(125);
  426. write_byte(5);
  427. message_end();
  428.  
  429. new maxdamage = get_pcvar_num(pcvar_maxdmg);
  430. new damageradius = get_pcvar_num(pcvar_radius);
  431.  
  432. new PlayerPos[3], distance, damage;
  433. for (new i = 1; i <= 32; i++)
  434. {
  435. if ( is_user_alive(i))
  436. {
  437. new id = pev(ent, pev_owner)
  438.  
  439. if ((zp_get_user_zombie(id)) || ((zp_get_user_nemesis(id))))
  440. if ((zp_get_user_zombie(i)) || (zp_get_user_nemesis(i))) continue;
  441.  
  442. if ((!zp_get_user_zombie(id)) && (!zp_get_user_nemesis(id)))
  443. if ((!zp_get_user_zombie(i)) && (!zp_get_user_nemesis(i))) continue;
  444.  
  445. get_user_origin(i, PlayerPos);
  446.  
  447. distance = get_distance(PlayerPos, NonFloatEndOrigin);
  448.  
  449. if (distance <= damageradius)
  450. {
  451. message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i);
  452. write_short(1<<14);
  453. write_short(1<<14);
  454. write_short(1<<14);
  455. message_end();
  456.  
  457. damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));
  458. new attacker = pev(ent, pev_owner);
  459.  
  460. baz_damage(i, attacker, damage, "bazooka");
  461. }
  462. }
  463. }
  464. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  465. write_byte(21);
  466. write_coord(NonFloatEndOrigin[0]);
  467. write_coord(NonFloatEndOrigin[1]);
  468. write_coord(NonFloatEndOrigin[2]);
  469. write_coord(NonFloatEndOrigin[0]);
  470. write_coord(NonFloatEndOrigin[1]);
  471. write_coord(NonFloatEndOrigin[2] + 320);
  472. write_short(white);
  473. write_byte(0);
  474. write_byte(0);
  475. write_byte(16);
  476. write_byte(128);
  477. write_byte(0);
  478. write_byte(255);
  479. write_byte(255);
  480. write_byte(192);
  481. write_byte(128);
  482. write_byte(0);
  483. message_end();
  484.  
  485. attach_view(entity_get_edict(ent, EV_ENT_owner), entity_get_edict(ent, EV_ENT_owner))
  486. user_controll[entity_get_edict(ent, EV_ENT_owner)] = 0
  487. remove_entity(ent)
  488.  
  489. return FMRES_HANDLED;
  490. }
  491. return FMRES_IGNORED;
  492. }
  493.  
  494. public drop_call(id)
  495. {
  496. if ( g_hasbazooka[id] && get_user_weapon(id) == CSW_KNIFE )
  497. {
  498. drop_rpg_temp(id);
  499. return PLUGIN_HANDLED;
  500. }
  501. return PLUGIN_CONTINUE;
  502. }
  503.  
  504. drop_rpg_temp(id)
  505. {
  506. new Float:fAim[3] , Float:fOrigin[3];
  507. velocity_by_aim(id , 64 , fAim);
  508. pev(id , pev_origin , fOrigin);
  509.  
  510. fOrigin[0] += fAim[0];
  511. fOrigin[1] += fAim[1];
  512.  
  513. new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  514.  
  515. set_pev(rpg, pev_classname, "rpg_temp");
  516. engfunc(EngFunc_SetModel, rpg, mrpg_w);
  517.  
  518. set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
  519. set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
  520.  
  521. set_pev(rpg , pev_solid , 1);
  522. set_pev(rpg , pev_movetype , 6);
  523.  
  524. engfunc(EngFunc_SetOrigin, rpg, fOrigin);
  525.  
  526. g_hasbazooka[id] = false;
  527. }
  528.  
  529. baz_damage(id, attacker, damage, weaponDescription[])
  530. {
  531. if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
  532. if ( damage <= 0 ) return;
  533.  
  534. new userHealth = get_user_health(id);
  535.  
  536. if (userHealth - damage <= 0 )
  537. {
  538. dmgcount[attacker] += userHealth - damage;
  539. set_msg_block(gmsg_death, BLOCK_SET);
  540. ExecuteHamB(Ham_Killed, id, attacker, 2);
  541. set_msg_block(gmsg_death, BLOCK_NOT);
  542.  
  543.  
  544. message_begin(MSG_BROADCAST, gmsg_death);
  545. write_byte(attacker);
  546. write_byte(id);
  547. write_byte(0);
  548. write_string(weaponDescription);
  549. message_end();
  550.  
  551. set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
  552.  
  553. new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
  554.  
  555. get_user_name(attacker, kname, 31);
  556. get_user_team(attacker, kteam, 9);
  557. get_user_authid(attacker, kauthid, 31);
  558.  
  559. get_user_name(id, vname, 31);
  560. get_user_team(id, vteam, 9);
  561. get_user_authid(id, vauthid, 31);
  562.  
  563. log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  564. kname, get_user_userid(attacker), kauthid, kteam,
  565. vname, get_user_userid(id), vauthid, vteam, weaponDescription);
  566. }
  567. else
  568. {
  569. dmgcount[attacker] += damage;
  570. new origin[3];
  571. get_user_origin(id, origin);
  572.  
  573. message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
  574. write_byte(21);
  575. write_byte(20);
  576. write_long(DMG_BLAST);
  577. write_coord(origin[0]);
  578. write_coord(origin[1]);
  579. write_coord(origin[2]);
  580. message_end();
  581.  
  582. set_pev(id, pev_health, pev(id, pev_health) - float(damage));
  583. }
  584. if ( !get_pcvar_num(pcvar_award) ) return;
  585.  
  586. new breaker = get_pcvar_num(pcvar_dmgforpacks);
  587.  
  588. if ( dmgcount[attacker] > breaker )
  589. {
  590. new temp = dmgcount[attacker] / breaker
  591. if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible
  592. dmgcount[attacker] -= temp * breaker;
  593. zp_set_user_ammo_packs( attacker, zp_get_user_ammo_packs(attacker) + temp );
  594. }
  595. }
  596.  
  597. public rpg_seek_follow(ent)
  598. {
  599. ent -= TASK_SEEK_CATCH
  600.  
  601. new Float: shortest_distance = 500.0;
  602. new NearestPlayer = 0;
  603.  
  604. if (pev_valid(ent))
  605. {
  606. static entclass[32];
  607. pev(ent, pev_classname, entclass, 31);
  608.  
  609. if ( equali(entclass, "rpgrocket") )
  610. {
  611. new id_owner = pev(ent, pev_owner)
  612. new iClient[32], livePlayers, iNum;
  613. get_players(iClient, livePlayers, "a");
  614.  
  615. for(iNum = 0; iNum < livePlayers; iNum++)
  616. {
  617. if ( is_user_alive(iClient[iNum]) && pev_valid(ent) )
  618. {
  619. if ( id_owner != iClient[iNum] && zp_get_user_zombie(iClient[iNum]) )
  620. {
  621. new Float:PlayerOrigin[3], Float:RocketOrigin[3]
  622. pev(ent, pev_origin, RocketOrigin)
  623. pev(iClient[iNum], pev_origin, PlayerOrigin)
  624.  
  625. new Float: distance = get_distance_f(PlayerOrigin, RocketOrigin)
  626.  
  627. if ( distance <= shortest_distance )
  628. {
  629. shortest_distance = distance;
  630. NearestPlayer = iClient[iNum];
  631. }
  632. }
  633. }
  634. }
  635. if (NearestPlayer > 0)
  636. {
  637. entity_set_follow(ent, NearestPlayer, 250.0)
  638. }
  639. }
  640. }
  641. }
  642.  
  643. stock entity_set_follow(entity, target, Float:speed)
  644. {
  645. if(!fm_is_valid_ent(entity) || !fm_is_valid_ent(target))
  646. return 0
  647.  
  648. new Float:entity_origin[3], Float:target_origin[3]
  649. pev(entity, pev_origin, entity_origin)
  650. pev(target, pev_origin, target_origin)
  651.  
  652. new Float:diff[3]
  653. diff[0] = target_origin[0] - entity_origin[0]
  654. diff[1] = target_origin[1] - entity_origin[1]
  655. diff[2] = target_origin[2] - entity_origin[2]
  656.  
  657. new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))
  658.  
  659. new Float:velocity[3]
  660. velocity[0] = diff[0] * (speed / length)
  661. velocity[1] = diff[1] * (speed / length)
  662. velocity[2] = diff[2] * (speed / length)
  663.  
  664. set_pev(entity, pev_velocity, velocity)
  665.  
  666. return 1
  667. }
  668.  
  669. public fw_CmdStart(id, UC_Handle, Seed)
  670. {
  671. if(!is_user_alive(id) || !g_hasbazooka[id]) return
  672.  
  673. static Button, OldButton
  674. OldButton = get_user_oldbutton(id)
  675.  
  676. Button = get_uc(UC_Handle, UC_Buttons)
  677.  
  678. if (Button & IN_ATTACK)
  679. {
  680. if (!CanShoot(id) || (OldButton & IN_ATTACK2)) return;
  681.  
  682. if ( get_user_weapon(id) == CSW_KNIFE )
  683. fire_rocket(id);
  684. }
  685. else if (Button & IN_ATTACK2 && get_user_weapon(id) == CSW_KNIFE)
  686. {
  687. if ( get_gametime ( ) - lastSwitchTime [ id ] < SWITCH_TIME || (OldButton & IN_ATTACK2)) return
  688.  
  689. if (is_user_alive(id))
  690. {
  691. switch(mode[id])
  692. {
  693. case 1:
  694. {
  695. mode[id] = 2
  696. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  697. client_print(id, print_center, "Homing fire mode")
  698. }
  699. case 2:
  700. {
  701. mode[id] = 3
  702. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  703. client_print(id, print_center, "Camera fire mode")
  704. }
  705. case 3:
  706. {
  707. mode[id] = 1
  708. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  709. client_print(id, print_center, "Normal fire mode")
  710. }
  711. }
  712. lastSwitchTime [ id ] = get_gametime ( )
  713. }
  714. }
  715. else if (user_controll[id])
  716. {
  717. new RocketEnt = user_controll[id]
  718.  
  719. if (is_valid_ent(RocketEnt))
  720. {
  721. new Float:Velocity[3]
  722. VelocityByAim(id, 500, Velocity)
  723. entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)
  724.  
  725. new Float:NewAngle[3]
  726. entity_get_vector(id, EV_VEC_v_angle, NewAngle)
  727. entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)
  728. }
  729. else
  730. {
  731. attach_view(id, id)
  732. }
  733. }
  734. }
  735.  
  736. public client_connect(id)
  737. g_hasbazooka[id] = false
  738.  
  739. #if defined ADMIN_BAZOOKA
  740. public fw_PlayerSpawn(id)
  741. set_task(1.0, "AdminBazooka", id)
  742. #endif
  743.  
  744. #if defined ADMIN_BAZOOKA
  745. public AdminBazooka(id)
  746. {
  747. if (g_hasbazooka[id] || zp_get_user_nemesis(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id))
  748. return;
  749.  
  750. if (is_user_alive(id) && (get_user_flags(id) & BAZOOKA_ACCESS))
  751. {
  752. g_hasbazooka[id] = true
  753. LastShoot[id] = 0.0
  754. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  755. bazooka_message(id, "^x04[ZP]^x01 You got a Bazooka! [Attack2: Change modes] [Reload:^x04 %2.1f^x01 seconds]", get_pcvar_float(pcvar_delay))
  756. }
  757. }
  758. #endif
  759.  
  760. stock launch_push(id, velamount)
  761. {
  762. static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  763.  
  764. velocity_by_aim(id, -velamount, flNewVelocity)
  765.  
  766. get_user_velocity(id, flCurrentVelocity)
  767. xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  768.  
  769. set_user_velocity(id, flNewVelocity)
  770. }
  771.  
  772. baz_count()
  773. {
  774. new i, count = 0;
  775.  
  776. for(i = 1; i < 33; i++)
  777. {
  778. if(g_hasbazooka[i])
  779. count++;
  780. }
  781. return count;
  782. }
  783.  
  784. stock bazooka_message(const id, const input[], any:...)
  785. {
  786. new count = 1, players[32]
  787.  
  788. static msg[191]
  789. vformat(msg,190,input,3)
  790.  
  791. replace_all(msg,190,"/g","^4")
  792. replace_all(msg,190,"/y","^1")
  793. replace_all(msg,190,"/ctr","^3")
  794.  
  795. if (id) players[0] = id; else get_players(players,count,"ch")
  796.  
  797. for (new i = 0; i < count; i++)
  798. if (is_user_connected(players[i]))
  799. {
  800. message_begin(MSG_ONE_UNRELIABLE, Saytxt, _, players[i])
  801. write_byte(players[i])
  802. write_string(msg)
  803. message_end()
  804. }
  805. }
  806.  
  807. public Progress_status( const id, const duration )
  808. {
  809. message_begin( MSG_ONE, gmsgBarTime, _, id )
  810. write_short( duration )
  811. message_end()
  812. }
  813.  
  814. public player_die() {
  815.  
  816. new id = read_data(2)
  817.  
  818. if ( g_hasbazooka[id] )
  819. drop_rpg_temp(id);
  820.  
  821. return PLUGIN_CONTINUE
  822. }
  823.  
  824. public CanShoot(id)
  825. {
  826. return get_gametime() - LastShoot[id] >= get_pcvar_float(pcvar_delay)
  827. }

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP Bazooka
HozzászólásElküldve: 2014.01.21. 18:17 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2011.08.15. 14:42
Hozzászólások: 1345
Megköszönt másnak: 10 alkalommal
Megköszönték neki: 277 alkalommal
Remélem jó lesz.
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 + uj modok"
  10. #define VERSION "1.6"
  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, 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. pcvar_delay = register_cvar("zp_bazooka_delay", "10")
  79. pcvar_maxdmg = register_cvar("zp_bazooka_damage", "550")
  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", 25, ZP_TEAM_HUMAN)
  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> ad egy bazookat az ellenseg elpusztitasara")
  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_pcvar_num(pcvar_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_extra_item_selected(player, itemid)
  157. {
  158. if (itemid == g_itemid)
  159. {
  160. if ( g_hasbazooka[player] )
  161. {
  162. bazooka_message(player, "^x04[ZP]^x01 Mar van egy bazookad!");
  163. return ZP_PLUGIN_HANDLED
  164. }
  165. else if (baz_count() > get_pcvar_num(pcvar_count))
  166. {
  167. bazooka_message(player, "^x04[ZP]^x01 Sajnos, elerted a max. bazooka szamot!");
  168. return ZP_PLUGIN_HANDLED;
  169. }
  170. else
  171. {
  172. g_hasbazooka[player] = true;
  173. LastShoot[player] = 0.0;
  174. bazooka_message(player, "^x04[ZP]^x01 Vettel egy bazookat! [Attack2: Valassz modot] [Ujratoltve:^x04 %2.1f^x01 masodperc mulva]", get_pcvar_float(pcvar_delay))
  175. emit_sound(player, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  176. }
  177. }
  178. return PLUGIN_CONTINUE
  179. }
  180.  
  181. public give_bazooka(id,level,cid)
  182. {
  183. if (!cmd_access(id,level,cid,1))
  184. {
  185. console_print(id,"Nincs hozzaferesed ehhez a parancshoz");
  186. return;
  187. }
  188. if (read_argc() > 2)
  189. {
  190. console_print(id,"Tul sok parameter van ervenybe.");
  191. return;
  192. }
  193.  
  194. new arg1[32];
  195. read_argv(1, arg1, sizeof(arg1) - 1);
  196. new player = cmd_target(id, arg1, 10);
  197.  
  198. if ( !player )
  199. {
  200. if ( arg1[0] == '@' )
  201. {
  202. for ( new i = 1; i <= 32; i++ )
  203. {
  204. if ( is_user_connected(i) && !g_hasbazooka[i] && !zp_get_user_zombie(i) )
  205. {
  206. g_hasbazooka[id] = true
  207. LastShoot[id] = 0.0
  208. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  209. bazooka_message(player, "^x04[ZP]^x01 Kaptal egy bazookat! [Attack2: Valassz modot] [Ujratoltve:^x04 %2.1f^x01 masodperc mulva]", get_pcvar_float(pcvar_delay))
  210. }
  211. }
  212. }
  213. else
  214. {
  215. client_print(id, print_center, "[ZP] Nincs ilyen jatekos/csapat");
  216. return;
  217. }
  218. }
  219. else if ( !g_hasbazooka[player] && !zp_get_user_zombie(player) )
  220. {
  221. g_hasbazooka[id] = true
  222. LastShoot[id] = 0.0
  223. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  224. bazooka_message(player, "^x04[ZP]^x01 Kaptal egy bazookat! [Attack2: Valassz modot] [Ujratoltve:^x04 %2.1f^x01 seconds]", get_pcvar_float(pcvar_delay))
  225. }
  226. }
  227.  
  228. public zp_user_infected_post(id, infector)
  229. {
  230. if ( g_hasbazooka[id] )
  231. {
  232. drop_rpg_temp(id);
  233. }
  234. }
  235.  
  236. public zp_user_humanized_post(id, survivor)
  237. {
  238. #if defined ADMIN_BAZOOKA
  239. if (get_user_flags(id) & BAZOOKA_ACCESS)
  240. {
  241. g_hasbazooka[id] = true
  242. LastShoot[id] = 0.0
  243. }
  244. #endif
  245. }
  246.  
  247. public plugin_precache()
  248. {
  249. precache_model(mrocket);
  250.  
  251. precache_model(mrpg_w);
  252. precache_model(mrpg_v);
  253. precache_model(mrpg_p);
  254.  
  255. precache_sound(sfire);
  256. precache_sound(sfly);
  257. precache_sound(shit);
  258. precache_sound(spickup);
  259. precache_sound(reload);
  260.  
  261. rocketsmoke = precache_model("sprites/smoke.spr");
  262. white = precache_model("sprites/white.spr");
  263. explosion = precache_model("sprites/fexplo.spr");
  264. bazsmoke = precache_model("sprites/steam1.spr");
  265. }
  266.  
  267. public switch_to_knife(id)
  268. {
  269. if ( !is_user_alive(id) ) return;
  270.  
  271. if ( g_hasbazooka[id] )
  272. {
  273. if (get_user_weapon(id) == CSW_KNIFE)
  274. {
  275. set_pev(id, pev_viewmodel2, mrpg_v);
  276. set_pev(id, pev_weaponmodel2, mrpg_p);
  277. }
  278. }
  279. }
  280.  
  281. fire_rocket(id)
  282. {
  283. if (!CanShoot(id) ) return;
  284.  
  285. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  286.  
  287. if (!pev_valid(ent) || !is_user_alive(id) )
  288. return;
  289.  
  290. new data[1]
  291. data[0] = id
  292. LastShoot[id] = get_gametime();
  293. set_task(0.0 + get_pcvar_num(pcvar_delay), "rpg_reload", id);
  294. engclient_cmd(id, "weapon_knife");
  295.  
  296. new Float:StartOrigin[3], Float:Angle[3];
  297. pev(id, pev_origin, StartOrigin);
  298. pev(id, pev_angles, Angle);
  299.  
  300. set_pev(ent, pev_classname, "rpgrocket");
  301. engfunc(EngFunc_SetModel, ent, mrocket);
  302. set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
  303. set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
  304. engfunc(EngFunc_SetOrigin, ent, StartOrigin);
  305. set_pev(ent, pev_angles, Angle);
  306.  
  307.  
  308. set_pev(ent, pev_solid, 2);
  309. set_pev(ent, pev_movetype, 5);
  310. set_pev(ent, pev_owner, id);
  311.  
  312. new Float:fAim[3],Float:fAngles[3],Float:fOrigin[3]
  313. velocity_by_aim(id,64,fAim)
  314. vector_to_angle(fAim,fAngles)
  315. pev(id,pev_origin,fOrigin)
  316.  
  317. fOrigin[0] += fAim[0]
  318. fOrigin[1] += fAim[1]
  319. fOrigin[2] += fAim[2]
  320.  
  321. new Float:nVelocity[3];
  322. if (mode[id] == 1)
  323. velocity_by_aim(id, get_pcvar_num(pcvar_speed), nVelocity);
  324. else if (mode[id] == 2)
  325. velocity_by_aim(id, get_pcvar_num(pcvar_speed_homing), nVelocity);
  326. else if (mode[id] == 3)
  327. velocity_by_aim(id, get_pcvar_num(pcvar_speed_camera), nVelocity);
  328.  
  329. set_pev(ent, pev_velocity, nVelocity);
  330. entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_BRIGHTLIGHT)
  331.  
  332.  
  333. emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  334. emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  335.  
  336. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  337. write_byte(22);
  338. write_short(ent);
  339. write_short(rocketsmoke);
  340. write_byte(50);
  341. write_byte(3);
  342. write_byte(255);
  343. write_byte(255);
  344. write_byte(255);
  345. write_byte(255);
  346. message_end();
  347.  
  348. if (mode[id] == 2)
  349. set_task(0.5, "rpg_seek_follow", ent + TASK_SEEK_CATCH, _, _, "b");
  350. else if (mode[id] == 3)
  351. {
  352. if (is_user_alive(id))
  353. {
  354. entity_set_int(ent, EV_INT_rendermode, 1)
  355. attach_view(id, ent)
  356. user_controll[id] = ent
  357. }
  358. }
  359. launch_push(id, 130)
  360. Progress_status(id, get_pcvar_num(pcvar_delay))
  361. }
  362.  
  363. public rpg_reload(id)
  364. {
  365. if (!g_hasbazooka[id]) return;
  366.  
  367. if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id);
  368. {
  369. // CanShoot[id] = true
  370. client_print(id, print_center, "Bazooka ujratoltve!")
  371. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  372. }
  373. }
  374.  
  375. public fw_touch(ent, touched)
  376. {
  377. if ( !pev_valid(ent) ) return FMRES_IGNORED;
  378.  
  379. static entclass[32];
  380. pev(ent, pev_classname, entclass, 31);
  381.  
  382. if ( equali(entclass, "rpg_temp") )
  383. {
  384. static touchclass[32];
  385. pev(touched, pev_classname, touchclass, 31);
  386. if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
  387.  
  388. if( !is_user_alive(touched) || zp_get_user_zombie(touched) ) return FMRES_IGNORED;
  389.  
  390. emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
  391. g_hasbazooka[touched] = true;
  392.  
  393. engfunc(EngFunc_RemoveEntity, ent);
  394.  
  395. return FMRES_HANDLED;
  396. }
  397. else if ( equali(entclass, "rpgrocket") )
  398. {
  399. new Float:EndOrigin[3];
  400. pev(ent, pev_origin, EndOrigin);
  401. new NonFloatEndOrigin[3];
  402. NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
  403. NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
  404. NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
  405.  
  406. emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  407. emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  408.  
  409. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  410. write_byte(17);
  411. write_coord(NonFloatEndOrigin[0]);
  412. write_coord(NonFloatEndOrigin[1]);
  413. write_coord(NonFloatEndOrigin[2] + 128);
  414. write_short(explosion);
  415. write_byte(60);
  416. write_byte(255);
  417. message_end();
  418.  
  419. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  420. write_byte(5);
  421. write_coord(NonFloatEndOrigin[0]);
  422. write_coord(NonFloatEndOrigin[1]);
  423. write_coord(NonFloatEndOrigin[2] + 256);
  424. write_short(bazsmoke);
  425. write_byte(125);
  426. write_byte(5);
  427. message_end();
  428.  
  429. new maxdamage = get_pcvar_num(pcvar_maxdmg);
  430. new damageradius = get_pcvar_num(pcvar_radius);
  431.  
  432. new PlayerPos[3], distance, damage;
  433. for (new i = 1; i <= 32; i++)
  434. {
  435. if ( is_user_alive(i))
  436. {
  437. new id = pev(ent, pev_owner)
  438.  
  439. if ((zp_get_user_zombie(id)) || ((zp_get_user_nemesis(id))))
  440. if ((zp_get_user_zombie(i)) || (zp_get_user_nemesis(i))) continue;
  441.  
  442. if ((!zp_get_user_zombie(id)) && (!zp_get_user_nemesis(id)))
  443. if ((!zp_get_user_zombie(i)) && (!zp_get_user_nemesis(i))) continue;
  444.  
  445. get_user_origin(i, PlayerPos);
  446.  
  447. distance = get_distance(PlayerPos, NonFloatEndOrigin);
  448.  
  449. if (distance <= damageradius)
  450. {
  451. message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i);
  452. write_short(1<<14);
  453. write_short(1<<14);
  454. write_short(1<<14);
  455. message_end();
  456.  
  457. damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));
  458. new attacker = pev(ent, pev_owner);
  459.  
  460. baz_damage(i, attacker, damage, "bazooka");
  461. }
  462. }
  463. }
  464. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  465. write_byte(21);
  466. write_coord(NonFloatEndOrigin[0]);
  467. write_coord(NonFloatEndOrigin[1]);
  468. write_coord(NonFloatEndOrigin[2]);
  469. write_coord(NonFloatEndOrigin[0]);
  470. write_coord(NonFloatEndOrigin[1]);
  471. write_coord(NonFloatEndOrigin[2] + 320);
  472. write_short(white);
  473. write_byte(0);
  474. write_byte(0);
  475. write_byte(16);
  476. write_byte(128);
  477. write_byte(0);
  478. write_byte(255);
  479. write_byte(255);
  480. write_byte(192);
  481. write_byte(128);
  482. write_byte(0);
  483. message_end();
  484.  
  485. attach_view(entity_get_edict(ent, EV_ENT_owner), entity_get_edict(ent, EV_ENT_owner))
  486. user_controll[entity_get_edict(ent, EV_ENT_owner)] = 0
  487. remove_entity(ent)
  488.  
  489. return FMRES_HANDLED;
  490. }
  491. return FMRES_IGNORED;
  492. }
  493.  
  494. public drop_call(id)
  495. {
  496. if ( g_hasbazooka[id] && get_user_weapon(id) == CSW_KNIFE )
  497. {
  498. drop_rpg_temp(id);
  499. return PLUGIN_HANDLED;
  500. }
  501. return PLUGIN_CONTINUE;
  502. }
  503.  
  504. drop_rpg_temp(id)
  505. {
  506. new Float:fAim[3] , Float:fOrigin[3];
  507. velocity_by_aim(id , 64 , fAim);
  508. pev(id , pev_origin , fOrigin);
  509.  
  510. fOrigin[0] += fAim[0];
  511. fOrigin[1] += fAim[1];
  512.  
  513. new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  514.  
  515. set_pev(rpg, pev_classname, "rpg_temp");
  516. engfunc(EngFunc_SetModel, rpg, mrpg_w);
  517.  
  518. set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
  519. set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
  520.  
  521. set_pev(rpg , pev_solid , 1);
  522. set_pev(rpg , pev_movetype , 6);
  523.  
  524. engfunc(EngFunc_SetOrigin, rpg, fOrigin);
  525.  
  526. g_hasbazooka[id] = false;
  527. }
  528.  
  529. baz_damage(id, attacker, damage, weaponDescription[])
  530. {
  531. if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
  532. if ( damage <= 0 ) return;
  533.  
  534. new userHealth = get_user_health(id);
  535.  
  536. if (userHealth - damage <= 0 )
  537. {
  538. dmgcount[attacker] += userHealth - damage;
  539. set_msg_block(gmsg_death, BLOCK_SET);
  540. ExecuteHamB(Ham_Killed, id, attacker, 2);
  541. set_msg_block(gmsg_death, BLOCK_NOT);
  542.  
  543.  
  544. message_begin(MSG_BROADCAST, gmsg_death);
  545. write_byte(attacker);
  546. write_byte(id);
  547. write_byte(0);
  548. write_string(weaponDescription);
  549. message_end();
  550.  
  551. set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
  552.  
  553. new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
  554.  
  555. get_user_name(attacker, kname, 31);
  556. get_user_team(attacker, kteam, 9);
  557. get_user_authid(attacker, kauthid, 31);
  558.  
  559. get_user_name(id, vname, 31);
  560. get_user_team(id, vteam, 9);
  561. get_user_authid(id, vauthid, 31);
  562.  
  563. log_message("^"%s<%d><%s><%s>^" megolte ^"%s<%d><%s><%s>^" ^"%s^" -val",
  564. kname, get_user_userid(attacker), kauthid, kteam,
  565. vname, get_user_userid(id), vauthid, vteam, weaponDescription);
  566. }
  567. else
  568. {
  569. dmgcount[attacker] += damage;
  570. new origin[3];
  571. get_user_origin(id, origin);
  572.  
  573. message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
  574. write_byte(21);
  575. write_byte(20);
  576. write_long(DMG_BLAST);
  577. write_coord(origin[0]);
  578. write_coord(origin[1]);
  579. write_coord(origin[2]);
  580. message_end();
  581.  
  582. set_pev(id, pev_health, pev(id, pev_health) - float(damage));
  583. }
  584. if ( !get_pcvar_num(pcvar_award) ) return;
  585.  
  586. new breaker = get_pcvar_num(pcvar_dmgforpacks);
  587.  
  588. if ( dmgcount[attacker] > breaker )
  589. {
  590. new temp = dmgcount[attacker] / breaker
  591. if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible
  592. dmgcount[attacker] -= temp * breaker;
  593. zp_set_user_ammo_packs( attacker, zp_get_user_ammo_packs(attacker) + temp );
  594. }
  595. }
  596.  
  597. public rpg_seek_follow(ent)
  598. {
  599. ent -= TASK_SEEK_CATCH
  600.  
  601. new Float: shortest_distance = 500.0;
  602. new NearestPlayer = 0;
  603.  
  604. if (pev_valid(ent))
  605. {
  606. static entclass[32];
  607. pev(ent, pev_classname, entclass, 31);
  608.  
  609. if ( equali(entclass, "rpgrocket") )
  610. {
  611. new id_owner = pev(ent, pev_owner)
  612. new iClient[32], livePlayers, iNum;
  613. get_players(iClient, livePlayers, "a");
  614.  
  615. for(iNum = 0; iNum < livePlayers; iNum++)
  616. {
  617. if ( is_user_alive(iClient[iNum]) && pev_valid(ent) )
  618. {
  619. if ( id_owner != iClient[iNum] && zp_get_user_zombie(iClient[iNum]) )
  620. {
  621. new Float:PlayerOrigin[3], Float:RocketOrigin[3]
  622. pev(ent, pev_origin, RocketOrigin)
  623. pev(iClient[iNum], pev_origin, PlayerOrigin)
  624.  
  625. new Float: distance = get_distance_f(PlayerOrigin, RocketOrigin)
  626.  
  627. if ( distance <= shortest_distance )
  628. {
  629. shortest_distance = distance;
  630. NearestPlayer = iClient[iNum];
  631. }
  632. }
  633. }
  634. }
  635. if (NearestPlayer > 0)
  636. {
  637. entity_set_follow(ent, NearestPlayer, 250.0)
  638. }
  639. }
  640. }
  641. }
  642.  
  643. stock entity_set_follow(entity, target, Float:speed)
  644. {
  645. if(!fm_is_valid_ent(entity) || !fm_is_valid_ent(target))
  646. return 0
  647.  
  648. new Float:entity_origin[3], Float:target_origin[3]
  649. pev(entity, pev_origin, entity_origin)
  650. pev(target, pev_origin, target_origin)
  651.  
  652. new Float:diff[3]
  653. diff[0] = target_origin[0] - entity_origin[0]
  654. diff[1] = target_origin[1] - entity_origin[1]
  655. diff[2] = target_origin[2] - entity_origin[2]
  656.  
  657. new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))
  658.  
  659. new Float:velocity[3]
  660. velocity[0] = diff[0] * (speed / length)
  661. velocity[1] = diff[1] * (speed / length)
  662. velocity[2] = diff[2] * (speed / length)
  663.  
  664. set_pev(entity, pev_velocity, velocity)
  665.  
  666. return 1
  667. }
  668.  
  669. public fw_CmdStart(id, UC_Handle, Seed)
  670. {
  671. if(!is_user_alive(id) || !g_hasbazooka[id]) return
  672.  
  673. static Button, OldButton
  674. OldButton = get_user_oldbutton(id)
  675.  
  676. Button = get_uc(UC_Handle, UC_Buttons)
  677.  
  678. if (Button & IN_ATTACK)
  679. {
  680. if (!CanShoot(id) || (OldButton & IN_ATTACK2)) return;
  681.  
  682. if ( get_user_weapon(id) == CSW_KNIFE )
  683. fire_rocket(id);
  684. }
  685. else if (Button & IN_ATTACK2 && get_user_weapon(id) == CSW_KNIFE)
  686. {
  687. if ( get_gametime ( ) - lastSwitchTime [ id ] < SWITCH_TIME || (OldButton & IN_ATTACK2)) return
  688.  
  689. if (is_user_alive(id))
  690. {
  691. switch(mode[id])
  692. {
  693. case 1:
  694. {
  695. mode[id] = 2
  696. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  697. client_print(id, print_center, "Hazi tuzelesi mode")
  698. }
  699. case 2:
  700. {
  701. mode[id] = 3
  702. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  703. client_print(id, print_center, "Camera tuzelesi mode")
  704. }
  705. case 3:
  706. {
  707. mode[id] = 1
  708. emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  709. client_print(id, print_center, "Normal tuzelesi mode")
  710. }
  711. }
  712. lastSwitchTime [ id ] = get_gametime ( )
  713. }
  714. }
  715. else if (user_controll[id])
  716. {
  717. new RocketEnt = user_controll[id]
  718.  
  719. if (is_valid_ent(RocketEnt))
  720. {
  721. new Float:Velocity[3]
  722. VelocityByAim(id, 500, Velocity)
  723. entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)
  724.  
  725. new Float:NewAngle[3]
  726. entity_get_vector(id, EV_VEC_v_angle, NewAngle)
  727. entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)
  728. }
  729. else
  730. {
  731. attach_view(id, id)
  732. }
  733. }
  734. }
  735.  
  736. public client_connect(id)
  737. g_hasbazooka[id] = false
  738.  
  739. #if defined ADMIN_BAZOOKA
  740. public fw_PlayerSpawn(id)
  741. set_task(1.0, "AdminBazooka", id)
  742. #endif
  743.  
  744. #if defined ADMIN_BAZOOKA
  745. public AdminBazooka(id)
  746. {
  747. if (g_hasbazooka[id] || zp_get_user_nemesis(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id))
  748. return;
  749.  
  750. if (is_user_alive(id) && (get_user_flags(id) & BAZOOKA_ACCESS))
  751. {
  752. g_hasbazooka[id] = true
  753. LastShoot[id] = 0.0
  754. emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  755. bazooka_message(id, "^x04[ZP]^x01 Kaptal egy bazookat! [Attack2: Valassz modot] [Ujratoltve:^x04 %2.1f^x01 masodperc mulva]", get_pcvar_float(pcvar_delay))
  756. }
  757. }
  758. #endif
  759.  
  760. stock launch_push(id, velamount)
  761. {
  762. static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  763.  
  764. velocity_by_aim(id, -velamount, flNewVelocity)
  765.  
  766. get_user_velocity(id, flCurrentVelocity)
  767. xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  768.  
  769. set_user_velocity(id, flNewVelocity)
  770. }
  771.  
  772. baz_count()
  773. {
  774. new i, count = 0;
  775.  
  776. for(i = 1; i < 33; i++)
  777. {
  778. if(g_hasbazooka[i])
  779. count++;
  780. }
  781. return count;
  782. }
  783.  
  784. stock bazooka_message(const id, const input[], any:...)
  785. {
  786. new count = 1, players[32]
  787.  
  788. static msg[191]
  789. vformat(msg,190,input,3)
  790.  
  791. replace_all(msg,190,"/g","^4")
  792. replace_all(msg,190,"/y","^1")
  793. replace_all(msg,190,"/ctr","^3")
  794.  
  795. if (id) players[0] = id; else get_players(players,count,"ch")
  796.  
  797. for (new i = 0; i < count; i++)
  798. if (is_user_connected(players[i]))
  799. {
  800. message_begin(MSG_ONE_UNRELIABLE, Saytxt, _, players[i])
  801. write_byte(players[i])
  802. write_string(msg)
  803. message_end()
  804. }
  805. }
  806.  
  807. public Progress_status( const id, const duration )
  808. {
  809. message_begin( MSG_ONE, gmsgBarTime, _, id )
  810. write_short( duration )
  811. message_end()
  812. }
  813.  
  814. public player_die() {
  815.  
  816. new id = read_data(2)
  817.  
  818. if ( g_hasbazooka[id] )
  819. drop_rpg_temp(id);
  820.  
  821. return PLUGIN_CONTINUE
  822. }
  823.  
  824. public CanShoot(id)
  825. {
  826. return get_gametime() - LastShoot[id] >= get_pcvar_float(pcvar_delay)
  827. }

_________________
Üdvözlettel: BBk
[AmxModX] Általam fordított pluginok
Death of Legend Fun Server History
NetMozi.com - Filmes fórum Badboy.killer
foximaxi

Ők köszönték meg Badboy.killer nek ezt a hozzászólást: Tomos (2014.01.21. 21:11)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP Bazooka
HozzászólásElküldve: 2014.01.21. 19:18 
Offline
Minden6ó
Avatar

Csatlakozott: 2011.01.19. 12:14
Hozzászólások: 4280
Megköszönt másnak: 218 alkalommal
Megköszönték neki: 285 alkalommal
[ZP] Extra cucc: Bazooka (Új lövés típusok)
Jobb a forditasa. :)

_________________
<<eb@>>Team Website - Közösség
17Buddies - Általam készített pályák.
GameBanana - Általam készített pályák/vágott hangok.

Kép
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP Bazooka
HozzászólásElküldve: 2014.01.21. 21:11 
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
norbee.16 írta:
https://hlmod.hu/viewtopic.php?f=100&t=12056&hilit=Bazooka
Jobb a forditasa. :)


Lehet de amit én másoltam be az a legfrissebb verzió.

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP Bazooka
HozzászólásElküldve: 2014.01.22. 15:20 
Offline
Minden6ó
Avatar

Csatlakozott: 2011.01.19. 12:14
Hozzászólások: 4280
Megköszönt másnak: 218 alkalommal
Megköszönték neki: 285 alkalommal
Tomos írta:
norbee.16 írta:
https://hlmod.hu/viewtopic.php?f=100&t=12056&hilit=Bazooka
Jobb a forditasa. :)


Lehet de amit én másoltam be az a legfrissebb verzió.

Semmi érdekes változtatás nincs benne + az 1.0 is hibátlanul fut.

_________________
<<eb@>>Team Website - Közösség
17Buddies - Általam készített pályák.
GameBanana - Általam készített pályák/vágott hangok.

Kép
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  [ 5 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