您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Test
// ==UserScript== // @name GeoGuessr Nininbaori Mode // @namespace http://tampermonkey.net/ // @version 0.1 // @description Test // @author kemilton // @match https://www.geoguessr.com/* // @require https://gf.qytechs.cn/scripts/460322-geoguessr-styles-scan/code/Geoguessr%20Styles%20Scan.js?version=1151654 // @license MIT // @grant none // ==/UserScript== // Your code here... const classicGameGuiClasses = ["section_sectionHeader__", "bars_root__", "start-standard-game_settings__", "game-options_optionLabel__"]; const classicGameGuiHTML = () => ` <div class="${cn("section_sectionHeader__")} ${cn("section_sizeMedium__")}"><div class="${cn("bars_root__")} ${cn("bars_center__")}"><div class="${cn("bars_before__")} ${cn("bars_lengthLong__")}"></div><span class="${cn("bars_content__")}"><h3>Nininbaori Mode settings</h3></span><div class="${cn("bars_after__")} ${cn("bars_lengthLong__")}"></div></div></div> <div class="${cn("start-standard-game_settings__")}"> <div style="display: flex; justify-content: space-around;"> <div style="display: flex; align-items: center;"> <span class="${cn("game-options_optionLabel__")}" style="margin: 0; padding-right: 6px;">Hide Panorama</span> <input type="checkbox" id="enableHidePanorama" onclick="toggleHidePanoramaMode(this)" class="${cn("toggle_toggle__")}"> </div> </div> <div style="display: flex; justify-content: space-around;"> <div style="display: flex; align-items: center;"> <span class="${cn("game-options_optionLabel__")}" style="margin: 0; padding-right: 6px;">Hide Map</span> <input type="checkbox" id="enableHideMap" onclick="toggleHideMapMode(this)" class="${cn("toggle_toggle__")}"> </div> </div> </div> ` const friendLobbyGuiClasses = ["section_sectionHeader__", "bars_root__", "game-options_optionLabel__"]; const friendLobbyGuiHTML = () => ` <div class="${cn("section_sectionHeader__")} ${cn("section_sizeMedium__")}" style="margin-top: 10px"><div class="${cn("bars_root__")}"><span class="${cn("bars_content__")}"><h2>Nininbaori Mode Settings</h2></span><div class="${cn("bars_after__")} ${cn("bars_lengthLong__")}"></div></div></div> <div class="${cn("start-standard-game_settings__")}" style="margin-top: 8px"> <div style="display: flex; justify-content: space-around;"> <div style="display: flex; align-items: center;"> <span class="${cn("game-options_optionLabel__")}" style="margin: 0; padding-right: 6px;">Hide Panorama</span> <input type="checkbox" id="enableHidePanorama" onclick="toggleHidePanoramaMode(this)" class="${cn("toggle_toggle__")}"> </div> </div> <div style="display: flex; justify-content: space-around;"> <div style="display: flex; align-items: center;"> <span class="${cn("game-options_optionLabel__")}" style="margin: 0; padding-right: 6px;">Hide Map</span> <input type="checkbox" id="enableHideMap" onclick="toggleHideMapMode(this)" class="${cn("toggle_toggle__")}"> </div> </div> </div> ` const guiHeaderClasses = ["header_item__", "quick-search_wrapper__", "slanted-wrapper_root__", "label_sizeXSmall__", "toggle_toggle__"]; const guiHTMLHeader = () => ` <div id="blinkHeaderToggle" class="${cn("header_item__")}"> <div class="${cn("quick-search_wrapper__")}"> <div class="${cn("slanted-wrapper_root__")} ${cn("slanted-wrapper_variantGrayTransparent__")}"> <div class="${cn("slanted-wrapper_start__")} ${cn("slanted-wrapper_right__")}"></div> <div class="${cn("quick-search_searchInputWrapper__")}"> <div id="popup" style="background: rgba(26, 26, 46, 0.9); padding: 15px; width: 200px; border-radius: 10px;"> <div style="display: flex; justify-content: space-between; align-items: center;"> <span class="${cn("label_sizeXSmall__")}">Hide Panorama</span> <input type="checkbox" id="enableHidePanoramaHeader" class="${cn("toggle_toggle__")}" onclick="toggleHidePanoramaMode(this)"> </div> <div style="display: flex; justify-content: space-between; align-items: center;"> <span class="${cn("label_sizeXSmall__")}">Hide Map</span> <input type="checkbox" id="enableHideMapHeader" class="${cn("toggle_toggle__")}" onclick="toggleHideMapMode(this)"> </div> </div> <button style="width: 59.19px" id="headerGuiToggle" class="${cn("quick-search_searchInputButton__")}"><picture style="justify-content: center" class="${cn("quick-search_iconSection__")}"><img src="https://www.svgrepo.com/show/40039/eye.svg" style="width: 15px; filter: brightness(0) invert(1); opacity: 60%;"></picture></button> </div> <div class="${cn("slanted-wrapper_end__")} ${cn("slanted-wrapper_right__")}"></div> </div> </div> </div> ` const guiPartyHeaderClasses = ["header_item__", "slanted-wrapper_root__", "game-options_optionLabel__"]; const guiPartyHeader = () => ` <div id="blinkHeaderToggle" class="${cn("header_item__")}" style="margin-right: 1rem;"> <div id="popup" style="background: rgba(26, 26, 46, 0.9); padding: 15px; width: 200px; border-radius: 10px; z-index: 999;"> <div style="display: flex; justify-content: space-between; align-items: center;"> <span class="${cn("game-options_optionLabel__")}">Hide Panorama</span> <input type="checkbox" id="enableHidePanoramaHeader" class="${cn("toggle_toggle__")}" onclick="toggleHidePanoramaMode(this)"> </div> <div style="display: flex; justify-content: space-between; align-items: center;"> <span class="${cn("game-options_optionLabel__")}">Hide Map</span> <input type="checkbox" id="enableHideMapHeader" class="${cn("toggle_toggle__")}" onclick="toggleHideMapMode(this)"> </div> </div> <div class="${cn("quick-search_wrapper__")}"> <div class="${cn("slanted-wrapper_root__")} ${cn("slanted-wrapper_variantGrayTransparent__")}"> <div class="${cn("slanted-wrapper_start__")} ${cn("slanted-wrapper_right__")}"></div> <div> <button id="headerGuiToggle" style="width: 59.19px; background-color: inherit;border: initial;cursor: pointer;min-height: 2rem;min-width: 2rem;padding: var(--padding-y) var(--padding-x);"><picture style="justify-content: center" class="${cn("quick-search_iconSection__")}"><img src="https://www.svgrepo.com/show/40039/eye.svg" style="width: 15px; filter: brightness(0) invert(1); opacity: 60%;"></picture></button> </div> <div class="${cn("slanted-wrapper_end__")} ${cn("slanted-wrapper_right__")}"></div> </div> </div> </div> ` if (localStorage.getItem('hidePanoramaEnabled') == null) { localStorage.setItem('hidePanoramaEnabled', 'disabled'); } if (localStorage.getItem('hideMapEnabled') == null) { localStorage.setItem('hideMapEnabled', 'disabled'); } window.toggleHidePanoramaMode = (e) => { localStorage.setItem('hidePanoramaEnabled', e.checked ? 'enabled' : 'disabled'); if (!e.checked) { try { showPanoramaCached(); } catch {} } if (document.querySelector('#enableHidePanorama')) { document.querySelector('#enableHidePanorama').checked = e.checked; } if (document.querySelector('#enableHidePanoramaHeader')) { document.querySelector('#enableHidePanoramaHeader').checked = e.checked; } } window.toggleHideMapMode = (e) => { localStorage.setItem('hideMapEnabled', e.checked ? 'enabled' : 'disabled'); if (!e.checked) { try { showMapCached(); } catch {} } if (document.querySelector('#enableHideMap')) { document.querySelector('#enableHideMap').checked = e.checked; } if (document.querySelector('#enableHideMapHeader')) { document.querySelector('#enableHideMapHeader').checked = e.checked; } } const insertHeaderGui = (header, gui) => { header.insertAdjacentHTML('afterbegin', gui); const showButton = document.querySelector('#headerGuiToggle'); const popup = document.querySelector('#popup'); popup.style.display = 'none'; document.addEventListener('click', (e) => { const target = e.target; if (target == popup || popup.contains(target)) return; if (target.matches('#headerGuiToggle, #headerGuiToggle *')) { e.preventDefault(); popup.style.display = 'block'; Popper.createPopper(showButton, popup, { placement: 'bottom', modifiers: [ { name: 'offset', options: { offset: [0, 10], }, }, ], }); } else { popup.style.display = 'none'; } if (document.querySelector('#enableHidePanoramaHeader')) { if (localStorage.getItem('hidePanoramaEnabled') === 'enabled') { document.querySelector('#enableHidePanoramaHeader').checked = true; } } if (document.querySelector('#enableHideMapHeader')) { if (localStorage.getItem('hideMapEnabled') === 'enabled') { document.querySelector('#enableHideMapHeader').checked = true; } } }); } const checkInsertGui = () => { // Play page for classic games if (document.querySelector('[class*=radio-box_root__]') && document.querySelector('#enableHidePanorama') === null && checkAllStylesFound(classicGameGuiClasses)) { document.querySelector('[class*=section_sectionMedium__]').insertAdjacentHTML('beforeend', classicGameGuiHTML()); if (localStorage.getItem('hidePanoramaEnabled') === 'enabled') { document.querySelector('#enableHidePanorama').checked = true; } } if (document.querySelector('[class*=radio-box_root__]') && document.querySelector('#enableHideMap') === null && checkAllStylesFound(classicGameGuiClasses)) { document.querySelector('[class*=section_sectionMedium__]').insertAdjacentHTML('beforeend', classicGameGuiHTML()); if (localStorage.getItem('hideMapEnabled') === 'enabled') { document.querySelector('#enableHideMap').checked = true; } } // Lobby for friends party games if (document.querySelector('[class*=game-options_root__]') && document.querySelector('#enableHidePanorama') === null && checkAllStylesFound(friendLobbyGuiClasses)) { document.querySelector('[class*=game-options_optionGroup__]').insertAdjacentHTML('beforeend', friendLobbyGuiHTML()); if (localStorage.getItem('hidePanoramaEnabled') === 'enabled') { document.querySelector('#enableHidePanorama').checked = true; } } if (document.querySelector('[class*=game-options_root__]') && document.querySelector('#enableHideMap') === null && checkAllStylesFound(friendLobbyGuiClasses)) { document.querySelector('[class*=game-options_optionGroup__]').insertAdjacentHTML('beforeend', friendLobbyGuiHTML()); if (localStorage.getItem('hideMapEnabled') === 'enabled') { document.querySelector('#enableHideMap').checked = true; } } // Header if (document.querySelector('[class*=header_header__]') && document.querySelector('#blinkHeaderToggle') === null && checkAllStylesFound(guiHeaderClasses)) { insertHeaderGui(document.querySelector('[class*=header_context__]'), guiHTMLHeader()) } else if (document.querySelector('[class*=party-header_root__]') && document.querySelector('#blinkHeaderToggle') === null && checkAllStylesFound(guiPartyHeaderClasses)) { insertHeaderGui(document.querySelector('[class*=party-header_right__]'), guiPartyHeader()) } } let panoRoot = null; function hidePanorama() { panoRoot = document.querySelector('.mapsConsumerUiSceneInternalCoreScene__root') || panoRoot; hidePanoramaCached(); } function hidePanoramaCached() { panoRoot.style.filter = 'brightness(0%)'; } function showPanorama() { panoRoot = document.querySelector('.mapsConsumerUiSceneInternalCoreScene__root') || panoRoot; showPanoramaCached(); } function showPanoramaCached() { panoRoot.style.filter = 'brightness(100%)'; } let mapRoot = null; function hideMap() { mapRoot = document.querySelector('.guess-map') || mapRoot; hideMapCached(); } function hideMapCached() { mapRoot.style.display = 'none'; } function showMap() { mapRoot = document.querySelector('.guess-map') || mapRoot; showMapCached(); } function showMapCached() { mapRoot.style.display = 'block'; } function isLoading() { return document.querySelector('[class*=fullscreen-spinner_root__]') || !document.querySelector('.widget-scene-canvas'); } let wasBackdropThereOrLoading = false; function isBackdropThereOrLoading() { return isLoading() // loading || document.querySelector('[class*=result-layout_root__]') // classic || document.querySelector('[class*=overlay_backdrop__]') // duels / team duels || document.querySelector('[class*=game_backdrop__]') || document.querySelector('[class*=overlays_backdrop__]') // live challenges || document.querySelector('[class*=popup_backdrop__]') // BR || document.querySelector('[class*=game-starting_container__]') || document.querySelector('[class*=round-score_container__]') // bullseye || document.querySelector('[class*=overlay-modal_backlight__]'); // city streaks } let played = false; const checkStatus = () => { if (!(location.pathname.startsWith('/duels'))) { return; } let timer = document.querySelector("[class^='clock-timer_timerContainer__']"); let stress = document.querySelector("[class^='stress-indicator_container__']"); if ((timer !== null) && !played && (stress == null)) { showPanorama(); showMap(); played = true; } else if (timer == null) { played = false; } } let observer = new MutationObserver((mutations) => { scanStyles().then(_ => { checkInsertGui(); }); if (localStorage.getItem('hidePanoramaEnabled') === 'enabled') { if (isBackdropThereOrLoading()) { wasBackdropThereOrLoading = true; if (!isLoading()) hidePanorama(); } else if (wasBackdropThereOrLoading) { wasBackdropThereOrLoading = false; hidePanorama(); } checkStatus(); } if (localStorage.getItem('hideMapEnabled') === 'enabled') { if (isBackdropThereOrLoading()) { wasBackdropThereOrLoading = true; if (!isLoading()) hideMap(); } else if (wasBackdropThereOrLoading) { wasBackdropThereOrLoading = false; hideMap(); } checkStatus(); } }); observer.observe(document.body, { characterDataOldValue: false, subtree: true, childList: true, characterData: false });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址