Jump to content

How is my script?


Recommended Posts

Posted (edited)

I've been learning to script for a couple of days now and I've written a script to string magic longbows. I haven't ran it yet because I've had problems getting it to show up on the client. It showed up once, ran it, there was a bug, fixed it, but now it won't show up on the client again. Not that I can do much about anyway, since mirror mode isn't working due to the update.

 

Anyway, here is my script:

 

package stringer;

import org.osbot.rs07.script.Script;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.RS2Widget;
import org.osbot.rs07.script.ScriptManifest;

import java.awt.*;

@ScriptManifest(author = "Me", info = "Magic bow stringer", name = "fletcher", version = 0.1, logo = "")
public class Main_stringer extends Script {
    final private String unfBow = "Magic longbow (u)";
    final private String bowString = "Bow string";
	
    @Override
    public void onStart() {
	log("Starting script...");
    }
	
    @Override
    public int onLoop() {
    	if( !bank.isOpen() 
    		&& !inventory.contains(unfBow) 
    		&& !inventory.contains(bowString) ) {
    		
    		log("Opening bank...");
    		openBank();
    		return random(700, 1400);
    	}
    	
    	if( bank.isOpen() && inventory.contains("Magic longbow") 
    		&& !inventory.contains(unfBow) 
    		&& !inventory.contains(bowString) ) {
    		
    		log("Depositing...");
    		deposit();
    		return random(700, 1400);
    	}
    	
    	if( inventory.isEmpty() && bank.isOpen() ) {
    		log("Withdrawing...");
    		withdraw();
    		return random(700, 1400);
    	}
    	
    	if( inventory.contains(unfBow) 
    		&& inventory.contains(bowString)
    		&& !bank.isOpen() ) {
    		
    		log("Stringing bows...");
    		stringBows();
    		while( myPlayer().isAnimating() ) {
    			//empty loop
    		}
    		return random(700, 1000);
    	}

    	log("Done goofed.");
        return random(700, 1200);
    }

    @Override
	public void onExit() {
		log("Exiting");
	}

	@Override
	public void onPaint(Graphics2D g) {

	}
    
    public void openBank() {
    	RS2Object bankBooth = objects.closest("Bank booth");
    	bankBooth.interact("Bank");
    }
    
    public void deposit() {
    	bank.depositAll();
    }
    
    public void withdraw() {
    	bank.withdraw(unfBow, 14);
    	Sleep( random(300, 500) );
    	
    	bank.withdraw(bowString, 14);
    	Sleep( random(300, 500) );
    	
    	bank.close();
    }
    
    public void stringBows() {
    	inventory.interact("Use", unfBow);
    	Sleep( random(300, 600) );
    	inventory.interact("Use", bowString);
    	
    	RS2Widget widget = widgets.get(309, 2); 
    	
    	while( !widget.isVisible() ) {
    		//empty loop
    	}
    	Sleep( random(200, 400) );
    	   	
    	widget.interact("Make All");
    	
    }
    
    public void Sleep(int ms) {
	try {
		sleep(ms);
	}
	catch(InterruptedException ex) {
		Thread.currentThread().interrupt();
	}
    }    

} 

 

What do you guys think? Am i doing anything wrong?

Edited by allomaxis
Posted (edited)

try to avoid having like 99999 if statements in your loop.  look into a stateful framework

 

Better?

 

package stringer;

import org.osbot.rs07.script.Script;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.RS2Widget;
import org.osbot.rs07.script.ScriptManifest;

import java.awt.*;

@ScriptManifest(author = "Me", info = "Magic bow stringer", name = "fletcher", version = 0.1, logo = "")
public class Main_stringer extends Script {
    final private String unfBow = "Magic longbow (u)";
    final private String bowString = "Bow string";
	
    private enum State {
	BANK, DEPOSIT, WITHDRAW, STRING
    };
	
    @Override
    public void onStart() {
	log("Starting script...");
    }
	
    @Override
    public void onExit() {
	log("Exiting");
    }

    @Override
    public void onPaint(Graphics2D g) {

    }
	
    @Override
    public int onLoop() {
	switch() {
		case BANK:
			log("Opening bank...");
				
			openBank();
			return random(700, 1400);
			break;
			
		case DEPOSIT:
			log("Depositing...");
				
			deposit();
			return random(700, 1400);
			break;
			
		case WITHDRAW:
			log("Withdrawing...");
				
			withdraw();
			return random(700, 1400);
			break;

		case STRING:
			log("Stringing bows...");
				
			stringBows();
			while( myPlayer().isAnimating() ) {
				//empty loop
			}
			return random(700, 1000);
			break;
		}

    	log("Done goofed.");
        return random(700, 1200);
    }
	
    private State getState() {
	if( !bank.isOpen() 
    	        && !inventory.contains(unfBow) 
    	        && !inventory.contains(bowString) ) {
    		
	    return State.BANK;
    	}
    	
    	if( bank.isOpen() && inventory.contains("Magic longbow") 
    		&& !inventory.contains(unfBow) 
    		&& !inventory.contains(bowString) ) {
    		
    		return State.DEPOSIT;
    	}
    	
    	if( inventory.isEmpty() && bank.isOpen() ) {
    		return State.WITHDRAW;
    	}
    	
    	if( inventory.contains(unfBow) 
    		&& inventory.contains(bowString)
    		&& !bank.isOpen() ) {
    		
    		return State.STRING;
    	}
    }
    
    public void openBank() {
    	RS2Object bankBooth = objects.closest("Bank booth");
    	bankBooth.interact("Bank");
    }
    
    public void deposit() {
    	bank.depositAll();
    }
    
    public void withdraw() {
    	bank.withdraw(unfBow, 14);
    	Sleep( random(300, 500) );
    	
    	bank.withdraw(bowString, 14);
    	Sleep( random(300, 500) );
    	
    	bank.close();
    }
    
    public void stringBows() {
    	inventory.interact("Use", unfBow);
    	Sleep( random(300, 600) );
    	inventory.interact("Use", bowString);
    	
    	RS2Widget widget = widgets.get(309, 2); 
    	
    	while( !widget.isVisible() ) {
    		//empty loop
    	}
    	Sleep( random(200, 400) );
    	   	
    	widget.interact("Make All");
    	
    }
    
    public void Sleep(int ms) {
	try {
		sleep(ms);
	}
	catch(InterruptedException ex) {
		 Thread.currentThread().interrupt();
	}
    }    

} 
Edited by allomaxis

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...