SRL Archive - Help

Struggling with ATPA -> Object Finding


Eduard

2012-12-31 14:27:14

Hello guys,

I'm not actually struggling, just want to know what the standards are for TPA handling. I'm an C++ programmer but I haven't been programming in SRL for 4 years or something.

Here's my current code, (it works), except the IsTextUp(), could u please command if you like this code and what you like/do different.

Thanks,

Eduard


program TPAlumbridgeFindingAdvanced;
{$Define SMART8}
{$include SRL/SRL.simba}

const
LumbridgeSageHue = 0.21;
LumbridgeSageSat = 2.01;
LumbridgeSageTol = 5;
LumbridgeSageCol = 9796945;

LumbridgeSageHairHue = 0.09;
LumbridgeSageHairSat = 0.93;
LumbridgeSageHairTol = 12;
LumbridgeSageHairCol = 12898260;

procedure FindLumbridgeSage;
var
LumbridgeSageATPA: T2DPointArray;
LumbridgeSageTPA: TPointArray;
LumbridgeSageHairTPA: TPointArray;
LumbridgeSageBox: TBox;
z, x, y, i, tmpCTS: integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(LumbridgeSageHue, LumbridgeSageSat);
if (FindColorsTolerance(LumbridgeSageTPA, LumbridgeSageCol, MSX1, MSY1, MSX2, MSY2, LumbridgeSageTol)) then
begin
LumbridgeSageATPA := SplitTPAex(LumbridgeSageTPA, 20, 20);
SortATPASize(LumbridgeSageATPA, true);
for i := 0 to High(LumbridgeSageATPA) do
begin
LumbridgeSageBox := GetTPABounds(LumbridgeSageATPA[i]);
SetToleranceSpeed2Modifiers(LumbridgeSageHairHue, LumbridgeSageHairSat);
if (FindColorsTolerance(LumbridgeSageHairTPA, LumbridgeSageHairCol, LumbridgeSageBox.x1, LumbridgeSageBox.y1, LumbridgeSageBox.x2, LumbridgeSageBox.y2,LumbridgeSageHairTol)) then
begin
for z:= 0 to High(LumbridgeSagehairTPA) do
begin
MMouse(LumbridgeSageHairTPA[z].x, LumbridgeSageHairTPA[z].y, 1, 1);
end;
end;
end;
end;
SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);
end;


begin
SetupSRL;
FindLumbridgeSage;
end.

Gucci

2012-12-31 14:39:35

I may be wrong but I don't think you need these at the end:

  SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);

Overall looks pretty good to me.

I would do it as a function but that's just me, something like:

function FindLumbridgeSage(x, y: integer): Boolean;
var
LumbridgeSageATPA: T2DPointArray;
LumbridgeSageTPA: TPointArray;
LumbridgeSageHairTPA: TPointArray;
LumbridgeSageBox: TBox;
z, i, tmpCTS: integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(LumbridgeSageHue, LumbridgeSageSat);
if (FindColorsTolerance(LumbridgeSageTPA, LumbridgeSageCol, MSX1, MSY1, MSX2, MSY2, LumbridgeSageTol)) then
begin
LumbridgeSageATPA := SplitTPAex(LumbridgeSageTPA, 20, 20);
SortATPASize(LumbridgeSageATPA, true);
for i := 0 to High(LumbridgeSageATPA) do
begin
LumbridgeSageBox := GetTPABounds(LumbridgeSageATPA[i]);
SetToleranceSpeed2Modifiers(LumbridgeSageHairHue, LumbridgeSageHairSat);
if (FindColorsTolerance(LumbridgeSageHairTPA, LumbridgeSageHairCol, LumbridgeSageBox.x1, LumbridgeSageBox.y1, LumbridgeSageBox.x2, LumbridgeSageBox.y2,LumbridgeSageHairTol)) then
begin
for z:= 0 to High(LumbridgeSagehairTPA) do
begin
MMouse(LumbridgeSageHairTPA[z].x, LumbridgeSageHairTPA[z].y, 1, 1);
if IsUpTextMultiCustom() then
begin
Result := True;
GetMousePos(x, y);
Break;
end;
end;
end;
end;
end;
SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);
end;

Brandon

2012-12-31 14:43:33

Yes. Use SplitATPAExWrap instead.
Instead of using High(…) in the loops, try storing it in a variable first..

SetToleranceSpeed2Modifiers(0.02, 0.02); should be 0.2, 0.2 no?

And after you mouse to the position, check some uptext and if it is correct, set everything back to normal, click the position, and break out of the loop.

Eduard

2012-12-31 14:55:02

Update:

Will look into posts after this (read post after updating so don't think I ignored your comments :)!)


program TPAlumbridgeFindingAdvanced;
{$Define SMART8}
{$include SRL/SRL.simba}
{$include SRL/SRl/misc/debug.simba}
{$include SRl/SRL/misc/SmartGraphics.simba}

const
LumbridgeSageHue = 0.21;
LumbridgeSageSat = 2.01;
LumbridgeSageTol = 5;
LumbridgeSageCol = 9796945;

LumbridgeSageHairHue = 0.09;
LumbridgeSageHairSat = 0.93;
LumbridgeSageHairTol = 12;
LumbridgeSageHairCol = 12898260;

procedure FindLumbridgeSage;
var
LumbridgeSageATPA: T2DPointArray;
LumbridgeSageTPA: TPointArray;
LumbridgeSageHairTPA: TPointArray;
LumbridgeSageBox: TBox;
notfound, attempts, z, x, y, i, tmpCTS: integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(LumbridgeSageHue, LumbridgeSageSat);
if (FindColorsTolerance(LumbridgeSageTPA, LumbridgeSageCol, MSX1, MSY1, MSX2, MSY2, LumbridgeSageTol)) then
begin
LumbridgeSageATPA := SplitTPAex(LumbridgeSageTPA, 20, 20);
SortATPASize(LumbridgeSageATPA, true);
for i := 0 to High(LumbridgeSageATPA) do
begin
LumbridgeSageBox := GetTPABounds(LumbridgeSageATPA[i]);
Smart_DrawBoxEx(false,false,LumbridgeSageBox,clred);
SetToleranceSpeed2Modifiers(LumbridgeSageHairHue, LumbridgeSageHairSat);
if (FindColorsTolerance(LumbridgeSageHairTPA, LumbridgeSageHairCol, LumbridgeSageBox.x1, LumbridgeSageBox.y1, LumbridgeSageBox.x2, LumbridgeSageBox.y2, LumbridgeSageHairTol)) then
begin
for z := 0 to High(LumbridgeSagehairTPA) do
begin
MMouse(LumbridgeSageHairTPA[z].x, LumbridgeSageHairTPA[z].y, 1, 1);
Smart_DrawDot(false,LumbridgeSageHairTPA[z],clblue);
wait(10);
if (not (IsUpText('umbridge'))) then
begin
Inc(notfound);
end;
Inc(attempts);
end;
end;
end;
end;
writeln('Tried:' + (inttostr(attempts)) + ' failed:' + inttostr(notfound) + '');
SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);
end;

begin
SetupSRL;
FindLumbridgeSage;
end.

Eduard

2012-12-31 15:16:53

Finally adjusting with your comments (except storing High(); into variable first):


program TPAlumbridgeFindingAdvanced;
{$Define SMART8}
{$include SRL/SRL.simba}
{$include SRL/SRl/misc/debug.simba}
{$include SRl/SRL/misc/SmartGraphics.simba}

var
SageLocation: TPoint;

const
LumbridgeSageHue = 0.21;
LumbridgeSageSat = 2.01;
LumbridgeSageTol = 5;
LumbridgeSageCol = 9796945;
LumbridgeSageHairHue = 0.09;
LumbridgeSageHairSat = 0.93;
LumbridgeSageHairTol = 12;
LumbridgeSageHairCol = 12898260;

function FindLumbridgeSage: TPoint;
var
LumbridgeSageATPA: T2DPointArray;
LumbridgeSageTPA: TPointArray;
LumbridgeSageHairTPA: TPointArray;
LumbridgeSageBox: TBox;
notfound, attempts, z, x, y, i, tmpCTS: integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(LumbridgeSageHue, LumbridgeSageSat);
if (FindColorsTolerance(LumbridgeSageTPA, LumbridgeSageCol, MSX1, MSY1, MSX2, MSY2, LumbridgeSageTol)) then
begin
SplitTPAExWrap(LumbridgeSageTPA, 20, 20, LumbridgeSageATPA);
SortATPASize(LumbridgeSageATPA, true);
for i := 0 to High(LumbridgeSageATPA) do
begin
LumbridgeSageBox := GetTPABounds(LumbridgeSageATPA[i]);
Smart_DrawBoxEx(false, false, LumbridgeSageBox, clred);
SetToleranceSpeed2Modifiers(LumbridgeSageHairHue, LumbridgeSageHairSat);
if (FindColorsTolerance(LumbridgeSageHairTPA, LumbridgeSageHairCol, LumbridgeSageBox.x1, LumbridgeSageBox.y1, LumbridgeSageBox.x2, LumbridgeSageBox.y2, LumbridgeSageHairTol)) then
begin
for z := 0 to High(LumbridgeSagehairTPA) do
begin
MMouse(LumbridgeSageHairTPA[z].x, LumbridgeSageHairTPA[z].y, 1, 1);
Smart_DrawDot(false, LumbridgeSageHairTPA[z], clblue);
wait(10);
if ((IsUpText('umbridge'))) then
begin
result := Point(LumbridgeSageHairTPA[z].x, LumbridgeSageHairTPA[z].y);
break;
end;
Inc(attempts);
end;
end;
end;
end;
writeln('Tried: ' + (inttostr(attempts)) + ' times before finding him.');
SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.2, 0.2);
end;

begin
SetupSRL;
Smart_ClearCanvas;
SageLocation := FindLumbridgeSage;
writeln('Location of LumbridgeSage X:' + IntToStr(SageLocation.x) + ' ' + IntToStr(SageLocation.y));
Mouse(SageLocation.x, SageLocation.y, 1, 1, 1);
end.