Greasy Fork

Greasy Fork is available in English.

Freebitco.in - Auto Roll - Advanced - Status Concole - ALL Bonuses - no captcha - NOV 2020

AUTOROLL SCRIPT [NOV 2020] --Auto Roll --Status Console --Close ADS --Human Simulation --Play Multiply Game --Buy Lottery tickets --Buy 1000% Bonus --Buy RP Bonuses --NEW* AutoRoll with Low Balance paying RP --Slower in the night --Advance randomic times simulating humans --made by dany-veneno in 2018, published in 2020, extra functions added daily.

当前为 2020-11-18 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Freebitco.in - Auto Roll - Advanced - Status Concole - ALL Bonuses - no captcha - NOV 2020
// @description  AUTOROLL SCRIPT [NOV 2020] --Auto Roll --Status Console --Close ADS --Human Simulation --Play Multiply Game --Buy Lottery tickets --Buy 1000% Bonus --Buy RP Bonuses --NEW* AutoRoll with Low Balance paying RP --Slower in the night --Advance randomic times simulating humans --made by dany-veneno in 2018, published in 2020, extra functions added daily.
// @author       dany-veneno
// @icon         https://bit.ly/3bY0vU9
// @match        https://freebitco.in/*
// @grant        none
// @create       2018-05-27
// @lastmodified 2020-11-17
// @version      3.0
// @namespace    http://greasyfork.icu/users/572366
// @license      NTP
// @supportURL   https://bit.ly/3d1kW48
// @home-url     https://bit.ly/2M4BNH7
// @home-url2    https://bit.ly/2zn0b4p
// @homepageURL  http://greasyfork.icu/en/scripts/404112
// @copyright    2018-2020, dany-veneno
// @run-at       document-end

// @note         2020-11-17-V.3.0   Multiply after roll
// @note         2020-11-17-V.2.9.9 Code Revision and some errors correction
// @note         2020-11-16-V.2.9.8 Math Corrections
// @note         2020-11-16-V.2.9.7 Reset statistics function
// @note         2020-11-14-V.2.9.6 >> Code Revision, improvements and begin multiply basic logic
// @note         2020-11-11-V.2.9.4 Resolved -script not working- problem, removing jquery dependency 
// @note         2020-08-03-V.2.9.3 "Last Bonus" fix 
// @note         2020-06-09-V.2.9.2 Title, jquery cdn
// @note         2020-06-09-V.2.9.1 Bug fix lottery, buying big quantity of tickets 

// ==/UserScript==

////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////
/////////     CONFIG             ///
//////   EDIT JUST THIS SECTION   //
////////////////////////////////////

// ** BEHAVIOR ** //
var PROMO_MODE = true; //  play faster when some promo (bonus RP or 1000% is active, or not. Override nexts.
var SLOW_MODE = false; //  play always really slow, not ovevrcharghing the rolls. Override nexts.
var NIGHT_MODE = true; // play slower when it's night time

// *** Bonuses
var REWARDS = true; //decide if auto buy rewards bonuses, or not ***When true, it will activate RP promotions***
var BONUS1000 = false; //decide if to buy 1000% bonus or not. It costs 4600 RP.  *** When BONUS1000 = false and REWARDS = true, you'll increase RP. ***
var HOURS_BETWEEN_BUY_BONUS = 48; // How many hours to wait before to buy Bonuses Rewards Promo again

// *** Lottery
var LOTTERY = true; //decide if auto buy lottery tickets, or not. ***When true, It will buy lottery tickets 7% of the times ***
var LOTTERY_MAX_TICKETS = 30; // Max ticket to buy

// *** Multiply Game 
// Available just if Multiply Bonus is active, and if multiply bonus balance is higher then max bet 
// Called just after Roll, by the Roll function
var MULTIPLY = true; //decide if play Multiply games or not, It's a doubling technique. Play at your own risk. When true, it's played randomly.
var MAX_ROLLS_AT_MULTIPLY = 1000; //how many rolls in multiply.
var HOURS_BETWEEN_MULTIPLY = 24; // How many hours to wait before to play multiply
var BASE_BET = 0.00000001; // First Bet
var MAX_BET = 0.0004097; // Max Bet Before STOP
var MARTINGALE_AUTO = true; // martingale strategy with autobet config; override next
// var MARTINGALE_MANUAL = false; //martingale strategy simulating manual betting, with timeouts; override nexts;

// *** CAPTCHA ERROR *** ///
var PLAY_WITHOUT_CAPTCHA = true;
var CAPTCHA_ERROR = true;

// ** Logging
var LOGGING = 5; //0 is no messages, 5 is debug
/////////     END CONFIG         ///
/////////////////////////////////////////////////////////////////////////////////////////////////

// System Variables //
var css_reset='font-weight: reset; color:reset';
var css_bold='font-weight:bold;';
var script_output = "";
var script_output_msg_1 = "";
var script_output_msg_2 = "";
var script_output_msg_css = "";
var points=0;
var ads_closed=0; //number of ads closed, increasing
var rolling_mode="Day"; //night, day, promo, etc
var dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit', hour: 'numeric', minute: 'numeric', hour12: false });
var script_version = GM_info.script.version;
var isBonusActive = false;
var rand = 0;
var r = 0;
var d = new Date();

//  COOKIES Variables and Retrieve //
var tot_exec = parseInt (getCookie("executions"));
var tot_btc_winning_rolling = getCookie('tot_btc_winning_rolling');
var tot_lottery_winning_rolling = parseInt (getCookie('tot_lottery_winning_rolling'));
var tot_rp_winning_rolling = parseInt (getCookie('tot_rp_winning_rolling'));
var tot_lottery_tickets = getCookie('tot_lottery_tickets');
var tot_rp_spent_rewards = parseInt (getCookie('tot_rp_spent_rewards'));
var tot_rp_spent_captcha = parseInt (getCookie('tot_rp_spent_captcha'));
var tot_multiply_balance = parseInt (getCookie('tot_multiply_balance'));
var tot_multiply_games = parseInt (getCookie('tot_multiply_games'));
var executions = parseInt (getCookie('executions'));
var last_bonus = Date.parse(getCookie("last_bonus"));
var last_multiply = Date.parse(getCookie("last_multiply"));
var jackpot_distance = getCookie("jackpot_distance");
if (! (tot_btc_winning_rolling > 0)) tot_btc_winning_rolling = 0;
if (! (tot_lottery_winning_rolling > 0)) tot_lottery_winning_rolling = 0;
if (! (tot_rp_winning_rolling > 0)) tot_rp_winning_rolling = 0;
if (! (tot_lottery_tickets > 0)) tot_lottery_tickets = 0;
if (! (tot_rp_spent_rewards > 0)) tot_rp_spent_rewards = 0;
if (! (tot_rp_spent_captcha > 0)) tot_rp_spent_captcha = 0;
if (! (tot_multiply_balance > 0)) tot_multiply_balance = 0;
if (! (tot_multiply_games > 0)) tot_multiply_games = 0;
if (! (executions > 0)) executions = 0;
if (! (last_bonus > 0)) last_bonus = 0;
if (! (last_multiply > 0)) last_multiply = 0;
// END COOKIES //

(function() {
    'use strict';
    if (LOGGING > 0) console.log("%c<<<<<<<<<< Script Begin >>>>>>>>>>", 'font-weight:bold; color: green');

    // Initialize the Status Panel
    panelInit();

    // Lottery function
    // It will plan to buy few lottery tickets, more less 7% of the times
    setTimeout(function(){ lottery(); }, 3000 );   

    // Reward function and show status
    setInterval(function(){
        setTimeout(function(){ rewards(); }, 5000 );    
        setTimeout(function(){ showStatus(); }, 1000 );    
    }(), 900000);

    // Call the freeRoll
    setTimeout(function(){ Roll();   }, 8000 );

    setInterval(function(){
    // Close the reveals mode
        closePopupInterval($('.close-reveal-modal'));
        closePopupInterval($('.pushpad_deny_button'));
    }, 30000);

    //Close Ads but not always
    setTimeout(function(){
        closeRandomPopupInterval($('div.close_daily_jackpot_main_container_div'),90);
        closeRandomPopupInterval($('i.fa.fa-times-circle.close_deposit_promo_message'),40);
        closeRandomPopupInterval($('div#lambo_contest_msg a.close'),10); //lambo contest
        closeRandomPopupInterval($('div#earn_btc_msg a.close'),20);
        closeRandomPopupInterval($('div#enable_2fa_msg_alert a.close'),30);
        closeRandomPopupInterval($("[id^='hide_rp_promo']"),50);
    }, 20000)


    // Activate DOM Monitors
    // First, check all played numbers, even in multiply, and check if it's 8888. To have a measure when to play *jackpot*.
    $('#previous_roll').on('DOMSubtreeModified', function(){
    	if (LOGGING > 4) console.log("%c[Debug] DomMonitor Activating", 'color:grey');
        var rolled = $('#previous_roll').html();
        if (rolled > 0 && rolled <= 10000 && rolled != 8888){
            //if (LOGGING > 4) console.log("prevNumber rolled: "+rolled);
            jackpot_distance++;
            setCookie("jackpot_distance", jackpot_distance, 7);
            //console.log(document.cookie);
        } else if (rolled == 8888) {
            setCookie("jackpot_distance", 0, 7);
            if (LOGGING > 0) console.log("************** 8888 **************");
        }
    });

    // Call debugs functions
    $('#multiplier_fifth_digit').on('click', function(){
        showStatus();
    });
    $('#reset_all_stats').on('click', function(){
        reset_all_stats();
    });
    $('#forced_roll').on('click', function(){
        multiply();
    });
    $('#forced_status_update').on('click', function(){
        showStatus();
    });
}

)();
function panelInit () {
	if (LOGGING > 4) console.log("%c[Debug] Function panelInit begin", 'color:grey');
    // Create the Div on the page
    script_output_msg_css = "<style> #script_output {background: black; border: 2px groove #09ff00; margin-bottom: 1em;} ";
    script_output_msg_css += "#script_output .false {color: red;} #script_output .true {color: lime;} ";
    script_output_msg_css += "#script_output .script_output {color: white; font-weight:normal; font-size: 0.7em} ";
    script_output_msg_css += "#script_output_title_msg {font-size: 0.6em; color: orange; text-align: right; position:absolute; right:0; top:1em;} ";
    script_output_msg_css += "#script_output_title_msg span {line-height:1.2em;} ";
    script_output_msg_css += "a {text-decoration:none;} ";
    script_output_msg_css += "</style>";

    script_output = script_output_msg_css + '<div class="center free_play_bonus_box_large" id="script_output">';
    script_output += '<div style="position:relative; width: 100%"><p id="script_output_title" style="color: lime; font-weight:bold">AutoRoll Status v.'+script_version+'</p>';
    script_output += '<div id="script_output_title_msg">';
    script_output += '<span id="script_output_title_msg_executions" style="color:white;">Executions #<span id="script_output_title_executions_num" class="true bold">'+tot_exec+'</span></span><br>';
    script_output += '<span id="script_output_title_msg_ads_closed" style="color:white">Ads Closed: <span id="script_output_title_ads_closed_num" class="true bold">0</span></span><br>';
    script_output += '<span id="script_output_bonus_status" style="color:white">Bonus: <span id="script_output_title_bonus_wait_hours" class="true bold">Wait</span></span><br>';
	script_output += '<span id="script_output_multiply_status" style="color:white">Multiply: <span id="script_output_title_multiply_wait_hours" class="true bold">Wait Roll</span></span><br>';
    script_output += '<span style="color:white">Mode: <span id="script_output_title_msg_mode" class="true bold">Wait</span></span></br></br>';
    script_output += '<span id="script_output_title_msg_roll"></span></br></br>';
    //script_output += '<span id="reset_all_stats" style="color:darkgreen; cursor: pointer;">Reset all stats</span></br>';
    //script_output += '<span id="forced_roll" style="color:darkgreen; cursor: pointer;">Roll Exec</span></br>';
    //script_output += '<span id="forced_status_update" style="color:darkgreen; cursor: pointer;">Update Status</span></br>';

    script_output += '</div></div>';
    script_output += '<p class="script_output" id="script_output_msg_1"></p>';
    script_output += '<p class="script_output" id="script_output_msg_2"></p>';
    script_output += '<p class="script_output" id="script_output_msg_3" style="color:grey; font-size:0.6em; font-family: console; "> Donations are welcome, BTC addr: 3FwAazZDEuy3ER4NQVp4Yqo6kDxCFntwS8 - <a href="https://bit.ly/3d1kW48" target="_blank">Config HowTo</a> - <a href="http://greasyfork.icu/en/scripts/404112-freebitco-in-auto-roll-no-captcha-status-console-advanced-human-behavior-all-bonuses/feedback" target="_blank"> Rate</a> - © daniele-veneno 2018-2020</p>'; 
    script_output += '</div> ';
    $('#reward_points_bonuses_main_div').prepend(script_output);
}

function rewards() {
	if (LOGGING > 4) console.log("%c[Debug] Function rewards begin", 'color:grey');
    var bonustime = {};
    var t = missingTime();
    var _min = 20;
	var milli_between_bonuses = Math.floor(HOURS_BETWEEN_BUY_BONUS*60*60*1000);

    points = parseInt($('.user_reward_points').text().replace(',',""));

    if ($("#bonus_container_free_points").length != 0) {
        bonustime.text = $('#bonus_span_free_points').text();
        bonustime.hour = parseInt(bonustime.text.split(":")[0]);
        bonustime.min = parseInt(bonustime.text.split(":")[1]);
        bonustime.sec = parseInt(bonustime.text.split(":")[2]);
        bonustime.current = bonustime.hour * 3600 + bonustime.min * 60 + bonustime.sec;
        
        if (LOGGING > 4) console.log("%c[Debug] Active Bonus missing seconds: "+bonustime.current+" -- RP avail: "+points+" -- missingTime: "+t[0], 'color:grey');
        if (LOGGING > 3) console.log("%cPromo RP is active!", 'color: grey');
        
        if(Boolean(PROMO_MODE)) $("#script_output_title_msg_mode").text("Promo");
        $('#script_output_title_bonus_wait_hours').text('Active '+bonustime.hour+'h');
        setCookie("last_bonus", d, 7);
        isBonusActive = true;

    } else {
    	var last_bonus_diff = Math.floor(d.getTime() - last_bonus);
    	if (LOGGING > 4) console.log("%c[Debug] lastBonus diff: "+last_bonus_diff+" -- last_bonus: "+last_bonus+" -- now: "+d.getTime(), 'color:grey');
    	bonustime.current = 0;

    	// Buy Bonus if missing less then _min minutes before roll 
    	// AND has passed at least HOURS_BETWEEN_BUY_BONUS from the last one
    	// AND missing time > 0 AND REWARDS is true
        if (Boolean(REWARDS) && t[0]<=_min && t[0] > 0 && last_bonus_diff > milli_between_bonuses) {
           $('.rewards_link').not('.hide_menu').click();
            if (points < 12) {
                if (LOGGING > 2) console.log("No enough points to buy bonus. Less then 12. Waiting for points in next rolls");
            } else if (points < 120) {
                if (LOGGING > 1) console.log("buying bonus 1RP");
                setTimeout(function(){ RedeemRPProduct('free_points_1'); },random(2000,16000));
                tot_rp_spent_rewards=Math.floor(parseInt(tot_rp_spent_rewards)+12);
            } else if (points < 600) {
                if (LOGGING > 1) console.log("buying bonus 10RP");
                setTimeout(function(){ RedeemRPProduct('free_points_10'); },random(2000,16000));
                tot_rp_spent_rewards=Math.floor(parseInt(tot_rp_spent_rewards)+120);
            } else if (points < 1200) {
                if (LOGGING > 1) console.log("buying bonus 50RP");
                setTimeout(function(){ RedeemRPProduct('free_points_50'); },random(2000,16000));
                tot_rp_spent_rewards=Math.floor(parseInt(tot_rp_spent_rewards)+600);
            } else {
                if (LOGGING > 1) console.log("buying bonus 100RP");
                setTimeout(function(){ RedeemRPProduct('free_points_100');},random(2000,16000));
                tot_rp_spent_rewards=Math.floor(parseInt(tot_rp_spent_rewards)+1200);
            }

            if ($('#bonus_span_fp_bonus').length === 0)
                if (points >= 4600 && Boolean(BONUS1000) ) {
                    if (LOGGING > 1) console.log("buying bonus 1000% roll");
                    setTimeout(function(){ RedeemRPProduct('fp_bonus_1000')},random(15000,35000));
                    tot_rp_spent_rewards=Math.floor(parseInt(tot_rp_spent_rewards)+3200);
                }
            setCookie("tot_rp_spent_rewards",tot_rp_spent_rewards,7);
            //Back to the main page
            setTimeout(function(){ $('.free_play_link').not('.hide_menu').click(); }, random(35000,40000));

            // Update Status Menu
            $("#script_output_title_msg_mode").text("promo");
        } else {	
        	// Not buying RP Bonuses 
            // setting colors
            var c1 = 'red'; var c2 = 'red'

            if (t[0] < 0){
                if (LOGGING > 3) console.log('%cError getting missing time.','color:red');
                $('#script_output_title_bonus_wait_hours').text('Wait');
                $('#script_output_title_bonus_wait_hours').removeClass('true').addClass('false');
            } else if ( t[0] >= _min ) {
                if (LOGGING > 3) console.log('Not buying RPBonuses. Wait '+Math.floor(t[0]-_min)+' minutes to buy near roll');
                $('#script_output_title_bonus_wait_hours').text('Wait Roll');
            }
            if ( last_bonus_diff < milli_between_bonuses ) {
                if (LOGGING > 3) console.log('Not buying RPBonuses. Wait HOURS_BETWEEN_BUY_BONUS before buy again, missing '+Math.floor((milli_between_bonuses-last_bonus_diff)/1000/60)+' minutes');
                $('#script_output_title_bonus_wait_hours').text('Wait '+Math.floor((milli_between_bonuses-last_bonus_diff)/1000/60/60)+"h");
            } else c2 = 'green';

            if (Boolean(REWARDS)) { c1 = 'green'; }
            else {
                if (LOGGING > 3) console.log('Not buying RPBonuses. Not Active by config');
                $('#script_output_title_bonus_wait_hours').text('Disabled');
                $('#script_output_title_bonus_wait_hours').removeClass('true').addClass('false');
            }
            if (LOGGING > 3) console.log('Not buying RPBonuses: Setting Variable is: %c'+Boolean(REWARDS)+' %c -- %c and missing minutes are: %c '+t[0]+' %c(<'+_min+')', 'color:'+c1, 'color:reset; font-weight:bold', 'font-weight: reset', 'color:'+c2, 'color:reset; font-weight:bold');
        }
    }
}

function Roll() {
	if (LOGGING > 4) console.log("%c[Debug] Function Roll begin", 'color:grey');
    var h = d.getHours();
    if ($('#free_play_form_button').is(':visible') && ! $('#play_without_captchas_button').is(':visible')) {
        r=random(1,100);
        $('body').focus();
        if ( (h <= 6 || h>=22) && Boolean(NIGHT_MODE) ) { //from 22 to 7am
            if (r <= 30) rand=random(2400000,7200000);
            else rand=random(1000000,3600000);
            rolling_mode="Night";
        } else {
            if (r <= 10)        rand=random(9000,7200000); // xx%, long wait, more than hour
            else if (r <= 30)   rand=random(6000,1800000); // long but not longest
            else if (r <= 71)   rand=random(3000,1200000); // xx% cases medium
            else                rand=random(500,60000); // xx% cases fast roll
            rolling_mode="Day";
        }

        if (Boolean(SLOW_MODE)) {
            if (r <= 5)        rand=random(3000,50000);
            else if (r <= 20)   rand=random(30000,1500000);
            else if (r <= 40)   rand=random(60000,2000000);
            else                rand=random(90000,3000000);
            rolling_mode="Slow";
        }

        if (Boolean(isBonusActive) && Boolean(PROMO_MODE) ) { //If promo is active, roll faster
            if (r <= 5)        rand=random(9000,3600000);
            else if (r <= 20)   rand=random(6000,1500000);
            else if (r <= 40)   rand=random(3000,1000000);
            else                rand=random(500,240000);
            rolling_mode="Promo";
        }

        if (tot_btc_winning_rolling == 0) {
            rand=random(1000,2000);
            if (LOGGING > 2) console.log('>>>>> First Execution, fast ROLL');
        }
        $("#script_output_title_msg_mode").text(rolling_mode);
        //rand = rand(1000,2000);


        // Real ROLL Function
        rollAndRetrieve(rand);


    } else if ($('#play_without_captchas_button').is(':visible')  && Boolean(PLAY_WITHOUT_CAPTCHA)){
        //Try to play without captcha, if enough RP
        if (LOGGING > 2) console.log ("Captcha Roll");
        captchaRoll();
    } else {
        $('#script_output_title_msg_roll').html('<span class="bold">Waiting Next Roll</span>');
        //$("#script_output_title_msg_mode").text("Wait");
        if (LOGGING > 2) console.log("No roll");
    }
}

function captchaRoll() {
	if (LOGGING > 4) console.log("%c[Debug] Function captchaRoll begin", 'color:grey');
    $('#play_without_captchas_button').click();
    setTimeout(function(){
        var cost_rp = $('.play_without_captcha_description span').text();
        if (LOGGING > 2) console.log ("%cTry to play without captcha for "+cost_rp+" RP points. You have "+points+" RP.", 'color:purple;');
        if (points >= cost_rp ) {
            // ROLL anyway paying
            if (LOGGING > 2) console.log ("Roll with Captcha");
            $('#script_output_title_msg_roll').html('<span class="bold true">Captcha OK</span>');

            r=random(1,100);
            if (r <= 10)        rand=random(9000,7200000); // xx%, long wait, more than hour
            else if (r <= 30)   rand=random(6000,1800000); // long but not longest
            else if (r <= 71)   rand=random(3000,1200000); // xx% cases medium
            else                rand=random(500,60000); // xx% cases fast roll
            rolling_mode="Captcha";
            $("#script_output_title_msg_mode").text(rolling_mode);

            if (tot_btc_winning_rolling == 0) {
                rand=random(1000,2000);
                if (LOGGING > 2) console.log('>>>>> First Execution, fast ROLL');
            }
            rand = random(500,60000);
            rollAndRetrieve(rand);
            tot_rp_spent_captcha = Math.floor (parseInt(tot_rp_spent_captcha)+parseInt(cost_rp));
            setCookie("tot_rp_spent_captcha", tot_rp_spent_captcha, 7);
        } else {
            if (LOGGING > 2) console.log ("%cNot enough RP. No Roll", 'color: red');
            $('#script_output_title_msg_roll').html('<span class="bold false">Miss RP</span>'); // Status on page        
        }
    }, random(1000,3000));
}

function rollAndRetrieve (rand) {
	if (LOGGING > 4) console.log("%c[Debug] Function rollAndRetrieve begin", 'color:grey');
    var h = d.getHours();
    
    // Show hour when will roll in status panel
    d.setSeconds(d.getSeconds() + rand/1000);
    var [{ value: year },,{ value: month },,{ value: day },,{ value: hour },,{ value: minute }] = dateTimeFormat .formatToParts(d);
	$('#script_output_title_msg_roll').html('<span class="bold">Roll at <span class="false">'+hour+':'+minute+'</span></span>');
    
    if (LOGGING > 2) console.log('%c+++Will roll in '+rand/1000/60+' minutes','color:green');

    setTimeout(function(){
        //Duplicate the visibility chek to avoid error when humans roll and don't refresh.
        if ( $('#free_play_form_button').is(':visible') ){
            $('body').focus();

            //Update Status on page
            $('#script_output_title_msg_roll').html('<span class="true">++ Rolling NOW!</span>'); // Status on page
            if (LOGGING > 2) console.log('%c+++ROLL!','color:purple; font-weight: bold');
            setTimeout(function(){
                // var event= $.Event('click');
                // event.ClientX = random(20,100).toFixed(0);
                // event.ClientY = random(5,42).toFixed(0);
                // if (LOGGING > 4) console.log('[Debug][freeRoll] Clicking at position: '+event.ClientX+':'+event.ClientY);
                $('#free_play_form_button').click();
            }, 500);
            setTimeout(function(){
                var win_btc = $('#winnings').text();
                var win_lottery = $('#fp_lottery_tickets_won').text();
                var win_rp = $('#fp_reward_points_won').text();
                executions++;
                //Update Status on page
                $('#script_output_title_msg_roll').html('<span class="true">++ Rolled</span>'); // Status on page
                $('#script_output_title_executions_num').text(executions);
                setCookie('executions', executions, 7);
                if (LOGGING > 2) console.log('%cExecution number: '+executions,'font-weight:bold; color:green');
                if (LOGGING > 2) console.log('%cGot '+win_btc+' btc, '+win_lottery+' tickets and '+win_rp+' RP!','font-weight:bold; color:green');
                if (win_btc > 0) {
                    tot_btc_winning_rolling = parseFloat(parseFloat(tot_btc_winning_rolling) + parseFloat(win_btc)).toFixed(8);
                    setCookie('tot_btc_winning_rolling', tot_btc_winning_rolling, 7);
                    if (LOGGING > 2) console.log('%cBTC Won totally with script %c'+tot_btc_winning_rolling,'color: gray', 'font-weight:bold');
                } else {
                    if (LOGGING > 1) console.log(''+'%cSome error retrieving Roll Winnings. Winning btc was: '+win_btc, 'color: red');
                }
                if (win_lottery > 0) {
                    tot_lottery_winning_rolling = parseFloat(parseFloat(tot_lottery_winning_rolling) + parseFloat(win_lottery)).toFixed(0);
                    setCookie('tot_lottery_winning_rolling', tot_lottery_winning_rolling, 7);
                    if (LOGGING > 2) console.log('%cTickets Won with script %c'+tot_lottery_winning_rolling,'color: gray', 'font-weight:bold');
                } else {
                    if (LOGGING > 1) console.log(''+'%cSome error retrieving Roll Winnings. Winning lottery was: '+win_btc, 'color: red');
                }
                if (win_rp > 0) {
                    tot_rp_winning_rolling = parseFloat(parseFloat(tot_rp_winning_rolling) + parseFloat(win_rp)).toFixed(0);
                    setCookie('tot_rp_winning_rolling', tot_rp_winning_rolling, 7);
                    if (LOGGING > 2) console.log('%cRP Won with script %c'+tot_rp_winning_rolling,'color: gray', 'font-weight:bold');
                } else {
                    if (LOGGING > 1) console.log(''+'%cSome error retrieving Roll Winnings. Winning RP was: '+win_btc, 'color: red');
                }
            }, 6999);
        } else {
            if (LOGGING > 3) console.log('Already Rolled maybe by some human..');
            //Update Status on page
            $('#script_output_title_msg_roll').html('<span class="false">Already Rolled</span>'); // Status on page
            setTimeout(function(){ location.reload(); }, 30000);
        }
    },rand);

    //Random Action After ROLL
    var rand1=rand+random(10000,600000);
    rand=random(0,1000);
    if (rand < 100) {
        if (LOGGING > 2) console.log('[Debug][freeRoll] Reload page after roll in '+rand1/1000/60+' minutes!');
        setTimeout(function(){ location.reload(); }, rand1);
    } else if (rand > 300 && Boolean(MULTIPLY) && h>=5) {
        if (LOGGING > 0) console.log('Will multiply in '+rand1/1000/60+' minutes!');
        setTimeout(function(){ multiply(); }, rand1);
    } else {
        if (LOGGING > 2) console.log('No action after roll. Rand was '+rand);
    }
}

function lottery () {
    //Plan buying lottery ticket
    if(Boolean(LOTTERY)){
    	if (LOGGING > 4) console.log("%c[Debug] Function lottery begin", 'color:yellow');
        var r = random(1,100);
        var d = new Date();
        var h = d.getHours();
        var balance = parseInt($('#balance').text().split(".")[1]);
        var randl = random(1,LOTTERY_MAX_TICKETS).toFixed(0); //Tickets to buy
        if (r > 93 && h >= 5 && balance > randl) {
            if (LOGGING > 2) console.log("%cBuy "+ randl + " lottery tickets in some time....", 'color:yellow');
        	setTimeout(function(){
                $('#lottery_tickets_purchase_count').val(randl);
                setTimeout(function(){
					$('#purchase_lottery_tickets_button').click();
                    if (LOGGING > 2) console.log("%cBought "+ randl + " lottery tickets", 'color:yellow');
					tot_lottery_tickets = Math.floor(parseInt(tot_lottery_tickets) + parseInt(randl));
					setCookie('tot_lottery_tickets',tot_lottery_tickets,7);
                }, random(2000,4000));
            }, random(40000,120000));
        }
    }
}

function missingTime () {
    var min = 0; var sec = 0; var str = "";
    str = $('title').text().split(" ")[0];
    if (LOGGING > 4) console.log("%c[Debug] [missingTime] string: "+str, 'color: grey');
    if (str.length <= 7 && str.length >= 3) {
        min = str.split(':')[0]; if (min.length > 0) min = min.replace('m','');
        sec = str.split(':')[1]; if (sec.length > 0) sec = sec.replace('s','');
    } else { min = -1; sec = -1; }

    return [min,sec];
}

function random(min,max){
   return min + (max - min) * Math.random();
}

function closePopupInterval (target) {
	//if (LOGGING > 4) console.log("%c[Debug] Function closePopupInterval begin", 'color:grey');
    if (target.is(':visible')) {
        setTimeout(function(){
            if (LOGGING > 3) console.log("%cClose ADS", 'color: grey');
            target.click();
            ads_closed ++;
            $('#script_output_title_ads_closed_num').text(ads_closed);
        }, random (500,120000));
    } else {
        //if (LOGGING > 4) console.log("%cNot visible: "+target.attr('id')+" "+target.attr('class'), 'color: grey');
    }
}
function closeRandomPopupInterval (target, randomness) {
	//if (LOGGING > 4) console.log("%c[Debug] Function closeRandomPopupInterval begin", 'color:grey');
    var rand = random(1,100);
    if (rand < randomness && target.is(':visible')) {
        setTimeout(function(){
            if (LOGGING > 3) console.log("%cClose Random ADS", 'color: grey');
            target.click();
            ads_closed ++;
            $('#script_output_title_ads_closed_num').text(ads_closed);
        }, random (500,120000));
    } else {
        //if (LOGGING > 4) console.log("%cNot visible: "+target.attr('id')+" "+target.attr('class'), 'color: grey');
    }
}
function showStatus(){
	if (LOGGING > 4) console.log("%c[Debug] Function showStatus begin", 'color:grey');
    var t=missingTime();
    var date = new Date();

    var [{ value: month },,{ value: day },,{ value: year },,{ value: hour },,{ value: minute }] = dateTimeFormat .formatToParts(date );

    var ca='red'; var cb='red'; var cc='red'; var css='font-weight: bold; color:';
    var c1='purple'; var c2='olive';
    var c3='brown'; var c4='teal';
    if (LOGGING > 0) console.log(">>>>>>>>>>%c Status:%c ["+hour+":"+minute+"]", css_bold+'color:'+c1, css_bold);
    //Rewards and multiply infos and colors
    if (Boolean(REWARDS)) ca = 'green'; if (Boolean(MULTIPLY)) cb='green'; if (Boolean(LOTTERY)) cc='green';
    var cssa='font-weight: bold; color:'+ca;
    var cssb='font-weight: bold; color:'+cb;
    var cssc='font-weight: bold; color:'+cc;
    if (LOGGING > 0) console.log(">>>>>>>>>> Buying Rewards: "+"%c"+Boolean(REWARDS)+""+"%c; Playing Multiply: "+"%c"+Boolean(MULTIPLY)+""+"%c; Buying Lottery: "+"%c"+Boolean(LOTTERY), cssa, css_reset,cssb, css_reset, cssc);
    if (t[0] > 0 || t[1] > 0) {
        if (LOGGING > 0) console.log(">>>>>>>>>> Missing "+"%c"+t[0]+" min "+t[1]+" sec"+"%c for next roll",css_bold+"color:"+c1,css_reset);
    }

    if (LOGGING > 0) console.log(">>>>>>>>>> BTC won with script: "+"%c"+tot_btc_winning_rolling, css_bold+'color:'+c4);
    if (LOGGING > 0) console.log(">>>>>>>>>> Tickets won with script: "+"%c"+tot_lottery_winning_rolling, css_bold+'color:'+c4);
    if (LOGGING > 0) console.log(">>>>>>>>>> RP won with script: "+"%c"+tot_rp_winning_rolling, css_bold+'color:'+c4);
    if (LOGGING > 0) console.log(">>>>>>>>>> Rolls from last 8888: "+"%c"+jackpot_distance, css_bold+'color:'+c2);

    // Update Status Message OnPage
    script_output_msg_1 =  "<span class='bold'>Config: </span>";
    script_output_msg_1 += "<span class='"+Boolean(REWARDS)+"'>REWARDS </span> <> ";
	script_output_msg_1 += "<span class='"+Boolean(BONUS1000)+"'>BONUS1000</span> <> ";
    script_output_msg_1 += "<span class='"+Boolean(MULTIPLY)+"'>MULTIPLY</span> <> ";
    script_output_msg_1 += "<span class='"+Boolean(LOTTERY)+"'>LOTTERY</span>";
    $('#script_output_msg_1').html(script_output_msg_1);

    script_output_msg_2 = "<span class='bold'> Script Winnings:  </span> ";
    script_output_msg_2 += "<span class='true'>"+tot_btc_winning_rolling+"</span> btc; ";
    script_output_msg_2 += "<span class='true'>"+tot_lottery_winning_rolling+"</span> tickets; ";
    script_output_msg_2 += "<span class='true'>"+tot_rp_winning_rolling+"</span> RP.";
	script_output_msg_2 += "</br>";
	script_output_msg_2 += "<span class='bold'> Script Purchased: </span>";
	script_output_msg_2 += "<span class='true'>"+tot_lottery_tickets+"</span> lottery tickets; ";
	script_output_msg_2 += "<span class='true'>"+tot_rp_spent_rewards+"</span> RP in bonus; ";
	script_output_msg_2 += "<span class='true'>"+tot_rp_spent_captcha+"</span> RP in captcha. ";
	script_output_msg_2 += "</br>";
	script_output_msg_2 += "<span class='bold'> Script Multiply Balance: </span>";
	script_output_msg_2 += "<span class='true'>"+tot_multiply_balance+"</span> btc in ";
	script_output_msg_2 += "<span class='true'>"+tot_multiply_games+"</span> games played ";
    $('#script_output_msg_2').html(script_output_msg_2);

}

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function reset_all_stats(){
    if (LOGGING > 2) console.log("%c Resettnig all stats deleting all cookies", 'color:red');
    setCookie("jackpot_distance",0,7); setCookie("executions",0,7); setCookie('tot_btc_winning_rolling',0,7); setCookie('tot_lottery_winning_rolling',0,7);
    setCookie('tot_rp_winning_rolling',0,7); setCookie('tot_lottery_tickets',0,7); setCookie('tot_rp_spent_rewards',0,7); setCookie('tot_rp_spent_captcha',0,7);
    setCookie('tot_multiply_balance',0,7); setCookie('tot_multiply_games',0,7); setCookie('executions',0,7); setCookie("last_bonus",0,7);
    setCookie("last_multiply",0,7);
    location.reload();
}

// Multiply, called after the free roll, sometimes.
function multiply() {
	if (LOGGING > 4) console.log("%c[Debug] Function multiply begin", 'color:grey');

	var t = missingTime();
    var _min = 10;
	var milli_between_multiplies = Math.floor(HOURS_BETWEEN_MULTIPLY*60*60*1000);
    var balance = parseInt($('#balance').text().split(".")[1]);
    var bonus_mul = false;
    var last_multiply_diff = Math.floor(d.getTime() - last_multiply);

    if (LOGGING > 4) console.log("%c[Debug] lastMultiply diff: "+last_multiply_diff+" -- last_multiply: "+last_multiply+" -- now: "+d.getTime(), 'color:grey');

    if ($("#bonus_account_table").length != 0) {
        var bonus_mul_balance = $('#bonus_account_balance').text().split(" ")[0];
        var bonus_mul_wager_remaining = $('#bonus_account_wager').text().split(" ")[0];
		if (LOGGING > 2) console.log('bonus balance: '+bonus_mul_balance+'; wager remaining: '+bonus_mul_wager_remaining);
        bonus_mul = true;
    } else bonus_mul = false;
    
    if ( Boolean(bonus_mul) && bonus_mul_balance > MAX_BET && Boolean(MULTIPLY) && t[0]>_min && last_multiply_diff > milli_between_multiplies ) {
		$('.double_your_btc_link').not('.hide_menu').click();
        // Autobet at "martingale"
        if (Boolean(MARTINGALE_AUTO)) {
	        setTimeout(function(){ 
                $('#auto_bet_on').click();
                $('#autobet_base_bet').val(BASE_BET);  
                $('#autobet_max_bet').val(MAX_BET);
                $('#autobet_roll_count').val(MAX_ROLLS_AT_MULTIPLY);
                $('#autobet_bet_hi').prop('checked', true); 
                $('#autobet_bet_alternate').prop('checked', false);
            }, random(2200,5000));
	        setTimeout(function(){ 
                $('#show_double_your_btc_auto_bet_on_lose').click();
                $('#autobet_lose_increase_bet').prop('checked', true); 
                $('#autobet_lose_return_to_base').prop('checked', false);
                $('#autobet_max_bet_stop').prop('checked', true); 
                $('#autobet_max_bet_reset').prop('checked', false);
                $('#autobet_lose_increase_bet_percent').val('100');
                $('#autobet_dnr').prop('checked', true);  
            }, random(6000,11000));
	        setTimeout(function(){ $('#start_autobet').click(); }, random(17100,30000));
            $('#script_output_title_multiply_wait_hours').text('Completed');
			setCookie("last_multiply", d, 7);
		} else if (Boolean(MARTINGALE_MANUAL)) {

		}
    } else {
    	if (t[0] < 0){
            if (LOGGING > 3) console.log('%cError getting missing time.','color:red');
            $('#script_output_title_multiply_wait_hours').text('Wait Roll');
            $('#script_output_title_multiply_wait_hours').removeClass('true').addClass('false');
        } else if ( t[0] <= _min ) {
            if (LOGGING > 3) console.log('Not playing multiply. Wait to play far from next roll');
            $('#script_output_title_multiply_wait_hours').text('Wait '+_min+'m');
        }
    	if ( last_multiply_diff < milli_between_multiplies ) {
            if (LOGGING > 3) console.log('Not playing multiply. Wait HOURS_BETWEEN_MULTIPLY before play again, missing '+Math.floor((milli_between_multiplies - last_multiply_diff)/1000/60)+' minutes');
            $('#script_output_title_multiply_wait_hours').text('Wait '+Math.floor((milli_between_multiplies - last_multiply_diff)/1000/60/60)+"h");
        } 
        if (!Boolean(MULTIPLY)) {
            if (LOGGING > 3) console.log('Not playing multiply. Disabled by config');
            $('#script_output_title_multiply_wait_hours').text('Disabled');
            $('#script_output_title_multiply_wait_hours').removeClass('true').addClass('false');
        }
    }
    //setTimeout(function(){ $('.free_play_link').not('.hide_menu').click(); }, random(900000,1200000));
}