SRL Archive - OSR Help

I am getting an Runtime error idk why .


RSPS Scripter

2019-03-07 10:13:27

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 [ATTACH]28626[/ATTACH]

and also here

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.

Olly

2019-03-07 11:47:42

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

if Length(Rectangles) = 0 then Exit;

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

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:
if MainScreen.IsUpText(['Op', 'en']) then
begin
mouse.Click(mouse_Left);

wait(RandomRange(1320, 1460));

smart.Image.Clear();

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

RSPS Scripter

2019-03-09 10:11:10

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 [ATTACH]28628[/ATTACH] 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.


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.


if  Length(Rectangles) = 0 then Exit;

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


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

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