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.

jca

Members
  • Joined

  • Last visited

Everything posted by jca

  1. ^ Contabo is a dream.
  2. 99 fishing / cooking / woodcutting. Received a 2 day for Karambwans.
  3. jca replied to brayden921's topic in Spam/Off Topic
    I would spend less time worrying about what other people target for their GP/hr and more time working out what works for you.
  4. jca replied to aliraj's topic in Requests
    Checkout my site, link in bio.
  5. Looks good bro! Excited to see progress. What are your short term goals?
  6. I'm checking for greater than. Greater than: > checks if the reference on the left is greater than the reference on the right. Less than: < check if the reference on the left is less than the reference on the right. 5 > 2 // true 2 < 5 // true 5 < 2 // false So if the shop has greater than 0 buy the soda ash. To check if it's false add an exclamation mark before the boolean function. if ( !sodaAshToBuy() ){ //hop }
  7. It’s throwing a NullPointerException because you’re calling getItemAmount() on a widget that doesn’t exist somewhere in the loop. private boolean sodaToBuy(){ RS2Widget sodaAsh = getWidgets().get(300, 16, 23); return sodaAsh != null && sodaAsh.getItemAmount() > 0; } Also you don't need to use the equal to operator when checking booleans, instead if ( sodaToBuy() ){ buySoda(); }
  8. For each boolean return widget != null && widget.getItemAmount() > 0;
  9. getWalking().walk(Position p); Has a minimum distance threshold greater than zero, so if you’re within the threshold (I’m not 100% what it is) the event is considered successful. You need a custom walk event. WalkingEvent myWalk = new WalkingEvent(Position p); myWalk.setMinDistanceThreshold(0); execute(myWalk); Also you should restructure to avoid while() loops.
  10. jca replied to Rumple's topic in Scripting Help
    I see. private long strengthXp; public int onLoop(){ if ( myPlayer().isAnimating() && hasGainedStrengthXp() ){ strengthXp = getExperienceTracker().getGainedXp(Skill.STRENGH); return 3000; } else { // do loop } return 200; } private boolean hasGainedStrenghtXp(){ return getExperienceTracker().getGainedXp(Skill.STRENGTH) > strengthXp; } This will check whether your player is animating and current strength experience is greater than previous strength experience, if it is then set new strength xp gauge and pause for 3 secs until the next check. You can improve this with a conditional sleep and interval to check.
  11. jca replied to Rumple's topic in Scripting Help
    What you're doing seems a little strange... public int onLoop(){ if ( ! myPlayer().isAnimating() ){ if ( needsToRefuelStove() ){ refuelStove(); } else if ( needsToShovelCoke() ){ shovelCoke(); } else { operatePump(); } } return 200; } private void refuelStove(){} private void shovelCoke(){} private void operatePump(){ RS2Object pump = getObjects().closest("Pump"); if ( pump != null && pump.interact("Operate") ){ new ConditionalSleep(3000){ @Override public boolean condition() throws InterruptedException { return myPlayer().isAnimating(); } }.sleep() } } /* Booleans for you to fill */ private boolean needsToRefuelStove(){ return false; } private boolean needsToShovelCoke(){ return false; } By splitting your code out like this it's a lot easier to see what's going on. As far as checking strength XP, a better way would be to check if your player is animating, if so you don't need to do anything, if not then see which action is next.
  12. jca replied to Dickie's topic in Introductions
    Welcome to the community! Just be genuine and helpful, you'll soon build up a rep.
  13. Chatting now.
  14. 125k ea. Can supply immediately
  15. getObjects().closest("Ore vein") That will return the closest object with that name from all the objects in getObjects().getAll(), which returns all the objects in the loaded region. If you want to use getAll() use Java's stream API. getObjects().getAll().stream().filter(obj -> obj.getName().equalsIgnoreCase("Ore vein")).findFirst().orElse(null); That will return the first object in the collection with the name "Ore vein". If you want to compare distance that you have to use .min()
  16. Show us all of your code so we can help If the widget exists just call getWidgets().get(465, 24, 53).interact()
  17. It will get all objects in the loaded region
  18. Coordinates are not the best way to do it. Look at the debug. getObjects().getAll() returns all objects in the loaded region, if closest() is within 3-4 tiles it’ll return that.
  19. Use the entity hover debug to look at what you need to listen for
  20. Actually my original answer was incorrect on reading the code. Try new ConditionalSleep(random(50_000, 60_000), random(500, 1500)) { @Override public boolean condition() throws InterruptedException { log("Can mine? " + vein.hasAction("Mine")); return !vein.hasAction("Mine"); // I've tried with and without exclamation, no results. } }.sleep();
  21. Real
  22. Well done on the project... if you need any help go ahead and ask! All the best with future releases.
  23. A win is what we need for sure
  24. Bring it on for Saturday's game then!

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.