public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_LOOK_BEHIND) && !(oldkeys & KEY_LOOK_BEHIND))
{
if(PlayerTeam[playerid] == TEAM_CIV && AdminDuty[playerid] == false)
{
if(PlayerInfo[playerid][pSkill] == 1)
{
new targetid = GetClosestPlayer(playerid, 7.0);
if(IsKidnapped[playerid] == 1 && Spawned[playerid] == 0) return 1;
if(targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to rape.");
//if(GetPlayerWantedLevel(targetid) == 0) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to rape.");
if(Spawned[targetid] == 0 || Freezed[targetid] == 1) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[Error:] {FFFFFF}There are no players close enough to rape.");
if(ArrestCuffed[targetid] == 1) return SendClientMessage(playerid, COLOR_RED, "You cannot rape cuffed players.");
}
}
}
return 1;
}
stock Float:GetDistanceBetweenPlayers(p1,p2)
{
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));
}
stock GetClosestPlayer(playerid, Float:dis)
{
new x, Float:dis2, player;
player = -1;
for (x = 0; x < MAX_PLAYERS; x++)
{
if(IsPlayerConnected(x) && x != playerid && GetPlayerState(x) != PLAYER_STATE_SPECTATING)
{
dis2 = GetDistanceBetweenPlayers(x,playerid);
if(dis2 < dis && dis2 != -1.00)
{
dis = dis2;
player = x;
}
}
}
return player;
}
Are you sure that you use those 2 together? If there isn't any player closer, GetClosestPlayer returns -1 and not INVALID_PLAYER_ID (65535) that you check later.
|
What do u mean by "2 together" ?
And i tried the problem in 2 cases: 1. Only me in the server. 2. More than 1 player in the server. #Same_Problem! |
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.9;
new id = -1;
foreach(Player,i)
{
if(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;
break;
}
}
}
return id;
}
stock Float:GetDistanceBetweenPlayers(p1, p2)
{
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)) return -1.00;
new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2;
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));
}
stock GetClosestPlayer(playerid, Float:dis)
{
new Float:dis2, player = INVALID_PLAYER_ID;
for(new x = 0; x < MAX_PLAYERS; x++)
{
if(!IsPlayerConnected(x)) continue;
if(x == playerid) continue;
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING) continue;
dis2 = GetDistanceBetweenPlayers(x,playerid);
if(dis2 < dis && dis2 != -1.00)
{
dis = dis2;
player = x;
}
}
return player;
}