Last active
May 25, 2016 20:18
-
-
Save larvata/6357237 to your computer and use it in GitHub Desktop.
auto script for btc-dice
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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?">":"<"; | |
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