try it
PHP Code:
// if you dont like the fakemeta, replace it with engine...
// returns 1 if ent2 is above ent1
stock is_touching( ent1, ent2 )
{
static Float:mins1[3], Float:mins2[3], Float:mins[3]
static Float:maxs1[3], Float:maxs2[3], Float:maxs[3]
static Float:o1[3], Float:o2[3]
static a, Float:d[3]
pev( ent1, pev_mins, mins1 )
pev( ent2, pev_mins, mins2 )
pev( ent1, pev_maxs, maxs1 )
pev( ent2, pev_maxs, maxs2 )
pev( ent1, pev_origin, o1 )
pev( ent2, pev_origin, o2 )
for( a = 0; a < 3; a++ )
{
d[a] = o1[a] - o2[a]
mins[a] = mins1[a] + mins2[a]
maxs[a] = maxs1[a] + maxs2[a]
if( (d[a] < 0.0 && mins[a] < d[a]) || ( d[a] > 0.0 || maxs[a] > d[a] ) ) return 0
}
return 1
}
edit ( since misunderstood the op )
PHP Code:
// if you dont like the fakemeta, replace it with engine...
// returns 1 if is touching ( also returns 1 when entity is inside of another entity )
// ( in your case ent2 will be id or player )
stock is_touching_from_above( ent1, ent2 )
{
static Float:mins1[3], Float:mins2[3], Float:mins[3]
static Float:maxs1[3], Float:maxs2[3], Float:maxs[3]
static Float:o1[3], Float:o2[3]
static a, Float:d[3]
pev( ent1, pev_mins, mins1 )
pev( ent2, pev_mins, mins2 )
pev( ent1, pev_maxs, maxs1 )
pev( ent2, pev_maxs, maxs2 )
pev( ent1, pev_origin, o1 )
pev( ent2, pev_origin, o2 )
mins1[2] = maxs1[2]
maxs1[2] += 1.0
for( a = 0; a < 3; a++ )
{
d[a] = o1[a] - o2[a]
mins[a] = mins1[a] + mins2[a]
maxs[a] = maxs1[a] + maxs2[a]
if( (d[a] < 0.0 && mins[a] < d[a]) || ( d[a] > 0.0 || maxs[a] > d[a] ) ) return 0
}
return 1
}