here use this i find it more accurate.
SCAR Code:
function CompassRadialWalk(var P : TPoint; Color, StartRadial, EndRadial, SRadius, ERadius: Integer): Boolean;
var
i, xx, yy: Integer;
Add : Boolean;
begin
if (not(LoggedIn)) then exit;
if (SRadius < ERadius) then
Add := True;
if (StartRadial < EndRadial) then
begin
repeat
for i := StartRadial to EndRadial do
begin
if (not(LoggedIn)) then exit;
xx := Round(SRadius * Sin((Pi/180)* FixD(rs_GetCompassAngleDegrees + i)) + 646);
yy := Round(-SRadius * Cos((Pi/180)* FixD(rs_GetCompassAngleDegrees + i)) + 84);
if (FindColor(x, y, Color, xx, yy, xx + 1, yy + 1)) then
begin
P.x:= x;
P.y:= y;
Result := True;
Exit;
end;
end;
SRadius := SRadius - 4;
If (Add) then
SRadius := SRadius + 8;
until (InRange(SRadius, ERadius - 4, ERadius + 4));
end;
if (StartRadial > EndRadial) then
begin
repeat
for i := StartRadial downto EndRadial do
begin
if (not(LoggedIn)) then exit;
xx := Round(SRadius * Sin((Pi/180)* FixD(rs_GetCompassAngleDegrees + i)) + 646);
yy := Round(-SRadius * Cos((Pi/180)* FixD(rs_GetCompassAngleDegrees + i)) + 84);
if (FindColor(x, y, Color, xx, yy, xx + 1, yy + 1)) then
begin
P.x := x;
P.y := y;
Result := True;
Exit;
end;
end;
SRadius := SRadius - 4;
If (Add) then
SRadius := SRadius + 8;
until (InRange(SRadius, ERadius - 4, ERadius + 4));
end
end;