DofusPlanet Quest Progress Saving

Save progress for DofusPlanet without account.

  1. // ==UserScript==
  2. // @name DofusPlanet Quest Progress Saving
  3. // @namespace https://github.com/blackstar0169/dofusplanet-quest-saving
  4. // @version 1.1
  5. // @description Save progress for DofusPlanet without account.
  6. // @author blackstar0169
  7. // @match https://dofusplanet.com/quetes/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=dofusplanet.com
  9. // @license GNU GPLv3
  10. // @grant GM.setValue
  11. // @grant GM.getValue
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. // Retrieve checkboxes
  18. const checkboxeSelector = 'input[type="checkbox"][name^="quete"]';
  19. const checkboxes = document.querySelectorAll(checkboxeSelector);
  20. const scriptID = 'DPQPS_5ece4797eaf5e';
  21.  
  22. console.log('['+scriptID+'] Init DofusPlanet Quest Progress Saving');
  23.  
  24. function parseDatas(datas) {
  25. const defaultDatas = {
  26. quests: {}
  27. };
  28. if (typeof datas === 'string' && datas.charAt(0) === '{') {
  29. try {
  30. datas = JSON.parse(datas);
  31. datas = Object.assign(defaultDatas, datas);
  32. } catch (e) {
  33. datas = defaultDatas;
  34. }
  35. } else {
  36. datas = defaultDatas;
  37. }
  38. return datas;
  39. }
  40.  
  41. function updateCheckboxes(datas) {
  42. // console.log('['+scriptID+'] updateCheckboxes');
  43. // console.log(datas);
  44. for (var i=0; i<checkboxes.length; i++) {
  45. var checked = false;
  46. const questId = checkboxes[i].name.replace('quete', '');
  47.  
  48. for (var id in datas.quests) {
  49. if (datas.quests.hasOwnProperty(id) && id == questId) {
  50. checked = datas.quests[id];
  51. break;
  52. }
  53. }
  54.  
  55. checkboxes[i].checked = checked;
  56. }
  57. }
  58.  
  59. // Retrieve datas and update checkboxes
  60. setInterval(function () {
  61. GM.getValue(scriptID).then(function (datas) {
  62. updateCheckboxes(parseDatas(datas));
  63. });
  64. }, 3000);
  65.  
  66. // Listen any modifications
  67. for (var i=0; i<checkboxes.length; i++) {
  68. checkboxes[i].addEventListener('change', function (e) {
  69. const questId = e.target.name.replace('quete', '');
  70. // console.log(e);
  71. //console.log('['+scriptID+'] Change '+questId);
  72. // Save modifications
  73. GM.getValue(scriptID).then(function (datas) {
  74. datas = parseDatas(datas);
  75. datas.quests[questId] = e.target.checked;
  76. GM.setValue(scriptID, JSON.stringify(datas));
  77. });
  78. });
  79. }
  80.  
  81.  
  82. })();