Jump to content

New scripter, wine bot not working.


Recommended Posts

Posted

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);
	}
}

 

Posted (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 by zwaffel
Posted
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!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...