Jump 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.

Deffiliate

Trade With Caution
  • Joined

  • Last visited

Solutions

  1. Deffiliate's post in How to was marked as the answer   
    Make sure you call the experienceTracker.start(Skill) method for each Skill you wish to track.
  2. Deffiliate's post in Entity/RS2Object problems... was marked as the answer   
    The reason you're having a problem is because the noun in the menu actually contains the arrow (->) as well. So you will have to account for that.
     
    To tackle this, you need to interact with the object using a noun that accoutns for the arrow. Here's an example:
    closestObject(objectId).interact("Use", "<col=ff9040>Selected item name<col=ffffff> -> <col=ffff>Object name"boolean forceLeftClick, int walkDistanceThreshold, boolean isWalkingAllowed, boolean turnCamera);
  3. Deffiliate's post in Paint. Hows does it work? was marked as the answer   
    uhmm simplest option would be to change "this" to null.
  4. Deffiliate's post in Select Menu option was marked as the answer   
    Yeah, you had it figured out precisely.
     
    Here's a custom snippet (Credits go to Toph): 
    public boolean selectMenuOption(String action, String noun) throws InterruptedException { if (!s.client.isMenuOpen()) return false; boolean found = false; int index = 0; List<Option> menu = s.client.getMenu(); for (; index < menu.size(); index++) { if (menu.get(index).action.equals(action) && menu.get(index).noun.contains(noun)) { found = true; break; } } if (found) { int x = s.client.getMenuX(); int y = s.client.getMenuY() + 21 + index * 14; return s.client.moveMouseTo(new RectangleDestination(x, y, s.client.getMenuWidth(), 10), false, true, false); } s.moveMouseOutsideScreen(); return false; }
  5. Deffiliate's post in How to do an accurate loot tracker? was marked as the answer   
    Here's what I did:
     
    First create a class called PricedLoot. Has 3 important variables: String name, int price, int amount. In the constructor grab the price from zybez.
    package def.api; import org.osbot.script.rs2.Client; public class PricedItem { private String name; private int lastCount = 0; private int amount = 0; private int price = 0; private int id = 0; public PricedItem(String name, Client c){ this.name = name; if(c.getInventory().contains(name)) lastCount = (int) c.getInventory().getAmount(name); price = PriceGrab.getInstance().getPrice(name, 2); } public void update(Client c){ int increase = (int) (c.getInventory().getAmount(name)- lastCount); if(increase < 0) increase = 0; amount = amount + increase; lastCount = (int) c.getInventory().getAmount(name); } public String getName(){ return name; } public int getAmount(){ return amount; } public int getPrice(){ return price; } public int getValue(){ return amount * price; } public int getId() { return id; } public void setId(int id) { this.id = id; } } You'll also need this custom Zybez price grabbing class I found on here: 
    package def.api; import java.io.*; import java.net.*; public class PriceGrab { private static PriceGrab oneInstance; private URL zybez; private URLConnection urlConnection; private BufferedReader inputScan; private final String zybezUrl = "http://forums.zybez.net/runescape-2007-prices/api/item/"; public static PriceGrab getInstance(){ if(oneInstance == null){ oneInstance = new PriceGrab(); } return oneInstance; } public int getPrice(String itemName, int command){ final String AVERAGE = "average",LOW= "recent_high", HIGH="recent_low"; String item = format(itemName),extracted; int price = 0; openStream(item); extracted = retrieveData(item); switch (command){ case 1: return parseInfo(extracted,LOW); case 2: return parseInfo(extracted,AVERAGE); case 3: return parseInfo(extracted,HIGH); } return price; } private String format(final String string){ if(string.contains(" ")) return string.replaceAll(" ", "+"); else return string; } private void openStream(final String param){ String appended = zybezUrl.concat(param); try { zybez = new URL(appended); urlConnection = zybez.openConnection(); urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); } catch (MalformedURLException e) { System.out.println("Web address formatted incorrectly, printing stack trace"); e.printStackTrace(); } catch(IOException exception) { System.out.println("Url connection has thrown an IOException, printing stack trace"); exception.printStackTrace(); } } private String retrieveData(final String param){ String output = null; try { openStream(param); inputScan = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); output = inputScan.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try {inputScan.close();} catch (IOException e){e.printStackTrace();} } return output; } private int parseInfo(String extracted,String value){ int start, end, price = 0; if(extracted.contains(value)){ start = extracted.indexOf(value); end = extracted.indexOf(",",start); price = Integer.parseInt(extracted.substring(start, end).replaceFirst(".*?(\\d+).*", "$1")); } else System.out.println("Could not retrieve price"); return price; } } Then, create an array of PricedItems for everything you want to loot and update the PricedItems somewhere in your onLoop.
    for(PricedItem i : lootList){ i.update(client); }

Account

Navigation

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.