Код за потвърждение: Избери целия код
#define MY_PLUGIN_NAME "Pain Shock Free"
#define MY_PLUGIN_VERSION "1.0"
#define MY_PLUGIN_AUTHOR "Simon Logic"
new bool:g_bRestoreVel
new Float:g_vecVel[3]
new g_cvarPainShockFree
new g_fmPlayerPreThink
new g_fmPlayerPreThink_Post
//-----------------------------------------------------------------------------
public plugin_init()
{
register_plugin(MY_PLUGIN_NAME, MY_PLUGIN_VERSION, MY_PLUGIN_AUTHOR)
g_cvarPainShockFree = register_cvar("amx_painshockfree", "1", FCVAR_SERVER)
g_fmPlayerPreThink = register_forward(FM_PlayerPreThink, "onPlayerPreThink")
g_fmPlayerPreThink_Post = register_forward(FM_PlayerPreThink, "onPlayerPreThink_Post", 1)
}
//-----------------------------------------------------------------------------
public plugin_end()
{
if(g_fmPlayerPreThink)
unregister_forward(FM_PlayerPreThink, g_fmPlayerPreThink)
if(g_fmPlayerPreThink_Post)
unregister_forward(FM_PlayerPreThink, g_fmPlayerPreThink_Post, 1)
}
//-----------------------------------------------------------------------------
public onPlayerPreThink(id)
{
if(get_pcvar_num(g_cvarPainShockFree))
{
if(pev_valid(id) && is_user_alive(id)
&& (FL_ONGROUND & pev(id, pev_flags)))
{
pev(id, pev_velocity, g_vecVel)
g_bRestoreVel = true
}
return FMRES_HANDLED
}
return FMRES_IGNORED
}
//-----------------------------------------------------------------------------
public onPlayerPreThink_Post(id)
{
if(g_bRestoreVel)
{
g_bRestoreVel = false
if(!(FL_ONTRAIN & pev(id, pev_flags)))
{
// NOTE: within DLL PlayerPreThink Jump() function is called;
// there is a conveyor velocity addiction we should care of
static iGEnt
iGEnt = pev(id, pev_groundentity)
if(pev_valid(iGEnt) && (FL_CONVEYOR & pev(iGEnt, pev_flags)))
{
static Float:vecTemp[3]
pev(id, pev_basevelocity, vecTemp)
g_vecVel[0] += vecTemp[0]
g_vecVel[1] += vecTemp[1]
g_vecVel[2] += vecTemp[2]
}
set_pev(id, pev_velocity, g_vecVel)
return FMRES_HANDLED
}
}
return FMRES_IGNORED
}