Junior Member
|
11-20-2018
, 19:43
Re: Nade Semiclip v2.4
|
#21
|
Quote:
Originally Posted by JusTGo
Not sure about the problem, test this updated plugin and see if every thing is working correctly :
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Nade Semiclip"
#define VERSION "2.5"
#define AUTHOR "JustGo"
#define OFFSET_TEAM 114
#define is_user_valid(%1) (1 <= %1 <= g_MaxPlayers)
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)
#define is_grenade_c4(%1) (get_pdata_int(%1, 96) & (1<<8)) // 96 is the C4 offset
#define SEMI_CLIP_DISTANCE 100.0
new cvar_nade_semiclip, g_nade_semiclip
new g_MaxPlayers
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
RegisterHam(Ham_Think, "grenade", "Think_Grenade")
register_forward(FM_SetModel, "SetModel")
register_forward(FM_ShouldCollide, "ShouldCollide")
cvar_nade_semiclip = register_cvar( "nade_semiclip", "1" )
g_MaxPlayers = get_maxplayers();
}
public event_round_start()
{
g_nade_semiclip = get_pcvar_num( cvar_nade_semiclip )
}
// Grenade Think Forward
public Think_Grenade(entity)
{
if(!g_nade_semiclip)
return HAM_IGNORED
if(!pev_valid(entity))
return HAM_IGNORED
if(is_grenade_c4(entity))
return HAM_IGNORED
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
if(dmgtime <= get_gametime())
set_pev(entity, pev_owner,pev(entity,pev_iuser2)); // fix for other plugin that gets flasher name or stuff like that.
return HAM_IGNORED;
}
public SetModel(iEntity, const Model[])
{
if(!g_nade_semiclip)
return FMRES_IGNORED
if(!is_grenade(iEntity))
return FMRES_IGNORED
static id; id = pev(iEntity, pev_owner)
if(!is_user_valid(id))
return FMRES_IGNORED
if(!pev(iEntity,pev_iuser2))
{
set_pev(iEntity,pev_iuser2,id) //remeber the real nade owner
set_pev(iEntity,pev_iuser1,fm_get_user_team(id)) // remeber the nade owner team
}
return FMRES_IGNORED
}
public ShouldCollide(playerindex, entindex)
{
if(!g_nade_semiclip)
return FMRES_IGNORED
if(!is_user_alive(playerindex) || !is_grenade(entindex))
return FMRES_IGNORED
// Get damage time of grenade
static Float:dmgtime
pev(entindex, pev_dmgtime, dmgtime)
if(dmgtime <= get_gametime())
return FMRES_IGNORED
if(close_enough(playerindex,entindex))
{
if(g_nade_semiclip == 1 && (fm_get_user_team( playerindex ) != pev(entindex,pev_iuser1)))
return FMRES_IGNORED
set_pev(entindex,pev_owner,playerindex)
}
return FMRES_IGNORED
}
is_grenade(iEntity)
{
if( !pev_valid(iEntity) )
return 0
static class[9]
pev(iEntity, pev_classname, class, charsmax(class))
if( !equal(class, "grenade") )
return 0
if (is_grenade_c4(iEntity))
return 0
return 1
}
public bool:close_enough(ent1, ent2)
{
static Float:origin[3], Float:origin2[3]
pev(ent1, pev_origin, origin )
pev(ent2, pev_origin, origin2 )
if( get_distance_f( origin, origin2 ) <= SEMI_CLIP_DISTANCE )
return true
return false
}
|
it stopped displaying error in the logs, but it stopped working since I put the REGAME.DLL, it works on reHLDS normally, I expressed myself wrong earlier.
|
|