PDA

View Full Version : Is it just me?



Boreas
10-25-2006, 04:11 PM
Edit: Nevermind. Fixed. I read the error messages more closely, some of them mentioned the quiz.dll plugin (I assumed all of them where about the mouse pointer message). So I replaced it with a copy of the one in 'place in plugins folder' and now it works. Still don't know how it got corrupted though, or why it only affected one script.

Edit 2: The above was wrong. It worked for a bit then didn't again. I tried several times chaning different things each time to find what the problem wasn't. Eventually, I found that making it a function is bad. So I put it back to a procedure with a global var and all was well. No clue why making it a functin did that tho.


When I run this script it makes scar go crazy and I have to close it with taskmanager. Does the same happen to you?

Close/save all other scar windows, open task manager just in case.
Be within view of the draynor or port phasmatys bank symbol.
Set cross hairs and run

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.


For me, it clicks the banksymbol (unless there are too many people on it, then I have to rotate compass manually, havent coded that in yet), then clicks the banker dot and gets real close to the bank booth, just like it should, but after executing, it says theres a mouse error. Other scripts that use the same mouse procedure (mouse) don't do this to me. Also, it doesn't do this right after mouse is used, only after the script finishes. Even weirder, it didn't do this yesterday (I don't remember what I changed, if anything, since then).

If this doesn't happen for anyone else I'll try reinstalling scar. If it does, I don't know what's wrong with the script.




Thanks for your help.