您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Search jail for specific reasons.
// ==UserScript== // @name Search Jail For Reason - torn.com // @namespace Phantom Scripts // @match https://www.torn.com/jailview.php* // @version 1.0 // @author ErrorNullTag // @description Search jail for specific reasons. // @grant GM_xmlhttpRequest // @license Mit // ==/UserScript== (function() { 'use strict'; let scriptActive = true; let navigationInProgress = false; let recordedUsers = []; const targetNode = document.querySelector('.user-info-list-wrap'); const config = { childList: true, subtree: true }; const callback = function(mutationList, observer) { if (!scriptActive) return; for (const mutation of mutationList) { if (mutation.type === 'childList') { hideNonTargetedUsers(); navigateToNextPage(); } } }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); function hideNonTargetedUsers() { let allUsers = document.querySelectorAll(".user-info-list-wrap li"); for (let user of allUsers) { let reasonSpan = user.querySelector(".reason"); if (reasonSpan) { let reasonText = reasonSpan.textContent; let userName = user.querySelector(".user.name").textContent.trim(); // Check if user is already recorded based on their username if (!recordedUsers.some(u => u.name === userName)) { recordedUsers.push({name: userName, reason: reasonText}); } user.style.display = 'none'; } else { user.style.display = 'none'; } } } function navigateToNextPage() { if (navigationInProgress) return; navigationInProgress = true; const nextPageValue = Number(window.location.hash.replace('#start=', '')) + 50; if (nextPageValue <= 600) { setTimeout(function() { window.location.href = `https://www.torn.com/jailview.php#start=${nextPageValue}`; navigationInProgress = false; }, 850); } else { scriptActive = false; createMenu(); } } function createMenu() { // Check if menu box already exists and remove it let existingMenu = document.getElementById("jailUsersMenu"); if (existingMenu) existingMenu.remove(); let menuBox = document.createElement("div"); menuBox.id = "jailUsersMenu"; menuBox.style.position = "fixed"; menuBox.style.top = "10px"; menuBox.style.right = "10px"; menuBox.style.zIndex = 9999; menuBox.style.border = "1px solid #ddd"; menuBox.style.background = "black"; menuBox.style.padding = "10px"; menuBox.style.width = "350px"; menuBox.style.height = "500px"; menuBox.style.overflowY = "auto"; menuBox.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.2)"; document.body.appendChild(menuBox); // Collapse button let collapseButton = document.createElement("button"); collapseButton.textContent = "Toggle Menu"; collapseButton.style.position = "absolute"; collapseButton.style.top = "0"; collapseButton.style.left = "0"; collapseButton.style.backgroundColor = "lime"; collapseButton.onclick = function() { menuBox.style.display = menuBox.style.display === "none" ? "block" : "none"; }; menuBox.appendChild(collapseButton); // Reload button let reloadButton = document.createElement("button"); reloadButton.textContent = "Reload"; reloadButton.style.position = "absolute"; reloadButton.style.top = "0"; reloadButton.style.right = "0"; reloadButton.style.backgroundColor = "lime"; reloadButton.onclick = function() { window.location.href = "https://www.torn.com/jailview.php#"; location.reload(); }; menuBox.appendChild(reloadButton); // Title let menuTitle = document.createElement("h3"); menuTitle.textContent = "Phantom Scripting"; menuTitle.style.margin = "0"; menuTitle.style.marginBottom = "10px"; menuTitle.style.textAlign = "center"; menuTitle.style.color = "gold"; menuBox.appendChild(menuTitle); // Search Box let searchBox = document.createElement("input"); searchBox.setAttribute("type", "text"); searchBox.setAttribute("placeholder", "Search users by reason..."); searchBox.style.width = "100%"; searchBox.style.padding = "5px"; searchBox.style.marginBottom = "10px"; searchBox.addEventListener("input", function() { filterUsersByReason(this.value.toLowerCase()); }); menuBox.appendChild(searchBox); // Display Area for Results let resultList = document.createElement("ul"); menuBox.appendChild(resultList); // Copy to Clipboard Button let copyButton = document.createElement("button"); copyButton.textContent = "Copy Results to Clipboard"; copyButton.onclick = function() { let textToCopy = ''; let currentDisplay = [...resultList.childNodes].map(node => node.textContent.trim()).filter(Boolean); textToCopy = currentDisplay.join('\n').replace(/\s+/g, ' '); navigator.clipboard.writeText(textToCopy).then(() => { alert("Results copied to clipboard!"); }); }; menuBox.appendChild(copyButton); // Time left let timeLeft = document.querySelector('.countdown').textContent; let timeElement = document.createElement("div"); timeElement.textContent = `Time left: ${timeLeft}`; timeElement.style.color = "lime"; menuBox.appendChild(timeElement); function updateDisplayedRecords(records) { resultList.innerHTML = ""; // Clear previous records // Sorting the records alphabetically based on the name records.sort((a, b) => a.name.localeCompare(b.name)); for (let record of records) { let li = document.createElement("li"); li.style.color = "lime"; // Set color to bright green li.textContent = `${record.name} - ${record.reason}`; resultList.appendChild(li); } } function filterUsersByReason(query) { let filteredUsers = recordedUsers.filter(user => user.reason.toLowerCase().includes(query)); updateDisplayedRecords(filteredUsers); } updateDisplayedRecords(removeDuplicates(recordedUsers)); } function removeDuplicates(recordArray) { let uniqueUsers = []; let uniqueUserNames = new Set(); for (let user of recordArray.reverse()) { // reverse to keep the latest record if there are duplicates if (!uniqueUserNames.has(user.name)) { uniqueUserNames.add(user.name); uniqueUsers.push(user); } } return uniqueUsers.reverse(); // reverse back to original order } })();