Flight Rising Baldwin

Automatically transmutes items from your list.

目前為 2022-12-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Flight Rising Baldwin
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Automatically transmutes items from your list.
// @author       Triggernometry
// @match        https://www1.flightrising.com/trading/baldwin/transmute*
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

(function() {
    'use strict';
    getState();
})();

// Categories are food, mats, app, fam, other

let transmuteItems = {
    'food'      : ['Albino Dasher', 'Common Sparrow', 'Red Squirrel'],
    'mats'      : ['Bone Fragments', 'Sparrow Skull', 'Crumbling Leather', 'Birch Logs', 'Fir Logs', 'Shattered Ceramic Shards'],
    'app'       : [],
    'fam'       : [],
    'other'     : ['Broken Clay Pot']
};

function getState(){

    let idle = document.querySelector('#plus-button-container');
    let brewing = document.querySelector('.baldwin-cauldron-brewing');
    let done = document.querySelector('.baldwin-cauldron-done');

    if(done){
        collectItem();
    } else if (brewing){
        brewingWait();
    } else if(idle){
        transmute();
    }
}

async function collectItem(){
    let collectDoneItem = document.querySelector('input[value="Collect!"]').click();
    // wait for page to load after click
    // await collectDoneItem.DOMContentLoaded();
    await sleep(2000);
    location.reload();
}

async function brewingWait(){
    let brewingTime = document.querySelector('#baldwin-timer-value').getAttribute('data-seconds-left');
    brewingTime = parseInt(brewingTime) + 3;
    console.log(`Now waiting for ${brewingTime} seconds. Please Stand by.`)
    await sleep(brewingTime * 1000);
    location.reload();
}

async function transmute(){
    let clickTransmuteButton = document.querySelector('#plus-button').click();
    console.log(`Click return object: ${clickTransmuteButton}`)
    // wait for item load
    // await clickTransmuteButton.DOMContentLoaded();
    await sleep(2000);
    //console.log(`${transmuteItem[0]} : ${transmuteItem[1]}`)
    let transmuteSelection;

    for (const key of Object.keys(transmuteItems)) {
        let valueList = transmuteItems[key];
        console.log("key:", key);
        // switch to category tab
        let chooseCategory = document.querySelector(`#swaptabs > a[data-tab-id="${key}"]`).click();
        await sleep(2000);

        // get all items in category
        let itemList = document.querySelectorAll('#itempage > span > a');

        // compare to own list of allowed items
        for (const node of itemList) {
            if(valueList.includes(node.getAttribute('data-name'))) {
                // if allowed item found, set and break loop
                transmuteSelection = node;
                break;
            }
        }

        // if not null, we found a good value. break outer loop
        if (transmuteSelection) {
            break;
        }
    }
    // if not null, item found
    if(transmuteSelection) {
        transmuteSelection.click();
        await sleep(1000);
        let transmuteStart = document.querySelector('#attch').click();
        await sleep(2000);
        let transmuteConfirm = document.querySelector('#transmute-confirm-ok').click();
    }
    // otherwise, reached end of items without findin a match. Exit.
    else {
        console.log("Reached end without finding a match. Nothing to brew.");
        return 0;
    }
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}