PHP Code:
new const classes[][] = { "weaponbox", "item_thighpack", "weapon_shield", "grenade"}
public plugin_init()
{
for (new x; x < sizeof classes; x++)
RegisterHam(Ham_Touch, classes[x], "touch_test")
}
public touch_test(ent, touched)
{
new owner = pev(ent, pev_owner)
if (!pev_valid(ent)) return HAM_IGNORED
if ((touched != owner) && (touched <= 33 && touched != 0))
{
set_pev(ent, pev_owner, touched)
if(pev(ent, pev_flags) & FL_ONGROUND)
{
set_pev(ent, pev_owner, 0)
return HAM_IGNORED
}
static Float:oent[3], Float:otou[3], Float:oaim[3], velnew
pev(ent, pev_origin, oent)
pev(ent, pev_origin, otou)
fm_get_aim_origin(ent, oaim)
if(oaim[1] == otou[1] && oaim[2] == otou[2])
velnew = random_num(-150, -50)
else
velnew = random_num(50, 150)
pev(ent, pev_velocity, set_pev( ent, pev_velocity, vel_by_aim( owner, velnew ) ))
}
}
stock Float:vel_by_aim( id, speed = 1 )
{
new Float:v1[3], Float:vBlah[3]
pev( id, pev_angle, v1 )
engfunc( EngFunc_AngleVectors, v1, v1, vBlah, vBlah )
v1[0] *= speed
v1[1] *= speed
v1[2] *= speed
return v1
}
// ported from AMXX's core get_user_origin(..., 3) (suggested by Greenberet)
stock fm_get_aim_origin(index, Float:origin[3]) {
new Float:start[3], Float:view_ofs[3];
pev(index, pev_origin, start);
pev(index, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(index, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 9999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
get_tr2(0, TR_vecEndPos, origin);
return 1;
}
who I can do to look more realistic because my velocity by aim is not quite well