AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   how to kick a player back?(not shooting) (https://forums.alliedmods.net/showthread.php?t=76725)

hzqst 08-29-2008 10:51

how to kick a player back?(not shooting)
 
how to kick a player back by explosion?
like grenades
i tried:
Quote:

new Float:vec[3], Float:curvec[3],Float: PlayerPos[3]
get_user_origin(victim, PlayerPos)
set_entity_view(exp, PlayerPos[0], PlayerPos[1], PlayerPos[2])
velocity_by_aim(exp,damage*10,vec)
get_user_velocity(victim,curvec)
curvec[0] = curvec[0] + vec[0]
curvec[1] = curvec[1] + vec[1]
curvec[2] = curvec[2] + vec[2]
set_user_velocity(victim,curvec)
and
Quote:

public set_entity_view(entity,tg0,tg1,tg2)
{
new Float:Target[3], Float:Origin[3], Float:Angles[3]
Target[0] = tg0
Target[1] = tg1
Target[2] = tg2
pev(entity, pev_origin, Origin)

Target[0] -= Origin[0]
Target[1] -= Origin[1]
Target[2] -= Origin[2]

vector_to_angle(Target, Angles)
Angles[0] = 360-Angles[0]

set_pev(entity, pev_v_angle, Angles)
Angles[0] *= -1
set_pev(entity, pev_angles, Angles)
set_pev(entity, pev_fixangle, 1)
}
in damage event


it always shows:
Quote:

PM Got a NaN velocity 0
PM Got a NaN velocity 1
PM Got a NaN velocity 2
in console

Exolent[jNr] 08-29-2008 15:38

Re: how to kick a player back?(not shooting)
 
Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta> new gkb_radius; new gkb_speed; new g_max_clients; public plugin_init() {     register_plugin("Grenade Knock Back", "0.1", "Exolent");         register_forward(FM_Think, "FwdThink");         gkb_radius = register_cvar("gkb_radius", "200");     gkb_speed = register_cvar("gkb_speed", "800");         g_max_clients = global_get(glb_maxClients); } public FwdThink(ent) {     if( !pev_valid(ent) ) return;         new classname[32];     pev(ent, pev_classname, classname, sizeof(classname) - 1);         if( !equal(classname, "grenade") ) return;         new Float:damage_time;     pev(ent, pev_dmgtime, damage_time);         if( get_gametime() > damage_time ) return;         HandleExplosion(ent); } HandleExplosion(ent) {     new Float:radius = get_pcvar_float(gkb_radius);     new Float:speed = get_pcvar_float(gkb_speed);         new Float:ent_origin[3];     pev(ent, pev_origin, ent_origin);         new client = -1, Float:client_origin[3], Float:distance, Float:calc_speed, Float:velocity[3];     while( (client = engfunc(EngFunc_FindEntityInSphere, client, ent_origin, radius)) )     {         if( !(0 < client <= g_max_clients) ) continue;         if( !is_user_alive(client) ) continue;                 pev(client, pev_origin, client_origin);                 distance = get_distance_f(ent_origin, client_origin);                 calc_speed = speed * (1.0 - (distance / radius));                 get_speed_vector(ent_origin, client_origin, calc_speed, velocity);                 set_pev(client, pev_velocity, velocity);     } } // Thanks GHW_Chronic // from chr_engine.inc stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) {     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; }


All times are GMT -4. The time now is 03:11.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.