Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.48 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 desperado_WEAPONKEY 992
  13. #define MAX_PLAYERS 32
  14. #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
  15.  
  16. #pragma tabsize 0
  17.  
  18. const USE_STOPPED = 0
  19. const OFFSET_ACTIVE_ITEM = 373
  20. const OFFSET_WEAPONOWNER = 41
  21. const OFFSET_LINUX = 5
  22. const OFFSET_LINUX_WEAPONS = 4
  23.  
  24. #define m_iId 43
  25. #define m_flNextSecondaryAttack 46
  26. #define WEAP_LINUX_XTRA_OFF 4
  27. #define m_fKnown 44
  28. #define m_flNextPrimaryAttack 46
  29. #define m_flTimeWeaponIdle 48
  30. #define m_iClip 51
  31. #define m_fInReload 54
  32. #define PLAYER_LINUX_XTRA_OFF 5
  33. #define m_flNextAttack 83
  34.  
  35. #define desperado_RELOAD_TIME 0.43
  36.  
  37. //MALE
  38. #define desperado_RUN_BEGIN 1
  39. #define desperado_RUN_IDLE 2
  40. #define desperado_RUN_END 3
  41. #define desperado_DRAW 4
  42. #define desperado_SHOOT1 5
  43. #define desperado_SHOOT2 5
  44. #define desperado_SHOOT_EMPTY 5
  45. #define desperado_RELOAD 6
  46.  
  47. //SWAPING
  48.  
  49. new g_swaped[33]
  50. new g_mode[33]
  51.  
  52. #define SWAP2M 15
  53. #define SWAP2W 7
  54.  
  55. enum
  56. {
  57. ANIM_IDLE_M = 0,
  58. ANIM_RUN_START_M,
  59. ANIM_RUN_IDLE_M,
  60. ANIM_RUN_END_M,
  61. ANIM_DRAW_M,
  62. ANIM_SHOOT_M,
  63. ANIM_RELOAD_M,
  64. ANIM_SWAB_M,
  65. ANIM_IDLE_W,
  66. ANIM_RUN_START_W,
  67. ANIM_RUN_IDLE_W,
  68. ANIM_RUN_END_W,
  69. ANIM_DRAW_W,
  70. ANIM_SHOOT_W,
  71. ANIM_RELOAD_W,
  72. ANIM_SWAB_W
  73. }
  74.  
  75. //WOMAN
  76. #define desperado1_RUN_BEGIN 9
  77. #define desperado1_RUN_IDLE 10
  78. #define desperado1_RUN_END 11
  79. #define desperado1_DRAW 12
  80. #define desperado1_SHOOT1 13
  81. #define desperado1_SHOOT2 13
  82. #define desperado1_SHOOT_EMPTY 13
  83. #define desperado1_RELOAD 14
  84.  
  85. #define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
  86.  
  87. new const Fire_Sounds[][] = { "weapons/dprd-1.wav" }
  88.  
  89. new desperado_V_MODEL[64] = "models/v_desperado.mdl"
  90. new desperado_P_MODEL1[64] = "models/p_desperado.mdl"
  91. new desperado_P_MODEL2[64] = "models/p_desperado2.mdl"
  92. new desperado_W_MODEL[64] = "models/w_desperado.mdl"
  93.  
  94. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  95.  
  96. new cvar_dmg_desperado,cvar_dmg_desperado2, cvar_recoil_desperado, cvar_clip_desperado, cvar_spd_desperado, cvar_desperado_ammo,cvar_desperado_knock
  97. new g_MaxPlayers, g_orig_event_desperado, g_IsInPrimaryAttack, g_iClip
  98. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  99. new g_has_desperado[33], g_clip_ammo[33], g_desperado_TmpClip[33], oldweap[33]
  100. new gmsgWeaponList
  101.  
  102. const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
  103. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_deagle", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  104. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  105. "weapon_ak47", "weapon_knife", "weapon_p90" }
  106.  
  107. public plugin_init()
  108. {
  109. register_plugin("[CSO] Python Desperado", "1.0", "TK N CASH")
  110. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  111. register_event("CurWeapon","CurrentWeapon","be","1=1")
  112. RegisterHam(Ham_Item_AddToPlayer, "weapon_deagle", "fw_desperado_AddToPlayer")
  113. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  114. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  115. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  116. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  117. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  118. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  119. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_desperado_PrimaryAttack")
  120. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_desperado_PrimaryAttack_Post", 1)
  121. RegisterHam(Ham_Item_PostFrame, "weapon_deagle", "desperado_ItemPostFrame")
  122. RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "desperado_Reload")
  123. RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "desperado_Reload_Post", 1)
  124. RegisterHam(Ham_Weapon_WeaponIdle, "weapon_deagle", "HAM_Weapon_WeaponIdle")
  125. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  126. register_forward(FM_SetModel, "fw_SetModel")
  127. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  128. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  129. register_forward(FM_CmdStart, "fw_CmdStart")
  130.  
  131. RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
  132. RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
  133. RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
  134. RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
  135. RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
  136. RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
  137. RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
  138.  
  139. RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_deagle", "event_Damage")
  140.  
  141. cvar_dmg_desperado = register_cvar("desperado_dmg", "2.2")
  142. cvar_dmg_desperado2 = register_cvar("desperado_dmg2", "0.2")
  143. cvar_desperado_knock = register_cvar("desperado_knock", "3.5")
  144. cvar_recoil_desperado = register_cvar("desperado_recoil", "0.75")
  145. cvar_clip_desperado = register_cvar("desperado_clip", "7")
  146. cvar_spd_desperado = register_cvar("desperado_spd", "0.5")
  147. cvar_desperado_ammo = register_cvar("desperado_ammo", "210")
  148.  
  149. register_clcmd("admin_get_desperado" , "give_desperado" , ADMIN_KICK)
  150.  
  151. //g_itemid_desperado = zp_register_extra_item("Python Desperado", 5, ZP_TEAM_HUMAN)
  152. g_MaxPlayers = get_maxplayers()
  153. gmsgWeaponList = get_user_msgid("WeaponList")
  154. }
  155.  
  156. public plugin_precache()
  157. {
  158. precache_model(desperado_V_MODEL)
  159. precache_model(desperado_P_MODEL1)
  160. precache_model(desperado_P_MODEL2)
  161. precache_model(desperado_W_MODEL)
  162. for(new i = 0; i < sizeof Fire_Sounds; i++)
  163. precache_sound(Fire_Sounds[i])
  164. precache_sound("weapons/dprd_reload_m.wav")
  165. m_iBlood[0] = precache_model("sprites/blood.spr")
  166. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  167. precache_generic("sprites/weapon_desperado.txt")
  168. precache_generic("sprites/640hud164.spr")
  169. precache_generic("sprites/640hud18.spr")
  170.  
  171. register_clcmd("weapon_desperado", "weapon_hook")
  172.  
  173. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  174. }
  175.  
  176.  
  177. public zp_user_infected_post(id)
  178. {
  179. if (zp_get_user_zombie(id))
  180. {
  181. g_has_desperado[id] = false
  182. }
  183. }
  184.  
  185. public weapon_hook(id)
  186. {
  187. engclient_cmd(id, "weapon_deagle")
  188. return PLUGIN_HANDLED
  189. }
  190.  
  191. public event_Damage(id)
  192. {
  193. if(!is_user_alive(id))
  194. return PLUGIN_CONTINUE;
  195.  
  196. new weapon , attacker = get_user_attacker(id , weapon);
  197.  
  198. if(!is_user_alive(attacker))
  199. return PLUGIN_CONTINUE;
  200.  
  201. if(!g_has_desperado[id])
  202. return PLUGIN_CONTINUE;
  203.  
  204. if(g_swaped[id])
  205. return PLUGIN_CONTINUE;
  206.  
  207. if(!g_swaped[attacker])
  208. {
  209. new Float:vec[3];
  210. new Float:oldvelo[3];
  211. get_user_velocity(id, oldvelo);
  212. create_velocity_vector(id , attacker , vec);
  213. vec[0] += oldvelo[0];
  214. vec[1] += oldvelo[1];
  215. set_user_velocity(id , vec);
  216. }
  217. return PLUGIN_CONTINUE;
  218. }
  219.  
  220. public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  221. {
  222. if(!is_user_alive(iAttacker))
  223. return
  224.  
  225. new g_currentweapon = get_user_weapon(iAttacker)
  226.  
  227. if(g_currentweapon != CSW_DEAGLE) return
  228.  
  229. if(!g_has_desperado[iAttacker]) return
  230.  
  231. static Float:flEnd[3]
  232. get_tr2(ptr, TR_vecEndPos, flEnd)
  233.  
  234. if(iEnt)
  235. {
  236. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  237. write_byte(TE_DECAL)
  238. write_coord_f(flEnd[0])
  239. write_coord_f(flEnd[1])
  240. write_coord_f(flEnd[2])
  241. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  242. write_short(iEnt)
  243. message_end()
  244. }
  245. else
  246. {
  247. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  248. write_byte(TE_WORLDDECAL)
  249. write_coord_f(flEnd[0])
  250. write_coord_f(flEnd[1])
  251. write_coord_f(flEnd[2])
  252. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  253. message_end()
  254. }
  255. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  256. write_byte(TE_GUNSHOTDECAL)
  257. write_coord_f(flEnd[0])
  258. write_coord_f(flEnd[1])
  259. write_coord_f(flEnd[2])
  260. write_short(iAttacker)
  261. write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  262. message_end()
  263. }
  264.  
  265. public plugin_natives ()
  266. {
  267. register_native("give_weapon_desperado", "native_give_weapon_add", 1)
  268. }
  269. public native_give_weapon_add(id)
  270. {
  271. give_desperado(id)
  272. }
  273.  
  274. public fwPrecacheEvent_Post(type, const name[])
  275. {
  276. if (equal("events/deagle.sc", name))
  277. {
  278. g_orig_event_desperado = get_orig_retval()
  279. return FMRES_HANDLED
  280. }
  281. return FMRES_IGNORED
  282. }
  283.  
  284. public client_connect(id)
  285. {
  286. g_has_desperado[id] = false
  287. g_swaped[id] = true
  288. g_mode[id] = 0
  289. }
  290.  
  291. public client_disconnect(id)
  292. {
  293. g_has_desperado[id] = false
  294. g_mode[id] = 0
  295. }
  296.  
  297. public fw_SetModel(entity, model[])
  298. {
  299. if(!is_valid_ent(entity))
  300. return FMRES_IGNORED
  301.  
  302. static szClassName[33]
  303. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  304.  
  305. if(!equal(szClassName, "weaponbox"))
  306. return FMRES_IGNORED
  307.  
  308. static iOwner
  309.  
  310. iOwner = entity_get_edict(entity, EV_ENT_owner)
  311.  
  312. if(equal(model, "models/w_deagle.mdl"))
  313. {
  314. static iStoredAugID
  315.  
  316. iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_deagle", entity)
  317.  
  318. if(!is_valid_ent(iStoredAugID))
  319. return FMRES_IGNORED
  320.  
  321. if(g_has_desperado[iOwner])
  322. {
  323. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, desperado_WEAPONKEY)
  324.  
  325. g_has_desperado[iOwner] = false
  326.  
  327. entity_set_model(entity, desperado_W_MODEL)
  328.  
  329. return FMRES_SUPERCEDE
  330. }
  331. }
  332. return FMRES_IGNORED
  333. }
  334.  
  335. public give_desperado(id)
  336. {
  337. g_swaped[id] = true
  338. drop_weapons(id, 2)
  339. new iWep2 = give_item(id,"weapon_deagle")
  340. if( iWep2 > 0 )
  341. {
  342. g_mode[id] = 0
  343.  
  344. if(g_swaped[id])
  345. {
  346. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_desperado))
  347. cs_set_user_bpammo (id, CSW_DEAGLE, get_pcvar_num(cvar_desperado_ammo))
  348. UTIL_PlayWeaponAnimation(id, desperado_DRAW)
  349.  
  350. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  351. write_string("weapon_desperado")
  352. write_byte(8)
  353. write_byte(35)
  354. write_byte(-1)
  355. write_byte(-1)
  356. write_byte(1)
  357. write_byte(1)
  358. write_byte(CSW_DEAGLE)
  359. message_end()
  360. }
  361.  
  362. if(!g_swaped[id])
  363. {
  364. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_desperado))
  365. cs_set_user_bpammo (id, CSW_DEAGLE, get_pcvar_num(cvar_desperado_ammo))
  366. UTIL_PlayWeaponAnimation(id, desperado1_DRAW)
  367.  
  368. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  369. write_string("weapon_desperado")
  370. write_byte(8)
  371. write_byte(35)
  372. write_byte(-1)
  373. write_byte(-1)
  374. write_byte(1)
  375. write_byte(1)
  376. write_byte(CSW_DEAGLE)
  377. message_end()
  378. }
  379. }
  380. g_has_desperado[id] = true
  381. }
  382.  
  383. public fw_desperado_AddToPlayer(desperado, id)
  384. {
  385. if(!is_valid_ent(desperado) || !is_user_connected(id))
  386. return HAM_IGNORED
  387.  
  388. if(entity_get_int(desperado, EV_INT_WEAPONKEY) == desperado_WEAPONKEY)
  389. {
  390. g_has_desperado[id] = true
  391.  
  392. entity_set_int(desperado, EV_INT_WEAPONKEY, 0)
  393.  
  394. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  395. write_string("weapon_desperado")
  396. write_byte(8)
  397. write_byte(35)
  398. write_byte(-1)
  399. write_byte(-1)
  400. write_byte(1)
  401. write_byte(1)
  402. write_byte(CSW_DEAGLE)
  403. message_end()
  404.  
  405. return HAM_HANDLED
  406. }
  407. else
  408. {
  409. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  410. write_string("weapon_deagle")
  411. write_byte(8)
  412. write_byte(35)
  413. write_byte(-1)
  414. write_byte(-1)
  415. write_byte(1)
  416. write_byte(1)
  417. write_byte(CSW_DEAGLE)
  418. message_end()
  419. }
  420. return HAM_IGNORED
  421. }
  422.  
  423. public fw_UseStationary_Post(entity, caller, activator, use_type)
  424. {
  425. if (use_type == USE_STOPPED && is_user_connected(caller))
  426. replace_weapon_models(caller, get_user_weapon(caller))
  427. }
  428.  
  429. public fw_Item_Deploy_Post(weapon_ent)
  430. {
  431. static owner
  432. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  433.  
  434. static weaponid
  435. weaponid = cs_get_weapon_id(weapon_ent)
  436.  
  437. replace_weapon_models(owner, weaponid)
  438. }
  439.  
  440. public CurrentWeapon(id)
  441. {
  442. replace_weapon_models(id, read_data(2))
  443.  
  444. if(read_data(2) != CSW_DEAGLE || !g_has_desperado[id])
  445. return
  446.  
  447. static Float:iSpeed
  448. if(g_has_desperado[id])
  449. iSpeed = get_pcvar_float(cvar_spd_desperado)
  450.  
  451. static weapon[32],Ent
  452. get_weaponname(read_data(2),weapon,31)
  453. Ent = find_ent_by_owner(-1,weapon,id)
  454. if(Ent)
  455. {
  456. static Float:Delay
  457. Delay = get_pdata_float( Ent, 46, 4) * iSpeed
  458. if (Delay > 0.0)
  459. {
  460. set_pdata_float(Ent, 46, Delay, 4)
  461. }
  462. }
  463. }
  464.  
  465. replace_weapon_models(id, weaponid)
  466. {
  467. switch (weaponid)
  468. {
  469. case CSW_DEAGLE:
  470. {
  471.  
  472. if(g_has_desperado[id])
  473. {
  474. if(g_swaped[id])
  475. {
  476. set_pdata_float(id, m_flNextAttack, 0.05, PLAYER_LINUX_XTRA_OFF)
  477. set_pev(id, pev_viewmodel2, desperado_V_MODEL)
  478. set_pev(id, pev_weaponmodel2, desperado_P_MODEL2)
  479. if(oldweap[id] != CSW_DEAGLE)
  480. {
  481. UTIL_PlayWeaponAnimation(id, desperado_DRAW)
  482.  
  483. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  484. write_string("weapon_desperado")
  485. write_byte(8)
  486. write_byte(35)
  487. write_byte(-1)
  488. write_byte(-1)
  489. write_byte(1)
  490. write_byte(1)
  491. write_byte(CSW_DEAGLE)
  492. message_end()
  493. }
  494. }
  495.  
  496. if(!g_swaped[id])
  497. {
  498. set_pdata_float(id, m_flNextAttack, 0.05, PLAYER_LINUX_XTRA_OFF)
  499. set_pev(id, pev_viewmodel2, desperado_V_MODEL)
  500. set_pev(id, pev_weaponmodel2, desperado_P_MODEL1)
  501. if(oldweap[id] != CSW_DEAGLE)
  502. {
  503. UTIL_PlayWeaponAnimation(id, desperado1_DRAW)
  504.  
  505. message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  506. write_string("weapon_desperado")
  507. write_byte(8)
  508. write_byte(35)
  509. write_byte(-1)
  510. write_byte(-1)
  511. write_byte(1)
  512. write_byte(1)
  513. write_byte(CSW_DEAGLE)
  514. message_end()
  515. }
  516. }
  517. }
  518. }
  519. }
  520. oldweap[id] = weaponid
  521. }
  522.  
  523. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  524. {
  525. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_DEAGLE || !g_has_desperado[Player]))
  526. return FMRES_IGNORED
  527.  
  528. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  529. return FMRES_HANDLED
  530. }
  531.  
  532. public fw_desperado_PrimaryAttack(Weapon)
  533. {
  534. new Player = get_pdata_cbase(Weapon, 41, 4)
  535.  
  536. if (!g_has_desperado[Player])
  537. return
  538.  
  539. g_IsInPrimaryAttack = 1
  540. pev(Player,pev_punchangle,cl_pushangle[Player])
  541.  
  542. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  543. g_iClip = cs_get_weapon_ammo(Weapon)
  544. }
  545.  
  546. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  547. {
  548. if ((eventid != g_orig_event_desperado) || !g_IsInPrimaryAttack)
  549. return FMRES_IGNORED
  550. if (!(1 <= invoker <= g_MaxPlayers))
  551. return FMRES_IGNORED
  552.  
  553. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  554. return FMRES_SUPERCEDE
  555. }
  556.  
  557. public fw_desperado_PrimaryAttack_Post(Weapon)
  558. {
  559. g_IsInPrimaryAttack = 0
  560. new Player = get_pdata_cbase(Weapon, 41, 4)
  561.  
  562. new szClip, szAmmo
  563. get_user_weapon(Player, szClip, szAmmo)
  564.  
  565. if(!is_user_alive(Player))
  566. return
  567.  
  568. if (g_iClip <= cs_get_weapon_ammo(Weapon))
  569. return
  570.  
  571. if(g_has_desperado[Player])
  572. {
  573. if (!g_clip_ammo[Player])
  574. return
  575.  
  576. new Float:push[3]
  577. pev(Player,pev_punchangle,push)
  578. xs_vec_sub(push,cl_pushangle[Player],push)
  579.  
  580. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_desperado),push)
  581. xs_vec_add(push,cl_pushangle[Player],push)
  582. set_pev(Player,pev_punchangle,push)
  583.  
  584. emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  585. if(szClip > 1) UTIL_PlayWeaponAnimation(Player, random_num(desperado_SHOOT1,desperado_SHOOT2))
  586. if(szClip == 1) UTIL_PlayWeaponAnimation(Player, desperado_SHOOT_EMPTY)
  587. }
  588. }
  589.  
  590. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  591. {
  592. if (victim != attacker && is_user_connected(attacker))
  593. {
  594. if(get_user_weapon(attacker) == CSW_DEAGLE)
  595. {
  596. if(g_has_desperado[attacker])
  597. {
  598. if(g_swaped[attacker])
  599. {
  600. if(!g_swaped[attacker])
  601. return
  602.  
  603. SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_desperado))
  604. } else if(!g_swaped[attacker])
  605. {
  606. if(g_swaped[attacker])
  607. return
  608. SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_desperado2))
  609. }
  610. }
  611. }
  612. }
  613. }
  614.  
  615. public message_DeathMsg(msg_id, msg_dest, id)
  616. {
  617. static szTruncatedWeapon[33], iAttacker, iVictim
  618.  
  619. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  620.  
  621. iAttacker = get_msg_arg_int(1)
  622. iVictim = get_msg_arg_int(2)
  623.  
  624. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  625. return PLUGIN_CONTINUE
  626.  
  627. if(equal(szTruncatedWeapon, "deagle") && get_user_weapon(iAttacker) == CSW_DEAGLE)
  628. {
  629. if(g_has_desperado[iAttacker])
  630. set_msg_arg_string(4, "desperado")
  631. }
  632. return PLUGIN_CONTINUE
  633. }
  634.  
  635. stock fm_cs_get_current_weapon_ent(id)
  636. {
  637. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
  638. }
  639.  
  640. stock fm_cs_get_weapon_ent_owner(ent)
  641. {
  642. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  643. }
  644.  
  645. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  646. {
  647. set_pev(Player, pev_weaponanim, Sequence)
  648.  
  649. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  650. write_byte(Sequence)
  651. write_byte(pev(Player, pev_body))
  652. message_end()
  653. }
  654.  
  655. /*public fw_CmdStart(id, uc_handle, seed , weapon_entity)
  656. {
  657. if(!g_has_desperado[id])
  658. return
  659.  
  660. if(!is_user_alive(id))
  661. return
  662.  
  663. new pItem = get_pdata_cbase(id, OFFSET_ACTIVE_ITEM)
  664.  
  665. if(get_pdata_int(pItem, m_iId, 4) != CSW_DEAGLE)
  666. return
  667.  
  668. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && g_swaped[id])
  669. {
  670. if(!g_swaped[id])
  671. return
  672.  
  673. set_pdata_float(pItem, m_flTimeWeaponIdle, 0.4, WEAP_LINUX_XTRA_OFF)
  674. set_pdata_float(id, m_flNextAttack, 0.4, PLAYER_LINUX_XTRA_OFF)
  675.  
  676. UTIL_PlayWeaponAnimation(id, SWAP2W)
  677. g_swaped[id] = false
  678. set_pdata_float(id, m_flNextAttack, 0.2, PLAYER_LINUX_XTRA_OFF)
  679. }
  680.  
  681. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && !g_swaped[id])
  682. {
  683. if(g_swaped[id])
  684. return
  685.  
  686. set_pdata_float(pItem, m_flTimeWeaponIdle, 0.4, WEAP_LINUX_XTRA_OFF)
  687. set_pdata_float(pItem, m_flNextAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  688. UTIL_PlayWeaponAnimation(id, SWAP2M)
  689. g_swaped[id] = true
  690.  
  691. set_pdata_float(pItem, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  692. }
  693.  
  694. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !g_swaped[id])
  695. {
  696. if(g_swaped[id]) return
  697.  
  698. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  699. {
  700. if(get_pdata_int(pItem, m_iClip) <= 0)
  701. return
  702.  
  703. g_mode[id] = 1
  704. ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, "weapon_deagle", id))
  705. UTIL_PlayWeaponAnimation(id, random_num(desperado1_SHOOT1, desperado1_SHOOT2))
  706.  
  707. set_pdata_float(weapon_entity, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  708. }
  709. } else if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !g_swaped[id])
  710. {
  711. if(g_swaped[id]) return
  712. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  713. {
  714. if(get_pdata_int(pItem, m_iClip) <= 0)
  715. return
  716.  
  717. g_mode[id] = 0
  718.  
  719. set_pdata_float(pItem, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  720. }
  721. }
  722. }*/
  723.  
  724. public fw_CmdStart(id, uc_handle, seed , weapon_entity)
  725. {
  726. if(!g_has_desperado[id])
  727. return
  728.  
  729. if(!is_user_alive(id))
  730. return
  731.  
  732. new pItem = get_pdata_cbase(id, OFFSET_ACTIVE_ITEM)
  733.  
  734. if(get_pdata_int(pItem, m_iId, 4) != CSW_DEAGLE)
  735. return
  736.  
  737. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && g_swaped[id])
  738. {
  739. if(!g_swaped[id])
  740. return
  741.  
  742. set_pdata_float(pItem, m_flTimeWeaponIdle, 0.4, WEAP_LINUX_XTRA_OFF)
  743. set_pdata_float(id, m_flNextAttack, 0.4, PLAYER_LINUX_XTRA_OFF)
  744.  
  745. UTIL_PlayWeaponAnimation(id, SWAP2W)
  746. g_swaped[id] = false
  747. set_pdata_float(id, m_flNextAttack, 0.2, PLAYER_LINUX_XTRA_OFF)
  748.  
  749. set_pdata_int(weapon_entity, m_iClip, g_desperado_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  750.  
  751. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, desperado_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  752.  
  753. set_pdata_float(id, m_flNextAttack, desperado_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  754.  
  755. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  756. }
  757.  
  758. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && !g_swaped[id])
  759. {
  760. if(g_swaped[id])
  761. return
  762.  
  763. set_pdata_float(pItem, m_flTimeWeaponIdle, 0.4, WEAP_LINUX_XTRA_OFF)
  764. UTIL_PlayWeaponAnimation(id, SWAP2M)
  765. g_swaped[id] = true
  766.  
  767. set_pdata_float(pItem, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  768. }
  769.  
  770. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !g_swaped[id])
  771. {
  772. if(g_swaped[id]) return
  773.  
  774. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  775. {
  776. if(get_pdata_int(pItem, m_iClip) <= 0)
  777. return
  778.  
  779. g_mode[id] = 1
  780. ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, "weapon_deagle", id))
  781. UTIL_PlayWeaponAnimation(id, random_num(desperado1_SHOOT1, desperado1_SHOOT2))
  782.  
  783. set_pdata_float(weapon_entity, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  784. }
  785. } else if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !g_swaped[id])
  786. {
  787. if(g_swaped[id]) return
  788. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  789. {
  790. if(get_pdata_int(pItem, m_iClip) <= 0)
  791. return
  792.  
  793. g_mode[id] = 0
  794.  
  795. set_pdata_float(pItem, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  796. }
  797. }
  798.  
  799. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && g_swaped[id])
  800. {
  801. if(!g_swaped[id]) return
  802.  
  803. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  804. {
  805. if(get_pdata_int(pItem, m_iClip) <= 0)
  806. return
  807.  
  808. g_mode[id] = 1
  809. ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, "weapon_deagle", id))
  810. UTIL_PlayWeaponAnimation(id, random_num(desperado1_SHOOT1, desperado1_SHOOT2))
  811.  
  812. set_pdata_float(weapon_entity, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  813. }
  814. } else if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && g_swaped[id])
  815. {
  816. if(!g_swaped[id]) return
  817. if(get_pdata_float(pItem, m_flNextSecondaryAttack, 4) <= 0.0)
  818. {
  819. if(get_pdata_int(pItem, m_iClip) <= 0)
  820. return
  821.  
  822. g_mode[id] = 0
  823.  
  824. set_pdata_float(pItem, m_flNextSecondaryAttack, 0.4, WEAP_LINUX_XTRA_OFF)
  825. }
  826. }
  827. }
  828.  
  829. public desperado_ItemPostFrame(weapon_entity)
  830. {
  831. new id = pev(weapon_entity, pev_owner)
  832. if (!is_user_connected(id))
  833. return HAM_IGNORED
  834.  
  835. if (!g_has_desperado[id])
  836. return HAM_IGNORED
  837.  
  838. static iClipExtra
  839.  
  840. iClipExtra = get_pcvar_num(cvar_clip_desperado)
  841. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  842.  
  843. new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE);
  844. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  845.  
  846. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  847.  
  848. if( fInReload && flNextAttack <= 0.0 )
  849. {
  850. new j = min(iClipExtra - iClip, iBpAmmo)
  851.  
  852. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  853. cs_set_user_bpammo(id, CSW_DEAGLE, iBpAmmo-j)
  854.  
  855. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  856. fInReload = 0
  857. }
  858. return HAM_IGNORED
  859. }
  860.  
  861. public desperado_Reload(weapon_entity)
  862. {
  863. new id = pev(weapon_entity, pev_owner)
  864. if (!is_user_connected(id))
  865. return HAM_IGNORED
  866.  
  867. if (!g_has_desperado[id])
  868. return HAM_IGNORED
  869.  
  870. static iClipExtra
  871.  
  872. if(g_has_desperado[id])
  873. iClipExtra = get_pcvar_num(cvar_clip_desperado)
  874.  
  875. g_desperado_TmpClip[id] = -1
  876.  
  877. new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE)
  878. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  879.  
  880. if (iBpAmmo <= 0)
  881. return HAM_SUPERCEDE
  882.  
  883. if (iClip >= iClipExtra)
  884. return HAM_SUPERCEDE
  885.  
  886. g_desperado_TmpClip[id] = iClip
  887.  
  888. return HAM_IGNORED
  889. }
  890.  
  891.  
  892.  
  893. public desperado_Reload_Post(weapon_entity)
  894. {
  895. new id = pev(weapon_entity, pev_owner)
  896. if (!is_user_connected(id))
  897. return HAM_IGNORED
  898.  
  899. if (!g_has_desperado[id])
  900. return HAM_IGNORED
  901.  
  902. if (g_desperado_TmpClip[id] == -1)
  903. return HAM_IGNORED
  904.  
  905. if(g_swaped[id])
  906. {
  907. set_pdata_int(weapon_entity, m_iClip, g_desperado_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  908.  
  909. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, desperado_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  910.  
  911. set_pdata_float(id, m_flNextAttack, desperado_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  912.  
  913. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  914.  
  915. UTIL_PlayWeaponAnimation(id, desperado_RELOAD)
  916. }
  917.  
  918. if(!g_swaped[id])
  919. {
  920. set_pdata_int(weapon_entity, m_iClip, g_desperado_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  921.  
  922. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, desperado_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  923.  
  924. set_pdata_float(id, m_flNextAttack, desperado_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  925.  
  926. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  927.  
  928. UTIL_PlayWeaponAnimation(id, desperado1_RELOAD)
  929. }
  930.  
  931. return HAM_IGNORED
  932. }
  933.  
  934.  
  935. public HAM_Weapon_WeaponIdle(iEntity)
  936. {
  937. new id = get_pdata_cbase(iEntity, 41, 4)
  938. if (!is_user_connected(id))
  939. return HAM_IGNORED
  940.  
  941. if (!g_has_desperado[id])
  942. return HAM_IGNORED
  943.  
  944.  
  945. new iChangeMode = pev(iEntity, pev_iuser1)
  946. new m_bJustRunStart = pev(iEntity, pev_iuser2)
  947. new Float:m_flNextRunIdle // fuser2
  948. new Float:m_flNextRunEnd // fuser1
  949.  
  950. pev(iEntity, pev_fuser1, m_flNextRunEnd)
  951. pev(iEntity, pev_fuser2, m_flNextRunIdle)
  952.  
  953. if (get_pdata_float(iEntity, 48, 4) < 0.0)
  954. {
  955. if (pev(id, pev_button) & IN_FORWARD)
  956. {
  957. if (g_mode[id] == 0)
  958. {
  959. UTIL_PlayWeaponAnimation(id, iChangeMode ? desperado1_RUN_IDLE : desperado1_RUN_IDLE)
  960. m_bJustRunStart = 1
  961. set_pev(iEntity, pev_fuser1, get_gametime())
  962. set_pdata_float(iEntity, 48, 0.3, 4)
  963. set_pev(iEntity, pev_iuser2, m_bJustRunStart)
  964. return HAM_IGNORED
  965. }
  966. else if (m_flNextRunIdle <= get_gametime())
  967. {
  968. UTIL_PlayWeaponAnimation(id, iChangeMode ? desperado1_RUN_END : desperado1_RUN_END)
  969. set_pev(iEntity, pev_fuser1, get_gametime() + 3.0)
  970. }
  971. set_pev(iEntity, pev_fuser1, get_gametime())
  972. }
  973. else
  974. {
  975. if (!g_mode[id] == 1)
  976. {
  977. UTIL_PlayWeaponAnimation(id, iChangeMode ? desperado1_RUN_END : desperado1_RUN_END)
  978. m_bJustRunStart = 1
  979. set_pev(iEntity, pev_fuser1, get_gametime())
  980. set_pdata_float(iEntity, 48, 0.3, 4)
  981. set_pev(iEntity, pev_iuser2, m_bJustRunStart)
  982. return HAM_IGNORED
  983. }
  984. else if (m_flNextRunEnd <= get_gametime())
  985. {
  986. UTIL_PlayWeaponAnimation(id, iChangeMode ? desperado1_RUN_END : desperado1_RUN_END)
  987. set_pev(iEntity, pev_fuser1, get_gametime() + 3.0)
  988. }
  989. set_pev(iEntity, pev_fuser2, get_gametime())
  990. }
  991. }
  992. return HAM_SUPERCEDE
  993. }
  994.  
  995. stock drop_weapons(id, dropwhat)
  996. {
  997. static weapons[32], num, i, weaponid
  998. num = 0
  999. get_user_weapons(id, weapons, num)
  1000.  
  1001. for (i = 0; i < num; i++)
  1002. {
  1003. weaponid = weapons[i]
  1004.  
  1005. if (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
  1006. {
  1007. static wname[32]
  1008. get_weaponname(weaponid, wname, sizeof wname - 1)
  1009. engclient_cmd(id, "drop", wname)
  1010. }
  1011. }
  1012. }
  1013.  
  1014. stock create_velocity_vector(victim,attacker,Float:velocity[3])
  1015. {
  1016. new Float:vicorigin[3];
  1017. new Float:attorigin[3];
  1018. entity_get_vector(victim , EV_VEC_origin , vicorigin);
  1019. entity_get_vector(attacker , EV_VEC_origin , attorigin);
  1020.  
  1021. new Float:origin2[3]
  1022. origin2[0] = vicorigin[0] - attorigin[0];
  1023. origin2[1] = vicorigin[1] - attorigin[1];
  1024.  
  1025. new Float:largestnum = 0.0;
  1026.  
  1027. if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
  1028. if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
  1029.  
  1030. origin2[0] /= largestnum;
  1031. origin2[1] /= largestnum;
  1032.  
  1033. velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_desperado_knock) * 3000) ) / get_entity_distance(victim , attacker);
  1034. velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_desperado_knock) * 3000) ) / get_entity_distance(victim , attacker);
  1035. if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
  1036. velocity[2] = random_float(200.0 , 275.0);
  1037.  
  1038. return 1;
  1039. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement