Jump to content


Scripter II
  • Posts

  • Joined

  • Last visited

  • Days Won

  • Feedback


Explv last won the day on April 3 2021

Explv had the most liked content!

About Explv

Profile Information

  • Gender

Recent Profile Visitors

19217 profile views

Explv's Achievements

Adamantite Poster

Adamantite Poster (7/10)




Community Answers

  1. 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"
  2. 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()`.
  3. 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
  4. can u respond on private message please? i need ur help

    1. hcim2000


      can i have ur discord to pm ?

  5. 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); } }
  6. 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
  7. 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/
  8. 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)
  9. If I recall correctly, you do not need to disable randoms. You can override the break manager in isolation: getBot().getRandomExecutor().overrideOSBotRandom(customBreakManager) (Docs - https://osbot.org/api/org/osbot/rs07/event/RandomExecutor.html#overrideOSBotRandom-org.osbot.rs07.script.RandomSolver- ) Where your custom break manager might look something like: https://github.com/Explv/Explvs-AIO/blob/master/src/main/java/tasks/break_task/CustomBreakManager.java There is no way to get passwords through the API, as it would be a security risk. You have to consider local scripts as well as SDN scripts.
  10. Read section 13 of this tutorial to learn about configs Funnily enough, it actually covers attack style as the example. Screenshots are a bit out of date and the OSBot UI has changed, but there is still a config debug view in the settings. TLDR: Config 43.
  11. Fixed in latest version (v3.2.7). Available on GitHub now, or on SDN whenever a refresh happens.
  12. Just pushed an update to the SDN & GitHub SDN will be available whenever it's refreshed GitHub working now Will look at other reported issues and fix now too.
  13. I would say it's more likely to be a scam than not. There's barely any information about it online, aside from their website (which makes some ridiculous claims)
  14. You're either missing the onLoop function which is required, or it has the wrong signature. See section 2 of the following: https://osbot.org/forum/topic/115124-explvs-scripting-101/
  • Create New...