Jump to content

Attack Options snippet


Recommended Posts

Posted (edited)

Small API for the new attack option stuff they introduced in the update today.

Usage:

 

AttackOptions.setNPC(this, AttackOptions.Option.HIDDEN);
AttackOptions.setPlayer(this, AttackOptions.Option.HIDDEN);

AttackOptions.getNPC(this)
AttackOptions.getPlayer(this)


 


import org.osbot.rs07.api.ui.RS2Widget;
import org.osbot.rs07.api.ui.Tab;
import org.osbot.rs07.script.MethodProvider;
import org.osbot.rs07.utility.ConditionalSleep;

import java.util.List;

/**
 * Created by Flamezzz on 12/11/2015.
 */
public class AttackOptions {

    public enum Option {
        DEPENDS_ON_COMBAT("Depends on combat levels"),
        ALWAYS_RIGHT_CLICK("Always right-click"),
        LEFT_CLICK_WHERE_AVAILABLE("Left-click where available"),
        HIDDEN("Hidden");

        String str;

        Option(String str) {
            this.str = str;
        }
    }

    private static boolean DEBUG = true;

    private static int[] CONFIGS = {1107, 1306};

    private static final int CONTROLS_ROOT = 261;

    private static void debug(MethodProvider api, String str) {
        if (DEBUG) api.log(str);
    }

    private static boolean openControls(MethodProvider api) {
        RS2Widget controls = api.widgets.singleFilter(
                CONTROLS_ROOT, w ->
                        w.getInteractActions() != null &&
                                w.getInteractActions().length > 0 &&
                                "Controls".equals(w.getInteractActions()[0]));

        if (controls == null || !controls.isVisible())
            return false;

        return controls.getSpriteIndex1() == 762 || controls.interact("Controls");
    }

    public static Option getNPC(MethodProvider api) {
        return Option.values()[api.configs.get(CONFIGS[1])];
    }

    public static Option getPlayer(MethodProvider api) {
        return Option.values()[api.configs.get(CONFIGS[0])];
    }

    public static boolean setNPC(MethodProvider api, Option o) {
        return getNPC(api).equals(o) ? true : set(api, o, "NPC 'Attack' options:", 1);
    }

    public static boolean setPlayer(MethodProvider api, Option o) {
        return getPlayer(api).equals(o) ? true : set(api, o, "Player 'Attack' options:", 0);
    }

    private static List<RS2Widget> getOptions(MethodProvider api) {
        return api.widgets.filter(
                CONTROLS_ROOT, w -> w.isVisible() &&
                        w.getInteractActions() != null &&
                        w.getInteractActions().length > 0 &&
                        "Select".equals(w.getInteractActions()[0]));
    }

    private static boolean set(MethodProvider api, Option o, String searchStr, int idx) {
        if (api.tabs.open(Tab.SETTINGS) && openControls(api)) {
            debug(api, "Opened controls");

            RS2Widget child = api.widgets.singleFilter(CONTROLS_ROOT, w -> w.getMessage().equalsIgnoreCase(searchStr));
            if (child == null || !child.isVisible())
                return false;

            debug(api, "Found child [" + child.getRootId() + "," + child.getSecondLevelId() + "," + child.getThirdLevelId() + "]");

            RS2Widget openOptions = api.widgets.get(child.getRootId(), child.getSecondLevelId(), 1);

            if(openOptions == null || !openOptions.isVisible()) {
                debug(api, "openoptions can not be found");
                return false;
            }

            List<RS2Widget> options = getOptions(api);

            debug(api, "Found " + options.size() + " options");

            if(options.size() != Option.values().length) {
                openOptions.interact();
                debug(api, "Opening option list");

                if (!new ConditionalSleep(5000) {
                    public boolean condition() throws InterruptedException {
                        return getOptions(api).size() == Option.values().length;
                    }
                }.sleep()) {
                    return false;
                }

            }

            debug(api, "Clicking option");

            RS2Widget selectOption = options.get(o.ordinal());

            return selectOption.interact() && new ConditionalSleep(5000) {
                public boolean condition() throws InterruptedException {
                    return api.configs.get(CONFIGS[idx]) == o.ordinal();
                }
            }.sleep();

        }

        return false;
    }
}
Edited by Flamezzz
  • Like 2

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