Quote:
Originally Posted by wickedd
Search again because there's one written by ConnorMcLeod that works. It's in the request forum.
|
I got it, Thanks Wickedd
Well, I haven't checked it yet but here is the link, if anyone needs it in future ..!!
https://forums.alliedmods.net/showpo...1&postcount=11
And if you want Team Flash Bang to follow ff, like in mix, uncomment the following line and recompile it ..!!
Quote:
// #define FOLLOW_FRIENDLYFIRE
|
To
Quote:
#define FOLLOW_FRIENDLYFIRE
|
Will also soon, let you know, how it works .!!
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new const VERSION[] = "1.1.2"
// #define FOLLOW_FRIENDLYFIRE
const MAX_ENTSARRAYS_SIZE = 64
new g_bitGonnaExplode[MAX_ENTSARRAYS_SIZE]
#define SetGrenadeExplode(%1) g_bitGonnaExplode[%1>>5] |= 1<<(%1 & 31)
#define ClearGrenadeExplode(%1) g_bitGonnaExplode[%1>>5] &= ~( 1 << (%1 & 31) )
#define WillGrenadeExplode(%1) g_bitGonnaExplode[%1>>5] & 1<<(%1 & 31)
#if defined FOLLOW_FRIENDLYFIRE
const XTRA_OFS_PLAYER = 5
const m_iTeam = 114
#define cs_get_user_team_index(%1) get_pdata_int(%1, m_iTeam, XTRA_OFS_PLAYER)
new mp_friendlyfire
new g_iCurrentFlasher
new g_iCurrentTeam
#endif
new Float:g_flCurrentGameTime, g_iCurrentFlashBang
new g_iMaxPlayers
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
public plugin_init()
{
register_plugin("Anti Flashbang Bug", VERSION, "Numb / ConnorMcLeod")
RegisterHam(Ham_Think, "grenade", "Ham__CGrenade_Think__Pre")
register_forward(FM_FindEntityInSphere, "Fm__FindEntityInSphere__Pre")
#if defined FOLLOW_FRIENDLYFIRE
mp_friendlyfire = get_cvar_pointer("mp_friendlyfire")
#endif
g_iMaxPlayers = get_maxplayers()
}
public Ham__CGrenade_Think__Pre( iEnt )
{
static Float:flGameTime, Float:flDmgTime
flGameTime = get_gametime()
pev(iEnt, pev_dmgtime, flDmgTime)
#if defined FOLLOW_FRIENDLYFIRE
static iOwner
if( flDmgTime <= flGameTime
&& get_pdata_int(iEnt, 114) == 0 // has a bit when is HE or SMOKE
&& !(get_pdata_int(iEnt, 96) & (1<<8)) // has this bit when is c4
&& IsPlayer( (iOwner = pev(iEnt, pev_owner)) ) ) // if no owner grenade gonna be removed from world
#else
if( flDmgTime <= flGameTime
&& get_pdata_int(iEnt, 114) == 0 // has a bit when is HE or SMOKE
&& !(get_pdata_int(iEnt, 96) & (1<<8)) // has this bit when is c4
&& IsPlayer( pev(iEnt, pev_owner) ) )
#endif
{
if( ~WillGrenadeExplode(iEnt) ) // grenade gonna explode on next think
{
SetGrenadeExplode( iEnt )
}
else
{
ClearGrenadeExplode( iEnt )
g_flCurrentGameTime = flGameTime
g_iCurrentFlashBang = iEnt
#if defined FOLLOW_FRIENDLYFIRE
g_iCurrentFlasher = iOwner
g_iCurrentTeam = cs_get_user_team_index(iOwner)
#endif
}
}
}
public Fm__FindEntityInSphere__Pre(iStartEnt, Float:fVecOrigin[3], Float:flRadius)
{
const Float:FLASHBANG_SEARCH_RADIUS = 1500.0
if( flRadius == FLASHBANG_SEARCH_RADIUS
&& get_gametime() == g_flCurrentGameTime )
{
new id = iStartEnt, Float:fVecPlayerEyeOrigin[3], Float:flFraction
while( IsPlayer( (id=engfunc(EngFunc_FindEntityInSphere, id, fVecOrigin, flRadius)) ) )
{
if( is_user_alive(id) )
{
pev(id, pev_origin, fVecPlayerEyeOrigin)
fVecPlayerEyeOrigin[2] += ((pev(id, pev_flags) & FL_DUCKING) ? 12.0 : 18.0)
engfunc(EngFunc_TraceLine, fVecOrigin, fVecPlayerEyeOrigin, DONT_IGNORE_MONSTERS, g_iCurrentFlashBang, 0)
get_tr2(0, TR_flFraction, flFraction)
if( flFraction < 1.0 && get_tr2(0, TR_pHit) == id )
{
engfunc(EngFunc_TraceLine, fVecPlayerEyeOrigin, fVecOrigin, DONT_IGNORE_MONSTERS, id, 0)
get_tr2(0, TR_flFraction, flFraction)
#if defined FOLLOW_FRIENDLYFIRE
if( flFraction == 1.0
&& ( get_pcvar_num(mp_friendlyfire)
|| id == g_iCurrentFlasher
|| cs_get_user_team_index(id) != g_iCurrentTeam ) )
#else
if( flFraction == 1.0 )
#endif
{
forward_return(FMV_CELL, id)
return FMRES_SUPERCEDE
}
}
}
}
forward_return(FMV_CELL, 0)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}