bigd123 Posted January 31, 2019 Share Posted January 31, 2019 I'm trying to learn how to script, and am making a simple wine making script to start. This script works sometimes, but the but sometimes refuses to deposit, and just repeatedly openes and closes the bank until it decides to withdraw some random item. Any help appreciated(sorry I didin't comment the code) package core; import java.awt.Graphics2D; import org.osbot.rs07.api.ui.RS2Widget; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; @ScriptManifest(author = "bigd123", info = "Simple Wine Maker", name = "Wine Maker", version = 0, logo = "") public class Main extends Script { public int min = 200; public int low = 400; @Override public void onStart() { log("Let's get started!"); } //jug of water 1937, grape 1987 @Override public int onLoop() throws InterruptedException { if (!myPlayer().isAnimating()) { objects.closest("Grand Exchange booth").interact(); log("Opening bank"); sleep(random(min,low)); log("Depositing!"); bank.depositAll(); sleep(random(min,low)); if(inventory.isEmpty()) { log("Withdrawing!"); bank.withdraw(1987, 14); sleep(random(min,low)); bank.withdraw(1937, 14); sleep(random(min,low)); } else { bank.depositAll(); } if(inventory.contains(1987) && inventory.contains(1937)){ log("Closing Bank!"); bank.close(); log("Using items!"); inventory.getItem(1987).interact("Use"); sleep(random(min,low)); inventory.getItem(1937).interact("Use"); sleep(1000); RS2Widget makeWine = getWidgets().get(270,14,38); if (makeWine != null) { if (makeWine.isVisible()); makeWine.interact(); sleep(random(1300,1800)); } } } return random(200, 300); } @Override public void onExit() { log("Bye!"); } @Override public void onPaint(Graphics2D g) { int x = getMouse().getPosition().x; int y = getMouse().getPosition().y; g.drawLine(0, y, 765, y) ; g.drawLine(x, 0, x, 503); } } Quote Link to comment Share on other sites More sharing options...
Mr_MilkysButler Posted January 31, 2019 Share Posted January 31, 2019 I would add conditional sleeps and conditional statements. Quote Link to comment Share on other sites More sharing options...
bigd123 Posted January 31, 2019 Author Share Posted January 31, 2019 As in? Quote Link to comment Share on other sites More sharing options...
Juggles Posted January 31, 2019 Share Posted January 31, 2019 You should check each action before going onto the next one Quote Link to comment Share on other sites More sharing options...
Mr_MilkysButler Posted January 31, 2019 Share Posted January 31, 2019 9. Quote Link to comment Share on other sites More sharing options...
Charlotte Posted January 31, 2019 Share Posted January 31, 2019 Realised something crucial that you have missed out. Null checks! Quote Link to comment Share on other sites More sharing options...
zwaffel Posted January 31, 2019 Share Posted January 31, 2019 (edited) sleep(random(min,low)); replace with conditionsleep, log("Closing Bank!"); bank.close(); log("Using items!"); inventory.getItem(1987).interact("Use"); // dont use id's use item names sleep(random(min,low)); // use conditionsleep to sleep till you have actually interacted with the item ( so lag doesnt fuck you up) inventory.getItem(1937).interact("Use"); sleep(1000); you say its not depositing sometimes, maybe add a check if bank is open -> deposit else -> open bank. instead of doing it all in one block Edited January 31, 2019 by zwaffel Quote Link to comment Share on other sites More sharing options...
someguy69 Posted January 31, 2019 Share Posted January 31, 2019 10 hours ago, bigd123 said: I'm trying to learn how to script, and am making a simple wine making script to start. This script works sometimes, but the but sometimes refuses to deposit, and just repeatedly openes and closes the bank until it decides to withdraw some random item. Any help appreciated(sorry I didin't comment the code) package core; import java.awt.Graphics2D; import org.osbot.rs07.api.ui.RS2Widget; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; @ScriptManifest(author = "bigd123", info = "Simple Wine Maker", name = "Wine Maker", version = 0, logo = "") public class Main extends Script { public int min = 200; public int low = 400; @Override public void onStart() { log("Let's get started!"); } //jug of water 1937, grape 1987 @Override public int onLoop() throws InterruptedException { if (!myPlayer().isAnimating()&& !getInventory.contains("Wine") { //###################################### if (!getBank().isOpen()) {////############################# getBank().open(); } objects.closest("Grand Exchange booth").interact(); //-------- log("Opening bank"); sleep(random(min,low)); log("Depositing!"); bank.depositAll(); sleep(random(min,low)); if(inventory.isEmpty()&&getBank().isOpen()) { //############################## log("Withdrawing!"); bank.withdraw(1987, 14); //### you may want to change it to just the item name sleep(random(min,low)); bank.withdraw(1937, 14); sleep(random(min,low)); } else if (getinventory.contains("Wine"){//############################ getBank.depositAll(); } if(inventory.contains(1987) && inventory.contains(1937)){ log("Closing Bank!"); getBank.close(); log("Using items!"); inventory.getItem(1987).interact("Use"); sleep(random(min,low)); if(getInventory().isItemSelected()){ // this makes sure you have your first item selected before using it on the 2nd inventory.getItem(1937).interact("Use"); sleep(1000); } RS2Widget makeWine = getWidgets().get(270,14,38); // You may want to look into the keyboard class, it could be easier, eg press and hold 1 while this widget is on screen // just another way to do it :) if (makeWine != null) { if (makeWine.isVisible()); if (makeWine.interact()){ //you can totally use osbot's interact statements to see if you want to run some code, // in this case, if the interaction suceeds, we will sleep, if not, do nothing. sleep(random(1300,1800)); // ----- this is a big problem, it will cause you to repeat actions before your inventory is finished //this spot needs a conditional sleep, but this are very annoying to implement, so instead let's use Explv's sleep class, located here: //https://osbot.org/forum/topic/127193-conditional-sleep-with-lambda-expressions/ Sleep.sleepUntil(() -> !getInventory.contains("Jug of water"),int TOTALSLEEPTIME, int conditionCheckRate); } } } } return random(200, 300); } @Override public void onExit() { log("Bye!"); } @Override public void onPaint(Graphics2D g) { int x = getMouse().getPosition().x; int y = getMouse().getPosition().y; g.drawLine(0, y, 765, y) ; g.drawLine(x, 0, x, 503); } } I added commented hastags for where you might want to change, and minuses for code to remove, I haven't tested but this should work. Just be sure to add code from Explv's(this man is a god btw, I'd be lost without his tuts) Sleep class. You might want to add nullchecks and additional checks here and there, like to make sure your bank actually contains the items, else you might start getting nullpointer exceptions. Once you get a few more scripts under your belt, look into some tuts on either enums, or task based scripting, as it gives you a lot of flow control for your scripts. And always read the api, once you know how to read what it's saying, it's extremely helpful. Good luck, please let us know how it goes! Quote Link to comment Share on other sites More sharing options...
bigd123 Posted February 2, 2019 Author Share Posted February 2, 2019 Dang thank you, and sorry I was busy with other stuff Quote Link to comment Share on other sites More sharing options...