Melvor Idle - Mastery Enhancements

Adds mastery pool progress bars to skills in the menu

  1. // ==UserScript==
  2. // @name Melvor Idle - Mastery Enhancements
  3. // @description Adds mastery pool progress bars to skills in the menu
  4. // @version 1.5
  5. // @namespace Visua
  6. // @match https://*.melvoridle.com/*
  7. // @exclude https://wiki.melvoridle.com*
  8. // @noframes
  9. // @grant none
  10. // ==/UserScript==
  11. /* jshint esversion: 6 */
  12.  
  13. // Code by Acrone#1563, Aurora Aquir#4272, Breindahl#2660, NotCorgan#1234 and Visua#9999
  14.  
  15. ((main) => {
  16. var script = document.createElement('script');
  17. script.textContent = `try { (${main})(); } catch (e) { console.log(e); }`;
  18. document.body.appendChild(script).parentNode.removeChild(script);
  19. })(() => {
  20. 'use strict';
  21.  
  22. function addProgressBars() {
  23. const MAX_XP = 13034432;
  24. const maxedSkills = [];
  25. setInterval(() => {
  26. for (const [skillId, mastery] of Object.entries(MASTERY)) {
  27. const poolPercentage = (mastery.pool / getMasteryPoolTotalXP(skillId)) * 100;
  28. if ($(`#skill-nav-mastery-${skillId} .progress-bar`)[0]) {
  29. $(`#skill-nav-mastery-${skillId} .progress-bar`)[0].style.width = (poolPercentage) + '%';
  30. const tip = $(`#skill-nav-mastery-${skillId}`)[0]._tippy;
  31. tip.setContent(poolPercentage.toFixed(2) + '%');
  32. } else {
  33. const skillItem = $(`#skill-nav-name-${skillId}`)[0].parentNode;
  34. skillItem.style.flexWrap = 'wrap';
  35. skillItem.style.setProperty('padding-top', '.25rem', 'important');
  36. const progress = document.createElement('div');
  37. const progressBar = document.createElement('div');
  38. progress.id = `skill-nav-mastery-${skillId}`;
  39. progress.className = 'progress active pointer-enabled';
  40. progress.style.height = '2px';
  41. progress.style.width = '100%';
  42. progress.style.margin = '.25rem 0rem';
  43. progress.style.setProperty('background', 'rgb(76,80,84)', 'important');
  44. progressBar.className = 'progress-bar bg-warning';
  45. progressBar.style.width = poolPercentage + '%';
  46. progress.appendChild(progressBar);
  47. skillItem.appendChild(progress);
  48. tippy($(`#skill-nav-mastery-${skillId}`)[0], {
  49. placement: 'right',
  50. content: poolPercentage.toFixed(2) + '%'
  51. });
  52. }
  53. if (!maxedSkills[skillId] && !mastery.xp.some(xp => xp < MAX_XP)) {
  54. maxedSkills[skillId] = true;
  55. $(`#skill-nav-mastery-${skillId} .progress-bar`)[0].classList.replace('bg-warning', 'bg-success');
  56. }
  57. }
  58. }, 5000);
  59. }
  60.  
  61. function loadScript() {
  62. if (typeof confirmedLoaded !== 'undefined' && confirmedLoaded) {
  63. clearInterval(interval);
  64. console.log('Loading Mastery Enhancements');
  65. addProgressBars();
  66. }
  67. }
  68.  
  69. const interval = setInterval(loadScript, 500);
  70. });