Jump to content
Frequently Asked Questions
  • Are you not able to open the client? Try following our getting started guide
  • Still not working? Try downloading and running JarFix
  • Help! My bot doesn't do anything! Enable fresh start in client settings and restart the client
  • How to purchase with PayPal/OSRS/Crypto gold? You can purchase vouchers from other users
  • Camelot (Rimmington) Teletabs!


    jmarsiglio2

    Recommended Posts

    Posted

    Hey, I made a VERY specific script for myself to make Camelot tele tabs.

     

    It's rudimentary so far but if people use it I can flesh it out.

     

    - You will need to modify the hostName variable with the name of whoever is hosting the house

    - Your house needs to be in Rimmington

    - You need to start in the host house

    - You will need an air staff equipped and law runes in your inventory

    - You will need VARROCK and HOUSE TELEPORT TABS in your inventory (to teleport back and forth)

     

    If people use this I can make it so this can be configured at runtime and support other teleport methods. Cheers

     

    MainClass.java

    package MageTabs;
    
    import org.dreambot.api.methods.Calculations;
    import org.dreambot.api.methods.map.Area;
    import org.dreambot.api.methods.map.Tile;
    import org.dreambot.api.methods.skills.Skill;
    import org.dreambot.api.methods.widget.Widget;
    import org.dreambot.api.script.AbstractScript;
    import org.dreambot.api.script.Category;
    import org.dreambot.api.script.ScriptManifest;
    import org.dreambot.api.utilities.InventoryMonitor;
    import org.dreambot.api.utilities.Timer;
    import org.dreambot.api.wrappers.interactive.GameObject;
    import org.dreambot.api.wrappers.interactive.NPC;
    import org.dreambot.api.wrappers.items.Item;
    import org.dreambot.api.wrappers.widgets.WidgetChild;
    
    import java.awt.*;
    import java.util.HashMap;
    
    @ScriptManifest(category = Category.MAGIC, name = "Mage tabs", author = "JM", version = 1.0)
    public class MainClass extends AbstractScript {
    
        private Area rimmingtonPortal = new Area(2950, 3227, 2955, 3222, 0);
        private Area varrockSquare = new Area(3208, 3426, 3219, 3422, 0);
        private Area varrockBank = new Area(3179, 3432, 3191, 3450, 0);
        private Area outsideVarrockBank = new Area(3184, 3434, 3180, 3436, 0);
        private Tile lecternTile; // learns the tile of the lectern
    
        private String bankKeep[] = {"Varrock teleport", "Teleport to house", "Air rune", "Law rune", "Fire rune"};
        private String state = "null";
        private String hostName = "name_of_host";
        private HashMap<String, Integer> widgetIDs = new HashMap<>();
        private String tabType = "Camelot";
        private final int TAB_WIDGET_ID = 79;
    
        private int tabCount = 0;
        private int lastTabCount = 0;
        private Timer timer;
        private InventoryMonitor monitor;
    
        @Override
        public void onStart(){
            log("Starting MageTabs");
    
            state = "started";
            widgetIDs.put("Varrock", 11);
            widgetIDs.put("Camelot", 14);
            getWalking().setRunThreshold(Calculations.random(20, 70));
    
            lastTabCount = getInventory().count(tabType + " teleport");
            timer = new Timer();
            monitor = new InventoryMonitor(this);
    
            getSkillTracker().start(Skill.MAGIC);
        }
    
        private boolean openBank() {
            int i = Calculations.random(2);
    
            if (i == 0) {
                return getBank().open();
            } else {
                NPC banker = getNpcs().closest((npc) -> npc != null && npc.hasAction("Bank"));
    
                if (banker != null) {
                    sleep(500, 1500);
                    return banker.interact("Bank");
                }
    
                return false;
            }
        }
    
        private boolean doBank() {
            openBank();
    
            if (sleepUntil(() -> getBank().isOpen(), 3000)) {
                if (getBank().isOpen()) {
                    if (getBank().depositAllExcept(bankKeep)) {
                        if (sleepUntil(() -> getInventory().onlyContains(bankKeep), 3000)) {
                            if (getBank().withdrawAll("Soft clay")) {
                                sleepUntil(() -> getInventory().isFull(), 3000);
    
                                if (getInventory().isFull() && getBank().close()) {
                                    return sleepUntil(() -> !getBank().isOpen(), 3000);
                                }
                            }
                        }
                    }
                }
            }
    
            return false;
        }
    
        private boolean bank() {
            if (outsideVarrockBank.contains(getLocalPlayer())) {
                log("doing banking");
                return doBank();
            } else {
                log("walking to bank");
                getWalking().walk(outsideVarrockBank.getRandomTile());
                sleep(1500, 3500);
                return bank();
            }
        }
    
        private boolean insideBank() {
            return varrockBank.contains(getLocalPlayer());
        }
    
        private boolean insideVarrock() {
            return varrockSquare.contains(getLocalPlayer());
        }
    
        private boolean teleportToHouse() {
            log("teleporting to house");
    
           if (getInventory().interact("Teleport to house", "Break")) {
               if (sleepUntil(() -> !insideBank(), 10000)) {
                   log("teleported successfully");
                   return true;
               }
           }
    
            return false;
        }
    
        private boolean takePlayerPortal() {
            sleepUntil(() -> getGameObjects().closest("Portal") != null, 5000);
            GameObject portal = getGameObjects().closest("Portal");
    
            if (portal != null) {
                if (portal.interact("Enter")) {
                    return true;
                } else {
                    log("failed to interact with portal");
                }
            } else {
                log("couldn't find the portal :(");
            }
    
            return false;
        }
    
        private boolean teleportToHost() {
            log("teleporting to host");
            sleepUntil(() -> rimmingtonPortal.contains(getLocalPlayer()), 3000);
    
            if (rimmingtonPortal.contains(getLocalPlayer())) {
                sleepUntil(() -> getGameObjects().closest("Portal") != null, 5000);
                GameObject portal = getGameObjects().closest("Portal");
    
                if (portal != null) {
                    if (portal.interact("Enter")) {
                        if (sleepUntil(() -> getDialogues().getOptionIndex("Go to a friend's house") == 3, 5000)) {
    
                            if (getDialogues().chooseOption(3)) { // enter a friend's house
                                sleep(1500, 2500);
                                getKeyboard().type(hostName);
    
                                sleepUntil(() -> !(rimmingtonPortal.contains(getLocalPlayer())), 10000);
    
                                if (rimmingtonPortal.contains(getLocalPlayer())) {
                                    log("Couldn't join host's house. Try a different hose");
                                    this.stop();
                                } else {
                                    return true;
                                }
                            }
                        }
                    }
                } else {
                    log("no portal found");
                }
            } else {
                log("not at Rimmington portal");
            }
    
            return false;
        }
    
        private boolean backToHost() {
            if (teleportToHouse()) {
                if (takePlayerPortal()) {
                    return teleportToHost();
                }
            }
    
            return false;
        }
    
        private boolean teleportToVarrock() {
            log("teleporting to varrock");
    
            if (getInventory().interact("Varrock teleport", "Break")) {
                return sleepUntil(() -> insideVarrock(), 10000);
            }
    
            return false;
        }
    
        private Widget getWidget(int i) {
            Widget tabWidget = getWidgets().getWidget(i);
    
            if (tabWidget != null) {
                if (tabWidget.isVisible()) {
                    return tabWidget;
                }
            }
    
            return null;
        }
    
        private WidgetChild getWidgetChild(Widget parent, int child) {
            WidgetChild c = parent.getChild(child);
    
            if (c != null) {
                if (c.isVisible()) {
                    return c;
                }
            }
    
            return null;
        }
    
        private void saveLecternTile() {
            log("saving lectern tile");
            lecternTile = getLocalPlayer().getTile();
        }
    
        private boolean lecternInteract(GameObject lectern) {
            if (lectern.interact("Study")) {
                sleepUntil(() -> getWidget(TAB_WIDGET_ID) != null, 10000);
                Widget tabs = getWidget(TAB_WIDGET_ID);
    
                if (tabs != null) {
                    sleepUntil(() -> getWidgetChild(tabs, widgetIDs.get(tabType)) != null, 10000);
                    WidgetChild tab = getWidgetChild(tabs, widgetIDs.get(tabType));
    
                    if (tab != null) {
                        return tab.interact("Make-All");
                    }
                }
            }
    
            return false;
        }
    
        private boolean doTabbing() {
            if (getLocalPlayer().getAnimation() != -1) {
                return true;
            } else {
                log("Sleeping for animation");
                sleep(800); // potentially in the middle of the animation
                if (getLocalPlayer().getAnimation() != -1) {
                    return true;
                }
            }
    
            if (lecternTile != null) { // lectern has been used before
                if (lecternTile.distance() < 5) {
                    GameObject lectern = getGameObjects().closest("Lectern");
                    return lecternInteract(lectern);
                } else {
                    getWalking().walk(lecternTile);
                    sleep(500, 1000);
                }
    
                return false;
            } else {
                GameObject lectern = getGameObjects().closest("Lectern");
    
                if (lectern != null) {
                    if (lectern.distance() < 3) {
                        saveLecternTile();
                        return lecternInteract(lectern);
                    } else {
                        getWalking().walk(lectern);
                        sleep(500, 1000);
                    }
                } else {
                    log("Couldn't find a lectern!");
                }
    
                return false;
            }
        }
    
        private boolean hasClay() {
            return getInventory().count("Soft clay") > 0;
        }
    
        private void setRunThreshold() {
            if (getWalking().getRunEnergy() == 0) {
                getWalking().setRunThreshold(Calculations.random(20, 70));
            }
        }
    
        private void checkRequirements() {
            if (
                    (getInventory().count("Law rune") < 28) ||
                            (getInventory().count("Varrock teleport") < 2) ||
                            (getInventory().count("Teleport to house") < 2))
            {
                log("Stopping because you do not have enough law runes or tabs");
                this.stop();
            }
    
        }
    
        private void listenInventory() {
            monitor.updateContext(this);
    
            if (monitor.hasChanged()) {
                Item items[] = monitor.getChanges();
    
                for (Item i : items) {
                    if (i.getName().contains(tabType + " teleport")) {
                        if (i.getAmount() < lastTabCount) {
                            lastTabCount = i.getAmount();
                        } else {
                            tabCount += i.getAmount() - lastTabCount;
                            lastTabCount = i.getAmount();
                        }
    
                    }
                }
            }
        }
    
        @Override
        public int onLoop() {
            listenInventory();
            getDialogues().clickContinue();
            checkRequirements();
            setRunThreshold();
    
            if (!hasClay()) {
                if (state.equals("banking")) {
                    if (bank()) {
                       if (backToHost()) {
                           state = "tabbing";
                       }
                    }
                } else {
                    if (teleportToVarrock()) {
                        state = "banking";
                    }
                }
            } else {
                doTabbing();
            }
    
            return Calculations.random(300, 500);
        }
    
        @Override
        public void onExit() {
            log("Bye");
        }
    
        @Override
        public void onPaint(Graphics g) {
            Font font = new Font("Times new roman", Font.PLAIN, 15);
    
            Color bg = new Color(155, 155, 155, 127); // grey transparent
    
            g.setColor(bg);
            g.fillRect(5, 5, 510, 80);
            g.setFont(font);
            g.setColor(Color.BLUE);
            g.drawString("Time: ", 10, 25);
            g.setColor(Color.WHITE);
            g.drawString(timer.formatTime(), 100, 25);
            g.setColor(Color.BLUE);
            g.drawString("Tabs made: ", 10, 45);
            g.setColor(Color.WHITE);
            g.drawString(tabCount + " (" + timer.getHourlyRate(tabCount) + ")", 100, 45);
            g.setColor(Color.BLUE);
            g.drawString("Magic xp: ", 10, 65);
            g.setColor(Color.WHITE);
            g.drawString(getSkillTracker().getGainedExperience(Skill.MAGIC) + " (" + getSkillTracker().getGainedExperiencePerHour(Skill.MAGIC) + ")", 100, 65);
        }
    }
    
    
    
    Posted

    Nice releases so far. Are you planning on putting them to SDN?

    Posted

    Nice releases so far. Are you planning on putting them to SDN?

     

    I'm not sure how to do that haha :D

     

    My RockCrab script can go on the SDN but this one still needs a couple of changes until it's ready

    Posted

    Very cool, but just saying it would be way better to just un-note clay at Phials in the building south of the portal.

    Archived

    This topic is now archived and is closed to further replies.

    ×
    ×
    • Create New...

    Important Information

    We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.