Skip to content

Instantly share code, notes, and snippets.

@larvata
Last active May 25, 2016 20:18
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 larvata/6357237 to your computer and use it in GitHub Desktop.
Save larvata/6357237 to your computer and use it in GitHub Desktop.
auto script for btc-dice
// ==UserScript==
// @name BTC-DICE
// @namespace http://use.i.E.your.homepage/
// @version 0.1
// @description enter something useful
// @match http://www.btc-dice.com/*
// @copyright 2012+, You
// ==/UserScript==
///////// CONST /////////
//var betRate=0.25;
var maxRiskTimes=25;
var riskTimes=16;
var resetTimes=12;
/////// DO NOT EDIT BELOW ///////
var lossesContinuesTimes,winContinuesTimes;
var currentBet;
var startBalance;
var lastBalance;
var currentBalance;
var rollTimer,initTimer;
var startBtn,stopBtn,txtThresholdBalance,minBtn,maxBtn,spanCurrentBet;
// 0:game started, 2:clicked, 1:rolled, 2:result
var currentStep;
var justDiceMinBet=0.00000000;
var resultsOut=new Array();
///////// functions ////////
function hasClass(element, cls) {
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function minMyBet(){
console.log("minMyBet: "+prettyFloat(justDiceMinBet));
txtThresholdBalance.value=prettyFloat(calcBalance(justDiceMinBet,riskTimes));
showBetValue();
}
function maxMyBet(){
console.log("maxMyBet: "+prettyFloat(currentBalance))
txtThresholdBalance.value=prettyFloat(currentBalance);
showBetValue();
}
function showBetValue(){
var thbl=txtThresholdBalance.value;
if (isNumber(thbl)) {
currentBet=calcBet(thbl,riskTimes);
if (currentBet<justDiceMinBet) {
startBtn.disabled=true;
spanCurrentBet.innerText=" thresholdBalance MUST >= "+prettyFloat(justDiceMinBet);
}
else{
startBtn.disabled=false;
spanCurrentBet.innerText=prettyFloat(currentBet);
}
}
else{
currentBet=0;
spanCurrentBet.innerText=thbl + ' is not a VAILD value.';
}
}
function calcBet(balance,riskTimes){
var riskCount=1;
for (var i = 1; i <= riskTimes; i++) {
riskCount+=Math.pow(2,i);
};
console.log("balance/riskCount:"+balance/riskCount);
return balance/riskCount;
}
function calcBalance(bet,riskTimes){
var riskCount=1;
for (var i = 1; i <= riskTimes; i++) {
riskCount+=Math.pow(2,i);
};
console.log("bet/riskCount:"+bet/riskCount);
return bet*riskCount;
}
function prettyFloat(value){
var dashPos=value.toString().indexOf('-');
if (value<1&&dashPos!=-1) {
var fixedLength=parseInt(value.toString().substr(dashPos+1));
if (fixedLength>8) {fixedLength=8};
return value.toFixed(fixedLength);
}
else{
return value;
}
}
function balanceProtect(){
if (lossesContinuesTimes>(maxRiskTimes-1)) {
stopGame();
}
}
function roll(){
// GAME STARTED
if (currentStep==0) {
// if((startBalance-currentBalance)>threshold){
// stopGame();
// }
document.getElementById('pct_bet').value=prettyFloat(currentBet);
currentStep=1;
console.log(" set currentStep=1");
setTimeout(" document.getElementById('a_lo').click() " , 1200 );
//document.getElementById('a_lo').click();
}
// CLICKED
if (currentStep==1) {
if(hasClass(document.getElementById('a_lo'),'waiting')){
currentStep=2;
console.log(" set currentStep=2");
}
}
// ROLLED
if (currentStep==2) {
if(!hasClass(document.getElementById('a_lo'),'waiting')){
currentStep=3;
console.log(" set currentStep=3");
}
}
// RESULT
if (currentStep==3) {
currentBalance=document.getElementById('pct_balance').value;
if (currentBalance>lastBalance) {
winContinuesTimes+=1;
lossesContinuesTimes=0;
currentBet=calcBet(currentBalance,riskTimes);
console.log("win");
resultLog('win');
}
else if (currentBalance<lastBalance) {
lossesContinuesTimes+=1;
winContinuesTimes=0;
if (lossesContinuesTimes==resetTimes) {
currentBet=calcBet(currentBalance,riskTimes);
console.log("resetbet. currentBet: "+ currentBet);
}
else{
currentBet*=1;
}
console.log("losses");
resultLog('losses');
}
else{
// currentBalance==lastBalance
// game is draw because of betValue==0
}
refreshResultStatus();
balanceProtect();
lastBalance=currentBalance;
currentStep=0;
console.log("set currentStep=0");
}
}
function startGame(){
console.log("Game Started.")
stopBtn.disabled=false;
rollTimer=window.setInterval(roll,50);
}
function stopGame(){
console.log("maxRiskTimes stop game.");
window.clearInterval(rollTimer);
stopBtn.style.display='none';
startBtn.style.display='none';
}
function resultLog(resultStr){
console.log(resultStr+'. CurrentBet: '+ prettyFloat(currentBet));
}
function overrideDiceJs(){
results_to_keep=500;
add_result=function(r,me,all){
var result="";
var other=r.high?r.lucky<r.chance*1e4:r.lucky>=(100-r.chance)*1e4;
var win=r.win?other?"win gold":"win":other?"lose":"lose imp";
var mine=me?"me ":"";
var tmp="tmp"+r.betid;
var compare=r.high?"&gt;":"&lt;";
var target=r.high?(100-r.chance)*1e4-1:r.chance*1e4;
result+='<div class="result '+win+" "+mine+'">';
result+=invisible("user");
result+='<div class="who">';
result+=quote_html(r.name);
result+="</div>";
result+=invisible("date");
result+='<div class="when">';
result+=moment(r.date.toString(),"X").format("YYYY-MM-DD HH:mm:ss");
result+="</div>";
result+=invisible("betid");
result+='<div class="betid">';
result+='<a class="'+tmp+'" href="/roll/'+r.betid+'">'+r.betid+"</a>";
result+="</div>";
result+=invisible("lucky");
result+='<div class="lucky">';
result+=format_percentage(r.lucky);
result+="</div>";
result+=invisible("target");
result+='<div class="chance">';
result+=compare+format_percentage(target);
result+="</div>";
result+=invisible("bet");
result+='<div class="bet">';
result+=add_zeroes(r.bet);
result+="</div>";
result+=invisible("payout");
result+='<div class="payout">';
result+=r.payout+"x";
result+="</div>";
result+=invisible("profit");
result+='<div class="profit"><span class="s1">';
result+=add_zeroes(r.this_profit);
result+="</span></div></div>";
if(all!==false)add_result_row(".results#all",result,r.betid,tmp);
if(me){
add_result_row(".results#me",result,r.betid,tmp);
// new added save result for output also
resultsOut.push(r.betid+","+to_percentage(r.lucky)+","+document.getElementById("wins").innerText.replace(",","")+","+document.getElementById("losses").innerText.replace(",",""));
//console.log(resultsOut);
// refresh
document.getElementsByClassName("header")[0].children[0].href="data:application/csv;charset=utf-8,"+encodeURIComponent(resultsOut.join('\r\n'));
}
$("."+tmp).removeClass(tmp)
}
}
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
function refreshResultStatus(){
var win=parseInt(document.getElementById("wins").innerText.replace(",",""));
var losses=parseInt(document.getElementById("losses").innerText.replace(",",""));
var frightStatus=win-losses;
if (frightStatus>0) {
frightStatus="+"+frightStatus
}
document.getElementById("frightStatus").innerText=frightStatus;
}
function to_percentage(p){
p=p.toFixed(0);
p="00000"+p;
p=p.substring(p.length-6);
var p1=p.substring(0,2);
var p2=p.substring(2,4);
var p3=p.substring(4,6);
return p1+'.'+p2+''+p3;
}
window.onbeforeunload =function(){
$(".header a")[0].click();
}
function init(){
// Test is just-dice fully loaded
if (isNumber(document.getElementById('pct_balance').value)){
window.clearInterval(initTimer);
console.log('fully loaded'+document.getElementById('pct_balance').value);
}
else{
console.log('not fully loaded return');
return;
}
// Init Variables
startBalance=document.getElementById('pct_balance').value;
currentBalance=document.getElementById('pct_balance').value;
lastBalance=document.getElementById('pct_balance').value;
currentStep=0;
// Start BUTTON
startBtn=document.createElement('BUTTON');
var textStartBtn=document.createTextNode('Start!');
startBtn.disabled=true;
startBtn.appendChild(textStartBtn);
document.getElementById('msg').parentNode.appendChild(startBtn);
startBtn.addEventListener('click',startGame,false);
// Stop BUTTON
stopBtn=document.createElement('BUTTON');
var textStopBtn=document.createTextNode('Stop...');
stopBtn.disabled=true;
stopBtn.appendChild(textStopBtn);
document.getElementById('msg').parentNode.appendChild(stopBtn);
stopBtn.addEventListener('click',stopGame,false);
// Threshold INPUT BOX
txtThresholdBalance=document.createElement('INPUT');
txtThresholdBalance.type='text';
txtThresholdBalance.width='50px';
txtThresholdBalance.onkeypress=showBetValue;
document.getElementById('msg').parentNode.appendChild(txtThresholdBalance);
// Min BUTTON
minBtn=document.createElement('BUTTON');
var textMinBtn=document.createTextNode('Min');
minBtn.appendChild(textMinBtn);
document.getElementById('msg').parentNode.appendChild(minBtn);
minBtn.addEventListener('click',minMyBet,false);
// Max BUTTON
maxBtn=document.createElement('BUTTON');
var textMaxBtn=document.createTextNode('Max');
maxBtn.appendChild(textMaxBtn);
document.getElementById('msg').parentNode.appendChild(maxBtn);
maxBtn.addEventListener('click',maxMyBet,false);
// CurrentBet SPAN
spanCurrentBet=document.createElement('SPAN');
spanCurrentBet.text="abc";
document.getElementById('msg').parentNode.appendChild(spanCurrentBet);
// FrightStatus
var frightStatusHtml='<div class="fright mp"><span id="frightStatus">+0</span></div><output></output>';
frightStatusHtml+=document.getElementsByClassName("fright stats")[0].innerHTML;
document.getElementsByClassName("fright stats")[0].innerHTML=frightStatusHtml;
document.getElementsByClassName("tabs")[0].parentNode.style.width="590px";
// Output button
document.getElementsByClassName("header")[0].children[0].setAttribute("download","export.csv");
// Override dice.js
overrideDiceJs();
// Reset ContinuesTimes
lossesContinuesTimes=0;
winContinuesTimes=0;
// Default set min bet
minBtn.click();
if (getParameterByName("autostart")=="1") {
console.log("set autostart");
document.cookie="autostart=1";
}
else if(getParameterByName("autostart")=="0"){
console.log("remove autostart");
document.cookie="autostart=0"
}
if (document.cookie.replace(/(?:(?:^|.*;\s*)autostart\s*\=\s*([^;]*).*$)|^.*$/,"$1")=="1") {
console.log("autostart!");
startBtn.click();
};
}
//////////////// start from here ///////////////////
initTimer=window.setInterval(init,100);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment