您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows your average score over a set number of rounds. Displays past rounds with links to their results page.
- // ==UserScript==
- // @name Geoguessr Average Score Display
- // @namespace https://gf.qytechs.cn/en/users/1080671
- // @version 0.2.1
- // @description Shows your average score over a set number of rounds. Displays past rounds with links to their results page.
- // @author Lemson
- // @match https://www.geoguessr.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=geoguessr.com
- // @grant GM_setValue
- // @grant GM_getValue
- // @run-at document-idle
- // @license MIT
- // ==/UserScript==
- /***********************************************************************************/
- /****************YOU NEED TO TURN OFF ANIMATION INGAME FOR THIS TO WORK*************/
- /***********************************************************************************/
- /**************IF YOU DO NOT TURN OFF ANIMATIONS THE SCRIPT WILL NOT WORK***********/
- /***********************************************************************************/
- (function () {
- "use strict";
- // Edit maxEntries to change the number of past games to include.
- const maxEntries = 4;
- //let userId = JSON.parse(document.getElementById('__NEXT_DATA__').innerText).props.accountProps.account.user.userId;
- const savedData = GM_getValue("savedData", { scores: [], urls: [] }) || { scores: [], urls: [] };
- let elementDetected = false;
- const observer = new MutationObserver((mutations) => {
- mutations.forEach((mutation) => {
- const targetElements = document.querySelectorAll('[data-qa="final-result-score"] > div');
- if (targetElements.length > 0) {
- if (!elementDetected) {
- const childText = targetElements[0].innerText;
- const scoreValue = parseInt(childText, 10);
- const currentUrl = window.location.href;
- const urlAlreadySaved = savedData.urls.includes(currentUrl);
- if (!urlAlreadySaved) {
- savedData.scores.push(scoreValue);
- savedData.urls.push(currentUrl);
- if (savedData.scores.length > maxEntries) {
- savedData.scores = savedData.scores.slice(savedData.scores.length - maxEntries);
- savedData.urls = savedData.urls.slice(savedData.urls.length - maxEntries);
- }
- GM_setValue("savedData", savedData);
- }
- const averageScore = savedData.scores.reduce((sum, value) => sum + value, 0) / savedData.scores.length;
- displayAverageScore(averageScore);
- displayScoresDropdown(savedData);
- elementDetected = true;
- }
- } else {
- elementDetected = false;
- }
- });
- });
- //createElement function to make code better look
- function createElement(tag, attributes = {}, textContent = "") {
- const element = document.createElement(tag);
- Object.entries(attributes).forEach(([key, value]) => element.setAttribute(key, value));
- element.textContent = textContent;
- return element;
- }
- // Show the average score on the screen
- function displayAverageScore(averageScore) {
- const resultContainer = document.querySelector('div[class^="result-overlay_overlayContent__"]');
- const averageScoreDiv = createElement("div", { style: "text-align: center; font-weight: bold;" });
- averageScoreDiv.innerHTML = `Average Score: ${averageScore.toFixed(2)} <br> (over ${maxEntries} rounds)`;
- resultContainer.appendChild(averageScoreDiv);
- }
- function displayScoresDropdown(data) {
- const resultContainer = document.querySelector('div[class^="result-overlay_overlayContent__"]');
- const dropdownContainer = createElement("div", { style: "text-align: center;" });
- const dropdown = createElement("select", { id: "scoreDropdown" });
- dropdown.style.cssText =
- "font-weight: bold; background-color: rgba(0,0,0,0.2); color: white; border: 1px black solid; width: 8rem; height: 1rem;text-align: center; border-radius: 2rem";
- //Put the score sin the dropdown thing.
- data.scores.forEach((score, index) => {
- const option = createElement("option", { value: index }, `Round ${index + 1}: ${score}`);
- option.style = "background-color: black; border:none;";
- dropdown.appendChild(option);
- });
- //When user click old round this takes them there.
- dropdown.addEventListener("change", (event) => {
- const selectedIndex = event.target.value;
- const selectedUrl = data.urls[selectedIndex];
- window.location.href = selectedUrl;
- });
- dropdownContainer.appendChild(dropdown);
- resultContainer.appendChild(dropdownContainer);
- }
- observer.observe(document.body, { childList: true, subtree: true });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址