Adds to games a quick reference of how many points you'll need to max out your remaining NP. Currently doesn't account for computer science bonus (hoping to add it soon once I get comp sci bonus myself)
目前為
// ==UserScript==
// @name GC - Games Points til Max NP
// @namespace https://greasyfork.org/en/users/1202961-13ulbasaur
// @version 0.3
// @description Adds to games a quick reference of how many points you'll need to max out your remaining NP. Currently doesn't account for computer science bonus (hoping to add it soon once I get comp sci bonus myself)
// @author You
// @match https://www.grundos.cafe/games/html5/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=grundos.cafe
// @grant none
// @license MIT
// ==/UserScript==
//Set up the observer for when np changes
const npElement = document.getElementById('np_earned');
const config = { attributes: true, childList: true, subtree: true };
const gameInfo = document.querySelector('div.games-info div.bg-action')
let featuredGame = false;
try {
featuredGame = document.querySelector('strong.green.large-font').innerText.includes('This game is featured');
}
catch{
}
gameInfo.querySelector('div:nth-child(2)').insertAdjacentHTML('beforebegin',`<span id="npToEarn" style='text-align:center'></span>`)
const npToEarnElem = document.getElementById('npToEarn')
// Callback function to execute when mutations are observed
const callback = (mutationList, observer) => {
for (const mutation of mutationList) {
console.log(`mutation type: ${mutation.type}`);
updatePoints();
}
};
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(npElement, config);
function updatePoints() {
// Your code here...
//Get the np per points info
let npPerPoints = Number(gameInfo.querySelector('div:first-child span:first-child strong:nth-child(2)').textContent.replaceAll(/(?=NP).*/gi,'').replaceAll(',','').trim());
if (featuredGame) {
npPerPoints = npPerPoints*2;
}
//Get max NP
const maxNP = Number(gameInfo.querySelector('div:last-child span:first-child strong:last-child').textContent.replaceAll(',','').trim());
//Get the remaining NP to obtain
const npRemaining = maxNP-Number(document.getElementById('np_earned').textContent.replaceAll('NP','').replaceAll(',','').trim());
let pointsToEarn;
if (npRemaining > 0) {
//Points to get calculation:
//Rounded up since I dont think any games have decimal point points.
pointsToEarn = Math.ceil(npRemaining/npPerPoints)
}
else {
pointsToEarn = 'All Done!'
}
npToEarnElem.innerHTML = `Points to Max:<br><strong>${pointsToEarn}</strong>`;
}
updatePoints();