Skip to content

Instantly share code, notes, and snippets.

@valex
Last active June 16, 2023 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valex/22cf8dadc0a9c7d99e28bcdf8bae3457 to your computer and use it in GitHub Desktop.
Save valex/22cf8dadc0a9c7d99e28bcdf8bae3457 to your computer and use it in GitHub Desktop.
Script for freebitco.in that tracks and presents statistics on rolls in the Multiply BTC game, displaying them in a convenient table format.
// ==UserScript==
// @name freebitco.in Multiply BTC Roll Counter
// @namespace https://gist.github.com/valex/22cf8dadc0a9c7d99e28bcdf8bae3457
// @version 0.1
// @description Script for freebitco.in that tracks and presents statistics on rolls in the Multiply BTC game, displaying them in a convenient table format.
// @author valex
// @match https://freebitco.in/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=freebitco.in
// @grant none
// @run-at document-end
// ==/UserScript==
// ================================================
//
// If you like this script
// please register using link: https://freebitco.in/?r=41688905
//
// Or please donate BTC: bc1qu9nv6m3fhp9c5e7j7cf4hazumfyvupnda2vrwn
//
// ================================================
// ============ INSTALLATION ======================
//
// 1. Use Tampermonkey extension to run script
// Chrome: https://chrome.google.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo
// Firefox: https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/
// Opera: https://addons.opera.com/en/extensions/details/tampermonkey-beta/
// Tampermonkey home page: https://www.tampermonkey.net/
//
// 2. In Tampermonkey dashboard click '+' sign to add new script
// 3. Copy and paste into tampermonkey the entire contents of this file
// 4. Save script (Ctrl + S)
// 5. Open freebitco.in in new tab or refresh page
//
// Tampermonkey FAQ page: https://www.tampermonkey.net/faq.php
//
//
// Script is starting after page reload
(function() {
'use strict';
console.log("Status: Multiply BTC Roll Counter Script loaded");
let numRolls = 0;
let numRollsTd = document.createElement('td');
const stat = {
4: {
'hi': 7625,
'lo': 2375,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td'),
},
8: {
'hi': 8813,
'lo': 1188,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td'),
},
19: {
'hi': 9500,
'lo': 500,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
34: {
'hi': 9721,
'lo': 279,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
64: {
'hi': 9852,
'lo': 148,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
128: {
'hi': 9926,
'lo': 74,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
256: {
'hi': 9963,
'lo': 37,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
512: {
'hi': 9981,
'lo': 19,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
4750: {
'hi': 9998,
'lo': 2,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
},
8888: {
'hi': 0,
'lo': 0,
'miss_hi': 0,
'miss_lo': 0,
'miss_hi_td': document.createElement('td'),
'miss_lo_td': document.createElement('td')
}
};
let div = document.createElement('div');
div.style.cssText = 'position:fixed;top:50px;left:0;background-color:white;';
let table = document.createElement('table');
let rollsTr = tableRollsRow();
let headerTr = tableHeaderRow();
table.appendChild(rollsTr);
table.appendChild(headerTr);
for (let betLabel in stat) {
let tr = document.createElement('tr');
let tdLabel = document.createElement('td');
tdLabel.innerHTML = '<span>'+ betLabel +'</span>';
let tdHi = stat[betLabel]['miss_hi_td'];
let tdLo = stat[betLabel]['miss_lo_td'];
tr.appendChild(tdLabel);
tr.appendChild(tdHi);
tr.appendChild(tdLo);
table.appendChild(tr);
}
div.appendChild(table);
document.documentElement.appendChild(div);
function redraw() {
numRollsTd.innerHTML = ''+numRolls+'';
for (let betLabel in stat) {
stat[betLabel]['miss_hi_td'].innerHTML = ''+stat[betLabel]['miss_hi']+'';
stat[betLabel]['miss_lo_td'].innerHTML = ''+stat[betLabel]['miss_lo']+'';
}
}
let table_rows = document.getElementById('bet_history_table_rows');
let rolls = [];
// create an observer instance
let observer = new MutationObserver(function(mutationsList) {
let roll;
for (let mutation of mutationsList) {
for (let addedNode of mutation.addedNodes) {
if(addedNode.className == 'multiply_bet_history_table_row'){
roll = parseInt(addedNode.firstChild.childNodes[3].textContent);
if (isNaN(roll)) {
console.error('roll is Not a number');
continue;
}
if (roll >= 0 && roll <= 10000) {
numRolls++;
// console.log(roll);
for (let betLabel in stat) {
if(betLabel==8888){
if(roll == 8888){
stat[betLabel]['miss_hi'] = 0;
stat[betLabel]['miss_lo'] = 0;
}else{
stat[betLabel]['miss_hi'] = stat[betLabel]['miss_hi'] + 1;
stat[betLabel]['miss_lo'] = stat[betLabel]['miss_lo'] + 1;
}
continue;
}
if(roll > stat[betLabel]['hi']){
stat[betLabel]['miss_hi'] = 0;
}else{
stat[betLabel]['miss_hi'] = stat[betLabel]['miss_hi'] + 1;
}
if(roll < stat[betLabel]['lo']){
stat[betLabel]['miss_lo'] = 0;
}else{
stat[betLabel]['miss_lo'] = stat[betLabel]['miss_lo'] + 1;
}
}
}else{
console.error('roll is Not in valid range');
}
}
}
}
redraw();
});
// configuration of the observer:
let config = {
childList: true,
// subtree: true
};
// pass in the target node, as well as the observer options
observer.observe(table_rows, config);
// later, you can stop observing
//observer.disconnect();
function tableRollsRow(){
let fragment = document.createDocumentFragment();
let tr = document.createElement('tr');
let td = document.createElement('td');
let bold = document.createElement('strong');
let rollsLabel = document.createTextNode('Rolls');
bold.appendChild(rollsLabel);
td.appendChild(bold);
tr.appendChild(td);
tr.appendChild(td.cloneNode());
tr.appendChild(numRollsTd);
fragment.appendChild(tr);
return fragment;
}
function tableHeaderRow(){
let fragment = document.createDocumentFragment();
let tr = document.createElement('tr');
let label1 = document.createTextNode('Odds');
let label2 = document.createTextNode('HI');
let label3 = document.createTextNode('LO');
let bLabel1 = document.createElement('strong');
bLabel1.appendChild(label1);
let bLabel2 = document.createElement('strong');
bLabel2.appendChild(label2);
let bLabel3 = document.createElement('strong');
bLabel3.appendChild(label3);
let td1 = document.createElement('td');
td1.appendChild(bLabel1);
let td2 = document.createElement('td');
td2.appendChild(bLabel2);
let td3 = document.createElement('td');
td3.appendChild(bLabel3);
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
fragment.appendChild(tr);
return fragment;
}
})();
// ================================================
//
// If you like this script
// please register using link: https://freebitco.in/?r=41688905
//
// Or please donate BTC: bc1qu9nv6m3fhp9c5e7j7cf4hazumfyvupnda2vrwn
//
// ================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment