SCAR Code:
program new;
{.include srl\srl.scar}
type ybox = record
x1,y1,x2,y2,cx,cy:integer;
active:boolean;
end;
type tehpoint = record
x,y :integer;
active : boolean;
end;
type combo = record
point1,point2,x1,y1,x2,y2,dist:integer;
active:boolean;
end;
var gx,gy:integer;
function findyellows (var fx, fy:integer; PointsToFind,width,basex,basey,endx,endy:integer):boolean;
var
box :array of ybox;
ypoint : array of tehpoint;
com:array [1..300] of combo;
x,d,e,f,i,g,nob,fyx,fyy,currentpoint,row,prow,col,nor,noc:integer;
begin
noc:=(( (endx-basex) - (width mod (endx-basex)))/width)+1;
nor:=(( (endy-basey) - (width mod (endy-basey)))/width)+1;
nob:=nor*noc;
setarraylength(box, ((nob)+2));
repeat
x:=x+1;
if ((x+noc) mod noc)>0 then
col:=((x+noc) mod noc);
if ((x+noc) mod noc) =0then
col:=noc;
prow:=0;
repeat
prow:=prow+1;
until ( x<=(noc*prow));
row:=prow;
box[x].x1:=(basex+ ((col-1)*width) );
box[x].x2:=(basex+(col*width));
box[x].y1:=(basey+ ((row-1)*width) );
box[x].y2:=(basey+(row*width));
box[x].cx:=round((box[x].x2+box[x].x1)/2);
box[x].cy:=round((box[x].y2+box[x].y1)/2);
box[x].active:=true;
{
//draws the boxes on paint
movemouse(box[x].x1,box[x].y1);
holdmouse(box[x].x1,box[x].y1,true);
movemouse(box[x].x2,box[x].y2);
releasemouse(box[x].x2,box[x].y2,true);
}
until x>=nob;
currentpoint:=1;
d:=0;
setarraylength(ypoint, pointstofind+1);
repeat
d:=d+1;
if (box[d].active) then
begin
if findcolor(fyx,fyy,195836,box[d].x1,box[d].y1,box[d].x2,box[d].y2) then
begin
ypoint[currentpoint].x :=fyx;
ypoint[currentpoint].y :=fyy;
currentpoint:=currentpoint+1;
box[d].active:=false;
end;
end;
until (( currentpoint= pointstofind)or (d=nob));
{
e:=0;
repeat
e:=e+1;
writeln(inttostr(ypoint[e].x)+' '+inttostr(ypoint[e].y));
if not((ypoint[e].x = 0) and (ypoint[e].y = 0)) then ypoint[e].active:=true;
until e=16;
writeln(' all points');}
e:=0;
repeat
f:=f+1;
g:=0;
repeat
g:=g+1;
e:=e+1;
//writeln(inttostr(f)+' '+inttostr(g)+' '+inttostr(e));
com[e].point1:=f;
com[e].point2:=g;
com[e].x1:=ypoint[f].x;
com[e].y1:=ypoint[f].y;
com[e].x2:=ypoint[g].x;
com[e].y2:=ypoint[g].y;
if not((com[e].x1=0) or (com[e].y1=0) or (com[e].x2=0) or (com[e].y2=0)) then com[e].active:=true;
until( (g=16) or (e=256));
until ((f=16) or (e=256));
/////////--------------------analysis------------------------------
{ port phasmatys/draynor banker configuration
port phasmatys:
x-random people outside bank
x...x......x...x - bankers
pair 1 pair 2
first eliminates dots more than 20 away (random people outside)
then finds 2 dots close (6) together, (pair 1 or 2)
then finds a dot more than 7 away (a banker in the other pair)
the last step is so that 2 people outside walking close together
won't be mistaken for a pair of bankers
draynor is the same except that the one pair is a single and
its vertical, but that doesn't matter
}
e:=0;
repeat
e:=e+1;
com[e].dist:=Round(Sqrt(Sqr(com[e].x1 - com[e].x2) + Sqr(com[e].y1 - com[e].y2)))
if ((com[e].dist=0) or (com[e].dist>20)) then com[e].active:=false;
i:=0;
repeat
i:=i+1;
if ((com[e].active) and (com[i].active))then
begin
if ((com[e].point1=com[i].point2)and (com[e].point2=com[i].point1)) then com[i].active:=false;
end;
until i=256;
if com[e].dist=1 then com[e].active:=false;
//if com[e].active then writeln(inttostr(com[e].point1)+' '+inttostr(com[e].point2)+' '+inttostr(com[e].dist));
until e=256;
e:=0;
repeat
e:=e+1;
if com[e].active then
begin
if (com[e].dist <5 ) then
begin
i:=0;
repeat
i:=i+1;
if ((com[i].point1=com[e].point1) or (com[i].point1=com[e].point2) or (com[i].point2=com[e].point1) or (com[i].point2=com[e].point2))then
begin
if com[i].dist>6 then
begin
fx:=com[e].x1;
fy:=com[e].y1;
result:=true;
end;
end;
until i=256;
end;
end;
until e=256;
/////////--------------------analysis end--------------------------
end;
begin
setupsrl;
repeat
wait(10);
until (FindSymbol(gx,gy,'bank'));
Mouse(gx,gy+5,0,0,True);
Flag;
//wait(500+random(500));
findyellows(gx,gy,16,5,590,30,700,120);
Mouse(gx,gy,0,0,True);
end.