您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
去除图寻街景车。使用Shift+K切换指南针。移植自GeoNoCar by 2020, drparse。参考了Tuxun Replayer, kakageo。
// ==UserScript== // @name TuxunNoCar // @name:zh-CN 图寻-隐藏街景车和指南针 // @description Redacts the car from tuxun, the Chinese geoguessr. Shift-K to toggle compass. Transplanted from GeoNoCar by 2020, drparse. Referenced kakageo's Tuxun Replayer plugin. // @description:zh-CN 去除图寻街景车。使用Shift+K切换指南针。移植自GeoNoCar by 2020, drparse。参考了Tuxun Replayer, kakageo。 // @namespace https://tuxun.fun/ // @version 0.1.8 // @author strombooli // @match https://tuxun.fun/* // @match https://tuxun.fun/world-match // @match https://tuxun.fun/china-match // @match https://tuxun.fun/solo/* // @match https://tuxun.fun/map/* // @match https://tuxun.fun/party // @match https://tuxun.fun/party/* // @exclude https://tuxun.fun/challenge/* // @exclude https://tuxun.fun/replay-pano?* // @exclude https://tuxun.fun/wonders // @exclude https://tuxun.fun/random // @grant unsafeWindow // @run-at document-start // @license GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt // @noframes // ==/UserScript== (function() { 'use strict'; function injected() { const OPTIONS = { colorR: 0.5, colorG: 0.5, colorB: 0.5, colorRS: 0, colorGS: 0, colorBS: 0, }; // If the script breaks, search devtools for "BINTULU" and replace these lines with the new one const vertexOld = "const float f=3.1415926;varying vec3 a;uniform vec4 b;attribute vec3 c;attribute vec2 d;uniform mat4 e;void main(){vec4 g=vec4(c,1);gl_Position=e*g;a=vec3(d.xy*b.xy+b.zw,1);a*=length(c);}"; const fragOld = "precision highp float;const float h=3.1415926;varying vec3 a;uniform vec4 b;uniform float f;uniform sampler2D g;void main(){vec4 i=vec4(texture2DProj(g,a).rgb,f);gl_FragColor=i;}"; const vertexNew = ` const float f=3.1415926; varying vec3 a; varying vec3 potato; uniform vec4 b; attribute vec3 c; attribute vec2 d; uniform mat4 e; void main(){ vec4 g=vec4(c,1); gl_Position=e*g; a = vec3(d.xy * b.xy + b.zw,1); a *= length(c); potato = vec3(d.xy, 1.0) * length(c); }`; const fragNewBaidu = `precision highp float; const float h=3.1415926; varying vec3 a; varying vec3 potato; uniform vec4 b; uniform float f; uniform sampler2D g; void main(){ vec2 aD = potato.xy / a.z; float thetaD = aD.y; float thresholdD1 = 0.61; float thresholdD2 = 0.61; float x = aD.x; float y = abs(4.0*x - 2.0); float phiD = smoothstep(0.0, 1.0, y > 1.0 ? 2.0 - y : y); vec4 i = vec4( thetaD > mix(thresholdD1, thresholdD2, phiD) ? vec3(float(${OPTIONS.colorR}), float(${OPTIONS.colorG}), float(${OPTIONS.colorB})) // texture2DProj(g,a).rgb * 0.25 : texture2DProj(g,a).rgb ,f); gl_FragColor=i; }`; const fragNew = `precision highp float; const float h=3.1415926; varying vec3 a; varying vec3 potato; uniform vec4 b; uniform float f; uniform sampler2D g; void main(){ vec2 aD = potato.xy / a.z; float thetaD = aD.y; float thresholdD1 = 0.6; float thresholdD2 = 0.7; float x = aD.x; float y = abs(4.0*x - 2.0); float phiD = smoothstep(0.0, 1.0, y > 1.0 ? 2.0 - y : y); vec4 i = vec4( thetaD > mix(thresholdD1, thresholdD2, phiD) ? vec3(float(${OPTIONS.colorR}), float(${OPTIONS.colorG}), float(${OPTIONS.colorB})) // texture2DProj(g,a).rgb * 0.25 : texture2DProj(g,a).rgb ,f); gl_FragColor=i; }`; const fragNewBaiduNew = `precision highp float; const float h=3.1415926; varying vec3 a; varying vec3 potato; uniform vec4 b; uniform float f; uniform sampler2D g; void main(){ vec2 aD = potato.xy / a.z; float thetaD = aD.y; float thresholdD1 = 0.6; float thresholdD2 = 0.7; float thresholdD1S = 0.8; float thresholdD2S = 0.9; float x = aD.x; float y = abs(4.0*x - 2.0); float phiD = smoothstep(1.0, 0.0, y > 1.0 ? 2.0 - y : y); vec4 i = vec4( thetaD > mix(thresholdD1, thresholdD2, phiD) ? (thetaD > mix(thresholdD1S, thresholdD2S, phiD) ? vec3(float(${OPTIONS.colorRS}), float(${OPTIONS.colorGS}), float(${OPTIONS.colorBS})) : vec3(float(${OPTIONS.colorR}), float(${OPTIONS.colorG}), float(${OPTIONS.colorB}))) : texture2DProj(g,a).rgb ,f); gl_FragColor=i; }`; let streetViewPanorama, isBaiduP = false; //let tryInit = setInterval(function(){ // const streetViewContainer = document.getElementById('viewer'); // if (streetViewContainer){ // const keys = Object.keys(streetViewContainer); // const key = keys.find(key => key.startsWith("__reactFiber")); // const props = streetViewContainer[key]; // streetViewPanorama = props.return.child.memoizedProps.children[1].props.googleMapInstance; // if (streetViewPanorama) { // streetViewPanorama.addListener('position_changed', () => { // // console.log(streetViewPanorama.getPano()); // // console.log(/^[A-Z0-9]{27}$/.test(streetViewPanorama.getPano())); // if (/^[A-Z0-9]{27}$/.test(streetViewPanorama.getPano())) { // isBaiduP = true; // } // }); // clearInterval(tryInit); // } // } //}, 100); var _send = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(value) { this.addEventListener('load', function() { if (this.responseURL && this.responseURL.includes('https://tuxun.fun/api/v0/tuxun/mapProxy/getPanoInfo?pano=') && this.responseURL.length == 84) { isBaiduP = true; } }, false); _send.call(this, value); }; function installShaderSource(ctx) { const g = ctx.shaderSource; function shaderSource() { if (typeof arguments[1] === 'string') { let glsl = arguments[1]; //console.log('BINTULU shader', glsl); if (glsl === vertexOld) glsl = vertexNew; else if (glsl === fragOld){ if (isBaiduP) glsl = fragNewBaiduNew; else glsl = fragNew; } return g.call(this, arguments[0], glsl); } return g.apply(this, arguments); } shaderSource.bestcity = 'bintulu'; ctx.shaderSource = shaderSource; } function installGetContext(el) { const g = el.getContext; el.getContext = function() { if (arguments[0] === 'webgl' || arguments[0] === 'webgl2') { const ctx = g.apply(this, arguments); if (ctx && ctx.shaderSource && ctx.shaderSource.bestcity !== 'bintulu') { installShaderSource(ctx); } return ctx; } return g.apply(this, arguments); }; } const f = document.createElement; document.createElement = function() { if (arguments[0] === 'canvas' || arguments[0] === 'CANVAS') { const el = f.apply(this, arguments); installGetContext(el); return el; } return f.apply(this, arguments); }; function addCompassStyle() { let style = document.createElement('style'); style.id = 'bintulu_nocompass'; style.innerHTML = '.gmnoprint.gm-bundled-control.gm-bundled-control-on-bottom { display: none }'; document.head.appendChild(style); } addCompassStyle(); document.addEventListener('keydown', (evt) => { if (!evt.repeat && evt.code === 'KeyK' && evt.shiftKey && !evt.altKey && !evt.ctrlKey && !evt.metaKey) { let style = document.getElementById('bintulu_nocompass'); if (!style) { addCompassStyle(); } else { style.remove(); } } }); } unsafeWindow.eval(`(${injected.toString()})()`); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址