HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6.  
  7. new const PLUGIN[] = "Free Ammo & Vest"
  8. new const VERSION[] = "1.5"
  9. new const AUTHOR[] = "ConnorMcLeod, HamletEagle & hellmonja"
  10.  
  11. #define m_pNext 42
  12. #define m_bNotKilled 113
  13. #define m_rgpPlayerItems_Slot1 368
  14. #define m_rgpPlayerItems_Slot2 369
  15.  
  16. const m_fInReload = 54
  17. const m_pPlayer = 41
  18. const m_iId = 43
  19. const XoWeapon = 4
  20. const m_flNextAttack = 83
  21. const XoPlayer = 5
  22.  
  23. new g_bitFirstSpawn, g_bomb_site;
  24. new cvar_free_vest, cvar_plugin_on, cvar_free_defuser, cvar_infinite_ammo;
  25. new HamHook:HandleItemPostFrameHook[CSW_P90 + 1]
  26. #define MarkUserFirstSpawn(%0) g_bitFirstSpawn |= 1<<(%0&31)
  27. #define ClearUserFirstSpawn(%0) g_bitFirstSpawn &= ~(1<<(%0&31))
  28. #define IsUserFirstSpawn(%0) ( g_bitFirstSpawn & 1<<(%0&31) )
  29.  
  30. new const WpnID[] =
  31. {
  32. CSW_P228,
  33. CSW_AK47,
  34. CSW_M4A1,
  35. CSW_P90,
  36. CSW_DEAGLE,
  37. CSW_M249,
  38. CSW_MP5NAVY,
  39. CSW_AWP,
  40. CSW_M3,
  41. CSW_USP
  42. }
  43.  
  44. new const Rounds[] =
  45. {
  46. 52,
  47. 90,
  48. 90,
  49. 100,
  50. 35,
  51. 200,
  52. 120,
  53. 30,
  54. 32,
  55. 100
  56. }
  57.  
  58. public plugin_init()
  59. {
  60. register_plugin(PLUGIN, VERSION, AUTHOR)
  61. RegisterHam(Ham_Spawn, "player", "Player_Spawn", true);
  62. RegisterHam(Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Pre", 0);
  63. register_event("StatusIcon", "OnPlayerEnterBuyzone", "be", "1=1", "2=buyzone");
  64.  
  65. cvar_plugin_on = register_cvar("fanv_plugin_on", "1");
  66. cvar_free_vest = register_cvar("fanv_free_vest", "1");
  67. cvar_free_defuser = register_cvar("fanv_free_defuser", "1");
  68. cvar_infinite_ammo = register_cvar("fanv_infinite_ammo", "0");
  69.  
  70. new const WeaponsWithoutReload = (1 << CSW_M3) | (1 << CSW_XM1014) | (1 << CSW_KNIFE) | (1 << CSW_C4) | (1 << CSW_HEGRENADE) | (1 << CSW_FLASHBANG) | (1 << CSW_SMOKEGRENADE)
  71. new const HookNames[][] =
  72. {
  73. "CBasePlayerWeapon_ItemPostFrame",
  74. "CBasePlayerWeapon_ItemHolster",
  75. "CBasePlayerWeapon_Reload"
  76. }
  77.  
  78. new WeaponName[32]
  79. for(new i = CSW_P228; i <= CSW_P90; i++)
  80. {
  81. if(WeaponsWithoutReload & (1 << i))
  82. {
  83. continue
  84. }
  85.  
  86. get_weaponname(i, WeaponName, charsmax(WeaponName))
  87. if(WeaponName[0] != EOS)
  88. {
  89. HandleItemPostFrameHook[i] = RegisterHam(Ham_Item_PostFrame, WeaponName, HookNames[0], false)
  90. RegisterHam(Ham_Item_Holster , WeaponName, HookNames[1], false)
  91. RegisterHam(Ham_Weapon_Reload, WeaponName, HookNames[2], true)
  92. DisableHamForward(HandleItemPostFrameHook[i])
  93. }
  94. }
  95.  
  96. if (find_ent_by_class(-1, "func_bomb_target") > 0 || find_ent_by_class(-1, "info_bomb_target") > 0)
  97. g_bomb_site = 1;
  98. }
  99.  
  100. public client_connect(id)
  101. {
  102. MarkUserFirstSpawn(id)
  103. }
  104.  
  105. public client_putinserver(id)
  106. {
  107. ClearUserFirstSpawn(id)
  108. }
  109.  
  110. public Ham_CBasePlayer_Spawn_Pre( id )
  111. {
  112. if(get_pcvar_num(cvar_plugin_on) == 0)
  113. return
  114.  
  115. if( !IsUserFirstSpawn(id) && get_pdata_int(id, m_bNotKilled, XoPlayer) )
  116. {
  117. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, XoPlayer)
  118. set_pdata_float(id, m_flNextAttack, -0.001, XoPlayer)
  119.  
  120. for(new iPlayerItems=m_rgpPlayerItems_Slot1, iWeapon; iPlayerItems<=m_rgpPlayerItems_Slot2; iPlayerItems++)
  121. {
  122. iWeapon = get_pdata_cbase(id, iPlayerItems, XoPlayer)
  123. while( pev_valid(iWeapon) )
  124. {
  125. set_pdata_int(iWeapon, m_fInReload, 1, XoWeapon)
  126. ExecuteHamB(Ham_Item_PostFrame, iWeapon)
  127. iWeapon = get_pdata_cbase(iWeapon, m_pNext, XoWeapon)
  128. }
  129. }
  130.  
  131. set_pdata_float(id, m_flNextAttack, flNextAttack, XoPlayer)
  132. }
  133. }
  134.  
  135. public CBasePlayerWeapon_Reload(WeaponEntity)
  136. {
  137. if(pev_valid(WeaponEntity))
  138. {
  139. if(get_pdata_int(WeaponEntity, m_fInReload, XoWeapon))
  140. {
  141. new WeaponIndex = get_pdata_int(WeaponEntity, m_iId, XoWeapon)
  142. EnableHamForward(HandleItemPostFrameHook[WeaponIndex])
  143. }
  144. }
  145. }
  146.  
  147. public CBasePlayerWeapon_ItemPostFrame(WeaponEntity)
  148. {
  149. if(pev_valid(WeaponEntity))
  150. {
  151. if(get_pdata_int(WeaponEntity, m_fInReload, XoWeapon))
  152. {
  153. new id = get_pdata_cbase(WeaponEntity, m_pPlayer, XoWeapon)
  154. if(get_pdata_float(id, m_flNextAttack, XoPlayer) <= 0.0)
  155. {
  156. new WeaponIndex = get_pdata_int(WeaponEntity, m_iId, XoWeapon)
  157. DisableHamForward(HandleItemPostFrameHook[WeaponIndex])
  158.  
  159. if(get_pcvar_num(cvar_infinite_ammo) == 1 || cs_get_user_buyzone(id))
  160. set_task(0.1, "Player_Spawn", id);
  161. else
  162. return
  163. }
  164. }
  165. }
  166. }
  167.  
  168. public CBasePlayerWeapon_ItemHolster(WeaponEntity)
  169. {
  170. if(pev_valid(WeaponEntity))
  171. {
  172. if(get_pdata_int(WeaponEntity, m_fInReload, XoWeapon))
  173. {
  174. new WeaponIndex = get_pdata_int(WeaponEntity, m_iId, XoWeapon)
  175. DisableHamForward(HandleItemPostFrameHook[WeaponIndex])
  176. }
  177. }
  178. }
  179.  
  180. public Player_Spawn(id)
  181. {
  182. if(get_pcvar_num(cvar_plugin_on) == 0)
  183. return
  184.  
  185. for(new i = 0; i <= sizeof WpnID -1; i++)
  186. cs_set_user_bpammo(id, WpnID[i], Rounds[i]);
  187.  
  188. if(get_pcvar_num(cvar_free_vest) == 1)
  189. cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
  190.  
  191. if(get_pcvar_num(cvar_free_defuser) == 1 && g_bomb_site == 1 && get_user_team(id) == 2)
  192. cs_set_user_defuse(id, 1);
  193.  
  194. }
  195.  
  196. public OnPlayerEnterBuyzone(id)
  197. {
  198. Player_Spawn(id);
  199. }
  200.