SRL Archive - Help and Support

Need help with a procedure


Infantry001

2007-02-18 20:57:58

I have this procedure to find an ore by dividing up the screen and looking for colors in the closest boxes near the middle. But i am having a bit of trouble, and i dont know why. If anyone can help me, ill PM you the code, since i dont want it getting outside. THanks in advance

Boreas

2007-02-18 22:25:24

This may help, I dunno

This divides minimap into boxes, and looks for yellow dots in them (then it determines which are the bankers in port phastmatys based on distances between the dots, but thats not important).

procedure findyellows (var fx, fy:integer; PointsToFind,width,basex,basey,endx,endy:integer);
var
box :array of ybox;
ypoint : array of tehpoint;
com:array [1..300] of combo;
x,d,e,f,i,g,nob,{gx,gy,}currentpoint,row,prow,col,nor,noc:integer;//var
//x,d,nob,gx,gy,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;
//noc:=round( (endx-basex)/width );
//nor:=round( (endy-basey)/width );

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;

{
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(gx,gy,195836,box[d].x1,box[d].y1,box[d].x2,box[d].y2) then
begin
ypoint[currentpoint].x :=gx;
ypoint[currentpoint].y :=gy;
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));

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 <6 ) 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>7 then
begin
fx:=com[e].x1;
fy:=com[e].y1;
end;
end;
until i=256;
end;
end;
until e=256;
end;

That may use some of the following, I don't remember and too tired to check
 {
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;
type tehpointfur = record
x,y,dist :integer;
active : boolean;
end;

Infantry001

2007-02-18 22:48:20

Can i send you what i have?

Boreas

2007-02-18 22:51:17

I'll pm you my email and msn (my inbox here is getting full), but I don't know if I'll have much time to look it over.

Infantry001

2007-02-18 23:09:23

alright my email/msn is [email]kkeyl@hotmail.com[/email]. and thanks in advance for w/e ur bound to help me with lol