Das ist schonmal overpfui!
Wie gesagt nur 1 mal abfragen. Ausserdem wundert mich das hier sehr:
if(isPlayerMedic(playerid,3))
if(isPlayerMedic(playerid,1))
Also deine Lösung zu deinem problem ist einfach:
Du musst nicht viele male Duty hintereinander abfragen, sondern die IsPlayerInRangeOfPoint fkt.
Zu deiner verwunderung habe nur was versucht und bei isplayermedic gelassen
if(isPlayerMedic(playerid,3))
stock isPlayerMedic(playerid,frakid)
{
if(GetPVarInt(playerid,"Fraktion")==frakid)return 1;
return 0;
}