GeoGuessr Ultimate Script

GeoGuessr Ultimate Script - One Script to rule them all

当前为 2020-08-02 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name GeoGuessr Ultimate Script
  3. // @version 0.4
  4. // @description GeoGuessr Ultimate Script - One Script to rule them all
  5. // @author MrAmericanMike
  6. // @include /^(https?)?(\:)?(\/\/)?([^\/]*\.)?geoguessr\.com($|\/.*)/
  7. // @grant none
  8. // @run-at document-start
  9. // @namespace https://greasyfork.org/en/scripts/406060-geoguessr-ultimate-script
  10. // ==/UserScript==
  11.  
  12. console.log("GeoGuessr Ultimate Script");
  13.  
  14. // MODULES // Set from 'true' to 'false' any module that you don't need. Example: removeTopBar = false;
  15.  
  16. // REMOVE BOTTOM WHITE BAR WHILE PLAYING A MAP
  17. let removeBottomBar = true;
  18.  
  19. // REMOVE RIGHT WHITE BAR ON ROUND RESULTS SCREEN
  20. let removeRightBar = true;
  21.  
  22. // MAKE A CLEANER STREETVIEW BY REMOVING TOP BAR
  23. let removeTopBar = true;
  24.  
  25. // REPLACE FLAGS AT THE END OF A GAME WITH NUMBERED FLAGS
  26. let replaceFlags = true;
  27.  
  28. // PIMP MY DATA
  29. let pimpData = true;
  30.  
  31. let floatData = "RIGHT"; // Where to place the logo on screen (Valid options "LEFT" "RIGHT")
  32.  
  33. let dataMargin = "0.5rem"; // Horizontal margin from the side of the window [default value is "2.0rem"] (https://www.w3schools.com/cssref/css_units.asp)
  34. let topMargin = "0.5rem"; // Vertical margin from top of the window [default value is "1.0rem"] (https://www.w3schools.com/cssref/css_units.asp)
  35.  
  36. let bgColor = "rgba(255, 255, 255, 0.55)"; // RGBA COLOR (https://www.hexcolortool.com/)
  37. let titlesColor = "#6695EF"; // Titles color on the data panel in HEX
  38. let dataColor = "#EF6695"; // Data color on the data panel in HEX
  39.  
  40.  
  41.  
  42. // HIDE FOOTPRINT - (This is where photospheres author would show)
  43. let hideFootprint = true;
  44.  
  45.  
  46. // GEOGUESSR LOGO
  47. let adjustLogo = true;
  48.  
  49. let floatLogo = "LEFT"; // Where to place the logo on screen (Valid options "LEFT" "CENTER" "RIGHT")
  50.  
  51. let logoTopMargin = "0.25rem"; // Margin from top of the window (https://www.w3schools.com/cssref/css_units.asp)
  52. let logoOpacity = "0.5"; // Value going from 0.0 to 1.0 (0.0 represents fully transparent)
  53.  
  54.  
  55.  
  56.  
  57. // *******************************
  58. // NO NEED TO EDIT BELOW THIS LINE
  59. // *******************************
  60.  
  61.  
  62.  
  63. //IMAGES
  64. const IMAGES = [
  65. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAACjUlEQVR4nO2aT4hNURzHf1cTMVn4GzWUkoWUhVIsxIYVg7KwEaYGpZCkKItBzZQkSixkMjUkCxaKrSxYyv8/G2IhiiQl8XyOc5n7NPPc7n3nfa/mfOrTu2+65/1+9/vuPfe9M6+tVqvZaKZN3YCaGIC6ATUxAHUDamIA6gbUxADUDaiJAagbUBMDUDegJnQAy3ErLsYJ+Biv4wB+CFw7F6UC4Kv0dh5WpU/PJklyI92e6Z7j6r+GzMKVeARPY5+Jgyh7BizEten2zfRxGV7BaQ3GTcT92I3H8CR+LlB/DP4oMO4PIS6Bfmt88Fkm4VHchcfNnzUfc46dj+vNn02FCRFAUmDMdOzFg3jRfIh3bfh3dzxuw8M4WKzFIap2F3CXRnfqe7yFT/Cd+Ul0gfk5Z3KzClYtgCxTzZ/iQalyAC0hBqBuQE0MQN2AmhiAugE1MQB1A2piAIFf/ymexzv4FefhGvPrBGMD185FqAA+4T48h98zf3dBXMAO3Is7cFygHnIRIoCHuBtfNNjnNe7BE3gINwXq5Z+EKLoOv+Xc9yV2mV8aO4AbLf+l8cb8SlIpQgSQ9+CzPMPN5hdEutLtOSPs6xZJLps/y94WqFVH1e4C7l3tSXWLHytwLs7AL/gIr5kPrClULYAsD1KDUuUAWkJVAmjHTlyKO1tZWBmAm+3dP0nczO8O3oXwvNVNKAJYYv6+vwGnCOrXoQjgFC4S1B2WqswBMlQBuI/Cl/A2XhX18AtFAFvMf19wn+hmC+rXoQjgvqDmiMQ5QN2AmhhAyfFnbOiXIfdKvpaEUgEkSeIO+r888N/ES0DdgJoYgLoBNTEAcf1XVuxndU1DHYCcGIC6ATUxAHUDakZ9AD8BXfpYQy3tLQsAAAAASUVORK5CYII=',
  66. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAADRklEQVR4nO2aW4gPURzHf8NGbg+uuSaRcilKEQ9aJbyQdXkgIVvr8uCSpJDkEltaIkK5hBAeeBBCiRe8KeuWktsDNndqib/vr3PG/+z47+78Z/ac37R7vvVpZs7O7Pme7//M5ZyZklwuRy1ZJdIGpOUDkDYgLR+AtAFp+QCkDUjLByBtQFo+AGkD0vIBSBuQlu0ASsEiMBq0B4/AJXACfLRcdyylCgBD6SVYTNabB4MguKLXe/E2mBo5pB+YBLaC/aCShINI2wNGgOl6/apejgfnQfcGjusE1oIKsBPsAd8S1N8K/Elw3D/ZOAWOUcONN9UZbAMrQBWpXvMp5rFDwQxSvSmxbAQQJDimB9gB1oPTpEK8S4V/3XZgMdgCTiWzmFfW7gJ8alRoasAt8Bi8J3URHU7qmtOlqSrMWgCmupHq4laV5QCcyAcgbUBaPgBpA9LyAUgbkJYPQNqAtHwAlv//E3AU3AG1YDCYRmqeoI3lumPJVgBfwBpwGPw2yjmI46AvWA2WgraWPMSSjQCqwUrwrIF9XoNVYDfYCOZb8tKobFRaBn7F3PcFKCc1NbYOzKH4p8YbUjNJqWQjgLiNN/UULCQ1IVKu1wfUsy9Pkpwl1cveJqirjrJ2F+BfdbOGJz8mgEGgJ/gBHoKLpAJrEmUtAFMPNFaV5QCcSCKArmAeqZcmvXXZK3ADnARfXZpxHcBscAR0jJTzm6OZYBOpC+BlV4ZcBzCO/m+8KZ4evwAmgtsuDEldA36Ce+AlqUbz1b61/hs/B+wFI10YcR0AN3w7qbdANUZ5KbhO+RD4lRs/Bzy3bch1APzYW1ug/CapHjHWKOtDzTCAQo0PFfXywaaR+iqV0kAwyth+R2oobV1ZCWAXqVfdoaLDaGvKQgALqO6HFPwitNJV5dIBDAH7ImXLwWdXBtIGcIDyX4bcL/LYDuCcXobib4fOpPRUlFIFEAQBN7rYhoc6BIYZ2zzUXZbGTxJJnQLc0LnGNn8fNIuSfSeUShIB8MCnKlJ2DYzRhPpO6hSxKtcB8FCYp7OiM8FlGlM8cdqsAuD7PI/3+zuss1G5DGADmOKwvlhyGUA42ZkpST8IicsHIG1AWj4AaQPSavEB/AXGOn2ApXeUpQAAAABJRU5ErkJggg==',
  67. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAADe0lEQVR4nO2aW4hNURjHv80gooxbI/diHiQeRh5dHoxShLyMB51Mjcs8DMklyoNbppgmSjy4RCiXoijKk5RLKOUyLi+EwjQkKdfj//nWYc+ZM2f27H3W+nZZ//p19uXss779P3utvda3Vlk2m6X/WWXaAWjLG6AdgLa8AdoBaMsboB2AtrwB2gFoyxugHYC2vAHaAWjLtgEzwTIwDfQDj8ElcBx8sFx2JCUyAEPpFfiYY3YPBkFw2WwP530wL++SUaAabAf7QSMpG5H0CZgCFpjtK+ZzOjgLhha5bgDYAOrAbrAXfI5Rfg/wK8Z1f2WjChyl4jcfVjnYARpAE8lT8zHitRPBIpKnKbZsGBDEuGYY2AU2g1MkJt6iwv9uX7AcbAMn44X4T2l7C3DVqDO0gmugBbwnaUQnkbQ5g0pVYNoMCGsIySNuVWk2wIm8AdoBaMsboB2AtrwB2gFoyxugHYC2vAGWf/8JOAJugq+gEswnyRP0tlx2JNky4BNYBw6Bn6HjbMQxMBKsBStBH0sxRJINAx6C1eB5ke+8AmtAM9gCllqKpUvZKHQh+B7xuy9ALUlqbBOooehV4zVJJimRbBgQ9ebDegoyJAmRWrM9rpPvcpLkNMlT9jZGWe2UtrcA/6tbDZz8mAXGgwrwBTwCF0gMK4nSZkBYDwxWlWYDnEjLgKkkkyZjQS/wDtwmSa1/cxmIhgEnwJJOzrERG0k6T06kYcCYIuc4PX6YZGZpp4tgNNuANvDMxDCZpCrkxG+BM+a8VWkYwNNm3A3mOp9bpzsaXAUTzH5PkvFCk+1gNAxoLnDsJTgA9oSODXQRTJpegxV5+3dcFKppADd4PLvL01z8uDeEzt0gWUdgXZoG8Jxfed6xXD+/ntoPo60pTVWAxTPLgw1tLgrUNIDrOM8G83R3pflkA2aD66CKJG9gVUkN4JY7tzLkfjevrQ5t9wf7SIbBLG4fOD+wKklwUZTIgCAI+Ka7e+OFxMtjuAucCR2bUYLf7VKuqwB3gHgFyJsC50bk7TvJFbo2IEPSxz8HLpKM9/nfr6KOff+7LgLSaAQ551dj6EycVmt0EYxrA6IsaeN8AC+uvGc5lj9ybcBckh7fYuqY9OSqcJ5k2VyLq4BcG8BJz/UGXgTFo0B+/+eGxj8cx6PaEWo1qCptXWHn8gZoB6Atb4B2ANr6DQSNiEWFKZLTAAAAAElFTkSuQmCC',
  68. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAADCklEQVR4nO2aW4hNURjHv63JrZQRE+GBJEl5kyeXF14QyoOXCaNxeXBtKOTBrSFJklwSUUhSHhRPbiXeKMYlDxQhioRIjP9nrWP2OY1ztr1nrf+qs3716+w9Z+9Z3/6fvc8+e63V0NnZKfVMA7sANjEAdgFsYgDsAtjEANgFsIkBsAtgEwNgF8AmBsAugI3rAKbBJXAS7A8fwcvwNPzguO1MFAoAj9LL8TLTrh5JkuSKXR6m63B2xS4j4Qy4Ax6Cu4UcRNEzYCKca5ev2tcp8AIcUmW/AXAjbIV74QH4OUf7veCvHPv9xcUlcFKqH3yaRrgTrob7xJw1HzPuOx7OF3M25cZFAEmOfZpgO9wMz4oJ8a50/+n2g8vgdngmX4ldhHYX0Euj1foe3oSP4TsxX6ITxHznDOqpBkMLIM1gMae4U0IOwAsxAHYBbGIA7ALYxADYBbCJAbALYBMDcPz/n8AT8A78DsfCOWL6CXo7bjsTrgL4BNvgcfgz9XcN4hQcAdfDFbCPoxoy4SKAh3ANfFZlm5dwLdwPt8JmR7XUxEWj8+CPjNu+gC1iusY2wYWS/dJ4JaYnqRAuAsh68GmewkViOkRa7PKof2yrnSTnxZxlb3O0VUZodwH9VLdZtfNjOhwDh8KvsANeEhNYjxBaAGkeWJ0ScgBeCCWAqWK6x0voLfS6j4ZDCKAvPCrmR1KJRl+NhxDAFik/eK+wA9Bv+jZmAcwAdFjrmJCfCZgBrIST7bJOWM4zolQYVgA6Srwrta7D5c2MQlgBHBQzDKboz9obUkcBLBDTJ6DoSLCODM8i1PEH3wEMlPInOJ0j8EZI17/iO4A9Yh5slFti7gJUigZwWLpmhtyvsa3OHFmaWh8Ob9vlpoptda7ABvhNzBOhMwoFkCSJHnStA1e020tnf6RP9dHW7ij9MvySv7ps+LoEtKNjnKe2/gtfAZyDF6u8vxiuSq2vg9ek4ASoLPgKoKPG+68r1p/De25KKYf9MEQnBsAuwNJu9U4oAdCIAbALYBMDYBfApu4D+A30N2yf3VLhEwAAAABJRU5ErkJggg==',
  69. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAADUUlEQVR4nO2aW4hNURjHv61xjeQaRSJRTCkPXpR44UHk9sKDZGpQCknCNMml0JCIeBARIk15EB68eHJ5Um4jD0chlwmDRpPL+H/WambP7lyWffa3vl2z/vXrnH3O2mf99/+svfY53141nZ2d1JtVo21AWyEAbQPaCgFoG9BWCEDbgLZCANoGtBUC0DagrRCAtgFtSQcwF6wFs8Ag8AzcABfAZ+G+nVRVAPgrvR4PC+zm6SiKbtnnY3kbLErsMh7MB/vASXCQlIOodgTMAEvs89v2cQ64BkaV2W8I2A7qQRM4Br6n6L8P+JNivy5JnALnqPzBxzUM7AebwBEyo+aL477TwDIyoym1JAKIUuwzGhwAu8BlMiHep+Lf7kCwDuwFl9JZ7FbergJ8atRbWsFd8Bx8JDOJ1pKZc4Zn1WHeAohrJJkhLqo8B+BFIQBtA9oKAWgb0FYIQNuAtkIA2ga0FQIQ/vwWcBbcAx1gClhMpk7QT7hvJ0kF8BVsA2fA79jrHMR5MA5sBRtAfyEPTpII4AnYDF6WafMabAFHQSNYLeSloiQ6XQp+OrZ9BerIlMZ2gpXkfmq8IVNJqkoSAbgefFwvwBoyBZE6+3xiibZcJLlKZpS9T9FXD+XtKsDf6h4LFz/mgclgDGgHT8F1MoFlorwFENdji6jyHIAXaQTAw9ql1HUYFGSt6ATA9w02OrQ7IW2EpRGAa0X3k6gLK40ARiS2eWZvL9LOyy2zPATAP5wyu6z9r/IQQKuChy5pzwH8R8n1XqCItEcAL1W/QuZy9xDcBN98mvEdAPc3NLG9IrbNt8j5HyLf8e3wZcinePiXu3s8GDSQWVGyEPySNuQ7gB9gOWiz27yOYDqZRRa1sXa8ioSLJcelDVUbwCnqXhnyyKE9n9/NRV5vtOyOvbaK8h5AFEV80C4HXkk8GfJKkYaYpwkZfG5F+T4FeCXIhxLv8SkQ99NWol2m8h0Az/BTySyiegDekpn4ZoMdibZ3fBjyHQCv+phpKSeeK5rk7fgPIPkzuJj4XyD/NijIWjHyHQBPdLzCi2sCAxLvvQMXwSEqPU9kLt8BNFv6gklkRgRXefngC569/JNWTZBL5y1KffdQKIpqG9BWCEDbgLZ6fQB/AYF2gh8Ua2M5AAAAAElFTkSuQmCC'
  70. ];
  71.  
  72. setTimeout(executeRealTime, 1);
  73. setTimeout(executeRealTime, 500);
  74. setTimeout(executeRealTime, 1000);
  75.  
  76. //REAL TIME
  77. function executeRealTime(){
  78. if(removeBottomBar){
  79. doRemoveBottomBar();
  80. }
  81. if(removeRightBar){
  82. doRemoveRightBar();
  83. }
  84. if(removeTopBar){
  85. doRemoveTopBar();
  86. }
  87. if(pimpData){
  88. doPimpData();
  89. }
  90. if(hideFootprint){
  91. doHideFootprint();
  92. }
  93. if(adjustLogo){
  94. doAdjustLogo();
  95. }
  96. if(replaceFlags){
  97. changeFlags();
  98. }
  99. }
  100.  
  101. //BOTTOM BAR
  102. function doRemoveBottomBar(){
  103. addGlobalStyle(`
  104. .game-layout__in-game-ad {
  105. display: none;
  106. }
  107. `);
  108. }
  109.  
  110. //RIGHT BAR
  111. function doRemoveRightBar(){
  112. addGlobalStyle(`
  113. .result__right {
  114. display: none;
  115. }
  116. `);
  117. }
  118.  
  119. //TOP BAR
  120. function doRemoveTopBar(){
  121. if(window.location.pathname.includes("game") || window.location.pathname.includes("challenge")){
  122. addGlobalStyle(`
  123. .layout {
  124. --layout-header-height: 0rem;
  125. }
  126. .header__right{
  127. display: none;
  128. }
  129. .game-layout__panorama-canvas{
  130. height: 100%;
  131. }
  132. `);
  133. }
  134. else{
  135. addGlobalStyle(`
  136. .layout {
  137. --layout-header-height: 3rem;
  138. }
  139. .header__right{
  140. display: block;
  141. }
  142. `);
  143. }
  144. }
  145. // DATA
  146. function doPimpData(){
  147. switch(floatData){
  148. case "LEFT":
  149. addGlobalStyle(`
  150. .game-layout__status{
  151. top: ${topMargin};
  152. left: ${dataMargin};
  153. right: auto;
  154. }
  155. `);
  156. break;
  157. case "RIGHT":
  158. addGlobalStyle(`
  159. .game-layout__status{
  160. top: ${topMargin};
  161. right: ${dataMargin};
  162. left: auto;
  163. }
  164. `);
  165. break;
  166. }
  167. addGlobalStyle(`
  168. .game-statuses {
  169. background: ${bgColor};
  170. }
  171. .game-status__heading{
  172. color: ${titlesColor};
  173. }
  174. .game-status__body{
  175. color: ${dataColor};
  176. }
  177. `);
  178. }
  179.  
  180. // FOOTPRINT
  181. function doHideFootprint(){
  182. addGlobalStyle(`
  183. .gmnoprint, .gm-style-cc{
  184. display: none;
  185. }
  186. `);
  187. }
  188.  
  189. // GEOGUESSR LOGO
  190. function doAdjustLogo(){
  191. if(window.location.pathname.includes("game") || window.location.pathname.includes("challenge")){
  192. switch(floatLogo){
  193. case "LEFT":
  194. addGlobalStyle(`
  195. .header__left{
  196. margin-left: 0;
  197. }
  198. `);
  199. break;
  200.  
  201. case "CENTER":
  202. addGlobalStyle(`
  203. .header__left{
  204. margin-left: auto;
  205. }
  206. `);
  207. break;
  208.  
  209. case "RIGHT":
  210. addGlobalStyle(`
  211. .header__left{
  212. margin-left: auto;
  213. margin-right: 0;
  214. }
  215. `);
  216. break;
  217. }
  218. addGlobalStyle(`
  219. .header__logo{
  220. margin-top: ${logoTopMargin};
  221. opacity: ${logoOpacity};
  222. }
  223. `);
  224. }
  225. else{
  226. addGlobalStyle(`
  227. .header__left{
  228. margin-left: 0;
  229. }
  230. .header__logo{
  231. margin-top: auto;
  232. opacity: 1;
  233. }
  234. `);
  235. }
  236. }
  237.  
  238. //CHANGE FLAGS
  239. function changeFlags(){
  240. let flags = document.getElementsByClassName("pin__image");
  241.  
  242. if (flags.length === 5) {
  243. Array.prototype.forEach.call(flags, (flag, index) => {
  244. flag.src = IMAGES[index];
  245. });
  246. }
  247. }
  248.  
  249. // GLOBAL STYLES INJECTOR
  250. function addGlobalStyle(css) {
  251. let head;
  252. let style;
  253. head = document.getElementsByTagName('head')[0];
  254. if (!head) { return; }
  255. style = document.createElement('style');
  256. style.type = 'text/css';
  257. style.innerHTML = css.replace(/;/g, ' !important;');
  258. head.appendChild(style);
  259. }
  260.  
  261. //END