Code:
#define m_pPlayer 41
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_fInSpecialReload 55
#define m_rgPlayerAmmoSlot 376
#define m_flNextAttack 83
public plugin_init()
{
...
RegisterHam(Ham_Weapon_Reload, "weapon_???", "OnWeaponReload");
RegisterHam(Ham_Weapon_WeaponIdle, "weapon_???", "OnWeaponIdle");
...
}
public OnWeaponReload(pWeapon)
{
new pPlayer = get_pdata_cbase(pWeapon, m_pPlayer, 4);
if (!g_hasYourvariable[pPlayer])
return HAM_IGNORED;
new iClip = cs_get_weapon_ammo(pWeapon);
if (iClip >= SET_SOME_MAXCLIP_HERE)
return HAM_SUPERCEDE;
new iAmmoIndex = ExecuteHamB(Ham_Item_PrimaryAmmoIndex, pWeapon);
new rgAmmo = get_pdata_int(pPlayer, m_rgPlayerAmmoSlot + iAmmoIndex);
if (rgAmmo <= 0)
return HAM_SUPERCEDE;
if (get_pdata_float(pWeapon, m_flNextPrimaryAttack, 4) > 0.0)
return HAM_SUPERCEDE;
switch (get_pdata_int(pWeapon, m_fInSpecialReload, 4))
{
case 0:
{
SendWeaponAnim(pPlayer, RELOAD_START_ANIMATION);
set_pdata_int(pWeapon, m_fInSpecialReload, 1, 4);
set_pdata_float(pPlayer, m_flNextAttack, 0.6); //this control reload speed
set_pdata_float(pWeapon, m_flTimeWeaponIdle, 0.6, 4); //this one too
set_pdata_float(pWeapon, m_flNextPrimaryAttack, 1.0, 4);
return HAM_SUPERCEDE;
}
case 1:
{
if (get_pdata_float(pWeapon, m_flTimeWeaponIdle, 4) > 0.0)
return HAM_SUPERCEDE;
set_pdata_int(pWeapon, m_fInSpecialReload, 2, 4);
//Play "shell insert" sound here if you want
SendWeaponAnim(pPlayer, INSERT_SHELL_ANIMATION);
set_pdata_float(pWeapon, m_flTimeWeaponIdle, 0.5, 4);
}
case 2:
{
cs_set_weapon_ammo(pWeapon, ++iClip);
set_pdata_int(pPlayer, m_rgPlayerAmmoSlot + iAmmoIndex, --rgAmmo);
set_pdata_int(pWeapon, m_fInSpecialReload, 1, 4);
}
}
return HAM_SUPERCEDE;
}
public OnWeaponIdle(pWeapon)
{
if (get_pdata_float(pWeapon, m_flTimeWeaponIdle, 4) > 0.0)
return HAM_IGNORED;
new pPlayer = get_pdata_cbase(pWeapon, m_pPlayer, 4);
if (!g_hasYourvariable[pPlayer])
return HAM_IGNORED;
new iClip = cs_get_weapon_ammo(pWeapon);
new fInSpecialReload = get_pdata_int(pWeapon, m_fInSpecialReload, 4);
new rgAmmo = get_pdata_int(pPlayer, m_rgPlayerAmmoSlot + ExecuteHamB(Ham_Item_PrimaryAmmoIndex, pWeapon));
if (iClip == 0 && fInSpecialReload == 0 && rgAmmo > 0)
{
OnWeaponReload(pWeapon);
return HAM_SUPERCEDE;
}
else if (fInSpecialReload != 0)
{
if (iClip != SET_SOME_MAXCLIP_HERE && rgAmmo > 0)
{
OnWeaponReload(pWeapon);
}
else
{
SendWeaponAnim(pPlayer, RELOAD_END_ANIMATION);
//play reload end sound here if you need
set_pdata_int(pWeapon, m_fInSpecialReload, 0, 4);
set_pdata_float(pWeapon, m_flTimeWeaponIdle, 1.5, 4);
}
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}