GetPlayerTargetPlayer - Doesn't work with sniper
#5

Quote:
Originally Posted by Write
View Post
It's still a bug if it dosen't work for snipers ph.
Sniped players are not targeted therefore this is not a bug at all..... Use a line/sphere intersection function.

Code:
// This checks to see if a line intersects a sphere
stock RaySphere(Float:p1[3],Float:p2[3],Float:sc[3],Float:r)
{
	new Float:dist, Float:sdist1, Float:sdist2;
	dist = getdist3d(p1[0], p1[1], p1[2], p2[0], p2[1], p2[2]);
    sdist1 = getdist3d(sc[0], sc[1], sc[2], p1[0], p1[1], p1[2]);
    sdist2 = getdist3d(sc[0], sc[1], sc[2], p2[0], p2[1], p2[2]);
    
	// Make sure player is between the points if so check if the sphere intersects
    if(dist > sdist1 && dist > sdist2)
	{
		new Float:a, Float:b, Float:c, Float:bb4ac, Float:dp[3];
		dp[0] = p2[0] - p1[0];
		dp[1] = p2[1] - p1[1];
		dp[2] = p2[2] - p1[2];
		a = dp[0] * dp[0] + dp[1] * dp[1] + dp[2] * dp[2];
		b = 2 * (dp[0] * (p1[0] - sc[0]) + dp[1] * (p1[1] - sc[1]) + dp[2] * (p1[2] - sc[2]));
		c = sc[0] * sc[0] + sc[1] * sc[1] + sc[2] * sc[2];
		c += p1[0] * p1[0] + p1[1] * p1[1] + p1[2] * p1[2];
		c -= 2 * (sc[0] * p1[0] + sc[1] * p1[1] + sc[2] * p1[2]);
		c -= r * r;
		bb4ac = b * b - 4 * a * c;
		if(bb4ac < 0) return 0;
		return 1;
	}
	return 0;
}
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)