Skip to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Leaderboard

Popular Content

Showing content with the highest reputation on 03/23/16 in all areas

  1. Havn't posted for sometime, here is work that I completed recently:
  2. Examples: 1) PrayerCompatibility.areCompatible(PrayerButton.BURST_OF_STRENGTH, PrayerButton.MYSTIC_LORE); // -> false 2) Code: package org.botre.prayer; import org.osbot.rs07.api.ui.PrayerButton; public class PrayerCompatibility { private enum Wrapper { THICK_SKIN(PrayerButton.THICK_SKIN, (byte)0b00000001), BURST_OF_STRENGTH(PrayerButton.BURST_OF_STRENGTH, (byte)0b00001010), CLARITY_OF_THOUGHT(PrayerButton.CLARITY_OF_THOUGHT, (byte)0b00010100), SHARP_EYE(PrayerButton.SHARP_EYE, (byte)0b00011110), MYSTIC_WILL(PrayerButton.MYSTIC_WILL, (byte)0b00011110), ROCK_SKIN(PrayerButton.ROCK_SKIN, (byte)0b00000001), SUPERHUMAN_STRENGTH(PrayerButton.SUPERHUMAN_STRENGTH, (byte)0b00001010), IMPROVED_REFLEXES(PrayerButton.IMPROVED_REFLEXES, (byte)0b00010100), RAPID_RESTORE(PrayerButton.RAPID_RESTORE, (byte)0b00000000), RAPID_HEAL(PrayerButton.RAPID_HEAL, (byte)0b00000000), PROTECT_ITEM(PrayerButton.PROTECT_ITEM, (byte)0b00000000), HAWK_EYE(PrayerButton.HAWK_EYE, (byte)0b00011110), MYSTIC_LORE(PrayerButton.MYSTIC_LORE, (byte)0b00011110), STEEL_SKIN(PrayerButton.STEEL_SKIN, (byte)0b00000001), ULTIMATE_STRENGTH(PrayerButton.ULTIMATE_STRENGTH, (byte)0b00001010), INCREDIBLE_REFLEXES(PrayerButton.INCREDIBLE_REFLEXES, (byte)0b00010100), PROTECT_FROM_MAGIC(PrayerButton.PROTECT_FROM_MAGIC, (byte)0b00100000), PROTECT_FROM_MISSILES(PrayerButton.PROTECT_FROM_MISSILES, (byte)0b00100000), PROTECT_FROM_MELEE(PrayerButton.PROTECT_FROM_MELEE, (byte)0b00100000), EAGLE_EYE(PrayerButton.EAGLE_EYE, (byte)0b00011110), MYSTIC_MIGHT(PrayerButton.MYSTIC_MIGHT, (byte)0b00011110), RETRIBUTION(PrayerButton.RETRIBUTION, (byte)0b00100000), REDEMPTION(PrayerButton.REDEMPTION, (byte)0b00100000), SMITE(PrayerButton.SMITE, (byte)0b00100000), CHIVALRY(PrayerButton.CHIVALRY, (byte)0b00011111), PIETY(PrayerButton.PIETY, (byte)0b00011111); private PrayerButton prayer; private byte types; private Wrapper(PrayerButton prayer, byte types) { this.prayer = prayer; this.types = types; } } public static byte forPrayer(PrayerButton prayer) { for (Wrapper value : Wrapper.values()) { if(value.prayer == prayer) return value.types; } throw new UnsupportedOperationException("Unable to determine types for: " + prayer); } public static PrayerButton[] findIncompatible(PrayerButton... prayers) { for (PrayerButton prayer : prayers) { byte b = forPrayer(prayer); for (PrayerButton other : prayers) { if(prayer == other) continue; byte o = forPrayer(other); if((b & o)!= 0) return new PrayerButton[]{prayer, other}; } } return null; } public static boolean areCompatible(PrayerButton... prayers) { return findIncompatible(prayers) != null; } }
  3. Click here to go to the SDN page to add the script. Display: Note: This script exploits the no-tick fletching delay of darts and bolts. This script will be rendered useless if that's ever patched.
  4. People are intimidated by Task/Node based scripts because they think its difficult to write and understand. Well you shouldn't be scared, because I'm going to cover everything you need to know. Before going on to the tutorial, I'm expecting from you, To have at least basic knowledge of java To have at least basic knowledge of the OSbots API So what are Task/Node based scripts? Well its simply states but in OOP design. Alright, so we are going to make an abstract class for a Task. We will use this code which I will explain in a bit. import org.osbot.rs07.script.MethodProvider; public abstract class Task { protected MethodProvider api; public Task(MethodProvider api) { this.api = api; } public abstract boolean canProcess(); public abstract void process(); public void run() { if (canProcess()) process(); } } Breaking down this code just comes simply to a few things. A constructor which accepts the MethodProvider class, but why shouldn't it accept the Script class? Well because we only want the task to know about the OSbot api, not the whole methods that the Script class can have, like onLoop(), onStart(), etc. protected MethodProvider api; public Task(MethodProvider api) { this.api = api; } An abstract boolean public abstract boolean canProcess(); An abstract method public abstract void process(); And a run method public void run() { if (canProcess()) process(); } When a class will inherit the methods from the Task class, that class will have a constructor, an abstract method and boolean. The boolean canProcess() will be the condition on which the process() method will execute code. So basically we do the checks and processing with the run() method, we would just check if the condition is true and let the process() method execute code accordingly. Now, we got that abstract class Task, we are going to make it do work for us. We are going to make a drop task, the class will extend the Task class and it will inherit the abstract methods which the Task class has. The drop task will have a condition, the condition will be api.getInventory().isFull(), the condition will return true after the inventory is full and let the process() method execute script accordingly, the code will be api.getInventory().dropAll(); Our class will look something like this import org.osbot.rs07.script.MethodProvider; public class DropTask extends Task { public DropTask(MethodProvider api) { super(api); } @Override public boolean canProcess() { return api.getInventory().isFull(); } @Override public void process() { api.getInventory().dropAll(); } } As you can see we declare a constructor public DropTask(MethodProvider api) { super(api); } Now you might ask why the constructor looks a bit differently from the abstract Task class and what super(api) means? the super() keyword invokes the parents class constructor AKA the Task's class constructor. Now going further we see @Override public boolean canProcess() { return api.getInventory().isFull(); } So that is how our condition is handled, we just return the booleans variable based on what the getInventory().isFull() returns. In term, if the inventory is full the condition will be true, if the inventory is empty the condition will be false. Further on we see @Override public void process() { api.getInventory().dropAll(); } This is basically what our custom task will do after the canProcess() is true, aka when the condition is true. If inventory is full -> we will drop the items. ' After we got our custom task done, we need to let our script execute the tasks, now how we will do it? Simply we will open our main class which extends Script, meaning that the main class is a script. We declare a new ArrayList at the top of our class, to which we will add tasks to. Our main class should look like this import java.util.ArrayList; import org.osbot.rs07.script.Script; public class Main extends Script{ //this is our array list which will contain our tasks ArrayList<Task> tasks = new ArrayList<Task>(); @Override public int onLoop() throws InterruptedException { return 700; } } Now we have our ArrayList which we have a non primitive data type in it (<Task>), in term think of it like the ArrayList is inheriting the methods from Task class. All though its a different topic called https://en.wikipedia.org/wiki/Generics_in_Java you can look into that if you want. Alright, so we have our ArrayList, time to add our tasks to it. In our onStart() method, which only executes once when the script starts we simply add tasks.add(new DropTask(this)); So basically we are adding a new task to the ArrayList, by doing that, to the .add() we add a new object of our DropTask by doing .add(new DropTask(this)); our DropTask has a constructor for MethodProvider which we simply pass by doing DropTask(this) the keyword this references this class that contains the code. Now why does it work by referencing this class, its because the Main class extends Script, the Script class extends MethodProvider as its stated in the OSBots API docs. So we added our tasks to the ArrayList, now we need to check the conditions state and execute the code accordingly. We simply add this to our onLoop() method. tasks.forEach(tasks -> tasks.run()); Which will iterate trough all the tasks in the ArrayList and execute the run() method, as we remember the run() method in our abstract Task script simply checks the condition and executes code if the condition is true. After all this our main class should look like import java.util.ArrayList; import org.osbot.rs07.script.Script; public class Main extends Script{ ArrayList<Task> tasks = new ArrayList<Task>(); @Override public void onStart(){ tasks.add(new DropTask(this)); } @Override public int onLoop() throws InterruptedException { tasks.forEach(tasks -> tasks.run()); return 700; } } Now after all this you can start making your own tasks and adding them to the list. Alright for those who want quick pastes you can find them here in this spoiler: So no need to be scared, you just really need to try and do it, hope this tutorial helped.
  5. 2 points
    Legends come and go, but his memes shall stand the test of time. Rest In Peace
  6. Script udpated to V0.09: - Fixed portal interactions - Fixed walking Should be online in few hours! Khaleesi
  7. 👑CzarScripts #1 Bots 👑 👑 LATEST BOTS 👑 If you want a trial - just post below with the script name, you can choose multiple too. 👑 Requirements 👑 Hit 'like' 👍 on this thread
  8. Looking to Buy Scripts/VIP/Anything in the Store? Selling vouchers to be used on the poopbot store where you can buy scripts/VIP/Sponsor/Donation ranks etc. Currently accepting RS3/ 07 Gold / Crypto / Bank Transfer / CS:GO Skins Rates vary so please ask what the current rate is Message me on Discord @realistgold Unique Discord ID 194091681836957696 Please beware of impostors.
  9. MysteryyChopper Reborn Buy it here Chop anything, anywhere! MysteryyChopper is back and better than ever. MysteryyChopper has been rewritten from scratch, implementing the latest methods for woodcutting including full support for Zeah! Its easy to use, and requires little setup to get started. Those who purchased MysteryyChopper in the past will have full access to MysteryyChopper Reborn! Want a trial? Like this post and make a post below! Features: Supports chopping anywhere in Runescape, including Zeah! Support for all tree types Support for all axes! Smart banking, automatically detects the closest bank to use! Collects nests Powerchop or bank at any location User defined chopping areas with the press of a button Intuitive GUI for quick and easy setup Informative, minimizable paint Ability to change script settings on the fly Instructions: Select the tree to chop from the drop down box If you want to power chop, check the power chop box Enter a chop radius, the default value is 8. I found this to be a fairly decent radius to use in most situations. Press the “Grab Nearby Trees” button. This will set the center of your chopping area to wherever the player is currently at. Once this button is pressed, the nearby trees should be highlighted on the game screen. These are the trees that will be chopped. Press start! Zeah Chopping Guide: I have created a visual map to show what type of tree each cluster is on Zeah, at Hosidius House (this is where you chop on Zeah). There are 3 banks at Hosidius House, and multiple types of trees including; Magics, Maples, Mature Juniper Tree, Willows, Oaks, and normal Trees. This map shows the location for each of these. Please note that these are not the only supported spots! Every single tree is supported, I am simply highlighting the concentrated areas! Final Notes: Once the script is started, the trees should no longer be highlighted. This is to improve script performance. The script can be updated while running. If you wish to change any of the values on the GUI, simply change the value on the GUI, and the press the “Start/Update” button on the GUI. Once the update button is pressed, the script will continue with the new information. The user defined chop area is visible on the minimap in game. Once the chop area is set, a square should be painted on the minimap indicating the bounds that will be used to chop. Any trees within this box will be chopped! The GUI: Proggies: 12 Hours of chopping yews at Zeah 3 Hours of chopping Maples at Zeah 3 Hours of chopping Oaks at Zeah: 1 Hour chopping trees at draynor:
  10. 1 point
    Thank you very much,
  11. can i get a trial plz
  12. 1 point
    trial please?
  13. 1 point
    It's trial for 48 hours possible ? Thanks will post a progress tho.
  14. You da REAL MVP
  15. id, like to be able to cut for a bit, then take a break like im out for a smoke or something, then cut some more, maybe a quicker bathroom break, bot again, then longer breaks like i left for dinner, bot again, break for a smoke, bot, break for the night and so on..... can this be achieved with the os client? It just seems to be consistent with botting and break times and feels like i have no control over it.... like its not human!!! if u can make a custom break system it would be very nice, because i also don't like the current break system
  16. 1 point
    his script is not working nevermind it works!
  17. 1 point
    This script is fantastic, went from 70-99 cooking in a week. Safebotted with some human like breaks and ban free. Trust this script!
  18. Yes, they submit without you knowing. And boom the account is gone. The only way you will know is if you try to log in
  19. Ofcourse there are, but they ain't free. and wet stress thiever is free but it did not work for me. Im not planning on making an AIO thiever. I just made it so people can use Sinatra's tea thiever and the rest of the free ones without having a level gap between them. edit: edited my thread post so people will understand its about the free ones.
  20. 1 point
    I went to go get you the screenshot and the bot started working perfectly! So never mind!
  21. its 2.99$ and thx! Doubt that ... 6k every run makes you lose more then then you gain xD
  22. Hey guys! Found a HUGE CPU bug! Fixed it and will be released soon!
  23. ...SERIOUSLY??? All you did was quote me 10/10 friend.
  24. .

    1 point
  25. This script is seriously the #1 script I have yet to use in my botting tenure. Is is super clean, the anti-ban is INSANE, has randomized mousemovements, auto-reply to conversations, can do basically anything you ask. Super smooth, effecient, and stable. Will post more reports as time goes, here is my first. 10k/hr as early as level 19 when I started it.
  26. Thank you Khal for 99 strength! on my prodded pure, too OP!
  27. Hello, could you give me a shot at your herblore script i am going to try out yours and one other scripters and then see which is best and then maybe buy Thanks Thegamerino
  28. Khal #1 I will post 99 strength for you too Khal!
  29. Done gl on trials ;) As for teleport alching, so it just clicks teleport once, then alches once, and repeat? Sure I can add a system like that
  30. There is a rule that says you can't rwt...
  31. Finally figured out how to do this and I figured others might want to as well, so here's the code! Put this in your global variable declaration: public Image cursor; Have this in your onStart() method: useDefaultPaint(false); try { cursor = ImageIO.read(new URL("YOUR IMAGE URL GOES HERE")); } catch (MalformedURLException e) { log("Error in retrieving mouse cursor!"); } catch (IOException e) { log("Error in retrieving mouse cursor!"); } And then finally put this somewhere in your onPaint() method: int mX = client.getMousePosition().x; int mY = client.getMousePosition().y; g.drawImage(cursor, mX, mY, null); FYI if you use the method moveMouseOutsideScreen() the mouse image you use will appear in the top left of the screen. This is completely normal however it may look a little weird! If you would rather just not have it drawn at all you can do this: if (mX == -1) { //don't draw } else { //draw }

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.