Code:
#include <xs>
...
new Float:origin[3], Float:endpos[3];
pev(id, pev_origin, origin);
// Replace 10.0 for the distance from player to ground that you want
xs_vec_sub(origin, Float:{0.0, 0.0, 10.0}, endpos);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, origin, endpos, IGNORE_MONSTERS, id, tr);
new Float:fraction;
get_tr2(tr, TR_flFraction, fraction);
if (fraction == 1.0)
{
// set_flag_state -> state_fly
}
else
{
// set_flag_state -> state_dropped
}
free_tr2(tr);
...
switch (flag_state)
{
case state_dropped:
{
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_sequence, SEQ_DROPPED)
engfunc(EngFunc_DropToFloor, ent)
}
case state_fly:
{
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_FLY)
}
}