| Exolent[jNr] |
10-09-2010 12:03 |
Re: Team flash enable/disable by command.
amx_teamflash 0/1
PHP Code:
#include <amxmodx> #include <fakemeta> #include <hamsandwich>
#define PLUGIN_NAME "Anti Flashbang Bug" #define PLUGIN_VERSION "1.0" #define PLUGIN_AUTHOR "Numb"
new Float:old_gametime; new mp_friendlyfire; new owner; new pCvarEnabled;
public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); RegisterHam(Ham_Think, "grenade", "Ham_FEThink_grenade", 0); register_forward(FM_FindEntityInSphere, "fm_FEFindEntityInSphere", 0); mp_friendlyfire = get_cvar_pointer("mp_friendlyfire"); pCvarEnabled = register_cvar( "amx_teamflash", "1" ); }
public Ham_FEThink_grenade(ent) { static model[32]; pev(ent, pev_model, model, 31); if( equal(model, "models/w_flashbang.mdl") ) { if( (owner=pev(ent, pev_owner))<1 ) owner = 0; old_gametime = get_gametime(); } else { owner = 0; old_gametime = 0.0; } }
public fm_FEFindEntityInSphere(start, Float:origin[3], Float:radius) { if( radius!=1500.0 || old_gametime!=get_gametime() || !get_pcvar_num( pCvarEnabled ) ) return FMRES_IGNORED; static hit, trace, Float:user_origin[3], Float:absmax[3], Float:fraction, ff, owner_team; hit = start; ff = clamp(get_pcvar_num(mp_friendlyfire), 0, 1); if( owner ) owner_team = get_user_team(owner); else owner_team = -1; // run the same check to see what its result will be while( (hit=engfunc(EngFunc_FindEntityInSphere, hit, origin, radius))>0 ) { // hit a non- or dead-player if( !is_user_alive(hit) ) { forward_return(FMV_CELL, hit); return FMRES_SUPERCEDE; } // aim for the body eyes pev(hit, pev_origin, user_origin); pev(hit, pev_absmax, absmax); user_origin[2] = (absmax[2]-20.0); engfunc(EngFunc_TraceLine, origin, user_origin, DONT_IGNORE_MONSTERS, 0, trace); // hit player eyes, grenade ok if( get_tr2(trace, TR_pHit)==hit ) { // start backup check (de_dust2 B bug - outmap bug) engfunc(EngFunc_TraceLine, user_origin, origin, DONT_IGNORE_MONSTERS, hit, trace); // hit player eyes with backup check get_tr2(trace, TR_flFraction, fraction); if( fraction==1.0 ) { if( ff || owner==hit || owner_team!=get_user_team(hit) ) { forward_return(FMV_CELL, hit); return FMRES_SUPERCEDE; } } } } // grenade could not hit anyones eyes, cancel the check forward_return(FMV_CELL, -1); return FMRES_SUPERCEDE; }
|