aluno01

teste

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

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