Results 1 to 1 of 1

Thread: Script Freezes After A While

  1. #1
    Join Date
    Feb 2009
    Posts
    1,447
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default Script Freezes After A While

    I've been making a willow chopper for the last little while now and for a long time, my script just freezes up for some reason. I can't seem to find out why, maybe someone else could help me?

    SCAR Code:
    {$Define SMART} //Comment out if you dont want to use SMART
    program New;
    {$IfDef SMART}
      {.include SRL\SRL\Misc\Smart.scar}
    {$EndIf}
    {.include srl/srl.scar}
    {.include srl/srl/misc/quickchat.scar}

    const
      Switch_Worlds = True; //If you want to randomly switch worlds
      Signed_SMART = True; //If you want to use signed SMART
      Members_World = False; //If you want to auto on a members world
      SMART_World = 155; //The world SMART will load up
      Print_Proggy_Debug_Canvas = True; //If you want to print the proggy on SMART

    type
      Tree = record
        UpText: TStringArray;
        Colors: TIntegerArray;
        Hue: TExtendedArray;
        Sat: TExtendedArray;
        Tol: TIntegerArray;
    end;

    var
      X, Y: Integer;
      SmartCrash: Boolean;
      Willow: Tree;

    procedure DeclarePlayers;
    begin
      HowManyPlayers := 3; //How many plays you want to auto on
      NumberOfPlayers(HowManyPlayers);
      CurrentPlayer := 0;

      with Players[0] do
      begin
        Name :=''; //Character Name
        Pass :=''; //Character Pass
        Nick :=''; //Nickname 3 - 4 Letter's of char name
        Active := False; //To be ran in the script?
        BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
      end;

      with Players[1] do
      begin
        Name :=''; //Character Name
        Pass :=''; //Character Pass
        Nick :=''; //Nickname 3 - 4 Letter's of char name
        Active := True; //To be ran in the script?
        BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
      end;
     
      with Players[2] do
      begin
        Name :=''; //Character Name
        Pass :=''; //Character Pass
        Nick :=''; //Nickname 3 - 4 Letter's of char name
        Active := True; //To be ran in the script?
        BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
      end;

    end;

    {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{
    //----------------------------------------------------------------------------\\
    \\-------DO NOT TOUCH ANYTHING BELOW UNLESS YOU KNOW WHAT YOU'RE DOING--------//
    //----------------------------------------------------------------------------\\
    }
    {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

    function PostVars: Boolean;
    var
      Dbase: string;
      Client, I, Logs, Trees, Loads, Responds: Integer;
      XP: Extended;
    begin
      for I := 0 to HowManyPlayers - 1 do
      begin
        Logs := Logs + Players[i].Integers[2];
        Trees := Trees + Players[i].Integers[1];
        Loads := Loads + Players[i].Integers[3];
        XP := XP + (67.5 * Players[i].Integers[2]);
        Responds := Responds + Players[i].Integers[5];
      end;
      Client := InitializeHTTPClient(False, False);
      ClearPostData(Client);
      Wait(10);
      AddPostVariable(Client, 'Logs', IntToStr(Logs));
      AddPostVariable(Client, 'Hours', FloatToStr(Round(GetTimeRunning/1000/60/60)));
      AddPostVariable(Client, 'Trees', IntToStr(Trees));
      AddPostVariable(Client, 'Loads', IntToStr(Loads));
      AddPostVariable(Client, 'XP', FloatToStr(XP));
      AddPostVariable(Client, 'Responds', IntToStr(Responds));
      AddPostVariable(Client, 'Table', 'WillChop');
      Dbase := PostHTTPPageEx(Client, 'http://stats.trilez.comuf.com/upload.php');
      FreeHTTPClient(Client);
      Result := true;
    end;

    procedure ScriptTerminate;
    begin
      SRLRandomsReport;
      PostVars;
    end;

    function T_LoggedIn: Boolean;
    var
      I: Integer;
      TheStatus: string;
    begin
      TheStatus := GetStatus;
      for I:= 1 to 60 do
      begin
        if (GetColor(567, 135) = 9288161) then
        begin
          if (GetStatus <> TheStatus) then Status(TheStatus);
          Result := True
          SmartCrash := False;
          Exit;
        end else
        if (GetColor(245, 455) = 2578755) or (GetColor(8, 478) = 4746611) then
        begin
          SmartCrash := False;
          Exit;
        end;
        if (I = 60) then SmartCrash := True;
        if SmartCrash then Exit;
        Wait(500);
      end;
      Wait(10);
    end;

    procedure Intro;
    var
      I: Integer;
    begin
      ChangeReportWidth(300);
      for I := 1 to 34 do
      begin
        Clearreport;
        AddtoReport(Left(' _ _ _  _ _ _  _  _    _ _  _ _ _', I));
        AddtoReport(Left('|_   _|| |_| ||_|| |  | O_||__  /', I));
        AddtoReport(Left('  | |  |  _ \ | || |_ | \_   / /_', I));
        AddtoReport(Left('  |_|  |_| \_\|_||_ _||_ _| /_ _ |', I));
        Wait(40);
      end;
      for I := 1 to 34 do
      begin
        ClearReport;
        AddtoReport(' _ _ _  _ _ _  _  _    _ _  _ _ _');
        AddtoReport('|_   _|| |_| ||_|| |  | O_||__  /');
        AddtoReport('  | |  |  _ \ | || |_ | \_   / /_');
        AddtoReport('  |_|  |_| \_\|_||_ _||_ _| /_ _ |');
        AddtoReport(Left('Will Chop by TRiLeZ', I));
        Wait(RandomRange(20,200));
      end;
      Disguise('Will Chop by TRiLeZ');
      Status('Running...');
    end;

    Procedure DebugTPA(TP: TPointArray; DC, Colour: integer);
    var
     mx, my, pic, OldDC, I: integer;
    begin
      SmartSetDebug(True);
      GetClientDimensions(mx,my);
      Pic:= BitmapFromString(mx,my,'');
      OldDC := GetTargetDC;
      SetTargetDC(DC);
      for i := 0 to High(TP) do
        FastSetPixel(Pic, TP[i].x, TP[i].y, Colour);
      CopyCanvas(GetBitmapCanvas(Pic), GetClientCanvas, 0, 0, mx, my, 0, 0, mx, my);
      FreeBitmap(Pic);
      SetTargetDC(OldDC);
    end;

    procedure DebugProggy(TP: TStringArray; DC, Colour, Shadow: integer);
    var
     MX, MY, Pic, OldDC, I, B, H, TPH, Numb: Integer;
     TTP: TPointArray;
    begin
      SmartSetDebug(True);
      GetClientDimensions(mx,my);
      Pic:= BitmapFromString(mx,my,'');
      OldDC := GetTargetDC;
      SetTargetDC(DC);
      TPH := High(TP);
      for I := 0 to TPH do
      begin
        TTP := LoadTextTPA(TP[i], FriendChars, H);
        for B := 0 to High(TTP) do
        begin
          Numb := ((I + 1) * 13);
          FastSetPixel(Pic, TTP[b].x + 10 + 1, TTP[b].y + 10 + Numb + 1, Shadow);
          FastSetPixel(Pic, TTP[b].x + 10, TTP[b].y + 10 + Numb, Colour);
        end;
      end;
      CopyCanvas(GetBitmapCanvas(Pic), GetClientCanvas, 0, 0, mx, my, 0, 0, mx, my);
      FreeBitmap(Pic);
      SetTargetDC(OldDC);
    end;

    procedure ProgressReport;
    var
      I: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
      ClearDebug;
      SRLRandomsReport;
      if (HowManyPlayers = 1) then
      begin
        Writeln('****************************************************************');
        Writeln('Will Chop by TRiLeZ');
        Writeln('****************************************************************');
        Writeln('Running Time: ' + TimeRunning);
        Writeln('Willow Trees Cut: ' + IntToStr(Players[CurrentPlayer].Integers[1]));
        Writeln('Loads Dropped: ' + IntToStr(Players[CurrentPlayer].Integers[3]));
        Writeln('Logs Gained: ' + IntToStr(Players[CurrentPlayer].Integers[2]));
        Writeln('XP Gained: ' + FloatToStr(67.5 * Players[CurrentPlayer].Integers[2]));
        Writeln('XP/H: ' + FloatToStr(Round((67.5 * Players[CurrentPlayer].Integers[2]
        * 60 * 60 * 1000) / Players[i].Integers[6])));
        Writeln('Responded: ' + IntToStr(Players[CurrentPlayer].Integers[5]) + ' Times');
        Writeln('****************************************************************');
      end else
      if (HowManyPlayers >= 2) then
      begin
        Writeln('|***********************************************************************|');
        Writeln(Padr('| Will Chop by TRiLeZ  ', 72) + '|');
        Writeln('|***********************************************************************|');
        Writeln('|  Nick  | Trees | Loads | Logs |  XP  | XP/H | Responds | Time Running |');
        Writeln('|******** ******* ******* ****** ****** ****** ********** **************|');
        for I := 0 to HowManyPlayers - 1 do
        begin
          if (Players[i].Integers[2] = 0) then
            Players[i].Integers[7] := 0
          else
          Players[i].Integers[7] := Round((67.5 * Players[i].Integers[2] * 60 * 60 * 1000) / Players[i].Integers[6]);
          Writeln('|' + Padr(Players[i].Nick, 8) + '|' + Padr(IntToStr(Players[i].Integers[1]), 7) +
            '|' + Padr(IntToStr(Players[i].Integers[3]), 7) + '|' +
            Padr(IntToStr(Players[i].Integers[2]), 6) + '|' +
            Padr(IntToStr(Round(67.5 * Players[i].Integers[2])), 6) + '|' +
            Padr(IntTostr(Players[i].Integers[7]), 6) + '|' +
            Padr(IntToStr(Players[i].Integers[5]), 10) + '|' +
            Padr('   ' + MsToTime(Players[i].Integers[6], Time_Bare), 14) + '|');
        end;
        Writeln('|***********************************************************************|');
        Writeln(Padr('| Total Running Time: ' + TimeRunning, 72) + '|');
        Writeln('|***********************************************************************|');
      end;
      {$IfDef SMART}
      if Print_Proggy_Debug_Canvas then
        DebugProggy([IntToStr(Players[CurrentPlayer].Integers[1]) + ' Willow Trees Cut',
        IntToStr(Players[CurrentPlayer].Integers[3]) + ' Loads Dropped',
        IntToStr(Players[CurrentPlayer].Integers[2]) + ' Logs Gained',
        FloatToStr(Round(67.5 * Players[CurrentPlayer].Integers[2])) + ' XP Gained',
        FloatToStr(Round((67.5 * Players[CurrentPlayer].Integers[2]
        * 60 * 60 * 1000) / Players[CurrentPlayer].Integers[6])) + ' XP Per Hour'], SmartGetDebugDC, clWhite, 1644052);
      {$EndIf}
    end;

    function SayTheLevel(Level: string): boolean;
    var
      MyLevel: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      MyLevel := GetSkillLevel(Level);
      case Random(4) of
        0: TypeSend(IntToStr(MyLevel));
        1: TypeSend(AddMistakes('My ' + Level + 'level is ', 25) +
             IntToStr(MyLevel));
        2: TypeSend(AddMistakes('I have ', 25) +
             IntToStr(MyLevel) + ' ' + Level);
        3: QCSayLevel(Level);
      end;
      Result := True;
    end;

    procedure AutoRespond;
    var
      I, CX, CY: Integer;
      LastLineText, Name, Chat: string;
      QuickChat, RespondType1, RespondType2, RespondType3, RespondType4: TStringArray;
    begin
      if (not T_LoggedIn) then Exit;
      if FindText(cx, cy, 'From', SmallChars, 2, 319, 35, 340) then
      begin
        Mouse(cx, cy, 0, 0, false);
        Wait(RandomRange(300, 600));
        if ChooseOption('Message') then
        begin
          Wait(RandomRange(600, 1000));
          case Random(8) of
            0: TypeSend(AddMistakes('Im busy, I cant talk right now', 25));
            1: TypeSend(AddMistakes('Get lost', 25));
            2: TypeSend(AddMistakes('Leave me along right now', 25));
            3: TypeSend(AddMistakes('Dont talk to me', 25));
            4: TypeSend(AddMistakes('Stop talking to me', 25));
            5: TypeSend(AddMistakes('Could you please go away', 25));
            6: TypeSend(AddMistakes('Im sorry but I cant talk right now', 25));
            7: TypeSend(AddMistakes('Could I have some peace and quiet please', 25));
          end;
          Wait(RandomRange(2000, 2500));
          Inc(Players[CurrentPlayer].Integers[5]);
        end else
        if ChooseOption('rie') then
        begin
          Mouse(cx, cy, 0, 0, false);
          Wait(RandomRange(300, 600));
          if ChooseOption('Message') then
          begin
            Wait(RandomRange(600, 1000));
            case Random(5) of
              0: TypeSend(AddMistakes('Im busy, I cant talk right now', 25));
              1: TypeSend(AddMistakes('Get lost', 25));
              2: TypeSend(AddMistakes('Leave me along right now', 25));
              3: TypeSend(AddMistakes('Dont talk to me', 25));
              4: TypeSend(AddMistakes('Stop talking to me', 25));
              5: TypeSend(AddMistakes('Could you please go away', 25));
              6: TypeSend(AddMistakes('Im sorry but I cant talk right now', 25));
              7: TypeSend(AddMistakes('Could I have some peace and quiet please', 25));
            end;
            Wait(RandomRange(2000, 2500));
            Inc(Players[CurrentPlayer].Integers[5]);
          end
        end;
      end;
      LastChatter(Name);
      if (Lowercase(Name) = Lowercase(Players[CurrentPlayer].Name)) then Exit;
      if FindChatBoxText('wishes to', 8, clTrade) then
      begin
        case Random(7) of
          0: TypeSend(AddMistakes('Dont wanna trade', 25));
          1: TypeSend(AddMistakes('No trade', 25));
          2: TypeSend(AddMistakes('No ty', 25));
          3: TypeSend(AddMistakes('Get lost', 25));
          4: TypeSend(AddMistakes('I don''t trade', 25));
          5: TypeSend(AddMistakes('Busy, go away pl0x', 25));
          6: TypeSend(AddMistakes('Im busy, go off with you', 25));
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
      end;
      if (not GetLastChatText(Chat)) then Exit;
      LastLineText := (Lowercase(GetChatBoxText(8, clBlue)) + ' ');
      if (LastLineText = 'my wooductting level is') then Exit;
      QuickChat:= ['what is your level in strength?', 'what is your level in attack?',
      'what is your level in hitpoints?', 'what is your level in defence?',
      'what is your level in magic?', 'what is your level in ranged?',
      'what is your level in agility?', 'what is your level in construction?',
      'what is your level in cooking?', 'what is your level in crafting?',
      'what is your level in farming?', 'what is your level in firemaking?',
      'what is your level in fishing?', 'what is your level in fletching?',
      'what is your level in herblore?', 'what is your level in hunter?',
      'what is your level in mining?', 'what is your level in prayer?',
      'what is your level in runecrafting?', 'what is your level in slayer?',
      'what is your level in smithing?', 'what is your level in summoning?',
      'what is your level in thieving?', 'what is your level in woodcutting?'];
      RespondType1:= ['hi', 'hey', 'yo ', 'hello'];
      RespondType2:= ['str?', 'att?', 'def?', 'hp?', 'range?', 'ranged?', 'mage?',
      'magic?', 'str lvl?', 'att lvl?', 'def lvl?', 'hp lvl?', 'range lvl?',
      'ranged lvl?', 'mage lvl?', 'magic lvl?', 'strength?', 'attack?', 'defence?',
      'hitpoints?', 'range?', 'ranged?', 'mage?', 'magic?', 'strength lvl?',
      'attack lvl?', 'defence lvl?', 'hitpoints lvl?', 'range lvl?', 'ranged lvl?',
      'mage lvl?', 'magic lvl?', 'wc?', 'woodcut?', 'woodcutting?', 'wc lvl',
      'woodcut lvl', 'woodcutting level', 'wood cut'];
      RespondType3:= ['noob', 'newb', 'nub', 'n00b'];
      RespondType4:= ['waz up', 'was up', 'wasup', 'wassup', 'sup'];
      for I := 0 to High(QuickChat) do
      if (Pos(QuickChat[i], LastLineText) > 0) then
      begin
        case I of
          0: QCSayLevel('strength');
          1: QCSayLevel('attack');
          2: QCSayLevel('hitpoints');
          3: QCSayLevel('defence');
          4: QCSayLevel('magic');
          5: QCSayLevel('range');
          6: QCSayLevel('agility');
          7: QCSayLevel('construction');
          8: QCSayLevel('cooking');
          9: QCSayLevel('crafting');
          10: QCSayLevel('farming');
          11: QCSayLevel('firemaking');
          12: QCSayLevel('fishing');
          13: QCSayLevel('fletching');
          14: QCSayLevel('herblore');
          15: QCSayLevel('hunter');
          16: QCSayLevel('mining');
          17: QCSayLevel('prayer');
          18: QCSayLevel('runecrafting');
          19: QCSayLevel('slayer');
          20: QCSayLevel('smithing');
          21: QCSayLevel('summoning');
          22: QCSayLevel('thieving');
          23: QCSayLevel('woodcutting');
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
        Exit;
      end;
      for I := 0 to High(RespondType1) do
      if (Pos(RespondType1[i], LastLineText) > 0) then
      begin
        case Random(4) of
          0: TypeSend(AddMistakes('Hello', 25));
          1: TypeSend(AddMistakes('Hi', 25));
          2: TypeSend(AddMistakes('Hey', 25));
          3: TypeSend(AddMistakes('Yo', 25));
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
        Exit;
      end;
      for I := 0 to High(RespondType2) do
      if (Pos(RespondType2[i], LastLineText) > 0) then
      begin
        case I of
          0, 8, 16, 24: SayTheLevel('strength');
          1, 9, 17, 25: SayTheLevel('attack');
          2, 10, 18, 26: SayTheLevel('defence');
          3, 11, 19, 27: SayTheLevel('hitpoints');
          4, 5, 12, 13, 20, 21, 28, 29: SayTheLevel('ranged');
          6, 7, 14, 15, 22, 23, 30, 31: SayTheLevel('magic');
          32..38: SayTheLevel('woodcutting');
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
        Exit;
      end;
      for I := 0 to High(RespondType3) do
      if (Pos(RespondType3[i], LastLineText) > 0) then
      begin
        case Random(3) of
          0: TypeSend(AddMistakes('lol', 25));
          1: TypeSend(AddMistakes('lmao', 25));
          2: TypeSend(AddMistakes('haha', 25));
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
        Exit;
      end;
      for I := 0 to High(RespondType4) do
      if (Pos(RespondType4[i], LastLineText) > 0) then
      begin
        case Random(3) of
          0: TypeSend(AddMistakes('nm', 25));
          1: TypeSend(AddMistakes('nothing much', 25));
          2: TypeSend(AddMistakes('ntm', 25));
        end;
        Wait(RandomRange(2000, 2500));
        Inc(Players[CurrentPlayer].Integers[5]);
        Exit;
      end;
    end;

    procedure RandomWorldSwitch;
    var
      RandomInt: Integer;
    begin
      if (Signed_SMART = false) or (not T_LoggedIn) or (Switch_Worlds = False) then Exit;
      if (Players[CurrentPlayer].Integers[4] = 0) then
        Players[CurrentPlayer].Integers[4] := RandomRange(40, 60);
      if (Players[CurrentPlayer].Integers[4] <= Players[CurrentPlayer].Integers[1]) then
      begin
        Status('Switching Worlds');
        Logout;
        Status('Switching Worlds');
        RandomInt := RandomRange(30000, 180000);
        Writeln('Taking a ' + IntToStr(RandomInt / 1000) + ' second break.');
        Wait(RandomInt);
        if OpenWorldScreen then
        begin
          SelectWorld(RandomWorld(Members_World, False));
          Wait(RandomRange(3000, 5000));
          LoginPlayer;
          Wait(RandomRange(2000, 3000));
          SetAngle(True);
          SetRun(True);
        end else
        begin
          LoginPlayer;
          Wait(RandomRange(2000, 3000));
          SetAngle(True);
          SetRun(True);
        end;
        Players[CurrentPlayer].Integers[4] := Players[CurrentPlayer].Integers[4] +
          RandomRange(40, 60);
      end;
    end;

    procedure OpenSkill;
    var
      T, Close: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      HoverSkill('random', false);
      Close := DTMFromString('78DA63CC666260686340010F7654317000694' +
             '620FE0F048C25403575A86A96D6DAC3D580006332916AFA08A829' +
             '21AC06000EE41086');
      GetMousePos(x, y);
      Mouse(x, y, 0, 0, true);
      MarkTime(t);
      while not FindDTM(Close, x, y, MSX1, MSY1, MSX2, MSY2) do
      begin
        if (not T_LoggedIn) then Exit;
        Wait(100);
        if (TimeFromMark(t) >= 10000) then Exit;
      end;
      Wait(RandomRange(1000, 2000));
      if (GetColor(327, 312) = 2640994) then
      begin
        HoldMouse(327, 312, true);
        Wait(RandomRange(500, 2000));
        ReleaseMouse(327, 312, true);
        Wait(RandomRange(500, 1500));
      end;
      if FindDTM(Close, x, y, MSX1, MSY1, MSX2, MSY2) then
      begin
        Mouse(x, y, 3, 3, false);
        Wait(RandomRange(100,250));
        ChooseOption('Close');
        Wait(RandomRange(750,1000));
      end else
      begin
        Mouse(498,21,8,8,false);
        Wait(800+Random(250));
        if ChooseOption('Close') then Wait(300+Random(200))
        else
        begin
          Mouse(449,51,8,8,false);
          ChooseOption('Close');
          Wait(800+Random(200));
        end;
      end;
      FreeDTM(Close);
    end;

    function HowManyNotes: integer;
    var
      I, X, Y: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      if (not (GetCurrentTab = tab_Notes)) then
      begin
        if GameTab(tab_Notes) then WaitColor(564, 214, 6795405, 1, 500);
      end;
      if (GetCurrentTab = tab_Notes) then
      begin
        for I := 0 to 30 do
        begin
          if FindText(x, y, IntToStr(i), SmallChars, 630, 203, 668, 236) then Result := I;
        end;
      end;
    end;

    function AddNote(Note: string): boolean;
    var
      T: Integer;
    begin
      if (not (GetCurrentTab = tab_Notes)) then
      begin
        if GameTab(tab_Notes) then WaitColor(564, 214, 6795405, 1, 500);
      end;
      if (GetCurrentTab = tab_Notes) then
      begin
        if (HowManyNotes >= 30) then Exit;
        if (GetColor(564, 214) = 6795405) then
        begin
          Mouse(565, 217, 4, 4, true);
          MarkTime(t);
          while (GetColor(236, 485) = 6321792) do
          begin
            if (not T_LoggedIn) then Exit;
            Wait(RandomRange(2, 5));
            if (TimeFromMark(t) >= 7500) then Exit;
          end;
          Wait(RandomRange(1000, 1500));
          TypeSend(Note);
          Result := True;
        end;
      end;
    end;

    procedure AddRandomNote;
    begin
      case Random(20) of
        0: AddNote('Keep woodcutting');
        1: AddNote('Rep TRiLeZ');
        2: AddNote(IntToStr(Players[CurrentPlayer].Integers[2]) + ' logs cut so far');
        3: AddNote('I have been woodcutting for ' + TimeRunning);
        4: AddNote(IntToStr(Players[CurrentPlayer].Integers[1]) + ' willow trees cut so far');
        5: AddNote('Play RuneScape less :p');
        6: AddNote('Keep on chopping');
        7: AddNote('I like to woodcut');
        8: AddNote('I love woodcutting');
        9: AddNote('This is getting boring...');
        10: AddNote('NOTE SPAM!');
        11: AddNote('Yearg Im a pirate');
        12: AddNote('Eat pizza tomorrow');
        13: AddNote('The better woodcutting I have, the faster I cut');
        14: AddNote('Do em logs up da dum');
        15: AddNote('lmao');
        16: AddNote('Dont call kids losers');
        17: AddNote('Getjaars is the number 1 player in RS!');
        18: AddNote('Enjoy using this');
        19: AddNote('Have fun');
      end;
    end;

    function AntiBan(Doing: string): Boolean;
    var
      TheStatus: string;
    begin
      if (not T_LoggedIn) then Exit;
      AutoRespond;
      FindNormalRandoms;
      TheStatus := GetStatus();
      Status('Doing AntiBan');
      case Doing of
        'Chopping':
        case Random(1400) of
          0..9: PickupMouse;
          10..19: BoredHuman;
          20..29: RandomRClick;
          30..39: ExamineInv;
          40..49: GameTab(tab_Friends);
          50..59: HoverSkill('woodcutting', false);
          60: AddRandomNote;
        end;
        'Nothing':
        case Random(350) of
          0..9: OpenSkill;
          10..19: PickupMouse;
          20..29: RandomRClick;
          30..39: ExamineInv;
          40..49:
          begin
            DoEmote(Random(20)+1);
            Wait(RandomRange(1000, 1500));
          end;
          50..59: GameTab(tab_Friends);
          60..69: HoverSkill('woodcutting', false);
          70: AddRandomNote;
        end;
      end;
      Result := True;
      Status(TheStatus);
    end;

    function DropAllLogs: Boolean;
    var
      Log, CentreColour, CX, CY, T: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      Status('Dropping Logs');
      Log := DTMFromString('78DA637CCEC4C010C6C8800C8C75F9E1ECFF4' +
           '0C07817A8C617A206A19211CC86F119AF03D5441250731FA82681' +
           '809A374035B104D47C05AA8920A0E63D508D177E3500A4B00D45');
      GameTab(tab_Inv);
      Wait(RandomRange(250, 500));
      while FindDTM(Log, cx, cy, MIX1, MIY1, MIX2, MIY2) do
      begin
        if (not T_LoggedIn) then Break;
        Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
        CentreColour := GetColor(cx, cy);
        Mouse(cx, cy, 8, 5, False);
        WaitOption('Drop', 2500);
        MarkTime(t);
        while ExistsItem(CoordsToItem(cx, cy)) do
        if (TimeFromMark(t) >= 4000) then Break;
        Wait(RandomRange(100, 250));
      end;
      Result := True;
      FreeDTM(Log);
    end;

    procedure DropAndCount;
    begin
      DropAllLogs;
      Inc(Players[CurrentPlayer].Integers[3]);
      ProgressReport;
    end;

    procedure HandleChopping;
    var
      Area, Ti, RandomNumber, InventCount, CX, CY: Integer;
    begin
      if (not T_LoggedIn) then Exit;
      Status('Chopping Tree');
      SetColorSpeed2Modifiers(Willow.Hue[0], Willow.Sat[0]);
      if (X < MSCX) and (Y < MSCY) then Area := 1
      else
      if (X > MSCX) and (Y < MSCY) then Area := 2
      else
      if (X > MSCX) and (Y > MSCY) then Area := 3
      else
      if (X < MSCX) and (Y > MSCY) then Area := 4;
      Wait(RandomRange(500, 750));
      Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
      if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY-50, MSCX+100, MSCY+100, Willow.Tol[0])) then Exit;
      MarkTime(Ti);
      RandomNumber := RandomRange(20000, 25000);
      InventCount := InvCount;
      repeat
        if (not T_LoggedIn) then Exit;
        Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
        FindNormalRandoms;
        LevelUp;
        AutoRespond;
        AntiBan('Chopping');
        if (InvCount > InventCount) then
        begin
          MarkTime(Ti);
          Players[CurrentPlayer].Integers[2] := Players[CurrentPlayer].Integers[2] +
          (InvCount - InventCount);
          InventCount := InvCount;
          ProgressReport;
        end;
        if InvFull then
        begin
          DropAndCount;
          Inc(Players[CurrentPlayer].Integers[1]);
          Exit;
        end;
        Wait(RandomRange(250, 750));
        case Area of
          1: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY-60, MSCX, MSCY, Willow.Tol[0])) then
             begin
               Inc(Players[CurrentPlayer].Integers[1]);
               ProgressReport;
               Break;
             end;
          2: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX, MSCY-60, MSCX+50, MSCY, Willow.Tol[0])) then
             begin
               Inc(Players[CurrentPlayer].Integers[1]);
               ProgressReport;
               Break;
             end;
          3: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX, MSCY, MSCX+50, MSCY+50, Willow.Tol[0])) then
             begin
               Inc(Players[CurrentPlayer].Integers[1]);
               ProgressReport;
               Break;
             end;
          4: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY, MSCX, MSCY+50, Willow.Tol[0])) then
             begin
               Inc(Players[CurrentPlayer].Integers[1]);
               ProgressReport;
               Break;
             end;
        end;
        if (TimeFromMark(Ti) >= RandomNumber) then Exit;
      until (not T_LoggedIn);
    end;

    procedure FindTree;
    var
      H, I, T, InventCount: Integer;
      DGreen, LGreen, TPA: TPointArray;
      Tree: T2DPointArray;
    begin
      if (not LoggedIn) then Exit;
      FindNormalRandoms;
      AutoRespond;
      Status('Finding Trees');
      SetColorSpeed2Modifiers(Willow.Hue[1], Willow.Sat[1]);
      FindColorsTolerance(Lgreen, Willow.Colors[1], MSX1, MSY1, MSX2, MSY2, Willow.Tol[1]);
      SetColorSpeed2Modifiers(Willow.Hue[0], Willow.Sat[0]);
      FindColorsTolerance(Dgreen, Willow.Colors[0], MSX1, MSY1, MSX2, MSY2, Willow.Tol[0]);
      if (Length(DGreen) > 0) and (Length(LGreen) > 0) then
      begin
        if (not T_LoggedIn) then Exit;
        Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
        TPA := CombineTPA(DGreen, LGreen);
        Tree := SplitTPA(TPA, 14);
        SortATPAFromFirstPoint(Tree, Point(MSCX, MSCY));
        H := High(Tree);
        if T_LoggedIn then
        if InvFull then DropAndCount;
        for I := 0 to H do
        begin
          if (not T_LoggedIn) then Exit;
          Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
          if T_LoggedIn then
          if InvFull then
          begin
            DropAndCount;
            Break;
          end;
          MiddleTPAEx(Tree[i], x, y);
          MMouse(x, y, 10, 10);
          Wait(RandomRange(250, 500));
          if WaitUpTextMulti(Willow.UpText, 1000) then
          begin
            GetMousePos(x, y);
            case Random(5) of
              0..3: Mouse(x, y, 0, 0, true);
              4: begin
                   Mouse(x, y, 0, 0, false);
                   Wait(RandomRange(250, 400));
                   ChooseOption('Chop');
                 end;
            end;
            MarkTime(t);
            if T_LoggedIn then InventCount := InvCount else Exit;
            Status('Waiting to Cut Tree');
            repeat
              if (not T_LoggedIn) then Exit;
              if FindBlackChatMessage('tree') then Break;
              if T_LoggedIn then
              if (InvCount > InventCount) then
              begin
                Players[CurrentPlayer].Integers[2] :=
                  Players[CurrentPlayer].Integers[2] + (InvCount - InventCount);
                ProgressReport;
                Break;
              end;
              if (TimeFromMark(t) >= 15000) then Exit;
            until false;
            HandleChopping;
            if (not T_LoggedIn) then Exit;
            AntiBan('Nothing');
            RandomWorldSwitch;
            Break;
          end else
          Wait(10);
        end;
      end else
      Wait(10);
    end;

    procedure DeclareStuff;
    begin
      DeclarePlayers;
      ColorToleranceSpeed(2);
      with Willow do
      begin
        UpText := ['Willo', 'llow'];
        Colors := [3169352, 6396297];
        Hue := [0.10, 0.25];
        Sat := [0.99, 0.15];
        Tol := [20, 20];
      end;
    end;

    procedure NewsAndUpdates;
    var
      News, ScriptLink, LVersion: string;
      I: Integer;
      LatestVersion: Extended;
    begin
      ClearDebug;
      News := GetPage('http://trilez.comuf.com/news.html');
      for I := 1 to 10 do
      if Pos('<line' + IntToStr(i) + '>', News) > 0 then
      Writeln(Between('<line' + IntToStr(i) + '>', '</line'+inttostr(i)+'>', News));
      LVersion := GetPage('http://trilez.comuf.com/Scripts/WillChop/version.html');
      LatestVersion := StrToFloat(Between('<latestversion>', '</latestversion>', LVersion));
      ScriptLink := Between('<scriptlink>', '</scriptlink>', LVersion);
      if not (LatestVersion = 1) then
      begin
        Writeln('This script is out of date.');
        Writeln('The current version is: ' + FloatToStr(LatestVersion));
        Writeln('A link will be opened to the current version in 10 seconds.');
        Wait(10000);
        OpenWebPage(ScriptLink);
        TerminateScript;
      end else
      Wait(5000);
    end;

    procedure SetupScript;
    begin
      ActivateClient;
      DeclareStuff;
    end;

    procedure SetupPlayer;
    begin
      LoginPlayer;
      MarkTime(Players[CurrentPlayer].Integers[8]);
      SetAngle(True);
      SetRun(True);
      DropAllLogs;
      Wait(RandomRange(300, 800));
    end;

    procedure MainLoop;
    begin
      repeat
        SetupPlayer;
        repeat
          FindTree;
        until (not T_LoggedIn);
        Alert(Players[CurrentPlayer].Name + ' is now inactive!');
        Players[CurrentPlayer].Active := False;
        if SmartCrash then Exit;
        if (PlayersActive > 0) then NextPlayer(False)
        else Break;
      until AllPlayersInactive;
    end;

    begin
      Intro;
      NewsAndUpdates;
      {$IfDef SMART}
        Smart_Server := Smart_World;
        Smart_Signed := Signed_SMART;
        Smart_Members := Members_World;
      {$EndIf}
      SetupSRL;
      ClearDebug;
      SetupScript;
      MainLoop;
    end.

    I usually find the status as "Chopping Tree" when I come to SCAR to find that my script is frozen.

    Thanks,
    TRiLeZ
    Last edited by TRiLeZ; 11-29-2009 at 09:25 PM.

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
  •