Simba Code:
program Inventory_Checker;
{$H-}
{$define SMART}
{$I SRL/OSR.simba}
{$I RSWalker/Walker.simba}
var
Walker : TRSWalker;
Supplies_Path,
Bank_Path : TPointArray;
procedure WalkTo(Path: TPointArray);
begin
Walker.WalkPath(Path);
end;
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;
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;
Function Fill_inventory_wih_supplies(): boolean;
Begin
WriteLn('Picking');
end;
Function Open_Gate(): boolean;
var
i : Int32;
obj : TMSObject;
rectangles: array of TRectangle;
tpa : TPointArray;
atpa : T2DPointArray;
Pnts : TPointArray;
Pnt : Tpoint;
begin
while True do
begin
// Gate Location, color of Gate, min points, splitDist.
obj := [[[4374, 2618],[4376, 2620]], CTS2(4813184, 4), 200, 8];
rectangles := obj.Find(True, 50);
smart.Image.Clear();
for i:=0 to High(rectangles) do
smart.Image.DrawTPA(rectangles[i].ToTPA.Connect, $00FFFF);
begin
wait(RandomRange(1320, 1460));
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));
Fill_inventory_wih_supplies();
if not MainScreen.IsUpText(['Cl', 'ose']) then
Begin
WriteLn('The Gate is open');
Fill_inventory_wih_supplies();
end else
Open_Gate();
wait(RandomRange(1320, 1460));
end;
end;
smart.Image.Clear();
end;
Function Walk_to_supplies(): Boolean;
Begin
walkTo(Supplies_Path); //Walks to the Supplies
Open_Gate();
Result := True;
end;
Function Deposite_Supplies(): boolean;
Begin
//test
end;
Function Walk_to_Bank(): Boolean;
Begin
walkTo(Bank_Path); //Walks to the Bank
Deposite_Supplies();
Result := True;
end;
function Check_Inventory(): Boolean;
begin
Result := Gametabs.Open(tabInventory);
while (not Inventory.IsFull) do
begin
if Walk_to_supplies() then
Fill_inventory_wih_supplies();
end else
Walk_to_Bank();
end;
function setUp(): boolean
begin
SRL.Setup([]); //Setup SRL to allow us to acces it's functions.
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 := [[4538, 2690], [4540, 2658], [4521, 2630], [4500, 2620], [4460, 2611], [4427, 2610], [4402, 2619], [4375, 2623]];
//The path that we plan to walk (Bank_path = Varrock West Bank)
Bank_path := [[4373, 2624], [4430, 2625], [4471, 2638], [4509, 2643], [4537, 2688]];
AddOnTerminate(@Walker.Free); // automatic free once script shuts down
Walker.skipClose := 40; //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([150][Random(4)]);
end;
Result := True;
end;
begin //Main
if setUp then //Calls the setup of the script
writeln('We are set up and ready to go!');
if Check_Inventory then
writeln('Inventory is open');
if Walk_to_Bank then
writeln('Inventory is full going to bank');
if Walk_to_supplies then
writeln('Inventory is not full going to supplies');
if Fill_inventory_wih_supplies then
writeln('Picking supplies');
Check_Inventory();
end.