Geoguessr point to South (M)

Press M to point the streetview map due south

// ==UserScript==
// @name         Geoguessr point to South (M)
// @description  Press M to point the streetview map due south
// @version      1.0
// @author       Noah
// @match        *://*.geoguessr.com/*
// @run-at       document-start
// @grant        none
// @license     MIT
// @namespace https://gf.qytechs.cn/users/1446528
// ==/UserScript==
let MWStreetViewInstance;

function overrideOnLoad(googleScript, observer, overrider) {
    const oldOnload = googleScript.onload;
    googleScript.onload = (event) => {
        const google = window.google;
        if (google) {
            observer.disconnect();
            overrider(google);
        }
        if (oldOnload) {
            oldOnload.call(googleScript, event);
        }
    };
}

function grabGoogleScript(mutations) {
    for (const mutation of mutations) {
        for (const newNode of mutation.addedNodes) {
            if (newNode && newNode.src && newNode.src.startsWith('https://maps.googleapis.com/')) {
                return newNode;
            }
        }
    }
    return null;
}

function injecter(overrider) {
    if (document.documentElement) {
        injecterCallback(overrider);
    }
}

function injecterCallback(overrider) {
    new MutationObserver((mutations, observer) => {
        const googleScript = grabGoogleScript(mutations);
        if (googleScript) {
            overrideOnLoad(googleScript, observer, overrider);
        }
    }).observe(document.documentElement, { childList: true, subtree: true });
}

document.addEventListener('DOMContentLoaded', () => {
    injecter(() => {
        google.maps.StreetViewPanorama = class extends google.maps.StreetViewPanorama {
            constructor(...args) {
                super(...args);
                MWStreetViewInstance = this;
            }
        };
    });
});

document.addEventListener('keyup', (event) => {
    const settings = JSON.parse(window.localStorage.getItem('game-settings')) ?? { forbidRotating: false, noMove: false };
    if (settings.forbidRotating || settings.noMove) return; // Disable in NMPZ mode

    if (MWStreetViewInstance && event.key.toLowerCase() === 'm') {
        let pov = MWStreetViewInstance.getPov();
        pov.heading = 180;
        MWStreetViewInstance.setPov(pov);
    }
});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址