HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  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 stg44g_WEAPONKEY 12345
  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 stg44g_RELOAD_TIME 3.0
  32. #define stg44g_RELOAD 1
  33. #define stg44g_DRAW 2
  34. #define stg44g_SHOOT1 3
  35. #define stg44g_SHOOT2 4
  36.  
  37. #define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
  38.  
  39. new const Fire_Sounds[][] = { "weapons/stg44_shoot1.wav" }
  40.  
  41. new stg44g_V_MODEL[64] = "models/zm/v_stg44g.mdl"
  42. new stg44g_P_MODEL[64] = "models/zm/p_stg44g.mdl"
  43. new stg44g_W_MODEL[64] = "models/zm/w_stg44g.mdl"
  44.  
  45. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  46.  
  47. new cvar_dmg_stg44g, cvar_recoil_stg44g, g_itemid_stg44g, cvar_clip_stg44g, cvar_spd_stg44g, cvar_stg44g_ammo
  48. new g_MaxPlayers, g_orig_event_stg44g, g_IsInPrimaryAttack
  49. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  50. new g_has_stg44g[33], g_clip_ammo[33], g_stg44g_TmpClip[33], oldweap[33]
  51. new gmsgWeaponList
  52.  
  53. const PRIMARY_WEAPONS_BIT_SUM =
  54. (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<<
  55. 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)
  56. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  57. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  58. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  59. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  60. "weapon_ak47", "weapon_knife", "weapon_p90" }
  61.  
  62. public plugin_init()
  63. {
  64. register_plugin("[ZP] Extra: STG-44 Gold", "1.0", "LARS-DAY[BR]EAKER")
  65. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  66. register_event("CurWeapon","CurrentWeapon","be","1=1")
  67. RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_stg44g_AddToPlayer")
  68. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  69. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  70. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  71. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  72. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  73. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  74. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_stg44g_PrimaryAttack")
  75. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_stg44g_PrimaryAttack_Post", 1)
  76. RegisterHam(Ham_Item_PostFrame, "weapon_galil", "stg44g_ItemPostFrame")
  77. RegisterHam(Ham_Weapon_Reload, "weapon_galil", "stg44g_Reload")
  78. RegisterHam(Ham_Weapon_Reload, "weapon_galil", "stg44g_Reload_Post", 1)
  79. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  80. register_forward(FM_SetModel, "fw_SetModel")
  81. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  82. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  83.  
  84. RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
  85. RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
  86. RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
  87. RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
  88. RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
  89. RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
  90. RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
  91.  
  92. cvar_dmg_stg44g = register_cvar("zp_stg44g_dmg", "1.0")
  93. cvar_recoil_stg44g = register_cvar("zp_stg44g_recoil", "0.9")
  94. cvar_clip_stg44g = register_cvar("zp_stg44g_clip", "30")
  95. cvar_spd_stg44g = register_cvar("zp_stg44g_spd", "0.9")
  96. cvar_stg44g_ammo = register_cvar("zp_stg44g_ammo", "180")
  97.  
  98. g_itemid_stg44g = zp_register_extra_item("\r[Assault Rifle] \wSTG-44 Arany", 100, ZP_TEAM_HUMAN)
  99. g_MaxPlayers = get_maxplayers()
  100. gmsgWeaponList = get_user_msgid("WeaponList")
  101. }
  102.  
  103. public plugin_precache()
  104. {
  105. precache_model(stg44g_V_MODEL)
  106. precache_model(stg44g_P_MODEL)
  107. precache_model(stg44g_W_MODEL)
  108. for(new i = 0; i < sizeof Fire_Sounds; i++)
  109. precache_sound(Fire_Sounds[i])
  110. precache_sound("weapons/stg44_clipin.wav")
  111. precache_sound("weapons/stg44_clipout.wav")
  112. precache_sound("weapons/stg44_draw.wav")
  113. precache_sound("weapons/stg44_foley1.wav")
  114. m_iBlood[0] = precache_model("sprites/blood.spr")
  115. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  116. precache_generic("sprites/zm/640hud63.spr")
  117. precache_generic("sprites/zm/ishot.spr")
  118. precache_generic("sprites/zm/640hud2.spr")
  119.  
  120. register_clcmd("weapon_stg44g", "weapon_hook")
  121.  
  122. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  123. }
  124.  
  125. public weapon_hook(id)
  126. {
  127. engclient_cmd(id, "weapon_galil")
  128. return PLUGIN_HANDLED
  129. }
  130.  
  131. public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  132. {
  133. if(!is_user_alive(iAttacker))
  134. return
  135.  
  136. new g_currentweapon = get_user_weapon(iAttacker)
  137.  
  138. if(g_currentweapon != CSW_GALIL) return
  139.  
  140. if(!g_has_stg44g[iAttacker]) return
  141.  
  142. static Float:flEnd[3]
  143. get_tr2(ptr, TR_vecEndPos, flEnd)
  144.  
  145. if(iEnt)
  146. {
  147. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  148. write_byte(TE_DECAL)
  149. write_coord_f(flEnd[0])
  150. write_coord_f(flEnd[1])
  151. write_coord_f(flEnd[2])
  152. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  153. write_short(iEnt)
  154. message_end()
  155. }
  156. else
  157. {
  158. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  159. write_byte(TE_WORLDDECAL)
  160. write_coord_f(flEnd[0])
  161. write_coord_f(flEnd[1])
  162. write_coord_f(flEnd[2])
  163. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  164. message_end()
  165. }
  166. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  167. write_byte(TE_GUNSHOTDECAL)
  168. write_coord_f(flEnd[0])
  169. write_coord_f(flEnd[1])
  170. write_coord_f(flEnd[2])
  171. write_short(iAttacker)
  172. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  173. message_end()
  174. }
  175.  
  176. public zp_user_humanized_post(id)
  177. {
  178. g_has_stg44g[id] = false
  179. }
  180.  
  181. public plugin_natives ()
  182. {
  183. register_native("give_weapon_stg44g", "native_give_weapon_add", 1)
  184. }
  185. public native_give_weapon_add(id)
  186. {
  187. give_stg44g(id)
  188. }
  189.  
  190. public fwPrecacheEvent_Post(type, const name[])
  191. {
  192. if (equal("events/galil.sc", name))
  193. {
  194. g_orig_event_stg44g = get_orig_retval()
  195. return FMRES_HANDLED
  196. }
  197. return FMRES_IGNORED
  198. }
  199.  
  200. public client_connect(id)
  201. {
  202. g_has_stg44g[id] = false
  203. }
  204.  
  205. public client_disconnect(id)
  206. {
  207. g_has_stg44g[id] = false
  208. }
  209.  
  210. public zp_user_infected_post(id)
  211. {
  212. if (zp_get_user_zombie(id))
  213. {
  214. g_has_stg44g[id] = false
  215. }
  216. }
  217.  
  218. public fw_SetModel(entity, model[])
  219. {
  220. if(!is_valid_ent(entity))
  221. return FMRES_IGNORED
  222.  
  223. static szClassName[33]
  224. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  225.  
  226. if(!equal(szClassName, "weaponbox"))
  227. return FMRES_IGNORED
  228.  
  229. static iOwner
  230.  
  231. iOwner = entity_get_edict(entity, EV_ENT_owner)
  232.  
  233. if(equal(model, "models/w_galil.mdl"))
  234. {
  235. static iStoredAugID
  236.  
  237. iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
  238.  
  239. if(!is_valid_ent(iStoredAugID))
  240. return FMRES_IGNORED
  241.  
  242. if(g_has_stg44g[iOwner])
  243. {
  244. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, stg44g_WEAPONKEY)
  245.  
  246. g_has_stg44g[iOwner] = false
  247.  
  248. entity_set_model(entity, stg44g_W_MODEL)
  249.  
  250. return FMRES_SUPERCEDE
  251. }
  252. }
  253. return FMRES_IGNORED
  254. }
  255.  
  256. public give_stg44g(id)
  257. {
  258. drop_weapons(id, 1)
  259. new iWep2 = give_item(id,"weapon_galil")
  260. if( iWep2 > 0 )
  261. {
  262. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_stg44g))
  263. cs_set_user_bpammo (id, CSW_GALIL, get_pcvar_num(cvar_stg44g_ammo))
  264. UTIL_PlayWeaponAnimation(id, stg44g_DRAW)
  265. set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
  266.  
  267. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  268. write_string("weapon_stg44g")
  269. write_byte(4)
  270. write_byte(90)
  271. write_byte(-1)
  272. write_byte(-1)
  273. write_byte(0)
  274. write_byte(17)
  275. write_byte(CSW_GALIL)
  276. message_end()
  277. }
  278. g_has_stg44g[id] = true
  279. }
  280.  
  281. public zp_extra_item_selected(id, itemid)
  282. {
  283. if(itemid != g_itemid_stg44g)
  284. return
  285.  
  286. give_stg44g(id)
  287. }
  288.  
  289. public fw_stg44g_AddToPlayer(stg44g, id)
  290. {
  291. if(!is_valid_ent(stg44g) || !is_user_connected(id))
  292. return HAM_IGNORED
  293.  
  294. if(entity_get_int(stg44g, EV_INT_WEAPONKEY) == stg44g_WEAPONKEY)
  295. {
  296. g_has_stg44g[id] = true
  297.  
  298. entity_set_int(stg44g, EV_INT_WEAPONKEY, 0)
  299.  
  300. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  301. write_string("weapon_stg44g")
  302. write_byte(4)
  303. write_byte(90)
  304. write_byte(-1)
  305. write_byte(-1)
  306. write_byte(0)
  307. write_byte(17)
  308. write_byte(CSW_GALIL)
  309. message_end()
  310.  
  311. return HAM_HANDLED
  312. }
  313. else
  314. {
  315. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  316. write_string("weapon_galil")
  317. write_byte(4)
  318. write_byte(90)
  319. write_byte(-1)
  320. write_byte(-1)
  321. write_byte(0)
  322. write_byte(17)
  323. write_byte(CSW_GALIL)
  324. message_end()
  325. }
  326. return HAM_IGNORED
  327. }
  328.  
  329. public fw_UseStationary_Post(entity, caller, activator, use_type)
  330. {
  331. if (use_type == USE_STOPPED && is_user_connected(caller))
  332. replace_weapon_models(caller, get_user_weapon(caller))
  333. }
  334.  
  335. public fw_Item_Deploy_Post(weapon_ent)
  336. {
  337. static owner
  338. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  339.  
  340. static weaponid
  341. weaponid = cs_get_weapon_id(weapon_ent)
  342.  
  343. replace_weapon_models(owner, weaponid)
  344. }
  345.  
  346. public CurrentWeapon(id)
  347. {
  348. replace_weapon_models(id, read_data(2))
  349.  
  350. if(read_data(2) != CSW_GALIL || !g_has_stg44g[id])
  351. return
  352.  
  353. static Float:iSpeed
  354. if(g_has_stg44g[id])
  355. iSpeed = get_pcvar_float(cvar_spd_stg44g)
  356.  
  357. static weapon[32],Ent
  358. get_weaponname(read_data(2),weapon,31)
  359. Ent = find_ent_by_owner(-1,weapon,id)
  360. if(Ent)
  361. {
  362. static Float:Delay
  363. Delay = get_pdata_float( Ent, 46, 4) * iSpeed
  364. if (Delay > 0.0)
  365. {
  366. set_pdata_float(Ent, 46, Delay, 4)
  367. }
  368. }
  369. }
  370.  
  371. replace_weapon_models(id, weaponid)
  372. {
  373. switch (weaponid)
  374. {
  375. case CSW_GALIL:
  376. {
  377. if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
  378. return
  379.  
  380. if(g_has_stg44g[id])
  381. {
  382. set_pev(id, pev_viewmodel2, stg44g_V_MODEL)
  383. set_pev(id, pev_weaponmodel2, stg44g_P_MODEL)
  384. if(oldweap[id] != CSW_GALIL)
  385. {
  386. UTIL_PlayWeaponAnimation(id, stg44g_DRAW)
  387. set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
  388.  
  389. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  390. write_string("weapon_stg44g")
  391. write_byte(4)
  392. write_byte(90)
  393. write_byte(-1)
  394. write_byte(-1)
  395. write_byte(0)
  396. write_byte(17)
  397. write_byte(CSW_GALIL)
  398. message_end()
  399. }
  400. }
  401. }
  402. }
  403. oldweap[id] = weaponid
  404. }
  405.  
  406. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  407. {
  408. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_GALIL || !g_has_stg44g[Player]))
  409. return FMRES_IGNORED
  410.  
  411. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  412. return FMRES_HANDLED
  413. }
  414.  
  415. public fw_stg44g_PrimaryAttack(Weapon)
  416. {
  417. new Player = get_pdata_cbase(Weapon, 41, 4)
  418.  
  419. if (!g_has_stg44g[Player])
  420. return
  421.  
  422. g_IsInPrimaryAttack = 1
  423. pev(Player,pev_punchangle,cl_pushangle[Player])
  424.  
  425. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  426. }
  427.  
  428. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  429. {
  430. if ((eventid != g_orig_event_stg44g) || !g_IsInPrimaryAttack)
  431. return FMRES_IGNORED
  432. if (!(1 <= invoker <= g_MaxPlayers))
  433. return FMRES_IGNORED
  434.  
  435. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  436. return FMRES_SUPERCEDE
  437. }
  438.  
  439. public fw_stg44g_PrimaryAttack_Post(Weapon)
  440. {
  441. g_IsInPrimaryAttack = 0
  442. new Player = get_pdata_cbase(Weapon, 41, 4)
  443.  
  444. new szClip, szAmmo
  445. get_user_weapon(Player, szClip, szAmmo)
  446.  
  447. if(!is_user_alive(Player))
  448. return
  449.  
  450. if(g_has_stg44g[Player])
  451. {
  452. if (!g_clip_ammo[Player])
  453. return
  454.  
  455. new Float:push[3]
  456. pev(Player,pev_punchangle,push)
  457. xs_vec_sub(push,cl_pushangle[Player],push)
  458.  
  459. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_stg44g),push)
  460. xs_vec_add(push,cl_pushangle[Player],push)
  461. set_pev(Player,pev_punchangle,push)
  462.  
  463. emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  464. UTIL_PlayWeaponAnimation(Player, random_num(stg44g_SHOOT1, stg44g_SHOOT2))
  465. }
  466. }
  467.  
  468. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  469. {
  470. if (victim != attacker && is_user_connected(attacker))
  471. {
  472. if(get_user_weapon(attacker) == CSW_GALIL)
  473. {
  474. if(g_has_stg44g[attacker])
  475. SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_stg44g))
  476. }
  477. }
  478. }
  479.  
  480. public message_DeathMsg(msg_id, msg_dest, id)
  481. {
  482. static szTruncatedWeapon[33], iAttacker, iVictim
  483.  
  484. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  485.  
  486. iAttacker = get_msg_arg_int(1)
  487. iVictim = get_msg_arg_int(2)
  488.  
  489. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  490. return PLUGIN_CONTINUE
  491.  
  492. if(equal(szTruncatedWeapon, "galil") && get_user_weapon(iAttacker) == CSW_GALIL)
  493. {
  494. if(g_has_stg44g[iAttacker])
  495. set_msg_arg_string(4, "galil")
  496. }
  497. return PLUGIN_CONTINUE
  498. }
  499.  
  500. stock fm_cs_get_current_weapon_ent(id)
  501. {
  502. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
  503. }
  504.  
  505. stock fm_cs_get_weapon_ent_owner(ent)
  506. {
  507. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  508. }
  509.  
  510. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  511. {
  512. set_pev(Player, pev_weaponanim, Sequence)
  513.  
  514. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  515. write_byte(Sequence)
  516. write_byte(pev(Player, pev_body))
  517. message_end()
  518. }
  519.  
  520. public stg44g_ItemPostFrame(weapon_entity)
  521. {
  522. new id = pev(weapon_entity, pev_owner)
  523. if (!is_user_connected(id))
  524. return HAM_IGNORED
  525.  
  526. if (!g_has_stg44g[id])
  527. return HAM_IGNORED
  528.  
  529. static iClipExtra
  530.  
  531. iClipExtra = get_pcvar_num(cvar_clip_stg44g)
  532. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  533.  
  534. new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL);
  535. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  536.  
  537. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  538.  
  539. if( fInReload && flNextAttack <= 0.0 )
  540. {
  541. new j = min(iClipExtra - iClip, iBpAmmo)
  542.  
  543. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  544. cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
  545.  
  546. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  547. fInReload = 0
  548. }
  549. return HAM_IGNORED
  550. }
  551.  
  552. public stg44g_Reload(weapon_entity)
  553. {
  554. new id = pev(weapon_entity, pev_owner)
  555. if (!is_user_connected(id))
  556. return HAM_IGNORED
  557.  
  558. if (!g_has_stg44g[id])
  559. return HAM_IGNORED
  560.  
  561. static iClipExtra
  562.  
  563. if(g_has_stg44g[id])
  564. iClipExtra = get_pcvar_num(cvar_clip_stg44g)
  565.  
  566. g_stg44g_TmpClip[id] = -1
  567.  
  568. new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  569. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  570.  
  571. if (iBpAmmo <= 0)
  572. return HAM_SUPERCEDE
  573.  
  574. if (iClip >= iClipExtra)
  575. return HAM_SUPERCEDE
  576.  
  577. g_stg44g_TmpClip[id] = iClip
  578.  
  579. return HAM_IGNORED
  580. }
  581.  
  582. public stg44g_Reload_Post(weapon_entity)
  583. {
  584. new id = pev(weapon_entity, pev_owner)
  585. if (!is_user_connected(id))
  586. return HAM_IGNORED
  587.  
  588. if (!g_has_stg44g[id])
  589. return HAM_IGNORED
  590.  
  591. if (g_stg44g_TmpClip[id] == -1)
  592. return HAM_IGNORED
  593.  
  594. set_pdata_int(weapon_entity, m_iClip, g_stg44g_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  595.  
  596. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, stg44g_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  597.  
  598. set_pdata_float(id, m_flNextAttack, stg44g_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  599.  
  600. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  601.  
  602. UTIL_PlayWeaponAnimation(id, stg44g_RELOAD)
  603.  
  604. return HAM_IGNORED
  605. }
  606.  
  607. stock drop_weapons(id, dropwhat)
  608. {
  609. static weapons[32], num, i, weaponid
  610. num = 0
  611. get_user_weapons(id, weapons, num)
  612.  
  613. for (i = 0; i < num; i++)
  614. {
  615. weaponid = weapons[i]
  616.  
  617. if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  618. {
  619. static wname[32]
  620. get_weaponname(weaponid, wname, sizeof wname - 1)
  621. engclient_cmd(id, "drop", wname)
  622. }
  623. }
  624. }