Greasy Fork 支持简体中文。

GC Job Coupon Helper

Tracks what job coupon you used and on job completion lists what job coupon you have now.

// ==UserScript==
// @name         GC Job Coupon Helper
// @namespace    https://greasyfork.org/en/users/1175371
// @version      1.4
// @description  Tracks what job coupon you used and on job completion lists what job coupon you have now.
// @author       sanjix
// @match        https://www.grundos.cafe/faerieland/employ/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=grundos.cafe
// @grant        none
// ==/UserScript==

var jobLevel = JSON.parse(localStorage.getItem('currentJobLevel')) || '';
//console.log(jobLevel);
var selectedJobLevel = JSON.parse(localStorage.getItem(selectedJobLevel)) || '';
const couponRanks = ['Green', 'Blue', 'Red', 'Silver', 'Gold', 'Purple', 'Pink', 'Green Brightvale', 'Bronze Brightvale', 'Silver Brightvale', 'Gold Brightvale'];

var jobPicker = document.createElement('select')
couponRanks.forEach(rank => {
    jobPicker.add(new Option(rank));
});

var menu = document.querySelector('a[href="/faerieland/employ/rankings/"]');
menu.parentElement.innerHTML += ` |  <b id="currentLevel">Current Coupon: </b>`;
var menuLevel = document.querySelector('#currentLevel')
menuLevel.after(jobPicker);

function updatePicker(newJobLevel) {
    jobPicker.selectedIndex = couponRanks.indexOf(jobLevel);
}

if (jobLevel) {
    updatePicker(jobLevel);
} else {
    jobPicker.selectedIndex = -1;
}

jobPicker.addEventListener('change', (event) => {
    jobLevel = event.target.value;
    localStorage.setItem('currentJobLevel', JSON.stringify(jobLevel));
});

function parseDate(dateString) {
    //returns date from Date String
    return dateString.match(/(\d+\/\d+\/\d+)/)[1];
}

function checkDate(current, stored) {
    var nstDate = current.toLocaleString("en-US", "America/Los_Angeles");

    if (stored === null) {
        localStorage.setItem('storedJobDate', JSON.stringify(nstDate));
    }
    //if stored date is not equal to current date, reset job level and date
    else if (parseDate(nstDate) > parseDate(JSON.parse(stored))) {
        console.log('resetting date and counter');
        jobLevel = '';
        updatePicker(jobLevel);
        localStorage.setItem('currentJobLevel', JSON.stringify(jobLevel));
        localStorage.setItem('storedJobDate',JSON.stringify(nstDate));
    }
}

checkDate(new Date(), localStorage.getItem('storedJobDate'));

function findJobLevel(gcClass) {
    const digits = /\d+/
    var num = gcClass.match(digits);
    return couponRanks[num - 1];
}

function getNewLevel(curJobLevel) {
    var output = ''
    if (curJobLevel == 'Green') {
        jobLevel = '';
        selectedJobLevel = '';
        localStorage.setItem('selectedJobLevel', JSON.stringify(selectedJobLevel));
        localStorage.setItem('currentJobLevel', JSON.stringify(jobLevel));
        output = '<b>all used up</b>';
    } else {
        var rank = couponRanks.indexOf(curJobLevel);
        jobLevel = couponRanks[rank - 1];
        localStorage.setItem('currentJobLevel', JSON.stringify(jobLevel));
        output = 'a <b>' + jobLevel + ' Job Coupon</b>';
    }
    return `<p>Your job coupon is now ${output}.</p>`;
    //updatePicker(jobLevel);
}

var takeJob = document.querySelectorAll('.fea_apply a');
takeJob.forEach((job) => {
    job.addEventListener('click', (event) => {
        selectedJobLevel = findJobLevel(job.parentElement.parentElement.parentElement.children[0].classList[1]);
        //console.log(job.parentElement.parentElement.parentElement.children[0].classList[1]);
        localStorage.setItem('selectedJobLevel',JSON.stringify(selectedJobLevel));
        //jobPicker.selectedIndex = couponRanks.indexOf(selectedJobLevel);
    });
});

if (document.evaluate(
    'count(//b[contains(.,"Good job! You got all the items we wanted.")])',
    document,
    null,
    XPathResult.BOOLEAN_TYPE,
    null
).booleanValue) {
    var buttons = document.querySelector('.button-group');
    var newJobCoupon = document.createElement('p');
    if (jobLevel != '') {
        if (jobLevel != JSON.parse(localStorage.getItem(selectedJobLevel))) {
            newJobCoupon.innerHTML = getNewLevel(JSON.parse(localStorage.getItem('currentJobLevel')));
        } else {
            newJobCoupon.innerHTML = getNewLevel(JSON.parse(localStorage.getItem(selectedJobLevel)));
        }
        buttons.prepend(newJobCoupon);
    }

//     updatePicker(jobLevel);
//     if (jobLevel) {
//         console.log(jobLevel)
//         newJobCoupon.innerHTML = `<p>Your job coupon is now ${jobLevel}.`;
//     }
}