Greasy Fork is available in English.

aluno01

teste

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         aluno01
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  teste
// @author       testante
// @require      https://greasyfork.org/scripts/461948-fbase-lib/code/FBase%20Lib.js?version=1224586
// @match        https://profit-pie.com/*
// @icon         https://profit-pie.com/resources/style/img/logo-letter.svg
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==
// Register here: https://profit-pie.com?aff=11691

(function() {
    'use strict';
    const EMAIL = 'seu -email';
    const PASSWORD = 'sua senha';

	const FAST_MODE = false; // rndInt(1, 10) < 8;

    // TODO: language validation.. for now warning...
    setTimeout(() => {
        if (document.querySelector('.skiptranslate iframe[style="visibility:visible"]')) {
            window.alert('Warning: the script will not work properly if the site is translated.\nPlease disable Google Translation.');
        }
    }, rndInt(2000, 5000));

    const PAGE = {
        UNKNOWN: 'Unknown',
        HOME: 'Home',
        DASHBOARD: 'dashboard.php',
        LOGIN: 'login.php',
        OVEN: 'ovens.php',
        TREE: 'apple-tree.php',
        BAKERY: 'bakery.php',
    };
    let current = PAGE.UNKNOWN;
    let nextRoll = GM_getValue('nextRoll') || Date.now();

    async function doLogin() {
        let email = document.querySelector('input[name="email"]');
        let pass = document.querySelector('input[name="password"]');
        let loginBtn = document.querySelector('button[name="login"]');
        let captcha = new RecaptchaWidget();
        if (!email || !pass || !loginBtn || !captcha) {
            await wait(3000);
            return doLogin();
        }

        if (email.value != EMAIL) {
            email.value = EMAIL;
            await wait(100);
        }
        if (pass.value != PASSWORD) {
            pass.value = PASSWORD;
            await wait(100);
        }

        await captcha.isSolved();
        loginBtn.click(); // triggerClick(loginBtn);
    }

    function readNextRoll() {
        let timer = document.querySelector('#time');
        let val = false;
        if (timer && timer.isVisible()) {
            try {
                let mins = +timer.innerText.match(/.*h\:(.*)m/)[1];
                val = Date.now() + (mins * 60000) + rndInt(60000, 70000);
            } catch (err) {}
        }
        return val;
    }

    async function firstTimeTree() {
        let btn = [...document.querySelectorAll('a[href="?free"]')].filter(x => x.isVisible());
        if (btn.length > 0) {
            btn[0].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(400, 600);
            btn[0].click(); // triggerClick(bakeBtn[0]);
            return;
        }
    }

    async function collectTree() {
        await wait(2000, 8000);
        await firstTimeTree();
        let time = document.querySelector('#time');
        let collectButton = document.querySelector('a[href="?collect"]');
        if (time && time.isVisible() && time.innerText.toLowerCase() == 'ready to collect'
            && collectButton && collectButton.isVisible()) {
            GM_setValue('nextRoll', Date.now() + 60 * 60000 + rndInt(60000, 70000));
            collectButton.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(1300, 1800);
            collectButton.click(); // triggerClick(collectButton);
            return;
        } else {
            if (Date.now() > nextRoll) {
                let newNextRoll = readNextRoll();
                GM_setValue('nextRoll', newNextRoll || Date.now() + 5 * 60000);
            }
        }
        await wait(12000, 18000);
        return collectTree;
    }

    async function firstTimeOvens() {
        let btn = [...document.querySelectorAll('a[href="?freeOven"]')].filter(x => x.isVisible());
        if (btn.length > 0) {
            btn[0].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(400, 600);
            btn[0].click(); // triggerClick(bakeBtn[0]);
            return;
        }
    }

    function canCook(cost) {
        let availableApples = 0;
        try {
            let balance = [...document.querySelectorAll('h5')].filter(x => x.innerText.toLowerCase().includes('apples'));
            if (balance.length > 0) {
                availableApples = +balance[0].nextElementSibling.innerText;
            }
        } catch (err) {}
        return cost <= availableApples;
    }

    async function doOvens() {
        await wait(2000, 8000);
        await firstTimeOvens();
        let bakeBtn = [...document.querySelectorAll('a.btn-warning')].filter(x => x.isVisible() && x.href.includes('?bake'));
        if (bakeBtn.length > 0) {
            let pieCost;
            try {
                pieCost = +bakeBtn[0].nextElementSibling.innerText.match(/(\d+)/)[0];
            } catch (err) { pieCost = 12; }
            if (!canCook(pieCost)) {
                return;
            }
            bakeBtn[0].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(400, 600);
            bakeBtn[0].click(); // triggerClick(bakeBtn[0]);
            return;
        }
        let collectBtn = [...document.querySelectorAll('a[id^=btnCollect],a[href^="?collect"]')].filter(x => x.isVisible());
        if (collectBtn.length > 0) {
            collectBtn[0].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(400, 600);
            collectBtn[0].click(); // triggerClick(collectBtn[0]);
            return;
        }
        if (!FAST_MODE) {
            await wait(12000, 17000);
        }
        return doOvens();
    }

    async function doBakery() {
        await wait(2000, 8000);
        let sellBtn = [...document.querySelectorAll('a[href="?sell"]')].filter(x => x.isVisible());
        if (sellBtn.length > 0) {
            sellBtn[0].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
            await wait(400, 600);
            sellBtn[0].click(); // triggerClick(sellBtn[0]);
            return;
        }
        if (!FAST_MODE) {
            await wait(12000, 17000);
        }
        return doBakery();
    }

    // popup closer
    setInterval(() => {
        let closePopup = document.querySelector('.swal2-confirm.swal2-styled');
        if (closePopup && closePopup.isVisible()) {
            closePopup.click();
            return;
        }
    }, rndInt(2000, 3000));

    async function crawler() {
        let nextPage;
        const rndNumber = rndInt(1, 10);

        switch(current) {
            case PAGE.TREE:
                nextPage = rndNumber < 9 ? PAGE.OVEN : PAGE.BAKERY;
                break;
            case PAGE.OVEN:
                nextPage = rndNumber < 10 ? PAGE.OVEN : PAGE.BAKERY;
                break;
            case PAGE.BAKERY:
                nextPage = rndNumber < 9 ? PAGE.OVEN : PAGE.TREE;
                break;
        }

        if (!nextPage || Date.now() > nextRoll + rndInt(10000, 120000)) {
            nextPage = PAGE.TREE;
        }
        if (!SOLVING_CAPTCHA) {
            location.replace(nextPage);
        }
    }

    // some movement
    async function moveY() {
        let yMovement = Math.floor(document.body.getBoundingClientRect().height) * Math.random()/1.7;
        window.scrollTo({
            top: yMovement,
            behavior: "smooth"
        });
    }

    async function start() {
        if (location.href.includes('/index.php') || location.pathname == '/') {
            current = PAGE.HOME;
            doHome();
            return;
        }
        if (location.href.includes('/login.php')) {
            let hasSetup = EMAIL && EMAIL != 'YOUR_EMAIL' && PASSWORD && PASSWORD != 'YOUR_PASSWORD';
            if (!hasSetup) {
                window.alert('You need to setup your email and password in the script');
                return;
            }
            current = PAGE.LOGIN;
            doLogin();
            return;
        }

        if (location.href.includes(PAGE.DASHBOARD)) {
            current = PAGE.DASHBOARD;
            location.replace(PAGE.TREE);
            setTimeout(() => { moveY(); }, rndInt(8000, 28000));
            setInterval(() => { crawler(); }, rndInt(35000, 60000));
            return;
        } else if (location.href.includes(PAGE.TREE)) {
            current = PAGE.TREE;
            collectTree();
            setTimeout(() => { moveY(); }, rndInt(8000, 28000));
            setInterval(() => { crawler(); }, rndInt(35000, 60000));
            return;
        } else if (location.href.includes(PAGE.OVEN)) {
            current = PAGE.OVEN;
            doOvens();
            setTimeout(() => { moveY(); }, rndInt(8000, 28000));
            setInterval(() => { crawler(); }, rndInt(65000, 75000));
            return;
        } else if (location.href.includes(PAGE.BAKERY)) {
            current = PAGE.BAKERY;
            doBakery();
            setTimeout(() => { moveY(); }, rndInt(8000, 28000));
            setInterval(() => { crawler(); }, rndInt(35000, 60000));
            return;
        }

    }

    let SOLVING_CAPTCHA = false;
    async function submitCaptcha() {
        let captcha = new RecaptchaWidget();
        let captchaButton = [...document.querySelectorAll("button")].filter(x => x.isVisible() && x.innerText.toLowerCase().includes('send'));
        if (captcha && captchaButton.length > 0) {
            SOLVING_CAPTCHA = true;
            await captcha.isSolved();
            if (captchaButton.length > 0) {
                captchaButton[0].click();
                SOLVING_CAPTCHA = false;
                return;
            }
        }
        await wait(4000, 6000);
    }
    submitCaptcha();

    async function doHome() {
        await wait(10000);
        let loginBtn = [...document.querySelectorAll('a[href="login.php"]')].filter(x => x.isVisible());
        let needToLogin = loginBtn.length > 0;
        if (needToLogin) {
            loginBtn[0].click();
            return;
        } else {
            location.replace(PAGE.TREE);
            return;
        }
        return doHome();
    }

    start();
})();