Jump to content

How is my script?


allomaxis

Recommended Posts

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

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