Results 1 to 3 of 3

Thread: Lower level agility courses

  1. #1
    Join Date
    Aug 2014
    Posts
    172
    Mentioned
    2 Post(s)
    Quoted
    77 Post(s)

    Default Lower level agility courses

    any chance someone could make a bot for some of the earlier agility courses. Early game leveling is my most hated form of leveling lol. So if someone could make a bot for gnome basic, and barbarian basic. That would be awesome

  2. #2
    Join Date
    Nov 2014
    Posts
    56
    Mentioned
    1 Post(s)
    Quoted
    22 Post(s)

    Default

    Quote Originally Posted by nero_dante View Post
    any chance someone could make a bot for some of the earlier agility courses. Early game leveling is my most hated form of leveling lol. So if someone could make a bot for gnome basic, and barbarian basic. That would be awesome
    There is already a gnome basic. Lemme paste my latest version here.

    Simba Code:
    program Brose_Gnome_Basic_Agility;
    {$DEFINE SMART} // comment this line out if you don't want to use SMART
    {$i srl-6/srl.simba}
    {$I SPS/lib/SPS-RS3.Simba}

    //////////////         Setup the usual stuff here      ////////////////////////
    procedure declarePlayers();
    begin
      setLength(players, 1);
      with players[0] do
        begin
        loginName := ' ';
        password  := ' ';
        isActive  := true;
        isMember  := true;
        world     := -1;
        end;
      currentPlayer := 0;
    end;

    //This progress report is stolen from Ashaman's Advanced Gnome Agility with minor modifications
    const
      SCRIPT_VERSION = '1.3'; // updated on 24 Jan 2014
      BREAK_TIME = 30;
      BREAK_DURATION = 15;
      TIME_LIMIT = 120;              //in minutes

      {////////////                 Read Me Please?          ////////////////////////

    1. Please setup the interface as per the default settings
    2. Please set camera type to RS3 - It only works with RS3 at the moment
    3. Set minimap north and zoom all the way out before you start the script
    4. If you want to be able to track your xp, then please put it at the position
       above the chatbox...
    5. Position your player 1 square north of the balancing log before you start
    6, Please babysit the script when it is running.

    //////////////////////////////////////////////////////////////////////////////}


    var
      BreakTime, lapCount, XP, startingXP, lapsPH, XPH, antibanCount, actAfkCount: integer;

    procedure progressReport;
    begin

      XP := (chatBox.getXPBar - startingXP);
      XPH := round(XP * (3600.0 / (getTimeRunning / 1000.0)));
      lapsPH := round((lapCount * (3600.0 / (getTimeRunning / 1000.0))));

      writeln('|===========================================================|');
      writeln('|             Brose Basic Gnome Agility v' + padR(toStr(SCRIPT_VERSION), 19), '|');
      writeln('|===========================================================|');
      writeln(padR('| Running For: ' + timeRunning, 60) + '|');
      writeln(padR('| Laps: ' + groupDigits(lapCount, ','), 40) + padR('Laps/H: ' + groupDigits(lapsPH, ','), 20) + '|');
      writeln(padR('| Exp Earned: ' + groupDigits(XP, ','), 40) + padR('Exp/Hour: ' + groupDigits(XPH, ','), 20) + '|');
      writeln(padR('| Antibans performed: ' + groupDigits(antibanCount, ','), 40) + padR('AFK Count: ' + groupDigits(actafkcount, ','), 20) + '|');
      writeln('|___________________________________________________________|');
      writeln('|___________________________________________________________|');

    end;

    /////////////////////////////////////////////////////////////////////////
    procedure paintStatus(status: string);
    begin
      {$IFDEF SMART}
        try
          smartImage.clear();
          smartImage.drawText('Status: ' + status, point(chatbox.x2 - 320, chatbox.y2 - 19), smallChars, false, 255);
        except
        end;
      {$ENDIF}
    end;

    procedure antiBan();
    var
    i: integer;
    begin

    if not isLoggedIn then
    exit;

    i := random(100);

    if i < 9 then
        begin
          writeln('[   Activating antiban   ]');
          paintStatus('Activating antiban...');
        case i of
              0: wait(randomrange(5000,12000));//RandomRClickItem();
              1: begin
                  MouseOffClient(Random(5));
                  wait(randomrange(3000,7000));
                 end;
              2: PickUpMouse;
              3: MouseMovingObject();
              4: SleepAndMoveMouse(200 + Random(50));
              5: begin
                  Boredhuman;
                  wait(randomrange(1000,7000));
                  minimap.clickCompass();
                  mainScreen.setAngle(MS_ANGLE_HIGH);
                 end;
              6: hoverRandomSkill();
              7: begin
                  randomCameraAngle(MS_ANGLE_HIGH);
                  minimap.clickCompass();
                  mainScreen.setAngle(MS_ANGLE_HIGH);
                 end;
              8: begin
                  tabStats.getSkillLevel(SKILL_AGILITY);
                  hoverSkill(SKILL_AGILITY);
                  wait(gaussRangeInt(3000,5000));
                 end;
          end;
            inc(antibanCount);
      end;
    end;

    procedure actAFK();
    var
      i,k : integer;
    begin
      i:= gaussRangeInt(60000,360000);
      k:= round (i/1000)
      case Random(100) of
      0..1: begin
              writeln(padR('[     Acting AFK For: ' + inttostr(k), 1) + 'secs     ]');
              paintStatus(padR('Going AFK for: ' + inttostr(k), 1) + 'secs...');
              wait (i);
              inc (actafkCount);
            end;
      end;
    end;

    procedure boing();
    begin
      PlaySound('Includes/sounds/boing.wav');
    end;

    procedure humanLike();
    begin
      if random(4) = 2 then
      smallRandomMouse();
      if random(4) = 2 then
      pickUpMouse();
      //if random(14)=2 then
      //minimap.setAngle(randomRange(-85, 85));
      if random(6)=2 then
      SleepAndMoveMouse(200 + Random(50));
      if random(15)=2 then
      mouseOffClient(random(5));
    end;

    procedure loginPlayer();
    begin
      players[currentPlayer].login();
      wait(randomRange(4000, 6000));
      paintStatus('Setting up player');
      minimap.clickCompass();
      mainScreen.setZoom(TRUE);
      mainscreen.setAngle(MS_ANGLE_HIGH);
      exitTreasure();
      claimTicket();
      closePollWindow();
      //MiningLevel[currentPlayer] := tabStats.getSkillLevel(SKILL_MINING);
      mainScreen.setZoom(true);
    end;

    (*procedure resetSwitchTimer();
    var
      ran: Integer;
    begin
      ran := round((players[currentPlayer].integers[SWITCH_AFTER] * 60000) * 0.2);
      SwitchTime := (getSystemTime() + (players[currentPlayer].integers[SWITCH_AFTER] * 60000) + randomRange(-ran, ran));
    end;     *)


    procedure resetBreakTimer();
    var
      ran: Integer;
    begin
      ran := round((BREAK_TIME * 60000) * 0.2);
      BreakTime := ((getSystemTime() + BREAK_TIME * 60000) + randomRange(-ran, ran));
    end;

    (*function switchPlayers(active: Boolean): Boolean;
    begin
      if players.getActive() < 2 then
        exit(false);

      paintStatus('Switching players');

      if players.next(active) then
      begin
        result := true;
        loginPlayer();
        resetBreakTimer();
        //resetSwitchTimer();
      end;
    end;   *)


    function timeUntil(time: Integer): String;
    var
      H, M, S: Integer;
    begin
      convertTime((time - getSystemTime()), H, M, S);
      result := (toStr(H)+ 'h ' + toStr(M)+ 'm ' + toStr(S)+ 's');
    end;

    procedure takeBreak();
    var
      H, M, S, breakFor, timeLeft, ran: Integer;
      breakDuration: TTimeMarker;
    begin
      if (getSystemTime() >= BreakTime) then
      begin
        //TotalBreakTime[currentPlayer].start();
        paintStatus('Taking a break');

        if random(2) = 0 then
          players[currentPlayer].logout()
        else
          players[currentPlayer].exitToLobby();

        ran := round((BREAK_DURATION * 60000) * 0.2);

        breakFor := (BREAK_DURATION * 60000) + randomRange(ran, -ran);
        convertTime(breakFor, H, M, S);
        writeLn('You are breaking for: ' + toStr(H)+ 'h ' + toStr(M)+ 'm ' + toStr(S)+ 's');

        breakDuration.start();

        repeat
          timeLeft := breakFor - breakDuration.getTime();
          convertTime(timeLeft, H, M, S);
          writeLn('Ending break in: ' + toStr(H)+ 'h ' + toStr(M)+ 'm ' + toStr(S)+ 's');
          wait(25000 + random(4000));
        until breakFor < breakDuration.getTime();

        //inc(players[currentPlayer].integers[P_TOTAL_BREAKS]);
        resetBreakTimer();
        //TotalBreakTime[currentPlayer].pause();

        loginPlayer();

        //rockTimer.reset();
        //rockTimer.start();
      end;
    end;

    procedure logBalance();
    var
      logBalance: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      logBalance := intToBox(280, 216, 299, 241);
      Repeat
        mouseBox(logBalance, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(logBalance, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['og balance']) or  (j>= 30);

      if  (j>= 30) then
      Repeat
        writeln('Couldnt find log... I think I am 1 sq North... Failsafe kicking in...');
        mouse(290, 257, 5, 5, MOUSE_MOVE);
        wait(randomRange(1000, 1500));
        inc(j);
      until isMouseOverText(['og balance']) or  (j>= 60);

      if  (j>= 60) then
      begin
        writeln('Sorry... I cannot find the balancing log - Terminating Script');
        terminateScript();
      end else
      begin
        case random(8) of
          0:  begin
                mouseBox(logBalance, MOUSE_right);
                chooseoption.select(['alk-across']);
              end;
          1..7: mouseBox(logBalance, MOUSE_LEFT);
        end;
      end;

      writeln('1. Walking across log balance');
      paintStatus('1. Walking across log balance');
      humanLike();
      wait(randomrange(6300,7300));
      antiBan();
    end;

    procedure obstacleNet1();
    var
      obstacleNet1: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      obstacleNet1 := intToBox(247, 325, 288, 331);
      Repeat
        mouseBox(obstacleNet1, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(obstacleNet1, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['bstacle']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the obstacle net - Terminating Script');
      terminateScript();
      end else
        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['limb-over']);
              end;
        1..7: fastClick(mouse_left);
        end;
      writeln('2. Climbing up the obstacle net');
      paintStatus('2. Climbing up the obstacle net');
      humanLike();
      wait(randomrange(4300,5200));
      antiBan();
    end;

    procedure treeBranch1();
    var
      treeBranch1: TBox;
      x, y, i, j, k, m: integer;
      TPA: TPointArray;
      ATPA: T2DPointArray;
    begin;
      if not isLoggedIn() then
      exit;

      mousespeed :=(randomrange(20,40));
      treeBranch1 := intToBox(289, 235, 295, 257);
      mouseBox(treeBranch1, MOUSE_Move);
      if random(4)=2 then
      begin
        smallRandomMouse();
        mouseBox(treeBranch1, MOUSE_Move);
      end;
      if isMouseOverText(['ree branch']) then
      begin
        writeln('3. Climbing up the tree branch');
        paintStatus('3. Climbing up the tree branch');
        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['limb']);
              end;
        1..7: fastClick(mouse_left);
        end;
      end else
        begin;
          findColorsSpiralTolerance(x, y, TPA, 3428455, mainScreen.getbounds(), 4, colorSetting(2, 0.06, 0.38));
          if length(TPA) < 1 then
          exit;

          smartImage.clearArea(mainScreen.getBounds());
          mouseSpeed := randomRange(20, 40);
          ATPA := TPA.toATPA(5, 15);
          ATPA.sortFromMidPoint(mainscreen.playerPoint);
          smartImage.debugATPA(ATPA);

          for i := 0 to high(ATPA) do
          begin
            mouse(middleTPA(ATPA[i]), MOUSE_MOVE);
            wait(randomRange(1000, 2000));
            inc(j);
            if isMouseOverText(['ree branch']) then
            begin
              case random(8) of
                 0: begin
                     fastClick(mouse_right);
                     chooseoption.select(['limb']);
                    end;
              1..7: fastClick(mouse_left);
              end;
              writeln('3. Climbing up the tree branch');
              paintStatus('3. Climbing up the tree branch');
            end;
          break;
          end;
        end;

      if (j > 60) then
      begin
        writeln('Cannot find the damn tree branch - terminating script');
        terminateScript();
      end;

      //Repeat
      wait(randomrange(1200,2200));
      antiBan();
      inc(k);
      //until chatbox.findTextOnLines(['climb the', 'platform abov'], [0..2]) or (k > 30);
    end;

    procedure balancingRopeMethod1();
    var
      balancingRopeMethod1: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      balancingRopeMethod1 := intToBox(431, 202, 440, 202);
      Repeat
        mouseBox(balancingRopeMethod1, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(balancingRopeMethod1, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['alancing']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the balancing rope - Terminating Script');
      terminateScript();
      end else

      if isMouseOverText(['alancing']) then
      begin
        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['alk-on']);
              end;
        1..7: fastClick(mouse_left);
        end;
      end;

      antiBan();
      writeln('4. Walking across balancing rope - Method 1');
      paintStatus('4. Walking across balancing rope - Method 1');
      humanLike();
      wait(randomrange(7500,8500));
      antiBan();
    end;

    procedure balancingRopeMethod2();
    var
      platform, balancingRopeMethod2: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      platform := intToBox(1521, 218, 1533, 227);
      balancingRopeMethod2 := intToBox(1418, 228, 1426, 229);

      mouseBox(platform, MOUSE_Move);
      if random(4)=2 then
      begin
        smallRandomMouse();
        mouseBox(platform, MOUSE_Move);
      end;
        if isMouseOverText(['trainer']) then
        begin
          fastclick(Mouse_right);
          wait(randomrange(500,800));
          chooseoption.select(['alk here']);
        end else fastclick(mouse_left);

      wait(randomRange(2000,3000));

      Repeat
        mouseBox(balancingRopeMethod2, MOUSE_Move);
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['alancing']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the balancing rope - Terminating Script');
      terminateScript();
      end else

      if isMouseOverText(['alancing']) then
      begin
        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['alk-on']);
              end;
        1..7: fastClick(mouse_left);
        end;
      end;

      antiBan();
      writeln('4. Walking across balancing rope - Method 2');
      paintStatus('4. Walking across balancing rope - Method 2');
      humanLike();
      wait(randomrange(7400,8400));
      antiBan();
    end;

    procedure balancingRope();
    begin;
      case random(6) of
      0..5: balancingRopeMethod1();
      6: balancingRopeMethod2();
      end;
    end;

    procedure treeBranch2();
    var
      treeBranch2: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      treeBranch2 := intToBox(420, 187, 421, 212);
      Repeat
        mouseBox(treeBranch2, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(treeBranch2, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['ree branch']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the tree branch - Terminating Script');
      terminateScript();
      end else

        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['limb-down']);
              end;
        1..7: fastClick(mouse_left);
        end;

      writeln('5. Climbing down tree branch');
      paintStatus('5. Climbing down tree branch');
      humanLike();
      wait(randomrange(3000,4000));
      antiBan();
    end;

    procedure obstacleNet2();
    var
      obstacleNet2: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      minimap.clickCompass();
      obstacleNet2 := intToBox(200, 38, 225, 75);

      Repeat
        mouseBox(obstacleNet2, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(obstacleNet2, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['bstacle']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the obstacle net - Terminating Script');
      terminateScript();
      end else

        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['limb-over']);
              end;
        1..7: fastClick(mouse_left);
        end;

      mouseBox(obstacleNet2, MOUSE_LEFT);
      writeln('6. Climbing over the obstacle net');
      paintStatus('6. Climbing over the obstacle net');
      humanLike();
      wait(randomrange(6500,7500));
      //antiBan();
    end;

    procedure obstaclePipeLeftMethod1();
    var
      obstaclePipeLeftMethod1: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      obstaclePipeLeftMethod1 := intToBox(255, 112, 271, 128);

      Repeat
        mouseBox(obstaclePipeLeftMethod1, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(obstaclePipeLeftMethod1, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['pipe']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the obstacle pipe - Terminating Script');
      terminateScript();
      end else

        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['queeze']);
              end;
        1..7: fastclick(mouse_left);
        end;

      writeln('7. Squeezing through obstacle pipe - method 1');
      paintStatus('7. Squeezing through obstacle pipe - method 1');
      humanLike();
      wait(randomrange(7100,8100));
      antiBan();
    end;

    procedure obstaclePipeLeftMethod2();
    var
      obstaclePipeLeftMethod2: TBox;
      j: integer;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      obstaclePipeLeftMethod2 := intToBox(247, 57, 272, 85);
      mainScreen.setAngle(MS_ANGLE_HIGH);

      Repeat
        mouseBox(obstaclePipeLeftMethod2, MOUSE_Move);
        if random(4)=2 then
        begin
          smallRandomMouse();
          mouseBox(obstaclePipeLeftMethod2, MOUSE_Move);
        end;
        wait(randomRange(300, 800));
        inc(j);
        if isMouseOverText(['trainer']) then
        wait(5000);
      until isMouseOverText(['pipe']) or  (j>= 60);

      if  (j>= 60) then
      begin
      writeln('Sorry... I cannot find the obstacle pipe - Terminating Script');
      terminateScript();
      end else

        case random(8) of
           0: begin
               fastClick(mouse_right);
               chooseoption.select(['queeze']);
              end;
        1..7: fastClick(mouse_left);
        end;

      writeln('7. Squeezing through obstacle pipe - method 2');
      paintStatus('7. Squeezing through obstacle pipe - method 2');
      humanLike();
      wait(randomrange(7100,8100));
      antiBan();
    end;

    procedure obstaclePipe();
    begin;
      case random(2) of
      0: begin
          obstaclePipeLeftMethod1();
          mainScreen.setAngle(MS_ANGLE_HIGH);
         end;
      1: obstaclePipeLeftMethod2();
      end;
    end;

    procedure walkToStarting();
    var
      walkToStarting: TBox;
    begin;
      if not isLoggedIn then
      exit;

      mousespeed :=(randomrange(20,40));
      walkToStarting := intToBox(3, 220, 13, 233);
      mouseBox(walkToStarting, MOUSE_MOVE);
      if random(4)=2 then
      begin
        smallRandomMouse();
        mouseBox(walkToStarting, MOUSE_Move);
      end;
        if isMouseOverText(['trainer', 'impling']) then
        begin
          fastclick(Mouse_right);
          wait(randomrange(500,800));
          chooseoption.select(['alk here']);
        end else fastclick(mouse_left);
      writeln('Lap completed! Walking to the starting point');
      paintStatus('Lap completed! Walking to the starting point');
      humanLike();
      inc(lapCount);
      wait(randomrange(5000,6000));
      antiBan();
    end;

    procedure mainloop();
    begin
      if not isLoggedIn() then
      exit;
      claimTicket();
      logBalance();
      obstacleNet1();
      treeBranch1();
      balancingRope();
      treeBranch2();
      obstacleNet2();
      obstaclePipe();
      walkToStarting();
      actAFK();
      clearDebug();
      takeBreak();
      progressReport();
    end;

    begin
      clearDebug();
      {$IFDEF SMART}
        smartEnableDrawing := true;
      {$ENDIF}
      setupSRL();
      declarePlayers();                       // Set up your username/pass

      if not isLoggedIn() then                // If player isn't logged in then
      begin
        players[currentPlayer].login();       // Log them in
        exitTreasure();
        claimTicket();
        mainScreen.setZoom(true);
        minimap.setAngle(MM_DIRECTION_NORTH);  // Make compass north and angle high
        mainScreen.setAngle(MS_ANGLE_HIGH);
      end;
      minimap.clickCompass();
      mainScreen.setAngle(MS_ANGLE_HIGH);
      startingXP := chatBox.getXPBar;
      disableSRLDebug := true;
      clearDebug();
      addOnTerminate('boing');
      resetBreakTimer();
      repeat
        mainloop();
      Until not isLoggedIn() or ((getTimeRunning() / 60000) > TIME_LIMIT);

      if ((getTimeRunning() / 60000) > TIME_LIMIT) then
      begin
      WriteLn('Time limit reached - terminating script!');
      players[currentPlayer].logout();
      terminateScript();
      end;

      terminateScript();
    end.

    if you want sound notification when the script stops for whatsoever reason, extract the sounds.rar and place the boing.wav in a new folder called sounds in the includes folder.

    Disclaimer: As with all scripts... use at your own risk. If you look at the script you will realise it is basically full of tbox click tbox click. It is a pretty crude way of going about things. It works well but.. hmm.. have to exercise some restraint. I have used it for long long hours before.. It would be better if you modify it to your own liking. Stare at it when running it for the first time... if you dont like how the script runs, change it yourself or dont use it. You have been warned.
    Attached Files Attached Files

  3. #3
    Join Date
    Aug 2014
    Posts
    172
    Mentioned
    2 Post(s)
    Quoted
    77 Post(s)

    Default

    yeah I actually used your script for my first lot of agility levels So thanks a lot for that

Thread Information

Users Browsing this Thread

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

Posting Permissions

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