Jump to content

Wacky Jacky

Scripter II
  • Posts

    113
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Wacky Jacky

  1. 9 hours ago, xtheodorx said:

    Hello, 

    Interested in this script, could i have a trial?

    Done, enjoy!

    Trial time is 32 hours just incase it is night time or you are at work so you have the full 24 testing time.

  2. I do this for option in dialog, not sure if it applies here, if you know the exact string to use, I make an array with all options:
     

    public static String[] ThurgoDialog = new String[] {
    	"Something else.", 
    	"Would you like a redberry pie?", 
    	"Can you make a special sword for me?",
        	"About that sword...", 
    	"Can you make that replacement sword now?"
    };

    And then I use this method to handle dialogs, feed it an NPC name as a string and the array of options from above. It will talk to the NPC and then if a dialog is pending with continue it just continues, and if the option shows up it uses the options from the array:

    private void handleDialog(String npcName, String[] dialogOptions) {
            if (npcs.closest(npcName) != null) {
                if (!getDialogues().inDialogue()) {
                    npcs.closest(npcName).interact("Talk-to");
                    Sleep.sleepUntil(() -> getDialogues().inDialogue(), 5000);
    
                } else if (getDialogues().isPendingContinuation()) {
                    getDialogues().clickContinue();
                    Sleep.sleepUntil(() -> !getDialogues().isPendingContinuation(), MethodProvider.random(600,1200));
    
                } else if (getDialogues().isPendingOption()) {
                    for (String option : dialogOptions) {
                        if (getDialogues().selectOption(option)) {
                            Sleep.sleepUntil(() -> !getDialogues().isPendingOption(), MethodProvider.random(600,1200));
                            break;
                        }
                    }
                }
            }
        }

    Maybe handy at some point :/

  3. For my thiever I just use this:

    if (!getEquipment().isWearingItem(EquipmentSlot.AMULET) 
    || (getEquipment().getItemInSlot(EquipmentSlot.AMULET.slot) != null) 
    && !getEquipment().getItemInSlot(EquipmentSlot.AMULET.slot).getName().contains("Dodgy necklace")){
    
        t("Need dodgy amulet");
        return false;
    }

    When it returns false, I run code to check if the inventory contains more of them, and equip it. And if it doesn't just go to the bank and gets some new ones.
    Like the two gents above already told you. 

    Also, Config 1042 is a very common one that pops up all the time, when interactions are happening or dialog etc. So just ignore that one.
    Here an example while fishing:
    aqO3zgJ.png

     

  4. On 3/22/2024 at 2:54 AM, taltoniser said:

    Yeah, i do! it would be a dope addition

    I will be looking in to it, added to the feature creep list.

     

    2 hours ago, TheCongregation said:

    Possible to have "items to sell"? I got longbows on a perm iron I wanna sell for 10 or 15 at a time with world hop and I cba for all that

    For now, I don't have the intention of adding a sell option anytime soon. Sorry, I can't help u with that wish. You could check out the premium shopper from the OSBot store, I think it supports that, if u want to spend money on a shopper of course.  

  5. Welcome to Wacky Jacky scripts!
    We present u underwater agility/thieving!

    DivingAgilityTrainingLogoScaled.png

     

    This script will be a premium script!

    Testers are soon welcome, are you interested leave a message on this post and use the following format:

    Spoiler

    Q: Why do you want to be a tester, and why shall I add you to the select few?
    A: answer here

    Q: How many bots are you approximately going to run? (don't worry, only running one is fine)
    A: answer here

    Q: Are you active, do you give feedback at least ones a week feedback on your testing sessions and are willing to join my discord for communication?
    A: answer here
     

    Features:

    • Playing the underwater mini-game for collecting Glistering tears.
    • While waiting for the next chest/clam, u can choose to train auxiliary skills:
      • High Alching, enter any item name and alch until out of supply or goal reached
        • no banking support because of how the mini-game works, so it will take all required items at ones.
      • Fletching, make darts until out of supply or goal reached
        • on release only darts will be supported, after release I am open for debate to add more fletching options ^^
        • no, stringing bows, cutting bows or any recipe that required banking, because of how the mini-game works.
    • Automatically trade in tears for exp and continue again
    • Invoke support
    • Trade in tears at (x) amount
    • Queue compatible after reaching (x) level, tears, time.
    • Walks to the spot from nearly everywhere in the world (web walker)
    • Post release confirmed features to come:
      • Doing the Skippy quest, and obtaining the flippers (required item!)

    Requirements:

    1. Flippers, for running underwater!
    2. Recommended, full graceful and/or high agility/thieving for best exp, decent hit points are also very handy for the best exp.

    Pictures:

    Spoiler

    9BZztKO.pngH9JwM5c.png

    More information, pictures and features will follow.
     

    • Like 4
  6. 23 hours ago, hingleberry said:

    Ok so The Main Code would go into the main class which has my main onloop. 

    The other 3 codes for CachedWidget, WidgetMEssageFilter and WidgetActionFiltet would be classes I create in the package and then perhaps somehow call them in the main class, perhaps The Main Code already does that for me. 

    I would also like to make changes such as, activate Shift drop, set particular bind keys, zoom out to a particular level, de-activate 3 second trade delay, deactivate world hopping warning among other changes and selectively as well, not just spamming them all every time.

    The logic for CachedWidgets seems an interesting failsafe applicable to every script you make that interacts with widgets I don't quite understand it 100% but cool, I will revisit this. How is the update going for the shopping bot?

    Feature is done, I am testing it right now, unforeseen issues may occur since it was a quick add and tested it not so much.
    Multiple items support is as following: Item Name1, Item Name2, Item Name3.

    Small patch, it now also sets the sorting of the worlds so it is more optimal if you use Decent or Accent hopping.

    So just separate the items with a ',' (comma), still case-sensitive :/ 
    I will upload it soon, keep checking the link :)

  7. @hingleberry
    If you like to add such code your self here is a bit of help, also a lot of credits to @Explv most of this code if from him, I just made it work since it was out-dated. 

    The main code:

    Spoiler
    public class EnableFixedModeEvent extends Event {
    
        private final CachedWidget clientLayoutWidgetText = new CachedWidget(new WidgetMessageFilter("Game client layout:"));
        private final CachedWidget displaySettingsWidget = new CachedWidget(new WidgetActionFilter("Display"));
        private final CachedWidget fixedLayout = new CachedWidget(new WidgetMessageFilter("Fixed - Classic layout"));
        private final CachedWidget optionMenu = new CachedWidget(new WidgetMessageFilter("Fixed - Classic layout", "Resizable - Classic layout", "Resizable - Modern layout"));
    
        public static boolean isFixedModeEnabled(final MethodProvider methods) {
            return methods.getWidgets().isVisible(378) ||
                    methods.getWidgets().isVisible(548) ||
                    !methods.myPlayer().isVisible();
        }
    
        @Override
        public int execute() throws InterruptedException {
            if (isFixedModeEnabled(this)) {
                log("~Fixed mode is already set~");
                setFinished();
            } else if (Tab.SETTINGS.isDisabled(getBot())) {
                log("~Setting tab is disabled~");
                setFailed();
            } else if (getTabs().getOpen() != Tab.SETTINGS) {
                log("~Opening Setting Tab~");
                getTabs().open(Tab.SETTINGS);
            } else if (!clientLayoutWidgetText.isVisible(getWidgets())) {
                log("~Can't see client window options, opening display settings~");
                displaySettingsWidget.interact(getWidgets());
            } else if (!fixedLayout.isVisible(getWidgets())) {
                log("~Fixed layout not selected, trying to open~");
                if (!optionMenu.interact(getWidgets())){
                    log("~Failed to open~");
                    return 200;
                }
                Sleep.sleepUntil(()-> fixedLayout.isVisible(getWidgets()), 5000);
    
                log("~Trying to select fixed layout mode now~");
                if (!fixedLayout.interact(getWidgets(), "Select")){
                    log("~Failed to open~");
                    return 200;
                }
    
                Sleep.sleepUntil(() -> isFixedModeEnabled(this), 3000);
            }
            return 200;
        }
    }

     


    Utilities needed for it to work.

    CachedWidget:

    Spoiler
    import org.osbot.rs07.api.Widgets;
    import org.osbot.rs07.api.filter.Filter;
    import org.osbot.rs07.api.ui.RS2Widget;
    
    import java.util.Optional;
    
    /**
     * This class provides a clean and efficient way of accessing RS2Widgets.
     * Widgets can be found using IDs, the message, or any other Filter<RS2Widget>
     * Once the RS2Widget is found, it's IDs are stored, so any future lookup can be performed in O(1) time.
     * <p>
     * Note that the class is thread safe, and so instances of this class may be static.
     */
    public class CachedWidget {
    
        private int rootID = -1, secondLevelID = -1, thirdLevelID = -1;
        private String[] widgetTexts;
        private Filter<RS2Widget> filter;
    
        /**
         * This *SHOULD NOT* be used for constant widgets. Widget IDs can change, which is the entire purpose
         * of this class!
         *
         * @param rootID        The root ID of the RS2Widget to cache
         * @param secondLevelID The second level ID of the RS2Widget to cache
         */
        public CachedWidget(final int rootID, final int secondLevelID) {
            this.rootID = rootID;
            this.secondLevelID = secondLevelID;
        }
    
        /**
         * This *SHOULD NOT* be used for constant widgets. Widget IDs can change, which is the entire purpose
         * of this class!
         *
         * @param rootID        The root ID of the RS2Widget to cache
         * @param secondLevelID The second level ID of the RS2Widget to cache
         * @param thirdLevelID  The third level ID of the RS2Widget to cache
         */
        public CachedWidget(final int rootID, final int secondLevelID, final int thirdLevelID) {
            this.rootID = rootID;
            this.secondLevelID = secondLevelID;
            this.thirdLevelID = thirdLevelID;
        }
    
        /**
         * @param rootID      The root ID of the RS2Widget to cache
         * @param widgetTexts An array of widget messages to match when searching for the RS2Widget to cache
         */
        public CachedWidget(final int rootID, final String... widgetTexts) {
            this.rootID = rootID;
            this.widgetTexts = widgetTexts;
        }
    
        /**
         * @param widgetTexts An array of widget messages to match when searching for the RS2Widget to cache
         */
        public CachedWidget(final String... widgetTexts) {
            this.widgetTexts = widgetTexts;
        }
    
        /**
         * @param rootID The root ID of the RS2Widget to cache
         * @param filter A Filter<RS2Widget> to match when searching for the RS2Widget to cache
         */
        public CachedWidget(final int rootID, final Filter<RS2Widget> filter) {
            this.rootID = rootID;
            this.filter = filter;
        }
    
        /**
         * @param filter A Filter<RS2Widget> to match when searching for the RS2Widget to cache
         */
        public CachedWidget(final Filter<RS2Widget> filter) {
            this.filter = filter;
        }
    
        /**
         * @param rs2Widget An RS2Widget to cache
         */
        public CachedWidget(final RS2Widget rs2Widget) {
            setWidgetIDs(rs2Widget);
        }
    
        /**
         * Returns whether the cached RS2Widget is not null, and is visible
         *
         * @param widgets OSBot Widgets API
         * @return True if the cached RS2Widget is not null and visible
         */
        public boolean isVisible(final Widgets widgets) {
            return get(widgets).map(RS2Widget::isVisible)
                    .orElse(false);
        }
    
        /**
         * Interacts with the cached RS2Widget if it is visible
         *
         * @param widgets     OSBot Widgets API
         * @param interaction Array of interaction options
         * @return True if the cached RS2Widget is visible and the interaction was successful, else false
         */
        public boolean interact(final Widgets widgets, final String... interaction) {
            return get(widgets).filter(RS2Widget::isVisible)
                    .map(w -> w.interact(interaction))
                    .orElse(false);
        }
    
        /**
         * Returns the parent RS2Widget of the cached widget
         * If the CachedWidget is a second level RS2Widget, the same RS2Widget will be returned
         * as you cannot have an RS2Widget with just a root ID.
         *
         * @param widgets OSBot Widgets API
         * @return An Optional parent RS2Widget
         */
        public Optional<RS2Widget> getParent(final Widgets widgets) {
            return get(widgets).map(widget -> {
                if (widget.isSecondLevel()) {
                    return widget;
                }
                return widgets.get(widget.getRootId(), widget.getSecondLevelId());
            });
        }
    
        /**
         * Returns an RS2Widget relative to the cached widget
         *
         * @param widgets             OSBot Widgets API
         * @param rootModifier        Relative root ID modifier
         * @param secondLevelModifier Relative second level ID modifier
         * @param thirdLevelModifier  Relative third level ID modifier
         * @return An Optional relative RS2Widget
         */
        public Optional<RS2Widget> getRelative(final Widgets widgets,
                                               final int rootModifier,
                                               final int secondLevelModifier,
                                               final int thirdLevelModifier) {
            return get(widgets).map(widget -> {
                if (widget.isThirdLevel()) {
                    return widgets.get(
                            rootID + rootModifier,
                            secondLevelID + secondLevelModifier,
                            thirdLevelID + thirdLevelModifier
                    );
                }
                return widgets.get(
                        rootID + rootModifier,
                        secondLevelID + secondLevelModifier
                );
            });
        }
    
        /**
         * Returns the cached RS2Widget.
         * <p>
         * If no RS2Widget has been cached, it tries to find the RS2Widget using the supplied
         * filter / message string / etc.
         * <p>
         * If the RS2Widget is found, it is cached and then returned
         * <p>
         * If no RS2Widget is found, an empty Optional is returned.
         *
         * @param widgets OSBot Widgets API
         * @return The Optional cached RS2Widget
         */
        public Optional<RS2Widget> get(final Widgets widgets) {
            if (rootID != -1 && secondLevelID != -1 && thirdLevelID != -1) {
                return Optional.ofNullable(widgets.get(rootID, secondLevelID, thirdLevelID));
            } else if (rootID != -1 && secondLevelID != -1) {
                return Optional.ofNullable(widgets.get(rootID, secondLevelID));
            } else if (widgetTexts != null) {
                return getWidgetWithText(widgets);
            } else {
                return getWidgetUsingFilter(widgets);
            }
        }
    
        /**
         * Finds and caches a widget using the specified message Strings
         * <p>
         * If no RS2Widget is found, an empty Optional is returned
         *
         * @param widgets OSBot Widgets API
         * @return The cached RS2Widget
         */
        private Optional<RS2Widget> getWidgetWithText(final Widgets widgets) {
            RS2Widget rs2Widget;
            if (rootID != -1) {
                rs2Widget = widgets.getWidgetContainingText(rootID, widgetTexts);
            } else {
                rs2Widget = widgets.getWidgetContainingText(widgetTexts);
            }
            setWidgetIDs(rs2Widget);
            return Optional.ofNullable(rs2Widget);
        }
    
        /**
         * Finds and caches a widget using the specified Filter<RS2Widget>
         * <p>
         * If no RS2Widget is found, an empty Optional is returned
         *
         * @param widgets OSBot Widgets API
         * @return The cached RS2Widget
         */
        private Optional<RS2Widget> getWidgetUsingFilter(final Widgets widgets) {
            RS2Widget rs2Widget;
            if (rootID != -1) {
                rs2Widget = widgets.singleFilter(rootID, filter);
            } else {
                rs2Widget = widgets.singleFilter(widgets.getAll(), filter);
            }
            setWidgetIDs(rs2Widget);
            return Optional.ofNullable(rs2Widget);
        }
    
        /**
         * Caches an RS2Widget's IDs
         *
         * @param rs2Widget The RS2Widget to cache
         */
        private synchronized void setWidgetIDs(final RS2Widget rs2Widget) {
            if (rs2Widget == null) {
                return;
            }
            rootID = rs2Widget.getRootId();
            secondLevelID = rs2Widget.getSecondLevelId();
            if (rs2Widget.isThirdLevel()) {
                thirdLevelID = rs2Widget.getThirdLevelId();
            }
        }
    
        @Override
        public String toString() {
            return rootID + ", " + secondLevelID + ", " + thirdLevelID;
        }
    } 

     


    WidgetMessageFilter

    Spoiler
    import org.osbot.rs07.api.filter.Filter;
    import org.osbot.rs07.api.ui.RS2Widget;
    
    import java.util.stream.Stream;
    
    public class WidgetMessageFilter implements Filter<RS2Widget> {
    
        private final String[] messages;
    
        public WidgetMessageFilter(final String... messages) {
            this.messages = messages;
        }
    
        @Override
        public boolean match(final RS2Widget widget) {
            return Stream.of(messages)
                    .anyMatch(message -> widget.getMessage().contains(message));
        }
    }

     


    WidgetActionFilter:

    Spoiler
    import org.osbot.rs07.api.filter.Filter;
    import org.osbot.rs07.api.ui.RS2Widget;
    
    public final class WidgetActionFilter implements Filter<RS2Widget> {
    
        private final String[] actions;
    
        public WidgetActionFilter(final String... actions) {
            this.actions = actions;
        }
    
        @Override
        public final boolean match(final RS2Widget rs2Widget) {
            if (rs2Widget == null || !rs2Widget.isVisible() || rs2Widget.getInteractActions() == null) {
                return false;
            }
            for (final String widgetAction : rs2Widget.getInteractActions()) {
                for (final String matchAction : actions) {
                    if (matchAction.equals(widgetAction)) {
                        return true;
                    }
                }
            }
            return false;
        }
    }

     

  8. 7 hours ago, hingleberry said:

    I don't suppose it will have support for wilderness cape shops?

    EDIT: also why does this appear in my script lists now?

    Captura de pantalla 2024-03-03 091714.png

    EDIT: how do I buy more than 1 item in the shop? putting a comma between the items didn't work,

    EDIT: seems to do 2 checks when about to hop world so opens and closes the world hopper interface uneccesarily EDIT EDIT: i'm thinking maybe it's because i'm on resizeable modern and widget ID's are different or not static

    [INFO][Bot #1][03/03 09:33:59 a. m.]: [We Need To Hop]
    [INFO][Bot #1][03/03 09:33:59 a. m.]: Sleeping: [Waitng for the store to close.]
    [INFO][Bot #1][03/03 09:34:07 a. m.]: [Current[399] >> Hop[417]]

    Like this 8 second delay to hop is unnecessary, I notice the bot closes interface immedietly after buying and world hop interface is already open so really no need to sleep or to wait too long to begin hopping maybe 2-3 seconds tops. 

    last_config.txt 280 B · 0 downloads

    Sorry for the !example issue, I saw it got teleported from my method's folder which had that script in it, new version has it removed :)

    Q: EDIT: how do I buy more than 1 item in the shop? putting a comma between the items didn't work.
    A: I have no support for multiple items in this script, I can take a look at it if you want, but it will take me a while since I am focused on other paid scripts, but I shall add it.

     Q: EDIT: seems to do 2 checks when about to hop world so opens and closes the world hopper interface uneccesarily EDIT EDIT: i'm thinking maybe it's because i'm on resizeable modern and widget ID's are different or not static.
    A: Please use fixed mode always when botting, widgets and IDs do indeed change, but not to worry I will add a handler which is already in the new version now. It will set the game to fixed mode, the intended client window mode.

    Q: Like this 8 second delay to hop is unnecessary, I notice the bot closes interface immedietly after buying and world hop interface is already open so really no need to sleep or to wait too long to begin hopping maybe 2-3 seconds tops. 
    A: I think this is a side effect of the resizable modern mode. Let me know how it goes with the new version. :)

    v1.01 is up, the download link will now take you to the folder with all version <3

    Added a board for requested features so people know what will be coming 
    Feature creep | Board (notion.site)

  9. Released the jar file ^^
    For bugs, let me know, but I must have a log, and you need to paint me a nice picture of the scenario and provide the used profile it will always be the one called: last_config.txt

    where to find the profile:
    C:\Users\%user%\OSBot\Data\WackyJackysFolder\WackyJackyShopper\


    where to find the log:
    C:\Users\%user%\OSBot\Data\logs\

    Because it is free and an unofficial release, I will maintain it but slow and irregular. 

  10. Welcome to my free yet premium shopper!

    YzBKVJH.png

    It is uploaded :) feel free to decompile it and watch the spaghetti galore ^^ but hé, it works, I blame the rum. And yes if you request nicely I will even fix some bugs 🐛 
    (download here) v1.02
    virus scan

    Features:

    1. : shop anywhere with manual shop selector, click the npc
    2. : multi item support, add multiple names, and separate them with a (,) comma.
    3. : or enter shop name manually, with interaction and locations, yep all shop are supported…
    4. : shop and unpack at location
    5. : shop and bank items/packs
    6. : invoke support 
    7. : invoke open packs after amount reached (a whole inventory within 1.5 seconds)
    8. : hop support, ascending order, descending order or random
    9. : stop when x money left 
    10. : stop after x items bought
    11. : setting fix like all my scripts 

    Note!
    All item names, shop names and all other stuff are CaSe SeNsiTiVe. 
     

    Updates:

    Spoiler

    v1.02:
    — Added multi item support in v1.02 and above, to use just type in the item name and separate them with a ',' (comma).
    i.g. Empty jug pack, Empty bucket pack, knife
    — Added feature that automatically sorts the world list if it isn't sorted yet.

    Note:
    names are still case-sensitive



    v1.01: 
    — Removed the remains of !example script within the package, it won't show up anymore :)
    — Added a handler, if the game isn't in fixed mode, it will set it to fixed mode
    — Cleaned up the GUI, took care of some spacings


     

    So this is the release, expect bugs and other weird things, if you post logs and good bug information I will be fixing them, slowly but surely,
    want to keep track your bug? 

    Bug Tracker | Board (notion.site)

    Here you can see requested features to come or rejected for good.
    Feature creep | Board (notion.site)

    OGdJen9.jpeg
    b0ukbUH.png
    wM1SzEO.png
    Py2Y3Rx.jpeg

    https://i.imgur.com/UYdEkDz.mp4
    https://i.imgur.com/cEafqCU.mp4

    • Like 1
  11. yeeeeet finally screenshot galore!
    It will help a lot and make stuff nice and neat, 

    The following code doesn't exist and will never be implemented, take it with a grain of salt, it is 2024 you never know what people can't handle a joke

    Spoiler
    if (playerBlackListedPlaying()) {
    	while (true) {
    		Utilities.takeScreenshot(getRandomDumbWorldFormList());
    	}
    }
  12. vb0Hh3m.png

    ZsaxdCM.pngcDvAIhY.png

    ~Welcome to Wacky Jacky Scripts~

    TL;DR
    1. Add on the SDN (click here)

    2. Select Desired Settings
    3. Press start!


    About the script:
    There is nothing wrong with the current cannonball smelters, but this one is free and the fastest, full sails ahead!
    What is different about this free cannonball smelter? 

    • It automatically selects the smelt [All] option.
    • It has support for invokes and normal interactions.
    •  (released) The knight's sword Quest, (WIP) The Dwarf Cannon Quest  
    • Double mould or normal mould
    • Smelt locations,
      • Shilo village
      • Edgeville
      • (more can be added on request)
         
    • Settings Fix, like all Wacky Jacky scripts
    • 16 different stop option combinations
      • stop after x amount of time
      • stop after x amount of cannonballs made
      • stop after when out of supplies
      • Queue support
      • Choose to queue or stop
      • Choose to stay logged in or logout
         
    • Save and Load profiles for quick setup
    • Paint is very informative, see pictures.
    • It remembers the last settings for quick start
    • Full CLI support, just load in your profile
    • Works from (nearly) anywhere in the world
    • Automatically sets fixed window mode if needed
    • (WIP) It will level you to 35 smithing, the cannonball requirement.

     

    ~The Setting Fix~

    Spoiler

    Make sure you're not in combat, before starting!

    Mute all in game audio

    Disable profanity filter

    Enable PK Skull prevention

    Enable shift drop

    Enable escape close interface

    Hide roofs

    Disable Accept aid

    Disable make-x darts

    Disable store button

    Disable wiki lookup

    Disable activity adviser

    Disable accept trade delay

    Disable GE buy warning

    Disable GE sell warning

    Disable World switching confirmation

    disable level up interfaces

    ~Pictures~

    Spoiler

    Hgl26Yt.png

    ABUyIQ8.png


    ~CLI~

    Spoiler

    Script ID: 1230
    Parameters: only the saved file name

    For example:

    filename =  trainUntilLevel50.txt
    9W6ryM9.png
     

    For all the current CLI options, keep up-to-date here:


    For an actual tutorial on CLI, go here:


     

    • Like 3
  13. 6 hours ago, Heiz said:

    Thanks! Done

    Woot this script rocks man, really hope you will add more quests, and for cli just a profile save name or something. 

    • Heart 1
  14. Hi it is broken, I dropped the log in the discord, but I had no reaction so I will attempt it here.
    it is getting stuck after making a name, when it needs to open the settings menu... please fix it hasn't worked in so long.

    [INFO][Bot #1][12/21 01:43:10 PM]: Scheduling script background executors
    [INFO][Bot #1][12/21 01:43:10 PM]: Completing GUI
    [INFO][Bot #1][12/21 01:43:10 PM]: Tutorial Started
    [INFO][Bot #1][12/21 01:43:12 PM]: BreakManager: We will bot for 74 minute(s) and break for 8 minute(s)
    [INFO][Bot #1][12/21 01:43:20 PM]: Populating words list...
    [INFO][Bot #1][12/21 01:43:22 PM]: Set instructor: Gielinor Guide
    [INFO][Bot #1][12/21 01:43:22 PM]: Entering Username
    [INFO][Bot #1][12/21 01:43:32 PM]: Creating Random Character Apperance
    [INFO][Bot #1][12/21 01:43:36 PM]: Talking to Gielinor Guide
    [INFO][Bot #1][12/21 01:43:36 PM]: Interacting with Gielinor Guide
    [INFO][Bot #1][12/21 01:43:47 PM]: Opening Settings Tab <--- it never gets passed it, even on hand and pressing start again failed me

×
×
  • Create New...