您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically does Luarmor for you with smart key and button handling
// ==UserScript== // @name Auto Luarmor V2 (Remade!) // @namespace http://tampermonkey.net/ // @license MIT // @version 2.1 // @description Automatically does Luarmor for you with smart key and button handling // @author Aro Moon (98% ChatGPT) // @match https://ads.luarmor.net/get_key?for* // @grant none // @run-at document-idle // ==/UserScript== (function () { let isPaused = false; let currentAction = "Idle"; let currentKey = "N/A"; let logHistory = []; const logCache = new Set(); // Flags to prevent repeated logs let blacklistLogged = false; let loaderLogged = false; let captchaLogged = false; let nextBtnNotClickableLogged = false; // Create floating UI const ui = document.createElement("div"); ui.style.cssText = ` position: fixed; top: 20px; right: 20px; width: 250px; background: rgba(25, 25, 25, 0.9); color: #fff; font-family: Arial, sans-serif; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.5); padding: 10px; z-index: 999999; font-size: 13px; `; ui.innerHTML = ` <div style="display: flex; justify-content: space-between; align-items: center;"> <strong>Script Status</strong> <button id="toggleBtn" style=" background: #444; border: none; color: #fff; padding: 4px 8px; border-radius: 4px; cursor: pointer; ">Pause</button> </div> <div style="margin-top: 5px;"> <b>Current Key:</b> <span id="keyDisplay" style="display:inline-block; max-width: 220px; word-break: break-all;"> ${currentKey} </span> </div> <div style="margin-top: 5px;"> <b>Action:</b> <span id="actionDisplay">${currentAction}</span> </div> <div style="margin-top: 5px;"> <b style="cursor: pointer;" id="logToggle">Log ▼</b> <div id="logAreaContainer" style="display: none; max-height: 100px; overflow-y: auto; background: rgba(0,0,0,0.3); padding: 5px; border-radius: 4px; margin-top: 3px;"> <div id="logArea" style="font-size: 12px;"></div> </div> </div> `; document.body.appendChild(ui); const toggleBtn = ui.querySelector("#toggleBtn"); const keyDisplay = ui.querySelector("#keyDisplay"); const actionDisplay = ui.querySelector("#actionDisplay"); const logArea = ui.querySelector("#logArea"); const logToggle = ui.querySelector("#logToggle"); const logAreaContainer = ui.querySelector("#logAreaContainer"); toggleBtn.addEventListener("click", () => { isPaused = !isPaused; toggleBtn.textContent = isPaused ? "Resume" : "Pause"; if (isPaused) { log("Script paused"); } else { log("Script resumed - reloading page..."); location.reload(); } }); logToggle.addEventListener("click", () => { const isHidden = logAreaContainer.style.display === "none"; logAreaContainer.style.display = isHidden ? "block" : "none"; logToggle.textContent = isHidden ? "Log ▲" : "Log ▼"; }); function log(message) { if (logCache.has(message)) return; logCache.add(message); const timestamp = new Date().toLocaleTimeString(); logHistory.unshift(`[${timestamp}] ${message}`); if (logHistory.length > 100) logHistory.pop(); logArea.innerHTML = logHistory.join("<br>"); console.log(message); setTimeout(() => logCache.delete(message), 5000); } function setAction(action) { currentAction = action; actionDisplay.textContent = action; log(action); } function setKey(key) { currentKey = key; keyDisplay.textContent = key; } function isBlocked() { const blacklist = document.querySelector('.swal2-x-mark'); const loader = document.querySelector('.loader'); const captcha = document.getElementById('captchafield'); const blacklistVisible = blacklist && blacklist.offsetParent !== null; const loaderVisible = loader && loader.offsetParent !== null; const captchaVisible = captcha && captcha.offsetParent !== null; if (blacklistVisible) { if (!blacklistLogged) { setAction("Waiting (blacklisted)..."); blacklistLogged = true; } return { type: "blacklist", blocked: true }; } else blacklistLogged = false; if (loaderVisible) { if (!loaderLogged) { setAction("Waiting for loader..."); loaderLogged = true; } return { type: "loader", blocked: true }; } else loaderLogged = false; if (captchaVisible) { if (!captchaLogged) { setAction("Waiting for captcha..."); captchaLogged = true; } return { type: "captcha", blocked: true }; } else captchaLogged = false; return { type: null, blocked: false }; } function grabKeyOnce() { if (currentKey !== "N/A") return; const keyElement = document.querySelector('h6.mb-0.text-sm'); if (keyElement) { const keyText = keyElement.textContent.trim(); if (keyText) { setKey(keyText); log(`Key grabbed: ${keyText}`); } } } function onLoad() { if (isPaused) return setAction("Paused"); const blockStatus = isBlocked(); if (blockStatus.blocked) { setTimeout(onLoad, 500); return; } grabKeyOnce(); checkProgress(); waitForButtonToBeClickable(); } function checkProgress() { if (isPaused) return setAction("Paused"); const blockStatus = isBlocked(); if (blockStatus.blocked) return; const progressElement = document.getElementById('adprogressp'); if (!progressElement) return; const progressText = progressElement.textContent; const progressParts = progressText.match(/(\d+)\/(\d+)/); if (!progressParts) return; const currentProgress = parseInt(progressParts[1], 10); const totalProgress = parseInt(progressParts[2], 10); const remainingProgress = totalProgress - currentProgress; setAction(`Remaining Progress: ${remainingProgress}`); if (remainingProgress === 0) { const keyElement = document.querySelector('h6.mb-0.text-sm'); const addTimeBtn = keyElement ? document.getElementById(`addtimebtn_${keyElement.textContent.trim()}`) : null; const newKeyBtn = document.getElementById('newkeybtn'); if (keyElement && addTimeBtn && addTimeBtn.offsetParent !== null && !addTimeBtn.disabled) { addTimeBtn.click(); setAction(`Clicked Add Time for key: ${keyElement.textContent.trim()}`); } else if (newKeyBtn && newKeyBtn.offsetParent !== null && !newKeyBtn.disabled) { newKeyBtn.click(); setAction("Clicked Get a New Key"); } } } function waitForButtonToBeClickable() { if (isPaused) return setAction("Paused"); const blockStatus = isBlocked(); if (blockStatus.blocked) { setTimeout(waitForButtonToBeClickable, 500); return; } const btn = document.getElementById('nextbtn'); if (btn && btn.offsetParent !== null && !(btn.style.cursor === 'not-allowed' || btn.disabled)) { btn.click(); setAction("Clicked Next button"); nextBtnNotClickableLogged = false; setTimeout(checkWindowFocus, 1000); } else { if (!nextBtnNotClickableLogged) { setAction("Waiting to click button"); nextBtnNotClickableLogged = true; } setTimeout(waitForButtonToBeClickable, 500); } } function checkWindowFocus() { if (isPaused) return setAction("Paused"); const blockStatus = isBlocked(); if (blockStatus.blocked) return; if (!document.hasFocus()) { setAction("Waiting for window focus..."); return; } setTimeout(() => { const btn = document.getElementById('nextbtn'); if (btn && btn.offsetParent !== null && !(btn.style.cursor === 'not-allowed' || btn.disabled)) { btn.click(); setAction("Clicked Next button (focus)"); nextBtnNotClickableLogged = false; } setTimeout(checkWindowFocus, 1000); }, 500); } if (document.readyState === "complete") { onLoad(); } else { window.addEventListener("load", onLoad); } })();