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.

Make All Interface / Widget API

Featured Replies

Was trying to figure out a good way to do this when I realised selected options dont have any actions, so it was easier than I thought.

 

UtilWidget.java



/**
 * 
 * @author Tom
 * https://osbot.org/forum/profile/149713-tom/
 */
public class UtilWidget {

	@SuppressWarnings("unchecked")
    /**
	 * Select the correct mode in the Make All interface
	 * @param i The script instance
	 * @param mode The mode you would like to set it to
	 * @param custom Whether or not the provided option is not a default, e.g. 12
	 * @return True if it successfully changed the mode or the correct mode was already selected
	 */
	public static boolean setSelectedMode(Script i, String mode, boolean custom){
		RS2Widget button = i.getWidgets().getWidgetContainingText(270, mode);
		if(button != null && button.isVisible()) {
			
			RS2Widget widg = i.getWidgets().singleFilter(i.getWidgets().getAll(), new WidgetActionFilter(mode));
			
			if(widg != null && widg.isVisible()) {
				
				if(widg.interact(mode)) {
					return true;
				}
				
			}else {
				
				return true;
				
			}

		}else {
			if(custom) {
				RS2Widget xButton = i.getWidgets().getWidgetContainingText(270, "X");
				if(xButton != null && xButton.isVisible()) {
					if(xButton.interact("Other quantity")) {
                      
                                   // Ideally use a custom conditional sleep method, I used this so it works for everyone
						new ConditionalSleep(2000) {
							@Override
							public boolean condition() {
								RS2Widget textWidget = i.getWidgets().getWidgetContainingText(162, "Enter amount");
								return textWidget != null && textWidget.isVisible();
							}
						}.sleep();
						
					
						
						if(i.getKeyboard().typeString(mode, true)) {
							return true;
						}
						
					}
				}
				
			}
		}

		return false;
	}
  
  	public static RS2Widget getWidget(Script i, String action, String spellName) {
		RS2Widget widg = i.getWidgets().filter(new WidgetActionFilter(action), new WidgetSpellFilter(spellName));
		if(widg != null && widg.isVisible()) {
			return widg;
		}
		
		return null;
	}

}

 

WidgetActionFilter.java (Credits to @Explv I believe, however I changed it up a bit)
 


public class WidgetActionFilter implements Filter<RS2Widget> {

    private String filter;

    public WidgetActionFilter(String filter) {
        this.filter = filter;
    }

    @Override
    public boolean match(RS2Widget widg) {
        if (widg == null) {
            return false;
        }
        if (widg.getInteractActions() == null) {
            return false;
        }
        for (String action : widg.getInteractActions()) {
            if (filter.equals(action)) {
                return true;
            }
        }
        return false;
    }
}

 

WidgetSpellFilter.java

public class WidgetSpellFilter implements Filter<RS2Widget> {

    private String filter;

    public WidgetSpellFilter(String filter) {
        this.filter = filter;
    }

    @Override
    public boolean match(RS2Widget widg) {
         if (widg == null) {
            return false;
        }
        if (widg.getSpellName() == null) {
            return false;
        }
        
      
        
        return widg.getSpellName().toLowerCase().contains(filter.toLowerCase());
    }
}

Example Usage

if(UtilWidget.setSelectedMode(instance, "18", true)){
	RS2Widget widget = UtilWidget.getWidget(instance, "Make", "Maple longbow");
  	if(widget != null){
      widget.interact("Make");
    }
	

}

Another example --

if(UtilWidget.setSelectedMode(instance, "All", false){
	RS2Widget widget = UtilWidget.getWidget(instance, "Make", "Maple longbow");
  	if(widget != null){
      widget.interact("Make");
    }

}


For getWidget, if you are unsure what the action and spell name are, this should help.
y4hiI.jpg

The action is String, And the Spell name is Longbow

 

Wasn't tested much, but worked with what I was doing

 

Edit: Updated and added another part for grabbing the right crafting icon

Edited by Tom

  • Author
14 minutes ago, Czar said:

good job tom, this new interface actually did a favor for scripters :doge: 

edit:


WidgetSpellFilter constructor is wrong, you made a typo

yeah its surprisingly easier once you get it up and running

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.