NBTHUB Bypass Native Key

Automatically clicks the next button on the specified page after 3 seconds.

目前为 2024-12-10 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name NBTHUB Bypass Native Key
  3. // @namespace OmegaLolBypasser
  4. // @namespace https://ads.luarmor.net/
  5. // @version 1.2
  6. // @description Automatically clicks the next button on the specified page after 3 seconds.
  7. // @author Your Name
  8. // @match *://loot-link.com/s?*
  9. // @match *://loot-links.com/s?*
  10. // @match *://lootlink.org/s?*
  11. // @match *://lootlinks.co/s?*
  12. // @match *://lootdest.info/s?*
  13. // @match *://lootdest.org/s?*
  14. // @match *://lootdest.com/s?*
  15. // @match *://links-loot.com/s?*
  16. // @match *://linksloot.net/s?*
  17. // @match https://ads.luarmor.net/get_key?for=Native_Main-FvLcrZfqqbWo
  18. // @match https://ads.luarmor.net/get_key?for=-FvLcrZfqqbWo
  19. // @icon https://www.google.com/s2/favicons?domain=luarmor.net
  20. // @grant none
  21. // ==/UserScript==
  22.  
  23. (function() {
  24. 'use strict';
  25.  
  26. const hostname = window.location.hostname;
  27.  
  28. if (hostname === 'ads.luarmor.net') {
  29. function waitForElement(selector, callback, interval = 100, timeout = 5000) {
  30. const startTime = Date.now();
  31. const timer = setInterval(() => {
  32. const element = document.querySelector(selector);
  33. if (element) {
  34. clearInterval(timer);
  35. callback(element);
  36. } else if (Date.now() - startTime > timeout) {
  37. clearInterval(timer);
  38. console.error(`Element with selector "${selector}" not found within timeout.`);
  39. }
  40. }, interval);
  41. }
  42.  
  43. waitForElement('#nextbtn', (button) => {
  44. console.log('Next button found. Waiting for 3 seconds...');
  45. setTimeout(() => {
  46. console.log('Clicking the button now.');
  47. button.click();
  48. }, 5000);
  49. });
  50.  
  51. }
  52. else if (['loot-link.com', 'loot-links.com', 'lootlink.org', 'lootlinks.co',
  53. 'lootdest.info', 'lootdest.org', 'lootdest.com',
  54. 'links-loot.com', 'linksloot.net'].includes(hostname)) {
  55. function decodeURI(encodedString, prefixLength = 5) {
  56. let decodedString = '';
  57. const base64Decoded = atob(encodedString);
  58. const prefix = base64Decoded.substring(0, prefixLength);
  59. const encodedPortion = base64Decoded.substring(prefixLength);
  60.  
  61. for (let i = 0; i < encodedPortion.length; i++) {
  62. const encodedChar = encodedPortion.charCodeAt(i);
  63. const prefixChar = prefix.charCodeAt(i % prefix.length);
  64. const decodedChar = encodedChar ^ prefixChar;
  65. decodedString += String.fromCharCode(decodedChar);
  66. }
  67.  
  68. return decodedString;
  69. }
  70.  
  71. (function() {
  72. 'use strict';
  73.  
  74. const waitForElementAndModifyParent = () => {
  75. const modifyParentElement = (targetElement) => {
  76. const parentElement = targetElement.parentElement;
  77.  
  78. if (parentElement) {
  79. const images = document.querySelectorAll('img');
  80. let countdownSeconds = 60;
  81.  
  82. for (let img of images) {
  83. if (img.src.includes('eye.png')) {
  84. countdownSeconds = 13;
  85. break;
  86. } else if (img.src.includes('bell.png')) {
  87. countdownSeconds = 30;
  88. break;
  89. } else if (img.src.includes('apps.png') || img.src.includes('fire.png')) {
  90. countdownSeconds = 60;
  91. break;
  92. } else if (img.src.includes('gamers.png')) {
  93. countdownSeconds = 90;
  94. break;
  95. }
  96. }
  97.  
  98. parentElement.innerHTML = '';
  99.  
  100. const popupHTML = `
  101. <div id="tm-overlay" style="position:fixed; top:0; left:0; width:100%; height:100%; z-index:999999; display:flex; justify-content:center; align-items:center; overflow:hidden;">
  102. <video autoplay loop muted style="position:absolute; object-fit:cover; width:100%; height:100%;">
  103. <source src="https://nbthub.netlify.app/background.mp4" type="video/mp4">
  104. </video>
  105. <div style="position:relative; z-index:1; text-align:center; color:white;">
  106. <center>
  107. <div id="tm-popup" style="padding:40px; background:rgba(255,255,255,0.8); border-radius:5px; box-shadow:0 2px 10px rgba(0,0,0,0.5);">
  108. <div id="countdown" style="margin-bottom:20px;">
  109. <h4>(รอ 60 วิ)</h4>
  110. </div>
  111. <a href="https://nbthub.netlify.app/" target="_blank" style="text-decoration:none;">
  112. <button id="nbthub-button" style="padding:10px 20px; background:#4CAF50; color:white; border:none; border-radius:5px; cursor:pointer; font-size:16px;">
  113. NBTHUB
  114. </button>
  115. </a>
  116. </div>
  117. </center>
  118. </div>
  119. </div>
  120. `;
  121.  
  122. const startCountdown = (duration) => {
  123. let remaining = duration;
  124. const countdownTimer = setInterval(() => {
  125. remaining--;
  126. document.getElementById('countdown').textContent = `(รอ ${remaining} วิ)`;
  127. if (remaining <= 0) clearInterval(countdownTimer);
  128. }, 1000);
  129. };
  130.  
  131. const spinnerCSS = `
  132. .wheel-and-hamster {
  133. --dur: 1s;
  134. position: relative;
  135. width: 12em;
  136. height: 12em;
  137. margin: auto;
  138. }
  139. .wheel,
  140. .hamster,
  141. .hamster div,
  142. .spoke {
  143. position: absolute;
  144. }
  145. .wheel,
  146. .spoke {
  147. border-radius: 50%;
  148. top: 0;
  149. left: 0;
  150. width: 100%;
  151. height: 100%;
  152. }
  153. .wheel {
  154. background: radial-gradient(100% 100% at center,hsla(0,0%,60%,0) 47.8%,hsl(0,0%,60%) 48%);
  155. z-index: 2;
  156. }
  157. .hamster {
  158. animation: hamster var(--dur) ease-in-out infinite;
  159. top: 50%;
  160. left: calc(50% - 3.5em);
  161. width: 7em;
  162. height: 3.75em;
  163. transform: rotate(4deg) translate(-0.8em,1.85em);
  164. transform-origin: 50% 0;
  165. z-index: 1;
  166. }
  167. .hamster__head {
  168. animation: hamsterHead var(--dur) ease-in-out infinite;
  169. background: hsl(30,90%,55%);
  170. border-radius: 70% 30% 0 100% / 40% 25% 25% 60%;
  171. box-shadow:
  172. 0 -0.25em 0 hsl(30,90%,80%) inset,
  173. 0.75em -1.55em 0 hsl(30,90%,90%) inset;
  174. top: 0;
  175. left: -2em;
  176. width: 2.75em;
  177. height: 2.5em;
  178. transform-origin: 100% 50%;
  179. }
  180. .hamster__ear {
  181. animation: hamsterEar var(--dur) ease-in-out infinite;
  182. background: hsl(0,90%,85%);
  183. border-radius: 50%;
  184. box-shadow: -0.25em 0 hsl(30,90%,55%) inset;
  185. top: -0.25em;
  186. right: -0.25em;
  187. width: 0.75em;
  188. height: 0.75em;
  189. transform-origin: 50% 75%;
  190. }
  191. .hamster__eye {
  192. animation: hamsterEye var(--dur) linear infinite;
  193. background-color: hsl(0,0%,0%);
  194. border-radius: 50%;
  195. top: 0.375em;
  196. left: 1.25em;
  197. width: 0.5em;
  198. height: 0.5em;
  199. }
  200. .hamster__nose {
  201. background: hsl(0,90%,75%);
  202. border-radius: 35% 65% 85% 15% / 70% 50% 50% 30%;
  203. top: 0.75em;
  204. left: 0;
  205. width: 0.2em;
  206. height: 0.25em;
  207. }
  208. .hamster__body {
  209. animation: hamsterBody var(--dur) ease-in-out infinite;
  210. background: hsl(30,90%,90%);
  211. border-radius: 50% 30% 50% 30% / 15% 60% 40% 40%;
  212. box-shadow:
  213. 0.1em 0.75em 0 hsl(30,90%,55%) inset,
  214. 0.15em -0.5em 0 hsl(30,90%,80%) inset;
  215. top: 0.25em;
  216. left: 2em;
  217. width: 4.5em;
  218. height: 3em;
  219. transform-origin: 17% 50%;
  220. transform-style: preserve-3d;
  221. }
  222. .hamster__limb--fr,
  223. .hamster__limb--fl {
  224. clip-path: polygon(0 0,100% 0,70% 80%,60% 100%,0% 100%,40% 80%);
  225. top: 2em;
  226. left: 0.5em;
  227. width: 1em;
  228. height: 1.5em;
  229. transform-origin: 50% 0;
  230. }
  231. .hamster__limb--fr {
  232. animation: hamsterFRLimb var(--dur) linear infinite;
  233. background: linear-gradient(hsl(30,90%,80%) 80%,hsl(0,90%,75%) 80%);
  234. transform: rotate(15deg) translateZ(-1px);
  235. }
  236. .hamster__limb--fl {
  237. animation: hamsterFLLimb var(--dur) linear infinite;
  238. background: linear-gradient(hsl(30,90%,90%) 80%,hsl(0,90%,85%) 80%);
  239. transform: rotate(15deg);
  240. }
  241. .hamster__limb--br,
  242. .hamster__limb--bl {
  243. border-radius: 0.75em 0.75em 0 0;
  244. clip-path: polygon(0 0,100% 0,100% 30%,70% 90%,70% 100%,30% 100%,40% 90%,0% 30%);
  245. top: 1em;
  246. left: 2.8em;
  247. width: 1.5em;
  248. height: 2.5em;
  249. transform-origin: 50% 30%;
  250. }
  251. .hamster__limb--br {
  252. animation: hamsterBRLimb var(--dur) linear infinite;
  253. background: linear-gradient(hsl(30,90%,80%) 90%,hsl(0,90%,75%) 90%);
  254. transform: rotate(-25deg) translateZ(-1px);
  255. }
  256. .hamster__limb--bl {
  257. animation: hamsterBLLimb var(--dur) linear infinite;
  258. background: linear-gradient(hsl(30,90%,90%) 90%,hsl(0,90%,85%) 90%);
  259. transform: rotate(-25deg);
  260. }
  261. .hamster__tail {
  262. animation: hamsterTail var(--dur) linear infinite;
  263. background: hsl(0,90%,85%);
  264. border-radius: 0.25em 50% 50% 0.25em;
  265. box-shadow: 0 -0.2em 0 hsl(0,90%,75%) inset;
  266. top: 1.5em;
  267. right: -0.5em;
  268. width: 1em;
  269. height: 0.5em;
  270. transform: rotate(30deg) translateZ(-1px);
  271. transform-origin: 0.25em 0.25em;
  272. }
  273. .spoke {
  274. animation: spoke var(--dur) linear infinite;
  275. background:
  276. radial-gradient(100% 100% at center,hsl(0,0%,60%) 4.8%,hsla(0,0%,60%,0) 5%),
  277. linear-gradient(hsla(0,0%,55%,0) 46.9%,hsl(0,0%,65%) 47% 52.9%,hsla(0,0%,65%,0) 53%) 50% 50% / 99% 99% no-repeat;
  278. }
  279.  
  280. /* Animations */
  281. @keyframes hamster {
  282. from, to { transform: rotate(4deg) translate(-0.8em,1.85em); }
  283. 50% { transform: rotate(0) translate(-0.8em,1.85em); }
  284. }
  285. @keyframes hamsterHead {
  286. from, 25%, 50%, 75%, to { transform: rotate(0); }
  287. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(8deg); }
  288. }
  289. @keyframes hamsterEye {
  290. from, 90%, to { transform: scaleY(1); }
  291. 95% { transform: scaleY(0); }
  292. }
  293. @keyframes hamsterEar {
  294. from, 25%, 50%, 75%, to { transform: rotate(0); }
  295. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(12deg); }
  296. }
  297. @keyframes hamsterBody {
  298. from, 25%, 50%, 75%, to { transform: rotate(0); }
  299. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(-2deg); }
  300. }
  301. @keyframes hamsterFRLimb {
  302. from, 25%, 50%, 75%, to { transform: rotate(50deg) translateZ(-1px); }
  303. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(-30deg) translateZ(-1px); }
  304. }
  305. @keyframes hamsterFLLimb {
  306. from, 25%, 50%, 75%, to { transform: rotate(-30deg); }
  307. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(50deg); }
  308. }
  309. @keyframes hamsterBRLimb {
  310. from, 25%, 50%, 75%, to { transform: rotate(-60deg) translateZ(-1px); }
  311. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(20deg) translateZ(-1px); }
  312. }
  313. @keyframes hamsterBLLimb {
  314. from, 25%, 50%, 75%, to { transform: rotate(20deg); }
  315. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(-60deg); }
  316. }
  317. @keyframes hamsterTail {
  318. from, 25%, 50%, 75%, to { transform: rotate(30deg) translateZ(-1px); }
  319. 12.5%, 37.5%, 62.5%, 87.5% { transform: rotate(10deg) translateZ(-1px); }
  320. }
  321. @keyframes spoke {
  322. from { transform: rotate(0); }
  323. to { transform: rotate(-1turn); }
  324. }
  325. `;
  326.  
  327. parentElement.insertAdjacentHTML('afterbegin', popupHTML);
  328.  
  329. startCountdown(countdownSeconds);
  330.  
  331. const style = document.createElement('style');
  332. style.type = 'text/css';
  333. style.innerHTML = spinnerCSS;
  334. document.getElementsByTagName('head')[0].appendChild(style);
  335. }
  336. };
  337.  
  338. localStorage.clear();for(let i=0;i<100;i++)if(54!==i){var e,$="t_"+i,t={value:1,expiry:new Date().getTime()+6048e5};localStorage.setItem($,JSON.stringify(t))}
  339.  
  340. const observer = new MutationObserver((mutationsList, observer) => {
  341. for (const mutation of mutationsList) {
  342. if (mutation.type === 'childList') {
  343. const foundElement = Array.from(document.querySelectorAll('body *')).find(element => element.textContent.includes("UNLOCK CONTENT"));
  344. if (foundElement) {
  345. modifyParentElement(foundElement);
  346. observer.disconnect();
  347. break;
  348. }
  349. }
  350. }
  351. });
  352.  
  353. observer.observe(document.body, {
  354. childList: true,
  355. subtree: true
  356. });
  357. };
  358.  
  359. if (document.readyState === 'loading') {
  360. document.addEventListener('DOMContentLoaded', waitForElementAndModifyParent);
  361. } else {
  362. waitForElementAndModifyParent();
  363. }
  364. })();
  365.  
  366. (function() {
  367. const originalFetch = window.fetch;
  368. window.fetch = function(url, config) {
  369. if (url.includes(`${INCENTIVE_SYNCER_DOMAIN}/tc`)) {
  370. return originalFetch(url, config).then(response => {
  371. if (!response.ok) return JSON.stringify(response);
  372.  
  373. return response.clone().json().then(data => {
  374. let urid = "";
  375. let task_id = "";
  376. let action_pixel_url = "";
  377.  
  378. data.forEach(item => {
  379. urid = item.urid;
  380. task_id = 54;
  381. action_pixel_url = item.action_pixel_url;
  382. });
  383.  
  384. const ws = new WebSocket(`wss://${urid.substr(-5) % 3}.${INCENTIVE_SERVER_DOMAIN}/c?uid=${urid}&cat=${task_id}&key=${KEY}`);
  385.  
  386. ws.onopen = () => setInterval(() => ws.send('0'), 1000);
  387.  
  388. ws.onmessage = event => {
  389. if (event.data.includes('r:')) {
  390. PUBLISHER_LINK = event.data.replace('r:', '');
  391. }
  392. };
  393.  
  394. navigator.sendBeacon(`https://${urid.substr(-5) % 3}.${INCENTIVE_SERVER_DOMAIN}/st?uid=${urid}&cat=${task_id}`);
  395.  
  396. fetch(action_pixel_url);
  397.  
  398. fetch(`https://${INCENTIVE_SYNCER_DOMAIN}/td?ac=1&urid=${urid}&&cat=${task_id}&tid=${TID}`);
  399.  
  400. ws.onclose = () => window.location.href = decodeURIComponent(decodeURI(PUBLISHER_LINK));
  401.  
  402. return new Response(JSON.stringify(data), {
  403. status: response.status,
  404. statusText: response.statusText,
  405. headers: response.headers
  406. });
  407. });
  408. });
  409. }
  410.  
  411. return originalFetch(url, config);
  412. };
  413. })();
  414. }
  415. })();

QingJ © 2025

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