This : !(1 <= id <= g_iMaxPlayers) is not needed since the forward is registered with classname "player".
Also i think is_user_alive(id) is not needed.
Last, you should check if inflictor is same as attacker.
When a player is hit by a hegrenade, when damage is proceeded, attacker can have his knife on, so if inflictor is not same as attacker, just return the function.