SRL Archive - Senior Scripts and Snippets

FindCrowdedSymbol


Boreas

2007-08-12 23:31:28

program New;
{.include srl/srl.scar}

function InIntArray(TheInt:integer;TheArray:array of integer):boolean;
var i:integer;
begin
repeat
if TheArray[i]=TheInt then
result:=true;
i:=i+1;
until ((i=getarraylength(TheArray)) or (result));
end;

procedure RemoveFromTPA(Index:integer; var TPA:array of tpoint);
var swapTP:tpoint;
AL:integer;
begin
AL:=getarraylength(TPA);
swapTP:=TPA[AL-1];
TPA[AL-1]:=TPA[Index];
TPA[Index]:=swapTP;
setarraylength(TPA,AL-1);
end;
procedure CrowdedWait;
var tmpx1,tmpy1,i:integer;
begin
case random(2) of
1: begin
gametab(2);
i:=random(23);
Tmpx1:=547+(((((i)+2)mod 3))*(611-547));
Tmpy1:=207+(((((i)-1)/3))*(238-207));
MMouse(Tmpx1+random(63),Tmpy1+random(30),0,0);
end;
0:
begin
gametab(5);
Mouse(592,415,random(32),random(32),true);
end;
end;
end;

function EYCScreen:boolean;
var EYCDTM,tmpx,tmpy:integer;
begin
EYCDTM := DTMFromString('78DA635464606050664001FF67C8836946289' +
'F518648353A04D42812A1C69908BBDC8830C783B03900F9410E64' +
'');
result:= FindDTM(EYCDTM,tmpx,tmpy,26,34,184,50);
end;
procedure CloseEYC;
begin
if EYCScreen then
Mouse(478+random(15),34+random(15),0,0,true);
end;

type ColorTPA = record
color:integer;
tpa: array of tpoint;
end;
function FindCrowdedSymbol(var mx, my:integer; Symbol:string;Tries:integer):boolean;
var
PlayerDotCTPA:array of ColorTPA;
client,Tried,tab,parray,parray2,tx,ty,t,tmpcolor,mmbmp,dropdot,AL,PointsLeft:integer;
ColorArray: array of integer;
tmpbool:boolean;

begin
tab:= GetCurrentTab;
MMbmp:=BitmapFromString(mmx2-mmx1,mmy2-mmy1,'');
setarraylength(colorarray,6);
ColorArray[0]:=16711422;
ColorArray[1]:=15527148;
ColorArray[2]:=13816530;
ColorArray[3]:=14869218;
ColorArray[4]:=12961221;
ColorArray[5]:=65536;

repeat
t:=getsystemtime;
result := FindSymbol(mx,my,Symbol);
if result then
exit;
dropdot:= DTMFromString('78DA6354666060606340012FA134238C56021' +
'2ECA86A3EA2AB5104121CA86A6EA2AB51C634E71C921A66200600' +
'386A0432');
setarraylength(colorarray,6);
if FindDTM(dropdot,tx,ty,mmx1,mmy1,mmx2,mmy2)then
begin
setarraylength(colorarray,18);
ColorArray[6]:=getcolor(tx,ty);
ColorArray[7]:=getcolor(tx,ty+1);
ColorArray[8]:=getcolor(tx-1,ty-1);
ColorArray[9]:=getcolor(tx-1,ty);
ColorArray[10]:=getcolor(tx-1,ty+1);
ColorArray[11]:=getcolor(tx-1,ty+2);
ColorArray[12]:=getcolor(tx-2,ty-1);
ColorArray[13]:=getcolor(tx-2,ty);
ColorArray[14]:=getcolor(tx-2,ty+1);
ColorArray[15]:=getcolor(tx-2,ty+2);
ColorArray[16]:=getcolor(tx-3,ty);
ColorArray[17]:=getcolor(tx-3,ty+1);
end;
freedtm(dropdot);
CopyClientToBitmap(MMbmp,mmx1,mmy1,mmx2,mmy2);
AL:=getarraylength(colorarray);
setarraylength(PlayerDotCTPA,AL);
for parray:=0 to AL-1 do
begin
PlayerDotCTPA[parray].color:=colorarray[parray];
FindColorsSpiralTolerance(mmcx,mmcy,PlayerDotCTPA[parray].tpa,
PlayerDotCTPA[parray].color,mmx1,mmy1,mmx2,mmy2,0);
end;
CrowdedWait;
repeat
for parray:=0 to AL-1 do
begin
for parray2:=0 to getarraylength(PlayerDotCTPA[parray].tpa)-1 do
begin
tmpcolor:=getcolor(PlayerDotCTPA[parray].tpa[parray2].x,PlayerDotCTPA[parray].tpa[parray2].y);
if not(InIntArray(tmpcolor,ColorArray)) then
begin
FastSetPixel(mmbmp,PlayerDotCTPA[parray].tpa[parray2].x-mmx1,PlayerDotCTPA[parray].tpa[parray2].y-mmy1,tmpcolor);
RemoveFromTPA(parray2,PlayerDotCTPA[parray].tpa);
end;
end;
end;
PointsLeft:=0;
for parray:=0 to AL-1 do
begin
PointsLeft:=PointsLeft+getarraylength(PlayerDotCTPA[parray].tpa);
end;

begin
client:= GetClientWindowHandle;
SetTargetBitmap(mmbmp);
tmpbool:=FindSymbolIn(tx,ty,'bank',0,0,mmx2-mmx1,mmy2-mmy1);
SetClientWindowHandle(client);
end;
// writeln('points '+inttostr(pointsleft));
until (tmpbool or ((getsystemtime-t)>60000) or (PointsLeft<10));
if tmpbool then
begin
//writeln('symbol found on try '+inttostr(Tried)+' in '+inttostr(getsystemtime-t)+'ms');
result:=true;
mx:=tx+mmx1;
my:=ty+mmy1;
gametab(tab);
Freebitmap(mmbmp);
exit;
end;
Tried:=Tried+1;
//writeln('trying again try '+inttostr(Tried));
CloseEYC;
logout;
loginplayer;
until Tried>Tries;
result:=false;
mx:=0;
my:=0;
gametab(tab);
Freebitmap(mmbmp);
end;

var myx,myy:integer;
begin
setupsrl;
setarraylength(players,1);
Players[0].name:='';
Players[0].pass:='';
Players[0].nick:='';
Players[0].active:=true;
loginplayer
FindCrowdedSymbol(myx,myy,'bank',3);
writeln(inttostr(myx)+' '+inttostr(myy));
end.

Fill in user details at the bottom, try it where bank symbol is visible, where its lil covered, where its really covered, and where it isn't there at all.


Do I need to add anything to CrowdedWait?
Do I need to call CrowdedWait more than once per try?
Do I need to change anything else?

Pyro

2007-08-13 06:01:26

Thats a bit hard out for such a simple thing. Why not just lower symbol accuracy by 0.1 each loop till you find it?

Boreas

2007-08-13 07:47:00

Because sometimes that doesn't work or it gives false positives.

Wizzup?

2007-08-13 09:44:55

Great!