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

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.


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.