Are you tired of getting the latitude correctly but not the longitude? This script will show the TRUE score of your guess.
// ==UserScript==
// @name LatitudeGuessr
// @include /^(https?)?(\:)?(\/\/)?([^\/]*\.)?geoguessr\.com($|\/.*)/
// @version 0.0.4
// @description Are you tired of getting the latitude correctly but not the longitude? This script will show the TRUE score of your guess.
// @author semihM (aka rhinoooo_)
// @source https://github.com/semihM/GeoGuessrScripts/blob/main/LatitudeGuessr
// @supportURL https://github.com/semihM/GeoGuessrScripts/issues
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @grant GM_addStyle
// @namespace https://greasyfork.org/users/851187
// ==/UserScript==
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const DEBUG_ENABLED = false // true: Console print enabled for debugging; false: Don't print any debug information
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const _storage_checked = "RealScoreChecked"
const _id_realscore = "latitude_score"
const _class_roundResult_5roundGame = "round-result_actions__5j26U"
const _class_endResult_5roundGame = "streak-round-result_progressSection__6jL1y"
const SummaryLoadingPlaceHolderInnerHtml = `<div id="` + _id_realscore + `" style="text-align:center">Calculating the true score...</div><br>`
let checked = parseInt(sessionStorage.getItem("RealScoreChecked"), 10);
let guessed_latitude = 0
let real_latitude = 0
if(sessionStorage.getItem("RealScoreTotal") == null) {
sessionStorage.setItem("RealScoreTotal", 0);
};
if(sessionStorage.getItem("RealScoreChecked") == null) {
sessionStorage.setItem("RealScoreChecked", 0);
checked = 0;
};
function debug(obj)
{
if(DEBUG_ENABLED) console.log(obj)
}
function getLocationObject()
{
const game_tag = window.location.href.substring(window.location.href.lastIndexOf('/') + 1)
const api_url = "https://www.geoguessr.com/api/v3/games/"+game_tag
return fetch(api_url)
.then(res => res.json())
}
function SetDisplayFact()
{
getLocationObject()
.then(loc => {
debug("]real_loc: ")
debug(loc)
if ( loc.player.guesses.length == 1 ) sessionStorage.setItem("RealScoreTotal", 0)
real_latitude = loc.rounds[loc.player.guesses.length - 1].lat
guessed_latitude = loc.player.guesses[loc.player.guesses.length - 1].lat
setRealScoreInnerHtml();
})
}
function calculate_real_score()
{
let f = Math.abs(real_latitude - guessed_latitude)
if (f <= 1.0001) return 5000.0
else if (f > 15) return 0
else return Math.round(5000.0 / f)
}
function setRealScoreInnerHtml()
{
let score = calculate_real_score()
sessionStorage.setItem("RealScoreTotal", parseInt(sessionStorage.getItem("RealScoreTotal"), 10) + score)
let str = `<br><h2 style="color: cyan">REAL SCORE(LatitudeGuessr)</h2><h3 style="font-size: 30px">${score}</h3><hr>` +
'<div style="color: orange">Guessed Latitude: </div>' + guessed_latitude + "<hr>" +
'<div style="color: lightgreen">Real Latitude: </div>' + real_latitude + "<hr>"
debug("calculated " + score)
debug("total " + sessionStorage.getItem("RealScoreTotal"))
document.getElementById(_id_realscore).innerHTML = str;
}
// 5 round game round summary div or null
function get5RoundGameSummaryDiv()
{
let div = document.getElementsByClassName(_class_roundResult_5roundGame);
if (div.length == 0) return null
else return div[0]
}
function get5RoundGameSummaryEndDiv()
{
let div = document.getElementsByClassName(_class_endResult_5roundGame);
if (div.length == 0) return null
else return div[0]
}
function set5RoundGameSummaryDivPlaceHolder()
{
let newDiv1 = document.createElement("div")
let parent = get5RoundGameSummaryDiv();
parent.insertBefore(newDiv1, parent.firstElementChild);
newDiv1.innerHTML = SummaryLoadingPlaceHolderInnerHtml;
}
function set5RoundGameSummaryDivPlaceHolderEnd()
{
let newDiv1 = document.createElement("div")
let parent = get5RoundGameSummaryEndDiv();
parent.insertBefore(newDiv1, parent.firstElementChild);
newDiv1.innerHTML = `<hr><h2 id="`+_id_realscore+`" style="color: cyan">REAL SCORE TOTAL(LatitudeGuessr)</h2><h3 style="font-size: 30px">${sessionStorage.getItem("RealScoreTotal")}</h3><hr>`;
}
function scoreCheckStateAttempt(newDiv1) {
if(document.getElementById(_id_realscore) || !isInValidGameLocation()) return
if (get5RoundGameSummaryDiv()) set5RoundGameSummaryDivPlaceHolder()
else if (get5RoundGameSummaryEndDiv()) set5RoundGameSummaryDivPlaceHolderEnd()
};
function isInValidGameLocation()
{
return location.pathname.startsWith("/game/");
}
function isRealScoreAlreadyChecked()
{
return sessionStorage.getItem(_storage_checked) != 0
}
function scoreCheckState()
{
if (!!document.querySelector('.result-layout_root__NfX12') && isInValidGameLocation() && !isRealScoreAlreadyChecked()){
SetDisplayFact();
checked = checked + 1;
sessionStorage.setItem(_storage_checked, checked);
}
else if (!document.querySelector('.result-layout_root__NfX12') && isInValidGameLocation() && isRealScoreAlreadyChecked()) {
checked = 0;
sessionStorage.setItem(_storage_checked, checked)
};
}
function tryFactCheck()
{
scoreCheckState();
setTimeout(scoreCheckState, 250);
setTimeout(scoreCheckState, 500);
setTimeout(scoreCheckState, 1200);
setTimeout(scoreCheckState, 2000);
setTimeout(scoreCheckStateAttempt,300);
setTimeout(scoreCheckStateAttempt,500);
setTimeout(scoreCheckStateAttempt,1200);
setTimeout(scoreCheckStateAttempt,2000);
};
document.addEventListener('click', tryFactCheck, false);