AMXX Coder (:
✔️ HL Verified
Discord Member
- Joined
- Dec 31, 2008
- Messages
- 55
- Best answers
- 0
So, i'm trying to do a knockback, but works only if players aren't flying, if they are in the air wont work. Could you tell me how to fix it?
PHP:
stock UTIL_KnockBack( id, Float:flRadius, Float:flSpeed )
{
new Float:flEntityOrigin[ 3 ];
pev( id, pev_origin, flEntityOrigin );
new iClient = FM_NULLENT, Float:flClientOrigin[ 3 ];
new Float:flDistance, Float:flVelocity[ 3 ], Float:flCalcSpeed;
while( ( iClient = engfunc( EngFunc_FindEntityInSphere, iClient, flEntityOrigin, flRadius ) ) )
{
if( IsPlayer( iClient ) && is_user_alive( iClient ) && esf_get_team( id ) != esf_get_team( iClient ) )
{
pev( iClient, pev_origin, flClientOrigin );
flDistance = get_distance_f( flEntityOrigin, flClientOrigin );
flCalcSpeed = flSpeed * ( 1.0 - ( flDistance / flRadius ) );
if( flDistance <= flRadius )
{
get_speed_vector2( id, iClient, flCalcSpeed, flVelocity );
set_pev( iClient, pev_velocity, flVelocity );
}
}
}
}
stock get_speed_vector2(ent1, ent2, Float:speed, Float:new_velocity[3])
{
if(!pev_valid(ent1) || !pev_valid(ent2))
return 0;
static Float:origin1[3]
pev(ent1,pev_origin,origin1)
static Float:origin2[3]
pev(ent2,pev_origin,origin2)
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1;
}