Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

How is my script?

Featured Replies

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

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

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

y :doge:

  • Author

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

If statements to the max hahahaha try using switch statements instead for a cleaner look with enums

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.