Display the exact number of played games on maps where this number has been rounded (more than 1000 games played)
当前为
// ==UserScript==
// @name Geoguessr unrounded games played for popular maps
// @version 0.1.1
// @description Display the exact number of played games on maps where this number has been rounded (more than 1000 games played)
// @author victheturtle#5159
// @license MIT
// @match https://www.geoguessr.com/*
// @grant none
// @icon https://www.google.com/s2/favicons?sz=64&domain=geoguessr.com
// @namespace https://greasyfork.org/users/967692-victheturtle
// ==/UserScript==
let last_URL = "";
let map_data = {};
function checkRoundedStat() {
let q = document.querySelectorAll("div[class*='map-stats_mapStatMetricValue__']");
return q.length >= 2 && (q[1].innerText.includes("M") || q[1].innerText.includes("K"));
};
function addDetailedPlayed() {
let elt = document.querySelectorAll("div[class*='map-stats_mapStatMetricValue__']")[1];
let value = map_data.props.pageProps.map.numFinishedGames.toLocaleString();
elt.innerText = value;
for (let ms of [100,200,300,400,500]) {
setTimeout(() => {elt.innerText = value;}, ms);
}
};
function checkStats() {
if (map_data.props != null) {
addDetailedPlayed();
return;
}
let game_url = window.location.href;
fetch(game_url)
.then(res => res.text())
.then(str => {
let parser = new DOMParser();
let html = parser.parseFromString(str, "text/html");
let dataHTML = html.getElementById("__NEXT_DATA__");
map_data = JSON.parse(dataHTML.innerHTML);
addDetailedPlayed();
}).catch(err => {throw(err);});
};
function doCheck() {
if (location.pathname.startsWith("/maps") && location.pathname != last_URL && checkRoundedStat()) {
checkStats();
} else if (location.pathname != last_URL) {
map_data = {};
}
location.pathname != last_URL;
};
function tryAddDetailedPlayedOnRefresh() {
setTimeout(doCheck, 300);
};
function tryAddDetailedPlayed() {
for (let timeout of [250,500,1200,2000]) {
setTimeout(doCheck, timeout);
}
};
document.addEventListener('click', tryAddDetailedPlayed, false);
document.addEventListener('load', tryAddDetailedPlayedOnRefresh(), false);
window.addEventListener('popstate', tryAddDetailedPlayed, false);