Nitro Type Leaderboards Overlay

View NT leaderboards natively on Nitro Type, Nitro Race, and Nitro Math

安裝腳本?
作者推薦腳本

您可能也會喜歡 NTL Ban Check for NT & NM

安裝腳本
  1. // ==UserScript==
  2. // @name Nitro Type Leaderboards Overlay
  3. // @namespace https://ntleaderboards.onrender.com
  4. // @version 4.4
  5. // @description View NT leaderboards natively on Nitro Type, Nitro Race, and Nitro Math
  6. // @author [NTPD1]Captain.Loveridge // adapted from Ginfino's Code
  7. // @match https://www.nitrotype.com/*
  8. // @match https://www.nitrotype.com/race/*
  9. // @match https://www.nitromath.com/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15.  
  16. function embedLeaderboards(event) {
  17. if (event) event.preventDefault();
  18.  
  19. if (!document.getElementById('leaderboardsIframe')) {
  20. const iframe = document.createElement('iframe');
  21. iframe.id = 'leaderboardsIframe';
  22. iframe.src = 'https://ntleaderboards.onrender.com';
  23. iframe.style.position = 'fixed';
  24. iframe.style.top = '0';
  25. iframe.style.left = '0';
  26. iframe.style.width = '100%';
  27. iframe.style.height = '100%';
  28. iframe.style.border = 'none';
  29. iframe.style.zIndex = '9999';
  30.  
  31. const closeButtonContainer = document.createElement('div');
  32. closeButtonContainer.style.position = 'fixed';
  33. closeButtonContainer.style.top = '0';
  34. closeButtonContainer.style.right = '0';
  35. closeButtonContainer.style.width = '70px';
  36. closeButtonContainer.style.height = '70px';
  37. closeButtonContainer.style.zIndex = '10001';
  38. closeButtonContainer.style.pointerEvents = 'auto';
  39.  
  40. const closeButton = document.createElement('img');
  41. closeButton.src = 'https://res.cloudinary.com/dxgejwplx/image/upload/v1740041586/Red_X_ltzgdy.png';
  42. closeButton.alt = 'Close Leaderboards';
  43. closeButton.style.position = 'absolute';
  44. closeButton.style.top = '10px';
  45. closeButton.style.right = '10px';
  46. closeButton.style.width = '50px';
  47. closeButton.style.height = '50px';
  48. closeButton.style.cursor = 'pointer';
  49.  
  50. closeButton.onclick = function () {
  51. document.body.removeChild(iframe);
  52. document.body.removeChild(closeButtonContainer);
  53. };
  54.  
  55. closeButtonContainer.appendChild(closeButton);
  56. document.body.appendChild(iframe);
  57. document.body.appendChild(closeButtonContainer);
  58. }
  59. }
  60.  
  61. function insertLeaderboardButton() {
  62. const navList = document.querySelector('.nav-list');
  63. if (navList && !document.querySelector('.nt-custom-tab-leaderboards')) {
  64. const li = document.createElement('li');
  65. li.className = 'nav-list-item nt-custom-tab-leaderboards';
  66. li.innerHTML = `
  67. <a href="#"
  68. class="nav-link"
  69. id="leaderboardsLink_unique">
  70. Leaderboards
  71. </a>
  72. `;
  73.  
  74. // Find the "Achievements" and "News" buttons
  75. const achievementsButton = Array.from(navList.children).find((child) =>
  76. child.textContent.trim().includes('Achievements')
  77. );
  78. const newsButton = Array.from(navList.children).find((child) =>
  79. child.textContent.trim().includes('News')
  80. );
  81.  
  82. // Insert the new button between "Achievements" and "News" if both exist
  83. if (achievementsButton && newsButton) {
  84. navList.insertBefore(li, newsButton);
  85. } else {
  86. // Fallback: insert at the end if buttons not found
  87. navList.appendChild(li);
  88. }
  89.  
  90. document
  91. .getElementById('leaderboardsLink_unique')
  92. .addEventListener('click', embedLeaderboards);
  93. }
  94. }
  95.  
  96. function observeNavList() {
  97. const observer = new MutationObserver((mutations, obs) => {
  98. const navList = document.querySelector('.nav-list');
  99. if (navList) {
  100. insertLeaderboardButton();
  101. if (document.querySelector('.nt-custom-tab-leaderboards')) {
  102. obs.disconnect();
  103. }
  104. }
  105. });
  106.  
  107. observer.observe(document.body, {
  108. childList: true,
  109. subtree: true,
  110. });
  111. }
  112.  
  113. // Try to insert the button immediately
  114. insertLeaderboardButton();
  115.  
  116. // If immediate insertion fails, set up the observer
  117. if (!document.querySelector('.nt-custom-tab-leaderboards')) {
  118. observeNavList();
  119. }
  120. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址