Greasy Fork is available in English.

Behind PB Sound Script

plays a warning sound when you are behind your personal best (PB)

Verze ze dne 11. 06. 2019. Zobrazit nejnovější verzi.

  1. // ==UserScript==
  2. // @name Behind PB Sound Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description plays a warning sound when you are behind your personal best (PB)
  6. // @author Oki
  7. // @match https://*.jstris.jezevec10.com/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. /**************************
  12. Behind PB Sound Script
  13. **************************/
  14.  
  15. localStorage.pbSound = localStorage.pbSound || "0";
  16. localStorage.mapSound = localStorage.mapSound || "0"
  17.  
  18. var pbText = "If enabled, the finesse fault sound will played when falling behind your personal best time in sprint, cheese or a map (page refresh required)"
  19. var mapText = "If enabled, the finesse fault sound will play when falling behind the global best time in a map (page refresh required)"
  20.  
  21. var pbOption = document.createElement("table");
  22. pbOption.innerHTML = '<tbody><tr><td><input onclick="localStorage.pbSound^=1" type="checkbox" id="pbToggle"></td><td><label for="pbToggle">Behind PB sound</label></td></tr><tr><td></td><td><span class="settingsDesc">'+pbText+'</span></td></tr></tbody>'
  23. tab_other.appendChild(pbOption)
  24.  
  25. var mapOption = document.createElement("table");
  26. mapOption.innerHTML = '<tbody><tr><td><input onclick="localStorage.mapSound^=1" type="checkbox" id="mapToggle"></td><td><label for="mapToggle">Behind map record sound</label></td></tr><tr><td></td><td><span class="settingsDesc">'+mapText+'</span></td></tr></tbody>'
  27. tab_other.appendChild(mapOption)
  28.  
  29. pbToggle.checked = +localStorage.pbSound
  30. mapToggle.checked = +localStorage.mapSound
  31.  
  32.  
  33. if(+localStorage.pbSound || +localStorage.mapSound){
  34.  
  35. var globalBest;
  36. var personalBest;
  37. var oldTimerValue = 0.00;
  38. var currentTimerValue = 0.00;
  39. var username = document.getElementsByClassName("navbar-right")[0].children[0].children[0].innerText.slice(0,-1)
  40. var website = "https://jstris.jezevec10.com/"
  41. var snd = new Audio(website + "res/se0/fault.wav");
  42.  
  43. var url = window.location.href
  44. var parts = /.*\=(\d)&(.*)\=(\d+)/g.exec(url)
  45. var leaderboardUrl = website;
  46.  
  47.  
  48. if(parts[2] == "map") {
  49. leaderboardUrl += "map/" + parts[3]
  50. } else if(parts[2] == "mode") {
  51. if(parts[1] == 1) {
  52. leaderboardUrl += "sprint?display=4&lines="+[,40,20,100,1000][parts[3]]+"L"
  53. } else if(parts[1] == 3) {
  54. leaderboardUrl += "cheese?display=4&lines="+[,10,18,100][parts[3]]+"L"
  55. }
  56. }
  57.  
  58. if(leaderboardUrl != website) {
  59. var xhr = new XMLHttpRequest();
  60. xhr.onload = function() {
  61.  
  62. globalBest = Infinity
  63. personalBest = Infinity
  64.  
  65. var tableEntries = this.responseXML.getElementsByClassName("table")[0].children[1].children
  66.  
  67. for (var i = 0; i < tableEntries.length-1; i++) {
  68. var row = tableEntries[i].innerText.replace(/ /g,"").split("\n")
  69. if(i==0){globalBest = timeStringToMs(row[7])}
  70. if(row[4] == username){personalBest = timeStringToMs(row[7])}
  71. }
  72.  
  73. window.setInterval(()=>{
  74.  
  75. oldTimerValue = currentTimerValue
  76. currentTimerValue = timeStringToMs(clock.innerText);
  77.  
  78. var personalSurpassed = (oldTimerValue <= personalBest) && (currentTimerValue >= personalBest)
  79. var globalSurpassed = (oldTimerValue <= globalBest) && (currentTimerValue >= globalBest)
  80.  
  81. if(+localStorage.SE) {
  82. if(parts[2] == "map"){
  83. if(+localStorage.pbSound)personalSurpassed&&snd.play()
  84. if(+localStorage.mapSound)globalSurpassed&&snd.play()
  85. } else {
  86. if(+localStorage.pbSound)globalSurpassed&&snd.play()
  87. }
  88. }
  89.  
  90. }, 200);
  91.  
  92. }
  93. xhr.open("GET", leaderboardUrl);
  94. xhr.responseType = "document";
  95. xhr.send();
  96. }
  97. }
  98.  
  99.  
  100. function timeStringToMs(s) {
  101. var totalTime=0,parts;~s.indexOf(":")&&(parts=s.split(":"),totalTime+=6E4*parts[0],s=parts[1].slice(0));
  102. ~s.indexOf(".")&&(parts=s.split("."),totalTime+=+(parts[1]+"00").substr(0,3),s=parts[0].slice(0));
  103. return(totalTime+1E3*s);
  104. }