Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Dont Die From Bomb"
#define VERSION "1.0"
#define AUTHOR "bugsy"
#define fm_get_c4() engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4")
new g_C4Ent;
new Float:g_fC4Origin[3];
new cvar_team
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_logevent( "BombPlantComplete" , 3 , "2=Planted_The_Bomb" );
RegisterHam( Ham_TakeDamage , "player" , "fw_HamTakeDamage" );
cvar_team = register_cvar("amx_c4_damage" , "1")
}
public fw_HamTakeDamage(victim, inflictor, attacker, Float:fDamage, bitDamage)
{
if ( get_user_team(victim) != get_pcvar_num(cvar_team) || !inflictor )
return HAM_IGNORED;
new Float:fOrigin[3];
new iC4 = fm_get_c4();
new szClass[14];
pev( victim , pev_origin , fOrigin );
pev( inflictor , pev_classname , szClass , 13 );
//Block damage if:
// DMG_BLAST bit found in bitDamage (DMG_BLAST damage is issued by C4 explosion)
// Player is within C4 damage range. (1700 is used)
// C4 entity does not exist but previously did (it exploded) and inflictors classname = "env_explosion" or "grenade"
if ( (bitDamage & DMG_BLAST ) && ( get_distance_f( fOrigin , g_fC4Origin) <= 1700.0) && ( !iC4 && g_C4Ent && ( equal(szClass, "env_explosion") || equal(szClass, "grenade") ) ) )
{
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public BombPlantComplete()
{
g_C4Ent = fm_get_c4();
pev( g_C4Ent , pev_origin , g_fC4Origin );
}