CookieMonsterTeam / CookieMonsterFramework

A collection of functions for the Cookie Monster Mod Family
MIT License
1 stars 5 forks source link

Cookie Monster Overriding Settings for other Mods (Easy Fix!) #19

Closed bennett-zhang closed 1 year ago

bennett-zhang commented 1 year ago

Describe the bug Cookie Monster is overriding the settings of CCSE mods.

To Reproduce The steps needed to reproduce the behavior:

  1. Import the save file specified below. Note how the milk is currently Cosmic Milk.
  2. Open the console.
  3. Load CCSE: Game.LoadMod("https://klattmose.github.io/CookieClicker/CCSE.js");
  4. Note how the milk has now been reset to the default milk (in this case, Peach Milk). This is because CCSE has a separate property that controls the milk.
  5. Use the milk selector to change the milk back to Cosmic Milk.
  6. Save. (Ctrl+S) and reload the page.
  7. Load CCSE again: Game.LoadMod("https://klattmose.github.io/CookieClicker/CCSE.js");
  8. This time, because we saved previously, the milk should remain as Cosmic Milk.
  9. Now load Cookie Monster: Game.LoadMod('https://cookiemonsterteam.github.io/CookieMonster/dist/CookieMonster.js');
  10. Because of a bug, Cookie Monster will reset all of CCSE's settings.
  11. Reload without saving.
  12. Load CCSE one final time: Game.LoadMod("https://klattmose.github.io/CookieClicker/CCSE.js");
  13. Milk is now reset to default. The expected behavior is for the milk to stay as Cosmic Milk.

Solution to Fix the Bug In saveFramework.js, there is a bug with the regular expression. On line 15, you are doing a greedy replacement. The regular expression is searching for modName and the final semicolon in the entire save file. What you want instead is a lazy search for the next semicolon.

The save file looks something like this:

cookieMonsterFramework:{\"settings\":{},\"headers\":{\"infoMenu\":1,\"optionsMenu\":1},\"favouriteSettings\":[]};CCSE:{\"version\":\"2.035\",\"Achievements\":{},\"Upgrades\":{},\"Buildings\":{},\"Buffs\":{},\"Seasons\":{},\"OtherMods\":{},\"vault\":[],\"permanentUpgrades\":[-1,-1,-1,-1,-1],\"chimeType\":\"No sound\",\"milkType\":\"Cosmic milk\",\"bgType\":\"Automatic\",\"showVersionNo\":1};

Note how it contains the data for both cookieMonsterFramework and CCSE. The regular expression is incorrectly selecting the entire string, including the settings for CCSE.

The fix is simple: change the regular expression from ${modName}.*(;|$) to ${modName}.*?(;|$). The extra question mark will perform a lazy search of the string and end at the first semicolon it encounters.

Save file

Mi4wNTJ8fDE2ODcyOTMxNDI4Mzc7MTY4NDk5NDk4OTk4NTsxNjg3NTk3ODQ3NTc5O1Bhbm9yYW1pYyBMaXphcmQ7eGhqemk7MywwLDEsMCw2LDMyLDE0fDExMDExMTAxMTAwMTAxMTAwMTExMDExMDAwMXwzLjIzNDE3OTQ2NzIwMTA5ODRlKzY5OzMuOTY3Njg2MzA4OTIxMTY2ZSs2OTsxNTUwMzsxNjcwOzMuOTY3MzAyOTI1OTM2MTM2ZSs2OTsxMDI7MjM7MTI7Ni45OTQxNzUxNDMzMjg5NjJlKzcyOzM7MTswOzA7LTE7MTA5Ozk0OzIuNjM5MzUzNzg2Mjg3Mzg5NGUrNjQ7NDQxOzE0OzE5Oy0xOzU7OzcuNDk1MzE2ODc1NzUxMDQ4ZSs2NDsxMjsxOTEyNDAwNDM3OTEzMDU4MDAwMDA7MTkxMTY1MTA1NjQ2MjQxMTUwMDAwOzc0OTM4MTQ1MDY0NjQ3NjAwOzA7MDs4NTg7ODM5Ozg2Mjs3Njc7Njk5OzI3OzE4OzIwOzI7NzU7MDswOzI0OzkwOzE2ODc1Mjk1NDc5MzM7MDswOzEyOSwyMjc7NDE7MTsxOzIuMjExNDQ0ODMwNjMyNjc0ZSs1OTs1MDsyMDAwOzEwMDA7fDEwNTksMTk0NiwxLjU5NzkyNDc1ODI4MjAzNGUrNjQsNCwsMCwxMDU5OzEwNTUsMTYwNSwyLjA2NDczODcyNjE4OTM2NjhlKzY0LDAsLDAsMTA1NTsxMDExLDI0MDgsMi44NzkxNDUwMTI1MzI4ODA0ZSs2Miw5LDE2ODc1OTc5MDcyNzI6NDoxNjg3NTg1NDE0ODAxOjA6MTMyOjE1MzE6MTo0OjE2ODcyOTMxNDI4NDI6IDExMTExMTEwMTExMTExMTExMDExMTAwMTExMTExMTAxMDAgMDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjg6NjQ6MjM6NDc6MDowOjIyOjE6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MTg6MTI6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6MDowOjA6LDAsMTAxMTs5OTYsMjQzOCw2LjcwNDE4MjE3NTMzODk4OWUrNjIsMCwsMSw5OTY7OTc2LDIzNjIsNC42NzcyOTYwNzI3NDQzNDJlKzYxLDAsLDEsOTc2Ozk1OCwyMjkzLDUuNTQxMTkxOTY4MzQyMTA4ZSs2MCwxLDI6MTA2OjE6LTI1MTkwLjgxMDMxMjYyOTgyMzoxOiA0NTc0OjU6MTU6NDYyOjA6MDowOjAhMzI5MjoyOjEwMzo3NzowOjA6MDowITgxMDA6NTozMjc6OTI6MTA1MToxOjA6NzAxITc1MTg6MjoxMDA6MTg2OjA6MDowOjAhMTUwNjk6MjozNzI6MTg6MDowOjA6MCE1MzcwOjA6LTExMTozNzc6MDowOjA6MCExMjkyNDo1OjM2MToxNzQ6MDowOjA6Mzk0MCExMDE2NDo1OjU1OjQ2ODowOjA6MDo0NTg1ITI0OTc6MjotMjU2OjM1Mzo5NTM6MTowOjU4NzMhODcyMDo1Oi01OTo4MzowOjA6MDo2ODM3ITE1MzEyOjU6NTY6MjY2OjA6MDowOjY4MDEhMTI2Nzg6NToxNjoyMTk6MDowOjA6MCExNDAwMTo1OjYzOjQ0ODowOjA6MDowITEwNTA2OjU6OTE6NDU0Ojg1MzoxOjA6NjMxNCExMTExMzozOjUwNTozNzg6ODIzOjE6MDoxMDM1NyE5MDQ4OjE6LTM5NToxMTc6MDowOjA6MCExODk1ODo1OjE2NToyMjY6MDowOjA6MCExOTg3MToyOjIyMTozMDA6MDowOjA6MCEgMSwwLDk1ODs5NDIsMTMyMiw1LjMwMTI3MzA2NDM3MTE5OWUrNjIsMSw4LzAvNyAzIDE2ODc1Nzc1MzEwNzggMSwwLDk0Mjs5MTksMjE4OSwyLjA3NDI2NDQ3MjY2MDY2OTdlKzYwLDMsMTI2IDE0NSAxMzg5IDEsMCw5MTk7OTAwLDIxMjYsMy41NDgxMTY5MDk5ODk1Njk0ZSs1OSwwLCwwLDkwMDs4ODAsMjA4NywxLjA4MTkyMDcyNzI1MjkxNzZlKzYwLDAsLDAsODgwOzg3OCwyMDgzLDEuNDM1MDU2NjE4ODY5MDU3MWUrNjIsMCwsMCw4Nzg7ODQ1LDExOTUsNC43MjgzMjEzNTg4MzQ1MTVlKzYyLDAsLDAsODQ1OzgyNiwxOTc5LDkuNzAwMzAzNjk3NzM0NDQ1ZSs2MSwwLCwwLDgyNjs4MDksMTk0NSwzLjA5NTA2NjQzNDcyNTQxMzdlKzYyLDAsLDAsODA5Ozc5MSwxMTQxLDEuMzUzNjUzMzEyNTEwMjA2OGUrNjMsMCwsMCw3OTE7Nzc4LDExMjgsOC41NDA0Mzg5MTU1MjExNjllKzYzLDAsLDAsNzc4Ozc0OCwxMDk4LDQuNzA4MTQ3ODI4NTc4OTIzNWUrNjQsMCwsMCw3NDg7Njk4LDEwNDksMi44NDM1NjE3OTI4NjY3MzQ3ZSs2MywwLCwwLDY5ODs2NzAsMTAyMCwxLjE0MjQ5NDI5Mzc3OTY5OThlKzY0LDAsLDAsNjcwOzYzNywxMDExLDYuNDIzMTczNTM5MjY3ODdlKzY0LDAsLDAsNjM3O3wxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTAwMTExMTExMDAxMDExMTEwMDExMTExMTAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDEwMTAwMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEwMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExfDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEwMTExMTExMTExMTAwMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDExMTAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEwMDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTF8fENvb2tpZU1vbnN0ZXI6eyJzZXR0aW5ncyI6eyJDUFNNb2RlIjowLCJBdmdDUFNIaXN0IjozLCJBdmdDbGlja3NIaXN0IjowLCJDYWxjV3JpbmsiOjAsIlNjYWxlIjowLCJTY2FsZURlY2ltYWxzIjoyLCJTY2FsZVNlcGFyYXRvciI6MCwiU2NhbGVDdXRvZmYiOiI5OTk5OTkiLCJUaW1lRm9ybWF0IjowLCJEZXRhaWxlZFRpbWUiOjEsIlBQRGlzcGxheVRpbWUiOjEsIkJ1aWxkQ29sb3VyIjoxLCJQUE9ubHlDb25zaWRlckJ1eWFibGUiOjAsIlBQRXhjbHVkZVRvcCI6MCwiUFBSaWdpZGVsTW9kZSI6MCwiUFBTZWNvbmRzTG93ZXJMaW1pdCI6MCwiQ29sb3VyQmx1ZSI6IiM0YmI4ZjAiLCJDb2xvdXJHcmVlbiI6IiMwMGZmMDAiLCJDb2xvdXJZZWxsb3ciOiIjZmZmZjAwIiwiQ29sb3VyT3JhbmdlIjoiI2ZmN2YwMCIsIkNvbG91clJlZCI6IiNmZjAwMDAiLCJDb2xvdXJQdXJwbGUiOiIjZmYwMGZmIiwiQ29sb3VyR3JheSI6IiNiM2IzYjMiLCJDb2xvdXJQaW5rIjoiI2ZmMTQ5MyIsIkNvbG91ckJyb3duIjoiIzhiNDUxMyIsIkJvdEJhciI6MCwiVGltZXJCYXIiOjEsIlRpbWVyQmFyUG9zIjowLCJUaW1lckJhck92ZXJsYXkiOjIsIkF1dG9zYXZlVGltZXJCYXIiOjEsIlVwQmFyQ29sb3VyIjoxLCJVcGdyYWRlQmFyRml4ZWRQb3MiOjEsIlNvcnRCdWlsZGluZ3MiOjAsIlNvcnRVcGdyYWRlcyI6MCwiVXBncmFkZXNOZXZlckNvbGxhcHNlIjowLCJEcmFnb25BdXJhSW5mbyI6MSwiR3JpbW9pcmVCYXIiOjEsIkdDVGltZXIiOjEsIkZhdmljb24iOjEsIldyaW5rbGVyQnV0dG9ucyI6MSwiSGlkZVNlY3Rpb25zQnV0dG9ucyI6MCwiVG9vbHRpcEJ1aWxkVXBncmFkZSI6MSwiVG9vbHRpcEFtb3IiOjEsIlRvb2xXYXJuTHVja3kiOjEsIlRvb2xXYXJuTHVja3lGcmVuenkiOjEsIlRvb2xXYXJuQ29uanVyZSI6MSwiVG9vbFdhcm5Db25qdXJlRnJlbnp5IjoxLCJUb29sV2FybkVkaWZpY2UiOjEsIlRvb2xXYXJuVXNlciI6MCwiVG9vbFdhcm5Cb24iOjEsIlRvb2xXYXJuUG9zIjowLCJUb29sdGlwR3JpbSI6MSwiVG9vbHRpcFdyaW5rIjoxLCJUb29sdGlwTHVtcCI6MSwiVG9vbHRpcFBsb3RzIjoxLCJUb29sdGlwUGFudGhlb24iOjEsIlRvb2x0aXBBc2NlbmRCdXR0b24iOjEsIlN0YXRzIjoxLCJNaXNzaW5nVXBncmFkZXMiOjEsIk1pc3NpbmdBY2hpZXZlbWVudHMiOjEsIlVwU3RhdHMiOjEsIkhlYXZlbmx5Q2hpcHNUYXJnZXQiOiIxIiwiU2hvd01pc3NlZEdDIjoxLCJUaXRsZSI6MSwiR2VuZXJhbFNvdW5kIjoxLCJHQ05vdGlmaWNhdGlvbiI6MCwiR0NGbGFzaCI6MSwiQ29sb3VyR0NGbGFzaCI6IiNmZmZmZmYiLCJHQ1NvdW5kIjowLCJHQ1ZvbHVtZSI6MjUsIkdDU291bmRVUkwiOiJodHRwczovL2ZyZWVzb3VuZC5vcmcvZGF0YS9wcmV2aWV3cy82Ni82NjcxN185MzE2NTUtbHEubXAzIiwiRm9ydHVuZU5vdGlmaWNhdGlvbiI6MCwiRm9ydHVuZUZsYXNoIjoxLCJDb2xvdXJGb3J0dW5lRmxhc2giOiIjZmZmZmZmIiwiRm9ydHVuZVNvdW5kIjoxLCJGb3J0dW5lVm9sdW1lIjo1MCwiRm9ydHVuZVNvdW5kVVJMIjoiaHR0cHM6Ly9mcmVlc291bmQub3JnL2RhdGEvcHJldmlld3MvMTc0LzE3NDAyN18zMjQyNDk0LWxxLm1wMyIsIlNlYU5vdGlmaWNhdGlvbiI6MCwiU2VhRmxhc2giOjEsIkNvbG91clNlYUZsYXNoIjoiI2ZmZmZmZiIsIlNlYVNvdW5kIjoxLCJTZWFWb2x1bWUiOjEwLCJTZWFTb3VuZFVSTCI6Imh0dHBzOi8vd3d3LmZyZWVzb3VuZC5vcmcvZGF0YS9wcmV2aWV3cy8xMjEvMTIxMDk5XzIxOTMyNjYtbHEubXAzIiwiR2FyZEZsYXNoIjowLCJDb2xvdXJHYXJkRmxhc2giOiIjZmZmZmZmIiwiR2FyZFNvdW5kIjoxLCJHYXJkVm9sdW1lIjoxNSwiR2FyZFNvdW5kVVJMIjoiaHR0cHM6Ly9mcmVlc291bmQub3JnL2RhdGEvcHJldmlld3MvMTAzLzEwMzA0Nl84NjE3MTQtbHEubXAzIiwiTWFnaWNOb3RpZmljYXRpb24iOjAsIk1hZ2ljRmxhc2giOjEsIkNvbG91ck1hZ2ljRmxhc2giOiIjZmZmZmZmIiwiTWFnaWNTb3VuZCI6MSwiTWFnaWNWb2x1bWUiOjUwLCJNYWdpY1NvdW5kVVJMIjoiaHR0cHM6Ly9mcmVlc291bmQub3JnL2RhdGEvcHJldmlld3MvMjIxLzIyMTY4M18xMDE1MjQwLWxxLm1wMyIsIldyaW5rbGVyTm90aWZpY2F0aW9uIjowLCJXcmlua2xlckZsYXNoIjowLCJDb2xvdXJXcmlua2xlckZsYXNoIjoiI2ZmZmZmZiIsIldyaW5rbGVyU291bmQiOjEsIldyaW5rbGVyVm9sdW1lIjoxNSwiV3JpbmtsZXJTb3VuZFVSTCI6Imh0dHBzOi8vZnJlZXNvdW5kLm9yZy9kYXRhL3ByZXZpZXdzLzEyNC8xMjQxODZfODA0My1scS5tcDMiLCJXcmlua2xlck1heE5vdGlmaWNhdGlvbiI6MCwiV3JpbmtsZXJNYXhGbGFzaCI6MSwiQ29sb3VyV3JpbmtsZXJNYXhGbGFzaCI6IiNmZmZmZmYiLCJXcmlua2xlck1heFNvdW5kIjoxLCJXcmlua2xlck1heFZvbHVtZSI6MTUsIldyaW5rbGVyTWF4U291bmRVUkwiOiJodHRwczovL2ZyZWVzb3VuZC5vcmcvZGF0YS9wcmV2aWV3cy8xNTIvMTUyNzQzXzE1NjYzLWxxLm1wMyIsIkJ1bGtCdXlCbG9jayI6MSwiRmF2b3VyaXRlU2V0dGluZ3MiOjF9LCJoZWFkZXJzIjp7IkZhdm91cml0ZSI6MSwiQ2FsY3VsYXRpb24iOjEsIk5vdGF0aW9uIjoxLCJDb2xvdXJzIjoxLCJCYXJzRGlzcGxheSI6MSwiVG9vbHRpcCI6MSwiU3RhdGlzdGljcyI6MSwiTm90aWZpY2F0aW9uIjoxLCJOb3RpZmljYXRpb25HZW5lcmFsIjoxLCJOb3RpZmljYXRpb25HQyI6MSwiTm90aWZpY2F0aW9uRkMiOjEsIk5vdGlmaWNhdGlvblNlYSI6MSwiTm90aWZpY2F0aW9uR2FyZCI6MSwiTm90aWZpY2F0aW9uTWFnaSI6MSwiTm90aWZpY2F0aW9uV3JpbmsiOjEsIk5vdGlmaWNhdGlvbldyaW5rTWF4IjoxLCJNaXNjZWxsYW5lb3VzIjoxLCJMdWNreSI6MSwiQ2hhaW4iOjEsIlNwZWxscyI6MSwiR2FyZGVuIjoxLCJQcmVzdGlnZSI6MSwiV3JpbmsiOjEsIlNlYSI6MSwiQWNoaWV2cyI6MSwiTWlzYyI6MSwiaW5mb01lbnUiOjEsIm9wdGlvbnNNZW51IjoxfSwiZmF2b3VyaXRlU2V0dGluZ3MiOlsiUFBPbmx5Q29uc2lkZXJCdXlhYmxlIiwiUFBSaWdpZGVsTW9kZSIsIlNvcnRCdWlsZGluZ3MiXSwidmVyc2lvbiI6IjIuMDUyLjEwIiwibG9ja2VkTWluaWdhbWVzIjpbXX07Y29va2llTW9uc3RlckZyYW1ld29yazp7InNldHRpbmdzIjp7fSwiaGVhZGVycyI6eyJpbmZvTWVudSI6MSwib3B0aW9uc01lbnUiOjF9LCJmYXZvdXJpdGVTZXR0aW5ncyI6W119Ow%3D%3D%21END%21

Browser Chrome

DanielNoord commented 1 year ago

Thanks for the detailed write-up. Do you want to provide a fix in a pull request?

bennett-zhang commented 1 year ago

Sure! Please see #20 for my pull request. Thank you so much!

DanielNoord commented 1 year ago

New version should be published. We only need to update the version in CookieClicker so we can release this.