"non-cheat" quantum computing bot (makes decisions based on chip opacity, without accessing game's internal variables)
Add "toggle" button to quantum computing
"non-cheat" quantum computing bot (makes decisions based on chip opacity, without accessing game's internal variables)
Add "toggle" button to quantum computing
var qChipBot = function(chipcount, negative_default, no_adjust_neg, proc_interval, no_adjust_ival) { | |
negative_default = negative_default || -180; | |
var AUTOqDefaultInterval = proc_interval || 100; | |
var AUTOqCurrentInterval = AUTOqDefaultInterval; | |
var AUTOqMaxInterval = 2000; | |
var AUTOqCompBtn = document.querySelector('#btnQcompute'); | |
var AUTOqComp = ()=>AUTOqCompBtn.click(); | |
var AUTOqChipCount = chipcount; | |
var AUTOqOpsNegativeDefault = negative_default; | |
var AUTOqOpsNegativeMin = -250; | |
var AUTOqOpsNegativeMax = -100; | |
var AUTOqChips = [].concat.apply([], document.querySelectorAll('.qChip')).slice(0, chipcount); | |
var AUTOqChipOpacities = ()=>AUTOqChips.map(chip=>chip.style.opacity); | |
var AUTOqOpsExpected = ()=>AUTOqChipOpacities().map(op=>op>0?op*360:AUTOqOpsNegativeDefault).reduce((x,y)=>x+y); | |
var AUTOqCompDisplay = document.querySelector('#qCompDisplay'); | |
var AUTOqCompLastVal = ()=>parseInt(AUTOqCompDisplay.innerText.split(': ')[1].replace(',', '')); | |
var AUTOqChipProc = function() { | |
let expected = AUTOqOpsExpected(); | |
if (expected > 0) { | |
AUTOqComp(); | |
let actual = AUTOqCompLastVal(); | |
if (!no_adjust_neg) { | |
let negative_cnt = AUTOqChipOpacities().filter(op=>op<0).length; | |
new_neg = Math.floor((actual < 0) | |
? Math.max( | |
AUTOqOpsNegativeDefault + actual / negative_cnt, | |
AUTOqOpsNegativeMin | |
) : Math.min( | |
AUTOqOpsNegativeDefault + actual / negative_cnt, | |
AUTOqOpsNegativeMax | |
) | |
); | |
if (new_neg != AUTOqOpsNegativeDefault) { | |
AUTOqOpsNegativeDefault = new_neg; | |
console.log(`Anjusted neg default: ${AUTOqOpsNegativeDefault} | |
expected: ${expected}, got: ${actual} | |
negative_cnt: ${negative_cnt} | |
adjustment: ${Math.floor(actual / negative_cnt)}`); | |
} | |
} | |
if (!no_adjust_ival) { | |
let new_ival = Math.floor((actual > 0) | |
? Math.max( | |
AUTOqCurrentInterval*0.75, | |
AUTOqDefaultInterval | |
) : Math.min( | |
AUTOqCurrentInterval/0.75, | |
AUTOqMaxInterval | |
)); | |
if (new_ival != AUTOqCurrentInterval) { | |
AUTOqCurrentInterval = new_ival; | |
console.log(`Anjusted ival: ${AUTOqCurrentInterval}`); | |
AUTOqChipSetInterval(); | |
} | |
} | |
} | |
} | |
var AUTOqChipInterval = -1; | |
var AUTOqChipSetInterval = function() { | |
clearInterval(AUTOqChipInterval); | |
AUTOqChipInterval = setInterval(AUTOqChipProc, AUTOqCurrentInterval); | |
} | |
var AUTOqChipStart = function() { | |
AUTOqCurrentInterval = AUTOqDefaultInterval; | |
AUTOqChipSetInterval(); | |
} | |
var AUTOqChipStop = ()=>clearInterval(AUTOqChipInterval); | |
return { | |
step: AUTOqChipProc, | |
start: AUTOqChipStart, | |
stop: AUTOqChipStop, | |
}; | |
} |
(function(){ | |
const INTERVAL = 0; | |
let ival = null; | |
let qCompStart = function() { | |
ival = setInterval(qComp, INTERVAL); | |
} | |
let qCompStop = function() { | |
clearInterval(ival); | |
ival = null; | |
} | |
let qCompToggle = ()=>(((ival)?qCompStop:qCompStart)()); | |
let qtogglebtn = document.createElement('button'); | |
qtogglebtn.setAttribute('class', 'button2'); | |
qtogglebtn.id = 'btnQToggle'; | |
qtogglebtn.onclick = qCompToggle; | |
qtogglebtn.innerText = 'Toggle'; | |
let qholder = document.querySelector('#qComputing'); | |
let qCompDisplayEl = qholder.querySelector('#qCompDisplay'); | |
qholder.insertBefore(qtogglebtn, qCompDisplayEl); | |
})() |