Results 1 to 3 of 3

Thread: I am getting an Runtime error idk why .

  1. #1
    Join Date
    Oct 2014
    Location
    Belgium
    Posts
    33
    Mentioned
    0 Post(s)
    Quoted
    9 Post(s)

    Question I am getting an Runtime error idk why .

    Dear Villavu Members,


    Like i said above i am gatting an Runtime error idk why.

    So when i start the script it works for like 6 mins or if i am lucky 30 mins after that i get this error

    Runtime error: "Index out of range (index:0, low:0, high:-1)" at line 425, column 26 in file "C:\Simba SRL\Scripts\Wheat_Farm_V1.simba"
    Succesfully executed in 0:02:18.
    The following bitmaps were not freed: [0, Minimap mask, Smart[14096] Image, 48, 49]

    Well i realy dont know what to do i looked up on google, villavu about this Error but i couldnt find it.

    anyways i am using simba 1.3 instead of simba 1.2 could that be the problem?

    Edit: i did get this error when it couldnt find the Gate but how can i fix this?

    you can find the script in this Attechment Wheat_Farm_V1.simba

    and also here

    Simba Code:
    program Wheat_Farm_V1;
    {$H-}
    {$define SMART}
    {$I SRL/OSR.simba}
    {$I RSWalker/Walker.simba}


    var

      Walker        : TRSWalker;     // Used for RSWalker (to walk paths)
      Outside_Gate_path,
      Supplies_Path,
      Bank_Path     : TPointArray;   // Paths from field to bank, and bank to field
      Antiban       : TAntiban;      // Used for Antiban procedures



    const

      LOGIN_NAME = '';    //Username/Email
      LOGIN_PASS = '';                     //Password
      RS_WORLD   = -1;                             //Desired World (-1 = Random)
      IS_MEMBER  = false;                          //True if your player is a Member

    procedure declarePlayers();

    begin

      with Players.New()^ do

    begin

        LoginName  := LOGIN_NAME;
        Password   := LOGIN_PASS;
        IsActive   := True;
        IsMember   := IS_MEMBER;
        World      := RS_WORLD;

    end;

      Players.SetCurrent(0);

    end;

    procedure setupAntiban();
    begin
      Antiban.Init(SKILL_TOTAL, 4);

      Antiban.AddTask([@Antiban.LoseFocus,     ONE_MINUTE*5]);
      Antiban.AddTask([@Antiban.HoverPlayers,  ONE_MINUTE*8]);
      Antiban.AddTask([@Antiban.CheckStats,    ONE_MINUTE*10]);
      Antiban.AddTask([@Antiban.OpenRandomTab, ONE_MINUTE*10]);
      Antiban.AddTask([@Antiban.VeryShortBreak,ONE_MINUTE*25]);
      Antiban.AddTask([@Antiban.DoMiscStuff,   ONE_MINUTE*25]);
      Antiban.AddTask([@Antiban.RandomCompass, ONE_MINUTE*45]);

      Antiban.AddBreak([35 * ONE_MINUTE, 05 * ONE_MINUTE, 0.05]);
      Antiban.AddBreak([02 * ONE_HOUR,   15 * ONE_MINUTE, 0.20]);
      Antiban.AddBreak([05 * ONE_HOUR,   45 * ONE_MINUTE, 0.85]);
      Antiban.AddBreak([16 * ONE_HOUR,   08 * ONE_HOUR,   0.99]);
    end;

    Procedure myAntiban;
    begin
      if not SRL.isLoggedIn() then
        Exit;

      SRL.DismissRandom();  //Dismiss random events if any are found
      Antiban.DoAntiban();  //Do the antiban
    end;

    procedure WalkTo(Path: TPointArray);

    begin

      myAntiban();

      Walker.WalkPath(Path);

    end;

    type

        TMSObject = record
        WorldLoc  : TPointArray; //locations on the world map
        Color     : TCTS2Color;  //must have color
        MinCount  : Int32;       //size of TPA
        SplitDist : Int32;

    end;

    function TMSObject.Find(DoSort: Boolean=False; Expand:Int32=0): TRectArray;

    var

        loc, me        : TPoint;
        rect           : TRectangle;
        locations, TPA : TPointArray;
        ATPA           : T2DPointArray;

    begin

        me := Walker.GetMyPos();

        locations := Copy(Self.WorldLoc);

        if DoSort then Locations.Sorted(me);

        for loc in Locations do

    begin

        rect := Walker.GetTileMSEx(me, loc, 1).Expand(Expand);
        if MainScreen.GetBounds.Contains(rect.Bounds) then

    begin

        if (srl.FindColors(TPA, Color, rect.Bounds) < Self.MinCount) then
        Continue;

        if (Self.SplitDist > 0) then

    begin

        TPA    := rect.Filter(TPA);
        ATPA   := TPA.Cluster(Self.SplitDist);
        ATPA.SortByMiddle(rect.Mean);
        Result += ATPA[0].MinAreaRect;

    end else

        Result += rect.Expand(-Expand);

    end;
    end;
    end;

    procedure waitLoop();

    var

        InvCount: Integer;
        T: TTimeMarker;

    begin

    if not SRL.isLoggedIn() then
        Exit;

        InvCount := Inventory.Count(); //Gets the count in our inventory

        T.Start;                       //Start our timer

    repeat

        //myAntiban();

        wait(randomRange(75, 250));    //Wait a random amount of time

    until((Inventory.Count() > InvCount) or (T.GetTime > 7000)); //Stop repeating once inv count changes or we time out

    end;


    function Deposite_Supplies(): boolean;

    begin

        myAntiban();

        BankScreen.Open(blVarrockWest);       // Open bank using SRL's built in banker function

    if BankScreen.IsOpen(5000) then           // If bank screen is open sometime within the 5 sec wait

    begin

        wait(randomRange(150, 500));          // Have a realistic wait time before we actually do anything

        BankScreen.DepositAll();              // Deposit all Wheat

        wait(randomRange(2500, 2777));        // Have a realistic wait time before we actually do anything

        Result := True;                       // We want to return true when the function finishes, so we set Result to True

    end;
    end;

    function Walk_to_Bank(): Boolean;

    begin

        //myAntiban(); //Do Antiban

        walkTo(Bank_Path);                    // Walks to the Bank

        wait(randomRange(1700, 2460));        // Have a realistic wait time before we actually do anything

        Deposite_Supplies();                  // Banks the Wheat

        Result := True;

    end;

    function Check_Gate(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin    //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 200,        8];

        wait(RandomRange(1320, 1460));

        rectangles := obj.Find(True, 31);

        smart.Image.Clear();

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

    begin

        //myAntiban(); //Do Antiban

        wait(RandomRange(1320, 1460));

    //if  obj.Find then

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    if MainScreen.IsUpText(['Op', 'en']) then

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(1320, 1460));

        Walk_to_Bank();

    end;

        smart.Image.Clear();

    end;

    function Open_Gate_2(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin    //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 200,         8];

        wait(RandomRange(1320, 1460));

        rectangles := obj.Find(True, 31);

        smart.Image.Clear();

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

    begin

        //myAntiban(); //Do Antiban

        wait(RandomRange(1320, 1460));

    //if  obj.Find then

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    if MainScreen.IsUpText(['Op', 'en']) then

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(1320, 1460));

    end;

        smart.Image.Clear();

    end;

    procedure Fill_inventory_with_supplies();

    var

        TPA, Wheat: TPointArray;

        ATPA: T2DPointArray;

    begin

    if not SRL.isLoggedIn() then                    //If not logged in, then terminate script

        TerminateScript;

    if chatBox.findTextOnLines(['reach'], [1..2]) then

        open_Gate_2();

    if (SRL.FindColors(TPA, CTS2(6798010, 7, 0.04, 1.52), MainScreen.GetBounds) > 0) then //If we find colours at all then...

    begin

        ATPA := TPA.Cluster(2);                     //Group them within a max pixel distance of 2

        //ATPA.FilterSize(100, 500);                //Remove and ATPA of size < 100, or > 500.

        ATPA.SortByIndex(MainScreen.GetMiddle);     //Sort by closest to Middle of the screen

        {$IFDEF SMART}                              //If we are using SMART, then...

        Smart.Image.DrawATPA(ATPA);                 //Draws the ATPA's on the screen.
                                                    //smart.Image.DebugATPA(ATPA) works as well
        {$ENDIF}                                    //End SMART IF

    for Wheat in ATPA do                            //For every possible Wheat in our ATPA

    begin

          Mouse.Move(Wheat[Random(Length(Wheat))]); //Move the mouse to the Wheat

    if MainScreen.IsUpText('Wheat') then            //If the uptext is 'Wheat', try to click it

    begin

    if Mouse.Click(ctRed) then                      //Clicks the mouse and looks to see if red 'x' appeard when cicked

    begin

        waitLoop();                                 //Call to our waitLoop because we want to wait while picking.

        smart.Image.Clear();

        //myAntiban();

    Repeat

    while (not Inventory.IsFull) do                 // Keeps filling the Inventory until its full

        Fill_inventory_with_supplies();

    until(true);

        Break;                                      // If found red 'x', then break because we clicked it

        WriteLn('its me Mario');

    end;
    end;
    end;
    end;
        {$IFDEF SMART}

        Smart.Image.Clear;                          // Clears the ATPA's from screen

        {$ENDIF}
    end;

    function Open_Gate(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin    //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 200,         8];

        wait(RandomRange(1320, 1460));

        rectangles := obj.Find(True, 31);

        smart.Image.Clear();

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

    begin

        //myAntiban(); //Do Antiban

        wait(RandomRange(1320, 1460));

    //if  obj.Find then

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    if MainScreen.IsUpText(['Op', 'en']) then

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(2800, 3120));

        Fill_inventory_with_supplies();

    end;

        smart.Image.Clear();

    end;





    function Walk_to_supplies(): Boolean;

    begin

        myAntiban(); //Do Antiban

        walkTo(Supplies_Path);    // Walks to the Supplies

        Open_Gate();              // Opens the Gate

        Result := True;

    end;



    function Check_Inventory(): Boolean;

    begin

       Result := Gametabs.Open(tabInventory);   // Opens the Inventory Tab

       while (not Inventory.IsFull) do          // If the Inventory is not full then....

    begin

        myAntiban(); //Do Antiban

        Walk_to_supplies();

    end else

        myAntiban(); //Do Antiban

        walkTo(Outside_Gate_path);

        Check_Gate();

    end;


    function setUp(): boolean

    begin

        {$IFDEF SMART}                    // If we are using SMART, then...

        Smart.EnableDrawing := True;      // let us draw on SMART

        {$ENDIF}                          // end SMART IF


        SRL.Setup([]);                    // Setup SRL to allow us to acces it's functions.

        setupAntiban();                   //Setup our antiban

        declarePlayers();                 // Declare the player we are using

        Walker.Init('World.png');         // Setup RSWalker by initializing the map we want to use.

                                          // The path that we plan to walk (Supplies_path = Grain field)
        Supplies_path := [[4541, 2687], [4537, 2648], [4509, 2625], [4476, 2614], [4437, 2607], [4408, 2612], [4379, 2614]];

                                         // The path that we plan to walk (Bank_path = Varrock West Bank)
        Bank_path     := [[4373, 2624], [4430, 2625], [4471, 2638], [4509, 2643], [4537, 2688]];


        Outside_Gate_path := [[4373, 2626], [4374, 2623]];

        AddOnTerminate(@Walker.Free);     // automatic free once script shuts down

        Walker.skipClose := 30;           // how close to the target point before we try to click the next point.

    if (not SRL.isLoggedIn) then          // If not logged in then..

    begin

        Players.LoginCurrent();           // Log player in

        MainScreen.setAngle(True);        // Sets the camera angle to the highest point

        wait(RandomRange(2010, 2530));

        //Minimap.SetCompassAngle(RandomRange(150, 0), False);

    end;

        Result := True;

    end;

    begin //Main

    if setUp then    //Calls the setup of the script

        writeln('We are set up and ready to go!');

        repeat

        myAntiban(); //Do Antiban

        Check_Inventory();

        AddOnTerminate(@Walker.Free);     // automatic free once script shuts down

        Walker.Free();

        Walker.Init('World.png');         // Setup RSWalker by initializing the map we want to use.

        smart.Image.Clear();

        until(false);

    end.
    Last edited by RSPS Scripter; 03-07-2019 at 03:26 PM.

  2. #2
    Join Date
    Nov 2011
    Location
    England
    Posts
    3,072
    Mentioned
    296 Post(s)
    Quoted
    1094 Post(s)

    Default

    You need to check there are actually rectangles to mouse. Perhaps exit if there aren't any?

    Simba Code:
    if Length(Rectangles) = 0 then Exit;

    Also you need to use begin and ends with your if statements.

    Simba Code:
    if MainScreen.IsUpText(['Op', 'en']) then

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460)); // Will always happen, regardless if no uptext.

        smart.Image.Clear(); // Will always happen, regardless if no uptext.

        wait(RandomRange(1320, 1460)); // Will always happen, regardless if no uptext.

    end;

    Should be:
    Simba Code:
    if MainScreen.IsUpText(['Op', 'en']) then
    begin
      mouse.Click(mouse_Left);

      wait(RandomRange(1320, 1460));

      smart.Image.Clear();

      wait(RandomRange(1320, 1460));
    end;

  3. #3
    Join Date
    Oct 2014
    Location
    Belgium
    Posts
    33
    Mentioned
    0 Post(s)
    Quoted
    9 Post(s)

    Default

    Dear Olly,

    Thank you for helping me




    The script did work 8+- hours long there was no errors, unfortunately my account got Disabled in other words Banned, never used the account to bot on other scripts or bot clients besides Villavu (S.M.A.R.T).

    It was a test account so no worries i did comment out the breaking i think thats the main reason it got banned.

    it was just to test if it would get banned or not and it did got banned.

    you can find the script in this Attechment Wheat_Farm_V1.simba i added the breaking back in the script.

    i recommend not to use this script i havent tested it with the breaking.

    So the changes that i made on the script are like you told me to do i added begin and ends with the if statements.

    added a fail safe with the new code that you gave me like this.


    Simba Code:
    if  Length(Rectangles) = 0 then
    begin

        walkTo(Outside_Gate_path); //Make new path to go inside field

        Minimap.SetCompassAngle(RandomRange(150, 0), False);

        Open_Gate();

    end;

    and i putted the code here see below.


    Simba Code:
    if  Length(Rectangles) = 0 then Exit;

        mouse.Move(rectangles[0].Bounds);


    Simba Code:
    begin

        TPA    := rect.Filter(TPA);
        ATPA   := TPA.Cluster(Self.SplitDist);
        ATPA.SortByMiddle(rect.Mean);
        Result += ATPA[0].MinAreaRect;
    if  Length(Rectangles) = 0 then Exit;




    and you can find the script also here

    Simba Code:
    program Wheat_Farm_V1;
    {$H-}
    {$define SMART}
    {$I SRL/OSR.simba}
    {$I RSWalker/Walker.simba}


    var

      Walker        : TRSWalker;     // Used for RSWalker (to walk paths)
      Outside_Gate_path,
      Supplies_Path,
      Bank_Path     : TPointArray;   // Paths from field to bank, and bank to field
      Antiban       : TAntiban;      // Used for Antiban procedures



    const

      LOGIN_NAME = '';    //Username/Email
      LOGIN_PASS = '';                     //Password
      RS_WORLD   = -1;                             //Desired World (-1 = Random)
      IS_MEMBER  = false;                          //True if your player is a Member

    procedure declarePlayers();

    begin

      with Players.New()^ do

    begin

        LoginName  := LOGIN_NAME;
        Password   := LOGIN_PASS;
        IsActive   := True;
        IsMember   := IS_MEMBER;
        World      := RS_WORLD;

    end;

      Players.SetCurrent(0);

    end;

    procedure setupAntiban();
    begin
      Antiban.Init(SKILL_TOTAL, 4);

      Antiban.AddTask([@Antiban.LoseFocus,     ONE_MINUTE*5]);
      Antiban.AddTask([@Antiban.HoverPlayers,  ONE_MINUTE*8]);
      Antiban.AddTask([@Antiban.CheckStats,    ONE_MINUTE*10]);
      Antiban.AddTask([@Antiban.OpenRandomTab, ONE_MINUTE*10]);
      Antiban.AddTask([@Antiban.VeryShortBreak,ONE_MINUTE*25]);
      Antiban.AddTask([@Antiban.DoMiscStuff,   ONE_MINUTE*25]);
      Antiban.AddTask([@Antiban.RandomCompass, ONE_MINUTE*45]);

      Antiban.AddBreak([35 * ONE_MINUTE, 05 * ONE_MINUTE, 0.05]);
      Antiban.AddBreak([02 * ONE_HOUR,   15 * ONE_MINUTE, 0.20]);
      Antiban.AddBreak([05 * ONE_HOUR,   45 * ONE_MINUTE, 0.85]);
      Antiban.AddBreak([16 * ONE_HOUR,   08 * ONE_HOUR,   0.99]);
    end;

    Procedure myAntiban;
    begin
      if not SRL.isLoggedIn() then
        Exit;

      SRL.DismissRandom();  //Dismiss random events if any are found
      Antiban.DoAntiban();  //Do the antiban
    end;

    procedure WalkTo(Path: TPointArray);

    begin

      myAntiban();

      Walker.WalkPath(Path);

    end;

    type

        TMSObject = record
        WorldLoc  : TPointArray; //locations on the world map
        Color     : TCTS2Color;  //must have color
        MinCount  : Int32;       //size of TPA
        SplitDist : Int32;

    end;

    function TMSObject.Find(DoSort: Boolean=False; Expand:Int32=0): TRectArray;

    var

        loc, me        : TPoint;
        rect           : TRectangle;
        locations, TPA : TPointArray;
        ATPA           : T2DPointArray;
        rectangles     : array of TRectangle;
    begin

        me := Walker.GetMyPos();

        locations := Copy(Self.WorldLoc);

        if DoSort then Locations.Sorted(me);

        for loc in Locations do

    begin

        rect := Walker.GetTileMSEx(me, loc, 1).Expand(Expand);
        if MainScreen.GetBounds.Contains(rect.Bounds) then

    begin

        if (srl.FindColors(TPA, Color, rect.Bounds) < Self.MinCount) then
        Continue;

        if (Self.SplitDist > 0) then

    begin

        TPA    := rect.Filter(TPA);
        ATPA   := TPA.Cluster(Self.SplitDist);
        ATPA.SortByMiddle(rect.Mean);
        Result += ATPA[0].MinAreaRect;
    if  Length(Rectangles) = 0 then Exit;

    end else

        Result += rect.Expand(-Expand);

    end;
    end;
    end;

    procedure waitLoop();

    var

        InvCount: Integer;
        T: TTimeMarker;

    begin

    if not SRL.isLoggedIn() then
        Exit;

        InvCount := Inventory.Count(); //Gets the count in our inventory

        T.Start;                       //Start our timer

    repeat

        wait(randomRange(75, 250));    //Wait a random amount of time

    until((Inventory.Count() > InvCount) or (T.GetTime > 7000)); //Stop repeating once inv count changes or we time out

    end;


    function Deposite_Supplies(): boolean;

    begin

        myAntiban();

        BankScreen.Open(blVarrockWest);       // Open bank using SRL's built in banker function

    if BankScreen.IsOpen(5000) then           // If bank screen is open sometime within the 5 sec wait

    begin

        wait(randomRange(150, 500));          // Have a realistic wait time before we actually do anything

        BankScreen.DepositAll();              // Deposit all Wheat

        wait(randomRange(2500, 2777));        // Have a realistic wait time before we actually do anything

        Result := True;                       // We want to return true when the function finishes, so we set Result to True

    end;
    end;

    function Walk_to_Bank(): Boolean;

    begin

        smart.Image.Clear();

        walkTo(Bank_Path);                    // Walks to the Bank

        wait(randomRange(1700, 2460));        // Have a realistic wait time before we actually do anything

        Deposite_Supplies();                  // Banks the Wheat

        Result := True;

    end;

    function Check_Gate(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin

         //walkTo(Outside_Gate_path);


             //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 200,        8];

        rectangles := obj.Find(True, 50);

    if  Length(Rectangles) = 0 then
    begin

        wait(RandomRange(1320, 1460));

        walkTo(Outside_Gate_path);

        Minimap.SetCompassAngle(RandomRange(150, 0), False);

        Check_Gate();

    end;

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

        wait(RandomRange(1320, 1460));

    begin

        wait(RandomRange(1320, 1460));

    if  Length(Rectangles) = 0 then Exit;

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    end;

    if  MainScreen.IsUpText(['Op', 'en']) then
    begin

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        Walk_to_Bank();

    end;

    if MainScreen.IsUpText(['Clo', 'se']) then
    begin

        wait(RandomRange(1320, 1460));

        Walk_to_Bank();

        smart.Image.Clear();

    end;
    end;

    function Open_Gate_2(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin    //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 100,         8];

        wait(RandomRange(1320, 1460));

        rectangles := obj.Find(True, 50);

    if  Length(Rectangles) = 0 then

    begin

        walkTo(Outside_Gate_path);

        Minimap.SetCompassAngle(RandomRange(150, 0), False);

        Open_Gate_2();

    end;

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

    begin

        wait(RandomRange(1320, 1460));

    if  Length(Rectangles) = 0 then Exit;

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    end;

    if  MainScreen.IsUpText(['Op', 'en']) then
    begin

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

    end;
    end;

    procedure Fill_inventory_with_supplies();

    var

        TPA, Wheat: TPointArray;

        ATPA: T2DPointArray;

    begin

    if not SRL.isLoggedIn() then                    //If not logged in, then terminate script

        TerminateScript;

    if chatBox.findTextOnLines(['reach'], [1..2]) then

        open_Gate_2();

    if (SRL.FindColors(TPA, CTS2(6798010, 7, 0.04, 1.52), MainScreen.GetBounds) > 0) then //If we find colours at all then...

    begin

        ATPA := TPA.Cluster(2);                     //Group them within a max pixel distance of 2

        //ATPA.FilterSize(100, 500);                //Remove and ATPA of size < 100, or > 500.

        ATPA.SortByIndex(MainScreen.GetMiddle);     //Sort by closest to Middle of the screen

        {$IFDEF SMART}                              //If we are using SMART, then...

        Smart.Image.DrawATPA(ATPA);                 //Draws the ATPA's on the screen.
                                                    //smart.Image.DebugATPA(ATPA) works as well
        {$ENDIF}                                    //End SMART IF

    for Wheat in ATPA do                            //For every possible Wheat in our ATPA

    begin

          Mouse.Move(Wheat[Random(Length(Wheat))]); //Move the mouse to the Wheat

    if MainScreen.IsUpText('Wheat') then            //If the uptext is 'Wheat', try to click it

    begin

    if Mouse.Click(ctRed) then                      //Clicks the mouse and looks to see if red 'x' appeard when cicked

    begin

        waitLoop();                                 //Call to our waitLoop because we want to wait while picking.

        smart.Image.Clear();

        //myAntiban();

    Repeat

    while (not Inventory.IsFull) do                 // Keeps filling the Inventory until its full

        Fill_inventory_with_supplies();

    until(true);

        Break;                                      // If found red 'x', then break because we clicked it

        WriteLn('its me Mario');

    end;
    end;
    end;
    end;
        {$IFDEF SMART}

        Smart.Image.Clear;                          // Clears the ATPA's from screen

        {$ENDIF}
    end;

    function Open_Gate(): boolean;

    var

        i         :   Int32;
        obj       :   TMSObject;
        rectangles:   array of TRectangle;
        tpa       :   TPointArray;
        atpa      :   T2DPointArray;
        Pnts      :   TPointArray;
        Pnt       :   Tpoint;

    begin    //                                   Gate Location open and closed
             //      Tile 1       Tile 2       Tile 3      Tile 4       Tile 5       Tile 6     color of Gate,    min points,  splitDist.
        obj := [[[4373, 2619],[4373, 2616],[4378, 2613],[4373, 2619],[4373, 2616],[4378, 2613]], CTS2(4945285, 7, 0.07, 0.10), 100,         8];

        rectangles := obj.Find(True, 50);

    if  Length(Rectangles) = 0 then
    begin

        walkTo(Outside_Gate_path); //Make new path to go inside field

        Minimap.SetCompassAngle(RandomRange(150, 0), False);

        Open_Gate();

    end;

        wait(RandomRange(1320, 1460));

        for i:=0 to High(rectangles) do

        smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);

    begin

        wait(RandomRange(1320, 1460));

    if  Length(Rectangles) = 0 then Exit;

        mouse.Move(rectangles[0].Bounds);

        wait(RandomRange(1320, 1460));

    end;

    if  MainScreen.IsUpText(['Op', 'en']) then
    begin

        mouse.Click(mouse_Left);

        wait(RandomRange(1320, 1460));

        smart.Image.Clear();

        wait(RandomRange(2800, 3120));

        Fill_inventory_with_supplies();

        smart.Image.Clear();

    end;

    if MainScreen.IsUpText(['Clo', 'Se']) then
    begin

        smart.Image.Clear();

        wait(RandomRange(2800, 3120));

        Fill_inventory_with_supplies();

    end;
    end;


    function Walk_to_supplies(): Boolean;

    begin

        myAntiban(); //Do Antiban

        walkTo(Supplies_Path);    // Walks to the Supplies

        Open_Gate();              // Opens the Gate

        Result := True;

    end;



    function Check_Inventory(): Boolean;

    begin

       Result := Gametabs.Open(tabInventory);   // Opens the Inventory Tab

       while (not Inventory.IsFull) do          // If the Inventory is not full then....

    begin

        Walk_to_supplies();

    end else

        wait(RandomRange(1320, 1460));

        walkTo(Outside_Gate_path);

        Check_Gate();

    end;


    function setUp(): boolean

    begin

        {$IFDEF SMART}                    // If we are using SMART, then...

        Smart.EnableDrawing := True;      // let us draw on SMART

        {$ENDIF}                          // end SMART IF


        SRL.Setup([]);                    // Setup SRL to allow us to acces it's functions.

        setupAntiban();                   //Setup our antiban

        declarePlayers();                 // Declare the player we are using

        Walker.Init('World.png');         // Setup RSWalker by initializing the map we want to use.

                                          // The path that we plan to walk (Supplies_path = Grain field)
        Supplies_path := [[4541, 2687], [4537, 2648], [4509, 2625], [4476, 2614], [4437, 2607], [4408, 2612], [4379, 2614]];

                                         // The path that we plan to walk (Bank_path = Varrock West Bank)
        Bank_path     := [[4373, 2624], [4430, 2625], [4471, 2638], [4509, 2643], [4537, 2688]];


        Outside_Gate_path := [[4373, 2626], [4374, 2623]];

        AddOnTerminate(@Walker.Free);     // automatic free once script shuts down

        Walker.skipClose := 30;           // how close to the target point before we try to click the next point.

    if (not SRL.isLoggedIn) then          // If not logged in then..

    begin

        Players.LoginCurrent();           // Log player in

        MainScreen.setAngle(True);        // Sets the camera angle to the highest point

        wait(RandomRange(2010, 2530));

        //Minimap.SetCompassAngle(RandomRange(150, 0), False);

    end;

        Result := True;

    end;

    begin //Main

    if setUp then    //Calls the setup of the script

        writeln('We are set up and ready to go!');

        repeat

        myAntiban();

        Check_Inventory();

        smart.Image.Clear();

        until(false);

    end.



    Kind Regards

    RSPS Scripter

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
  •