You code has redundant checks, it could looks better :
PHP Code:
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if( victim != attacker
&& is_user_connected(attacker)
&& g_HasLm4a1_b[attacker]
&& !zp_get_user_zombie(attacker)
&& !zp_get_user_survivor(attacker)
&& is_valid_player(attacker)
&& get_user_weapon(attacker) == CSW_M4A1 )
{
g_damage_m4a1br[attacker] + damage
new Float:fl_m4a1_b_dmg_r = get_pcvar_float(g_m4a1_b_dmg_r)
if(g_damage_m4a1br[attacker] > fl_m4a1_b_dmg_r))
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker)+1)
g_damage_m4a1br[attacker] -= fl_m4a1_b_dmg_r
}
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmgmultiplier))
return HAM_HANDLED
}
return HAM_IGNORED
}
I don't know what you exactly do but it seems that you do strange things with g_damage_m4a1br[attacker], adding some value then sub some other values.
__________________