Advertisement
Guest User

Untitled

a guest
Nov 28th, 2016
625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.58 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <hamsandwich>
  6. #include <xs>
  7. #include <cstrike>
  8. #include <zombieplague>
  9.  
  10. #define ENG_NULLENT -1
  11. #define EV_INT_WEAPONKEY EV_INT_impulse
  12. #define m134_WEAPONKEY 803
  13. #define MAX_PLAYERS 32
  14. #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
  15.  
  16. const USE_STOPPED = 0
  17. const OFFSET_ACTIVE_ITEM = 373
  18. const OFFSET_WEAPONOWNER = 41
  19. const OFFSET_LINUX = 5
  20. const OFFSET_LINUX_WEAPONS = 4
  21.  
  22. #define WEAP_LINUX_XTRA_OFF 4
  23. #define m_fKnown 44
  24. #define m_flNextPrimaryAttack 46
  25. #define m_flTimeWeaponIdle 48
  26. #define m_iClip 51
  27. #define m_fInReload 54
  28. #define PLAYER_LINUX_XTRA_OFF 5
  29. #define m_flNextAttack 83
  30.  
  31. #define m134_RELOAD_TIME 5.0
  32. #define m134_DRAW_TIME 1.1
  33. #define m134_SHOOT1 1
  34. #define m134_RELOAD 3
  35. #define m134_DRAW 4
  36. #define m134_FIRE_READY 5
  37. #define m134_FIRE_AFTER 6
  38.  
  39. #define UP_SCALE -5.0 //ВВЕРХ
  40. #define FORWARD_SCALE 7.5 //ВПЕРЕД
  41. #define RIGHT_SCALE 5.5 //ВПРАВО
  42. #define TE_BOUNCE_SHELL 1
  43.  
  44. new const BUYAMMO[] =
  45. {
  46. -1, 13, //P228
  47. -1, 10, //SCOUT
  48. -1, 7, //XM1014
  49. -1, 30, //MAC10
  50. 30, //AUG
  51. -1, 30, //ELITE
  52. 20, //FIVESEVEN
  53. 25, //UMP45
  54. 30, //SG550
  55. 35, //GALIL
  56. 30, //FAMAS
  57. 12, //USP
  58. 20, //GLOCK18
  59. 10, //AWP
  60. 30, //MP5NAVY
  61. 200, //M249 Должно быть равно = m134_CLIP
  62. 8, //M3
  63. 30, //M4A1
  64. 30, //TMP
  65. 20, //G3SG1
  66. -1, 7, //DEAGLE
  67. 30, //SG552
  68. 30, //AK47
  69. -1, 50 //P90
  70. }
  71. new const MAXBPAMMO[] =
  72. {
  73. -1, 52, //P228
  74. -1, 90, //SCOUT
  75. 1, 32, //XM1014
  76. 1, 100, //MAC10
  77. 90, //AUG
  78. 1, 120, //ELITE
  79. 100, //FIVESEVEN
  80. 100, //UMP45
  81. 90, //SG550
  82. 90, //GALIL
  83. 90, //FAMAS
  84. 100, //USP
  85. 120, //GLOSK18
  86. 30, //AWP
  87. 120, //MP5NAVY
  88. 200, //M249 Должно быть равно = m134_BPAMMO
  89. 32, //M3
  90. 90, //M4A1
  91. 120, //TMP
  92. 90, //G3SG1
  93. 2, 35, //DEAGLE
  94. 90, //SG552
  95. 90, //AK47
  96. -1, 100 //P90
  97. }
  98.  
  99. #define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
  100.  
  101. new const Fire_Sounds[][] = { "YouTuber/m134ex-1.wav", "YouTuber/m134ex-1.wav" }
  102.  
  103. new m134_s_V_MODEL[64] = "models/YouTuber/v_m134_galaxy_r.mdl"
  104. new m134_V_MODEL[64] = "models/YouTuber/v_m134_galaxy_r.mdl"
  105. new m134_P_MODEL[64] = "models/YouTuber/p_m134_galaxy_r.mdl"
  106. new m134_W_MODEL[64] = "models/YouTuber/w_m134_galaxy_r.mdl"
  107.  
  108. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  109.  
  110. new const m134_name[] = "weapon_m134hero_zm7up.txt"
  111.  
  112. new const m134_spr[][] =
  113. {
  114. "sprites/YouTuber/640hud128.spr",
  115. "sprites/YouTuber/640hud128.spr"
  116. }
  117.  
  118. new cvar_dmg_m134, cvar_dmg_m134_survivor, cvar_recoil_m134, g_itemid_m134, cvar_clip_m134, cvar_spd_m134, cvar_m134_ammo, cvar_surv_m134, cvar_speedrun_m134, cvar_speedrunfire_m134
  119. new g_MaxPlayers, g_orig_event_m134, g_IsInPrimaryAttack
  120. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  121. new g_has_m134[33], g_clip_ammo[33], g_m134_TmpClip[33], oldweap[33], g_can[33], g_afterreload[33]
  122. new g_hamczbots, cvar_botquota
  123. new gmsgWeaponList
  124. new gmsgAmmoPickup
  125.  
  126. new const AMMOID[] =
  127. {
  128. -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10, 1, 10, 3, 5, 4, 10,
  129. 2, 11, 8, 4, 2, -1, 7
  130. }
  131.  
  132. const PRIMARY_WEAPONS_BIT_SUM =
  133. (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
  134. CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
  135. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  136. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  137. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  138. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  139. "weapon_ak47", "weapon_knife", "weapon_p90" }
  140.  
  141. public plugin_init()
  142. {
  143. register_plugin("[ZP] Extra: M134", "1.0", "LARS-DAY[BR]EAKER")
  144. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  145. register_event("CurWeapon","CurrentWeapon","be","1=1")
  146. RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "fw_m134_AddToPlayer")
  147. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  148. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  149. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  150. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  151. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  152. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  153. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_m134_PrimaryAttack")
  154. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_m134_PrimaryAttack_Post", 1)
  155. RegisterHam(Ham_Item_PostFrame, "weapon_m249", "m134_ItemPostFrame")
  156. RegisterHam(Ham_Weapon_Reload, "weapon_m249", "m134_Reload")
  157. RegisterHam(Ham_Weapon_Reload, "weapon_m249", "m134_Reload_Post", 1)
  158. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  159. register_forward(FM_SetModel, "fw_SetModel")
  160. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  161. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  162. register_forward(FM_CmdStart, "fw_CmdStart")
  163. register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
  164.  
  165. RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
  166. RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
  167. RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
  168. RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
  169. RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
  170. RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
  171. RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
  172.  
  173. cvar_dmg_m134 = register_cvar("zp_m134_dmg", "1.86")
  174. cvar_dmg_m134_survivor = register_cvar("zp_m134_dmg_survivor", "20.23")
  175. cvar_recoil_m134 = register_cvar("zp_m134_recoil", "0.1")
  176. cvar_clip_m134 = register_cvar("zp_m134_clip", "150")
  177. cvar_spd_m134 = register_cvar("zp_m134_spd", "0.75")
  178. cvar_m134_ammo = register_cvar("zp_m134_ammo", "200")
  179. cvar_surv_m134 = register_cvar("zp_m134_givesurvivor", "1")
  180. cvar_speedrunfire_m134 = register_cvar("zp_m134_speedrunfire", "240.0")
  181. cvar_speedrun_m134 = register_cvar("zp_m134_speedrun", "240.0")
  182.  
  183. g_itemid_m134 = zp_register_extra_item("\r[\wP\r] \y M134 Galaxy", 150, ZP_TEAM_SURVIVOR)
  184. g_MaxPlayers = get_maxplayers()
  185. cvar_botquota = get_cvar_pointer("bot_quota")
  186. gmsgWeaponList = get_user_msgid("WeaponList")
  187. register_clcmd(m134_name, "command_m134")
  188. register_clcmd("buyammo1", "fw_BuyAmmo")
  189. register_clcmd("buyammo2", "fw_BuyAmmo")
  190. gmsgAmmoPickup = get_user_msgid("AmmoPickup")
  191. }
  192.  
  193. public plugin_precache()
  194. {
  195. precache_model(m134_s_V_MODEL)
  196. precache_model(m134_V_MODEL)
  197. precache_model(m134_P_MODEL)
  198. precache_model(m134_W_MODEL)
  199. for(new i = 0; i < sizeof Fire_Sounds; i++)
  200. precache_sound(Fire_Sounds[i])
  201. precache_sound("YouTuber/m134_draw.wav")
  202. precache_sound("YouTuber/m134_reload1.wav")
  203. precache_sound("YouTuber/m134_reload2_gas2.wav")
  204. precache_sound("YouTuber/m134_reload3.wav")
  205. precache_sound("YouTuber/m134_shoot_end.wav")
  206. precache_sound("YouTuber/m134_shoot_start.wav")
  207. m_iBlood[0] = precache_model("sprites/blood.spr")
  208. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  209.  
  210. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  211.  
  212. new sFile[64]
  213. formatex(sFile, charsmax(sFile), "sprites/%s.txt", m134_name)
  214. precache_generic(sFile)
  215.  
  216. for(new i = 0; i < sizeof(m134_spr); i++)
  217. {
  218. precache_generic(m134_spr[i])
  219. }
  220. }
  221.  
  222. public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  223. {
  224. if(!is_user_alive(iAttacker))
  225. return
  226.  
  227. new g_currentweapon = get_user_weapon(iAttacker)
  228.  
  229. if(g_currentweapon != CSW_M249) return
  230.  
  231. if(!g_has_m134[iAttacker]) return
  232.  
  233. static Float:flEnd[3]
  234. get_tr2(ptr, TR_vecEndPos, flEnd)
  235.  
  236. if(iEnt)
  237. {
  238. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  239. write_byte(TE_DECAL)
  240. write_coord_f(flEnd[0])
  241. write_coord_f(flEnd[1])
  242. write_coord_f(flEnd[2])
  243. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  244. write_short(iEnt)
  245. message_end()
  246. }
  247. else
  248. {
  249. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  250. write_byte(TE_WORLDDECAL)
  251. write_coord_f(flEnd[0])
  252. write_coord_f(flEnd[1])
  253. write_coord_f(flEnd[2])
  254. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  255. message_end()
  256. }
  257. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  258. write_byte(TE_GUNSHOTDECAL)
  259. write_coord_f(flEnd[0])
  260. write_coord_f(flEnd[1])
  261. write_coord_f(flEnd[2])
  262. write_short(iAttacker)
  263. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  264. message_end()
  265. }
  266.  
  267. public register_ham_czbots(Player)
  268. {
  269. if (g_hamczbots || !is_user_connected(Player) || !get_pcvar_num(cvar_botquota)) return
  270.  
  271. RegisterHamFromEntity(Ham_TakeDamage, Player, "fw_TakeDamage")
  272.  
  273. g_hamczbots = true
  274. }
  275.  
  276. public client_putinserver(Player)
  277. {
  278. if(is_user_bot(Player) && !g_hamczbots && cvar_botquota) set_task(0.1, "register_ham_czbots", Player)
  279. }
  280.  
  281. public command_m134(Player)
  282. {
  283. engclient_cmd(Player, "weapon_m249")
  284. return PLUGIN_HANDLED
  285. }
  286.  
  287. public fw_BuyAmmo(Player)
  288. {
  289. if(!is_user_alive(Player))
  290. return PLUGIN_CONTINUE
  291.  
  292. if(!g_has_m134[Player])
  293. return PLUGIN_CONTINUE
  294.  
  295. static iAmmoPack; iAmmoPack = zp_get_user_ammo_packs(Player)
  296.  
  297. static weapons[32], num, i, currentammo, weaponid, refilled
  298. num = 0
  299. refilled = false
  300. get_user_weapons(Player, weapons, num)
  301.  
  302. for(i = 0; i < num; i++)
  303. {
  304. weaponid = weapons[i]
  305.  
  306. if(MAXBPAMMO[weaponid] > 2)
  307. {
  308. currentammo = cs_get_user_bpammo(Player, weaponid)
  309.  
  310. if (currentammo < MAXBPAMMO[weaponid]-BUYAMMO[weaponid])
  311. {
  312. message_begin(MSG_ONE_UNRELIABLE, gmsgAmmoPickup, _, Player)
  313. write_byte(AMMOID[weaponid])
  314. write_byte(BUYAMMO[weaponid])
  315. message_end()
  316.  
  317. cs_set_user_bpammo (Player, weaponid, currentammo + BUYAMMO[weaponid])
  318.  
  319. refilled = true
  320. }
  321. else if (currentammo < MAXBPAMMO[weaponid])
  322. {
  323. message_begin(MSG_ONE_UNRELIABLE, gmsgAmmoPickup, _, Player)
  324. write_byte(AMMOID[weaponid])
  325. write_byte(MAXBPAMMO[weaponid]-currentammo)
  326. message_end()
  327.  
  328. cs_set_user_bpammo (Player, weaponid, MAXBPAMMO[weaponid])
  329.  
  330. refilled = true
  331. }
  332. }
  333. }
  334. if (!refilled) return PLUGIN_HANDLED
  335.  
  336. zp_set_user_ammo_packs(Player, --iAmmoPack)
  337. engfunc(EngFunc_EmitSound, Player, CHAN_ITEM, "items/9mmclip1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  338. client_print(Player, print_chat, "[ZP] You purchased extra ammo for your guns.")
  339.  
  340. return PLUGIN_HANDLED
  341. }
  342.  
  343. public zp_user_humanized_post(id, surv)
  344. {
  345. g_has_m134[id] = false
  346. if(surv && get_pcvar_num(cvar_surv_m134)) give_m134(id)
  347. }
  348.  
  349. public plugin_natives ()
  350. {
  351. register_native("give_weapon_m134", "native_give_weapon_add", 1)
  352. }
  353. public native_give_weapon_add(id)
  354. {
  355. give_m134(id)
  356. }
  357.  
  358. public fwPrecacheEvent_Post(type, const name[])
  359. {
  360. if (equal("events/m249.sc", name))
  361. {
  362. g_orig_event_m134 = get_orig_retval()
  363. return FMRES_HANDLED
  364. }
  365. return FMRES_IGNORED
  366. }
  367.  
  368. public client_connect(id)
  369. {
  370. g_has_m134[id] = false
  371. }
  372.  
  373. public client_disconnect(id)
  374. {
  375. g_has_m134[id] = false
  376. }
  377.  
  378. public zp_user_infected_post(id)
  379. {
  380. if (zp_get_user_zombie(id))
  381. {
  382. g_has_m134[id] = false
  383. }
  384. }
  385.  
  386. public user_can(id)
  387. {
  388. g_can[id] = 2
  389. }
  390.  
  391. public user_can2(id)
  392. {
  393. g_can[id] = 0
  394. }
  395.  
  396. public fw_SetModel(entity, model[])
  397. {
  398. if(!is_valid_ent(entity))
  399. return FMRES_IGNORED
  400.  
  401. static szClassName[33]
  402. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  403.  
  404. if(!equal(szClassName, "weaponbox"))
  405. return FMRES_IGNORED
  406.  
  407. static iOwner
  408.  
  409. iOwner = entity_get_edict(entity, EV_ENT_owner)
  410.  
  411. if(equal(model, "models/w_m249.mdl"))
  412. {
  413. static iStoredAugID
  414.  
  415. iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_m249", entity)
  416.  
  417. if(!is_valid_ent(iStoredAugID))
  418. return FMRES_IGNORED
  419.  
  420. if(g_has_m134[iOwner])
  421. {
  422. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, m134_WEAPONKEY)
  423.  
  424. g_has_m134[iOwner] = false
  425.  
  426. entity_set_model(entity, m134_W_MODEL)
  427.  
  428. set_pev(entity, pev_body, 29)
  429.  
  430. return FMRES_SUPERCEDE
  431. }
  432. }
  433. return FMRES_IGNORED
  434. }
  435.  
  436. public give_m134(id)
  437. {
  438. drop_weapons(id, 1)
  439. new iWep2 = give_item(id,"weapon_m249")
  440. if( iWep2 > 0 )
  441. {
  442. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_m134))
  443. cs_set_user_bpammo (id, CSW_M249, get_pcvar_num(cvar_m134_ammo))
  444. UTIL_PlayWeaponAnimation(id, m134_DRAW)
  445. set_pdata_float(id, m_flNextAttack, m134_DRAW_TIME, PLAYER_LINUX_XTRA_OFF)
  446.  
  447. message_begin(MSG_ONE, gmsgWeaponList, _, id)
  448. write_string(m134_name)
  449. write_byte(3)
  450. write_byte(200)
  451. write_byte(-1)
  452. write_byte(-1)
  453. write_byte(0)
  454. write_byte(4)
  455. write_byte(CSW_M249)
  456. message_end()
  457. }
  458. g_has_m134[id] = true
  459. }
  460.  
  461. public zp_extra_item_selected(id, itemid)
  462. {
  463. if(itemid != g_itemid_m134)
  464. return
  465.  
  466. give_m134(id)
  467. }
  468.  
  469. public fw_m134_AddToPlayer(m134, id)
  470. {
  471. if(!is_valid_ent(m134) || !is_user_connected(id))
  472. return HAM_IGNORED
  473.  
  474. if(entity_get_int(m134, EV_INT_WEAPONKEY) == m134_WEAPONKEY)
  475. {
  476. g_has_m134[id] = true
  477.  
  478. entity_set_int(m134, EV_INT_WEAPONKEY, 0)
  479.  
  480. message_begin(MSG_ONE, gmsgWeaponList, _, id)
  481. write_string(m134_name)
  482. write_byte(3)
  483. write_byte(200)
  484. write_byte(-1)
  485. write_byte(-1)
  486. write_byte(0)
  487. write_byte(4)
  488. write_byte(CSW_M249)
  489. message_end()
  490.  
  491. return HAM_HANDLED
  492. }
  493. else
  494. {
  495. message_begin(MSG_ONE, gmsgWeaponList, _, id)
  496. write_string("weapon_m249")
  497. write_byte(3)
  498. write_byte(200)
  499. write_byte(-1)
  500. write_byte(-1)
  501. write_byte(0)
  502. write_byte(4)
  503. write_byte(CSW_M249)
  504. message_end()
  505. }
  506. return HAM_IGNORED
  507. }
  508.  
  509. public fw_UseStationary_Post(entity, caller, activator, use_type)
  510. {
  511. if (use_type == USE_STOPPED && is_user_connected(caller))
  512. replace_weapon_models(caller, get_user_weapon(caller))
  513. }
  514.  
  515. public fw_Item_Deploy_Post(weapon_ent)
  516. {
  517. static owner
  518. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  519.  
  520. static weaponid
  521. weaponid = cs_get_weapon_id(weapon_ent)
  522.  
  523. replace_weapon_models(owner, weaponid)
  524. }
  525.  
  526. public CurrentWeapon(id)
  527. {
  528. replace_weapon_models(id, read_data(2))
  529.  
  530. if(read_data(2) != CSW_M249 || !g_has_m134[id])
  531. return
  532.  
  533. static Float:iSpeed
  534. if(g_has_m134[id])
  535. iSpeed = get_pcvar_float(cvar_spd_m134)
  536.  
  537. static weapon[32],Ent
  538. get_weaponname(read_data(2),weapon,31)
  539. Ent = find_ent_by_owner(-1,weapon,id)
  540. if(Ent)
  541. {
  542. static Float:Delay
  543. Delay = get_pdata_float( Ent, 46, 4) * iSpeed
  544. if (Delay > 0.0)
  545. {
  546. set_pdata_float(Ent, 46, Delay, 4)
  547. }
  548. }
  549. }
  550.  
  551. replace_weapon_models(id, weaponid)
  552. {
  553. switch (weaponid)
  554. {
  555. case CSW_M249:
  556. {
  557. if (zp_get_user_zombie(id))
  558. return
  559.  
  560. if(g_has_m134[id])
  561. {
  562. if(zp_get_user_survivor(id))
  563. set_pev(id, pev_viewmodel2, m134_s_V_MODEL)
  564. else
  565. set_pev(id, pev_viewmodel2, m134_V_MODEL)
  566.  
  567. set_pev(id, pev_weaponmodel2, m134_P_MODEL)
  568.  
  569. message_begin(MSG_ONE, get_user_msgid("CurWeapon"), {0,0,0}, id)
  570. write_byte(1)
  571. write_byte(CSW_KNIFE)
  572. write_byte(0)
  573. message_end()
  574.  
  575. if(oldweap[id] != CSW_M249)
  576. {
  577. UTIL_PlayWeaponAnimation(id, m134_DRAW)
  578. set_pdata_float(id, m_flNextAttack, m134_DRAW_TIME, PLAYER_LINUX_XTRA_OFF)
  579.  
  580. message_begin(MSG_ONE, gmsgWeaponList, _, id)
  581. write_string(m134_name)
  582. write_byte(3)
  583. write_byte(200)
  584. write_byte(-1)
  585. write_byte(-1)
  586. write_byte(0)
  587. write_byte(4)
  588. write_byte(CSW_M249)
  589. message_end()
  590. }
  591. }
  592. }
  593. }
  594. if(weaponid != CSW_M249)
  595. {
  596. remove_task(id)
  597. g_can[id] = 0
  598. g_afterreload[id] = 0
  599. if(oldweap[id] == CSW_M249 && g_has_m134[id])
  600. {
  601. message_begin(MSG_ONE, get_user_msgid("CurWeapon"), {0,0,0}, id)
  602. write_byte(1)
  603. write_byte(CSW_KNIFE)
  604. write_byte(0)
  605. message_end()
  606. }
  607. }
  608. oldweap[id] = weaponid
  609. }
  610.  
  611. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  612. {
  613. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M249 || !g_has_m134[Player]))
  614. return FMRES_IGNORED
  615.  
  616. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  617. return FMRES_HANDLED
  618. }
  619.  
  620. public fw_CmdStart(id, uc_handle, seed)
  621. {
  622. if(!is_user_alive(id) || zp_get_user_zombie(id) || get_user_weapon(id) != CSW_M249 || !g_has_m134[id])
  623. return PLUGIN_HANDLED
  624.  
  625. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  626.  
  627. if(flNextAttack > 0.0)
  628. return PLUGIN_HANDLED
  629.  
  630. new szClip, szAmmo
  631. get_user_weapon(id, szClip, szAmmo)
  632.  
  633. if(szClip <= 0)
  634. return PLUGIN_HANDLED
  635.  
  636. if(!(pev(id, pev_oldbuttons) & IN_ATTACK))
  637. {
  638. remove_task(id)
  639. set_pdata_float(id, m_flNextAttack, 0.0, PLAYER_LINUX_XTRA_OFF)
  640. g_can[id] = 0
  641. }
  642. if((pev(id, pev_oldbuttons) & IN_ATTACK) && !(get_uc(uc_handle, UC_Buttons) & IN_ATTACK))
  643. {
  644. remove_task(id)
  645. set_task(1.0,"user_can2",id)
  646. g_can[id] = 3
  647. set_pdata_float(id, m_flNextAttack, m134_DRAW_TIME, PLAYER_LINUX_XTRA_OFF)
  648. UTIL_PlayWeaponAnimation(id,m134_FIRE_AFTER)
  649. g_can[id] = 0
  650. }
  651. return PLUGIN_HANDLED
  652. }
  653.  
  654. public fw_m134_PrimaryAttack(Weapon)
  655. {
  656. new Player = get_pdata_cbase(Weapon, 41, 4)
  657.  
  658. if (!g_has_m134[Player])
  659. return HAM_IGNORED
  660.  
  661. g_IsInPrimaryAttack = 1
  662.  
  663. if(g_afterreload[Player])
  664. {
  665. g_afterreload[Player] = 0
  666. return HAM_SUPERCEDE
  667. }
  668. new Float:flNextAttack = get_pdata_float(Player, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  669.  
  670. if(flNextAttack > 0.0)
  671. return HAM_IGNORED
  672.  
  673. new szClip, szAmmo
  674. get_user_weapon(Player, szClip, szAmmo)
  675.  
  676. if(!g_can[Player] || g_can[Player] == 3)
  677. {
  678. if(szClip <= 0)
  679. {
  680. UTIL_PlayWeaponAnimation(Player,m134_FIRE_AFTER)
  681. set_pdata_float(Player, m_flNextAttack, m134_DRAW_TIME, PLAYER_LINUX_XTRA_OFF)
  682. return HAM_SUPERCEDE
  683. }
  684. set_task(1.0,"user_can",Player)
  685. g_can[Player] = 1
  686. set_pdata_float(Player, m_flNextAttack, 1.1, PLAYER_LINUX_XTRA_OFF)
  687. UTIL_PlayWeaponAnimation(Player,m134_FIRE_READY)
  688. return HAM_SUPERCEDE
  689. }
  690. pev(Player,pev_punchangle,cl_pushangle[Player])
  691.  
  692. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  693.  
  694. return HAM_IGNORED
  695. }
  696.  
  697. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  698. {
  699. if ((eventid != g_orig_event_m134) || !g_IsInPrimaryAttack)
  700. return FMRES_IGNORED
  701. if (!(1 <= invoker <= g_MaxPlayers))
  702. return FMRES_IGNORED
  703.  
  704. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  705. return FMRES_SUPERCEDE
  706. }
  707.  
  708. public fw_m134_PrimaryAttack_Post(Weapon)
  709. {
  710. g_IsInPrimaryAttack = 0
  711. new Player = get_pdata_cbase(Weapon, 41, 4)
  712.  
  713. if(!is_user_alive(Player))
  714. return
  715.  
  716. new szClip, szAmmo
  717. get_user_weapon(Player, szClip, szAmmo)
  718.  
  719. if(g_has_m134[Player])
  720. {
  721. if(g_can[Player] != 2)
  722. return
  723.  
  724. if(szClip <= 0)
  725. {
  726. UTIL_PlayWeaponAnimation(Player,m134_FIRE_AFTER)
  727. set_pdata_float(Player, m_flNextAttack, m134_DRAW_TIME, PLAYER_LINUX_XTRA_OFF)
  728. }
  729.  
  730. if (!g_clip_ammo[Player])
  731. return
  732.  
  733. new Float:push[3]
  734. pev(Player,pev_punchangle,push)
  735. xs_vec_sub(push,cl_pushangle[Player],push)
  736.  
  737. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_m134),push)
  738. xs_vec_add(push,cl_pushangle[Player],push)
  739. set_pev(Player,pev_punchangle,push)
  740.  
  741. random_num(emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM),emit_sound(Player, CHAN_WEAPON, Fire_Sounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM))
  742. UTIL_PlayWeaponAnimation(Player, m134_SHOOT1)
  743.  
  744. static Float:vVel[3], Float:vAngle[3], Float:vOrigin[3], Float:vViewOfs[3],
  745. i, Float:vShellOrigin[3], Float:vShellVelocity[3], Float:vRight[3],
  746. Float:vUp[3], Float:vForward[3]
  747. pev(Player, pev_velocity, vVel)
  748. pev(Player, pev_view_ofs, vViewOfs)
  749. pev(Player, pev_angles, vAngle)
  750. pev(Player, pev_origin, vOrigin)
  751. global_get(glb_v_right, vRight)
  752. global_get(glb_v_up, vUp)
  753. global_get(glb_v_forward, vForward)
  754. for(i = 0; i<3; i++)
  755. {
  756. vShellOrigin[i] = vOrigin[i] + vViewOfs[i] + vUp[i] * UP_SCALE + vForward[i] * FORWARD_SCALE + vRight[i] * RIGHT_SCALE
  757. vShellVelocity[i] = vVel[i] + vRight[i] * random_float(-50.0, -70.0) + vUp[i] * random_float(100.0, 150.0) + vForward[i] * 25.0
  758. }
  759. }
  760. }
  761.  
  762. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  763. {
  764. if (victim != attacker && is_user_connected(attacker))
  765. {
  766. if(get_user_weapon(attacker) == CSW_M249)
  767. {
  768. if(g_has_m134[attacker])
  769. {
  770. if(zp_get_user_survivor(attacker))
  771. {
  772. SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_m134_survivor))
  773. }else {
  774. SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_m134))
  775. }
  776. }
  777. }
  778. }
  779. }
  780.  
  781. public message_DeathMsg(msg_id, msg_dest, id)
  782. {
  783. static szTruncatedWeapon[33], iAttacker, iVictim
  784.  
  785. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  786.  
  787. iAttacker = get_msg_arg_int(1)
  788. iVictim = get_msg_arg_int(2)
  789.  
  790. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  791. return PLUGIN_CONTINUE
  792.  
  793. if(equal(szTruncatedWeapon, "m249") && get_user_weapon(iAttacker) == CSW_M249)
  794. {
  795. if(g_has_m134[iAttacker])
  796. set_msg_arg_string(4, "m249")
  797. }
  798. return PLUGIN_CONTINUE
  799. }
  800.  
  801. stock fm_cs_get_current_weapon_ent(id)
  802. {
  803. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
  804. }
  805.  
  806. stock fm_cs_get_weapon_ent_owner(ent)
  807. {
  808. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  809. }
  810.  
  811. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  812. {
  813. set_pev(Player, pev_weaponanim, Sequence)
  814.  
  815. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  816. write_byte(Sequence)
  817. write_byte(pev(Player, pev_body))
  818. message_end()
  819. }
  820.  
  821. public m134_ItemPostFrame(weapon_entity)
  822. {
  823. new id = pev(weapon_entity, pev_owner)
  824. if (!is_user_connected(id))
  825. return HAM_IGNORED
  826.  
  827. if (!g_has_m134[id])
  828. return HAM_IGNORED
  829.  
  830. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  831.  
  832. new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  833. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  834.  
  835. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  836.  
  837. if( fInReload && flNextAttack <= 0.0 )
  838. {
  839. new j = min(get_pcvar_num(cvar_clip_m134) - iClip, iBpAmmo)
  840.  
  841. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  842. cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)
  843.  
  844. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  845. fInReload = 0
  846. g_can[id] = 0
  847. }
  848. return HAM_IGNORED
  849. }
  850.  
  851. public m134_Reload(weapon_entity)
  852. {
  853. new id = pev(weapon_entity, pev_owner)
  854. if (!is_user_connected(id))
  855. return HAM_IGNORED
  856.  
  857. if (!g_has_m134[id])
  858. return HAM_IGNORED
  859.  
  860. g_m134_TmpClip[id] = -1
  861.  
  862. new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  863. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  864.  
  865. if (iBpAmmo <= 0)
  866. return HAM_SUPERCEDE
  867.  
  868. if (iClip >= get_pcvar_num(cvar_clip_m134))
  869. return HAM_SUPERCEDE
  870.  
  871. g_m134_TmpClip[id] = iClip
  872.  
  873. return HAM_IGNORED
  874. }
  875.  
  876. public m134_Reload_Post(weapon_entity)
  877. {
  878. new id = pev(weapon_entity, pev_owner)
  879. if (!is_user_connected(id))
  880. return HAM_IGNORED
  881.  
  882. if (!g_has_m134[id])
  883. return HAM_IGNORED
  884.  
  885. if(zp_get_user_survivor(id) && get_pcvar_num(cvar_surv_m134))
  886. return HAM_SUPERCEDE
  887.  
  888. new szClip, szAmmo
  889. get_user_weapon(id, szClip, szAmmo)
  890.  
  891. if (szClip == get_pcvar_num(cvar_clip_m134))
  892. return HAM_IGNORED
  893.  
  894. if (szAmmo <= 0)
  895. return HAM_IGNORED
  896.  
  897. if (g_m134_TmpClip[id] == -1)
  898. return HAM_IGNORED
  899.  
  900. set_pdata_int(weapon_entity, m_iClip, g_m134_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  901.  
  902. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, m134_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  903.  
  904. set_pdata_float(id, m_flNextAttack, m134_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  905.  
  906. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  907.  
  908. UTIL_PlayWeaponAnimation(id, m134_RELOAD)
  909.  
  910. remove_task(id)
  911. g_can[id] = 0
  912. g_afterreload[id] = 1
  913.  
  914. return HAM_IGNORED
  915. }
  916.  
  917. public client_PreThink(id)
  918. {
  919. if(!is_user_alive(id) || zp_get_user_zombie(id) || !g_has_m134[id] || get_user_weapon(id) != CSW_M249)
  920. return
  921.  
  922. new szClip, szAmmo
  923. get_user_weapon(id, szClip, szAmmo)
  924.  
  925. if(szClip <= 0 && szAmmo <= 0)
  926. g_can[id] = 0
  927.  
  928. set_hudmessage(200, 80, 0, 1.0, 0.98, 0, 0.1, 0.1,0.0,0.0)
  929. show_hudmessage(id, "Ammo: %d / %d",szClip,szAmmo)
  930. }
  931.  
  932. public fw_PlayerPreThink(id)
  933. {
  934. if(!is_user_alive(id) || zp_get_user_zombie(id) || !g_has_m134[id] || get_user_weapon(id) != CSW_M249)
  935. return
  936.  
  937. new szClip
  938. get_user_weapon(id, szClip)
  939.  
  940. if(g_can[id]) set_pev(id, pev_maxspeed, get_pcvar_float(cvar_speedrunfire_m134))
  941. if(!g_can[id] || szClip <= 0) set_pev(id, pev_maxspeed, get_pcvar_float(cvar_speedrun_m134))
  942. }
  943.  
  944. stock drop_weapons(id, dropwhat)
  945. {
  946. static weapons[32], num, i, weaponid
  947. num = 0
  948. get_user_weapons(id, weapons, num)
  949.  
  950. for (i = 0; i < num; i++)
  951. {
  952. weaponid = weapons[i]
  953.  
  954. if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  955. {
  956. static wname[32]
  957. get_weaponname(weaponid, wname, sizeof wname - 1)
  958. engclient_cmd(id, "drop", wname)
  959. }
  960. }
  961. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement