PHP Code:
RegisterHam(Ham_Think, "info_target", "ent_ThinkPre")
public ent_ThinkPre(iEnt)
{
if(!pev_valid(iEnt))
return
static className[32]
pev(iEnt, pev_classname, className, charsmax(className))
if(!equali(className, g_szClassName))
{
return
}
new id = pev(iEnt, pev_owner)
if(is_user_alive(id))
{
new Float:fStartPos[3], Float:fvOFS[3], Float:fAngles[3]
pev(id, pev_origin, fStartPos)
pev(id, pev_view_ofs, fvOFS)
pev(id, pev_angles, fAngles)
fAngles[0] = 0.0
//fStartPos[2] += fvOFS[2]
set_pev(iEnt, pev_origin, fStartPos)
set_pev(iEnt, pev_angles, fAngles)
new button = get_user_button(id)
if(button & IN_FORWARD)
{
entity_set_aim(iEnt, id, true);
}
else
{
entity_set_aim(iEnt, id);
}
}
shift_entity_position(iEnt, 100.0, 0.0, 30.0)
engfunc(EngFunc_DropToFloor, iEnt)
set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
}
stock entity_set_aim(ent, player, bool:bBackWards = false)
{
static Float:origin[3], Float:ent_origin[3], Float:angles[3]
pev(player, pev_origin, origin)
pev(ent, pev_origin, ent_origin)
xs_vec_sub(origin, ent_origin, origin)
xs_vec_normalize(origin, origin)
vector_to_angle(origin, angles)
angles[0] = 0.0
if(entity_range(ent, player) > ENT_DISTANCE)
{
set_velocity(ent, angles, player, bBackWards)
//angles[1] -= 90.0
set_pev(ent, pev_angles, angles)
}
}
stock set_velocity(ent, Float:angles[3], player, bool:bBackWards = false)
{
new Float: Direction[3]
angle_vector(angles, ANGLEVECTOR_FORWARD, Direction)
xs_vec_mul_scalar(Direction, bBackWards ? float(-Speed) : float(Speed), Direction)
set_pev(ent, pev_velocity, Direction)
}
stock shift_entity_position(ent, Float:forw, Float:right, Float:up)
{
new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vEnd[3];
pev(ent, pev_origin, vOrigin);
pev(ent, pev_angles, vAngle);
angle_vector(vAngle,ANGLEVECTOR_FORWARD, vForward); //or use EngFunc_AngleVectors
angle_vector(vAngle,ANGLEVECTOR_RIGHT, vRight);
vEnd[0] = vOrigin[0] + (vForward[0] * forw) + (vRight[0] * right);
vEnd[1] = vOrigin[1] + (vForward[1] * forw) + (vRight[1] * right);
// Extract up value from vOrigin to make entitystay on ground when in walls but it seems that it didn't work too good
vEnd[2] = vOrigin[2] - up;
// debug only
client_print(0, print_chat, "origin2: %f", vOrigin[2])
// This don't help with anything, so I decided to comment it.
/*static iTr2; iTr2 = create_tr2();
engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, ent, iTr2);
get_tr2(iTr2, TR_vecEndPos, vEnd);
free_tr2(iTr2);*/
set_pev(ent, pev_origin, vEnd);
}