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.

liverare

Java Lifetime Sponsor
  • Joined

  • Last visited

Everything posted by liverare

  1. Sorry for the late response. I've increased your trial as compensation.
  2. liverare replied to Flamezzz's topic in Snippets
    As for efficiency, we're not talking about a great deal of loss there. It's not like you're gonna need to constantly iterate for the RS2Object like 100 times a second. It's just each time you encounter the zone containing the portal. It's not much of a loss in my eyes. I've (almost) made a full habit of switching from primitives to their Object counterparts, save for the booleans, in order to future proof the programme encase Java remove primitives altogether. There's a bit of controversy surrounding this with people making the case for primitives to be kept.
  3. liverare replied to Flamezzz's topic in Snippets
    For enum records, I use Filter. For records that need a tad more filtering, I use Lambda.
  4. liverare replied to Flamezzz's topic in Snippets
    Sorry but I just had to clean this code up: package com.liverare.better.utility.data; import org.osbot.rs07.api.filter.Filter; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.script.MethodProvider; public enum HouseLocation implements Filter<RS2Object> { NONE("None", 0, 0), RIMMINGTON("Rimmington", 2953, 3224), TAVERLY("Taverly", 2893, 3465), POLLNIVEACH("Pollniveach", 3340, 3003), RELLEKKA("Rellekka", 2670, 3631), BRIMHAVEN("Brimhaven", 0, 0), // TODO Data required YANILLE("Yanille", 0, 0), // TODO Data required ; /* * Static global variables */ public static final String PORTAL_NAME = "Portal"; public static final Integer CONFIG_ID = 738; /* * Local field variables */ private final String name; private final Position position; HouseLocation(String name, Integer x, Integer y) { this.name = name; this.position = new Position(x, y, 0); } /* * Overriden methods */ @Override public String toString() { return name + " [" + position.toString() + "]"; } @Override public boolean match(RS2Object object) { return object.getPosition().equals(position) && object.getName().equals(PORTAL_NAME); } /* * Getters/setters */ public Position getPosition() { return position; } /* * Static methods */ public static HouseLocation getCurrent(MethodProvider methodProvider) { final Integer index = (methodProvider.configs.get(CONFIG_ID) & 0x7); return values()[index]; } } Example of usage: RS2Object housePortalEntrance = getObjects().closest( HouseLocation.getCurrent(this));
  5. Yeah and now I understand why. The script is correct, however my dependency folder (a folder which is shared across all of my scripts), contains content that is not. This means that Tanner & Crafter was using resources that it doesn't even need, and because I haven't updated the API for that, the errors occur. Thanks for informing me! Once my script works again (next compile, should be soon), then I'll activate it.
  6. It's not that kind of math lesson.
  7. ^This. The talking ones are kinda awkward, but the tapping/scratching/barely audible are more relaxing. Here's an 'ASMR artist' that can do talking ones pretty well: It's got something to do with a sensational audio trigger. I really never got that part of it. I got into this shit after I browsed around for more relaxing stuff to go to sleep listening to, because my iTunes library was full with rock/metal, and I wasn't getting much sleep.
  8. One small API change yet to make slipped by me. o_o I've made the necessary changes and synced it with OSBot, it should work soon enough. Sorry for the inconvenience.
  9. Mirror client BETA (x32) v1.094.86 "Please set your window mode to fixed mode!" is displayed on OSBot despite the client being in fixed mode.
  10. My apologise, I made the commitment but I didn't sync those changes to the server. Zach informed me of this -- silly mistake. Sorry for the inconvenience!
  11. I thought so too. I've contacted a developer and the official SDN manager, still no word from either of them. >_> I shan't give up!
  12. Yeah I will be adding a disclaimer for that, sorry. I spoke to Zach via Skype and he says it's not possible due to Mirror Mode operating on a separate architecture. Again, sorry.
  13. This script is not compatible with mirror mode. Please run it in standard only. I'm still waiting on the developers to push the new fixes:
  14. I've identified the problem, made the fixes and now we just have to wait for the fixed script to be updated on the SDN. I'll let you know when the SND has updated.
  15. I just this second edited my post lol. I think the devs push scripts twice daily, or at least once a day. But I'll be sure to post when it's fixed.
  16. Please can you remove your quote, there's no need to quote my main post. It's huge. The problem is with Item#interact() method. A recent OSBot update has changed this method to where this method, without any parameters, will click the inventory tab before interacting with the item. I've added a parameter and committed the changes to the SND. I need to wait for a developer to make the final push and you guys should be good to go. Sorry for any inconvenience!
  17. This script isn't compatible with mirror mode, and the script needs to be ran in fixed window mode.
  18. I want to make a contribution, so here: package com.liverare.better.scripts.farming_aid; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.script.MethodProvider; public class FishingSpotIdentifier { /** * MethodProvided the running script instance is using */ private final MethodProvider methodProvider; /** * <key = action profile, value = NPC ID> */ private final Map<ActionProfile, Integer> fishingSpotIdCache; public FishingSpotIdentifier(MethodProvider methodProvider) { this.methodProvider = methodProvider; this.fishingSpotIdCache = new HashMap<>(); } /** * @param actionProfile * The specific fishing spot to find * @return List of the requested fishing spot, ordered by distance */ public List<NPC> get(ActionProfile actionProfile) { List<NPC> result = null; final List<NPC> found = methodProvider.getNpcs().getAll(); Integer cachedId = fishingSpotIdCache.get(actionProfile); if (cachedId != null) { result = found.stream().filter(npc -> cachedId.equals(npc.getId())).collect(Collectors.toList()); } else { result = found.stream().filter(npc -> hasAllActions(npc.getActions(), actionProfile.getActions())) .collect(Collectors.toList()); fishingSpotIdCache.put(actionProfile, result.iterator().next().getId()); } if (!result.isEmpty()) { result.sort((a, b) -> Integer.compare(methodProvider.getMap().distance(a), methodProvider.getMap().distance(b))); } return result; } /** * * @param actions * Actions to check against * @param actionsToFind * Actions to find (all!) * @return <tt>Actions array contains all of our requested actions</tt> */ private boolean hasAllActions(String[] actions, String... actionsToFind) { boolean result = true; for (String actionToFind : actionsToFind) { if (!contains(actions, actionToFind)) { result = false; break; } } return result; } /** * * @param arr * Array of strings to search * @param aString * String to find within the array * @return <tt>Requested string is present within the array</tt> */ private boolean contains(String[] arr, String aString) { boolean found = false; for (String s : arr) { if (s.equals(aString)) { found = true; break; } } return found; } /* * Each record will be used to distinguish each fishing spot. */ public static enum ActionProfile { CAGE_HARPOON("Cage", "Harpoon"), NET_HARPOON("Net", "Harpoon"), ; private final String[] actions; private ActionProfile(String... actions) { this.actions = actions; } public String[] getActions() { return actions; } }; } It can be used as: package com.liverare.better.scripts.farming_aid; import java.util.List; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import com.liverare.better.scripts.farming_aid.FishingSpotIdentifier.ActionProfile; @ScriptManifest(name = "Fishing", info = "Fishes", version = 1.0, author = "LiveRare", logo = "") public class FishingScript extends Script { FishingSpotIdentifier fishingSpotIdentifier; @Override public void onStart() throws InterruptedException { fishingSpotIdentifier = new FishingSpotIdentifier(this); } @Override public int onLoop() throws InterruptedException { List<NPC> fishingSpot = fishingSpotIdentifier.get(ActionProfile.NET_HARPOON); if (!fishingSpot.isEmpty()) { fishingSpot.iterator().next().interact("Harpoon"); } return 500; } } Same fishing spots all have a consistent ID, so if you can discern which spot is for which fish, you can cach the profile and ID of the fishing spot. Then, when you need to re-find a new fishing spot, you won't need to run another action check, since you now have the ID of the fishing spot. This is more efficient, also the FishingSpotIdentifier#ActionProfile enumerator can be expanded to include all fishing spots. In fact, you could add an uninitiated integer field variable in the enumerator and initiate that, instead of dealing with a Map. But...cba. The Map strategy came to me first.
  19. I am in the same boat as you, OP. I was banned for two days and I'm still too paranoid to bot anything. In all liklihood your IP address is associted with your RuneScape account. Using a VPN/Proxy will do nothing to undo that; it'll just be more IPs associated with your account. The only way a new IP address will help is if you're making a new account for the sole purpose of botting, provided you don't compromise that new IP address (thus the new account) by logging back onto your flagged account. [Citation needed]
  20. 8 hours since I activated it. This script is incompatible with mirror mode.
  21. Done. Thank you for the report, I will look into this. :edit: I have just tested this script to fletch 100 mithril darts, there were no problems. Be sure to have mithril dart tips and feathers available in your inventory, and make sure you've selected "mithril darts" from the menu, not "mithril bolts". If this error persists, I may need to TeamView your screen as so that I can see for myself the errors you're having.
  22. liverare replied to liverare's topic in Archive
    Thanks. It's actually something I made a while back, though I didn't find much use for it up until now. :P When I first started out, it was a bit hectic. The main problem is all the data you get; it has to be interpreted, sorted and saved. I made a patch listener for all patches, which makes it easier to keep track of the numbers thrown at you. Yes please, it may prove very helpful! Also, who do I credit for the dump? Thanks! Simplicity is the name of the game here. There's much more data to represent (produce count, growth percentage, etc.) But the fundamentals are: where, what, when. Falador herb patch; snapdragon; ready, (for example).

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.