PHP Code:
new bool:iPlayerGrab_On[33]
new iPlayerGrab_Target[33]
new iPlayerGrab_Grabber[33]
new Float:fPlayerGrab_ChokeTime[33]
new Float:fPlayerGrab_Distance[33]
public fwGrabPlayerPreThink(id,iButtons)
{
new entTarget = iPlayerGrab_Target[id]
if( !entTarget || !is_user_alive(id) )
return FMRES_IGNORED
if( iButtons & IN_GRAB_CHOKE)
{
new Float:fNow = get_gametime()
if( fNow - fPlayerGrab_ChokeTime[id] >= GRAB_CHOKE_INTERVAL)
{
ExecuteHamB(Ham_TakeDamage, entTarget, 0, 0, GRAB_CHOKE_DMG, DMG_ALWAYSGIB)
fPlayerGrab_ChokeTime[id] = fNow
return
}
}
static Float:vVelocity[3]
if( iButtons & IN_GRAB_THROW)
{
velocity_by_aim(id, 1000, vVelocity)
set_pev(entTarget, pev_velocity, vVelocity)
GrabEndCommand(id)
return
}
if( iButtons & IN_GRAB_PUSH)
fPlayerGrab_Distance[id] = floatmax(fPlayerGrab_Distance[id] - 7.0, GRAB_MIN_DISTANCE)
if( iButtons & IN_GRAB_PULL)
fPlayerGrab_Distance[id] += 7.0
static Float:vPlayerOrigin[3], Float:vGrabbedOrigin[3]
pev(id, pev_origin, vPlayerOrigin)
pev(entTarget, pev_origin, vGrabbedOrigin)
static Float:vAimVector[3]
pev(id, pev_view_ofs, vAimVector)
xs_vec_add(vPlayerOrigin, vAimVector, vPlayerOrigin)
pev(id, pev_v_angle, vAimVector)
angle_vector(vAimVector,1,vAimVector)
xs_vec_mul_scalar(vAimVector, fPlayerGrab_Distance[id], vAimVector);
xs_vec_add(vPlayerOrigin, vAimVector, vPlayerOrigin)
vVelocity[0] = (vPlayerOrigin[0] - vGrabbedOrigin[0]) * 8
vVelocity[1] = (vPlayerOrigin[1] - vGrabbedOrigin[1]) * 8
vVelocity[2] = (vPlayerOrigin[2] - vGrabbedOrigin[2]) * 8
set_pev(entTarget, pev_velocity, vVelocity)
}
public GrabStartCommand(id,level)
{
if( (!iPlayerGrab_On[id] && !access(id, level) ) || !is_user_alive(id) )
{
return PLUGIN_HANDLED
}
new Float:vAimOrigin[3]
fm_get_aim_origin(id, vAimOrigin)
new entTarget
if( !(entTarget = engfunc(EngFunc_FindEntityInSphere, 0, vAimOrigin, 32.0) )
|| entTarget == id
|| !is_user_alive(entTarget)
|| access(entTarget, ADMIN_IMMUNITY) && !access(id,ADMIN_IMMUNITY)
)
{
return PLUGIN_HANDLED
}
new Float:vPlayerOrigin[3], Float:vViewOfs[3]
pev(id, pev_origin, vPlayerOrigin)
pev(id, pev_view_ofs, vViewOfs)
xs_vec_add(vPlayerOrigin, vViewOfs, vPlayerOrigin)
new Float:vTargetOrigin[3]
pev(entTarget, pev_origin, vTargetOrigin)
fPlayerGrab_Distance[id] = vector_distance(vPlayerOrigin, vTargetOrigin)
iPlayerGrab_Target[id] = entTarget
iPlayerGrab_Grabber[entTarget] = id
BeamEnts(id | 0x1000, entTarget, iBeamSprite)
return PLUGIN_HANDLED
}
public GrabEndCommand(id)
{
new entTarget = iPlayerGrab_Target[id]
if(entTarget)
{
iPlayerGrab_Grabber[entTarget] = 0
iPlayerGrab_Target[id] = 0
fPlayerGrab_ChokeTime[id] = 0.0
BeamKill(id | 0x1000)
}
}