Page 64 of 87 FirstFirst ... 1454626364656674 ... LastLast
Results 1,576 to 1,600 of 2158

Thread: [Reflection] ineedbot's AIO Woodcutter

  1. #1576
    Join Date
    Aug 2007
    Posts
    539
    Mentioned
    20 Post(s)
    Quoted
    266 Post(s)

    Default

    The reflection include IMO really hitting the bricks. Anyway, I'm going to wait for a lape include before I do anywork on scripting.

  2. #1577
    Join Date
    Oct 2006
    Posts
    6,752
    Mentioned
    95 Post(s)
    Quoted
    532 Post(s)

    Default

    Quote Originally Posted by ineedbot View Post
    The reflection include IMO really hitting the bricks. Anyway, I'm going to wait for a lape include before I do anywork on scripting.
    Care to explain? The errors previously mentioned are independent from reflection... If you are talking about the hooks being outdated from several weeks ago, that won't be occurring anymore.
    Last edited by Kyle; 10-12-2014 at 05:18 AM.
    “The long-lived and those who will die soonest lose the same thing. The present is all that they can give up, since that is all you have, and what you do not have, you cannot lose.” - Marcus Aurelius

  3. #1578
    Join Date
    Aug 2007
    Posts
    539
    Mentioned
    20 Post(s)
    Quoted
    266 Post(s)

    Default

    Quote Originally Posted by elfyyy View Post
    Care to explain? The errors previously mentioned are independent from reflection... If you are talking about the hooks being outdated from several weeks ago, that won't be occurring anymore.
    Well first of all, its in pascalScript, and the latest version of simba discards that. So an update is indeed needed.

    I didn't mind the late hook updates. Honestly I just manually added in the updated hooks from rs-hacking myself.

    Seeing that pascalScript is being discarded, its very discouraging if any scripting being done in pascalScript will have to be rewritten.

    I'm not saying that the include is bad, but saying its becoming outdated.

  4. #1579
    Join Date
    Oct 2006
    Posts
    6,752
    Mentioned
    95 Post(s)
    Quoted
    532 Post(s)

    Default

    Quote Originally Posted by ineedbot View Post
    Well first of all, its in pascalScript, and the latest version of simba discards that. So an update is indeed needed.
    You may want to take another look at the latest simba, as of course pascal script is supported. I would never consider moving our include over to lape, when there isn't a official SRL include that is compatible with it. Not sure where you got the impression that they stopped supporting it. They wouldn't even think about doing that when there is still a official include that requires it!
    “The long-lived and those who will die soonest lose the same thing. The present is all that they can give up, since that is all you have, and what you do not have, you cannot lose.” - Marcus Aurelius

  5. #1580
    Join Date
    Aug 2007
    Posts
    539
    Mentioned
    20 Post(s)
    Quoted
    266 Post(s)

    Default

    Quote Originally Posted by elfyyy View Post
    You may want to take another look at the latest simba, as of course pascal script is supported. I would never consider moving our include over to lape, when there isn't a official SRL include that is compatible with it. Not sure where you got the impression that they stopped supporting it. They wouldn't even think about doing that when there is still a official include that requires it!
    My apologies, when I first downloaded and had a look of simba 1.1, the only interpreter was lape, now after just trying it now, it appears its been readded.

  6. #1581
    Join Date
    Oct 2014
    Posts
    22
    Mentioned
    0 Post(s)
    Quoted
    12 Post(s)

    Default

    To make it antiban more often, do i set the number higher or lower?

    Thanks.

  7. #1582
    Join Date
    Oct 2014
    Posts
    10
    Mentioned
    0 Post(s)
    Quoted
    8 Post(s)

    Default

    [Error] C:\Users\shawn\Downloads\[SRL-OSR][Reflection][v1.2] ineedbots AIO Woodcutter.simba(49:10): Unknown identifier 'R_GetTileGlobal' at line 50
    Compiling failed. :O? anyone can help me out?

  8. #1583
    Join Date
    Nov 2014
    Posts
    8
    Mentioned
    0 Post(s)
    Quoted
    4 Post(s)

    Default

    For some reason, whenever I try to run the script, it says, Fatal Error: Unable to spawn a SMART client do you know what the problem could be?
    Last edited by joester308; 11-04-2014 at 03:19 AM.

  9. #1584
    Join Date
    Nov 2014
    Posts
    24
    Mentioned
    1 Post(s)
    Quoted
    8 Post(s)

    Default

    seers both magic tree scripts are broken and do not work

  10. #1585
    Join Date
    Mar 2013
    Posts
    1,010
    Mentioned
    35 Post(s)
    Quoted
    620 Post(s)

    Default

    Quote Originally Posted by tsacmoc View Post
    seers both magic tree scripts are broken and do not work
    You need to update the ids
    #slack4admin2016
    <slacky> I will build a wall
    <slacky> I will ban reflection and OGL hooking until we know what the hell is going on

  11. #1586
    Join Date
    Nov 2014
    Posts
    24
    Mentioned
    1 Post(s)
    Quoted
    8 Post(s)

    Default

    Quote Originally Posted by Harrier View Post
    You need to update the ids
    Idk how, or where is that like around line 975?

  12. #1587
    Join Date
    Mar 2013
    Posts
    2
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    I used this one time and got banned

  13. #1588
    Join Date
    Nov 2014
    Posts
    24
    Mentioned
    1 Post(s)
    Quoted
    8 Post(s)

    Default

    Code:
    program treeCutter;
    {$DEFINE SMART}
    {$I SRL-OSR/SRL.Simba}
    {$I SRL-OSR/SRL/misc/al_functions.simba}
    {$I SRL-OSR/SRL/Reflection/Reflection.simba}
    {$I SRL-OSR/SRL/misc/SmartGraphics.simba}
    
    const Version = 1.2;
    
          VersionPage = 'http://pastebin.com/raw.php?i=yH94SN3X';
          PicturePage = 'http://pastebin.com/raw.php?i=mJtA7u8d';
          ScriptPage = 'http://pastebin.com/raw.php?i=F1FAurL5';
          ForumPage = 'https://villavu.com/forum/showthread.php?t=100300';
    
    //Feel free to use code, GIVE CREDIT WHERE DUE! -ineedbot
    
    type R_TTreeObject = record Tile : TPoint; AliveObjectID, DeadObjectID : integer; Name:string; Index:integer; end;
         R_TTreeObjectArray = array of R_TTreeObject;
    
    function R_MakeTTreeObject(Loc:TPoint;_AliveObjectID,_DeadObjectID:integer;_name:string;_index:integer):R_TTreeObject;
    begin
      with Result do begin
        Tile := Loc;
        AliveObjectID := _AliveObjectID;
        DeadObjectID := _DeadObjectID;
        Name := _name;
        Index := _index;
      end;
    end;
    
    function R_MakeNullTTreeObject:R_TTreeObject;
    begin
      result := R_MakeTTreeObject(Point(-1, -1), -1, -1, '', -1);
    end;
    
    function R_IsValidTTreeObject(tree:R_TTreeObject):boolean;
    begin
      result := false;
      if (tree.tile <> Point(-1, -1)) then
        result := true;
    end;
    
    function R_getClosestTTreeObject(_array:R_TTreeObjectArray):R_TTreeObject;
    var i:integer;
        loc:TPoint;
    begin
      result := R_MakeNullTTreeObject;
      loc := R_GetTileGlobal;
      for i:=0 to high(_array) do begin
        if(R_IsValidTTreeObject(result))then begin
          if(R_DistanceFromTile(_array[i].tile) < R_DistanceFromTile(result.tile))then begin
            result := _array[i];
          end;
        end else begin
          result := _array[i];
        end;
      end;
    end;
    
    function R_getAliveTTreeObjects(_array:R_TTreeObjectArray):R_TTreeObjectArray;
    var i, j:integer;
        loc:TPoint;
        TempObject:TRSObject;
    begin
      loc := R_GetTileGlobal;
      for i:=0 to high(_array) do begin
        TempObject := R_GetObjectAt(0, _array[i].Tile);
        if(TempObject.ID = _array[i].AliveObjectID)then begin
          inc(j);
          SetLength(result, j);
          result[high(result)] := _array[i];
        end;
      end;
      if(high(result) < 0)then
        result := [R_MakeNullTTreeObject];
    end;
    
    function R_getClosestAliveTTreeObject(_array:R_TTreeObjectArray):R_TTreeObject;
    var i:integer;
        loc:TPoint;
        TempObject:TRSObject;
    begin
      result := R_MakeNullTTreeObject;
      loc := R_GetTileGlobal;
      for i:=0 to high(_array) do begin
        TempObject := R_GetObjectAt(0, _array[i].Tile);
        if(TempObject.ID = _array[i].AliveObjectID)then begin
          if(R_IsValidTTreeObject(result))then begin
            if(R_DistanceFromTile(_array[i].tile) < R_DistanceFromTile(result.tile))then begin
              result := _array[i];
            end;
          end else begin
            result := _array[i];
          end;
        end;
      end;
    end;
    
    function R_getTTreeObjectWithIndex(_index:integer; _array:R_TTreeObjectArray):R_TTreeObject;
    var i:integer;
    begin
      result := R_MakeNullTTreeObject;
      for i:=0 to high(_array) do begin
        if(_array[i].Index = _index)then begin
          result := _array[i];
          exit;
        end;
      end;
    end;
    
    function R_isAliveTTreeObject(TTree:R_TTreeObject):boolean;
    var TempObject : TRSObject;
    begin
      TempObject:=R_GetObjectAt(0, TTree.Tile);
      result := false;
      if(TempObject.ID = TTree.AliveObjectID)then begin
        result := true;
      end;
    end;
    
    function R_isDeadTTreeObject(TTree:R_TTreeObject):boolean;
    var TempObject : TRSObject;
    begin
      TempObject:=R_GetObjectAt(0, TTree.Tile);
      result := false;
      if(TempObject.ID = TTree.DeadObjectID)then begin
        result := true;
      end;
    end;
    
    function R_getNextTTreeObject(_array:R_TTreeObjectArray; PTree:R_TTreeObject):R_TTreeObject;
    var CurrentTree : R_TTreeObject;
    begin
      CurrentTree := R_getClosestTTreeObject(_array);
      result := CurrentTree;
    
      if (high(_array) < 1) or not R_IsValidTTreeObject(PTree) then
        exit;
    
      if(CurrentTree.Index < PTree.Index) or (CurrentTree.Index = high(_array)) then begin
        result := R_getTTreeObjectWithIndex(CurrentTree.Index-1, _array);
      end else begin
        result := R_getTTreeObjectWithIndex(CurrentTree.Index+1, _array);
      end;
    end;
    
    function R_ConvertTRSObjectToR_TTreeObject(Obj:TRSObject):R_TTreeObject;
    begin
      with Result do begin
        Tile := Obj.Tile;
        Name := '';
        DeadObjectID := 0;
        AliveObjectID := Obj.ID;
        Index := 0;
      end;
    end;
    
    var LocationTreeObjects : R_TTreeObjectArray;
        PreviousTree : R_TTreeObject;
        Status, ProggieLocation : string;
        LogsChopped, LogID, EnergyToTurnOnRun, ShopDTM, AntiBanOften, HowMuchToChop, Nests, StartingFletchXP, MoneyID, TypeOfJob, StartingWoodXP, ShaftsID, StartingWoodLevel, LastXPXPCheck, LastXPCheck, KnifeID, FletchID : integer;
        AnimationIDs, AxeIDs, NestIDs, customIDs : array of integer;
        PathToBank, PathToTrees, customLocations, customPath1, customPath2, customPath3 : TPointArray;
        ForceDisableBank, MouseKeys, CanBank, Updating, customBank, FarTrees, started, UseDAxeSpec, PowerChop, Fletch : boolean;
        BankLocation, TreesLocation : TPoint;
        MainForm:TForm;
        UsernameBox,PasswordBox,PinBox,WorldBox,RunBox,AntibanBox,ChopBox, CurVerBox, LatVerBox: TEdit;
        BGImage: TImage;
        PlayButton,SaveButton,LoadButton, InfoButton, UpdateButton: TButton;
        MouseKeysBox, BankBox, SpecBox: TCheckBox;
        CurVerLabel, LatVerLabel : TLabel;
        JobBox, LocationBox: TComboBox;
        bmps0: TMufasaBitmap;
        bmp0: TBitmap;
    
    procedure doUpdate;     //thanks shuttleu
    var NetworkVersion : extended;
        NewScript, FileNew : string;
        ThisFile : integer;
    begin
      sleep(5000);
      try
        NetworkVersion := strToFloat(GetPage(VersionPage));
      except
        begin
          writeln('Failed get update version from: '+VersionPage);
          exit;
        end;
      end;
      writeln('Local Version: '+FloatToStr(Version)+'  Network Version: '+FloatToStr(NetworkVersion));
      if(Version < NetworkVersion)then begin
        writeln('Getting script from: '+ScriptPage);
        try
          NewScript := GetPage(ScriptPage);
        except
          begin
            writeln('Failed to get script from: '+ScriptPage);
            exit;
          end;
        end;
        FileNew := ScriptPath + '[SRL-OSR][Reflection][v'+FloatToStr(NetworkVersion)+'] ineedbots AIO Woodcutter.simba';
        writeln('Writing script from '+ScriptPage+' to '+FileNew);
        ThisFile := Rewritefile(FileNew, true);
        try
            WriteFileString(ThisFile, NewScript);
          except
            begin
              writeLn('Failed writing to: '+FileNew);
              CloseFile(ThisFile);
              exit;
            end;
          end;
          CloseFile(ThisFile);
          writeLn('Successfully downloaded new script to ' + FileNew + '. Please open this script.');
      end else begin
        if(Version = NetworkVersion)then begin
          writeln('You are already up to date.');
        end else begin
          writeln('You have a higher version than network?');
        end;
      end;
    end;
    
    procedure OnChange(Sender: TObject);
    begin
      JobBox.TEXT := 'Trees';
      JobBox.ITEMINDEX := -1;
      JobBox.ITEMS.Clear;
      case LocationBox.ITEMINDEX of
        0:begin      //draynor
          JobBox.ITEMS.Add('Oaks');
          JobBox.ITEMS.Add('Willows');
          JobBox.ITEMS.Add('Yews');
        end;
        1:begin   //seers
          JobBox.ITEMS.Add('Willows');
          JobBox.ITEMS.Add('Maples');
          JobBox.ITEMS.Add('Yews');
          JobBox.ITEMS.Add('Magics');
          JobBox.ITEMS.Add('Magics (2)');
        end;
        2:begin   //catherby
          JobBox.ITEMS.Add('Willows');
          JobBox.ITEMS.Add('Yews');
        end;
        3:begin     //varrock
          JobBox.ITEMS.Add('Oaks (west)');
          JobBox.ITEMS.Add('Yews (palace)');
        end;
        4:begin      //Falador
          JobBox.ITEMS.Add('Oaks');
          JobBox.ITEMS.Add('Yews');
        end;
        5:begin   //Rimmington
          JobBox.ITEMS.Add('Willows (p.s.)');
          JobBox.ITEMS.Add('Yews');
        end;
        6:begin   //tree gnome village
          JobBox.ITEMS.Add('Yews');
          JobBox.ITEMS.Add('Magics');
        end;
        7:begin   //lumbridge
          JobBox.ITEMS.Add('Oaks (sell)');
          JobBox.ITEMS.Add('Yews');
          JobBox.ITEMS.Add('Willows (sell)');
          JobBox.ITEMS.Add('Yews (sell)');
        end;
        8:begin   //edgeville
          JobBox.ITEMS.Add('Willows');
          JobBox.ITEMS.Add('Yews');
        end;
        9:begin     //powerchop
          JobBox.ITEMS.Add('Normal Trees');
          JobBox.ITEMS.Add('Oaks');
          JobBox.ITEMS.Add('Willows');
        end;
      end;
    end;
    
    procedure YourClickProcedure(Sender: TObject);
    begin
       if(sender = PlayButton)then begin
        writeln('Starting...');
        MainForm.CLOSE;
        started := true;
       end;
       if(sender = LoadButton)then begin
          if(FileExists(ScriptPath+'ineedbots AIO Woodcutter user details.ini'))then begin
            writeln('Loading...');
            UserNameBox.Text := ReadINI('username', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            PasswordBox.Text := ReadINI('password', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            PinBox.Text := ReadINI('pin', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            ChopBox.Text := ReadINI('chop', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            LocationBox.ITEMINDEX := strToInt(ReadINI('location', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini'));
            OnChange(LocationBox);
            JobBox.ITEMINDEX := strToInt(ReadINI('trees', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini'));
            AntiBanBox.TEXT := ReadINI('antiban', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            runBox.TEXT := ReadINI('run', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            WorldBox.TEXT := ReadINI('world', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini');
            BankBox.CHECKED := strToBool(ReadINI('bank', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini'));
            SpecBox.Checked := strToBool(ReadINI('spec', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini'));
            MouseKeysBox.CHECKED := strToBool(ReadINI('mouse', '0', ScriptPath+'ineedbots AIO Woodcutter user details.ini'));
          end else begin
            writeln(ScriptPath+'ineedbots AIO Woodcutter user details.ini'+' cannot be found...');
          end;
       end;
       if(sender = SaveButton)then begin
          writeln('Saving to '+ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('username', '0', UserNameBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('password', '0', passwordBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('pin', '0', PinBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('chop', '0', ChopBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('trees', '0', IntToStr(JobBox.ITEMINDEX), ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('location', '0', IntToStr(LocationBox.ITEMINDEX), ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('antiban', '0', AntibanBox.TEXT, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('run', '0', RunBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('world', '0', WorldBox.Text, ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('spec', '0', boolToStr(SpecBox.CHECKED), ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('bank', '0', boolToStr(BankBox.CHECKED), ScriptPath+'ineedbots AIO Woodcutter user details.ini');
          writeINI('mouse', '0', boolToStr(MouseKeysBox.CHECKED), ScriptPath+'ineedbots AIO Woodcutter user details.ini');
       end;
       if(sender = InfoButton)then begin
        ShowMessage('Script will stop once it banked/sold/dropped more than this value, make it -1 for infinite.');
       end;
       if(sender = UpdateButton)then begin
        writeln('Attempting to update...');
        MainForm.CLOSE;
        Updating := true;
       end;
    end;
    
    procedure OnlyPostiveNumbers(Sender: TObject; var Key:Char);
    begin
      case toStr(key) of
        #8, '0'..'9':begin
        end;
        else begin
          Key := #0;
        end;
      end;
    end;
    
    procedure OnlyNumbers(Sender: TObject; var Key: Char);
    begin
      case toStr(key) of
        #8, '0'..'9', '-':begin
          if(toStr(key) = '-')then begin
            if(ChopBox.SELSTART <> 0)then begin
              Key := #0;
            end;
          end;
        end;
        else begin
          Key := #0;
        end;
      end;
    end;
    
    procedure NoKeys(Sender: TObject; var Key: Char);
    begin
      Key := #0;
    end;
    
    procedure InitForm;
    var PictureString, VersionString : string;
    begin
    //MainForm\\
     MainForm:=TForm.Create(nil);
      with MainForm do
        begin
          Caption:='ineedbots AIO Woodcutter';
          Left:=213;
          Top:=324;
          Width:=512;
          Height:=333;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          BORDERSTYLE:=bsSingle;
          Font.Size:=0;
      end;
    //UsernameBox\\
     UsernameBox:=TEdit.Create(MainForm);
      with UsernameBox do
        begin
          Parent:=MainForm;
          Text:='Username or eMail';
          Left:=3;
          Top:=37;
          Width:=257;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
    //UsernameBox.MaxLength:=x;
    //UsernameBox.PasswordChar:=*;
      end;
    //PasswordBox\\
     PasswordBox:=TEdit.Create(MainForm);
      with PasswordBox do
        begin
          Parent:=MainForm;
          Text:='Password';
          Left:=270;
          Top:=37;
          Width:=234;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
          MaxLength:=20;
          PasswordChar:='*';
      end;
    //PinBox\\
     PinBox:=TEdit.Create(MainForm);
      with PinBox do
        begin
          Parent:=MainForm;
          Text:='';
          Left:=47;
          Top:=82;
          Width:=80;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@OnlyPostiveNumbers;
          Font.Size:=0;
          MaxLength:=4;
          PasswordChar:='*';
      end;
    //WorldBox\\
     WorldBox:=TEdit.Create(MainForm);
      with WorldBox do
        begin
          Parent:=MainForm;
          Text:='';
          Left:=67;
          Top:=116;
          Width:=80;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@OnlyPostiveNumbers;
          Font.Size:=0;
          MaxLength:=2;
    //WorldBox.PasswordChar:=*;
      end;
    //RunBox\\
     RunBox:=TEdit.Create(MainForm);
      with RunBox do
        begin
          Parent:=MainForm;
          Text:='50';
          Left:=118;
          Top:=152;
          Width:=80;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@OnlyPostiveNumbers;
          Font.Size:=0;
          MaxLength:=3;
    //RunBox.PasswordChar:=*;
      end;
    //SpecBox\\
     SpecBox:=TCheckBox.Create(MainForm);
      with SpecBox do
        begin
          Parent:=MainForm;
          Caption:='Use DAxe Spec?';
          Checked:=false;
          Left:=350;
          Top:=270;
          Width:=64;
          Height:=19;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //AntibanBox\\
     AntibanBox:=TEdit.Create(MainForm);
      with AntibanBox do
        begin
          Parent:=MainForm;
          Text:='7500';
          Left:=134;
          Top:=227;
          Width:=80;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@OnlyPostiveNumbers;
          Font.Size:=0;
          MaxLength:=6;
    //AntibanBox.PasswordChar:=*;
      end;
    //ChopBox\\
     ChopBox:=TEdit.Create(MainForm);
      with ChopBox do
        begin
          Parent:=MainForm;
          Text:='-1';
          Left:=167;
          Top:=188;
          Width:=80;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@OnlyNumbers;
          Font.Size:=0;
          MaxLength:=6;
    //ChopBox.PasswordChar:=*;
      end;
    //BGImage\\
     BGImage:=TImage.Create(MainForm);
      with BGImage do
        begin
          Parent:=MainForm;
          Left:=0;
          Top:=0;
          Width:=512;
          Height:=333;
          try
            PictureString := GetPage(PicturePage);
          except
            begin
              writeln('Failed to get picture string from: '+PicturePage);
            end;
          end;
          bmps0:=GetMufasaBitmap(BitmapFromString(512,333,PictureString));
          bmp0:=bmps0.ToTBitmap;
          Picture.Bitmap.handle:=bmp0.handle;
      end;
    //PlayButton\\
     PlayButton:=TButton.Create(MainForm);
      with PlayButton do
        begin
          Parent:=MainForm;
          Caption:='Play';
          Left:=432;
          Top:=302;
          Width:=75;
          Height:=25;
          OnClick:=@YourClickProcedure;
          //Font.Name:=default;
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //InfoButton\\
     InfoButton:=TButton.Create(MainForm);
      with InfoButton do
        begin
          Parent:=MainForm;
          Caption:='?';
          Left:=257;
          Top:=187;
          Width:=17;
          Height:=25;
          OnClick:=@YourClickProcedure;
          //Font.Name:=default;
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //SaveButton\\
     SaveButton:=TButton.Create(MainForm);
      with SaveButton do
        begin
          Parent:=MainForm;
          Caption:='Save';
          Left:=87;
          Top:=302;
          Width:=75;
          Height:=25;
          OnClick:=@YourClickProcedure;
          //Font.Name:=default;
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //LoadButton\\
     LoadButton:=TButton.Create(MainForm);
      with LoadButton do
        begin
          Parent:=MainForm;
          Caption:='Load';
          Left:=5;
          Top:=301;
          Width:=75;
          Height:=25;
          OnClick:=@YourClickProcedure;
          //Font.Name:=default;
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
      //UpdateButton\\
     UpdateButton:=TButton.Create(MainForm);
      with UpdateButton do
        begin
          Parent:=MainForm;
          Caption:='Update';
          Left:=350;
          Top:=100;
          Width:=75;
          Height:=25;
          OnClick:=@YourClickProcedure;
          //Font.Name:=default;
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
      CurVerLabel:=TLabel.Create(MainForm);
      with CurVerLabel do
        begin
          Parent:=MainForm;
          Caption:='Local Version:';
          Left:=194;
          Top:=85;
          Width:=42;
          Height:=16;
          Font.Name:='Comic Sans MS';
          Font.Color:=clAqua;
          Font.Size:=0;
      end;
      //CurVerBox\\                                                                 //i
     CurVerBox:=TEdit.Create(MainForm);
      with CurVerBox do
        begin
          Parent:=MainForm;
          Text:=toStr(version);
          Left:=300;
          Top:=85;
          Width:=40;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@NoKeys;
          Font.Size:=0;
          MaxLength:=6;
    //ChopBox.PasswordChar:=*;
      end;
      LatVerLabel:=TLabel.Create(MainForm);
      with LatVerLabel do
        begin
          Parent:=MainForm;
          Caption:='Network Version:';
          Left:=170;
          Top:=120;
          Width:=42;
          Height:=16;
          Font.Name:='Comic Sans MS';
          Font.Color:=clAqua;
          Font.Size:=0;
      end;
       //LatVerBox\\
     LatVerBox:=TEdit.Create(MainForm);
      with LatVerBox do
        begin
          Parent:=MainForm;
          try
            VersionString := GetPage(VersionPage);
          except
            begin
              writeln('Failed getting version text from: '+VersionPage);
            end;
          end;
          Text:=VersionString;
          Left:=300;
          Top:=120;
          Width:=40;
          Height:=23;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          ONKEYPRESS:=@NoKeys;
          Font.Size:=0;
          MaxLength:=6;
    //ChopBox.PasswordChar:=*;
      end;
    //MouseKeysBox\\
     MouseKeysBox:=TCheckBox.Create(MainForm);
      with MouseKeysBox do
        begin
          Parent:=MainForm;
          Caption:='Mouse Keys?';
          Checked:=false;
          Left:=210;
          Top:=270;
          Width:=99;
          Height:=19;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //BankBox\\
     BankBox:=TCheckBox.Create(MainForm);
      with BankBox do
        begin
          Parent:=MainForm;
          Caption:='Force Disable Bank?';
          Checked:=false;
          Left:=33;
          Top:=270;
          Width:=65;
          Height:=19;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
      end;
    //JobBox\\
     JobBox:=TComboBox.Create(MainForm);
      with JobBox do
        begin
          Parent:=MainForm;
          Left:=360;
          Top:=4;
          Width:=150;
          Height:=23;
          Caption:='Trees';
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
          ONKEYPRESS:=@NoKeys;
      end;
      LocationBox:=TComboBox.Create(MainForm);
      with LocationBox do
        begin
          Parent:=MainForm;
          Left:=205;
          Top:=4;
          Width:=150;
          Height:=23;
          Caption:='Location';
          //add your items here
          Items.Add('Draynor');
          Items.Add('Seers');
          Items.Add('Catherby');
          Items.Add('Varrock');
          Items.Add('Falador');
          Items.Add('Rimmington');
          Items.Add('Gnome Tree Village');
          Items.Add('Lumbridge');
          Items.Add('Edgeville');
          Items.Add('Powerchop');
          //End items
          OnChange:=@OnChange;
          Font.Name:='Comic Sans MS';
          Font.Color:=clDefault;
          Font.Size:=0;
          ONKEYPRESS:=@NoKeys;
      end;
    end;
    
    procedure SafeInitForm;
    var
      v: TVariantArray;
    begin
      writeln('Starting form...');
      setarraylength(V, 0);
      ThreadSafeCall('InitForm', v);
      started := false;
      Updating := false;
    end;
    
    procedure ShowFormModal;
    begin
      MainForm.ShowModal;
    end;
    
    procedure SafeShowFormModal;
    var
      v: TVariantArray;
    begin
      SetArrayLength(V, 0);
      ThreadSafeCall('ShowFormModal', v);
      FreeBitMap(0);
    end;
    
    procedure DeclarePlayers;
    var KeepThingsClean : integer;
    begin
      HowManyPlayers := 1;
      NumberOfPlayers(HowManyPlayers);
      CurrentPlayer := 0;
      Players[0].Name := UsernameBox.TEXT;//Username
      Players[0].Pass := PasswordBox.Text;//Password
      Players[0].Pin  := PinBox.TEXT;//Bank Pin (if none,leave blank)
      Players[0].WorldInfo  := [WorldBox.TEXT]; //Enter a desired world or leave blank for random
      Players[0].Active := true;//used for logging n stuff - ineedbot
      Players[0].Nick := 'Goau';//Short chunk of IGN//unused anymore...
      Players[0].Member := True;//Keep true
      Players[0].LampSkill := SKILL_Woodcutting;
    
      if(Players[0].WorldInfo[0] <> '') then begin
          SMART_World := Players[0].WorldInfo[0];
          Players[0].WorldInfo  := ['3'+WorldBox.Text];
      end;
    
      case LocationBox.ITEMINDEX of
        0:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=18;//draynor oaks
            1:KeepThingsClean:=0;//dranor willows
            2:KeepThingsClean:=1;//draynor yews
          end;
        end;
        1:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=17; //seers willows
            1:KeepThingsClean:=2; //seers maples
            2:KeepThingsClean:=3; //seers yews
            3:KeepThingsClean:=4; //seers magics
            4:KeepThingsClean:=5; //seers magics(2)
          end;
        end;
        2:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=16; //catherby willows
            1:KeepThingsClean:=6; //catherby yews
          end;
        end;
        3:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=12; //varrock west oaks
            1:KeepThingsClean:=7; //varrock west yews
          end;
        end;
        4:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=15; //falador oaks
            1:KeepThingsClean:=8; //falador yews
          end;
        end;
        5:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=14; //rimmington willows (port sarim)
            1:KeepThingsClean:=9; //rimmington yews
          end;
        end;
        6:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=19; //gnome yews
            1:KeepThingsClean:=20; //gnome magics
          end;
        end;
        7:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=21;//lumbridge oaks
            1:KeepThingsClean:=24;//lumbridge yews
            2:KeepThingsClean:=25;//lumbridge willows no fletch
            3:KeepThingsClean:=26;//lumbridge yews sell
          end;
        end;
        8:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=23;//edgeville willows
            1:KeepThingsClean:=22;//edgeville yews
          end;
        end;
        9:begin
          case JobBox.ITEMINDEX of
            0:KeepThingsClean:=10;//powerchop trees
            1:KeepThingsClean:=13; //powerchop oaks
            2:KeepThingsClean:=11;//powerchop willows
          end;
        end;
      end;
    
      AntiBanOften := strToInt(AntiBanBox.Text);
      EnergyToTurnOnRun := strToInt(RunBox.Text);
      TypeOfJob := KeepThingsClean;
      HowMuchToChop := strToInt(ChopBox.Text);
      MouseKeys := MouseKeysBox.CHECKED;
      ForceDisableBank := BankBox.CHECKED;
      UseDAxeSpec := SpecBox.Checked;
    end;
    
    procedure DeclareVars;
    var i : integer;
    begin
      status := 'Setting up...';
    
      StartingWoodXP := R_GetSkillExp(Skill_Woodcutting);
      StartingWoodLevel := R_GetMaxSkillLevel(Skill_Woodcutting);
      LastXPXPCheck := StartingWoodXP;
      StartingFletchXP := R_GetSkillExp(Skill_Fletching);
      Marktime(LastXPCheck);
    
      LogsChopped := 0;
      Nests := 0;
    
      for i:=0 to 1000 do begin
        if(not FileExists(ScriptPath+'ineedbots AIO Woodcutter proggy '+toStr(i)+'.png'))then begin
          ProggieLocation := ScriptPath+'ineedbots AIO Woodcutter proggy '+toStr(i)+'.png';
          i:=1000;
        end;
       end;
    
      ShopDTM := DTMFromString('maQEAAHicE2RgYEgB4lggDgFiXyD2AmJnIHYD4iAgzgfiPCAuA+I6IK4F4iogzgDiJCBOBmJ9RgYGQyA2RsIgMW0gNgNiIyDWBWI9qJweVA7ENgViTSD+P0MejJGBh50xCg1Tg4xBcjDMD1RDKWakAsYAAFUXGnk=');
      AddOnTerminate('FreeDTMZ');
    
      R_CombatRandoms := false;
      SRL_CombatRandoms := false;
    
      AnimationIDs := [879, 877, 875, 873, 871, 869, 867, 2846];
      AxeIDs := [1353, 6739, 1359];
      NestIDs := [5070, 5071, 5072, 5073, 5074, 5075, 7413, 11966];
      PreviousTree := R_MakeNullTTreeObject;
      KnifeID := 946;
      FletchID := 1248;
      ShaftsID := 53;
      MoneyID := 996;
    
      BankLocation := Point(-1, -1);
      LocationTreeObjects := [R_MakeTTreeObject(Point(-1, -1), -1, -1, '', 0)];
      PathToBank := [Point(-1, -1)];
      PathToTrees := [Point(-1, -1)];
      TreesLocation := Point(-1, -1);
      LogID := -1;
      CanBank := false;
      customBank := false;
      FarTrees := false;
      customIDs := [-1];
      customLocations := [Point(-1, -1)];
      customPath1 := [Point(-1, -1)];
      customPath2 := [Point(-1, -1)];
      customPath3 := [Point(-1, -1)];
      PowerChop := false;
      Fletch := false;
    
      case TypeOfJob of
        0:begin     //draynor willows
          BankLocation := Point(3091, 3245);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3084, 3237), 11763, 9471, 'Willow', 0), R_MakeTTreeObject(Point(3085, 3236), 11759, 9471, 'Willow', 1), R_MakeTTreeObject(Point(3088, 3235), 11755, 9711, 'Willow', 2), R_MakeTTreeObject(Point(3088, 3232), 11759, 9471, 'Willow', 3), R_MakeTTreeObject(Point(3088, 3228), 11761, 9471, 'Willow', 4)];
          PathToBank := [Point(3086, 3237), Point(3087, 3242), Point(3087, 3247), Point(3092, 3247), Point(3093, 3244)];
          PathToTrees := [Point(3093, 3244), Point(3089, 3247), Point(3087, 3242), Point(3086, 3237)];
          TreesLocation := Point(3086, 3237);
          LogID := 1520;
          CanBank := true;
        end;
        1:begin       //draynor yews
          BankLocation := Point(3091, 3245);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3147, 3255), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(3152, 3231), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(3166, 3220), 11758, 9714, 'Yew', 2), R_MakeTTreeObject(Point(3185, 3227), 11758, 9714, 'Yew', 3)];
          PathToBank := [Point(3152, 3229), Point(3147, 3229), Point(3142, 3229), Point(3137, 3229), Point(3132, 3229), Point(3127, 3228), Point(3122, 3228), Point(3117, 3228), Point(3112, 3230), Point(3108, 3234), Point(3104, 3238), Point(3105, 3243), Point(3104, 3248), Point(3099, 3250), Point(3094, 3248), Point(3093, 3243)];
          PathToTrees := [Point(3093, 3244), Point(3096, 3249), Point(3101, 3250), Point(3105, 3246), Point(3105, 3241), Point(3105, 3236), Point(3109, 3233), Point(3113, 3230), Point(3118, 3228), Point(3123, 3228), Point(3128, 3228), Point(3133, 3228), Point(3138, 3228), Point(3143, 3228), Point(3148, 3229)];
          TreesLocation := Point(3152, 3231);
          LogID := 1516;
          CanBank := true;
          FarTrees := true;
        end;
        2:begin          //seers maples
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2721, 3502), 11762, 9712, 'Maple', 0), R_MakeTTreeObject(Point(2727, 3502), 11762, 9712, 'Maple', 1), R_MakeTTreeObject(Point(2730, 3502), 11762, 9712, 'Maple', 2), R_MakeTTreeObject(Point(2732, 3500), 11762, 9712, 'Maple', 3)];
          PathToBank := [Point(2725, 3501), Point(2720, 3499), Point(2718, 3494), Point(2720, 3489), Point(2724, 3486), Point(2725, 3491)];
          PathToTrees := [Point(2725, 3491), Point(2725, 3486), Point(2720, 3489), Point(2718, 3494), Point(2721, 3499), Point(2726, 3499)];
          TreesLocation := Point(2728, 3500);
          LogID := 1518;
          CanBank := true;
        end;
        3:begin             //seers yews
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2715, 3460), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(2706, 3460), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(2706, 3465), 11758, 9714, 'Yew', 2)];
          PathToBank := [Point(2714, 3462), Point(2718, 3465), Point(2719, 3470), Point(2723, 3474), Point(2725, 3479), Point(2724, 3484), Point(2725, 3489), Point(2725, 3491)];
          PathToTrees := [Point(2726, 3491), Point(2726, 3486), Point(2727, 3481), Point(2726, 3476), Point(2724, 3471), Point(2723, 3466), Point(2718, 3463), Point(2714, 3462)];
          TreesLocation := Point(2710, 3462);
          LogID := 1516;
          CanBank := true;
        end;
        4:begin              //seers magics
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2692, 3425), 11764, 9713, 'Magic', 0), R_MakeTTreeObject(Point(2691, 3428), 11764, 9713, 'Magic', 1), R_MakeTTreeObject(Point(2696, 3424), 11764, 9713, 'Magic', 2)];
          PathToBank := [Point(2695, 3425), Point(2700, 3425), Point(2702, 3430), Point(2702, 3435), Point(2701, 3440), Point(2704, 3444), Point(2708, 3448), Point(2713, 3451), Point(2717, 3454), Point(2719, 3459), Point(2719, 3464), Point(2719, 3469), Point(2722, 3473), Point(2725, 3478), Point(2727, 3483), Point(2726, 3488), Point(2725, 3491)];
          PathToTrees := [Point(2726, 3490), Point(2726, 3485), Point(2727, 3480), Point(2727, 3475), Point(2727, 3470), Point(2728, 3465), Point(2727, 3460), Point(2725, 3455), Point(2721, 3452), Point(2721, 3447), Point(2719, 3442), Point(2714, 3440), Point(2713, 3435), Point(2711, 3430), Point(2707, 3426), Point(2702, 3425), Point(2697, 3425), Point(2693, 3424)];
          TreesLocation := Point(2693, 3425);
          LogID := 1513;
          CanBank := true;
        end;
        5:begin               //seers magics 2
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2705, 3397), 11765, 9713, 'Magic', 0), R_MakeTTreeObject(Point(2705, 3399), 11765, 9713, 'Magic', 1), R_MakeTTreeObject(Point(2699, 3397), 11765, 9713, 'Magic', 2), R_MakeTTreeObject(Point(2699, 3399), 11765, 9713, 'Magic', 3)];
          PathToBank := [Point(2701, 3396), Point(2704, 3392), Point(2709, 3392), Point(2714, 3393), Point(2714, 3398), Point(2716, 3403), Point(2715, 3408), Point(2715, 3413), Point(2714, 3418), Point(2714, 3423), Point(2713, 3428), Point(2713, 3433), Point(2713, 3438), Point(2710, 3442), Point(2712, 3447), Point(2717, 3449), Point(2720, 3453), Point(2720, 3458), Point(2720, 3463), Point(2720, 3468), Point(2722, 3473), Point(2725, 3478), Point(2727, 3483), Point(2726, 3488), Point(2726, 3491)];
          PathToTrees := [Point(2725, 3491), Point(2726, 3486), Point(2727, 3481), Point(2726, 3476), Point(2724, 3471), Point(2723, 3466), Point(2723, 3461), Point(2719, 3457), Point(2716, 3453), Point(2713, 3448), Point(2710, 3444), Point(2710, 3439), Point(2711, 3434), Point(2713, 3429), Point(2713, 3424), Point(2713, 3419), Point(2715, 3414), Point(2715, 3409), Point(2716, 3404), Point(2716, 3399), Point(2715, 3394), Point(2710, 3393), Point(2705, 3392), Point(2701, 3395), Point(2702, 3397)];
          TreesLocation := Point(2700, 3397);
          LogID := 1513;
          CanBank := true;
        end;
        6:begin                //catherby yews
          BankLocation := Point(2809, 3442);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2758, 3434), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(2756, 3431), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(2761, 3432), 11758, 9714, 'Yew', 2), R_MakeTTreeObject(Point(2755, 3434), 11758, 9714, 'Yew', 3), R_MakeTTreeObject(Point(2760, 3428), 11758, 9714, 'Yew', 4), R_MakeTTreeObject(Point(2766, 3428), 11758, 9714, 'Yew', 5)];
          PathToBank := [Point(2760, 3430), Point(2765, 3430), Point(2770, 3431), Point(2775, 3433), Point(2780, 3435), Point(2785, 3432), Point(2790, 3432), Point(2795, 3433), Point(2800, 3433), Point(2805, 3433), Point(2808, 3437), Point(2809, 3439)];
          PathToTrees := [Point(2809, 3439), Point(2805, 3436), Point(2801, 3433), Point(2796, 3433), Point(2791, 3433), Point(2786, 3432), Point(2781, 3434), Point(2776, 3435), Point(2771, 3433), Point(2766, 3431), Point(2761, 3430), Point(2759, 3430)];
          TreesLocation := Point(2758, 3432);
          LogID := 1516;
          CanBank := true;
        end;
        7:begin                 //varrock west yews
          BankLocation := Point(3186, 3436);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3205, 3504), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(3209, 3500), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(3222, 3503), 11758, 9714, 'Yew', 2)];
          PathToBank := [Point(3201, 3503), Point(3197, 3500), Point(3195, 3495), Point(3195, 3490), Point(3195, 3485), Point(3195, 3480), Point(3194, 3475), Point(3194, 3470), Point(3195, 3465), Point(3197, 3460), Point(3198, 3455), Point(3203, 3454), Point(3205, 3449), Point(3208, 3445), Point(3211, 3441), Point(3212, 3436), Point(3208, 3432), Point(3204, 3428), Point(3199, 3430), Point(3194, 3430), Point(3189, 3430), Point(3184, 3431), Point(3184, 3436)];
          PathToTrees := [Point(3184, 3436), Point(3184, 3431), Point(3189, 3430), Point(3194, 3430), Point(3199, 3430), Point(3204, 3428), Point(3208, 3432), Point(3212, 3436), Point(3211, 3441), Point(3208, 3445), Point(3205, 3449), Point(3203, 3454), Point(3198, 3455), Point(3197, 3460), Point(3195, 3465), Point(3194, 3470), Point(3194, 3475), Point(3195, 3480), Point(3195, 3485), Point(3195, 3490), Point(3195, 3495), Point(3197, 3500), Point(3201, 3503)];
          TreesLocation := Point(3207, 3502);
          LogID := 1516;
          CanBank := true;
        end;
        8:begin                //falador yews
          BankLocation := Point(3012, 3354);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2997, 3312), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(3020, 3316), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(3042, 3320), 11758, 9714, 'Yew', 2)];
          PathToBank := [Point(3006, 3317), Point(3006, 3322), Point(3006, 3327), Point(3006, 3332), Point(3006, 3337), Point(3006, 3342), Point(3006, 3347), Point(3006, 3352), Point(3006, 3357), Point(3011, 3359), Point(3013, 3357)];
          PathToTrees := [Point(3012, 3355), Point(3009, 3359), Point(3008, 3354), Point(3008, 3349), Point(3008, 3344), Point(3008, 3339), Point(3008, 3334), Point(3008, 3329), Point(3008, 3324), Point(3007, 3319), Point(3002, 3319), Point(2998, 3315), Point(2997, 3314)];
          TreesLocation := Point(2997, 3314);
          LogID := 1516;
          CanBank := true;
          FarTrees := true;
        end;
        9:begin                //rimmington yews
          BankLocation := Point(3045, 3234); //'deposit'
          LocationTreeObjects := [R_MakeTTreeObject(Point(2936, 3230), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(2941, 3233), 11758, 9714, 'Yew', 1), R_MakeTTreeObject(Point(2934, 3234), 11758, 9714, 'Yew', 2), R_MakeTTreeObject(Point(2935, 3226), 11758, 9714, 'Yew', 3)];
          PathToBank := [Point(2935, 3228), Point(2940, 3228), Point(2945, 3229), Point(2950, 3228), Point(2955, 3228), Point(2960, 3227), Point(2965, 3225), Point(2970, 3225), Point(2975, 3225), Point(2980, 3225), Point(2985, 3223), Point(2990, 3223), Point(2995, 3222), Point(3000, 3222), Point(3005, 3219), Point(3009, 3215), Point(3014, 3215), Point(3019, 3217), Point(3024, 3217), Point(3027, 3221), Point(3027, 3226), Point(3027, 3231), Point(3029, 3236), Point(3034, 3236), Point(3039, 3236), Point(3044, 3236), Point(3045, 3235)];
          PathToTrees := [Point(3045, 3235), Point(3040, 3236), Point(3035, 3236), Point(3030, 3236), Point(3028, 3231), Point(3028, 3226), Point(3028, 3221), Point(3024, 3218), Point(3019, 3218), Point(3014, 3216), Point(3009, 3215), Point(3004, 3215), Point(2999, 3214), Point(2994, 3214), Point(2989, 3213), Point(2984, 3213), Point(2979, 3211), Point(2975, 3214), Point(2971, 3217), Point(2966, 3217), Point(2961, 3217), Point(2956, 3217), Point(2951, 3219), Point(2946, 3220), Point(2943, 3224), Point(2939, 3228), Point(2938, 3229)];
          TreesLocation := Point(2938, 3229);
          LogID := 1516;
          CanBank := true;
          customBank := true;
        end;
        10:begin             //power chop tres
          customIDs := [1278, 1276, 1286, 1282];
          LogID := 1512;
          Fletch := true;
          PowerChop := true;
        end;
        11:begin              //powerchop willows
          customIDs := [11755, 11763, 11759, 11761];
          LogID := 1520;
          Fletch := true;
          PowerChop := true;
        end;
        12:begin              //varrock west oaks
          BankLocation := Point(3186, 3436);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3168, 3421), 11756, 1356, 'Oak', 0), R_MakeTTreeObject(Point(3166, 3412), 11756, 1356, 'Oak', 1), R_MakeTTreeObject(Point(3162, 3417), 11756, 1356, 'Oak', 2)];
          PathToBank := [Point(3170, 3422), Point(3174, 3425), Point(3178, 3428), Point(3182, 3432), Point(3184, 3436)];
          PathToTrees := [Point(3184, 3436), Point(3181, 3432), Point(3177, 3429), Point(3173, 3426), Point(3170, 3421), Point(3170, 3423)];
          TreesLocation := Point(3170, 3422);
          LogID := 1522;
          CanBank := true;
        end;
        13:begin              //powerchop oaks
          customIDs := [11756];
          LogID := 1522;
          Fletch := true;
          PowerChop := true;
        end;
        14:begin  //port sarim willows
          BankLocation := Point(3045, 3234); //'deposit'
          LocationTreeObjects := [R_MakeTTreeObject(Point(3057, 3255), 11755, 9711, 'Willow', 0), R_MakeTTreeObject(Point(3062, 3255), 11755, 9711, 'Willow', 1), R_MakeTTreeObject(Point(3063, 3253), 11755, 9711, 'Willow', 2), R_MakeTTreeObject(Point(3057, 3252), 11755, 9711, 'Willow', 3)];
          PathToBank := [Point(3059, 3252), Point(3054, 3252), Point(3052, 3247), Point(3047, 3246), Point(3042, 3245), Point(3042, 3240), Point(3042, 3235), Point(3045, 3235)];
          PathToTrees := [Point(3045, 3235), Point(3042, 3239), Point(3042, 3244), Point(3047, 3246), Point(3052, 3247), Point(3054, 3252), Point(3059, 3253)];
          TreesLocation := Point(3059, 3252);
          LogID := 1520;
          CanBank := true;
          customBank := true;
        end;
        15:begin //falador oaks
          BankLocation := Point(3012, 3354);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3001, 3367), 11756, 1356, 'Oak', 0)];
          TreesLocation := Point(3001, 3365);
          LogID := 1522;
          CanBank := true;
        end;
        16:begin //catherby willows
          BankLocation := Point(2809, 3442);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2786, 3430), 11755, 9711, 'Willow', 0), R_MakeTTreeObject(Point(2783, 3427), 11755, 9711, 'Willow', 1), R_MakeTTreeObject(Point(2781, 3428), 11755, 9711, 'Willow', 2), R_MakeTTreeObject(Point(2768, 3427), 11755, 9711, 'Willow', 3), R_MakeTTreeObject(Point(2771, 3428), 11755, 9711, 'Willow', 4)];
          TreesLocation := Point(2783, 3428);
          LogID := 1520;
          CanBank := true;
        end;
        17:begin  //seers willows
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2719, 3506), 11755, 9711, 'Willow', 0), R_MakeTTreeObject(Point(2711, 3512), 11755, 9711, 'Willow', 1), R_MakeTTreeObject(Point(2709, 3511), 11755, 9711, 'Willow', 2), R_MakeTTreeObject(Point(2712, 3509), 11755, 9711, 'Willow', 3), R_MakeTTreeObject(Point(2708, 3514), 11755, 9711, 'Willow', 4)];
          TreesLocation := Point(2711, 3510);
          LogID := 1520;
          CanBank := true;
        end;
        18:begin //draynor oaks
          BankLocation := Point(3091, 3245);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3103, 3243), 11756, 1356, 'Oak', 0)];
          TreesLocation := Point(3102, 3245);
          LogID := 1522;
          CanBank := true;
        end;
        19:begin //gnome yews
          LocationTreeObjects := [R_MakeTTreeObject(Point(2433, 3426), 11758, 9714, 'Yew', 2), R_MakeTTreeObject(Point(2439, 3436), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(2433, 3441), 11758, 9714, 'Yew', 1)];
          customLocations := [Point(2445, 3435){plane 0 stairs}, Point(2445, 3434){plane 1 stairs}];
          BankLocation := Point(2447, 3427);
          TreesLocation := Point(2441, 3435);
          canBank := true;
          customBank := true;
          logID:=1516;
        end;
        20:begin //gnome magics
          writeln('Gnome Magics are not yet completed.');
        end;
        21:begin //lumbridge oaks
          BankLocation := Point(3212, 3246);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3204, 3247), 11756, 1356, 'Oak', 0), R_MakeTTreeObject(Point(3205, 3240), 11756, 1356, 'Oak', 1)];
          TreesLocation := Point(3206, 3242);
          LogID := 1521;
          CanBank := true;
          customBank := true;
          customIDs := [506, 507 {general store guys}];
          customLocations := [Point(3215, 3245){closed door object}];
          {TPA of inside general}
          customPath1 := [Point(3214, 3244), Point(3214, 3245), Point(3214, 3247), Point(3213, 3250), Point(3213, 3249), Point(3213, 3248), Point(3213, 3247), Point(3213, 3246), Point(3213, 3245), Point(3212, 3249), Point(3212, 3248), Point(3212, 3247), Point(3212, 3246), Point(3212, 3245), Point(3212, 3244), Point(3211, 3243), Point(3211, 3244), Point(3211, 3245), Point(3211, 3246), Point(3211, 3247), Point(3211, 3248), Point(3211, 3249), Point(3211, 3250), Point(3210, 3249), Point(3210, 3244), Point(3210, 3243), Point(3209, 3244), Point(3209, 3245), Point(3209, 3246), Point(3209, 3247), Point(3209, 3248), Point(3209, 3249), Point(3209, 3250)];
          Fletch := False;
        end;
        22:begin //edgeville yews
          BankLocation := Point(3095, 3491);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3086, 3469), 11758, 9714, 'Yew', 0), R_MakeTTreeObject(Point(3086, 3481), 11758, 9714, 'Yew', 1)];
          PathToBank := [Point(3094, 3470), Point(3094, 3475), Point(3094, 3480), Point(3093, 3485), Point(3090, 3489), Point(3093, 3491)];
          PathToTrees := [Point(3093, 3491), Point(3090, 3487), Point(3093, 3483), Point(3093, 3478), Point(3094, 3473), Point(3093, 3470)];
          TreesLocation := Point(3087, 3471);
          LogID := 1516;
          CanBank := true;
          customBank := true;
          customLocations := [Point(3091, 3470) {closed door object}];
          {TPA of inside yew area}
          customPath1 := [Point(3091, 3473), Point(3091, 3472), Point(3091, 3471), Point(3091, 3470), Point(3091, 3469), Point(3091, 3468), Point(3090, 3468), Point(3090, 3469), Point(3090, 3470), Point(3090, 3471), Point(3090, 3472), Point(3090, 3473), Point(3089, 3468), Point(3089, 3469), Point(3089, 3470), Point(3089, 3471), Point(3089, 3472), Point(3089, 3473), Point(3089, 3474), Point(3089, 3475), Point(3089, 3476), Point(3089, 3479), Point(3089, 3480), Point(3088, 3482), Point(3088, 3481), Point(3088, 3480), Point(3088, 3479), Point(3088, 3478), Point(3088, 3477), Point(3088, 3476), Point(3088, 3475), Point(3088, 3474), Point(3088, 3473), Point(3088, 3472), Point(3088, 3471), Point(3088, 3470), Point(3088, 3469), Point(3088, 3468), Point(3087, 3471), Point(3087, 3472), Point(3087, 3476), Point(3087, 3477), Point(3087, 3478), Point(3087, 3479), Point(3086, 3479), Point(3086, 3478), Point(3086, 3477), Point(3086, 3476), Point(3086, 3472), Point(3086, 3471), Point(3085, 3471), Point(3085, 3472), Point(3085, 3473), Point(3085, 3474), Point(3085, 3475), Point(3085, 3476), Point(3085, 3477), Point(3085, 3478), Point(3085, 3479)];
        end;
        23:begin //edgeville willows
          BankLocation := Point(3095, 3491);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3113, 3495), 11755, 9711, 'Willow', 0)];
          TreesLocation := Point(3112, 3495);
          LogID := 1520;
          CanBank := true;
        end;
        24:begin //lumb yew
          BankLocation := Point(3208, 3221);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3250, 3202), 11758, 9714, 'Yew', 0)];
          TreesLocation := Point(3248, 3202);
          LogID := 1516;
          CanBank := true;
          PathToBank := [Point(3248, 3202), Point(3243, 3201), Point(3238, 3201), Point(3236, 3206), Point(3236, 3211), Point(3234, 3216), Point(3229, 3218), Point(3224, 3218), Point(3219, 3218), Point(3215, 3215), Point(3214, 3210), Point(3209, 3210), Point(3206, 3209)];
          PathToTrees := [Point(3206, 3210), Point(3211, 3210), Point(3215, 3213), Point(3215, 3218), Point(3220, 3218), Point(3225, 3218), Point(3230, 3218), Point(3232, 3213), Point(3234, 3208), Point(3236, 3203), Point(3241, 3201), Point(3246, 3201), Point(3248, 3201)];
          customBank := true;
          customLocations := [Point(3205, 3208){'Climb-'}];
        end;
        25:begin //lumbridge willows
          BankLocation := Point(3212, 3246);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3234, 3238), 11755, 9711, 'Willow', 0), R_MakeTTreeObject(Point(3233, 3245), 11755, 9711, 'Willow', 1)];
          TreesLocation := Point(3234, 3242);
          LogID := 1519;
          CanBank := true;
          customBank := true;
          customIDs := [506, 507 {general store guys}];
          customLocations := [Point(3215, 3245){closed door object}];
          {TPA of inside general}
          customPath1 := [Point(3214, 3244), Point(3214, 3245), Point(3214, 3247), Point(3213, 3250), Point(3213, 3249), Point(3213, 3248), Point(3213, 3247), Point(3213, 3246), Point(3213, 3245), Point(3212, 3249), Point(3212, 3248), Point(3212, 3247), Point(3212, 3246), Point(3212, 3245), Point(3212, 3244), Point(3211, 3243), Point(3211, 3244), Point(3211, 3245), Point(3211, 3246), Point(3211, 3247), Point(3211, 3248), Point(3211, 3249), Point(3211, 3250), Point(3210, 3249), Point(3210, 3244), Point(3210, 3243), Point(3209, 3244), Point(3209, 3245), Point(3209, 3246), Point(3209, 3247), Point(3209, 3248), Point(3209, 3249), Point(3209, 3250)];
        end;
        26:begin //lumbridge yews
          BankLocation := Point(3212, 3246);
          LocationTreeObjects := [R_MakeTTreeObject(Point(3185, 3227), 11758, 9714, 'Yew', 0)];
          TreesLocation := Point(3186, 3229);
          LogID := 1516;
          CanBank := true;
          customBank := true;
          customIDs := [506, 507 {general store guys}];
          customLocations := [Point(3215, 3245){closed door object}];
          {TPA of inside general}
          customPath1 := [Point(3214, 3244), Point(3214, 3245), Point(3214, 3247), Point(3213, 3250), Point(3213, 3249), Point(3213, 3248), Point(3213, 3247), Point(3213, 3246), Point(3213, 3245), Point(3212, 3249), Point(3212, 3248), Point(3212, 3247), Point(3212, 3246), Point(3212, 3245), Point(3212, 3244), Point(3211, 3243), Point(3211, 3244), Point(3211, 3245), Point(3211, 3246), Point(3211, 3247), Point(3211, 3248), Point(3211, 3249), Point(3211, 3250), Point(3210, 3249), Point(3210, 3244), Point(3210, 3243), Point(3209, 3244), Point(3209, 3245), Point(3209, 3246), Point(3209, 3247), Point(3209, 3248), Point(3209, 3249), Point(3209, 3250)];
        end;
      end;
    
      if ForceDisableBank then
        CanBank := false;
    end;
    
    procedure FreeDTMZ;
    begin
      FreeDTMs([ShopDTM]);
      writeln('Status: '+status);
      SMART_ClearCanvas;
    end;
    
    procedure DoOnScreenPaint;
    var CurrentWoodXP, CurrentWoodLevel, CurrentRunningTime, tempInt, i, CurrentFletchXP : integer;
        Job, CurrentRunTime, Drop, BuildString : string;
        _point : TPoint;
        TempObject : TRSObject;
    begin
      CurrentWoodXP := R_GetSkillExp(Skill_Woodcutting);
      CurrentWoodLevel := R_GetMaxSkillLevel(Skill_Woodcutting);
      CurrentRunTime := TimeRunning;
      CurrentRunningTime := GetTimeRunning;
      CurrentFletchXP := R_GetSkillExp(Skill_Fletching);
      case TypeOfJob of
        0: Job := 'Draynor Willows';
        1: Job := 'Draynor Yews';
        2: Job:= 'Seers Maples';
        3: Job:= 'Seers Yews';
        4: Job:= 'Seers Magics';
        5: Job:= 'Seers Magics(2)';
        6: Job:= 'Catherby Yews';
        7: Job:= 'Varrock Palace Yews';
        8: Job:= 'Falador Yews';
        9: Job:= 'Rimmington Yews';
        10: Job:= 'Normal Trees';
        11: Job:= 'Willow Trees';
        12: Job:= 'Varrock West Oaks';
        13: Job:= 'Oak Trees';
        14: Job:= 'Port Sarim Willows';
        15: Job:= 'Falador Oaks';
        16: Job:= 'Catherby Willows';
        17: Job:= 'Seers Willows';
        18: Job:= 'Draynor Oaks';
        19: Job:= 'Tree Gnome Village Yews';
        20: Job:= 'Tree Gnome Village Magics';
        21: Job:= 'Lumbridge Oaks (sell)';
        22: Job:= 'Edgeville Yews';
        23: Job:= 'Edgeville Willows';
        24: Job:= 'Lumbridge Yews';
        25: Job:= 'Lumbridge Willows (sell)';
        26: Job:= 'Lumbridge Yews (sell)';
      end;
      if canBank then begin
        Drop:='banked';
      end else begin
        Drop:='dropped';
      end;
      BuildString := 'Tree details: ';
    
      SMART_ClearCanvas;
      tempInt := 5;
      SMART_DrawText(5, tempInt, 'upchars07', ' ', 65280);
      tempInt := tempInt + 15;
      SMART_DrawText(5, tempInt, 'upchars07', 'Current job: ' + Job + '  Banking: '+boolToStr(canBank), 65280);
      tempInt := tempInt + 15;
      SMART_DrawText(5, tempInt, 'upchars07', 'Status: ' + status, 65280);
      tempInt := tempInt + 15;
      SMART_DrawText(5, tempInt, 'upchars07', 'Woodcutting XP Gained: ' + InttoStr(round(CurrentWoodXP - StartingWoodXP))+', per hour '+InttoStr(round(((CurrentWoodXP - StartingWoodXP))*3600)/(CurrentRunningTime / 1000))+', current level '+intTostr(CurrentWoodLevel)+', gained '+InttoStr(CurrentWoodLevel - StartingWoodLevel), 65280);
      tempInt := tempInt + 15;
      SMART_DrawText(5, tempInt, 'upchars07', 'XP Gained / 67: ' + InttoStr(round((CurrentWoodXP - StartingWoodXP) / 67))+' Nests collected: '+intToStr(Nests), 65280);
      tempInt := tempInt + 15;
      SMART_DrawText(5, tempInt, 'upchars07', 'Ran for ' + CurrentRunTime + '.' + ' Script version: '+FloatToStr(version), 65280);
      tempInt := tempInt + 15;
      if(Fletch)then begin
        SMART_DrawText(5, tempInt, 'upchars07', 'Fletching XP Gained: ' + InttoStr(round(CurrentFletchXP - StartingFletchXP))+', per hour '+InttoStr(round(((CurrentFletchXP - StartingFletchXP))*3600)/(CurrentRunningTime / 1000)), 65280);
        tempInt := tempInt + 15;
      end;
    
      for i:=0 to high(LocationTreeObjects) do begin
        BuildString := BuildString + ' tree' + intToStr(LocationTreeObjects[i].Index) + ':';
        TempObject := R_GetObjectAt(0, LocationTreeObjects[i].tile);
        if(TempObject.ID = LocationTreeObjects[i].AliveObjectID)then begin
          BuildString := BuildString + 'alive ';
          _point := R_TileToMS(LocationTreeObjects[i].tile);
          if(PointInBox(_point, MSBox))then begin
            SMART_DrawText(_point.x, _point.y, 'upchars07', 'Alive ' + LocationTreeObjects[i].Name, clAqua);
          end;
        end else begin
          if(TempObject.ID = LocationTreeObjects[i].DeadObjectID)then begin
            BuildString := BuildString + 'dead ';
            _point := R_TileToMS(LocationTreeObjects[i].tile);
            if(PointInBox(_point, MSBox))then begin
              SMART_DrawText(_point.x, _point.y, 'upchars07', 'Dead ' + LocationTreeObjects[i].Name, clAqua);
            end;
          end else begin
            if(TempObject.id = 0)then begin
              _point := R_TileToMS(LocationTreeObjects[i].tile);
              if(PointInBox(_point, MSBox))then begin
                SMART_DrawText(_point.x, _point.y, 'upchars07', 'Unloaded ' + LocationTreeObjects[i].Name, clAqua);
              end;               //useless to paint an unloaded tile??
              BuildString := BuildString + 'unloaded ';
            end else begin
              _point := R_TileToMS(LocationTreeObjects[i].tile);
              if(PointInBox(_point, MSBox))then begin
                SMART_DrawText(_point.x, _point.y, 'upchars07', 'Unknown ' + LocationTreeObjects[i].Name, clAqua);
              end;
              BuildString := BuildString + 'unknown ';
            end;
          end;
        end;
      end;
      SMART_DrawText(5, tempInt, 'upchars07', BuildString, 65280);
    end;
    
    procedure UpdateScreen(_string:string);
    begin
      if (_string <> '') then begin
        status := _string;
      end;
      DoOnScreenPaint;
    end;
    
    procedure doFindAllRandoms;
    begin
      //SetScreenName(R_GetPlayerName);
      if(R_FindNormalRandoms{ or FindNormalRandoms})then begin
        UpdateScreen('Found random...');
      end;
    end;
    
    function R_TryMakeTileOnMS(tile:TPoint;time:integer;reset:boolean):boolean;
    var FailSafeTime : integer;
        ResetAngle, ResetHeight : extended;
    begin
      if(reset)then begin
         ResetAngle := R_GetMinimapAngleDeg;
         ResetHeight := R_GetCameraZ;
      end;
    
      markTime(FailSafeTime);
      while((TimeFromMark(FailSafeTime) < time) and (not PointInBox(R_TileToMS(tile), MSBox))) do begin
        R_RotateCameraToTile(tile);
        if(not PointInBox(R_TileToMS(tile), MSBox)) then begin
          keyDown(VK_Down);
          sleep(50+random(20));
          keyUp(VK_Down);
        end;
      end;
    
      if(PointInBox(R_TileToMS(tile), MSBox))then begin
        Result := true;
      end else begin
        Result := false;
      end;
    
      if(reset)then begin
         MakeCompass('W');
         markTime(FailSafeTime);
         while((TimeFromMark(FailSafeTime) < time) and (abs(R_GetCameraZ - ResetHeight) > 100))do begin
           keyDown(VK_Up);
           sleep(50+random(20));
           keyUp(VK_Up);
         end;
      end;
    end;
    
    function R_OnTileArray(TP:TpointArray):Boolean; //does R_Ontile on an array of tiles
    var
      Loc: TPoint;
      i: integer;
    begin
      Loc := R_GetTileGlobal;
      Result := false;
      for i:=0 to high(TP) do
      begin
         if loc = TP[i] then
         begin
          result := true;
          i := high(TP);
         end;
      end;
    end;
    
    function R_ArrayOfItemsInInv(_array:array of integer):boolean;//does R_InventoryContains with an array of item ids
    var i : integer;
    begin
       result := false;
       for i:=0 to high(_array) do begin
          if(R_InventoryContains(_array[i]))then
            result := true;
       end;
    end;
    
    function R_TileOnMS(tile:TPoint):boolean;
    begin
      result := PointInBox(R_TileToMS(tile), MSBox);
    end;
    
    function R_TileOnMSHeight(tile:Tpoint;height:integer):boolean;
    begin
      result := PointInBox(R_TileToMSHeight(tile, height), MSBox);
    end;
    
    procedure RandomALMouse(x, y, ranx, rany: integer);
    var xs, ys: Integer;
    begin
      GetMousePos(xs, ys);
      AL_SetMouseSpeed(RandomRange(15, 25));
      case random(5) of
        0: AL_MissMouse(Point(x, y), ranx, rany);
        1: AL_AccurateMMouse(Point(x, y), ranx, rany);
        2: AL_HumanMMouse(Point(x, y), ranx, rany);
        3: AL_ShiftWindMouse(xs, ys, x, y, 4 + Random(15), 2 + Random(18), 5, 10, 20, 5);
        4: AL_BrakeWindMouse(xs, ys, x, y, 7 + Random(13), 3 + Random(17), 5, 10, 5, True);
        5: AL_HumanWindMouse(xs, ys, x, y, 7 + Random(15), 2 + Random(20), 5, 10, 5);
      end;
    end;
    
    function R_MouseTileHeight(Tile: TPoint; ranx, rany, ClickType, Height: Integer): Boolean;
    var
      Tilex, Tiley: Integer;
      Tile2: TPoint;
    begin
      Result:= false;
      Tile2.x:= 0;
      Tile2.y:= 0;
      Tile2:= R_TileToMsHeight(Tile, Height);
      if (Tile2.x = 0) or (Tile2.y = 0) or (Tile2.x > 40000) or (Tile2.y > 40000) or (Tile2.x < -40000) or (Tile2.y < -40000) then
        Exit;
      Tilex:= iAbs(Tile2.x);
      Tiley:= iAbs(Tile2.y);
      //MouseBoxEdit(Tilex-ranx, Tiley-rany, Tilex+ranx, Tiley+rany, ClickType);
      RandomALMouse(Tilex, Tiley, ranx, rany);
      AL_FastClick(ClickType);
      Result:= true;
    end;
    
    function R_GetClosestObjectIDs(ObjType:integer;Distance:integer;ObjIDs:array of integer):TRSObject;
    var
      Objects, FObjects: TRSObjectArray;
      I, J: Integer;
    begin
      result := RSObject(-1, -1, Point(-1, -1));
      Objects := R_GetObjectsDistance(ObjType, Distance);
      for i:=0 to high(objects) do begin
        if(inIntArray(ObjIDs, Objects[i].ID))then begin
          Inc(J);
          SetLength(FObjects, J);
          FObjects[high(FObjects)] := Objects[i];
        end;
      end;
      for i:=0 to high(FObjects) do begin
        if(result.id = -1)then begin
          result := FObjects[i];
        end else begin
          if(R_DistanceFromTile(FObjects[i].Tile) < R_DistanceFromTile(Result.Tile))then begin
            result := FObjects[i];
          end;
        end;
      end;
    end;
    
    function r_getGItemDistanceIDs(distance:integer;IDs:array of Integer):TGroundItem;
    var GItems : TGroundItemArray;
        i : integer;
    begin
      GItems := R_GetGroundItemsDistance(distance);
      result := GroundItem(-1, -1, Point(-1, -1));
      for i:=0 to high(GItems) do begin
        if(inIntArray(IDs, GItems[i].ID))then begin
          result := GItems[i];
          exit;
        end;
      end;
    end;
    
    function R_InteractTileWaitHeight(Tile: TPoint; Option: String; Timeout, Height: Integer): Boolean;
    var
      i: Integer;
      deg: Extended;
    begin
      Result:= false;
      deg:= (360-R_GetMinimapAngleDeg);
      i := GetSystemTime;
      repeat
        if (BankScreen) then
          Exit;
        R_MouseTileHeight(Tile, 15, 15, Mouse_Move, Height);
        wait(100 + random(50));
        Result:= R_SelectOption(Option);
        if (((GetSystemTime - i) < Timeout) and not(Result) and (random(100) > 50)) then
          R_RandomMovement;
      until (((GetSystemTime - i) > Timeout) or (Result));
      R_MakeCompass(deg);
    end;
    
    function R_InteractNPC(_npc:TNPC; action:string):boolean;
    begin
       result := false;
       if(R_IsValidTNPC(_npc))then begin
         if(not R_TryMakeTileOnMS(_npc.tile, 5000, false))then begin
           R_BlindWalk(_npc.tile);
           Flag;
           Sleep(random(2000));
         end;
         if(R_TryMakeTileOnMS(_npc.tile, 5000, false))then begin
           RandomALMouse(R_TileToMS(_npc.tile).x, R_TileToMS(_npc.tile).y, 5, 5);
           if(R_OptionExists(action))then begin
              result := true;
              if(R_IsUpTextMulti([action]))then begin
                 Al_FastClick(mouse_left);
                 Flag;
                 doFindAllRandoms;
                 Sleep(random(2000));
              end else begin
                 Al_FastClick(mouse_right);
                 R_selectOption(action);
                 Flag;
                 doFindAllRandoms;
                 Sleep(random(2000));
              end;
           end;
         end;
       end;
    end;
    
    function R_TryInteractNPCID(NpcID:integer;action:string;tries:integer;var returnNPC:TNPC):boolean;
    var i:integer;
        _npcs:TNPCArray;
    begin
      result := false;
      returnNPC := NULL_NPC;
      for i:=0 to tries do begin
        _npcs := R_SortNPCs(R_getNPCs(NpcID));
        if(high(_npcs) > -1)then begin
          returnNPC := _npcs[0];
        end;
        if(R_InteractNPC(returnNPC, action))then begin
          result := true;
          i:=tries;
        end;
      end;
    end;
    
    function ChooseOptionMultiExFast(Texts: TStringArray; TextType: String; Action: fnct_ActionOptions): Boolean;
    var
       B: TBox;
       i, H, x, R: Integer;
       T: TPoint;
       Options: array of TOptions;
    begin
      Result := False;
      Options := GetChooseOptions();
      if (Length(Options) < 1) then
        Exit;
      H := High(Options);
      for i := 0 To H do
      begin
        if ArrInStr(Texts, Options[i].Str) then
        begin
          Result := True;
          B := Options[i].Bounds;
          GetMousePos(T.x, T.y);
          R:= Min(((B.X2 - B.X1) shr 1), 5); //Prevents x2 passed to MouseBoxEx being smaller than x1
          case Action of
            ClickLeft:
              if PointInBox(T, B) then
                ClickMouse2(true)
              else
                ClickMouse(randomRange(B.x1 + R, B.x2 - R),RandomRange(B.Y1, B.Y1 + 5), mouse_left);
            Move:
              if not PointInBox(T, B) then
                MoveMouse(randomRange(B.x1 + R, B.x2 - R),RandomRange(B.Y1, B.Y1 + 5));
    
            Nothing:
              begin
              end;
    
            else
              srl_warn('ChooseOptionMultiEx', 'ClickRight not a valid click for RS menus!', warn_AllVersions);
          end;
          Exit;
        end;
      end;
      B := Options[0].BigBox;//to mmouse away
      if Action <> Nothing then
      begin
        x := Max(B.X1 - 52, 0);
        if x = 0 then
          x := B.X2+10;                                                          //n
        MMouse(x, Max(B.Y1 - 50, 0), 40, B.Y2-B.Y1);
        Wait(200 + Random(100));
      end;
    end;
    
    procedure DoRun;
    begin
     if((R_GetRunEnergy > EnergyToTurnOnRun) and (not R_IsRunOn)) then begin
        AL_MouseBoxEx(572, 130, 590, 144, 7, Mouse_left);
        sleep(2500+ random(500));
     end;
    end;
    
    procedure DoLogin;
    begin
      if(not LoggedIn)then begin
        LogInPlayer;
        MakeCompass('W');
        SetAngle(0);
      end;
    end;
    
    procedure AdjustCamera;
    begin
      SetAngle(0);
      MakeCompass('W');
    end;
    
    procedure AntiBan;
    begin
      case random(AntiBanOften) of
        1..5:BoredHuman;
        6..10:HoverOnlineFriend;
        11..15:SmallRandomMouse;
        16..20:PickUpMouse;
        21..30:MMouseOffClient('Random');
        //31..40:Logout;
        41..60:HoverSkill(Skill_Woodcutting, False);
        61..70:HoverSkill(random(SKILL_COUNT), False);
        71..80:AL_AccurateMMouse(Point(MSCX, MSCY), 100, 100);
        81..90:AL_HumanMMouse(Point(MSCX, MSCY), 100, 100);
        91..100:AL_MissMouse(Point(MSCX, MSCY), 100, 100);
        101..110:ExamineInv;
        111..120:RandomFKeys(true);
        121..130:HoverMovingObject;
        131..140:RandomTab(true);
        141..160:RandomAlMouse(RandomRange(-1000, 1000), RandomRange(-1000, 1000), 100, 100);
      end;
    end;
    
    procedure doProggy;
    var w, h : integer;
        bmp : TBitmap;
    begin
      getClientDimensions(w, h);
      bmp := bitmapFromClient(0, 0, w-1, h-1);
      SetTransparentColor(smart_Canvas.index, 0);
      fastDrawTransparent(0, 0, smart_Canvas.index, bmp);
      saveBitmap(bmp, ProggieLocation);
      writeln('Saving Proggy to '+ProggieLocation);
      freeBitmap(bmp);
    end;
    
    procedure doCount;
    begin
      LogsChopped := LogsChopped + R_InventoryContainsCount([LogID]);
      doProggy;
    end;
    
    
    procedure DoDropping;
    var items : TInventoryItemArray;
        i : integer;
        box : TBox;
    begin
      doCount;
      UpdateScreen('Dropping items...');
      items := R_GetInventoryItems;
      while(R_InvFull and not R_UnderAttack)do begin                             //ee
        for i:=0 to high(items) do begin
          if(not InIntArray(AxeIDs, items[i].ID) and R_InventoryContains(items[i].ID) and not R_UnderAttack and (items[i].ID <> ShaftsID) and (items[i].ID <> KnifeID) and (items[i].ID <> 0))then begin
            if not MouseKeys then begin
              box := invBox(items[i].Slot);
              RandomALMouse(randomRange(box.x1, box.x2), randomRange(box.y1, box.y2), 0, 0);
              sleep(random(100));
              Al_FastClick(mouse_right);
              sleep(random(100));
              R_selectOption('Drop');
              sleep(random(100));
            end else begin
              box := invBox(items[i].Slot);
              MoveMouse(randomRange(box.x1, box.x2), randomRange(box.y1, box.y2));
              sleep(random(100));
              Al_FastClick(mouse_right);
              sleep(random(100));
              ChooseOptionMultiExFast(['Drop'], 'All', ClickLeft);
              sleep(random(100));
            end;
          end;
          items := R_GetInventoryItems;
        end;
      end;
    end;
    
    procedure doNormalSelling;
    var items : TInventoryItemArray;
        i, nullINT, j : integer;
        box : TBox;
    begin
      if(FindDTM(ShopDTM, nullINT, nullINT, MSX1, MSY1, MSX2, MSY2))then
      begin
        doCount;
        UpdateScreen('Selling items...');
        items := R_GetInventoryItems;
        while(FindDTM(ShopDTM, nullINT, nullINT, MSX1, MSY1, MSX2, MSY2) and R_InvFull)do begin
          for j:=0 to 10 do begin
            for i:=0 to high(items) do begin
              if(not InIntArray(AxeIDs, items[i].ID) and not InIntArray(NestIDs, items[i].ID) and R_InventoryContains(items[i].ID) and FindDTM(ShopDTM, nullINT, nullINT, MSX1, MSY1, MSX2, MSY2) and (items[i].ID <> ShaftsID) and (items[i].ID <> MoneyID) and (items[i].ID <> KnifeID) and (items[i].ID <> 0))then begin
                box := invBox(R_GetItemSlot(items[i].ID));
                RandomALMouse(randomRange(box.x1, box.x2), randomRange(box.y1, box.y2), 0, 0);
                sleep(random(100));
                Al_FastClick(mouse_right);
                sleep(random(100));
                R_selectOption('Sell 10');
                sleep(750+random(250));
              end;
              items := R_GetInventoryItems;
            end;
          end;
        end;
      end;
    end;
    
    procedure GoToNormalTreesSpot;
    begin
      UpdateScreen('Going to trees spot...');
      DoRun;
      if((canBank) and (PathToTrees[0] <> Point(-1, -1)) and (R_DistanceFromTile(PathToTrees[0]) < 25) and (R_DistanceFromTile(PathToTrees[high(PathToTrees)]) > R_DistanceFromTile(PathToTrees[0])))then begin
        R_WalkPath(PathToTrees);
      end else begin
        if not PowerChop then begin
          R_BlindWalk(TreesLocation);
        end else begin
        end;
      end;
      Flag;
      Sleep(random(2000));
    end;
    
    procedure doLumbYewCheck(banking:boolean);
    begin
      if(R_GetPlane = 2)then begin
        if banking then begin
        end else begin
          if(not R_TileOnMS(customLocations[0]))then begin
            UpdateScreen('Going to stairs.');
            R_BlindWalk(customLocations[0]);
            flag;
            Sleep(random(2000));
          end;
          UpdateScreen('Going down stairs.');
          if(R_InteractTileWait(customLocations[0], 'Climb-down', 5000))then begin
            flag;
            doFindAllRandoms;
            Sleep(random(2000));
          end;
        end;
      end else begin
        if(R_GetPlane = 1)then begin
          if banking then begin
            if(not R_TileOnMS(customLocations[0]))then begin
              UpdateScreen('Going to stairs.');
              R_BlindWalk(customLocations[0]);
              flag;
              Sleep(random(2000));
            end;
            UpdateScreen('Going up stairs.');
            if(R_InteractTileWait(customLocations[0], 'Climb-up', 5000))then begin
              flag;
              doFindAllRandoms;
              Sleep(random(2000));
            end;
          end else begin
            if(not R_TileOnMS(customLocations[0]))then begin
              UpdateScreen('Going to stairs.');
              R_BlindWalk(customLocations[0]);
              flag;
              Sleep(random(2000));
            end;
            UpdateScreen('Going down stairs.');
            if(R_InteractTileWait(customLocations[0], 'Climb-down', 5000))then begin
              flag;
              doFindAllRandoms;
              Sleep(random(2000));
            end;
          end;
        end else begin
          if banking then begin
            if(not R_TileOnMS(customLocations[0]))then begin
              UpdateScreen('Going to stairs.');
              R_BlindWalk(customLocations[0]);
              flag;
              Sleep(random(2000));
            end;
            UpdateScreen('Going up stairs.');
            if(R_InteractTileWait(customLocations[0], 'Climb-up', 5000))then begin
              flag;
              doFindAllRandoms;
              Sleep(random(2000));
            end;
          end else begin
          end;
        end;
      end;
      if(banking)then begin
        if(R_GetPlane <> 2)then
          doLumbYewCheck(true);
      end else begin
        if(R_GetPlane <> 0)then
          doLumbYewCheck(false);
      end;
    end;
    
    procedure doLumbGenDoorCheck(banking:boolean);
    var tempObject : TRSObject;
    begin
      if ((banking and not R_OnTileArray(customPath1)) or (not banking and R_OnTileArray(customPath1))) then begin
        tempObject := R_GetObjectAt(3, customLocations[0]);
        if(tempObject.ID <> 0)then begin
          UpdateScreen('Door closed!');
          if(not R_TileOnMS(customLocations[0]))then begin
            UpdateScreen('Going to door...');
            R_BlindWalk(customLocations[0]);
            flag;
            Sleep(random(2000));
          end;
          UpdateScreen('Opening door.');
          if(R_OpenDoor(customLocations[0], 'w'))then begin
            flag;
            doFindAllRandoms;
            Sleep(random(2000));
          end;
        end;
      end;
    end;
    
    procedure doEdgeDoorCheck(banking:boolean);
    var tempObject : TRSObject;
    begin
      if ((banking and R_OnTileArray(customPath1)) or (not banking and not R_OnTileArray(customPath1))) then begin
        tempObject := R_GetObjectAt(3, customLocations[0]);
        if(tempObject.ID <> 0)then begin
          UpdateScreen('Door closed!');
          if(not R_TileOnMS(customLocations[0]))then begin
            UpdateScreen('Going to door...');
            R_BlindWalk(customLocations[0]);
            flag;
            Sleep(random(2000));
          end;
          UpdateScreen('Opening door.');
          if(R_OpenDoor(customLocations[0], 'e'))then begin
            flag;
            doFindAllRandoms;
            Sleep(random(2000));
          end;
        end;
      end;
    end;
    
    procedure doGnomeCheck(banking:boolean);
    begin
      if(R_GetPlane = 0)then begin
        if banking then begin
          if(not R_TileOnMS(customLocations[0]))then begin
            UpdateScreen('Going to stairs.');
            R_BlindWalk(customLocations[0]);
            flag;
            Sleep(random(2000));
          end;
          UpdateScreen('Going up stairs.');
          if(R_InteractTileWait(customLocations[0], 'Climb-up', 5000))then begin
            flag;
            doFindAllRandoms;
            Sleep(random(2000));
          end;
        end else begin
        end;
      end else begin
        if banking then begin
        end else begin
          if(not R_TileOnMS(customLocations[1]))then begin
            UpdateScreen('Going to stairs.');
            R_BlindWalk(customLocations[1]);
            flag;
            Sleep(random(2000));
          end;
          UpdateScreen('Going down stairs.');
          if(R_InteractTileWait(customLocations[1], 'Climb-down', 5000))then begin
            flag;
            doFindAllRandoms;
            Sleep(random(2000));
          end;
        end;
      end;
    end;
    
    procedure GoToTreesSpot;
    begin
      if not customBank then begin
        GoToNormalTreesSpot;
      end else begin
        case TypeOfJob of
          9, 14:begin //deposit box
            GoToNormalTreesSpot;
          end;
          21:begin  //sell
            doLumbGenDoorCheck(false);
            GoToNormalTreesSpot;
          end;
          22:begin  //door
            doEdgeDoorCheck(false);
            GoToNormalTreesSpot;
          end;
          19, 20:begin //gnome
            doGnomeCheck(false);
            GoToNormalTreesSpot;
          end;
          24:begin //lumb yew
            doLumbYewCheck(false);
            GoToNormalTreesSpot;
          end;
          25:begin  //sell
            doLumbGenDoorCheck(false);
            GoToNormalTreesSpot;
          end;
          26:begin  //sell
            doLumbGenDoorCheck(false);
            GoToNormalTreesSpot;
          end;
        end;
      end;
    end;
    
    procedure doNormalBanking;
    var items : TInventoryItemArray;
        i : integer;
        box : TBox;
        firstTime : boolean;
    begin
      if(PinPending) then
      begin
        ConfirmPin;
      end;
      if(PinScreen) then
      begin
        InPin(Players[0].Pin);
      end;
      if(BankScreen) then
      begin
        doCount;
        UpdateScreen('Banking items...');
        items := R_GetInventoryItems;
        firstTime := true;
        while(BankScreen and (R_InvFull or firstTime))do begin
          if not R_ArrayOfItemsInInv(AxeIDs) and (not R_InventoryContains(KnifeID) or not Fletch) then begin
            QuickDeposit('inventory');
          end else begin
            for i:=0 to high(items) do begin
              if(not InIntArray(AxeIDs, items[i].ID) and R_InventoryContains(items[i].ID) and BankScreen and (items[i].ID <> KnifeID) and (items[i].ID <> 0))then begin
                box := invBox(items[i].Slot);
                RandomALMouse(randomRange(box.x1, box.x2), randomRange(box.y1, box.y2), 0, 0);
                sleep(random(100));
                Al_FastClick(mouse_right);
                sleep(random(100));
                R_selectOption('Deposit-All');
                sleep(500+random(500));
              end;
              items := R_GetInventoryItems;
            end;
          end;
          firstTime := false;
          if(random(2) = 1)then
            closeBank;
        end;
        GoToTreesSpot;
      end;
    end;
    
    procedure doDepositBox;
    begin
      if(DepositScreen)then begin
        doCount;
        UpdateScreen('Depositing items...');
        Deposit(2, 28, true); //no deposit reflection...
        sleep(1500+random(500));
      end;
    end;
    
    procedure doBanking;
    begin
      if not customBank then begin
        doNormalBanking;
      end else begin
        case TypeOfJob of
          9, 14:begin
            doDepositBox;
          end;
          21:begin  //sell
            doNormalSelling;
          end;
          22:begin  //door
            doNormalBanking;
          end;
          19, 20:begin //gnome
            doNormalBanking;
          end;
          24:begin //lumb yew
            doNormalBanking;
          end;
          25:begin  //sell
            doNormalSelling;
          end;
          26:begin  //sell
            doNormalSelling;
          end;
        end;
      end;
    end;
    
    procedure GoToNormalBank;
    begin
      if CanBank then begin
        UpdateScreen('Going to bank...');
        if(not(R_TileOnMS(BankLocation)))then begin
          DoRun;
          if(PathToBank[0] <> Point(-1, -1))then begin
            if(R_DistanceFromTile(PathToBank[0]) > 25) or (R_DistanceFromTile(PathToBank[high(PathToBank)]) > 25)then
              R_BlindWalk(PathToBank[0]);
            R_WalkPath(PathToBank);
            Flag;
            Sleep(random(2000));
          end else begin
            R_BlindWalk(BankLocation);
            Flag;
            Sleep(random(2000));
          end;
        end;
      end else begin
        UpdateScreen('Running..');
        if not PowerChop then begin
          R_BlindWalk(Point(TreesLocation.x, TreesLocation.y - 10));
        end else begin
          R_BlindWalk(Point(R_GetTileGlobal.x, R_GetTileGlobal.y - 10));
        end;
        Flag;
        Sleep(random(2000));
      end;
    end;
    
    procedure GoToBank;
    begin
      if not customBank then begin
        GoToNormalBank;
      end else begin
        case TypeOfJob of
          9, 14:begin
            GoToNormalBank;                                                      //d
          end;
          21:begin  //sell
            doLumbGenDoorCheck(true);
            GoToNormalBank;
          end;
          22:begin  //door
            doEdgeDoorCheck(true);
            GoToNormalBank;
          end;
          19, 20:begin //gnome
            doGnomeCheck(true);
            GoToNormalBank;
          end;
          24:begin //lumb yew
            GoToNormalBank;
            doLumbYewCheck(true);
          end;
          25:begin  //sell
            doLumbGenDoorCheck(true);
            GoToNormalBank;
          end;
          26:begin  //sell
            doLumbGenDoorCheck(true);
            GoToNormalBank;
          end;
        end;
      end;
    end;
    
    procedure OpenBankNormalUp;
    begin
      if(not BankScreen) and (not PinPending) and (not PinScreen)then begin
        UpdateScreen('Opening bank...');
        if(R_TryMakeTileOnMS(BankLocation, 5000, false))then begin
          R_InteractTileWait(BankLocation, 'Bank B', 5000);
          Flag;
          doFindAllRandoms;
          Sleep(random(2000));
        end;
      end;
    end;
    
    procedure OpenDepositBoxUp;
    begin
      if(not DepositScreen)then begin
        UpdateScreen('Opening deposit box...');
        if(R_TileOnMS(BankLocation))then begin
          R_InteractTileWait(BankLocation, 'Deposit', 5000);
          Flag;
          doFindAllRandoms;
          Sleep(random(2000));
        end;
      end;
    end;
    
    procedure OpenGeneral;
    var NullINT:integer;
        _npc : TNPC;
    begin
      if(not(FindDTM(ShopDTM, nullINT, nullINT, MSX1, MSY1, MSX2, MSY2)))then begin
        UpdateScreen('Opening general store sell interface...');
        if(R_TryInteractNPCID(customIDs[0], 'Trade', 15, _npc))then begin
          Flag;
          doFindAllRandoms;
          Sleep(random(2000));
        end;
      end;
    end;
    
    procedure OpenBankUp;
    begin
      if not customBank then begin
        OpenBankNormalUp;
      end else begin
        case TypeOfJob of
          9, 14:begin
            OpenDepositBoxUp;
          end;
          21:begin  //sell
            OpenGeneral;
          end;
          22:begin  //door
            OpenBankNormalUp;
          end;
          19, 20:begin //gnome
            OpenBankNormalUp;
          end;
          24:begin //lumb yew
            OpenBankNormalUp;
          end;
          25:begin  //sell
            OpenGeneral;
          end;
          26:begin  //sell
            OpenGeneral;
          end;
        end;
      end;
    end;
    
    procedure doSafeChecks;
    var NestItem : TGroundItem;
    begin
      doFindAllRandoms;
      DoRun;
      UpdateScreen('');
      sleep(50);
    
      if(ActivatedItem <> -1)then
        AL_MouseBoxEx(InvBox(ActivatedItem).x1, InvBox(ActivatedItem).y1, InvBox(ActivatedItem).x2, InvBox(ActivatedItem).y2, 0, Mouse_left);
    
      if(bankScreen)then
        CloseBank;
    
      NestItem := r_getGItemDistanceIDs(10, NestIDs);
      if(inIntArray(NestIDs, NestItem.ID) and not R_InvFull)then begin
        writeln('Found nest!');
        if(R_TileOnMS(NestItem.Tile))then begin
          if(R_InteractTileWait(NestItem.Tile, 'Take Bird nest', 5000))then begin
            Inc(Nests);
            Flag;
            Sleep(random(2000));
          end;
        end else begin
          R_BlindWalk(NestItem.Tile);                              //b
          Flag;
          Sleep(random(2000));
        end;
      end;
    
      if(R_UnderAttack)then begin
          UpdateScreen('UNDER ATTACK!!!');
          writeln('UNDER ATTACK RUN! TO BANK!');
          GoToBank;
          if(canBank)then begin
            OpenBankUp;
            DoBanking;
          end;
          sleep(5000);//wait for the hostile to leave us alone
      end;
    
      if(timeFromMark(LastXPCheck) > 360000)then begin   //xp check
          MarkTime(LastXPCheck);
          SetAngle(0);
          MakeCompass('W');
          if(R_GetSkillExp(Skill_Woodcutting) <= LastXPXPCheck)then begin
              UpdateScreen('No woodcutting xp gained within 6 mins...');
              writeln('Didnt gain exp in 6 minutes... Logging out...');
              Logout;
              TerminateScript;
          end;
          LastXPXPCheck := R_GetSkillExp(Skill_Woodcutting);
      end;
    end;
    
    procedure doFletch;
    var p : TPoint;
    begin
      if(R_InventoryContains(KnifeID) and R_InventoryContains(LogID))then begin
        UpdateScreen('Going to fletch');
        Gametab(tab_Inv);
        if(ActivatedItem = -1)then begin
          R_ClickItemBy(KnifeID, 'Use');
          sleep(500 + random(500));
        end;
        if(ActivatedItem <> -1)then begin
          R_ClickItemBy(LogID, 'Use');
          sleep(1250 + random(500));
        end;
        if(LogID = 1512)then begin
          p := Point(76, 410);
        end else begin
          if(LogID = 1514)then begin
            p := Point(377, 410);
          end else begin
            p := Point(261, 411);
          end;
        end;
        RandomAlMouse(p.x, p.y, 10, 10);
        sleep(random(500));
        AL_FastClick(mouse_right);
        if(R_ChooseOption('Make X'))then begin
          sleep(1000 + random(500));
          TypeSend('99');
          sleep(1250 + random(500));
        end;
        while(not R_UnderAttack and (R_GetAnimation = FletchID))do begin
          doSafeChecks;
          UpdateScreen('Fletching...');
          antiBan;
        end;
      end;
    end;
    
    procedure doExtraChecks;
    begin
      if not customBank then begin
      end else begin
        case TypeOfJob of
          21:begin//lumb door
            doLumbGenDoorCheck(false);
          end;
          22:begin//door
            doEdgeDoorCheck(false);
          end;
          19, 20:begin   //gnome
            doGnomeCheck(false);
          end;
          24:begin //lumb yew
            doLumbYewCheck(false);
          end;
          25:begin//lumb door
            doLumbGenDoorCheck(false);
          end;
          26:begin//lumb door
            doLumbGenDoorCheck(false);
          end;
        end;
      end;
    end;
    
    procedure ChopTree;
    var TempObject : TRSObject;
        TreeObject, NextTree : R_TTreeObject;
        firstTime : boolean;
    begin
      doExtraChecks;
      firstTime := true;
      UpdateScreen('Looking for tree...');
      if not PowerChop then begin
        TreeObject := R_getClosestAliveTTreeObject(LocationTreeObjects);
      end else begin
        TreeObject := R_ConvertTRSObjectToR_TTreeObject(R_GetClosestObjectIDs(0, 25, customIDs));
      end;
      if(not R_isValidTTreeObject(TreeObject))then begin
        UpdateScreen('No Tree! D:');
        if FarTrees then begin
          NextTree := R_getNextTTreeObject(LocationTreeObjects, PreviousTree);
          PreviousTree := R_getClosestTTreeObject(LocationTreeObjects);
          UpdateScreen('Going to next tree...');
          if(not R_TileOnMS(NextTree.Tile))then begin
            R_BlindWalk(NextTree.Tile);
            Flag;
            Sleep(random(2000));
          end;
        end else begin
          GoToNormalTreesSpot;
        end;
      end else begin
        if UseDAxeSpec and (R_GetSpecPercent >= 100)then begin
          GameTab(tab_Combat);
          RandomALMouse(645, 432, 5, 5);
          AL_FastClick(mouse_left);
        end;
        UpdateScreen('Found tree! :D');
        PreviousTree := R_getClosestTTreeObject(LocationTreeObjects);
        if(not R_TileOnMSHeight(TreeObject.Tile, 100))then begin
          UpdateScreen('Going to tree...');
          R_BlindWalk(TreeObject.Tile);
          Flag;
          Sleep(random(2000));
        end;
        if(R_TileOnMSHeight(TreeObject.Tile, 100))then begin
          UpdateScreen('Going to chop tree...');
          if(R_InteractTileWaitHeight(TreeObject.Tile, 'Chop down '+TreeObject.Name, 5000, 100))then begin
            Flag;
            doFindAllRandoms;
            sleep(1500 + random(500));
            TempObject := R_GetObjectAt(0, TreeObject.Tile);
            while((TempObject.ID = TreeObject.AliveObjectID) and InIntArray(AnimationIDs, R_GetAnimation) and not R_InvFull)do begin
              TempObject := R_GetObjectAt(0, TreeObject.Tile);
              UpdateScreen('Chopping tree...');
              doSafeChecks;
              if(FirstTime)then begin
                firstTime := false;
                if(random(round(AntiBanOften/5000)) = 1)then
                  MMouseOffClient('Random');
              end;
              AntiBan;
            end;
            if(TempObject.ID <> TreeObject.AliveObjectID) and (TempObject.ID <> TreeObject.DeadObjectID) and InIntArray(AnimationIDs, R_GetAnimation) then begin
              RandomAlMouse(R_TileToMM(R_GetTileGlobal).x, R_TileToMM(R_GetTileGlobal).y, 0, 0);
              Al_FastClick(mouse_left);
              UpdateScreen('Ent tree...!');
            end;
          end;
        end;
      end;
    end;
    
    begin
      SafeInitForm;
      SafeShowFormModal;
      if(started and (JobBox.ITEMINDEX > -1)) then begin
        DeclarePlayers;                                  //o
        ClearDebug;
        SetupSRL;
        SetupReflection;
        ActivateClient;
        SMART_ClearCanvas;
        DoLogin;
        DeclareVars;
        repeat
          if((R_GetLoginState > 10) and (R_GetLoginState <= 30))then begin
            doSafeChecks;
            if R_InvFull then begin
              if Fletch then
                doFletch;
              if canBank then begin
                GoToBank;
                OpenBankUp;
                doBanking;
              end else begin
                DoDropping;
              end;
            end else begin
              ChopTree;
            end;
          end else begin
            DoLogin;
          end;                                                    //t
        until((HowMuchToChop <> -1) and (HowMuchToChop >= LogsChopped));
        LogOut;
        writeln('Stopping because chopped more than '+toStr(HowMuchToChop)+' logs.');
      end;
      if(Updating)then
        doUpdate;
    end.

    I added some jobs; 'Lumbridge Willows (sell)', and 'Lumbridge Yews (sell)'. They are great for getting Ultimate Ironman mode to lvl 60 wc without getting banned.

  14. #1589
    Join Date
    Mar 2013
    Posts
    34
    Mentioned
    0 Post(s)
    Quoted
    7 Post(s)

    Default

    So far so good:

    Attached Images Attached Images

  15. #1590
    Join Date
    Dec 2014
    Posts
    1
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    damn.. this has no teak powerchop on it.. I can't find one :s

  16. #1591
    Join Date
    Mar 2013
    Posts
    34
    Mentioned
    0 Post(s)
    Quoted
    7 Post(s)

    Default

    Best proggy yet:


  17. #1592
    Join Date
    Dec 2014
    Posts
    5
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Great Script.
    Last edited by jtsnowboy; 12-26-2014 at 03:53 AM.

  18. #1593
    Join Date
    Dec 2014
    Posts
    5
    Mentioned
    0 Post(s)
    Quoted
    2 Post(s)

    Default

    guys how did you start it? when the download link for it is an updater?

    so i copied and pasted the code, now it says starting and succesful execute but it never starts? when i click the play
    Last edited by Justin; 12-27-2014 at 10:52 PM.

  19. #1594
    Join Date
    Dec 2014
    Posts
    3
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    Ahh.. The link for al_functions is broken for me? Just me or am I missing something?

  20. #1595
    Join Date
    Jan 2007
    Posts
    45
    Mentioned
    0 Post(s)
    Quoted
    5 Post(s)

    Default

    You need to download al_functions
    If I see you autoing with level 3/default clothes/crap name I WILL report you. Auto Correctly.

    www.facebook.com/AngeVashes

  21. #1596
    Join Date
    Dec 2014
    Posts
    3
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    The link on OP for al_functions leads to a page that supposedly doesn't exist, I can't download it

  22. #1597
    Join Date
    Dec 2011
    Location
    East Coast, USA
    Posts
    4,231
    Mentioned
    112 Post(s)
    Quoted
    1869 Post(s)

    Default

    Quote Originally Posted by TomboMX View Post
    The link on OP for al_functions leads to a page that supposedly doesn't exist, I can't download it
    Search around on the forum a bit, it was uploaded recently and mentioned just today
    GitLab projects | Simba 1.4 | Find me on IRC or Discord | ScapeRune scripts | Come play bot ScapeRune!

    <BenLand100> we're just in the transitional phase where society reclassifies guns as Bad™ before everyone gets laser pistols

  23. #1598
    Join Date
    May 2013
    Posts
    60
    Mentioned
    0 Post(s)
    Quoted
    29 Post(s)

    Default

    I'm really uncertain how to fix the ID's for these tree's!!

    Code:
    //seers magics 2
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2705, 3397), 2123, 9713, 'Magic', 0), R_MakeTTreeObject(Point(2705, 3399), 2123, 9713, 'Magic', 1), R_MakeTTreeObject(Point(2699, 3397), 2123, 9713, 'Magic', 2), R_MakeTTreeObject(Point(2699, 3399), 2123, 9713, 'Magic', 3)];
          PathToBank := [Point(2701, 3396), Point(2704, 3392), Point(2709, 3392), Point(2714, 3393), Point(2714, 3398), Point(2716, 3403), Point(2715, 3408), Point(2715, 3413), Point(2714, 3418), Point(2714, 3423), Point(2713, 3428), Point(2713, 3433), Point(2713, 3438), Point(2710, 3442), Point(2712, 3447), Point(2717, 3449), Point(2720, 3453), Point(2720, 3458), Point(2720, 3463), Point(2720, 3468), Point(2722, 3473), Point(2725, 3478), Point(2727, 3483), Point(2726, 3488), Point(2726, 3491)];
          PathToTrees := [Point(2725, 3491), Point(2726, 3486), Point(2727, 3481), Point(2726, 3476), Point(2724, 3471), Point(2723, 3466), Point(2723, 3461), Point(2719, 3457), Point(2716, 3453), Point(2713, 3448), Point(2710, 3444), Point(2710, 3439), Point(2711, 3434), Point(2713, 3429), Point(2713, 3424), Point(2713, 3419), Point(2715, 3414), Point(2715, 3409), Point(2716, 3404), Point(2716, 3399), Point(2715, 3394), Point(2710, 3393), Point(2705, 3392), Point(2701, 3395), Point(2702, 3397)];
          TreesLocation := Point(2700, 3397);
          LogID := 1514;
          CanBank := true;


    Edit: al_functions.simba
    Attached Images Attached Images
    Last edited by squirrelz; 01-03-2015 at 01:34 AM.

  24. #1599
    Join Date
    Aug 2007
    Posts
    539
    Mentioned
    20 Post(s)
    Quoted
    266 Post(s)

    Default

    Quote Originally Posted by squirrelz View Post
    I'm really uncertain how to fix the ID's for these tree's!!

    Code:
    //seers magics 2
          BankLocation := Point(2727, 3494);
          LocationTreeObjects := [R_MakeTTreeObject(Point(2705, 3397), 2123, 9713, 'Magic', 0), R_MakeTTreeObject(Point(2705, 3399), 2123, 9713, 'Magic', 1), R_MakeTTreeObject(Point(2699, 3397), 2123, 9713, 'Magic', 2), R_MakeTTreeObject(Point(2699, 3399), 2123, 9713, 'Magic', 3)];
          PathToBank := [Point(2701, 3396), Point(2704, 3392), Point(2709, 3392), Point(2714, 3393), Point(2714, 3398), Point(2716, 3403), Point(2715, 3408), Point(2715, 3413), Point(2714, 3418), Point(2714, 3423), Point(2713, 3428), Point(2713, 3433), Point(2713, 3438), Point(2710, 3442), Point(2712, 3447), Point(2717, 3449), Point(2720, 3453), Point(2720, 3458), Point(2720, 3463), Point(2720, 3468), Point(2722, 3473), Point(2725, 3478), Point(2727, 3483), Point(2726, 3488), Point(2726, 3491)];
          PathToTrees := [Point(2725, 3491), Point(2726, 3486), Point(2727, 3481), Point(2726, 3476), Point(2724, 3471), Point(2723, 3466), Point(2723, 3461), Point(2719, 3457), Point(2716, 3453), Point(2713, 3448), Point(2710, 3444), Point(2710, 3439), Point(2711, 3434), Point(2713, 3429), Point(2713, 3424), Point(2713, 3419), Point(2715, 3414), Point(2715, 3409), Point(2716, 3404), Point(2716, 3399), Point(2715, 3394), Point(2710, 3393), Point(2705, 3392), Point(2701, 3395), Point(2702, 3397)];
          TreesLocation := Point(2700, 3397);
          LogID := 1514;
          CanBank := true;


    Edit: al_functions.simba
    Go to .\includes\srl-osr\srl\reflection\tools\ and run the Id_display.simba, it'll show on your game screen the ids, if you don't mind, could you tell me the id so i can update the id? thanks

  25. #1600
    Join Date
    Dec 2014
    Posts
    3
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    It goes to log in and I get this error
    Error: Exception: Invalid variant type cast at line 477
    The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge]
    The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3]

    Any idea?

Page 64 of 87 FirstFirst ... 1454626364656674 ... LastLast

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
  •