Greasy Fork is available in English.

FR Hoard Item Counter

try to take over the world!

// ==UserScript==
// @name         FR Hoard Item Counter
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       Gnorbu
// @match        https://www1.flightrising.com/hoard/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    window.setTimeout(initGUI, 1000);

    var sheet = window.document.styleSheets[0];
    sheet.insertRule('.guiContainer { margin-left: 14px; }', sheet.cssRules.length);
})();

let itemObj = {};

function initGUI(){
    let skybanner = document.querySelector('#skybanner');

    let guiContainer = document.createElement('div');
    guiContainer.className = 'guiContainer';
    guiContainer.style.paddingLeft = '10px';
    guiContainer.style.paddingTop = '10px';
    guiContainer.style.float = 'left';

    let textarea = document.createElement('textarea');
    textarea.style.marginTop = '20px';
    textarea.style.marginBottom = '10px';
    textarea.className = 'textarea';
    textarea.rows = '10';
    textarea.cols= '17';

    let br = document.createElement('br');

    let btn = document.createElement('button');
    btn.onclick = startCounting;
    btn.innerHTML = "Start Counting";
    btn.style.float = 'left';
    btn.style.marginBottom = '20px';

    guiContainer.appendChild(textarea);
    guiContainer.appendChild(br);
    guiContainer.appendChild(btn);

    skybanner.insertAdjacentElement("beforebegin", guiContainer);

}

async function startCounting(category){

    await countItems();

    let nextButton = document.querySelector('.common-pagination-arrow-next');
    let disabledBtn = document.querySelector('.common-ui-button-disabled.common-pagination-arrow-next');

    let disable = !nextButton || disabledBtn ? true : false;

    while(!disable){

        let newNextBtn = document.querySelector('.common-pagination-arrow-next');
        let newDisabledBtn = document.querySelector('.common-ui-button-disabled.common-pagination-arrow-next');

        if(!newNextBtn || newDisabledBtn){
            break;
        }

        newNextBtn.click();
        await sleep(1100);
        await countItems();
    }

    console.log("DONE!");

}

async function countItems(){
    let textarea = document.querySelector('.textarea');
    let itemContainer = document.querySelectorAll('.hoard-result-item');

    if (!itemContainer){
        return;
    }

    for (let i = 0; i < itemContainer.length; i++){

        let item = itemContainer[i].querySelector('.itemicon.hoard-result-item-icon').getAttribute('data-name');
        let itemCount = parseInt(itemContainer[i].getAttribute('data-quantity'));

        if(itemObj[item]){
            let currentAmount = itemObj[item];
            itemObj[item] = currentAmount + itemCount;
        } else {
            itemObj[item] = itemCount;
        }

        //console.log(`${item} -> ${itemObj[item]}`);
        let regexItem = new RegExp(`^${item} ; \\d+`, "m");

        if(regexItem.test(textarea.value)){
            textarea.value = textarea.value.replace(textarea.value.match(regexItem), `${item} ; ${itemObj[item]}`);
        } else {
            textarea.value += `${item} ; ${itemObj[item]}\n`;
        }

        textarea.scrollTo(0,textarea.scrollHeight);
    }
}

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