Jump to content

Explv

Scripter II
  • Posts

    2313
  • Joined

  • Last visited

  • Days Won

    6
  • Feedback

    100%

Everything posted by Explv

  1. Authed Authed Authed I'll take another look tonight, thanks
  2. The script has updated on the SDN, could you see if this still happens? Thanks
  3. Did you try setting the run energy threshold setting to something higher than 15? This is just how OSBot's Web walker works. It runs until 0, rests until energy threshold reached. I can try adding some custom functionality
  4. Thanks pushed a fix, it will be available whenever SDN is updated
  5. Thanks a lot! With regards to the location assistant / map, I would be hesitant to add that functionality to this script, because it over-complicates the purpose here. I could build it out as a separate premium script to replace the location assistant. I can also take a look at the website performance at some point
  6. Authed Authed Please leave feedback here, or via PM. Cheers
  7. It enables run if the player has more than the specified run energy. However I can take a look at adding some more customisation to that
  8. Authorised, please leave feedback on this thread or message me directly
  9. Explv's Walker Pro The perfect walking script. Status: Beta Testing Price: TBD Beta details: Request to become a beta tester of this script by posting in this thread. Beta testers will be authorised to use the script for free up until release Beta testers will need to provide feedback (positive or negative), and highlight areas for improvement to the script, or new features they would like to see. Features: Click anywhere on the map (that your player can reach) and your player will walk there. Map displays a preview of the route that your player will take, including any boat charters, teleports, shortcuts, etc. Allows selecting multiple destinations on a path Option to repeat the path once complete Option to stop the script when the destination is reached Option to prompt the user for confirmation before proceeding to the next destination in the path Allows full customisation of OSBot's webwalking features. Toggle boat chartering / fairy rings / gliders / agility shortcuts / quest shortcuts / spirit trees / teleports Toggle checking bank / equipment / inventory for items Set run energy threshold Disable moving the camera Set click distance thresholds Save configurations to re-use them later CLI support, allowing you to load a configuration from a file [Other features requested by YOU] UI Preview: Please note that the script is still under development so the following UI is subject to change / improvement.
  10. Explv

    Explv's Walker

    Looking for beta users on the new version:
  11. Try loading it from a URL instead, or put the font inside the OSBot/Data directory and load it from there. Or, even better, download the font to the data directory, and then load it
  12. You can differentiate between them by the position of the object For example, one ledge is at Position(3011, 3343, 3), and the following is at Position(3012, 3334, 3)
  13. Explv

    Explv's Walker

    Work in progress
  14. Explv

    Explv's Walker

    Just checked, it's working fine now @Doalrian20 Let me know if you're still having issues. Thanks
  15. Explv

    Explv's Walker

    There was an update to the underlying map tiles. I did push a code change to update this script, maybe it hasn't been released yet. I'll double check
  16. Explv

    Explv's Walker

    I'll take a look at updating this script with some extra features Either as part of this, or as an "Explv's Walker V2"
  17. It's not the true source code, it's just decompiled. You can see it in IntelliJ by right clicking something and selecting "go to > implementations"
  18. 1. You're creating a new instance of the Bank class, this is an OSBot API class which extends MethodProvider. Any class which extends MethodProvider needs to have some context provided, so that it has access to all the other OSBot API class instances (e.g. inventory, equipment, etc.). In your case, you have not provided this context, and so all of these API references are null. You don't *need* to create an instance of the Bank class anyway, because OSBot provides you one that is correctly setup, which you access via getBank(). 2. It is the `open` function throwing a null pointer exception. This means that something the open function is trying to access is null (again because you have not exchanged context, so the internal fields in the Bank class are null) You can see the open function here: On the 4th line of the function you can see `this.inventory.isItemSelected()` `this.inventory` will be null, as you have not exchanged context. Therefore this function call will throw a NullPointerException. This would probably work: Bank bank = new Bank(); bank.exchangeContext(getBot()); exchangeContext sets all the internal context fields in the API class instance using the provided Bot reference. You can see the implementation here: However there is no need for it, because you can access the already setup instance using `getBank()`.
  19. Published a new version to GitHub. Please let me know if you still have any of these issues https://github.com/Explv/Explvs-AIO/releases/latest SDN update will follow
  20. 1. Define your custom method provider, this extends OSBot's MethodProvider class, and then adds on / overrides functionality. In this example, I am overriding getInventory() with my own class which adds a "use" function. The CustomMethodProvider class defined below also supplies a custom "execute" function, which runs an Executable (a different class I have defined later) class CustomMethodProvider extends MethodProvider { private ExtendedInventory extendedInventory; private boolean hasContext; public void init(final Bot bot) { super.exchangeContext(bot); this.extendedInventory = new ExtendedInventory(); extendedInventory.exchangeContext(bot); hasContext = true; } public boolean hasContext() { return hasContext; } // Deprecated as exchangeContext(Bot bot, CustomMethodProvider methodProvider) should be used instead. @Deprecated public MethodProvider exchangeContext(final Bot bot) { return super.exchangeContext(bot); } public CustomMethodProvider exchangeContext(final Bot bot, final CustomMethodProvider methodProvider) { this.extendedInventory = methodProvider.extendedInventory; super.exchangeContext(bot); hasContext = true; return this; } @Override public ExtendedInventory getInventory() { return extendedInventory; } /** * Helper function which exchanges context with an Executable * (if not already exchanged), and then calls Executable::run * @param executable The Executable to execute * @throws InterruptedException */ public void execute(final Executable executable) throws InterruptedException { if (!executable.hasContext()) { executable.exchangeContext(getBot(), this); } executable.run(); } } Here is my "ExtendedInventory" class: class ExtendedInventory extends Inventory { public boolean isUsing(final String itemName) { return itemName.equals(getSelectedItemName()); } public boolean use(final String itemName) { if (isUsing(itemName)) { return true; } if (getInventory().interact("Use", itemName)) { Sleep.sleepUntil(() -> itemName.equals(getSelectedItemName()), 1000); return true; } return false; } } 2. Define the Executable class, this is what we will use for other classes in our script that have a common "onStart" / "onLoop" / "onEnd" pattern: abstract class Executable extends CustomMethodProvider { public void onStart() throws InterruptedException {} public abstract void run() throws InterruptedException; public void onEnd() throws InterruptedException {} } Note how this class extends our CustomMethodProvider, which means anything we define in the CustomMethodProvider class will be available to subclasses of "Executable" 3. In the main script class, set everything up (create an instance of CustomMethodProvider, and exchange context) @ScriptManifest(author = "Explv", name = "Example", info="", logo = "", version = 0.1) public class Example extends Script { private final CustomMethodProvider customMethodProvider = new CustomMethodProvider(); @Override public void onStart() { customMethodProvider.init(getBot()); } @Override public int onLoop() throws InterruptedException { return 0; } } 4. Finally, whenever you want some other class with an onStart / onLoop / onEnd, just extend the Executable class, and then run it using "execute". Here is a very contrived example: class ExampleExecutable extends Executable { private static final String TINDERBOX = "Tinderbox"; private final Executable someOtherExecutable = new SomeOtherExecutable(); @Override public void run() throws InterruptedException { if (!getInventory().isUsing(TINDERBOX)) { getInventory().use(TINDERBOX); } else { execute(someOtherExecutable); } } } class SomeOtherExecutable extends Executable { @Override public void run() throws InterruptedException { getWalking().webWalk(new Area(1, 2, 3, 4)); } } @ScriptManifest(author = "Explv", name = "Example", info="", logo = "", version = 0.1) public class Example extends Script { private final CustomMethodProvider customMethodProvider = new CustomMethodProvider(); private final Executable exampleExecutable = new ExampleExecutable(); @Override public void onStart() { customMethodProvider.init(getBot()); } @Override public int onLoop() throws InterruptedException { customMethodProvider.execute(exampleExecutable); return 600; } } 5. If you want an "Executable" that blocks until completion, then you can either use OSBot's Event class, or define your own "BlockingExecutable" which utlises OSBot's Event, for example: public abstract class BlockingExecutable extends Executable { private boolean finished; private ExecutionFailedException executionFailedException; @Override public final void run() throws InterruptedException { finished = false; executionFailedException = null; onStart(); execute(new Event() { @Override public int execute() throws InterruptedException { if (finished) { setFinished(); } else { try { blockingRun(); } catch (ExecutionFailedException executionFailedException) { BlockingExecutable.this.executionFailedException = executionFailedException; setFailed(); } } return 0; } }); onEnd(); if (executionFailedException != null) { throw executionFailedException; } } protected abstract void blockingRun() throws InterruptedException; protected void setFinished() { finished = true; } } public class ExecutionFailedException extends RuntimeException { public ExecutionFailedException(String message) { super(message); } }
  21. This is cool, although I would recommend using your own class instead of the Script class. Using your own class would let you extend the MethodProvider and supply additional functionality to all your subclasses, which can be useful in a big script. Can provide example if helpful
  22. I'd recommend following some Java tutorials, in your first example you didn't even construct an instance of your Fishing class. You also made your Fishing class abstract, which means it cannot be instantiated directly. Only your main script class should extend Script. If you want other classes to be able to access the API, either pass MethodProvider as a constructor arg, or make your other class extend MethodProvider and exchange context. See section 5 of https://osbot.org/forum/topic/115124-explvs-scripting-101/
  23. You're including the OSBot.jar in your script, instead of the compiled output. In the bottom right of your screen shot, where it says "Available Elements", you should be including "FirstBot2 compile output" (it should show up on the left side under the "Woodcutting_Script.jar". The "OSBot 2.6.20" should be on the right hand side (excluded from the compiled script)
×
×
  • Create New...