dang's Melvor bot

Automates some stuff in Melvor

目前为 2021-01-14 提交的版本。查看 最新版本

// ==UserScript==
// @name         dang's Melvor bot
// @namespace    https://gf.qytechs.cn/en/users/143358-dang
// @version      1.0
// @description  Automates some stuff in Melvor
// @author       dang
// @match        https://melvoridle.com/*
// @includes     https://melvoridle.com/*
// @grant        none
// ==/UserScript==

/* Config */
let autoLootMinLoot = 2;
let autoGearSwitchSets = ['attack', 'magic', 'ranged'];
let autoMineRocks = [9, 8, 3];

let intervalIds = {};

/* AutoLoot */
let $lootTextDiv = $('#combat-loot-text');
let autoLootObserver = new MutationObserver((_mutations, _observer) => { doTheLoot(); });

function doTheLoot() {
    const lootNumber = $lootTextDiv.text().match(/\((\d+) \//);
    if (lootNumber && parseInt(lootNumber[1]) >= autoLootMinLoot) {
        $('#combat-loot .btn-success').click();
    }
}

function startAutoLoot() {
    doTheLoot();
    autoLootObserver.observe($lootTextDiv[0], { childList: true })
}

/* AutoGearSwitch */
let $enemyAttackTypeImg = $('#combat-enemy-attack-type');
let enemyAttackTypeObserver = new MutationObserver((_mutations, _observer) => { gearSwitch(); });

function gearSwitch() {
    for (let i = 0; i < autoGearSwitchSets.length; i++) {
        if ($('.combat-enemy-img').length && $enemyAttackTypeImg.attr('src').match(autoGearSwitchSets[i])) {
            setEquipmentSet(i);
        }
    }
}

function startAutoGearSwitch() {
    gearSwitch();
    enemyAttackTypeObserver.observe($enemyAttackTypeImg[0], { attributes: true });
}

/* AutoMine */
let autoMineObserver = new MutationObserver(checkRockAndSwitch);
let rockIndex = 0;
let rockNumber = autoMineRocks[rockIndex];
let $rockImg;

function checkRockAndSwitch(_mutationsList, _observer) {
    $rockImg = $('#mining-ore-img-' + rockNumber);
    if ($rockImg.attr('src').match(/rock_empty/)) {
        autoMineObserver.disconnect();

        switchRock();
        mineRock(rockNumber, true);
        startAutoMine();
    }
}

function switchRock() {
    if (rockIndex === autoMineRocks.length - 1) {
        rockIndex = 0;
    } else {
        rockIndex++;
    }

    rockNumber = autoMineRocks[rockIndex];
    $rockImg = $('#mining-ore-img-' + rockNumber);
}

function startAutoMine() {
    checkRockAndSwitch();
    autoMineObserver.observe($rockImg[0], { attributes: true });
}

function tryStart(fnStart, fnValidation) {
    if (intervalIds[fnStart.name]) {
        clearInterval(intervalIds[fnStart.name]);
    }
    intervalIds[fnStart.name] = setInterval(() => {
        if (fnValidation()) {
            clearInterval(intervalIds[fnStart.name]);
            delete intervalIds[fnStart.name];
            fnStart();
        }
    }, 1000);
}

tryStart(startAutoLoot, () => { return $lootTextDiv.text().match(/\((\d+) \//); });
tryStart(startAutoGearSwitch, () => { return $('.combat-enemy-img').length; });
tryStart(startAutoMine, () => { return $('#mining-ore-img-' + rockNumber).length; });

QingJ © 2025

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