Walker Objects#

Methods to handle TRSWalkerObjects. TRSWalkerObject can be anything that you want to interact with on the mainscreen. They are divided in 2 main categories and one of them in 3 sub-categories but the usage is only limited by your imagination:

  • RSObjects (TRSWalkerObjects that don’t have a dot on the minimap)

  • MMDots: (TRSWalkerObjects that have a dot on the minimap) -RSNPCs -RSGroundItems -RSPlayers

How do they work?#

TRSWalkerObjects are very customizable and can be used to interact with almost everything. For some niche use cases it might be worth do something custom or override some methods to get the behavior you want.

The default way they work is:

  • WaspLib checks if you are in the TRSWalkerObject.Coordinates range. If not and you used one of the Walk methods, it will walk to that location.

  • Being in the TRSWalkerObject location, then we check if our TRSWalkerObject is a TRSObject or a TRSMMDot. for a TRSObject we stick with the TRSWalkerObject.Coordinates, for TRSMMDots, the coordinates are changed to the minimap dots that within the radius specified when the TRSWalkerObject was setup.

  • WaspLib then convert the coordinate along with the TRSWalkerObject.ShapeArray information to a TCuboidArray on the mainscreen (https://en.wikipedia.org/wiki/Cuboid).

  • This TCuboidArray is the “bounds” of our targets. Each one should accurately surround each of our possible targets.

  • Then WaspLib runs MainScreen.FindObject() inside of each TCuboid. For more info on how this works read the TRSObjectFinder documentation (https://torwent.github.io/SRL-T/mainscreen.html#type-trsobjectfinder).

  • An ATPA of the found colors inside each cuboid is then returned.

  • If the method used is related to hovering or clicking, we hover the closest target and then check if TRSWalkerObject.UpText matches the uptext.

  • If it does and we are using a clicking method, we click it.

  • If we use a select method, if the option is not in the uptext we right click the target and select that option.

This is the default behavior but TRSWalkerObjects are very customizable and functionality can be toggled on with TRSWalkerObject.Filter:

  • Filter.Walker: Disables walker for the TRSWalkerObject. Coordinates are ignored and still use the minimap dots that are visible on the minimap if we are talking about a TRSMMDot, otherwise only MainScreen.FindObject() is used.

  • Filter.MinimapDot: Disables the usage of minimap dots for TRSMMDots. TRSObjects have this off by default. Disabling this for TRSMMDots is only useful if the the Player, NPC or Item is in a fixed position.

  • Filter.Finder: Disables color checking. The returned cuboids by Walker and MM2MS are our targets. This is useful for things that are “invisible” like agility shortcuts and/or things that have colors that are just unreliable.

  • UpText: Ignore all uptext when hovering the targets

  • Filter.Skip: This is an internal filter that you probably don’t want to use directaly. Decides which TRSWalkerObjects setup is skipped during wasplib’s setup process.

Note

You cannot disable Filter.Walker, Filter.MinimapDot, Filter.Finder all at the same time. You need one of them enabled and keep in mind that TRSObjects already have Filter.MinimapDot disabled.


type TRSWalkerObject#

TRSWalkerObject = record
  Filter: record
    Walker:     Boolean;
    MinimapDot: Boolean;
    Finder:     Boolean;
    UpText:     Boolean;
    Skip:       Boolean;
  end;

  ShapeArray: TRSMainScreenShapeArray;
  Coordinates: TPointArray;

  Finder: TRSObjectFinder;
  UpText: TStringArray;
  ActionUpText: TStringArray;
class var
  CurrentUpText: TStringArray;
  CurrentActionUpText: TStringArray;
  RedClicked: Boolean;
end;

PWalkerObjectArray = array of Pointer;
PRSWalkerObject = ^TRSWalkerObject;

Parent record of all TRSWalkerObjects.


Walker.Click#

function TRSWalker.Click(minimapPoint: TPoint; Randomness: Int32): Boolean; override;

You shouldn’t modify this unless you know what you are doing, otherwise you might break TRSWalkerObjects. This is overriden so if we redclick our current TRSWalkerObject target while mainscreen walking we disable walker. When we start the walking process towards a TRSWalkerObject, TRSWalkerObject.CurrentUpText is temporarily set so we know what we are looking for while walking. Once we click the target TRSWalkerObject.CurrentUpText is cleared.


TRSWalkerObject._Setup#

procedure TRSWalkerObject._Setup();

Base internal TRSWalkerObject setup method. You probably won’t need to call this directly, it’s called by the next setup methods automatically.


TRSWalkerObject.Setup#

procedure TRSWalkerObject.Setup(coordinates: TPointArray);
procedure TRSWalkerObject.Setup(upText: TStringArray); overload;

TRSWalkerObject setup methods. You usually need to call of this.

The method that takes in coordinates should be called first. That is because TRSWalkerObject.Setup(coordinates: TPointArray) is where we decide if TRSWalkerObject.Filter.Skip is going to be true or not.

Keep in mind if you don’t use a TRSWalker in your script and want to use TRSWalkerObjects, you will need to manually setup them in your script because they will all be skipped. So you need to set TRSWalkerObject.Filter.Skip := False and then call TRSWalkerObject.Setup(upText: TStringArray)

Normal usage in the following example.

Example:

//Example with walker:
var
  rsw: TRSWalker;
  obj: TRSObject; //This is a type of TRSWalkerObject.
begin
  rsw.Setup();
  obj.Setup([[200, 200]]);
  obj.Setup(['My', 'uptext']);
end;


//Example without walker:
var
  obj: TRSObject; //This is a type of TRSWalkerObject.
begin
  obj.Setup(['My', 'uptext']);
end;

TRSWalkerObject.GetCuboidArray#

function TRSWalkerObject.GetCuboidArray(): TCuboidArray;

Internal TRSWalkerObject method responsible for returning a TCuboidArray of our target on the 3D world (on mainscreen and outside of it). You will probably never need to use this directly. You can visually see this in action by using the Debug() methods, this is responsible for the white lines surounding the targets.


TRSWalkerObject.FindOnMainScreen#

function TRSWalkerObject.FindOnMainScreen(cuboidArray: TCuboidArray): T2DPointArray;

Internal TRSWalkerObject method responsible for filtering a TCuboidArray by what’s visible in the mainscren. This is meant to filter TRSWalkerObject.GetCuboidArray() so targets that are outside of the mainscreen are filtered out. You will probably never need to use this directly.


TRSWalkerObject.OnMainScreen#

function TRSWalkerObject.OnMainScreen(cuboidArray: TCuboidArray): Boolean;

Internal TRSWalkerObject method that returns true or false if we have TCuboids visible on the mainscreen. You probably don’t need to use this directly.


TRSWalkerObject._UpTextCheck#

function TRSWalkerObject._UpTextCheck(out shouldExit: Boolean): Boolean;

Internal TRSWalkerObject helper method that is used by all hovering methods. You probably don’t need to use this directly.


TRSWalkerObject._WalkUpTextCheck#

function TRSWalkerObject._WalkUpTextCheck(out shouldExit: Boolean): Boolean;

Internal TRSWalkerObject helper method that is used by all walking hover methods. You probably don’t need to use this directly.


TRSWalkerObject._ClickHelper#

function TRSWalkerObject._ClickHelper(leftClick: Boolean): Boolean;

Internal TRSWalkerObject helper method that is used by other clicking methods. You probably don’t need to use this directly.

This is what’s responsible for deciding if we click a target we are hovering or not.


TRSWalkerObject._SelectHelper#

function TRSWalkerObject._SelectHelper(action: TStringArray): Boolean;

Internal TRSWalkerObject helper method that is used by other select methods. You probably don’t need to use this directly.

This is what is responsible for deciding if we just left click a target we are hovering or right click it and choose an option.


type TRSObject#

TRSObject = type TRSWalkerObject;
TRSObjectArray = array of TRSObject;
PRSObject = ^TRSObject;
PRSObjectArray = array of PRSObject;

TRSObjects are a type of type TRSWalkerObject. This are meant to be TRSWalkerObjects that do not have a minimap dot so TRSObject.Filter.MinimapDot is False by default and shouldn’t be changed.


TRSObject.Setup#

procedure TRSObject.SetupEx(shape: Vector3; coordinates: TPointArray); overload;
procedure TRSObject.Setup(size, height: Double; coordinates: TPointArray); overload;
procedure TRSObject.Setup(height: Double; coordinates: TPointArray); overload;

All this extend the basic TRSWalkerObject.Setup(coordinates: TPointArray). For TRSObjects this are the methods that should be used for setting them up initially.

In TRSObject.Setup(shape: Vector3; coordinates: TPointArray), shape should be a vector3 of the object shape in number of tiles:

  • shape.X: number of tiles of the object from west to east.

  • shape.Y: number of tiles of the object from north to south.

  • shape.Z: object height, this value has to be guessed, I recommend you try several values and debug it until it looks good to you. As some examples, player and npcs height is around 7, bank chests 4, yew/magic trees 14/16.

In TRSObject.Setup(size, height: Double; coordinates: TPointArray), size and height are used to create a Vector3 “shape” and call TRSObject.Setup(shape: Vector3; coordinates: TPointArray). In this case, shape.X and shape.Y would be both equal to size.

Lastly, TRSObject.Setup(height: Double; coordinates: TPointArray) also calls TRSObject.Setup(shape: Vector3; coordinates: TPointArray) and sets the shape.X and shape.Y to 1.


TRSObject.Find#

function TRSObject.FindEx(out cuboids: TCuboidArray; out atpa: T2DPointArray): Boolean;
function TRSObject.Find(out atpa: T2DPointArray): Boolean;

TRSObject method used to find a type TRSObject. If found returns true, if not returns false. The “extended” method in particular is mostly meant for debugging and is the one used when you call Debug(TRSObject).

Example:

WriteLn RSObjects.GEBank.Find(atpa); //Be in ge and with a walker setup there.
Debug(atpa);

TRSObject.IsVisible#

function TRSObject.IsVisible(): Boolean;

TRSObject method used to find a type TRSObject. If found returns true, if not returns false.

Example:

WriteLn RSObjects.GEBank.IsVisible(); //Be in ge and with a walker setup there.

TRSObject.FindFromPosition#

function TRSObject.FindFromPosition(me: TPoint; out atpa: T2DPointArray): Boolean;

Look for a type TRSObject as if you were on a different position. Great for things like pre-hovering.


TRSObject.Draw#

procedure TRSObject.Draw(out bitmap: TMufasaBitmap);

Internal method used to draw found TRSObjects in a TMufasaBitmap.

Example:

Bitmap.FromClient()
RSObjects.GEBank.Draw(Bitmap); //Be in ge and with a walker setup there.
Bitmap.Debug();
Bitmap.Free();

TRSObject.SaveDebug#

procedure TRSObject.SaveDebug();

Saves a debug image of the TRSObject to Simba\Screenshots\RSObjects

Example:

RSObjects.GEBank.SaveDebug(); //Be in ge and with a walker setup there.

TRSObject._UpdateTarget#

procedure TRSObject._UpdateTarget(sender: PMouse; var x, y: Double; var done: Boolean);

Internal helper method of TMouseMovingEventEx type used to update the target position while the mouse is moving. You should probably not touch this if you don’t understand it.


TRSObject._HoverHelper#

function TRSObject._HoverHelper(attempts: Int32; trackTarget: Boolean): Boolean;

Internal helper method used to hover a TRSObject target. You should not use this directly.


TRSObject._WalkHoverHelper#

function TRSObject._WalkHoverHelper(attempts: Int32; trackTarget: Boolean): Boolean;

Internal helper method used to walk and hover a TRSObject target. You should not use this directly.

This is responsible for deciding wether we should walk to a TRSObject target or not before attempting to hover it.


TRSObject.PreHoverHelper#

function TRSObject.PreHoverHelper(attempts: Int32): Boolean;

Internal helper method used to pre-hover a TRSObject target. You should not use this directly.


TRSObject.Hover#

function TRSObject.Hover(attempts: Int32 = 2; trackTarget: Boolean = TRACK_TARGET): Boolean;

Method used to hover a TRSObject target if it’s found on the mainscreen. It can update the target position while the mouse moves with trackTarget.

Example:

RSW.WebWalk(WaspWeb.LOCATION_VARROCK);
RSObjects.GEBank.Hover(); //Be in GE with a walker setup there.

TRSObject.WalkHover#

function TRSObject.WalkHover(attempts: Int32 = 2; trackTarget: Boolean = TRACK_TARGET): Boolean;

Method used to walk and hover a TRSObject target if it’s found on the mainscreen after walking. It can update the target position while the mouse moves with trackTarget.

Example:

//Be in varrock with a varrock map loaded.
RSW.WebWalk(WaspWeb.LOCATION_VARROCK);
RSObjects.GEBank.WalkHover();

TRSObject.Click#

function TRSObject.Click(leftClick: Boolean = True; attempts: Int32 = 2): Boolean;

Method used to click a TRSObject target if it’s found on the mainscreen.

Example:

//Be in ge with a ge map loaded.
WriteLn RSObjects.GEBank.Click();

TRSObject.SelectOption#

function TRSObject.SelectOption(action: TStringArray; attempts: Int32 = 2): Boolean;

Method used to select an option on a TRSObject target if it’s found on the mainscreen.

Example:

//Be in ge with a ge map loaded.
WriteLn RSObjects.GEBank.SelectOption(['Collect']);

TRSObject.WalkClick#

function TRSObject.WalkClick(leftClick: Boolean = True; attempts: Int32 = 2): Boolean;

Method used to walk and click a TRSObject target if it’s found on the mainscreen.

Example:

//Be in ge with a ge map loaded, preferably far away so it has to walk.
WriteLn RSObjects.GEBank.WalkClick();

TRSObject.WalkSelectOption#

function TRSObject.WalkSelectOption(action: TStringArray; attempts: Int32 = 2): Boolean;

Method used to walk and select an option on a TRSObject target if it’s found on the mainscreen.

Example:

//Be in ge with a ge map loaded, preferably far away so it has to walk.
WriteLn RSObjects.GEBank.WalkSelectOption(['Collect']);

type TRSMMDot#

TRSMMDot are a type of TRSWalkerObject. This are meant to be TRSWalkerObjects that have a minimap dot so TRSMMDot.Filter.MinimapDot is True by default and shouldn’t be changed. This also have a DotType variable for the type of ERSMinimapDot they have (PLAYER, NPC, ITEM) and a DotFilter which is used to filter mmdots in/out of circles and/or polygons so we only focus on the TRSMMDots we want.


TRSMMDot.Setup#

procedure TRSMMDot.SetupEx(radius: Int32; shape: Vector3; coordinates: TPointArray); overload;
procedure TRSMMDot.Setup(radius: Int32; size, height: Double; coordinates: TPointArray); overload;
procedure TRSMMDot.Setup(radius: Int32; height: Double; coordinates: TPointArray); overload;

All this extend the basic TRSWalkerObject.Setup(coordinates: TPointArray) specifically for TRSMMDots. For TRSMMDots this are the methods that should be used for setting them up initially.

In TRSMMDot.Setup(radius: Int32; shape: Vector3; coordinates: TPointArray), radius is used to create a simple TRSDotFilterArray of that radius with cordinates and their center point. shape should be a vector3 of the target shape in number of tiles:

  • shape.X: Number of tiles of the target from west to east.

  • shape.Y: Number of tiles of the target from north to south.

  • shape.Z: Target height, this value has to be guessed, I recommend you try several values and debug it until it looks good to you. As some examples, player and npcs height is around 7, bank chests 4, yew/magic trees 14/16.

For NPCs that can move and are 1x2 tiles or any uneven number of tiles, I recommend you just set shape.X and shape.Y to the largest one. So a cow I would recommend making the shape 2x2.

The other methods all call this first one with certain default values:

  • Size makes shape.X and shape.Y equal to size.

  • If size is omited, shape.X and shape.Y are set to 1.


TRSMMDot._GetCuboids#

function TRSMMDot._GetWMMCuboids(out mmTPA, dots: TPointArray; out dotFilters: TRSDotFilterArray): TCuboidExArray;
function TRSMMDot._GetMMCuboids(out dots: TPointArray): TCuboidExArray;

Internal helper TRSMMDot method used for debugging. You probably dont need to use this directly. You can see what this does in action by calling Debug(TRSMMDot).


TRSMMDot.GetCuboidArray#

function TRSMMDot.GetCuboidArrayEx(out mmTPA, dots: TPointArray; out dotFilters: TRSDotFilterArray; out floorTiles: TRectArray; out roofTiles: TRectArray): TCuboidArray; overload;
function TRSMMDot.GetCuboidArray(): TCuboidArray; override;

Internal TRSMMDot method responsible for returning a TCuboidArray of our target on the 3D world (on mainscreen and outside of it). This uses the previous 2 helper methods to do this. You will probably never need to use this directly. You can visually see this in action by using the Debug() methods, this is responsible for the white lines surounding the targets.


TRSMMDot.FindEx#

function TRSMMDot.FindEx(out mmPoints, dots: TPointArray; out DotFilters: TRSDotFilterArray; out floorTiles: TRectArray; out roofTiles: TRectArray; out cuboidArray: TCuboidArray; out atpa: T2DPointArray): Boolean;

TRSMMDot methods used to find a TRSMMDot. If found returns true, if not returns false. This “extended” method in particular is only meant for debugging and should be avoided outside of development/debugging. This is what is used when you call Debug(TRSMMDot).


TRSMMDot.Find#

function TRSMMDot.Find(out atpa: T2DPointArray): Boolean; overload;
function TRSMMDot.Find(): Boolean; overload;

TRSMMDot methods used to find a TRSMMDot. If found returns true, if not returns false.

Example:

WriteLn RSNPCs.LumbridgeCook.Find(atpa); //Be in lumbridge castle and with a walker setup there.
Debug(atpa);

TRSMMDot._GetBaseRecord#

function TRSMMDot._GetBaseRecord(): TRSMMDot;

Internal method used for casting custom TRSMMDots back to the base record.


TRSMMDot.Draw#

procedure TRSMMDot.Draw(out bitmap: TMufasaBitmap);

Internal method used to draw found TRSMMDot in a TMufasaBitmap.

Example:

Bitmap.FromClient()
RSNPCs.LumbridgeCook.Draw(Bitmap); //Be in Lumbridge castle and with a walker setup there.
Bitmap.Debug();
Bitmap.Free();

TRSMMDot.SaveDebug#

procedure TRSMMDot.SaveDebug();

Saves a debug image of the TRSMMDot to Simba\Screenshots\RSMMDots

Example:

RSNPCs.LumbridgeCook.SaveDebug(); //Be in Lumbridge castle and with a walker setup there.

TRSMMDot._UpdateTarget#

procedure TRSMMDot._UpdateTarget(sender: PMouse; var x, y: Double; var done: Boolean);

Internal helper method of TMouseMovingEventEx type used to update the target position while the mouse is moving. You should probably not touch this if you don’t understand it.


TRSMMDot._HoverHelper#

function TRSMMDot._HoverHelper(attempts: Int32; trackTarget: Boolean): Boolean;

Internal helper method used to hover a TRSMMDot target. You should not use this directly.


TRSMMDot._WalkHoverHelper#

function TRSMMDot._WalkHoverHelper(attempts: Int32; trackTarget: Boolean): Boolean;

Internal helper method used to walk and hover a TRSMMDot target. You should not use this directly.

This is responsible for deciding wether we should walk to a TRSMMDot target or not before attempting to hover it.


TRSMMDot.Hover#

function TRSMMDot.Hover(attempts: Int32 = 2; trackTarget: Boolean = TRACK_TARGET): Boolean;

Method used to hover a TRSMMDot target if it’s found on the mainscreen. It can update the target position as the mouse moves with trackTarget. For NPCs that move, this is highly recommended.

Example:

//Be in Lumbridge castle
RSW.WebWalk(WaspWeb.LOCATION_LUMBRIDGE);
RSNPCs.LumbridgeCook.Hover();

TRSMMDot.WalkHover#

function TRSMMDot.WalkHover(attempts: Int32 = 2; trackTarget: Boolean = TRACK_TARGET): Boolean;

Method used to walk and hover a TRSMMDot target if it’s found on the mainscreen after walking. It can update the target position as the mouse moves with trackTarget. For NPCs that move, this is highly recommended.

Example:

//Be in Lumbridge castle
RSW.WebWalk(WaspWeb.LOCATION_LUMBRIDGE);
RSNPCs.LumbridgeCook.WalkHover();

TRSMMDot.Click#

function TRSMMDot.Click(leftClick: Boolean = True; attempts: Int32 = 2): Boolean;

Method used to click a TRSMMDot target if it’s found on the mainscreen.

Example:

//Be in Lumbridge castle with a walker map of it loaded.
WriteLn RSNPCs.LumbridgeCook.Click();

TRSMMDot.SelectOption#

function TRSMMDot.SelectOption(action: TStringArray; attempts: Int32 = 2): Boolean;

Method used to select an option on a TRSMMDot target if it’s found on the mainscreen.

Example:

//Be in Lumbridge castle with a walker map of it loaded.
WriteLn RSNPCs.LumbridgeCook.SelectOption(['Examine']);

TRSMMDot.WalkClick#

function TRSMMDot.WalkClick(leftClick: Boolean = True; attempts: Int32 = 2): Boolean;

Method used to walk and click a TRSMMDot target if it’s found on the mainscreen.

Example:

//Be in Lumbridge castle with a walker map of it loaded.
WriteLn RSNPCs.LumbridgeCook.WalkClick();

TRSMMDot.WalkSelectOption#

function TRSMMDot.WalkSelectOption(action: TStringArray; attempts: Int32 = 2): Boolean;

Method used to walk and select an option on a TRSMMDot target if it’s found on the mainscreen.

Example:

//Be in Lumbridge castle with a walker map of it loaded.
WriteLn RSNPCs.LumbridgeCook.WalkSelectOption(['Examine']);

type TRSNPC#

TRSNPC are a type of TRSMMDot and TRSWalkerObject. This are meant to be TRSMMDot that have a yellow minimap dot so TRSNPC.Filter.MinimapDot is True by default and shouldn’t be changed.


type TRSGroundItem#

TRSGroundItem are a type of TRSMMDot and TRSWalkerObject. This are meant to be TRSMMDot that have a red minimap dot so TRSGroundItem.Filter.MinimapDot is True by default and shouldn’t be changed.


type TRSPlayer#

TRSPlayer are a type of TRSMMDot and TRSWalkerObject. This are meant to be TRSMMDot that have a white minimap dot so TRSPlayer.Filter.MinimapDot is True by default and shouldn’t be changed.


TRSMMDot.SetupUpText#

procedure TRSNPC.SetupUpText(upText: TStringArray); override;
procedure TRSGroundItem.SetupUpText(upText: TStringArray); override;
procedure TRSPlayer.SetupUpText(upText: TStringArray); override;

Setup method that extends TRSWalkerObject.SetupUpText(upText: TStringArray); These are the methods that should be used to setup TRSNPCs, TRSGroundItems and TRSPlayers as it ensures that the TRSNPC.DotType is correctly set.


Debug#

procedure Debug(rsobject: TRSObject); overload;
procedure Debug(mmdot: TRSMMDot); overload;

Methods used to debug TRSObjects and TRSMMDots.

Example:

Debug(RSObjects.GEBank); //Run in ge with a walker map setup there.

Debug(RSNPCs.LumbridgeCook); //Run in Lumbridge castle with a walker map setup there.