// ==UserScript==
// @name Auto Luarmor Remake :D
// @namespace http://tampermonkey.net/
// @version 1.7.6
// @author Skibidi
// @match https://ads.luarmor.net/get_key*
// @icon https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT-qTrpdUUXTcHpoQo-K_ExyrBuSLSdh5M1rQ&s
// @grant none
// @description Skibidi's Auto Luarmor Remake
// ==/UserScript==
(function() {
'use strict';
const SCRIPT_VERSION = "1.7.6";
const UPDATE_URL = "https://greasyfork.org/en/scripts/544191-auto-luarmor-remake-d";
const RAW_URL = "https://greasyfork.org/scripts/544191-auto-luarmor-remake-d/code/Auto%20Luarmor%20Remake%20D.user.js";
function fetchLatestVersion(cb) {
fetch(RAW_URL + "?t=" + Date.now())
.then(r => r.text())
.then(txt => {
const m = txt.match(/@version\s+([^\s]+)/);
cb(m ? m[1] : null);
})
.catch(() => cb(null));
}
function forceUpdate() { window.location.href = UPDATE_URL; }
function checkVersionAndUpdate(force) {
fetchLatestVersion(function(latest) {
if (!latest) { if (force) alert("Check update failed"); return; }
if (latest !== SCRIPT_VERSION) {
if (force) {
if (confirm("A new version ("+latest+") is available. Do you want to update?")) forceUpdate();
} else forceUpdate();
} else if (force) alert("You are using the latest version ("+SCRIPT_VERSION+")");
});
}
checkVersionAndUpdate(false);
(function checkTabs() {
if (!window || !window.localStorage) return;
const KEY = "__luarmor_tabs__", CLOSE_KEY = "__luarmor_close__";
let tabs = [];
try { tabs = JSON.parse(localStorage.getItem(KEY) || "[]"); } catch(e) {}
const now = Date.now();
tabs = tabs.filter(t => now - t.time < 15000);
const myId = Math.random().toString(36).substr(2, 9) + now;
tabs.push({id: myId, time: now});
tabs.sort((a, b) => a.time - b.time);
localStorage.setItem(KEY, JSON.stringify(tabs));
if (tabs.length > 1) {
const oldest = tabs.find(t => t.id !== myId);
if (oldest) localStorage.setItem(CLOSE_KEY, oldest.id);
}
window.addEventListener("storage", function(e) {
if (e.key === CLOSE_KEY) {
try {
const closeId = e.newValue;
if (!closeId) return;
if (myId === closeId) {
setTimeout(function() {
try { if (typeof window.close === "function") window.close(); }
catch(e) { window.location.href = 'about:blank'; }
}, 200);
}
} catch(e){}
}
});
setInterval(function() {
let tabs = [];
try { tabs = JSON.parse(localStorage.getItem(KEY) || "[]"); } catch(e) {}
const now = Date.now();
tabs = tabs.filter(t => now - t.time < 15000 && t.id !== myId);
tabs.push({id: myId, time: now});
tabs.sort((a, b) => a.time - b.time);
localStorage.setItem(KEY, JSON.stringify(tabs));
}, 2000);
window.addEventListener("beforeunload", function() {
let tabs = [];
try { tabs = JSON.parse(localStorage.getItem(KEY) || "[]"); } catch(e) {}
tabs = tabs.filter(t => t.id !== myId);
localStorage.setItem(KEY, JSON.stringify(tabs));
});
})();
const configKeys = {
enableNewKey: "__luarmor_enable_newkey__",
enableAuto24H: "__luarmor_enable_auto24h__",
selectedAdd24HSlotIdx: "__luarmor_add24h_slot_idx__",
selectedAdd24HSlotRenewKey: "__luarmor_add24h_slot_renewkey__",
enableAll: "__luarmor_enable_all__"
};
function getConfigBool(key, def) {
try { const v = localStorage.getItem(key); return v === null ? def : v === "true"; } catch(e) { return def; }
}
function setConfigBool(key, val) { try { localStorage.setItem(key, val ? "true" : "false"); } catch(e){} }
function getConfigInt(key, def) {
try { const v = localStorage.getItem(key); if (v === null) return def; const n = parseInt(v, 10); return isNaN(n) ? def : n; } catch(e) { return def; }
}
function setConfigInt(key, val) { try { localStorage.setItem(key, String(val)); } catch(e){} }
function getConfigStr(key, def) { try { const v = localStorage.getItem(key); return v === null ? def : v; } catch(e) { return def; } }
function setConfigStr(key, val) { try { localStorage.setItem(key, String(val)); } catch(e){} }
const config = {
initialDelay: 100,
checkInterval: 100,
cooldownCheck: 300,
maxCooldown: 15000,
retryLimit: 3,
enableNewKey: getConfigBool(configKeys.enableNewKey, false),
enableAuto24H: getConfigBool(configKeys.enableAuto24H, true),
enableAll: getConfigBool(configKeys.enableAll, true)
};
function getAllAdd24HButtons() {
try { return Array.from(document.querySelectorAll('button[id^="addtimebtn_"]')); } catch(e) { return []; }
}
function getAdd24HSlotList() {
const btns = getAllAdd24HButtons();
return btns.map((btn, idx) => {
let renewKey = null, id = btn.id, m = null;
try { m = (btn.getAttribute('onclick')||'').match(/renewKey\(['"]([^'"]+)['"]\)/); } catch(e){}
if (m) renewKey = m[1];
return { slot: idx+1, id, renewKey, btn };
}).filter(x => x.renewKey);
}
let add24HSlotList = [];
let selectedAdd24HSlotIdx = getConfigInt(configKeys.selectedAdd24HSlotIdx, 0);
let selectedAdd24HSlotRenewKey = getConfigStr(configKeys.selectedAdd24HSlotRenewKey, "");
function saveSelectedSlot() {
setConfigInt(configKeys.selectedAdd24HSlotIdx, selectedAdd24HSlotIdx);
setConfigStr(configKeys.selectedAdd24HSlotRenewKey, selectedAdd24HSlotRenewKey || "");
}
function refreshAdd24HSlotList() {
try {
add24HSlotList = getAdd24HSlotList();
if (selectedAdd24HSlotRenewKey && selectedAdd24HSlotRenewKey !== "null") {
const foundIdx = add24HSlotList.findIndex(slot => slot.renewKey === selectedAdd24HSlotRenewKey);
if (foundIdx !== -1) selectedAdd24HSlotIdx = foundIdx;
else if (add24HSlotList.length > 0) {
selectedAdd24HSlotIdx = 0;
selectedAdd24HSlotRenewKey = add24HSlotList[0].renewKey;
}
} else if (add24HSlotList.length > 0) {
selectedAdd24HSlotIdx = 0;
selectedAdd24HSlotRenewKey = add24HSlotList[0].renewKey;
}
saveSelectedSlot();
} catch(e){}
}
refreshAdd24HSlotList();
function createLuarmorUIContainer() {
let container = document.getElementById('luarmor-ui-container');
if (container) return container;
container = document.createElement('div');
container.id = 'luarmor-ui-container';
container.style.cssText = "position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column;align-items:flex-end;gap:12px;z-index:10001;font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;max-width:370px;max-height:90vh;overflow:auto;box-sizing:border-box;";
document.body.appendChild(container);
return container;
}
function createLuarmorControlPanel() {
let oldPanel = document.getElementById('luarmor-control-panel');
if (oldPanel) oldPanel.remove();
const panelDiv = document.createElement('div');
panelDiv.id = 'luarmor-control-panel';
panelDiv.style.cssText = "background:linear-gradient(135deg,#1a1a2e 0%,#16213e 50%,#0f3460 100%);color:#fff;padding:14px 18px;border-radius:14px;font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;font-size:13px;border:2px solid rgba(0,255,255,0.3);max-width:340px;box-shadow:0 4px 16px rgba(0,0,0,0.25);display:flex;flex-direction:column;align-items:flex-start;gap:12px;backdrop-filter:blur(6px);transition:all .2s;box-sizing:border-box;overflow:hidden;";
refreshAdd24HSlotList();
let html = `
<div style="font-weight:700;font-size:16px;margin-bottom:2px;background:linear-gradient(45deg,#00ffff,#00bfff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:0 0 10px rgba(0,255,255,0.4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;">🚀 Luarmor Auto Manager</div>
<div style="display:flex;gap:10px;align-items:center;padding:6px 8px;background:rgba(255,255,255,0.04);border-radius:8px;border:1px solid rgba(0,255,255,0.15);width:100%;box-sizing:border-box;">
<label style="display:flex;align-items:center;gap:6px;cursor:pointer;flex:1 1 0;">
<input type="checkbox" id="luarmor-enableall-toggle" ${config.enableAll ? 'checked' : ''} style="accent-color:#00ffff;transform:scale(1.1);cursor:pointer;">
<span style="font-weight:600;color:#00ffff;text-shadow:0 0 6px rgba(0,255,255,0.4);white-space:nowrap;">Enable Script</span>
</label>
<button id="luarmor-checkupdate-btn" style="background:linear-gradient(45deg,#00ffff,#00bfff);color:#000;border:none;padding:5px 10px;border-radius:6px;cursor:pointer;font-size:11px;font-weight:600;transition:all .2s;box-shadow:0 2px 8px rgba(0,255,255,0.2);white-space:nowrap;">🔄 Update</button>
</div>
<div style="display:flex;gap:10px;align-items:center;padding:6px 8px;background:rgba(255,255,255,0.04);border-radius:8px;border:1px solid rgba(0,255,255,0.15);width:100%;box-sizing:border-box;">
<label style="display:flex;align-items:center;gap:6px;cursor:pointer;">
<input type="checkbox" id="luarmor-auto24h-toggle" ${config.enableAuto24H ? 'checked' : ''} style="accent-color:#00ffff;transform:scale(1.1);cursor:pointer;" ${!config.enableAll ? 'disabled' : ''}>
<span style="color:#fff;font-weight:500;white-space:nowrap;">⏰ Auto +24H</span>
</label>
<label style="display:flex;align-items:center;gap:6px;cursor:pointer;">
<input type="checkbox" id="luarmor-newkey-toggle" ${config.enableNewKey ? 'checked' : ''} style="accent-color:#00ffff;transform:scale(1.1);cursor:pointer;" ${!config.enableAll ? 'disabled' : ''}>
<span style="color:#fff;font-weight:500;white-space:nowrap;">🔑 Auto New Key</span>
</label>
</div>
<div style="display:flex;align-items:center;gap:8px;padding:6px 8px;background:rgba(255,255,255,0.04);border-radius:8px;border:1px solid rgba(0,255,255,0.15);width:100%;box-sizing:border-box;">
<span style="font-weight:600;color:#00ffff;text-shadow:0 0 6px rgba(0,255,255,0.4);white-space:nowrap;">🎯 +24H Slot</span>
<select id="luarmor-add24h-slot" style="margin-left:4px;background:rgba(0,0,0,0.2);color:#fff;border:1px solid rgba(0,255,255,0.2);padding:3px 8px;border-radius:4px;font-size:12px;cursor:pointer;max-width:120px;overflow:hidden;text-overflow:ellipsis;" ${!config.enableAll ? 'disabled' : ''}>`;
add24HSlotList.forEach((slot, i) => {
html += `<option value="${i}"${i === selectedAdd24HSlotIdx ? ' selected' : ''} style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">Slot ${i+1} (${slot.renewKey})</option>`;
});
html += `</select>
<button id="luarmor-save-slot-btn" style="margin-left:4px;background:linear-gradient(45deg,#00ffff,#00bfff);color:#000;border:none;padding:3px 8px;border-radius:4px;cursor:pointer;font-size:11px;font-weight:600;transition:all .2s;box-shadow:0 1px 5px rgba(0,255,255,0.2);white-space:nowrap;" ${!config.enableAll ? 'opacity:0.5;pointer-events:none;' : ''}>💾 Save</button>
</div>`;
panelDiv.innerHTML = html;
createLuarmorUIContainer().appendChild(panelDiv);
document.getElementById('luarmor-enableall-toggle').addEventListener('change', function(e) {
config.enableAll = e.target.checked;
setConfigBool(configKeys.enableAll, config.enableAll);
document.getElementById('luarmor-auto24h-toggle').disabled = !config.enableAll;
document.getElementById('luarmor-newkey-toggle').disabled = !config.enableAll;
document.getElementById('luarmor-add24h-slot').disabled = !config.enableAll;
document.getElementById('luarmor-save-slot-btn').disabled = !config.enableAll;
if (!config.enableAll) {
document.getElementById('luarmor-save-slot-btn').style.opacity = "0.5";
document.getElementById('luarmor-save-slot-btn').style.pointerEvents = "none";
} else {
document.getElementById('luarmor-save-slot-btn').style.opacity = "";
document.getElementById('luarmor-save-slot-btn').style.pointerEvents = "";
}
automationPaused = !config.enableAll;
if (!automationPaused) {
for (let k in buttonStates) buttonStates[k].clicked = false;
for (let k in buttonStates) buttonStates[k].retry = 0;
for (let k in buttonStates) buttonStates[k].cooldown = false;
updateStatus('add24H', 'pending');
updateStatus('newKey', 'pending');
updateStatus('start', 'pending');
updateStatus('next', 'pending');
tryClickButtons();
}
});
document.getElementById('luarmor-auto24h-toggle').addEventListener('change', function(e) {
config.enableAuto24H = e.target.checked;
setConfigBool(configKeys.enableAuto24H, config.enableAuto24H);
buttonStates.add24H.clicked = false;
updateStatus('add24H', 'pending');
});
document.getElementById('luarmor-newkey-toggle').addEventListener('change', function(e) {
config.enableNewKey = e.target.checked;
setConfigBool(configKeys.enableNewKey, config.enableNewKey);
buttonStates.newKey.clicked = false;
updateStatus('newKey', 'pending');
});
document.getElementById('luarmor-add24h-slot').addEventListener('change', function(e) {
selectedAdd24HSlotIdx = parseInt(e.target.value, 10);
if (add24HSlotList[selectedAdd24HSlotIdx]) {
selectedAdd24HSlotRenewKey = add24HSlotList[selectedAdd24HSlotIdx].renewKey;
}
buttonStates.add24H.clicked = false;
updateStatus('add24H', 'pending');
});
document.getElementById('luarmor-save-slot-btn').addEventListener('click', function() {
const select = document.getElementById('luarmor-add24h-slot');
selectedAdd24HSlotIdx = parseInt(select.value, 10);
if (add24HSlotList[selectedAdd24HSlotIdx]) {
selectedAdd24HSlotRenewKey = add24HSlotList[selectedAdd24HSlotIdx].renewKey;
saveSelectedSlot();
buttonStates.add24H.clicked = false;
updateStatus('add24H', 'pending');
}
});
document.getElementById('luarmor-checkupdate-btn').addEventListener('click', function() {
checkVersionAndUpdate(true);
});
}
function createStatusIndicator() {
if (document.getElementById('luarmor-status')) return;
const style = document.createElement('style');
style.textContent = `
#luarmor-status {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
color: #fff;
padding: 10px 14px;
border-radius: 10px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-size: 13px;
z-index: 10000;
border: 2px solid rgba(0,255,255,0.2);
max-width: 220px;
box-shadow: 0 4px 16px rgba(0,0,0,0.2);
backdrop-filter: blur(6px);
transition: all .2s;
box-sizing: border-box;
overflow: hidden;
}
#luarmor-status-title {
font-weight: 700;
margin-bottom: 6px;
font-size: 14px;
background: linear-gradient(45deg, #00ffff, #00bfff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-shadow: 0 0 10px rgba(0,255,255,0.4);
white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
}
#luarmor-status-content {
font-size: 12px;
line-height: 1.5;
width:100%;
box-sizing:border-box;
}
.cooldown { color: #ffaa00; text-shadow: 0 0 6px rgba(255,170,0,0.4); font-weight: 600; }
.completed { color: #00ff88; text-shadow: 0 0 6px rgba(0,255,136,0.4); font-weight: 600; }
.pending { color: #ccc; font-weight: 500; }
.retry { color: #00bfff; text-shadow: 0 0 6px rgba(0,191,255,0.4); font-weight: 600; }
.failed { color: #ff4444; text-shadow: 0 0 6px rgba(255,68,68,0.4); font-weight: 600; }
.timeout { color: #ff8800; text-shadow: 0 0 6px rgba(255,136,0,0.4); font-weight: 600; }
.notfound { color: #ff4444; text-shadow: 0 0 6px rgba(255,68,68,0.4); font-weight: 600; }
#luarmor-status-controls { margin-top: 8px; padding-top: 6px; border-top: 1px dashed rgba(0,255,255,0.15); display: flex; gap: 6px; }
.status-btn { background: linear-gradient(45deg,#00ffff,#00bfff); color:#000; border:none; padding:3px 8px; border-radius:4px; cursor:pointer; font-size:11px; font-weight:600; transition:all .2s; box-shadow:0 1px 5px rgba(0,255,255,0.2);}
.status-btn:hover { transform: translateY(-1px); box-shadow:0 2px 8px rgba(0,255,255,0.3);}
.status-item { display:flex;align-items:center;gap:5px;margin-bottom:3px;padding:2px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.status-icon { font-size:12px;width:14px;text-align:center;}
`;
document.head.appendChild(style);
const statusDiv = document.createElement('div');
statusDiv.id = 'luarmor-status';
statusDiv.innerHTML = `
<div id="luarmor-status-title">📊 Status Monitor</div>
<div id="luarmor-status-content">
<div class="status-item">
<span class="status-icon">⏰</span>
<span>+24H: <span id="status-add24H" class="pending">Pending</span></span>
</div>
<div class="status-item">
<span class="status-icon">🔑</span>
<span>New Key: <span id="status-newKey" class="pending">Pending</span></span>
</div>
<div class="status-item">
<span class="status-icon">▶️</span>
<span>Next: <span id="status-next" class="pending">Pending</span></span>
</div>
<div id="status-all"></div>
</div>
<div id="luarmor-status-controls"></div>
`;
createLuarmorUIContainer().appendChild(statusDiv);
}
const selectors = {
nextButton: '#nextbtn',
add24HButton: () => {
try {
refreshAdd24HSlotList();
if (add24HSlotList.length === 0) return null;
if (selectedAdd24HSlotIdx < 0 || selectedAdd24HSlotIdx >= add24HSlotList.length) return null;
return `#${add24HSlotList[selectedAdd24HSlotIdx].id}`;
} catch(e) { return null; }
},
startButton: '#startbtn',
newKeyButton: '#newkeybtn'
};
const buttonStates = {
next: { clicked: false, cooldown: false, retry: 0 },
start: { clicked: false, cooldown: false, retry: 0 },
add24H: { clicked: false, cooldown: false, retry: 0 },
newKey: { clicked: false, cooldown: false, retry: 0 }
};
function isClickable(button) {
if (!button) return false;
try {
if (button.disabled) return false;
if (button.classList && button.classList.contains('disabled')) return false;
if (button.style && (button.style.display === 'none' || button.style.visibility === 'hidden' || button.style.opacity === '0')) return false;
if (button.style && button.style.cursor === 'not-allowed') return false;
} catch(e) { return false; }
return true;
}
function isOnCooldown(button) {
if (!button) return false;
try {
let text = (button.textContent || '').toLowerCase();
if (button.style && button.style.cursor === 'not-allowed') return true;
if (text.includes('wait') || text.includes('cooldown')) return true;
if (button.disabled) return true;
} catch(e) { return false; }
return false;
}
let automationPaused = !config.enableAll;
function handleButtonClick(buttonType) {
if (automationPaused) return false;
let selector;
try {
if (typeof selectors[buttonType + 'Button'] === 'function') {
selector = selectors[buttonType + 'Button']();
} else {
selector = selectors[buttonType + 'Button'];
}
} catch(e) { selector = null; }
if (!selector) {
if (buttonType !== 'start') updateStatus(buttonType, 'notfound');
return false;
}
let button = null;
try { button = document.querySelector(selector); } catch(e) { button = null; }
if (!button) {
if (buttonType !== 'start') updateStatus(buttonType, 'notfound');
return false;
}
if (isOnCooldown(button)) {
if (!buttonStates[buttonType].cooldown) {
buttonStates[buttonType].cooldown = true;
updateStatus(buttonType, 'cooldown');
let waited = 0;
const cooldownCheck = setInterval(() => {
if (automationPaused) { clearInterval(cooldownCheck); return; }
waited += config.cooldownCheck;
if (!isOnCooldown(button)) {
clearInterval(cooldownCheck);
buttonStates[buttonType].cooldown = false;
updateStatus(buttonType, 'pending');
tryClickButtons();
} else if (waited >= config.maxCooldown) {
clearInterval(cooldownCheck);
updateStatus(buttonType, 'timeout');
}
}, config.cooldownCheck);
}
return false;
}
if (isClickable(button)) {
try {
if (buttonType === 'add24H') {
refreshAdd24HSlotList();
if (add24HSlotList[selectedAdd24HSlotIdx]) {
let renewKeyParam = add24HSlotList[selectedAdd24HSlotIdx].renewKey;
try {
if (typeof unsafeWindow !== "undefined" && typeof unsafeWindow.renewKey === "function") {
unsafeWindow.renewKey(renewKeyParam);
} else if (typeof window.renewKey === "function") {
window.renewKey(renewKeyParam);
} else {
if (typeof button.click === "function") button.click();
else { let evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); button.dispatchEvent(evt); }
}
} catch(e) {
if (typeof button.click === "function") button.click();
else { let evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); button.dispatchEvent(evt); }
}
}
} else {
if (typeof button.click === "function") button.click();
else { let evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); button.dispatchEvent(evt); }
}
buttonStates[buttonType].clicked = true;
updateStatus(buttonType, 'completed');
return true;
} catch (e) {
updateStatus(buttonType, 'failed');
return false;
}
} else {
if (buttonStates[buttonType].retry < config.retryLimit) {
buttonStates[buttonType].retry++;
setTimeout(() => handleButtonClick(buttonType), config.checkInterval);
updateStatus(buttonType, 'retry');
} else updateStatus(buttonType, 'failed');
}
return false;
}
function tryClickButtons() {
if (automationPaused) return;
try {
if (config.enableAuto24H && !buttonStates.add24H.clicked) { if (handleButtonClick('add24H')) return; }
if (config.enableNewKey && !buttonStates.newKey.clicked) { if (handleButtonClick('newKey')) return; }
if (!buttonStates.start.clicked) { if (handleButtonClick('start')) return; }
if (!buttonStates.next.clicked) { if (handleButtonClick('next')) return; }
} catch(e){}
}
function updateStatus(action, state) {
let statusElement;
if (action === 'all') {
['add24H', 'newKey', 'start', 'next'].forEach(btn => {
const element = document.getElementById(`status-${btn}`);
if (element) { element.textContent = 'Completed'; element.className = 'completed'; }
});
const allDiv = document.getElementById('status-all');
if (allDiv) { allDiv.textContent = '✅ All tasks completed!'; allDiv.className = 'completed'; }
return;
} else statusElement = document.getElementById(`status-${action}`);
if (!statusElement) return;
switch (state) {
case 'completed': statusElement.textContent = 'Completed'; statusElement.className = 'completed'; break;
case 'cooldown': statusElement.textContent = 'On Cooldown...'; statusElement.className = 'cooldown'; break;
case 'pending': statusElement.textContent = 'Pending'; statusElement.className = 'pending'; break;
case 'retry': statusElement.textContent = 'Retrying...'; statusElement.className = 'retry'; break;
case 'failed': statusElement.textContent = 'Failed'; statusElement.className = 'failed'; break;
case 'timeout': statusElement.textContent = 'Timeout'; statusElement.className = 'timeout'; break;
case 'notfound':
if (action !== 'start') { statusElement.textContent = 'Not Found'; statusElement.className = 'notfound'; }
else { statusElement.textContent = ''; statusElement.className = ''; }
break;
default: statusElement.textContent = state; statusElement.className = '';
}
}
function fastStartup() {
try {
refreshAdd24HSlotList();
createLuarmorControlPanel();
createStatusIndicator();
updateStatus('add24H', 'pending');
updateStatus('newKey', 'pending');
updateStatus('start', 'pending');
updateStatus('next', 'pending');
tryClickButtons();
const checkInterval = setInterval(() => {
if (automationPaused) return;
const allClicked = Object.values(buttonStates).every(state => state.clicked);
if (allClicked) {
clearInterval(checkInterval);
updateStatus('all', 'completed');
} else tryClickButtons();
}, config.checkInterval);
} catch(e){}
}
function waitFor24HButtonsFast(retry = 0) {
try {
refreshAdd24HSlotList();
if (add24HSlotList.length >= 1 || retry > 10) fastStartup();
else setTimeout(() => waitFor24HButtonsFast(retry+1), 50);
} catch(e) { setTimeout(() => waitFor24HButtonsFast(retry+1), 50); }
}
if (document.readyState === "complete" || document.readyState === "interactive") {
setTimeout(waitFor24HButtonsFast, config.initialDelay);
} else {
window.addEventListener("DOMContentLoaded", function() {
setTimeout(waitFor24HButtonsFast, config.initialDelay);
});
}
})();