Instantly share code, notes, and snippets.
Last active
November 30, 2020 23:09
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save Thunraz/f40f7d0261af640728831ad960886117 to your computer and use it in GitHub Desktop.
Cookie Clicker auto click & auto buy & save to Gist
This file contains 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 Cookie clicker | |
// @namespace https://gist.github.com/Thunraz/f40f7d0261af640728831ad960886117/edit | |
// @version 1.3.1 | |
// @description Auto click, auto buy for Cookie Clicker | |
// @author Thunraz <thunraz@thunraz.com> | |
// @match http://orteil.dashnet.org/cookieclicker/ | |
// @match http://orteil.dashnet.org/cookieclicker/beta/ | |
// @grant https://api.github.com/* | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
let storageName = 'cookieClickerGistData'; | |
let gistData = loadLocalStorage(storageName); | |
let goldenOnly = false; | |
let game = document.getElementById('game'); | |
let cbContainer = document.createElement('div'); | |
cbContainer.style.position = 'absolute'; | |
cbContainer.style.left = '10px'; | |
cbContainer.style.top = '10px'; | |
cbContainer.style.zIndex = 1000; | |
let cbAutoClick = document.createElement('input'); | |
cbAutoClick.id = 'cbAutoClick'; | |
cbAutoClick.type = 'checkbox'; | |
cbAutoClick.addEventListener('change', clickCookies); | |
cbContainer.appendChild(cbAutoClick); | |
let lblAutoClick = document.createElement('label'); | |
lblAutoClick.htmlFor = 'cbAutoClick'; | |
lblAutoClick.innerText = 'Auto click'; | |
cbContainer.appendChild(lblAutoClick); | |
let br = document.createElement('br'); | |
cbContainer.appendChild(br); | |
let cbGoldenOnly = document.createElement('input'); | |
cbGoldenOnly.id = 'cbGoldenOnly'; | |
cbGoldenOnly.type = 'checkbox'; | |
cbContainer.appendChild(cbGoldenOnly); | |
let lblGoldenOnly = document.createElement('label'); | |
lblGoldenOnly.htmlFor = 'cbGoldenOnly'; | |
lblGoldenOnly.innerText = 'Golden only'; | |
cbContainer.appendChild(lblGoldenOnly); | |
br = document.createElement('br'); | |
cbContainer.appendChild(br); | |
let cbAutoBuy = document.createElement('input'); | |
cbAutoBuy.id = 'cbAutoBuy'; | |
cbAutoBuy.type = 'checkbox'; | |
cbAutoBuy.addEventListener('change', autoBuy); | |
cbContainer.appendChild(cbAutoBuy); | |
let lblAutoBuy = document.createElement('label'); | |
lblAutoBuy.htmlFor = 'cbAutoBuy'; | |
lblAutoBuy.innerText = 'Auto buy'; | |
cbContainer.appendChild(lblAutoBuy); | |
br = document.createElement('br'); | |
cbContainer.appendChild(br); | |
let cbAutoResearch = document.createElement('input'); | |
cbAutoResearch.id = 'cbAutoResearch'; | |
cbAutoResearch.type = 'checkbox'; | |
cbAutoResearch.addEventListener('change', autoResearch); | |
cbContainer.appendChild(cbAutoResearch); | |
let lblAutoResearch = document.createElement('label'); | |
lblAutoResearch.htmlFor = 'cbAutoResearch'; | |
lblAutoResearch.innerText = 'Auto research'; | |
cbContainer.appendChild(lblAutoResearch); | |
let btnContainer = document.createElement('div'); | |
btnContainer.style.marginTop = '8em'; | |
cbContainer.appendChild(btnContainer); | |
let bLoadGist = document.createElement('button'); | |
bLoadGist.id = 'bLoadGist'; | |
bLoadGist.innerText = 'Load Gist'; | |
bLoadGist.addEventListener('click', loadGist); | |
btnContainer.appendChild(bLoadGist); | |
br = document.createElement('br'); | |
btnContainer.appendChild(br); | |
let bSaveGist = document.createElement('button'); | |
bSaveGist.id = 'bSaveGist'; | |
bSaveGist.innerText = 'Save Gist'; | |
bSaveGist.addEventListener('click', saveGist); | |
if(gistData !== null && gistData.gistId !== null) { | |
btnContainer.appendChild(bSaveGist); | |
} | |
game.appendChild(cbContainer); | |
function clickCookies() { | |
if(cbAutoClick.checked) { | |
document.querySelectorAll('.shimmer').forEach((shimmer) => { | |
shimmer.click(); | |
}); | |
if(!cbGoldenOnly.checked) { | |
document.getElementById('bigCookie').click(); | |
document.getElementById('bigCookie').click(); | |
document.getElementById('bigCookie').click(); | |
} | |
} | |
} | |
function autoBuy() { | |
if(cbAutoBuy.checked) { | |
let upgrades = document.querySelectorAll('#upgrades > .upgrade.enabled'); | |
let products = document.querySelectorAll('#products > .product.enabled'); | |
let numerals = { | |
'' : 1, | |
'million' : 10e6, | |
'billion' : 10e9, | |
'trillion' : 10e12, | |
'quadrillion' : 10e15, | |
'quintillion' : 10e18, | |
'sextillion' : 10e21, | |
'septillion' : 10e24, | |
'octillion' : 10e27, | |
'nonillion' : 10e30, | |
'decillion' : 10e33, | |
'undecillion' : 10e36, | |
'duodecillion' : 10e39, | |
'tredecillion' : 10e42, | |
'quattuordecillion': 10e45, | |
'quindecillion' : 10e48 | |
}; | |
// Prefer upgrades over products | |
if(upgrades[0]) { | |
upgrades[0].click(); | |
} else if(products[0]) { | |
let cheapest = { elem: null, price: Infinity }; | |
for(let i = 0; i < products.length; i++) { | |
let price = 0.0; | |
let priceText = products[i].querySelector('span.price').innerText; | |
let priceArray = priceText.split(' '); | |
if(priceArray.length == 1) { | |
price = parseFloat(priceArray[0], 10); | |
} else if(priceArray.length == 2) { | |
price = parseFloat(priceArray[0], 10) * numerals[priceArray[1]]; | |
} | |
if(price <= cheapest.price) { | |
cheapest.elem = products[i]; | |
cheapest.price = price; | |
} | |
} | |
if(cheapest.elem !== null) { | |
console.log('Buying ' + cheapest.elem.querySelector('div.title').innerText); | |
cheapest.elem.click(); | |
} | |
} | |
} | |
} | |
function autoResearch() { | |
if(cbAutoResearch.checked) { | |
let techUpgrades = document.querySelectorAll('#techUpgrades > .upgrade.enabled'); | |
let promptVisible = document.querySelector('#promptAnchor').style.display === 'block'; | |
let promptYesBtn = document.querySelector('#prompt.framed #promptOption0'); | |
if(techUpgrades[0]) { | |
techUpgrades[0].click(); | |
} | |
if(promptVisible) { | |
promptYesBtn.click(); | |
} | |
} | |
} | |
function loadLocalStorage(storageName) { | |
let storage = localStorage.getItem(storageName); | |
if(storage === null) { | |
let gistId = prompt('Please enter your Gist ID:'); | |
let accessToken = prompt('Please enter your Personal Access Token:'); | |
if(gistId === null || accessToken === null) return; | |
saveLocalStorage(storageName, { gistId: gistId, accessToken: accessToken, fileName: null }); | |
storage = localStorage.getItem(storageName); | |
} | |
return JSON.parse(storage); | |
} | |
function saveLocalStorage(storageName, data) { | |
localStorage.setItem(storageName, JSON.stringify(data)); | |
} | |
function loadGist() { | |
let req = new XMLHttpRequest(); | |
req.addEventListener('load', (evt) => { | |
let gist = JSON.parse(req.responseText); | |
let saveData; | |
for(let file in gist.files) { | |
gistData.fileName = file; | |
saveLocalStorage(storageName, gistData); | |
saveData = gist.files[file].content; | |
break; | |
} | |
Game.ImportSave(); | |
document.getElementById('textareaPrompt').value = saveData; | |
document.getElementById('promptOption0').click(); | |
}); | |
req.open("GET", 'https://api.github.com/gists/' + gistData.gistId); | |
req.setRequestHeader('Authorization', 'token ' + gistData.accessToken); | |
req.send(); | |
} | |
function saveGist() { | |
if(gistData === null || gistData.gistId === null) { | |
return; | |
} | |
Game.ExportSave(); | |
let saveData = document.getElementById('textareaPrompt').value; | |
document.getElementById('promptOption0').click(); | |
if(saveData === null) { | |
return; | |
} | |
let req = new XMLHttpRequest(); | |
req.open("PATCH", 'https://api.github.com/gists/' + gistData.gistId); | |
req.setRequestHeader('Authorization', 'token ' + gistData.accessToken); | |
req.addEventListener('load', (evt) => { | |
console.log('Gist saved'); | |
var d = new Date(); | |
var hr = d.getHours(); | |
var min = d.getMinutes(); | |
if (hr < 10) hr = '0' + hr; | |
if (min < 10) min = '0' + min; | |
bSaveGist.innerText = 'Save Gist (' + hr + ':' + min + ')'; | |
}); | |
let sendData = { | |
description: 'Cookie Clicker savegame', | |
files: {} | |
}; | |
sendData.files[gistData.fileName] = { content: saveData }; | |
req.send(JSON.stringify(sendData)); | |
} | |
setInterval(() => { clickCookies(); autoBuy(); autoResearch(); }, 10); | |
// Update gist every 30 minutes | |
setInterval(() => { saveGist(); }, 30 * 60 * 1000); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Mi4wMzF8fDE2MDY3NzcyMDcwNDM7MTYwNjc3NzIwNzA1NjsxNjA2Nzc3MzEzMDgyO0dsb3Jpb3VzIFNwcm9ja2V0O2JzYXFufDExMTExMTAxMTAwMTAwMTAwMTAxMHw5Ljk5OTQ3Mjg1Nzk5OTg4ZSsxMTU7MWUrMTE2OzQ7MDs0OzA7MDswOzA7MDswOzA7MDswOzA7MDswOzA7MDswOzA7MDs7MDswOzA7MDswOzA7MDstMTstMTstMTstMTstMTswOzA7MDswOzUwOzA7MDswOzA7MTYwNjc3NzIzNjkwMjswOzA7OzQxOzA7MDsxMDEyNDQwNjkxMzUxNjEwMDt8MTAwMCwxMDAwLDYyMzMsMCwsMCwxMDAwOzEwMDAsMTAwMCw1OTgxMCwwLCwwLDEwMDA7MTAwMCwxMDAwLDQ1OTM4NiwwLCwwLDEwMDA7MTAwMCwxMDAwLDI1ODU0NjksMCwsMCwxMDAwOzEwMDAsMTAwMCwxMzYxOTY2NiwwLCwwLDEwMDA7MTAwMCwxMDAwLDcwMDQ2NjY2LDAsLDAsMTAwMDsxMDAwLDEwMDAsMzY4ODg4MDAwLDAsLDAsMTAwMDsxMDAwLDEwMDAsMTk1ODE0NjY2NiwwLCwwLDEwMDA7MTAwMCwxMDAwLDEwODE4NTk5OTk5LDAsLDAsMTAwMDsxMDAwLDEwMDAsNjI0NjQwMDAwMDAsMCwsMCwxMDAwOzEwMDAsMTAwMCwzNjQyOTk5OTk5OTksMCwsMCwxMDAwOzEwMDAsMTAwMCwyMDg4NjY2NjY2NjY2LDAsLDAsMTAwMDsxMDAwLDEwMDAsMTI1NTAyNjY2NjY2NjYsMCwsMCwxMDAwOzEwMDAsMTAwMCw3NTI0NTMzMzMzMzMzMiwwLCwwLDEwMDA7MTAwMCwxMDAwLDQ4NDg5MDAwMDAwMDAwMCwwLCwwLDEwMDA7MTAwMCwxMDAwLDI5MzQ1MDAwMDAwMDAwMDAsMCwsMCwxMDAwOzE1MDAsMTUwMCwyNDQyNzMzMzMzMzMzMzMzNiwwLCwwLDE1MDA7MTAwMCwxMDAwLDg1MzIzOTk5OTk5OTk5OTcwLDAsLDAsMTAwMDt8MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAxMDAwMDAwMDAwMDAxMDEwMTAwMDEwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAwMDAwMDAwMDAwMDAxMDEwMTAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAwMDAwMDAwMDEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMTAxMDAwMDAwMDAwMTAxMDEwMTAxMDEwMDAwMDAwMTAwMDEwMTAxMDEwMTAxMDAwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAxMDEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDAwMDAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAxMDEwMTAwMDAwMDAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAxMDEwMTAxMDAwMDAxMDEwfDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDExMDAwMDEwMDAwMTAwMDExMTAxMTExMTAwMDAwMTEwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMDEwMTAxMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMDAwMDAwMTAwMDEwMTAxMTExMTExMTExMTEwMDAwMDAwMDAwMDEwMDAwMDExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTAwMDAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDExMTEwMDAwMDAwMDAwMDAwMDExMTExMTAwMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDAxMTExMTExMTExMTAwMDAwMDAxMTEwMDAwMDAwMDAwMDAxMDAwMTExMDExMTExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMTAwMTAwMDExMTB8fA%3D%3D%21END%21