Results 1 to 9 of 9

Thread: Procedure Problems

  1. #1
    Join Date
    Jun 2006
    Posts
    1,492
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default Procedure Problems

    I am making a script for the monk monastery near edgeville, and this little portion is meant to find which location you are closest to (Center, top left, or lower left), and search for a location to go to where there is a monk and no PlayerDot near the monk. I just can't get it to work, however. Can anyone provide a little help?

    SCAR Code:
    program SwitchSpotTest;

    type
      TDTMPoints = record
        MainPoint : TDTMPointDef;
        SubPoints : array [0..2] of TDTMPointDef;
    end;
    var
      MasterDTM : array [0..3] of TDTM;
      TDTMArray : array [0..3] of TDTMPoints;
      CenterDTM, ULDTM, LLDTM, LRDTM : integer;

    procedure AssembleDTM;
    var
      i,mark : integer;
    begin
      MarkTime(mark);

      TDTMArray[0].MainPoint.x := 652;
      TDTMArray[0].MainPoint.y := 81;
      TDTMArray[0].MainPoint.areasize := 1;
      TDTMArray[0].MainPoint.areashape := 0;
      TDTMArray[0].MainPoint.color := 0;
      TDTMArray[0].MainPoint.tolerance := 255;

      TDTMArray[0].Subpoints[0].x := 624;
      TDTMArray[0].Subpoints[0].y := 53;
      TDTMArray[0].Subpoints[0].areasize := 3;
      TDTMArray[0].Subpoints[0].areashape := 0;
      TDTMArray[0].Subpoints[0].color := RoadColor;
      TDTMArray[0].Subpoints[0].tolerance := 0;

      TDTMArray[0].Subpoints[1].x := 675;
      TDTMArray[0].Subpoints[1].y := 52;
      TDTMArray[0].Subpoints[1].areasize := 3;
      TDTMArray[0].Subpoints[1].areashape := 0;
      TDTMArray[0].Subpoints[1].color := RoadColor;
      TDTMArray[0].Subpoints[1].tolerance := 0;

      TDTMArray[0].Subpoints[2].x := 623;
      TDTMArray[0].Subpoints[2].y := 103;
      TDTMArray[0].Subpoints[2].areasize := 3;
      TDTMArray[0].Subpoints[2].areashape := 0;
      TDTMArray[0].Subpoints[2].color := RoadColor;
      TDTMArray[0].Subpoints[2].tolerance := 0;

      TDTMArray[1].MainPoint.x := 624;
      TDTMArray[1].MainPoint.y := 52;
      TDTMArray[1].MainPoint.areasize := 1;
      TDTMArray[1].MainPoint.areashape := 0;
      TDTMArray[1].MainPoint.color := RoadColor;
      TDTMArray[1].MainPoint.tolerance := 0;

      TDTMArray[1].Subpoints[0].x := 676;
      TDTMArray[1].Subpoints[0].y := 53;
      TDTMArray[1].Subpoints[0].areasize := 3;
      TDTMArray[1].Subpoints[0].areashape := 0;
      TDTMArray[1].Subpoints[0].color := RoadColor;
      TDTMArray[1].Subpoints[0].tolerance := 0;

      TDTMArray[1].Subpoints[1].x := 623;
      TDTMArray[1].Subpoints[1].y := 104;
      TDTMArray[1].Subpoints[1].areasize := 3;
      TDTMArray[1].Subpoints[1].areashape := 0;
      TDTMArray[1].Subpoints[1].color := RoadColor;
      TDTMArray[1].Subpoints[1].tolerance := 0;

      TDTMArray[1].Subpoints[2].x := 678;
      TDTMArray[1].Subpoints[2].y := 105;
      TDTMArray[1].Subpoints[2].areasize := 3;
      TDTMArray[1].Subpoints[2].areashape := 0;
      TDTMArray[1].Subpoints[2].color := RoadColor;
      TDTMArray[1].Subpoints[2].tolerance := 0;

      TDTMArray[2].MainPoint.x := 623;
      TDTMArray[2].MainPoint.y := 106;
      TDTMArray[2].MainPoint.areasize := 1;
      TDTMArray[2].MainPoint.areashape := 0;
      TDTMArray[2].MainPoint.color := RoadColor;
      TDTMArray[2].MainPoint.tolerance := 0;

      TDTMArray[2].Subpoints[0].x := 622;
      TDTMArray[2].Subpoints[0].y := 54;
      TDTMArray[2].Subpoints[0].areasize := 3;
      TDTMArray[2].Subpoints[0].areashape := 0;
      TDTMArray[2].Subpoints[0].color := RoadColor;
      TDTMArray[2].Subpoints[0].tolerance := 0;

      TDTMArray[2].Subpoints[1].x := 677;
      TDTMArray[2].Subpoints[1].y := 51;
      TDTMArray[2].Subpoints[1].areasize := 3;
      TDTMArray[2].Subpoints[1].areashape := 0;
      TDTMArray[2].Subpoints[1].color := RoadColor;
      TDTMArray[2].Subpoints[1].tolerance := 0;

      TDTMArray[2].Subpoints[2].x := 677;
      TDTMArray[2].Subpoints[2].y := 106;
      TDTMArray[2].Subpoints[2].areasize := 3;
      TDTMArray[2].Subpoints[2].areashape := 0;
      TDTMArray[2].Subpoints[2].color := RoadColor;
      TDTMArray[2].Subpoints[2].tolerance := 0;

      TDTMArray[3].MainPoint.x := 676;
      TDTMArray[3].MainPoint.y := 106;
      TDTMArray[3].MainPoint.areasize := 1;
      TDTMArray[3].MainPoint.areashape := 0;
      TDTMArray[3].MainPoint.color := RoadColor;
      TDTMArray[3].MainPoint.tolerance := 0;

      TDTMArray[3].Subpoints[0].x := 674;
      TDTMArray[3].Subpoints[0].y := 51;
      TDTMArray[3].Subpoints[0].areasize := 3;
      TDTMArray[3].Subpoints[0].areashape := 0;
      TDTMArray[3].Subpoints[0].color := RoadColor;
      TDTMArray[3].Subpoints[0].tolerance := 0;

      TDTMArray[3].Subpoints[1].x := 624;
      TDTMArray[3].Subpoints[1].y := 51;
      TDTMArray[3].Subpoints[1].areasize := 3;
      TDTMArray[3].Subpoints[1].areashape := 0;
      TDTMArray[3].Subpoints[1].color := RoadColor;
      TDTMArray[3].Subpoints[1].tolerance := 0;

      TDTMArray[3].Subpoints[2].x := 622;
      TDTMArray[3].Subpoints[2].y := 104;
      TDTMArray[3].Subpoints[2].areasize := 3;
      TDTMArray[3].Subpoints[2].areashape := 0;
      TDTMArray[3].Subpoints[2].color := RoadColor;
      TDTMArray[3].Subpoints[2].tolerance := 0;

      for i := 0 to 3 do
      begin
        MasterDTM[i].MainPoint := TDTMArray[i].MainPoint;
        MasterDTM[i].Subpoints := TDTMArray[i].Subpoints;
        Case i of
        0: CenterDTM := AddDTM(MasterDTM[i]);
        1: ULDTM := AddDTM(MasterDTM[i]);
        2: LLDTM := AddDTM(MasterDTM[i]);
        3: LRDTM := AddDTM(MasterDTM[i]);
        end;
      end;

      Writeln('AssembleDTM took '+IntToStr(TimeFromMark(mark))+' msecs');
    end;

    {*******************************************************************************
    function ClosestCoords(var returncoords : TPoint; origincoords : TPoint;
             numbers : TPointArray) : integer;
    By: Infantry001
    Description: ReturnCoords is the TPoint from Numbers that is closest to the
    origincoords. Returns array number of the closest point.
    *******************************************************************************}

    function ClosestCoords(var returncoords : TPoint; origincoords : TPoint; numbers : TPointArray) : integer;
    var
      i,Closest,temp : integer;
    begin
      Closest := 1000;
      for i := 0 to getarraylength(numbers) - 1 do
      begin
        if (Distance(OriginCoords.x,OriginCoords.y,Numbers[i].x,Numbers[i].y) < closest) then
        begin
          result := i;
          returncoords.x := Numbers[i].x;
          returncoords.y := Numbers[i].y;
          Closest := Distance(OriginCoords.x,OriginCoords.y,Numbers[i].x,Numbers[i].y);
        end;
      end;
      writeln('Closest coords are '+IntToStr(returncoords.x)+','+IntToStr(returncoords.x));
    end;

    function SwitchSpot : boolean;
    var
      i,Closest,spread : integer;
      iX,iY,yX,yY,wX,wY : integer;
      angle : extended;
      TPT : array [0..2] of TPoint;
      Click,MMC : TPoint;
    begin
      writeln('Switching spots');
      if not LoggedIn then exit;
      for i := 0 to 2 do
      begin
        Case i of
        0: if FindDTMRotated(CenterDTM,iX,iY,MMX1,MMY1,MMX2,MMY2,Radians(-20),
              Radians(20),0.005,angle) then
           begin
             writeln('Found '+IntToStr(i)+' dtm');
             TPT[i].x := iX;
             TPT[i].y := iY;
           end;
        1: if FindDTMRotated(ULDTM,iX,iY,MMX1,MMY1,MMX2,MMY2,Radians(-20),
              Radians(20),0.005,angle) then
           begin
             writeln('Found '+IntToStr(i)+' dtm');
             TPT[i].x := iX;
             TPT[i].y := iY;
           end;
        2: if FindDTMRotated(LLDTM,iX,iY,MMX1,MMY1,MMX2,MMY2,Radians(-20),
              Radians(20),0.005,angle) then
           begin
             writeln('Found '+IntToStr(i)+' dtm');
             TPT[i].x := iX;
             TPT[i].y := iY;
           end;
        end;
        Wait(5);
      end;
      MMC.x := MMCX;
      MMC.y := MMCY;
      Closest := ClosestCoords(Click,MMC,TPT);
      for i := 0 to 2 do
      begin
        if i <> closest then
        begin
          repeat
            if FindColorSpiralTolerance(yX,yY,195836,TPT[i].x - spread,
               TPT[i].y - spread,TPT[i].x + spread,TPT[i].y + spread,7) then
            begin
              if FindColorSpiralTolerance(wX,wY,16777215,yx - 2,yy - 2,yx + 2,yy + 2,3) then
              begin
                writeln('Player fighting Monk');
                result := false;
                break;
              end else
              begin
                MouseFlag(yX,yY,3,3);
                result := true;
                break;
              end;
            end else
            begin
              if spread > 15 then
              begin
                writeln('No monk in DTM'+IntToStr(i));
                result := false;
                break;
              end;
              spread := spread + 5;
            end;
            Wait(5);
          until(result or (spread > 15))
        end;
        Wait(5);
      end;
      if not Result then writeln('Fightable Monks not found') else
      writeln('SwitchSpot returns true');
    end;

    begin
      SwitchSpot;
    end.

  2. #2
    Join Date
    Jan 2007
    Location
    Illinois.. >.<
    Posts
    1,158
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    You could do something like this..
    Code:
    //ALL CREDS TO BOREAS
    function FindAllBitmapsIn(TheBmp,startx,starty,endx,endy:integer):array of tpoint;
    var tmpbool:boolean;
    AL:integer;
    curx,cury,tmpx,tmpy,height:integer;
    begin
      tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,starty,endx,endy);
      if tmpbool then
      begin
        curx:=startx;
        cury:=starty;
        /////auto height finder///////
        tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,starty,endx,endy);
        height:=0;
        repeat
          height:=height+1;
          tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,tmpy,endx,tmpy+height);
        until tmpbool;
        //writeln('height '+inttostr(height));
        ///////////
        repeat
          tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,curx,cury,endx,cury+height);
          if tmpbool then
          begin
            curx:=tmpx+1;
            AL:=getarraylength(result);
            setarraylength(result,AL+1);
            result[AL].x:=tmpx;
            result[AL].y:=tmpy;
          end;
          if not tmpbool then
          begin
            curx:=startx;
            cury:=cury+1;
          end;
        until cury=endy+1;
      end;
    end;
    
    
     Function CountPeople:Integer; 
    var People:array of Tpoint;
    var Count:integer;
    begin
      People := (FindAllBitmapsIn(PeopleDot, 521,3,761,173));
      Count := getarraylength(People);
      Result := Count;
     writeln('Found '+IntToStr(getarraylength(People))+' People.');
      setarraylength(People,0);
    
    end;
    
    Begin
      PeopleDot := BitmapFromString(4, 5, 'z78DA3330000137570434C010' +
           '8140576710C41471310241B026435723107436054188880102182' +
           '28B0000E71C1BCB');
      If CountPeople > 1 then
      begin
        MouseFlag(yX,yY,3,3);
        result := true;
        break;
      end;
    end.
    I dont know how well that would work though...

  3. #3
    Join Date
    Jun 2006
    Posts
    1,492
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    No, Im trying to get around in the monastery. But, i think that may help me a bit. THanks

  4. #4
    Join Date
    Jan 2007
    Location
    Illinois.. >.<
    Posts
    1,158
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    oh.. sorry about that. Misread it..

  5. #5
    Join Date
    Jun 2006
    Posts
    1,492
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Nah actually, that will help me. Thanks! Boreas explained it a bit better for me =)

  6. #6
    Join Date
    Dec 2006
    Location
    Houston, TX USA
    Posts
    4,791
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Um, what isn't working, and are you using this for area detection?

    If it's area detection then you can use something like CountColor or ScanMiniMap.

    But It looks ok, maybe you just need to tweak your DTM?

  7. #7
    Join Date
    Nov 2006
    Location
    NSW, Australia
    Posts
    3,487
    Mentioned
    1 Post(s)
    Quoted
    0 Post(s)

    Default

    Infintry asking for help?!

    Why you stop selling your script though?
    [CENTER][img]http://signatures.mylivesignature.com/54486/113/4539C8FAAF3EAB109A3CC1811EF0941B.png[/img][/CENTER]
    [CENTER][BANANA]TSN ~ Vacation! ~ says :I Love Santy[/BANANA][/CENTER]

    [CENTER][BANANA]Raymond - Oh rilie? says :Your smart[/BANANA][/CENTER]

  8. #8
    Join Date
    May 2007
    Posts
    468
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    hehe, lol
    Originally Posted by YoHoJo
    I like hentai.

  9. #9
    Join Date
    Jun 2006
    Posts
    1,492
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Haha, I was overcomplicating things, sorta like Boreas (jk!). Except, this time, it was him who simplified it =P

    Stopped selling my miner cuz I couldnt handle being a buisnessman. Too much work trying to help out the newbs to scar.

    EDIT: Cant use itschris/boreas's suggestions. There are too many other npc dots to filter out. Im pretty sure the logic works on my procedure. I just cant figure out why It doesn't work.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Chopping procedure problems
    By klinnks in forum OSR Help
    Replies: 1
    Last Post: 05-19-2008, 06:08 PM
  2. Procedure TypeSendRandom & Procedure AutoResponder!
    By Ultra in forum Research & Development Lounge
    Replies: 12
    Last Post: 01-08-2008, 07:04 PM
  3. Replies: 8
    Last Post: 05-24-2007, 11:57 PM
  4. Procedure that calls random procedure?
    By Secet in forum OSR Help
    Replies: 2
    Last Post: 03-03-2007, 03:56 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •