18.04.2015, 17:00
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; }