GetDistanceToPlayer függvény is hiányzik.
Nekem ez foreach-al nemment jól, nemtom mér. ( FS-be )
Én így oldanám meg: 
forward ClosestPlayer(p1);
public ClosestPlayer(p1)
{
        new
   Float:dis = 99999.99,
   Float:dis2,
   Float:MyPos[6],
   playerid = INVALID_PLAYER_ID;
        foreach(Player, x)
{
   GetPlayerPos(playerid, MyPos[0], MyPos[1], MyPos[2]);
   GetPlayerPos(x, MyPos[3], MyPos[4], MyPos[5]);
   dis2 = GetDistance(MyPos[0], MyPos[1], MyPos[2], MyPos[3], MyPos[4], MyPos[5]);
            if (dis2 < dis && dis2 != -1.00)
            {
               dis = dis2;
                playerid = x;
            }
        }
        return playerid;
}
 GetDistance kell hozzá. 
#define GetDistance(%1,%2,%3,%4,%5,%6) floatadd(floatadd(floatsqroot(floatpower(floatsub(%1, %4), 2)), floatsqroot(floatpower(floatsub(%2, %5), 2))), floatsqroot(floatpower(floatsub(%3, %6), 2)))
[/code