geoGuessr Resolver Hack (New Update!!!!!)

Features: Automatically score 5000 Points | Score randomly between 4500 and 5000 points | Open in Google Maps | See guess Distances

От 28.05.2023. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         geoGuessr Resolver Hack (New Update!!!!!)
// @namespace    http://tampermonkey.net/
// @version      8.2
// @description  Features: Automatically score 5000 Points | Score randomly between 4500 and 5000 points | Open in Google Maps | See guess Distances
// @author       0x978
// @match        https://www.geoguessr.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=geoguessr.com
// @grant        none
// ==/UserScript==


alert(`           Thanks for using geoGuessr Resolver by 0x978.
           ============================================
           Please use the safer guess Option to avoid bans in competitive
           ============================================
            Controls (NEW!!!!!!!!):
            '1': Place marker on a "safe" guess (4500 - 5000)
            '2': Place marker on a "perfect" guess (5000)
            '3': Get a description of the correct location.
            '4': Open location in Google Maps (In a new tab)
            '5': See opponent's guess distance from correct answer.
            '6': See your distance from correct answer (replaces submit button text)
            ----------------------------------------------------------`)
async function v(e, r){
    let q = await fetch(`https://nominatim.openstreetmap.org/reverse?lat=${e}&lon=${r}&format=json`)
    return await q.json();
}
function qq() {
    let [p,m] = oi()
    v(p,m).then(x => {
        console.log(x)
        alert(`
    Country: ${x.address.country}
    County: ${x.address.county}
    City: ${x.address.city}
    Road: ${x.address.road}
    State: ${x.address.state}
    Postcode: ${x.address.postcode}
    Village/Suburb: ${(x.address.village||x.address.suburb)}

   Postal Address: ${x.display_name}
    `) } );
}
function km(h){
    let [qqw,th] = oi()
    if(document.getElementsByClassName("guess-map__canvas-container")[0] === undefined){mn([qqw,th]);return;}
    if(h){qqw += (Math.random() / 2);th += (Math.random() / 2);}
    let wc = document.getElementsByClassName("guess-map__canvas-container")[0]
    let vvr = Object.keys(wc)
    let er = vvr.find(b => b.startsWith("__reactFiber$"))
    let fp = wc[er].return.memoizedProps.onMarkerLocationChanged
    fp({lat:qqw,lng:th})}
function mn([e,g]){
    let f = document.getElementsByClassName("region-map_map__7jxcD")[0]
    let lllk = Object.keys(f)
    let u = lllk.find(key => key.startsWith("__reactFiber$"))
    let fg = f[u].return.memoizedProps.onRegionSelected
    v(e,g).then(cx => {let countryCode = cx.address.country_code
        fg(countryCode)})
}
function oi(){
    let ww = document.getElementsByClassName("styles_root__3xbKq")[0]
    let e = Object.keys(ww)
    let u = e.find(key => key.startsWith("__reactFiber$"))
    let w = ww[u]
    let qwqa = w.return.memoizedProps.panorama.position
    return([qwqa.lat(),qwqa.lng()])
}
function vn(){
    let [xz,bt] = oi()
    if(!xz||!bt){return;}
    window.open(`https://www.google.com/maps/place/${xz},${bt}`);
}
function hr(){
    const ecc = wer().distance
    if(ecc === null){return;}
    const lll = Math.round(ecc / 1000)
    const th = Math.round(lll * 0.621371)
    alert(`Enemy guess is ${lll} km (${th} miles) away.`)
}
function wer(){
    const jjh = document.getElementsByClassName("game_layout__TO_jf")[0]
    const hhj = Object.keys(jjh)
    const hjh = hhj.find(key => key.startsWith("__reactFiber$"))
    const jhjh = jjh[hjh]
    const jhj = jhjh.return.memoizedProps.gameState.teams
    const jjjh = mnbv(jhj,veec())
    const hhjh = jjjh.players[0].guesses
    const jhgj = hhjh[hhjh.length-1]
    if(!ILILILLI(jhjh.return.memoizedProps.gameState,hhjh)){
        alert("Error!: The user has not guessed this round.")
        return null;
    }
    return jhgj
}
function veec(){
    const vece = document.getElementsByClassName("user-nick_root__DUfvc")[0]
    const vcee = Object.keys(vece)
    const ecve = vcee.find(key => key.startsWith("__reactFiber$"))
    const ceev = vece[ecve]
    const eevc = ceev.return.memoizedProps.userId
    return eevc
}
function mnbv(mnmm, mnnb){
    const mn = mnmm[0].players[0].playerId
    if(mn !== mnnb){
        return mnmm[0]
    }
    else{
        return mnmm[1]
    }
}
function ILILILLI(ilil, lilil){
    const li = ilil.currentRoundNumber
    const il = lilil ? lilil.length : 0;
    return li === il
}

function ufsfj(h){
    const w = oi()
    const gf = w[0] * (Math.PI / 180)
    const fg = w[1] * (Math.PI / 180)
    const y = document.getElementsByClassName("guess-map__canvas-container")[0]
    const c = Object.keys(y)
    const x = c.find(key => key.startsWith("__reactFiber$"))
    const t = y[x]
    const b = h ?? t.return.memoizedProps.markers[0]
    if(!w || !b){
        return null
    }
    const ik = b.lat * (Math.PI / 180)
    const ki = b.lng * (Math.PI / 180)
    return Math.acos(Math.sin(gf)*Math.sin(ik) + Math.cos(gf) * Math.cos(ik) * Math.cos(ki - fg)) * 6371
}

function ed(r){
    let ii = Math.round(ufsfj(r))
    if(ii === null){
        alert("Unable to fetch coordinates. Perhaps you have placed a marker this round?")
        return
    }
    let g = `${ii} km (${Math.round(ii * 0.621371)} miles)`
    frf(g)
    //alert(`Your marker is ${distance} km (${Math.round(distance * 0.621371)} miles) away from the correct guess`)
}

function frf(e){
    let x = document.getElementsByClassName("button_wrapper__NkcHZ")[1]
    x.innerText = e
}


let h = (e) => {
    if(e.keyCode === 49){km(true)}
    if(e.keyCode === 50){km(false)}
    if(e.keyCode === 51){qq()}
    if(e.keyCode === 52){vn()}
    if(e.keyCode === 53){hr()}
    if(e.keyCode === 54){ed()}
}
document.addEventListener("keydown", h);