Automate Arcanum

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

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==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);