Simplistic Beginners Guide To RS3 Scripting
Updated: 12th May 2015
This tutorial is designed to give you a very basic overview of RS3 scripting. You may be aware of my AIO RS3 and SRL6 scripting tutorial, but it may be a bit complicated if you’re just starting out. This tutorial is short and sweet, and sufficient to give you a basic understanding of the main SRL-6 (the include we use for RS3) scripting techniques.
This tutorial is split into the following sections:
- Simba basics
- Mouse basics
- MainScreen basics
- Backpack basics
- Minimap basics
- BankScreen basics
- ActionBar basics
- DepositBox basics
- LodestoneScreen basics
- ToolScreen basics
- ProductionScreen basics
- ProgressScreen basics
- PowersScreen basics
- ConversationBox basics
- Chatbox basics
- CollectBox basics
- GrandExchange basics
- LootScreen basics
NOTE: I'm still working on the last 2 or 3 sections, and I plan to add a section on logging in your player etc.
Please leave a comment if this has helped you, or if you have any questions 
1) Simba Basics
Printing to the debug box
The first thing you need to know is how to write text to the debug box (the box at the bottom of the simba GUI). This is done using the
writeLn command (which means write on a new line). Take a look at this example:
You also need to know how to clear the debug box. This is done using the
clearDebug() command. In the following example I clear the debug and then print Goodbye, meaning the first line I wrote gets cleared before I print the second line:

Wait a second!
Next you should know how to wait. Using waits in your script is very useful, especially if you are learning. This is done using the
wait(milliseconds) command. This example is similar to that above, except it waits 3 seconds before printing goodbye.
It is also important to know that waiting for an exact amount of time is not very human like, so it is better to wait for a random amount of time. We do this using the
randomRange(min, max) procedure. The following snippet is exactly the same as the previous one, except it waits for a random amount of time between 1 and 4 seconds:
Understanding coordinates
Understand coordinates is important as each location on your screen has its own coordinates (x and y). See in the bottom left corner of simba there are 2 numbers inside parentheses. These are the current
(x, y) coordinates of your mouse. Move your mouse and see how they change. These are the current coordinates of your mouse:

2) Mouse and Clicking Basics
Moving and clicking the mouse is quite important (obviously). I’ll show you some of the different ways to do that. You can move and/or click a point on the screen (if you know the x and y coordinates) or you move/click anywhere inside a box. Before we get into that, first you need to know the 3 different
mouse actions:
MOUSE_MOVE
MOUSE_LEFT
MOUSE_RIGHT
The first one just moves the mouse, the second one left clicks the mouse, and the final one right clicks the mouse. These are used inside the following mouse functions.
Moving the mouse and clicking a point
This function moves the mouse to point(x, y) and will then click the mouse depending on the mouseAction you select:
Simba Code:
mouse(x, y, mouseAction);
Let’s say I wanted to move the mouse to point (100, 100) and not click. I could use:
Simba Code:
mouse(100, 100, MOUSE_MOVE);
If I wanted to move the mouse to point(100, 100) and then right click, I would use this:
Simba Code:
mouse(100, 100, MOUSE_RIGHT);
This is demonstrated in the picture below. This will load SMART and move the mouse to point 100, 100 on the login screen (this also demonstrates a how a procedure works – see AIO tutorial). Write this in simba and press play if you want to test it! Make sure you write everything, including the $DEFINE and $I lines at the top (I explain these below).
Sometimes it is good to have a little bit of randomness when moving the mouse so the mouse doesn't land in exactly the same spot every time. This can be achieved with this function:
Simba Code:
mouse(x, y, ranX, ranY, mouseAction);
This is the same as above, except is has ranX and ranY, which is the randomness (in pixels) it will
add to x and y. If I wanted to move the mouse to point(100, 100) with a randomness of 5 pixels in each direction (so x = 100-105 and y = 100-105) I would use:
Simba Code:
mouse(100, 100, 5, 5, MOUSE_MOVE);
Now let’s say you wanted to just click the mouse without moving it. You can use
fastClick(mouseAction) for this. For example, to left click the mouse without moving it:
Now let’s put the things you've learn so far together. This snippet combines mouse moving, mouse clicking, writing text, and waiting (copy and paste this into simba and press run). If you were wondering, the
{$DEFINE SMART} and
{$I SRL-6/SRL.simba} at the top are just to include the SMART and SRL files from your C:/simba folder. The
setupSRL() procedure at the start of the main loop loads all the files that you just included.
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure practiceMouse();
begin
mouse(200, 200, MOUSE_MOVE);
wait(3000);
mouse(50, 50, MOUSE_MOVE);
wait(3000);
fastClick(MOUSE_RIGHT);
writeLn('We just right clicked');
wait(3000);
mouse(300, 30, MOUSE_MOVE);
end;
begin
clearDebug();
setupSRL();
practiceMouse();
end.
Moving the mouse and clicking inside a box
The previous section you learnt how to move the mouse and click a point. The other way to move and/or click a mouse is inside a box. The good thing about this method is the mouse moves
anywhere inside the box, so you don't need randomness.
A box is made up of 2 points – the top left corner and bottom right corner of the box. Even though a box has 4 corners, you only need to know 2 points to make a box. See this picture taken from my AIO tutorial:
In simba, a box variable is called a TBox, and is made up of 4 integers (i.e., 2 coordinates for each point). Here I make a box out of integers:
Simba Code:
intToBox(x1, y1, x2, y2);
The following is an example of declaring a TBox variable called myBox and assigning 4 integers to it:
Simba Code:
procedure makeMyBox();
var
myBox: TBox; // Created a TBox variable called myBox
begin
myBox := intToBox(10, 10, 50, 50); // Assigned these coordinates to the myBox variable
end;
Now that you know how to make a box, let’s move the mouse inside that box. You do this using the
mouseBox function:
Simba Code:
mouseBox(box, mouseAction);
where box is a Tbox, and mouseAction is one of the 3 mouseActions described above.
If you are wondering how to get the coordinates for your box, you can simply use the coordinates displayed in the bottom left corner of simba (like I showed you above). If you are selecting coordinates from the SMART client (which you probably are), remember to drag the cross-hair from simba to SMART (so the coordinates start counting from the top left corner of the SMART window and not your desktop). The cross-hair looks like this:
Time for a practical example. Let’s create a box around the settings button on the runescape login screen, and then move the mouse inside that box and left click. This will open up the settings screen.
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure practiceBox();
var
settingsButton: TBox; //declare TBox variable
begin
settingsButton := intToBox(735, 80, 750, 100); // Top left, bottom right points
mouseBox(settingsButton, MOUSE_LEFT); // Left click the box we just made
end;
begin
clearDebug();
setupSRL();
practiceBox();
end.
If you run the following code, you will see it clicks the settings button and opens up the settings menu! Now I’ll show you another way to click a box. Instead of declaring a TBox variable and putting that variable inside the mouseBox function, you can create a box directly inside the mouseBox function. This example will open up the settings menu like before, wait 4 seconds, and then click the X to close it using another mouseBox:
Simba Code:
procedure practiceBox();
var
settingsButton: TBox; // Declare TBox variable
begin
settingsButton := intToBox(735, 80, 750, 100);
mouseBox(settingsButton, MOUSE_LEFT);
wait(4000);
mouseBox(intToBox(630, 105, 640, 115), MOUSE_LEFT); // Notice how I made the box inside the mouseBox function
end;
Well done, now you know all about moving and clicking the mouse! Welcome to the l33t club of RS pro scripters. InB4AIODungScript.
3) Main Screen Basics
Here at SRL we refer to the screen where your player is as the
mainScreen. In this section we will cover how to change the angle of the mainScreen, how to find objects (using colour finding), and how to check if text matches.
Changing the mainScreen angle
Changing the angle is useful as you probably want to make the angle high (like a birds eye view) after you login, as this makes it easier to play the game. You can change the mainScreen angle using the function:
Simba Code:
mainScreen.setAngle(angle);
There are 2 angles built in to SRL-6. Each of these has a picture to demonstrate.
MS_ANGLE_LOW:
MS_ANGLE_HIGH:
This snippet will set the angle high, wait 3 seconds, and then set the angle low (try it if you want - just login manually):
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure changeAngleBoss();
begin
mainScreen.setAngle(MS_ANGLE_HIGH);
wait(3000);
mainScreen.setAngle(MS_ANGLE_LOW);
end;
begin
clearDebug();
setupSRL();
changeAngleBoss();
end.
Finding objects on the mainScreen
Now let’s find objects on the screen and click them. Before we get into finding colours, let's do a quick section on text recognition. Recognising text is very important as it's used to recognise objects, NPC and items. When you hover your mouse over an object, a box pops up. We call this the
mouseOverText. If I hover over this Evergreen Tree, this is the
mouseOverText:
Next we have the
chooseOption menu. This is different to the mouseOverText so don't confuse them. The
chooseOption menu pops up when you right click. If I right click an Evergreen Tree, this is the
chooseOption menu:
Remember what both the mouseOverText and chooseOptions look like as we will use them later. Now let’s use a very general object finding function. This is the simplest form of the
mainScreen.findObject function:
Simba Code:
mainscreen.findObject(x, y, color, tolerance, mouseOverText, mouseAction);
We are going to attempt to right click an Evergreen Tree and select the 'Chop down Evergreen' option from the chooseOption menu. First we need to pick some colours of the tree. The image below is a screenshot of Auto Colour Aid (ACA), which we use to pick colours. If you don't know how to use this (or need to download it), please look at ACA section in my
AIO tutorial (it's about half way down). These are the colours I have picked from the tree (notice I’m just using CTS1 here - I'm only interested in the color and the RGB tolerance on the left of ACA).
I need to put the colour and tolerance from ACA into that mainScreen.findObject function. I also need to put the mouseOverText and mouseAction. The mouseOverText can be any part of the text that appears in the mouseOverText pop up box (see picture above). I've chosen to use 'vergreen'. Note that text is
case sensitive, meaning that 'Chop Tree' is not the same as 'Chop tree'. Since I’m right clicking the tree, the mouse action is MOUSE_RIGHT. I've put this together:
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure clickTree();
var
x, y: integer; //we need to declare these variables since findObject outputs/requires these
begin
if mainscreen.findObject(x, y, 925721, 11, ['vergreen'], MOUSE_RIGHT) then
begin
writeLn('We right clicked a tree!'); // If findObject returns true, this will print
chooseOption.select(['hop down']); // This will choose ‘Chop down’ in chooseOptions menu
end;
end;
begin
clearDebug();
setupSRL();
clickTree();
end.
If I run this it will successfully find and click 1 evergreen tree. Try it if you want (you should probably pick your own colours). Note that this object finding function is very basic and can be a little bit unreliable in some cases. My AIO tutorial covers more advanced object finding techniques.
4) Backpack Basics
In this section we are going to cover the basics of dealing with the backpack.
Moving and clicking a backpack slot
First of all I’ll tell you how to move the mouse to a backpack slot and click. You could create your own mouseBox function like we did above, but there are easier ways already built into the SRL-6 include.
Take a look at the following function:
Simba Code:
tabBackPack.mouseSlot(slot, mouseAction);
This can move and/or click any slot in the backPack. The slot parameter can be any number between 1 and 28, and the mouseAction you already know (move, left or right click). Look at the following picture:
If I wanted to move the mouse to the first backpack slot and hover over the logs I would use this:
Simba Code:
tabBackPack.mouseSlot(1, MOUSE_MOVE);
Let’s combine a few things you've learnt already. I want to right click the item in the first slot and drop it, but only if it's a log. If I had a party hat in the first slot (which I normally do, obviously) I wouldn't want to drop that by mistake, so we need to check the mouseOverText first.
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure dropItem();
begin
tabBackPack.mouseSlot(1, MOUSE_MOVE); // Move mouse to slot 1
if isMouseOverText(['raft Logs']) then // If text matches then start the next 'begin..end block'
begin
fastClick(MOUSE_RIGHT); // Right click
chooseOption.select(['rop Logs']); // Choose the drop option
writeLn('We dropped a log!');
end else
writeLn('There wasn''t a log in slot 1'); // If the mouseOverText didn't match, this will print instead
end;
begin
clearDebug();
setupSRL();
dropItem();
end.
Now you know how to move the mouse, left click, right click, check mouseOverText and select an option from the chooseOptions menu for any slot in the backpack! Now I will go over a few other useful backpack functions.
Waiting for the backpack count to change
The following function waits up to a maximum time for the backpack count to change:
Simba Code:
tabBackPack.waitForShift(waitTime);
If I clicked a tree and I wanted to wait for a maximum of 5 seconds for the logs to appear in my inventory I would do this (and by max time I mean if you got logs after 1 second it would stop waiting).
Simba Code:
tabBackPack.waitForShift(5000);
For example, in the clickTree() procedure I wrote above, I could simply add this line after I click the tree to wait for a log to appear in my backpack.
Simba Code:
procedure clickTree();
var
x, y: integer;
begin
if mainscreen.findObject(x, y, 925721, 11, ['vergreen'], MOUSE_RIGHT) then
begin
writeLn('We right clicked a tree!');
chooseOption.select(['hop down']);
tabBackPack.waitForShift(5000); // After we click tree, wait for logs to appear
end;
end;
Checking if the backPack is full
Another useful function is tabBackPack.isFull(), which returns true if the backpack has an item in every slot. This is useful in many situations, such as if you’re mining or woodcutting and you want to keep mining until the backpack is full. Let’s use the example above of clicking the Evergreen Tree. I can make it repeat that procedure until the backpack is full.
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure clickTree();
var
x, y: integer;
begin
if mainscreen.findObject(x, y, 925721, 11, ['vergreen'], MOUSE_RIGHT) then
begin
writeLn('We right clicked a tree!');
chooseOption.select(['hop down']);
tabBackPack.waitForShift(5000);
end;
end;
begin
clearDebug();
setupSRL();
repeat
clickTree(); // Repeat this procedure until we have 28 logs
until tabBackPack.isFull();
end.
Dropping items in the backPack
The last inventory function I’ll show you is how to easily drop items. There are a number of ways to drop items, such as dropping everything, different drop patterns, or only dropping specific slots. These are all accomplished with the function:
There are a number of different dropping patterns. For example, I could drop all items in order starting at slot 1 all the way to slot 28, or I could start at slot 28 and work backwards. These are the drop patterns built into SRL-6:
DROP_PATTERN_REGULAR (slot 1 to 28)
DROP_PATTERN_BACKWARDS (slot 28 to 1)
DROP_PATTERN_SNAKE (slot 1 to 5, 10 to 6, 11 to 20, etc.)
DROP_PATTERN_UP_DOWN (Moves down the columns; slot 1, 6, 11, 16, 21, 26, 2, 7 etc.)
If I wanted to drop everything in order from slot 1 to slot 28 I would write:
Simba Code:
tabBackPack.dropItems(DROP_PATTERN_REGULAR);
I can also drop only certain slots by putting all the slots I want to drop in an array. For example, if I wanted to drop slots 1, 3, 10, and 20 I could go:
Simba Code:
tabBackPack.dropItems([1, 3, 10, 20]);
Let’s put this in our script to complete a basic power chopper! (like, OMG totally cool).
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure clickTree();
var
x, y: integer;
begin
if mainscreen.findObject(x, y, 925721, 11, ['vergreen'], MOUSE_RIGHT) then
begin
writeLn('We right clicked a tree!');
chooseOption.select(['hop down']);
tabBackPack.waitForShift(5000);
end;
end;
begin
clearDebug();
setupSRL();
repeat // Notice the 2 repeat loops (1 repeats the whole script, 1 the chop tree procedure only)
repeat
clickTree();
until tabBackPack.isFull();
tabBackPack.dropItems(DROP_PATTERN_SNAKE); // Once backpack is full, it will drop everything
until false; // Until false means it will repeat this loop forever
end.
Well done on creating your first runescape script for RS3. You can now tell all of your friends you are a "pro scriptwriter".
5) Minimap Basics
In this section I want to cover the minimap. There are two functions I want to explain here; how to rotate the compass, and how to find and click minimap symbols.
Rotating the compass
Rotating the compass is done using the function:
There are 4 angles already built in to SRL-6. These are:
MM_DIRECTION_NORTH
MM_DIRECTION_SOUTH
MM_DIRECTION_EAST
MM_DIRECTION_WEST
If I wanted to make the compass north I would go:
Simba Code:
minimap.setAngle(MM_DIRECTION_NORTH);
I could also move it to any angle I wanted by writing the actual angle (from 0 to 360). For example, if I wanted it between North and East (i.e., 45 degrees) I would go:
Clicking minimap symbols
Minimap symbols are found using this function:
Simba Code:
minimap.findSymbol(var TPoint, symbol, searchBox);
You can see the function takes 3 parameters, which I'll take you through below. The second parameter is the symbol you want to find. There are ~94 symbols in SRL-6, these are some of them (the full list with images can be found
in this thread):
MM_SYMBOL_TREE
MM_SYMBOL_RUNECRAFTING
MM_SYMBOL_MINING
MM_SYMBOL_BANK
MM_SYMBOL_LODESTONE
The last parameter, searchBox, is a TBox where you want to look for the symbol (remember we created a TBox above). Instead of creating your own box around the minimap interface, SRL-6 has allows you to get the boundaries of any interface (mainscreen, chatBox, etc.) by using:
So to get a TBox around the minimap interface I can use:
I want to find and click the lodestone symbol, so I will use MM_SYMBOL_LODESTONE for the symbol:
So far my function looks like this:
Simba Code:
minimap.findSymbol(var TPoint, MM_SYMBOL_LODESTONE, minimap.getBounds());
Now I'll explain the first parameter
var TPoint. The
var in front of the parameter means that it is an OUTPUT parameter, not INPUT parameter like the others. Basically, the coordinates of the symbol it finds are stored in this variable which you can use later (remember a TPoint is made up of X and Y coordinates).
As the TPoint is an output parameter, we need to declare a TPoint variable which will store the information it receives from the findObject function. You'll see below I've declared a TPoint called "myPoint". When it finds the lodestone symbol, the X and Y coordinates are stored in "myPoint". I then left click "myPoint" to make my player run to the symbol:
Simba Code:
procedure clickTheLodestone();
var
myPoint: TPoint; // I've declared this TPoint.
begin
minimap.findSymbol(myPoint, MM_SYMBOL_LODESTONE, minimap.getBounds());
mouse(myPoint, MOUSE_LEFT); // Now we click 'myPoint' (the above function stored the coordinates of the symbol in 'myPoint');
end;
6) Bank Screen Basics
In this section I want to cover the basics with the bankScreen. This will include how to open and close the bank, and how to deposit and withdraw items. This is the RS3 bankScreen:
Opening and closing the bank
It is actually quite easy to open the bank as there is already a function built into SRL-6. This function is:
Simba Code:
bankScreen.open(bankType);
where the bankType is the type of bank you are opening. The valid options for this are:
BANK_NPC_BLUE
BANK_NPC_GREY
BANK_NPC_GREEN
BANK_NPC_DRAYNOR
BANK_BOOTH
BANK_CHEST_SW
BANK_CHEST_SHANTAY
BANK_CHEST_DUEL
BANK_CHEST_CW
BANK_CHEST_GROTTO
BANK_TABLE_BURTHORPE
BANK_CHEST_LUMBRIDGE
For example, I'm standing in Varrock West Bank and I want to open the bank:
Since the bankers are blue, I would use the function:
Simba Code:
bankScreen.open(BANK_NPC_BLUE);
Closing the bank is a lot easier. You just use the function:
Depositing items
These are a number of ways to deposit items. I'll show you 3 ways: quick deposit, certain slots, and the preset buttons. There are other ways too, such as finding DTMs or bitmaps, but I won't cover those now.
The first function is the quickDeposit:
Simba Code:
bankScreen.quickDeposit(depositType);
Where the depositType parameter is the quick deposit button you want to click. There are 4 buttons, which are:
QUICK_DEPOSIT_INVENTORY
QUICK_DEPOSIT_EQIUPMENT
QUICK_DEPOSIT_BOB
QUICK_DEPOSIT_MONEY_POUCH
For example, if I wanted to deposit all 28 of these logs into the bank, I would want to quick click the QUICK_DEPOSIT_INVENTORY button, like so:
Simba Code:
bankScreen.quickDeposit(QUICK_DEPOSIT_INVENTORY);
The second method is to deposit certain slots. If there are items which you don't want to deposit, it is best to deposit certain slots by using the function:
Simba Code:
bankScreen.deposit(slots);
The slots parameter is an integer array (a set of numbers as opposed to an individual number). Arrays are filled inside square brackets. Here are a few examples of how I can fill this in:
[1..28] will deposit all slots from 1 to 28
[2..28] will ignore slot 1 and deposit the rest
[1, 2, 10] will deposit slots 1, 2 and 10, and ignore the rest.
Take the following example. I want to deposit the logs only, and ignore slot 1 (my axe) and slot 28 (my small pile of coins). I would write:
Simba Code:
bankScreen.deposit([2..27]);
The last method I'm going to show you is the preset buttons. You have to setup your presets in-game before using these. The good thing about this method it that it deposits, withdraws, and closes the bank all at the same time. This is the function:
Simba Code:
bankScreen.clickButton(button);
Where the button parameter is one of the following:
BANK_BUTTON_PRESET_1
BANK_BUTTON_PRESET_2
For example, if I wanted to click the first preset button, I would use this:
Simba Code:
bankScreen.clickButton(BANK_BUTTON_PRESET_1);

Withdrawing items
There is one function you need to know when withdrawing items, which is:
Simba Code:
bankScreen.withdraw(slot, amount, mouseOverText);
Where the slot is the bank slot number, the mouseOverText you already know, and the amount is any number OR one of the following:
WITHDRAW_AMOUNT_ALL
WITHDRAW_AMOUNT_ALL_BUT_ONE
Bank slots start in the top left at 1, and go across the rows, and then down the columns. Like so:
The 3rd parameter, the mouseOverText, just double checks that the item in the slot is the one you want to withdraw. You can leave this blank to ignore the text and withdraw any item. If I wanted to withdraw all of the coins I would go:
Simba Code:
bankScreen.withdraw(20, WITHDRAW_AMOUNT_ALL, ['oins']);
Or if I wanted to withdraw 25 items in slot 8 (in this case law runes) I could go:
Simba Code:
bankScreen.withdraw(8, 25, ['']);
Putting it all together
Now I'm going to put together everything you've learnt about the bankScreen into one simple program. Let's say I'm making a script that fletches logs into bows. I want to do the following:
- Open the bank at Varrock West
- Deposit everything in my inventory
- Withdraw 28 oak logs, which are in slot 10
- Close the bank
Read the following snippet and try and understand it:
Simba Code:
program exampleBank;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure doBankingStuff();
begin
if bankScreen.open(BANK_NPC_BLUE) then // Open the bank
begin
bankScreen.quickDeposit(QUICK_DEPOSIT_INVENTORY); // Press the quick deposit button
wait(randomRange(1000, 2000));
bankScreen.withdraw(10, WITHDRAW_AMOUNT_ALL, ['']); // Withdraw all from slot 10
wait(randomRange(1000, 2000));
bankScreen.close(); // Close the bank
end else
writeLn('Couldn''t find the bank for some reason!');
end;
begin
clearDebug();
setupSRL();
doBankingStuff();
end.
I could also achieve the same result using the preset buttons (if I have setup my preset in-game previously):
Simba Code:
program exampleBank;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure doBankingStuff();
begin
if bankScreen.open(BANK_NPC_BLUE) then
bankScreen.clickButton(BANK_BUTTON_PRESET_1) // This deposits, withdraws, and closes the bank
else
writeLn('Couldn''t find the bank for some reason!');
end;
begin
clearDebug();
setupSRL();
doBankingStuff();
end.
7) ActionBar Basics
In this section I want to cover the actionBar. I'll show you how to click (and key press) actionBar slots, how to reading the player's HP/Adrenaline/Prayer/Summoning percent, and enable or disable auto-retaliate.
Clicking an actionBar slot
To click an actionBar slot using the mouse, you could make a mouseBox like we did right at the beginning, but you should use this function:
Simba Code:
actionBar.clickSlot(slot, mouseAction)
Where the slot is a number from 1 to 14, and the mouseAction you should already know from above.
If I wanted to left click the slice ability (in slot 1), I would write:
Simba Code:
actionBar.clickSlot(1, MOUSE_LEFT)
To actually type '1' using the keyboard instead of clicking with the mouse, I can use this function:
Simba Code:
typeSend(text, pressEnter)
The first parameter is a string, and the second is a boolean, so to type 1 and not press enter, I would write:
Getting the players HP/Adrenaline/Prayer/Summoning percentage
You can return the players current HP percent (and the other stats) as an integer. Each of these stats has a slightly different function, but they are used in exactly the same way:
Simba Code:
actionBar.getHPPercent();
actionBar.getAdrenalinePercent();
actionBar.getPrayerPercent();
actionBar.getSummoningPercent();
If I wanted to print my current HP percent I could write:
Simba Code:
program actionBarExample;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure actionBarTest();
var
myHP: integer;
begin
myHP := actionBar.getHPPercent(); // Now the 'myHP' variable is holding our current HP
writeLn(myHP);
end;
begin
clearDebug();
setupSRL();
actionBarTest();
end.
Enabling or disabling auto-retaliate
You can enable of disable auto-retaliate by clicking the retaliate button. To do this we use the function:
Simba Code:
actionBar.setRetaliate(enabled);
The 'enabled' parameter is a boolean, so it can be either True or False. If I wanted to enable retaliate I would write:
Simba Code:
actionBar.setRetaliate(True);
8) DepositBox Basics
In this section I want to cover the depositBox. This is basically the same as the bankScreen section above, so I will quickly skim over this without going into too much detail. I'll show you how to deposit items by clicking them, and by using the deposit buttons at the bottom of the interface.
Depositing items in the DepositBox
The first method is by using the quick deposit button. The button you will use the most is the inventory button:
Simba Code:
depositBox.quickDeposit(QUICK_DEPOSITBOX_INVENTORY);
Just like the bankScreen, there are 3 other constants which you can use instead of the INVENTORY button:
QUICK_DEPOSITBOX_EQUIPMENT
QUICK_DEPOSITBOX_BOB
QUICK_DEPOSITBOX_MONEY_POUCH
The next deposit method is to click the actual items. Again, this is identical to the bankScreen code, except you are calling it through the depositBox interface type. To deposit slots 2 to 28 I would write:
Simba Code:
depositBox.deposit([2..28]);
Once you have finished depositing items, you can close the depositBox by writing:
9) LodestoneScreen Basics
In this section I want to cover the lodestoneScreen. I'll show to show you how to lodestone teleport to any location.
Lodestone teleporting
Teleporting via the lodestone network is very easy in SRL-6. There is just one function you need to be familiar with.
Simba Code:
lodestoneScreen.teleportTo(location);
This function opens the lodestoneScreen and clicks the location you set. The location can be one of 23 locations. Here are some examples:
LOCATION_EDGEVILLE
LOCATION_FALADOR
LOCATION_PORT_SARIM
LOCATION_VARROCK
LOCATION_DRAYNOR_VILLAGE
LOCATION_LUMBRIDGE
If I wanted to teleport to Varrock I would write:
Simba Code:
lodestoneScreen.teleportTo(LOCATION_VARROCK);
This function also checks that the lodestone is unlocked, and that it isn't P2P, so you don't try and click something that you cannot.
10) ToolScreen Basics
In this section I'll cover the ToolScreen, which is the interface that pops up when you first click a log, or try and use a needle for crafting. I'll show you how to select a tool from this interface.
Selecting a tool
There are two ways to select a tool. You can either select a tool using a string (i.e., the name of the tool, like 'Needle'), or the slot number where the tool is located. Here are two ways to select the Knife in the above image:
Simba Code:
toolScreen.select('Knife');
And since the knife is in the second position, I can use the integer:
I'll cover the next 2 interfaces before combining these in a practical example.
11) ProductionScreen Basics
In this section I want to cover the ProductionScreen, which is used in many skills, such as smithing, cooking, and fletching. Firstly, I'll show you how to select an item, and then click the start button.
Selecting an item
To select an item, all you need to know is what slot the product is in. Like all the slots in SRL-6, they start at the top-left, go across the row, and then down to the next column. If I wanted to click the arrow shafts in the above image, I would write:
Simba Code:
productionScreen.selectBox(1);
Clicking the start button
Once the item is selected, then you most likely want to press the start button. This is very simple, and all you have to write is:
Simba Code:
productionScreen.clickStart();
Once you click the start button, the progressScreen will open (which is covered in the next section).
12) ProgressScreen Basics
In this section I'll cover the ProgressScreen. The only thing that you really want to do with the progressScreen is wait until it's no longer open, or until the 'Cancel' button changes to the 'Done' button.
Wait until the progressScreen is no longer open
All interfaces in SRL-6 (like the bankScreen, depositBox, lodestoneScreen etc.) have a boolean function:
This function returns true if the interface is open. The 'waitTime' parameter is optional, and it's used if you want to wait a few seconds for the interface to open. You can use the result of this function to tell when the progressScreen (or any other interface) is no longer open. In the following snippet, I will put together some of the code you've already learnt from the backpack, toolScreen, productionScreen, and progressScreen interfaces:
Simba Code:
program new;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
procedure makeSomeArrowShafts();
begin
tabBackpack.mouseSlot(1, MOUSE_LEFT); // Left click backpack slot 1 (e.g., logs)
if toolScreen.isOpen(2000) then // If the toolScreen is open within 2 seconds, click the Knife
toolScreen.select('Knife');
if productionScreen.isOpen(5000) then // If productionScreen is open within 5 seconds
begin
productionScreen.selectBox(1); // Select the first box (arrow shafts)
productionScreen.clickStart(); // Click the start button
if progressScreen.isOpen(5000) then // if progressScreen is open within 5 seconds
begin
writeLn('The progressScreen is open!');
repeat
wait(1000);
until (not progressScreen.isOpen()); // Repeat waiting 1 second until it's not open anymore
end;
end;
end;
begin
clearDebug();
setupSRL();
makeSomeArrowShafts();
end.
You could literally combine this little script with the woodcutting example in the above section, and you just about have a fully functional arrow shaft maker! Or you could combine this with the banking snippet above to cut bows, cut gems, crush chocolate...whatever you want!
Getting the progressScreen button
If you want your script to be a little bit faster, you can wait for the progressScreen 'Done' button (or until the 'Cancel' button is no longer present). You can get the current button using the function:
Simba Code:
progressScreen.getButton();
Instead of waiting until the progressScreen is no longer open, I could change that loop to wait until the button is not equal to the cancel button:
Simba Code:
repeat
wait(1000);
until (progressScreen.getButton() <> PROGRESS_BUTTON_CANCEL);
13) PowersScreen Basics
In this section I'll cover the PowersScreen, which is mainly used in combat related scripts. Using this interface, you can change your combat mode (e.g., momentum, revolution), modify the experience types for each combat style (e.g., defence XP for ranged combat style), and add abilities to the action bar.
Selecting a combat mode
In RS3 there are now 3 combat modes: Full Manual, Revolution, and Momentum, as seen on the left side of the image above. You can set the combat mode using the function:
Simba Code:
powersScreen.setCombatMode(combatMode);
The combat mode can be one of the following:
MODE_MANUAL
MODE_REVOLUTION
MODE_MOMENTUM
If I wanted to set my player's combat mode to momentum (like it is in the above image), I would write:
Simba Code:
powersScreen.setCombatMode(MODE_MOMENTUM);
These powersScreen functions automatically open the powersScreen if it's not already open, making it very easy for you as a scripter.
Setting combat experience
On the right-hand side of the above image, there are different XP selection settings, for each of the three combat styles. You can set the experience type, for a particular combat style using the function:
Simba Code:
powersScreen.setCombatExperience(combatStyle, ExperienceType);
The combat style can be one of the following:
MELEE_STYLE
RANGED_STYLE
MAGIC_STYLE
and the ExperienceType can be one of the following:
XP_BALANCED
XP_RANGED_AND_DEFENCE
XP_MAGIC_AND_DEFENCE
XP_ATTACK
XP_STRENGTH
XP_RANGED
XP_MAGIC
XP_DEFENCE
For example, if I wanted to set my player's melee combat style to defence XP, I would write:
Simba Code:
powersScreen.setCombatExperience(STYLE_MELEE, XP_DEFENCE);
This function also prevents you from doing something silly, like setting the melee combat style to rangedXP.
Adding abilities to the actionBar
A great feature of the powersScreen is the ability to add abilities to the actionBar for customised setups. There are over 140 different abilities that you can add to the actionBar with the following function:
Simba Code:
powersScreen.addAbilityToActionBar(ability, slot);
The 'slot' parameter is the actionBar slot number where you want to add the ability. If an ability already exists in the slot, it will clear the previous ability before adding the new one. The ability parameter can be one of many, here are some examples:
PS_SLICE
PS_HAVOC
PS_AIR_BOLT
PS_VARROCK_TELEPORT
PS_LVL_6_ENCHANT
As I said, there are over 140 different abilities. The full list can be found in the spoiler below:
{ Attack Abilities }
PS_SLAUGHTER
PS_SLICE
PS_OVERPOWER
PS_HAVOC
PS_BACKHAND
PS_FORCEFUL_BACKHAND
PS_SMASH
PS_BARGE
PS_FLURRY
PS_SEVER
PS_HURRICANE
PS_MASSACRE
PS_METEOR_STRIKE
PS_BALANCED_STRIKE
{ Strength Abilities }
PS_STOMP
PS_KICK
PS_PUNISH
PS_DISMEMBER
PS_FURY
PS_DESTROY
PS_QUAKE
PS_BERSERK
PS_CLEAVE
PS_ASSAULT
PS_DECIMATE
PS_PULVERISE
PS_FRENZY
{ Ranged Abilities }
PS_PIERCING_SHOT
PS_SNAP_SHOT
PS_DEADSHOT
PS_SNIPE
PS_DAZING_SHOT
PS_BINDING_SHOT
PS_NEEDLE_STRIKE
PS_TIGHT_BINDINGS
PS_FRAGMENTATION_SHOT
PS_ESCAPE
PS_RAPID_FIRE
PS_RICOCHET
PS_BOMBARDMENT
PS_INCENDIARY_SHOT
PS_UNLOAD
PS_DEATHS_SWIFTNESS
{ Magic Abilities }
PS_ASPHYXIATE
PS_WRACK
PS_OMNIPOWER
PS_DRAGON_BREATH
PS_SONIC_WAVE
PS_IMPACT
PS_CONCENTRATED_BLAST
PS_DEEP_IMPACT
PS_COMBUST
PS_SURGE
PS_DETONATE
PS_CHAIN
PS_WILD_MAGIC
PS_METAMORPHOSIS
PS_TSUNAMI
PS_SUNSHINE
{ Magic Combat Spells }
PS_AIR_STRIKE
PS_CONFUSE
PS_WATER_STRIKE
PS_EARTH_STRIKE
PS_WEAKEN
PS_FIRE_STRIKE
PS_AIR_BOLT
PS_CURSE
PS_BIND
PS_WATER_BOLT
PS_EARTH_BOLT
PS_FIRE_BOLT
PS_AIR_BLAST
PS_WATER_BLAST
PS_SNARE
PS_SLAYER_DART
PS_EARTH_BLAST
PS_FIRE_BLAST
PS_DIVINE_STORM
PS_AIR_WAVE
PS_WATER_WAVE
PS_VULNERABILITY
PS_EARTH_WAVE
PS_ENFEEBLE
PS_FIRE_WAVE
PS_STORM_OF_ARMADYL
PS_ENTANGLE
PS_POLYPORE_STRIKE
PS_STAGGER
PS_AIR_SURGE
PS_WATER_SURGE
PS_TELEPORT_BLOCK
PS_EARTH_SURGE
PS_FIRE_SURGE
{ Magic Teleport Spells }
PS_HOME_TELEPORT
PS_MOBILISING_ARMIES_TELEPORT
PS_VARROCK_TELEPORT
PS_LUMBRIDGE_TELEPORT
PS_FALADOR_TELEPORT
PS_HOUSE_TELEPORT
PS_CAMELOT_TELEPORT
PS_ARDOUGNE_TELEPORT
PS_WATCHTOWER_TELEPORT
PS_GOD_WARS_DUNGEON_TELEPORT
PS_TROLLHEIM_TELEPORT
PS_APE_ATOLL_TELEPORT
PS_TELE_OTHER_LUMBRIDGE
PS_TELE_OTHER_FALADOR
PS_TELE_OTHER_CAMELOT
{ Magic Skilling Spells }
PS_ENCHANT_CROSSBOW_BOLT
PS_LVL_1_ENCHANT
PS_BONES_TO_BANANAS
PS_LOW_LEVEL_ALCHEMY
PS_LVL_2_ENCHANT
PS_TELEKINETIC_GRAB
PS_SUPERHEAT_ITEM
PS_LVL_3_ENCHANT
PS_HIGH_LEVEL_ALCHEMY
PS_CHARGE_WATER_ORB
PS_LVL_4_ENCHANT
PS_BONES_TO_PEACHES
PS_CHARGE_EARTH_ORB
PS_CHARGE_FIRE_ORB
PS_CHARGE_AIR_ORB
PS_LVL_5_ENCHANT
PS_LVL_6_ENCHANT
{ Defensive Abilities }
PS_ANTICIPATION
PS_BASH
PS_REVENGE
PS_PROVOKE
PS_IMMORTALITY
PS_FREEDOM
PS_REFLECT
PS_RESONANCE
PS_REJUVENATE
PS_DEBILITATE
PS_PREPARATION
PS_BARRICADE
{ Constitution Abilities }
PS_WEAPON_SPECIAL_ATTACK
PS_REGENERATE
PS_SIPHON
PS_INCITE
For example, if I wanted to put the slice melee ability into the first actionBar slot (as in the image above) I would write:
Simba Code:
powersScreen.addAbilityToActionBar(PS_SLICE, 1);
14) ConversationBox Basics
In this section I'll cover the ConversationBox. The conversationBox appears when ever you are talking to someone, and sometimes when you get game notifications. Sometimes you need to proceed through the conversation by clicking the continue button, and selecting conversation options.
Pressing the continue button
Simba Code:
conversationBox.continue(spaceBar, wait);
Simba Code:
conversationBox.continue(True, True);
Selecting a conversation option
Simba Code:
conversationBox.selectOption(2);
Simba Code:
conversationBox.selectOption(['PIN']);
15) ChatBox Basics
In this section I'll cover the ChatBox.
Reading the XP Bar
Finding text on lines
Simba Code:
chatBox.findTextOnLines(['ello'], [1..5]);
16) CollectBox Basics
In this section I'll cover the CollectBox.
Pressing a collect button
Simba Code:
collectBox.collectButton(button);
COLLECT_BUTTON_BANK
COLLECT_BUTTON_INV
Simba Code:
collectBox.collectButton(COLLECT_BUTTON_BANK)
17) GrandExchange Basics
GrandExchange compatibility was recently added to SRL-6, and in this section I'll show you how to buy and sell items, and how to look-up prices.
Selling an item on the GE
Selling an item is very easy, and can be done with the function:
Simba Code:
grandExchange.sellItem(packSlot, price, quantity);
The first parameter is the backpack slot where the item you're selling is located. In the above image, you can see I have 1000 noted Swamp toads in the first backpack slot, so packSlot would be 1.
The
'price' parameter is a string; valid options are:
- 'mid'
- '-5'
- '+5'
- Any other number
The
'quantity' parameter is a string; valid options are:
- '1'
- '10'
- '100'
- 'all'
- Any other number
So if I wanted to sell all of my Swamp toads at 5% above the current mid price, I would write:
Simba Code:
grandExchange.sellItem(1, '+5', 'all');
and if I wanted to sell 50 of them for 2000 each, I would write:
Simba Code:
grandExchange.sellItem(1, '2000', '50');
Buying an item on the GE
Buying an item is similar to selling an item; the function is:
Simba Code:
grandExchange.buyItem(itemName, price, quantity);
The itemName is the name of the item you are buying (make sure it's accurate). The only difference to the 'price' and 'quantity' parameters when buying an item is that there is
no 'All' option for the quantity (as you cannot buy 'all' of an item).
The
'price' parameter is a string; valid options are:
- 'mid'
- '-5'
- '+5'
- Any other number
The
'quantity' parameter is a string; valid options are:
- '1'
- '10'
- '100'
- Any other number
If I wanted to buy 5000 Swamp toads at mid price, I would write:
Simba Code:
grandExchange.buyItem('Swamp toad', 'mid', '5000');
Looking up the price of an item
With the following function you can return the current mid price of any item on the grand exchange:
Simba Code:
grandExchange.getPrice(item);
The 'item' parameter is an integer; it's ID number.
For example, if I wanted to find the price of a Swamp toad, I would use Swamp toad's ID, which is 2150:
Simba Code:
grandExchange.getPrice(2150);
Item IDs can be found on the on the item's Grand Exchange webpage. The webpage for Swamp toads is:
http://services.runescape.com/m=item...em.ws?obj=2150
and you will notice the last 4 digits of the URL are the item's ID number. Alternatively, you could look up IDs at itemdb.biz
18) Loot Screen Basics
Recently Jagex added the loot screen as a new way to collect drops. In this section I'll show you some of the lootScreen methods available to you.
Looting certain slots
You can loot an individual slot with:
Or you can loot an array of slots with:
Simba Code:
lootScreen.lootSlots([1, 2, 3, 14]);
Looting DTMs
I haven't covered how to make a DTM in this tutorial, so if you don't know how to make an item DTM you better go and read my AIO Beginners Guide!
To loot a single DTM:
Simba Code:
lootScreen.lootDTM(MyDTM);
Or you can loot an array of DTMs:
Simba Code:
lootScreen.lootDTMs([BonesDTM, CoinsDTM]);
Both of these methods will loot ALL of the matching DTMs.
Using the loot buttons
Simba Code:
lootScreen.clickButton(LOOT_BUTTON_ALL);
Simba Code:
lootScreen.clickButton(LOOT_BUTTON_CUSTOM);
So to give you an example snippet:
Simba Code:
procedure lootStuff();
begin
// if mainScreen.findObject(.....) // Clicking ground loot
if lootScreen.isOpen(5000) then
begin
lootScreen.lootSlots([1, 2, 3, 4]);
writeLn('We just looted the first 4 slots');
lootScreen.close();
end;
end;