Automate Arcanum

Plays (mostly) automatically instead of you. Work very much in progress.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Automate Arcanum
// @name:hu      Automata Arcanum
// @namespace    https://greasyfork.org/users/390287
// @version      0.001
// @description  Plays (mostly) automatically instead of you. Work very much in progress.
// @description:hu  Automatizáló script az Arcanum játékhoz.
// @author       Yoyó
// @icon         https://i.ibb.co/Y7W0Zwd/pinkieemote.png
// @match        http://www.lerpinglemur.com/arcanum/
// @match        https://game312933.konggames.com/gamez/0031/2933/*
// @grant        none
// ==/UserScript==

//user settings
var timeToIdle = 3; //how many ticks should it take for the idle stuff to kick in. default 3
var stamToKeep = 80; // stamina to keep for stuff, in percentage. default 80
var tickTime = 2000; // how many milliseconds should a tick take. default 2000

//program starts here

var idleTimer = 0;
var idling = 0;
const data = {
    "qa": { //for quick action
        "Clean Stables":{
            "stam":-0.08,
            "virtue":0.1,
            "gold":0.2
        },
        "Buy Scroll":{
            "gold":-10,
            "scrolls":1
        }
    }
}

var repetitionIsTheKeyToSuccess = window.setInterval (function(){
    let stamXPath="//div[@class='vitals']//table[@class='bars']//div[@class='stamina']//span[@class='bar-text']";
    let stamText = document.evaluate(stamXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let stamValues = stamText.textContent.split("/");
    let currentStam = parseFloat(stamValues[0]);
    let maxStam = parseFloat(stamValues[1]);
    let goldXPath = "//div[@class='resource-list']/tr[@class='item-name']/td[text()='gold']/following-sibling::td[@class='num-align']";
    let goldText = document.evaluate(goldXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let goldValues = goldText.textContent.split("/");
    let currentGold = parseInt(goldValues[0]);
    let maxGold = parseInt(goldValues[1]);
    let pumpkinXPath = "//div[@class='resource-list']/tr[contains(@class,'item-name')]/td[text()='pumpkins🎃']/following-sibling::td[@class='num-align']";
    let pumpkinText = document.evaluate(pumpkinXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let pumpkinValues = pumpkinText.textContent.split("/");
    let currentPump = parseInt(pumpkinValues[0]);
    let maxPump = parseInt(pumpkinValues[1]);
    let toStam = maxStam*stamToKeep/100;
    let jackoXPath = `//div[@class='resource-list']/tr[contains(@class,'item-name')]/td[text()="jack o' lantern🎃"]/following-sibling::td[@class='num-align']`;
    let jackoText = document.evaluate(jackoXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let jackoValues = jackoText.textContent.split("/");
    let currentJacko = parseInt(jackoValues[0]);
    let maxJacko = parseInt(jackoValues[1]);

    let runningXPath = "//div[@class='vitals']/div[@class='running']/div/span/text()";
    let runningText = document.evaluate(runningXPath, document, null, XPathResult.STRING_TYPE, null);

    let restXPath = "//div[@class='vitals']/div[@class='separate']/button[2]";
    let restButton = document.evaluate(restXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let studyXPath = "//span[@class='action-btn runnable']/button[text()='study']";
    let studyButton = document.evaluate(studyXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let filchXPath = "//span[@class='action-btn runnable']/button[text()='filch pumpkins🎃']";
    let filchButton = document.evaluate(filchXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    let carveXPath = "//span[@class='action-btn runnable']/button[text()='carve lantern🎃']";
    let carveButton = document.evaluate(carveXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

    let cleanStableXPath = "//span[contains(@class,'action-btn')]/button[text()='Clean Stables']";
    let cleanStableButton = document.evaluate(cleanStableXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    if (!cleanStableButton.disabled && currentGold < maxGold && currentStam > toStam) {
        let needToRun = (maxGold - currentGold)/data.qa["Clean Stables"].gold;
        while (needToRun > 0 && !cleanStableButton.disabled && currentStam > toStam) {
            cleanStableButton.click();
            currentStam = currentStam + data.qa["Clean Stables"].stam;
            needToRun = needToRun - 1;
        }
    }

    let upgradeXPath = "//div[@class='upgrade-list'][1]/span[@class='action-btn' and not(@class='locked')]/button[@class='wrapped-btn' and not(@disabled)]";
    let upgradeButton = document.evaluate(upgradeXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    if (upgradeButton != null) {
        upgradeButton.click();
    }

    let buyScrollXPath = "//span[@class='action-btn']/button[text()='Buy scroll' and not(@disabled)]";
    let buyScrollButton = document.evaluate(buyScrollXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    if (buyScrollButton !== null && currentGold == maxGold) {
        buyScrollButton.click();
    }

    if (idling === 0) {
        idleTimer = idleTimer + 1;
    }
    if (idleTimer >= timeToIdle) {
        idleTimer = 0;
        idling = 1;
    }
    if (idling == 100) {
        if (runningText.stringValue != "studying scrolls") {
            if(runningText.stringValue != "resting") {
                idling = 0;
            }
        }
    }
    if (idling == 2) {
        if (currentPump == maxPump && runningText.stringValue === "") {
            idling = 1;
        }
    }
    if (idling == 3) {
        if (currentJacko == maxJacko) {
            idling = 2;
            filchButton.click();
        }
    }
    if (idling == 1) {
        if (currentStam <= maxStam && runningText.stringValue === "") {
            restButton.click();
        }
        if (currentStam == maxStam && runningText.stringValue === "") {
            if (filchButton !== null) {
                if (!filchButton.disabled) {
                    filchButton.click();
                    idling = 2;
                } else if (carveButton !== null) {
                    carveButton.click();
                    idling = 3;
                } else if (studyButton !== null) {
                    if (!studyButton.disabled) {
                        studyButton.click();
                        idling = 100;
                    }
                }
            } else if (studyButton !== null) {
                if (!studyButton.disabled) {
                    studyButton.click();
                    idling = 100;
                }
            }
        }
    }
},tickTime);