HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4.  
  5. #define PLUGIN_NAME "Reload Animation Fix"
  6. #define PLUGIN_VERSION "1.1"
  7. #define PLUGIN_AUTHOR "MaxToR"
  8.  
  9. #define SetPlayerBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) )
  10. #define ClearPlayerBit(%1,%2) ( %1 &= ~( 1 << ( %2 & 31 ) ) )
  11. #define CheckPlayerBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) )
  12.  
  13. #define m_pPlayer 41
  14. #define m_iId 43
  15. #define m_flTimeWeaponIdle 48
  16. #define m_fInReload 54
  17. #define m_fInSpecialReload 55
  18. #define m_fWeaponState 74
  19. #define WEAPONSTATE_USP_SILENCED (1<<0)
  20. #define WEAPONSTATE_M4A1_SILENCED (1<<2)
  21.  
  22. #define m_pActiveItem 373
  23. #define m_iUserPrefs 510
  24. #define USERPREFS_HAS_SHIELD (1<<24)
  25.  
  26.  
  27. new g_iMaxPlayers;
  28. new g_iAlive;
  29.  
  30. public plugin_init()
  31. {
  32. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  33.  
  34. RegisterHam(Ham_Spawn, "player", "Ham_Spawn_player_Post", 1);
  35. RegisterHam(Ham_Killed, "player", "Ham_Killed_player_Post", 1);
  36.  
  37. RegisterHam(Ham_Item_PostFrame, "weapon_glock18", "Ham_Item_PostFrame_Pre", 0);
  38. RegisterHam(Ham_Item_PostFrame, "weapon_usp", "Ham_Item_PostFrame_Pre", 0);
  39. RegisterHam(Ham_Item_PostFrame, "weapon_deagle", "Ham_Item_PostFrame_Pre", 0);
  40. RegisterHam(Ham_Item_PostFrame, "weapon_p228", "Ham_Item_PostFrame_Pre", 0);
  41. RegisterHam(Ham_Item_PostFrame, "weapon_elite", "Ham_Item_PostFrame_Pre", 0);
  42. RegisterHam(Ham_Item_PostFrame, "weapon_fiveseven", "Ham_Item_PostFrame_Pre", 0);
  43. RegisterHam(Ham_Item_PostFrame, "weapon_mp5navy", "Ham_Item_PostFrame_Pre", 0);
  44. RegisterHam(Ham_Item_PostFrame, "weapon_mac10", "Ham_Item_PostFrame_Pre", 0);
  45. RegisterHam(Ham_Item_PostFrame, "weapon_tmp", "Ham_Item_PostFrame_Pre", 0);
  46. RegisterHam(Ham_Item_PostFrame, "weapon_p90", "Ham_Item_PostFrame_Pre", 0);
  47. RegisterHam(Ham_Item_PostFrame, "weapon_ump45", "Ham_Item_PostFrame_Pre", 0);
  48. RegisterHam(Ham_Item_PostFrame, "weapon_galil", "Ham_Item_PostFrame_Pre", 0);
  49. RegisterHam(Ham_Item_PostFrame, "weapon_famas", "Ham_Item_PostFrame_Pre", 0);
  50. RegisterHam(Ham_Item_PostFrame, "weapon_ak47", "Ham_Item_PostFrame_Pre", 0);
  51. RegisterHam(Ham_Item_PostFrame, "weapon_m4a1", "Ham_Item_PostFrame_Pre", 0);
  52. RegisterHam(Ham_Item_PostFrame, "weapon_sg552", "Ham_Item_PostFrame_Pre", 0);
  53. RegisterHam(Ham_Item_PostFrame, "weapon_aug", "Ham_Item_PostFrame_Pre", 0);
  54. RegisterHam(Ham_Item_PostFrame, "weapon_g3sg1", "Ham_Item_PostFrame_Pre", 0);
  55. RegisterHam(Ham_Item_PostFrame, "weapon_sg550", "Ham_Item_PostFrame_Pre", 0);
  56. RegisterHam(Ham_Item_PostFrame, "weapon_scout", "Ham_Item_PostFrame_Pre", 0);
  57. RegisterHam(Ham_Item_PostFrame, "weapon_awp", "Ham_Item_PostFrame_Pre", 0);
  58. RegisterHam(Ham_Item_PostFrame, "weapon_m249", "Ham_Item_PostFrame_Pre", 0);
  59.  
  60. RegisterHam(Ham_Weapon_WeaponIdle, "weapon_deagle", "Ham_WeaponIdle_deagle_Pre", 0);
  61.  
  62. RegisterHam(Ham_Item_Deploy, "weapon_m3", "Ham_Item_Deploy_Pre", 0);
  63. RegisterHam(Ham_Item_Deploy, "weapon_xm1014", "Ham_Item_Deploy_Pre", 0);
  64.  
  65. g_iMaxPlayers = clamp(get_maxplayers(), 1, 32);
  66. }
  67.  
  68. public plugin_unpause()
  69. {
  70. g_iAlive = 0;
  71.  
  72. new iPlayers[32], iPlayerNum;
  73. get_players(iPlayers, iPlayerNum, "a");
  74.  
  75. for( new iPlayer; iPlayer<iPlayerNum; iPlayer++ )
  76. SetPlayerBit(g_iAlive, iPlayers[iPlayer]);
  77. }
  78.  
  79. public client_disconnect(iPlrId)
  80. ClearPlayerBit(g_iAlive, iPlrId);
  81.  
  82. public Ham_Spawn_player_Post(iPlrId)
  83. {
  84. if( is_user_alive(iPlrId) )
  85. SetPlayerBit(g_iAlive, iPlrId);
  86. else
  87. ClearPlayerBit(g_iAlive, iPlrId);
  88. }
  89.  
  90. public Ham_Killed_player_Post(iPlrId, iAttackerId, iShouldGib)
  91. {
  92. if( is_user_alive(iPlrId) )
  93. SetPlayerBit(g_iAlive, iPlrId);
  94. else
  95. ClearPlayerBit(g_iAlive, iPlrId);
  96. }
  97.  
  98. public Ham_Item_PostFrame_Pre(iEnt)
  99. {
  100. if( !get_pdata_int(iEnt, m_fInReload, 4) )
  101. {
  102. static s_iOwner;
  103. s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
  104.  
  105. if( 0<s_iOwner<=g_iMaxPlayers )
  106. {
  107. if( CheckPlayerBit(g_iAlive, s_iOwner) )
  108. {
  109. if( iEnt==get_pdata_cbase(s_iOwner, m_pActiveItem, 5) )
  110. {
  111. switch( get_pdata_int(iEnt, m_iId, 4) )
  112. {
  113. case CSW_GLOCK18:
  114. {
  115. if( pev(s_iOwner, pev_weaponanim)==((get_pdata_int(s_iOwner, m_iUserPrefs, 5)&USERPREFS_HAS_SHIELD)?4:7) )
  116. set_pev(s_iOwner, pev_weaponanim, 0);
  117. }
  118. case CSW_USP:
  119. {
  120. if( get_pdata_int(s_iOwner, m_iUserPrefs, 5)&USERPREFS_HAS_SHIELD )
  121. {
  122. if( pev(s_iOwner, pev_weaponanim)==4 )
  123. set_pev(s_iOwner, pev_weaponanim, 0);
  124. }
  125. else if( get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_USP_SILENCED )
  126. {
  127. if( pev(s_iOwner, pev_weaponanim)==5 )
  128. set_pev(s_iOwner, pev_weaponanim, 0);
  129. }
  130. else
  131. {
  132. if( pev(s_iOwner, pev_weaponanim)==13 )
  133. set_pev(s_iOwner, pev_weaponanim, 8);
  134. }
  135. }
  136. case CSW_DEAGLE, CSW_FIVESEVEN, CSW_AWP:
  137. {
  138. if( pev(s_iOwner, pev_weaponanim)==4 ) //((get_pdata_int(s_iOwner, m_iUserPrefs, 5)&USERPREFS_HAS_SHIELD)?4:4) )
  139. set_pev(s_iOwner, pev_weaponanim, 0);
  140. }
  141. case CSW_P228:
  142. {
  143. if( pev(s_iOwner, pev_weaponanim)==((get_pdata_int(s_iOwner, m_iUserPrefs, 5)&USERPREFS_HAS_SHIELD)?4:5) )
  144. set_pev(s_iOwner, pev_weaponanim, 0);
  145. }
  146. case CSW_ELITE:
  147. {
  148. if( pev(s_iOwner, pev_weaponanim)==14 )
  149. set_pev(s_iOwner, pev_weaponanim, 0);
  150. }
  151. //case CSW_M3, CSW_XM1014: // there's no need to fix reload issue for this 2 weapons, cause animation #3 is impossible
  152. //{ // before start of the reload.
  153. // if( 3<=pev(s_iOwner, pev_weaponanim)<=5 ) // 3 for insert, 4 for stop, 5 for start
  154. // set_pev(s_iOwner, pev_weaponanim, 0);
  155. //}
  156. case CSW_MP5NAVY, CSW_MAC10, CSW_TMP, CSW_P90, CSW_UMP45, CSW_GALIL, CSW_FAMAS, CSW_AK47, CSW_SG552, CSW_AUG:
  157. {
  158. if( pev(s_iOwner, pev_weaponanim)==1 )
  159. set_pev(s_iOwner, pev_weaponanim, 0);
  160. }
  161. case CSW_M4A1:
  162. {
  163. if( get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_M4A1_SILENCED )
  164. {
  165. if( pev(s_iOwner, pev_weaponanim)==4 )
  166. set_pev(s_iOwner, pev_weaponanim, 0);
  167. }
  168. else
  169. {
  170. if( pev(s_iOwner, pev_weaponanim)==11 )
  171. set_pev(s_iOwner, pev_weaponanim, 7);
  172. }
  173. }
  174. case CSW_G3SG1, CSW_SG550, CSW_SCOUT, CSW_M249:
  175. {
  176. if( pev(s_iOwner, pev_weaponanim)==3 )
  177. set_pev(s_iOwner, pev_weaponanim, 0);
  178. }
  179. }
  180. }
  181. }
  182. }
  183. }
  184. }
  185.  
  186. public Ham_WeaponIdle_deagle_Pre(iEnt)
  187. {
  188. if( get_pdata_float(iEnt, m_flTimeWeaponIdle, 4)<=0.0 )
  189. {
  190. static s_iOwner;
  191. s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
  192.  
  193. if( 0<s_iOwner<=g_iMaxPlayers )
  194. {
  195. if( CheckPlayerBit(g_iAlive, s_iOwner) )
  196. {
  197. //if( pev(s_iOwner, pev_weaponanim)==5 ) // fix deploy animation glitch for deagle when spectating
  198. set_pev(s_iOwner, pev_weaponanim, 0);
  199. }
  200. }
  201. }
  202. }
  203.  
  204. public Ham_Item_Deploy_Pre(iEnt)
  205. set_pdata_int(iEnt, m_fInSpecialReload, 0, 4);
  206.