stock Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2)
{
return floatadd(floatadd(floatsqroot(floatpower(floatsub(rx1,rx2),2)),floatsqroot(floatpower(floatsub(ry1,ry2),2))),floatsqroot(floatpower(floatsub(rz1,rz2),2)));
}
stock GetClosestPlayer(playerid,Float:limit)
{
new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2;
GetPlayerPos(playerid,x1,y1,z1);
new Float:Range = 999.0; //What is float suppose to mean? i change it to 5.0 and still doesn't work
new id = -1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && playerid != i)
{
GetPlayerPos(i,x2,y2,z2);
new Float:Dist = GetDistanceBetweenPoints(x1,y1,z1,x2,y2,z2);
if(floatcmp(Range,Dist) == 1 && floatcmp(limit,Range) == 1)
{
Range = Dist;
id = i;
}
}
}
return id;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_LOOK_BEHIND) && !(oldkeys & KEY_LOOK_BEHIND)) //if he press this key, it will take the closest wanted player but it takes all wanted players in the game o_O"
{
GetClosestPlayer(playerid,5.0); //The wanted player must be in range of 5.0 from the cop
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsCop[playerid] == true && IsWanted[i] == true)
{
//rest of code
}
}
}
}
new
x = GetClosestPlayer( playerid, 5.0 );
if ( id != -1 ) // ID is valid
{
// Rest of code
}
stock Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2)
{
return floatadd(floatadd(floatsqroot(floatpower(floatsub(rx1, rx2), 2)), floatsqroot(floatpower(floatsub(ry1, ry2), 2))), floatsqroot(floatpower(floatsub(rz1, rz2), 2)));
}
stock GetClosestPlayer(playerid, Float:limit)
{
new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:Dist, id = INVALID_PLAYER_ID;
GetPlayerPos(playerid,x1,y1,z1);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(i == playerid) continue;
GetPlayerPos(i, x2, y2, z2);
Dist = GetDistanceBetweenPoints(x1, y1, z1, x2, y2, z2);
if(Dist < limit || id == INVALID_PLAYER_ID)
{
limit = Dist;
id = i;
}
}
return id;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys & KEY_LOOK_BEHIND) && !(oldkeys & KEY_LOOK_BEHIND))
{
if(IsCop[playerid])
{
new target = GetClosestPlayer(playerid,5.0); //The wanted player must be in range of 5.0 from the cop
if(target != INVALID_PLAYER_ID)
{
if(IsWanted[target])
{
//Rest of code...
}
}
}
}
return 1;
}
stock Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2)
{
return floatadd(floatadd(floatsqroot(floatpower(floatsub(rx1, rx2), 2)), floatsqroot(floatpower(floatsub(ry1, ry2), 2))), floatsqroot(floatpower(floatsub(rz1, rz2), 2)));
}
stock GetClosestPlayer(playerid, Float:limit)
{
new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:Dist, id = INVALID_PLAYER_ID;
GetPlayerPos(playerid,x1,y1,z1);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(i == playerid) continue;
GetPlayerPos(i, x2, y2, z2);
Dist = GetDistanceBetweenPoints(x1, y1, z1, x2, y2, z2);
if(Dist < limit || id == INVALID_PLAYER_ID)
{
limit = Dist;
id = i;
}
}
return id;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_LOOK_BEHIND) && !(oldkeys & KEY_LOOK_BEHIND))
{
if(IsCop[playerid] == true)
{
new targetid = GetClosestPlayer(playerid,5.0);
if(IsKidnapped[playerid] == true && Spawned[playerid] == false) return 1;
if(targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to arrest.");
if(GetPlayerWantedLevel(targetid) == 0) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to arrest.");
if(IsSpawned[targetid] == false || IsFreezed[targetid] == true) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to arrest.");
if(GetPlayerWantedLevel(targetid) >= 4)
{
//rest of code
return 1;
}
}
}
return 1;
}
stock GetClosestPlayer(playerid, Float:dis)
{
new x, Float:dis2, player;
player = -1;
for (x = 0; x < MAX_PLAYERS; x++)
{
if(IsPlayerConnected(x) && GetPlayerState(x) != PLAYER_STATE_SPECTATING)
{
if(x != playerid)
{
dis2 = GetDistanceBetweenPlayers(x,playerid);
if(dis2 < dis && dis2 != -1.00)
{
dis = dis2;
player = x;
}
}
}
}
return player;
}
Thanks! I will, but first you should post how do you return GetDistanceBetweenPlayers function.
|
public Float:GetDistanceBetweenPlayers(p1,p2) //p1 stands for player1, and p2 for player2
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}
for(new i=0;i<MAX_PLAYERS;i++)
{
GetDistanceBetweenPlayers(playerid, i);
}
return 1;