Results 1 to 3 of 3

Thread: Walking Procedure Help Pls

  1. #1
    Join Date
    Nov 2007
    Posts
    437
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default Walking Procedure Help Pls

    I wrote a procedure to get from Varrock West Mine to Varrock West Bank and I would appreciate any tips on how to improve, add failsafes, make it not suck so much. I have tested it several times and it works quite nicely but any help would be appreciated. The first function is just one you need for the procedure. Here it is:

    SCAR Code:
    function FindMineSymbol : Boolean;
    begin
      Writeln('Searching For Mine Symbol...');
      Wait(600+random(100));
      //AntiRandom;
      i := 0;
      SymbolAccuracy := 0.5;
      if not LoggedIn then Exit;
      repeat
        Wait(300+random(100));
        i := i+1;
        if (FindSymbol(x, y, 'mining site')) then
        begin
          Writeln('Found Mine Symbol');
          Players[CurrentPlayer].Loc := 'Mine';
          Mouse(x, y, 3, 3, True);
          FFlag(10);
          SymbolAccuracy := 0.8;
          Result := True;
        end else
        begin
          if (i >= 3) then
          begin
            SymbolAccuracy := 0.8;
            Players[CurrentPlayer].Loc := 'Lost';
            Writeln('Could Not Find Mine Symbol');
            NextPlayer(False);
            //EndScript;
          end;
        end;
      until(i >= 3);
    end;

    procedure WalkToBank;
    var
      MineToBank1DTM, MineToBank2DTM, MineToBank3DTM : Integer;
    begin
      if not LoggedIn then Exit;
      //AntiRandom;
      MakeCompass('N');
      SetAngle(True);
      Writeln('Walking To Bank...');
      for i := 6 to 10 do
      begin
        WalkCounter[i] := 0;
      end;

      if not LoggedIn then Exit;
      MineToBank1DTM := DTMFromString('78DA637CC7C4C0F089010504251A31FC07D28' +
           'C40FC1F0818AF02D5FC405593E0CACE20095503028C97806A1819' +
           '51D484F909A2AA790354C301E1C1C454E2B819E490D5DC00AA116' +
           '5C46B170052C50F5D');
      Writeln('Searching For MineToBank1DTM...');
      if (DTMRotated(MineToBank1DTM, x, y, MMx1, MMy1, MMx2, MMy2)) then
      begin
        Writeln('Found MineToBank1DTM');
        Mouse(x, y, 3, 3, True);
        FFlag(10);
      end else
      begin
        FreeDTM(MineToBank1DTM);
        Writeln('Could Not Find MineToBank1DTM');
        if (FindMineSymbol) then
        begin
          WalkToBank;
        end else
        begin
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
          //EndScript;
        end;
      end;
      FreeDTM(MineToBank1DTM);
     
      if not LoggedIn then Exit;
      MineToBank2DTM := DTMFromString('78DA63BCCCC4C0F0930105A4953B33FC07D28' +
           'C40FC1F08180F03D57C455513E627C8200955030260352C109E24' +
           '921A06643567806A8450D524B8B2A3A8010043F40DB8');
      Writeln('Searching For MineToBank2DTM...');
      if (DTMRotated(MineToBank2DTM, x, y, MMx1, MMy1, MMx2, MMy2)) then
      begin
        Writeln('Found MineToBank2DTM');
        Mouse(x, y, 3, 3, True);
        FFlag(10);
      end else
      begin
        Writeln('Could Not Find MineToBank2DTM');
        if (WalkAlongWall(0, 60, 30)) then
        begin
          Wait(300+random(150));
          Writeln('Backup Walk Successful');
          Writeln('Searching For MineToBank2DTM...');
          if (DTMRotated(MineToBank2DTM, x, y, MMx1, MMy1, MMx2, MMy2)) then
            begin
              Writeln('Found MineToBank2DTM');
              Mouse(x, y, 3, 3, True);
              FFlag(10);
              FreeDTM(MineToBank2DTM);
            end else
            begin
              FreeDTM(MineToBank2DTM);
              Writeln('Could Not Find MineToBank2DTM');
              Players[CurrentPlayer].Loc := 'Lost';
              Writeln('Player Is Lost');
              NextPlayer(False);
             // EndScript;
            end;
        end else
        begin
          FreeDTM(MineToBank2DTM);
          Writeln('Backup Walk Not Successful');
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
          //EndScript;
        end;
      end;
      FreeDTM(MineToBank2DTM);
     
      if not LoggedIn then Exit;
      MineToBank3DTM := DTMFromString('78DA637CCEC4C0F0920105E4973B33FC07D28' +
           'C40FC1F08181F00D53C4455636DC4CC20095503028C57816A5EA0' +
           'AA49706547557307A8E613AA9A303F415435D7816AFEE15703000' +
           '5811214');
      Writeln('Searching For MineToBank3DTM...');
      if (DTMRotated(MineToBank3DTM, x, y, MMx1, MMy1, MMx2, MMy2)) then
      begin
        Writeln('Found MineToBank3DTM');
        Mouse(x, y, 3, 3, True);
        FFlag(10);
      end else
      begin
        Writeln('Could Not Find MineToBank3DTM');
        if ((WalkAlongWall(0, 18, 40)) or (WalkAlongWall(340, 360, 40))) then
        begin
          Wait(300+random(150));
          Writeln('Backup Walk Successful');
          Writeln('Searching For MineToBank3DTM...');
          if (DTMRotated(MineToBank3DTM, x, y, MMx1, MMy1, MMx2, MMy2)) then
            begin
              Writeln('Found MineToBank3DTM');
              Mouse(x, y, 3, 3, True);
              FFlag(10);
              FreeDTM(MineToBank3DTM);
            end else
            begin
              FreeDTM(MineToBank3DTM);
              Writeln('Could Not Find MineToBank3DTM');
              Players[CurrentPlayer].Loc := 'Lost';
              Writeln('Player Is Lost');
              NextPlayer(False);
              //EndScript;
            end;
        end else
        begin
          FreeDTM(MineToBank3DTM);
          Writeln('Backup Walk Not Successful');
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
         // EndScript;
        end;
      end;
      FreeDTM(MineToBank3DTM);

      if not LoggedIn then Exit;
      VarrockRoadColor := FindVarrockRoadColor;
      Writeln('Walking To Varrock Road...');
      if (RadialWalk(VarrockRoadColor, -12, 12, 75, -1, 1)) then
      begin
        Writeln('Walk To Varrock Road Successful');
        FFlag(10);
      end else
      begin
        Writeln('Walked To Varrock Road Not Successful');
        if ((WalkAlongWall(0, 25, 40)) or (WalkAlongWall(345, 360, 40))) then
        begin
          Wait(300+random(150));
          Writeln('Backup Walk Successful');
          VarrockRoadColor := FindVarrockRoadColor;
          Writeln('Walking To Varrock Road...');
          if (RadialWalk(VarrockRoadColor, -12, 12, 75, -1, 1)) then
            begin
              Writeln('Walk To Varrock Road Successful');
              FFlag(10);
            end else
            begin
              Writeln('Could Not Find Varrock Road');
              Players[CurrentPlayer].Loc := 'Lost';
              Writeln('Player Is Lost');
              NextPlayer(False);
              //EndScript;
            end;
        end else
        begin
          Writeln('Backup Walk Not Successful');
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
         // EndScript;
        end;
      end;
     
      if not LoggedIn then Exit;
      VarrockRoadColor := FindVarrockRoadColor;
      Writeln('Walking To Varrock Road...');
      if (RadialWalk(VarrockRoadColor, 65, 96, 47, -1, 1)) then
      begin
        Writeln('Walk To Varrock Road Successful');
        FFlag(10);
      end else
      begin
        Writeln('Walked To Varrock Road Not Successful');
        SymbolAccuracy := 0.5;
        Writeln('Backup: Searching For Anvil Symbol...');
        if (FindSymbol(x, y, 'anvil')) then
        begin
          SymbolAccuracy := 0.8;
          Wait(250+random(100));
          Mouse(x, y - 25, 3, 3, True);
          FFlag(10);
          Writeln('Found Anvil Symbol');
        end else
        begin
          SymbolAccuracy := 0.8;
          Writeln('Backup: Could Not Find Anvil Symbol');
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
          //EndScript;
        end;
      end;

      if not LoggedIn then Exit;
      BankDTM := DTMFromString('78DA63FCC2C4C060C6C8800CFEFDFBC7F01F4' +
           '88344FF0301E36F4C357FFE30314842D58000588D1E116A5409A8' +
           'F905542343841A1122D470E3570300A0711C58');
      Wait(300+random(150));
      AntiRandom;
      Writeln('Searching For BankDTM');
      if (DTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2)) then
      begin
        Mouse(x, y, 1, 1, True);
        WriteLn('Found BankDTM');
        Flag;
        Players[CurrentPlayer].Loc := 'Bank';
        FreeDTM(BankDTM);
      end else
      begin
        Writeln('Cannot Find BankDTM');
        SymbolAccuracy := 0.5;
        Writeln('Backup: Searching For Bank Symbol...');
        if (FindSymbol(x, y, 'bank')) then
        begin
          SymbolAccuracy := 0.8;
          Wait(250+random(100));
          Mouse(x, y, 3, 3, True);
          Flag;
          Writeln('Found Bank Symbol');
          Wait(500+random(250));
          if (DTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2)) then
          begin
            Mouse(x, y, 1, 1, True);
            WriteLn('Found BankDTM');
            Flag;
            Players[CurrentPlayer].Loc := 'Bank';
            FreeDTM(BankDTM);
          end else
          begin
            FreeDTM(BankDTM);
            Writeln('Cannot Find BankDTM');
            Players[CurrentPlayer].Loc := 'Lost';
            Writeln('Player Is Lost');
            NextPlayer(False);
            //EndScript;
          end;
        end else
        begin
          SymbolAccuracy := 0.8;
          Writeln('Backup: Could Not Find Bank Symbol');
          Players[CurrentPlayer].Loc := 'Lost';
          Writeln('Player Is Lost');
          NextPlayer(False);
          //EndScript;
        end;
      end;
    end;

  2. #2
    Join Date
    Mar 2007
    Posts
    3,042
    Mentioned
    1 Post(s)
    Quoted
    14 Post(s)

    Default

    SCAR Code:
    function FindMineSymbol : Boolean;
    var
      x, y: Integer;
    begin
      if not LoggedIn then Exit;
      Writeln('Searching For Mine Symbol...');
      Wait(600+random(100));
      //AntiRandom;
      i := 0;
      SymbolAccuracy := 0.5;
      repeat
        if not LoggedIn then Exit;
        Wait(300+random(100));
        i := i+1;
        if (FindSymbol(x, y, 'mining site')) then
        begin
          Writeln('Found Mine Symbol');
          Players[CurrentPlayer].Loc := 'Mine';
          Mouse(x, y, 3, 3, True);
          FFlag(10);
          SymbolAccuracy := 0.8;
          Result := True;
          Break;
        end else
        begin
          if (i >= 3) then
          begin
            SymbolAccuracy := 0.8;
            Players[CurrentPlayer].Loc := 'Lost';
            Writeln('Could Not Find Mine Symbol');
            NextPlayer(False);
            //EndScript;
          end;
        end;
      until(i >= 3);
    end;


    Some things I changed:
    • Made x and y local variables, there's no need to have variables outside the function for something you're only doing in this one function.
    • Moved "if not LoggedIn then Exit" to the beginning of the function and added "if not LoggedIn then Exit" to the beginning of the loop to make sure you check each time if you perform the loop more than once.
    • Added a "Break" at the end of the true case so you won't loop around the function more than you need to.
    :-)

  3. #3
    Join Date
    Nov 2007
    Posts
    437
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Thank you. I just use x and y because that is what I use throughout the entire script so I didn't declare them locally. Anyways thank you for help with the other things. Now I need help with the second one .

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Penti's Walking procedure (RadioWalk) question
    By joedeagan in forum OSR Help
    Replies: 6
    Last Post: 06-22-2007, 12:08 PM
  2. Replies: 8
    Last Post: 05-24-2007, 11:57 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
  •