[OBSOLETE] Melvor Idle - Better Mastery Tokens

Makes mastery tokens unable to hit already mastered milestones

// ==UserScript==
// @name         [OBSOLETE] Melvor Idle - Better Mastery Tokens
// @namespace    zuzuvelas/melvor
// @version      1.3
// @description  Makes mastery tokens unable to hit already mastered milestones
// @author       Zuzuvelas
// @source       https://github.com/zuzuvelas/User-Scripts
// @match        https://melvoridle.com/*
// @grant        none
// ==/UserScript==
/* jshint esversion: 6 */
"use strict"

// THIS HAS BEEN RENDERED OBSOLETE IN MELVOR ALPHA v0.17+

/*
window.getUnmasteredMilestones = function (skill) {
  return skill.reduce((arr, milestone, idx) => {
    if (milestone.mastery < 99) {
      arr.push(idx)
    }
    return arr
  }, [])
}

window.claimToken = function (bankID, itemID, all = false) {
  let skill = items[itemID].skill
  let random
  let mastered = false
  let milestones

  if (all) {
    tokenInterval = setInterval(function() {
        claimToken(bankID, itemID);
    }, 250);
  } else {
    if (checkBankForItem(itemID)) {
      switch (skill) {
        case CONSTANTS.skill.Cooking:
          if (cookingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(cookingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            cookingMastery[random].masteryXP = masteryExp.level_to_xp(cookingMastery[random].mastery + 1)
            cookingMastery[random].mastery++
            levelUpMastery(skill, random, cookingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Crafting:
          if (craftingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(craftingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            craftingMastery[random].masteryXP = masteryExp.level_to_xp(craftingMastery[random].mastery + 1)
            craftingMastery[random].mastery++
            levelUpMastery(skill, random, craftingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Farming:
          if (farmingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(farmingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            farmingMastery[random].masteryXP = masteryExp.level_to_xp(farmingMastery[random].mastery + 1)
            farmingMastery[random].mastery++
            levelUpMastery(skill, random, farmingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Firemaking:
          if (logsMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(logsMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            logsMastery[random].masteryXP = masteryExp.level_to_xp(logsMastery[random].mastery + 1)
            logsMastery[random].mastery++
            levelUpMastery(skill, random, logsMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Fishing:
          if (fishMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(fishMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            fishMastery[random].masteryXP = masteryExp.level_to_xp(fishMastery[random].mastery + 1)
            fishMastery[random].mastery++
            levelUpMastery(skill, random, fishMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Fletching:
          if (fletchingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(fletchingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            fletchingMastery[random].masteryXP = masteryExp.level_to_xp(fletchingMastery[random].mastery + 1)
            fletchingMastery[random].mastery++
            levelUpMastery(skill, random, fletchingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Mining:
          if (miningOreMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(miningOreMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            miningOreMastery[random].masteryXP = masteryExp.level_to_xp(miningOreMastery[random].mastery + 1)
            miningOreMastery[random].mastery++
            levelUpMastery(skill, random, miningOreMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Runecrafting:
          if (runecraftingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(runecraftingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            runecraftingMastery[random].masteryXP = masteryExp.level_to_xp(runecraftingMastery[random].mastery + 1)
            runecraftingMastery[random].mastery++
            levelUpMastery(skill, random, runecraftingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Smithing:
          if (smithingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(smithingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            smithingMastery[random].masteryXP = masteryExp.level_to_xp(smithingMastery[random].mastery + 1)
            smithingMastery[random].mastery++
            levelUpMastery(skill, random, smithingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Thieving:
          if (thievingMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(thievingMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            thievingMastery[random].masteryXP = masteryExp.level_to_xp(thievingMastery[random].mastery + 1)
            thievingMastery[random].mastery++
            levelUpMastery(skill, random, thievingMastery, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Woodcutting:
          if (treeMasteryData.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(treeMasteryData)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            treeMasteryData[random].masteryXP = masteryExp.level_to_xp(treeMasteryData[random].mastery + 1)
            treeMasteryData[random].mastery++
            levelUpMastery(skill, random, treeMasteryData, true)
          } else { mastered = true }
          break

        case CONSTANTS.skill.Herblore:
          if (herbloreMastery.some(skill => skill.mastery < 99)) {
            milestones = getUnmasteredMilestones(herbloreMastery)
            random = milestones[Math.floor(Math.random() * milestones.length)]
            herbloreMastery[random].masteryXP = masteryExp.level_to_xp(herbloreMastery[random].mastery + 1)
            herbloreMastery[random].mastery++
            levelUpMastery(skill, random, herbloreMastery, true)
          } else { mastered = true }
          break
      }
      
      if (mastered) {
        $.notify({
          message: '<img class="notification-img" src="assets/media/skills/' + setToLowercase(skillName[skill]) + '/' + setToLowercase(skillName[skill]) + '.svg"><span class="badge badge-success">You\'ve already mastered everything in ' + skillName[skill] + '!' + '</span>'
        }, {
          type: 'light',
          placement: {
            from: 'bottom',
            align: 'center'
          },
          delay: 1000,
          newest_on_top: true,
          animate: {
            enter: 'animated fadeInUp',
            exit: 'animated fadeOut'
          },
          template: '<div data-notify="container" class="col-12 col-md-6 text-center notify-event" role="alert"><span data-notify="message">{2}</span><div class="progress" data-notify="progressbar"><div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div></div><a href="{3}" target="{4}" data-notify="url"></a></div>'
        })
    
        clearInterval(tokenInterval)
        tokenInterval = null
      } else {
        updateItemInBank(bankID, itemID, -1)
      }
    } else {
      clearInterval(tokenInterval)
      tokenInterval = null
    }
  }
}
*/

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址