Results 1 to 4 of 4

Thread: First Script; Log Chopper and Burner

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

    Default First Script; Log Chopper and Burner

    So, here's my first script (at least for a long long time).
    Start anywhere it will chop and burn normal trees (not through bonfires).

    It can be used with hatchet in inventory (first slot) or equipped (set it up at the start).
    Start it anywhere, if it can't find trees it will teleport to Draynor so make sure you have that lodestone unlocked.

    I want to add in the option to Drop logs (I think that should be easier to do than what's already written so hopefully won't take long).

    Setup
    If your hatchet is in inventory make sure you set HoldingHatchet to True;, it will drop it if you don't.
    If you want an accurate report set your exp bar to have woodcutting at the top and firemaking just below, they don't need to be reset.
    If you don't want a report then set Reporting to False.
    If you want to Burn logs (not bonfire) then set EmptyInventory to 'Burn', for a Bonfire set it to 'Bonfire'.


    Simba Code:
    {Thanks to Coh3n for his guides (mainly [url]http://villavu.com/forum/showthread.php?t=58935[/url])
    Also Thanks to everyone else who helped on IRC.
    Thanks to Bart for the findlevel function!
    Big thanks to the creators of everything I've used
    }

    program TreeChopper;
    {$DEFINE SMART8}
    {$i srl/srl.simba}
    const
    EmptyInventory = 'Bonfire'; //'Burn' or 'Bonfire' are accepted
    Loads = 50; //Fill in how many loads
    HoldingHatchet = True; //True if hatchet is in your inventory
    Reporting = True; // True if you want a regular report (make sure to set up xp bars correctly), false if not
    var
    inv1, inv2, Loadsdone, i, LogsCut, LogsBurnt, hat, invspace :Integer;
    InvFS1, InvFS2, TimeFS1, TimeFS2 :Integer;
    WCexpbar, FMexpbar, WCexpstart, FMexpstart, WCexpbar2, FMexpbar2 : Integer;
    Burning : Boolean;
    TextAR1, TextAR2 : TStringArray;

    Procedure DeclarePlayers;
    begin
      HowManyPlayers := 1;
      NumberOfPlayers(HowManyPlayers);
      CurrentPlayer := 0;

      Players[0].Name :='';
      Players[0].Pass :='';
      Players[0].Nick :='';
      Players[0].Active:=True;
    end;
        function GetLevelArray(): TIntegerArray;           //Thanks to Bart for this function
        var
          Level: Integer;
          RRArray: Array of Extended;
        begin
          SetLength(RRArray, 120);
          SetLength(Result, 120);

          RRArray[0] := 0;
          for Level := 2 to 120 do
          begin
            RRArray[Level - 1] := RRArray[level - 2] + Floor((Level - 1) + (300 * Pow(2, ((Level - 1) / 7.0)) ));
            Result[Level - 1]  := Floor(RRArray[Level - 1] / 4);
          end;
        end;

        function GetLevel(xp: Integer): Integer;  //Thanks to Bart for this function
        var
          levels: TIntegerArray;
        begin
          levels := GetLevelArray;
          for Result := 1 to High(levels) do
            if (levels[Result] > xp) then
              Exit;
        end;
    procedure Antiban;
    var
    Red: String;
    begin
      if (not(LoggedIn))then Exit;
      RunEnergy(80);
      if (GetMMLevels('run',Red) < 20) then RestUntil(95);
      CloseAdWindow();
      FindSpinTicket();
      ExitSquealOfFortune();
      FindDwarvenPopup();
      case Random(600) of
        0:HoverSkill('woodcutting',false);
        2:RandomRClick;
        4:begin
          PickUpMouse;
          Wait(Random(500));
          PickUpMouse;
          end;
        6:RandomMovement;
        8:BoredHuman;
        9:HoverSkill('firemaking',false);
      end;
    end;
    procedure Setup;
    begin
    if HoldingHatchet = True then
      begin
        hat:=1
        invspace:= 27
      end else
      begin
        hat:=0
        invspace:= 28
      end;
      CloseAdWindow();
      FindSpinTicket();
      ExitSquealOfFortune();
      FindDwarvenPopup();
      TimeFS1 := 0;
      TimeFS2 := 0;
      inv2:=InvCount;
      inv1:=InvCount;
      Loadsdone := 0;
      LogsCut := 0;
      LogsBurnt := 0;
      If (not ISXPBarOpenEx(1)) then
      begin
      ToggleXPBar(True);
      end;
      ResetXPTotal;
      WCexpbar := GetXPBar(1);
      FMexpbar := GetXPBar(2);
      WCexpstart:=GetXp('Woodcutting')
      FMexpstart:=GetXp('Firemaking')
      Writeln('Current Woodcutting experience on bar : ' + IntToStr(WCexpbar));
      Writeln('Current Firemaking experience on bar : ' + IntToStr(FMexpbar));
      Writeln('Set all vars.');

    end;
    procedure Report;
    begin
      if (reporting=true) then
      begin
        ClearDebug;
        WCexpbar2 := GetXPBar(1);
        FMexpbar2 := GetXPBar(2);
        writeln('               Been running For : ' + TimeRunning)
        writeln('Logs Cut : ' + Inttostr(LogsCut)
        + ' ¦ Logs Burnt : ' + Inttostr(LogsBurnt))
        Writeln('Woodcutting experience gained : ' + IntToStr(WCexpbar2 - WCexpbar)
        + ' ¦ Firemaking experience gained : ' + IntToStr(FMexpbar2 - FMexpbar));
        Writeln('Woodcutting levels gained : ' + IntToStr((GetLevel((WCexpbar2-WCexpbar)+WCexpstart))-(GetLevel(WCexpstart)))
        + ' ¦ Firemaking levels gained : ' + IntToStr((GetLevel((FMexpbar2-FMexpbar)+FMexpstart))-(GetLevel(FMexpstart))));
        Writeln('Current Woodcutting Level : ' + IntToStr(GetLevel((WCexpbar2-WCexpbar)+WCexpstart))
        + ' ¦ Current Firemaking Level : ' + IntToStr(GetLevel((FMexpbar2-FMexpbar)+FMexpstart)));
        if (Loadsdone = 0) then writeln('               ' + Inttostr(Loadsdone) + ' Full Loads Done')
        else writeln('                ' + Inttostr(Loadsdone-1) + ' Full Loads Done');
      end;
    end;
    procedure ChangeScreen(Chance:Integer);
    var
    screen:Integer;
    begin
    screen:= (Random(Chance))
     if (screen<2) then
     begin
      KeyDown((screen * 2) + 38);
      Sleep(100 + Random(300));
      KeyUp((screen * 2) + 38);
      Wait(100 + Random(100));
      MakeCompass(Random(360));
     end;
    end;
    procedure Failsafe;
    begin
     if(not(LoggedIn))then Exit;
     InvFS2 := InvCount;
     FindNormalRandoms;
     if (TimeFS1 = 0) or (InvFS2<>InvFS1) then
      begin
        MarkTime(TimeFS1);
        InvFS1 := Invcount;
      end;
     TimeFS2 := (TimeFromMark(TimeFS1)/1000);
     if (TimeFS2 > 90) and (InvFS2 = InvFS1) then
     begin
      TimeFS1 := 0;
      Writeln('Been idle for 90 seconds, going to Draynor.')
     If OpenLodestoneScreen then
      begin
        Lodestoneteleport('Draynor Village');
        wait(RandomRange(12000,15000));
      end;
     end;
    end;
    procedure ChopTree;
    var
      x, y, Time1, Time2 : Integer;
    begin
     if(not(LoggedIn))then Exit;
     Failsafe
     Antiban;
     FindNormalRandoms;
     ChangeScreen(5);
     ColorToleranceSpeed(2)
     SetColorSpeed2Modifiers(1.2, 1.25);
     if FindObj(x,y,'ree',1582373 ,2)then //1582373
       begin
        MMouse(x, y, 5, 5);
        if WaitUpText('ree', 500) then
         begin
          Writeln('Found Tree');
          Mouse(x,y,0,0,True);
          inv1 := InvCount;
          MarkTime(Time1);
            repeat
              if(not(LoggedIn))then Exit;
              inv2 := InvCount;
              FindNormalRandoms;
              Antiban;
              wait(random(500));
              Time2 := (TimeFromMark(Time1)/1000);
            until (inv2>inv1) or (Time2 > (RandomRange(15,20)));
         end else
         begin
         Writeln('Found the colour but no tree');
         ChangeScreen(2);
         end;
        end else
        begin
         Writeln('Couldn''t find the colour');
         ChangeScreen(5);
        end;
       SetColorSpeed2Modifiers(0.2, 0.2);
       ColorToleranceSpeed(1);
       if (inv2>inv1) then
       begin
       LogsCut:= (((LoadsDone-1)*invspace) + (Invcount-hat))
       Report;
       end;
      inv1:=InvCount;
    end;
    procedure CheckBurning;
    var
    textline, Timer1, Timer2:Integer;
    begin
      if(not(LoggedIn))then Exit;
      Burning := false;
      MarkTime(Timer1)
      repeat
      Timer2 := (TimeFromMark(Timer1)/1000);
      FindNormalRandoms;
      TextAR2 := ChatBoxTextArray(clBlack);
      textline:=8
      if (TextAR2[textline] = '') then
      repeat
        textline:=textline-1
      until (TextAR2[textline]<>'');
       if (pos('The fire', TextAR2[8])  <>0) or (pos('level', TextAR2[8])  <>0) AND (TextAR2 <>  TextAR1) then
       begin
          writeln('Fire Lit');
          Wait(RandomRange(200,500));
          Burning := true;
       end else
       begin
          writeln('Still Lighting');
          Wait(RandomRange(200,500));
          Burning := false;
          Antiban;
       end;
      until (Burning = true) or (Timer2 > (RandomRange(15,20)));
    end;
    procedure Burn( Tpe :String);
    var
    text : TStringArray;
    FSMoverep,textline: Integer;
    FSDone : Boolean;
    begin
        if(not(LoggedIn))then Exit;
        Mouse(80,491,20,10,true);
        writeln('Emptying Inv');
        wait(random(1000));
        i:= InvCount;
        ClickNorth(0)
          while i > hat do
          begin
            Failsafe
            FindNormalRandoms;
            Burning := false;
            i:= InvCount;
            if (not ExistsItem(i)) then
              begin
                i:=29
                repeat
                  i:= i-1;
                  if (i = hat) then i:=28;
                 until (ExistsItem(i));
                end;
            TextAR1 := ChatBoxTextArray(clBlack);
            MMouseItem(i);
            MouseItem(i, 0);
            if WaitOption('ight', 500) then
              begin
                wait(RandomRange(1000,1500));
                textline:=8
                text:= ChatBoxTextArray(clBlack);
                if (text[textline] = '') then
                repeat
                textline:=textline-1
                until (text[textline]<>'');
                if (pos('You can', text[textline]) <>0) then
                  begin
                    FSMoverep := 1;
                    FSDone := false;
                    repeat
                      writeln('Can''t Light Fire here');
                      Mouse((MSCX+30),(MSCY + (30*FSMoverep)),10,5,true);
                      If(IsMoving) then FSDone := true;
                        repeat
                          FindNormalRandoms;
                          Wait(RandomRange(500,1000));
                        until (not FlagPresent);
                      Inc(FSMoverep);
                    until (FSDone = true) or (FSMoverep >=10);
                  end;
                if (i>Invcount) then
                  begin
                    CheckBurning;
                    Inc(LogsBurnt);
                    if Tpe = 'Bonfire' then i:= (hat);
                    Report;
                  end;
              end else
                begin
                  MouseItem(i, 0);
                  WaitOption('rop', 500);
                  wait(RandomRange(500,1000));
                end;
              if Tpe = 'Burn' then i:= InvCount;
            end;
    end;
    procedure EmptyInv;
    var
    Timer1, Timer2 : Integer;
    begin
      case EmptyInventory of
        'Burn': Burn('Burn');
        'Bonfire':
        repeat
          begin
            Burn('Bonfire');
            i:= InvCount;
            if (not ExistsItem(i)) then
              begin
                i:=29
                repeat
                  i:= i-1;
                  if (i = hat) then i:=28;
                 until (ExistsItem(i));
                end;
            MMouseItem(i);
            Wait(RandomRange(200,300));
            if IsUpTextEx('Craft') then
              begin
                MouseItem(i, 1);
                Wait(RandomRange(500,800));
                MouseBox(334, 150, 389, 200,1);
                repeat
                  Marktime(Timer1);
                  inv1:=Invcount;
                  repeat
                    if(not(LoggedIn))then Exit;
                    inv2 := InvCount;
                    FindNormalRandoms;
                    Antiban;
                    wait(random(500));
                    Timer2 := (TimeFromMark(Timer1)/1000);
                  until (inv2<inv1) or (Timer2 > (RandomRange(7,10))) or (Invcount = hat);
                  if inv2<inv1 then Inc(LogsBurnt);
                  Report;
                until (Timer2 > (RandomRange(7,10))) or (Invcount = hat);
              end else Writeln('Couldn''t find Craft');
            end;
          until(Invcount = hat);
      end;
        if (InvCount = Hat) then
        begin
          Inc(Loadsdone);
          Report;
        end;
    end;

    begin
      SetUpSRL;
      ActivateClient;
      DeclarePlayers;
      LoginPlayer;
      Setup;
      EmptyInv;
      if (not (InvFull)) then
      begin
        Repeat
          if(not(LoggedIn))then Exit;
          FindNormalRandoms;
          Antiban;
          ChopTree;
          wait(random(2000));
          inv2:=InvCount;
          inv1:=InvCount;
          if (InvFull) then EmptyInv;
       until ((Loadsdone-1) >= Loads)
      end;
    end.

    6h proggy!

    Code:
    Been running For : 6 Hours, 1 Minutes and 28 Seconds
    Logs Cut : 949 ¦ Logs Burnt : 896
    Woodcutting experience gained : 23810 ¦ Firemaking experience gained : 46525
    Woodcutting exp per hour : 3952 ¦ Firemaking exp per hour : 7722
    Woodcutting levels gained : 4 ¦ Firemaking levels gained : 3
    Current Woodcutting Level : 47 ¦ Current Firemaking Level : 53
    Total experience gained : 70335 ¦ Total exp per hour : 11674 ¦ Total levels gained : 7
    35 Full Loads Done
    Also attached.
    Last edited by nght spud; 01-11-2013 at 05:19 PM. Reason: Updates

  2. #2
    Join Date
    Mar 2006
    Location
    Belgium
    Posts
    3,564
    Mentioned
    111 Post(s)
    Quoted
    1475 Post(s)

    Default

    Nice release!

    Creds to DannyRS for this wonderful sig!

  3. #3
    Join Date
    Jan 2012
    Location
    Texas.
    Posts
    771
    Mentioned
    4 Post(s)
    Quoted
    122 Post(s)

    Default

    Congrats on the release!
    ^Made by: DannyRS


    Check out my Tutorials: Miscellania Tutorial ~ 1 - 99 Smithing
    Avatar made by: Vinyl Scratch[/CENTER]

  4. #4
    Join Date
    Jun 2006
    Posts
    31
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    Updated the first post. Script now contains the option to bonfire logs and a better report (Thanks to Bart for the find level function).

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
  •