Jump to content

Select menu option


Toph

Recommended Posts

For some reason, OSBot doesn't have this already. So here:

public boolean selectMenuOption(String action, String noun) throws InterruptedException
	{
		if (!client.isMenuOpen()) return false;
		boolean found = false;
		int index = 0;
		List<Option> menu = client.getMenu();
		for (; index < menu.size(); index++)
		{
			if (menu.get(index).action.equals(action) && menu.get(index).noun.contains(noun))
			{
				found = true;
				break;
			}
		}
		if (found)
		{
			int x = client.getMenuX();
			int y = client.getMenuY() + 21 + index * 14;
			return client.moveMouseTo(new RectangleDestination(x, y, client.getMenuWidth(), 10), false, true, false);
		}
		return found;
	}

Clicks a menu option from a currently visible menu.

Edited by Toph
  • Like 3
Link to comment
Share on other sites

For some reason, OSBot doesn't have this already. So here:

public boolean selectMenuOption(String action, String noun) throws InterruptedException
	{
		if (!client.isMenuOpen()) return false;
		boolean found = false;
		int index = 0;
		List<Option> menu = client.getMenu();
		for (; index < menu.size(); index++)
		{
			if (menu.get(index).action.equals(action) && menu.get(index).noun.contains(noun))
			{
				found = true;
				break;
			}
		}
		if (found)
		{
			int x = client.getMenuX();
			int y = client.getMenuY() + 21 + index * 14;
			return client.moveMouseTo(new RectangleDestination(x, y, client.getMenuWidth(), 10), false, true, false);
		}
		return found;
	}

Clicks a menu option from a currently visible menu.

Thank you so much,

Link to comment
Share on other sites

For some reason, OSBot doesn't have this already. So here:

public boolean selectMenuOption(String action, String noun) throws InterruptedException
	{
		if (!client.isMenuOpen()) return false;
		boolean found = false;
		int index = 0;
		List<Option> menu = client.getMenu();
		for (; index < menu.size(); index++)
		{
			if (menu.get(index).action.equals(action) && menu.get(index).noun.contains(noun))
			{
				found = true;
				break;
			}
		}
		if (found)
		{
			int x = client.getMenuX();
			int y = client.getMenuY() + 21 + index * 14;
			return client.moveMouseTo(new RectangleDestination(x, y, client.getMenuWidth(), 10), false, true, false);
		}
		return found;
	}

Clicks a menu option from a currently visible menu.

 

 

yer it's menu api is pretty bad compared to other clients for example a small client that I'm on has 1 Dev and has like 3 scriptwriter's and 10 users has  a better MENU API than osbot lol but the rest of there API is behind

 

Good contribution to site!

Edited by TheScrub
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Ah.. Should have checked the Snippets section yesterday when I needed this;

 

Anyway, I've made a similar implementation; I suppose people can choose what fits their needs

import java.util.ArrayList;
import java.util.List;
import org.osbot.script.mouse.RectangleDestination;
import org.osbot.script.rs2.Client;
import org.osbot.script.rs2.ui.Option;

/**
 *
 * @author FrostBug
 */
public class Menu {

    private List<Option> options;
    private List<String> strOptions;
    private int x, y, width;
    private Client client;
    private static final int OPTION_HEIGHT = 15;
    private static final int TOP_PADDING = 19;

    private Menu(Client client) {
        this.strOptions = new ArrayList<>();
        this.options = client.getMenu();
        this.x = client.getMenuX();
        this.y = client.getMenuY();
        this.width = client.getMenuWidth();
        this.client = client;

        for (Option o : options) {
            strOptions.add(o.action);
        }
    }

    public static Menu getActiveMenu(Client client) {
        if (client.isMenuOpen()) {
            return new Menu(client);
        } else {
            return null;
        }
    }

    public boolean hasOption(String action) {
        return strOptions.contains(action);
    }

    private RectangleDestination getDestinationRect(int index) {
        return new RectangleDestination(x + 4, y + TOP_PADDING + (index * OPTION_HEIGHT), width - 8, OPTION_HEIGHT);
    }

    public boolean moveMouseToOption(String action, boolean click) throws InterruptedException {
        int index = strOptions.indexOf(action);
        boolean success;
        if (index > -1 && client.isMenuOpen()) {
            RectangleDestination rect = getDestinationRect(index);
            success = client.moveMouse(rect, false);
            if (click && success) {
                client.clickMouse(false);
            }
        }
        return success;
    }

    public boolean isMouseOnOption(String action) {
        RectangleDestination rect = getDestinationRect(strOptions.indexOf(action));
        return client.isMenuOpen() && rect.destinationReached(client.getMousePosition());
    }
}

Edited by FrostBug
  • Like 1
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

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