GeoGuessr Ultimate Script

GeoGuessr Ultimate Script - One Script to rule them all - Work In Progress - Adding features over time - Removes Bottom, Right and Top Bar (Options) - Pimps Data - Makes for a cleaner experience - Removes Author (Optional - For an extra challenge) - Changes flags with numbered flags - Adjust GeoGuessr Logo position - Adjusts Data position

当前为 2022-09-19 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name             GeoGuessr Ultimate Script
// @version          0.4.5
// @description      GeoGuessr Ultimate Script - One Script to rule them all - Work In Progress - Adding features over time - Removes Bottom, Right and Top Bar (Options) - Pimps Data - Makes for a cleaner experience - Removes Author (Optional - For an extra challenge) - Changes flags with numbered flags - Adjust GeoGuessr Logo position - Adjusts Data position
// @author           MrAmericanMike
// @include          /^(https?)?(\:)?(\/\/)?([^\/]*\.)?geoguessr\.com($|\/.*)/
// @grant            none
// @run-at           document-start
// @namespace        https://greasyfork.org/en/scripts/406060-geoguessr-ultimate-script
// ==/UserScript==

(function () {
	"use strict";
	console.log("GeoGuessrUltimateScript");

	// MODULES // Set from 'true' to 'false' any module that you don't need. Example: removeTopBar = false;

	// REMOVE BOTTOM WHITE BAR WHILE PLAYING A MAP
	let removeBottomBar = true;

	// REMOVE RIGHT WHITE BAR ON ROUND RESULTS SCREEN
	let removeRightBar = true;

	// MAKE A CLEANER STREETVIEW BY REMOVING TOP BAR
	let removeTopBar = true;

	// MAKE FLAGS AND PINS TRANSPARENT ON MOUSE OVER
	let transparentPins = true;

	// PIMP MY DATA
	let pimpData = true;

	let floatData = "RIGHT"; // Where to place the logo on screen (Valid options "LEFT" "RIGHT")

	let dataMargin = "0.5rem"; // Horizontal margin from the side of the window [default value is "2.0rem"] (https://www.w3schools.com/cssref/css_units.asp)
	let topMargin = "0.5rem"; // Vertical margin from top of the window [default value is "1.0rem"] (https://www.w3schools.com/cssref/css_units.asp)

	let bgColor = "rgba(255, 255, 255, 0.55)"; // RGBA COLOR (https://www.hexcolortool.com/)
	let titlesColor = "#000033"; // Titles color on the data panel in HEX
	let dataColor = "#660000"; // Data color on the data panel in HEX

	// GEOGUESSR LOGO
	let adjustLogo = true;

	let floatLogo = "LEFT"; // Where to place the logo on screen (Valid options "LEFT" "CENTER" "RIGHT")
	let logoTopMargin = "0.25rem"; // Margin from top of the window (https://www.w3schools.com/cssref/css_units.asp)
	let logoOpacity = "0.5"; // Value going from 0.0 to 1.0 (0.0 represents fully transparent)

	// HIDE FOOTPRINT - (This is where photospheres author would show)
	let hideFootprint = true;

	// HIDE COMPASS - (For an extra challenge)
	let hideCompass = true;

	// HIDE FLAG - (Hide the "Back to start flag" - For an extra challenge)
	let hideFlag = false;

	// HIDE FULLSCREEN - (For those that don't need this button)
	let hideFullscreen = true;

	// HIDE ZOOM - (Hide the zoom controls)
	let hideZoom = true;

	// HIDE TOOLTIPS - (Hide the tooltips for flag, fullscreen and zoom controls)
	// Hiding an element does not hide the tooltip, so recommended leave this true
	let hideTooltips = true;

	// *******************************
	// NO NEED TO EDIT BELOW THIS LINE
	// *******************************

	window.addEventListener("load", () => {
		executeRealTime();
	});

	function executeRealTime() {
		if (removeBottomBar) {
			doRemoveBottomBar();
		}
		if (removeRightBar) {
			doRemoveRightBar();
		}
		if (removeTopBar) {
			doRemoveTopBar();
		}
		if (adjustLogo) {
			doAdjustLogo();
		}

		if (pimpData) {
			doPimpData();
		}
		if (hideFootprint) {
			doHideFootprint();
		}
		if (hideCompass) {
			doHideCompass();
		}
		if (hideFlag) {
			doHideFlag();
		}
		if (hideFullscreen) {
			doHideFullscreen();
		}
		if (hideZoom) {
			doHideZoom();
		}
		if (hideTooltips) {
			doHideTooltips();
		}

		if (transparentPins) {
			addGlobalStyle(`
			.map-pin:hover{
				opacity: 0.25;
			}
		`);
		}
	}

	// BOTTOM BAR
	function doRemoveBottomBar() {
		addGlobalStyle(`
		[class^="ad_inGameAd"]{
			display: none;
		}
	`);
	}

	// RIGHT BAR
	function doRemoveRightBar() {
		addGlobalStyle(`
		[class^="ad_resultsAd"]{
			display: none;
		}
	`);
	}

	// TOP BAR
	function doRemoveTopBar() {
		if (window.location.pathname.includes("game") || window.location.pathname.includes("challenge")) {
			addGlobalStyle(`
			.layout {
				--layout-header-height: 0rem;
			}
			.header__right{
				display: none;
			}
			.game-layout__panorama-canvas{
				height: 100%;
			}
		`);
		} else {
			addGlobalStyle(`
			.layout {
				--layout-header-height: 3rem;
			}
			.header__right{
				display: block;
			}
		`);
		}
	}

	// DATA
	function doPimpData() {
		switch (floatData) {
			case "LEFT":
				addGlobalStyle(`
				.game-layout__status{
					top: ${topMargin};
					left: ${dataMargin};
					right: auto;
				}
			`);
				break;

			case "RIGHT":
				addGlobalStyle(`
				.game-layout__status{
					top: ${topMargin};
					right: ${dataMargin};
					left: auto;
				}
			`);
				break;

			default:
				break;
		}

		addGlobalStyle(`
		.game-statuses {
			background: ${bgColor};
		}
		.game-status__heading{
			color: ${titlesColor};
		}
		.game-status__body{
			color: ${dataColor};
		}
	`);
	}

	// FOOTPRINT
	function doHideFootprint() {
		addGlobalStyle(`
		.gmnoprint, .gm-style-cc{
			display: none;
		}
	`);
	}

	// COMPASS
	function doHideCompass() {
		addGlobalStyle(`
		.compass{
			display: none;
		}
	`);
	}

	// FLAG
	function doHideFlag() {
		addGlobalStyle(`
		[data-qa="return-to-start"]{
			display: none;
		}
	`);
	}

	// FULLSCREEN
	function doHideFullscreen() {
		addGlobalStyle(`
		[data-qa="enter-fullscreen"]{
			display: none;
		}
	`);
	}

	// ZOOM
	function doHideZoom() {
		addGlobalStyle(`
		[data-qa="pano-zoom-in"]{
			display: none;
		}
		[data-qa="pano-zoom-out"]{
			display: none;
		}
	`);
	}

	// HIDE TOOLTIPS
	function doHideTooltips() {
		addGlobalStyle(`
		.tooltip__label{
			display: none;
		}
	`);
	}

	// GEOGUESSR LOGO
	function doAdjustLogo() {
		if (window.location.pathname.includes("game") || window.location.pathname.includes("challenge")) {
			switch (floatLogo) {
				case "LEFT":
					addGlobalStyle(`
			.header__left{
				margin-left: 0;
			}
		`);
					break;

				case "CENTER":
					addGlobalStyle(`
			.header__left{
				margin-left: auto;
			}
		`);
					break;

				case "RIGHT":
					addGlobalStyle(`
			.header__left{
				margin-left: auto;
				margin-right: 0;
			}
		`);
					break;
			}

			addGlobalStyle(`
		.header__logo{
			margin-top: ${logoTopMargin};
			opacity: ${logoOpacity};
		}
	`);
		} else {
			addGlobalStyle(`
		.header__left{
			margin-left: 0;
		}
		.header__logo{
			margin-top: auto;
			opacity: 1;
		}
		`);
		}
	}

	// GLOBAL STYLES INJECTOR
	function addGlobalStyle(css) {
		let head;
		let style;
		head = document.getElementsByTagName("head")[0];
		if (!head) {
			return;
		}
		style = document.createElement("style");
		style.type = "text/css";
		style.innerHTML = css.replace(/;/g, " !important;");
		head.appendChild(style);
	}

	// LISTEN FOR PAGE CHANGES
	let currentTab = "";
	let oldTab = "";

	window.addEventListener("click", (event) => {
		for (let x = 0; x < 1250; x += 250) {
			setTimeout(() => {
				lookForURLChange(event);
			}, x);
		}
	});

	function lookForURLChange(event) {
		if (event.explicitOriginalTarget) {
			currentTab = event.explicitOriginalTarget.baseURI;
		} else if (event.path) {
			event.path.forEach((element) => {
				if (element.hasOwnProperty("URL") && element.hasOwnProperty("location")) {
					currentTab = element.location.pathname;
				}
			});
		}

		if (oldTab != currentTab) {
			oldTab = currentTab;
			setTimeout(executeRealTime, 0);
		}
	}
})();