您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A script to highlight items in the item market when they are listed below a specified threshold.
当前为
// ==UserScript== // @name Torn Buy Filter // @version 0.3.3 // @description A script to highlight items in the item market when they are listed below a specified threshold. // @author Galdyr // @match https://www.torn.com/page.php?sid=ItemMarket* // @exclude https://www.googletagmanager.com/* // @exclude https://td.doubleclick.net/* // @icon https://www.google.com/s2/favicons?sz=64&domain=torn.com // @grant none // @namespace https://gf.qytechs.cn/users/1446982 // @license MIT // ==/UserScript== (function() { 'use strict'; if (!window.location.href.startsWith("https://www.torn.com/page.php?sid=ItemMarket")) { return; // Exit if not the correct page } const buyFilters = {}; function initializeBuyFilters() { const itemMarketRoot = document.querySelector('.itemListWrapper___ugBOt'); if (!itemMarketRoot) { console.error('Item market root element not found.'); return; } const itemElements = document.querySelectorAll('.itemTile___cbw7w'); const filterOptionsBox = createFilterOptionsBox(); const mainContent = itemMarketRoot.parentElement; // Main content container // Insert filter options box at the top mainContent.insertBefore(filterOptionsBox, mainContent.firstChild); itemElements.forEach((itemElement) => { const itemId = getItemId(itemElement); if (itemId) { if (!document.getElementById(`filter-item-${itemId}`)) { addBuyFilter(itemElement, itemId, filterOptionsBox); } } }); highlightItems(); // Set up periodic refresh setInterval(highlightItems, 1000); // Refresh every 1 second (adjust as needed) } function createFilterOptionsBox() { const filterOptionsBox = document.createElement('div'); filterOptionsBox.id = 'filter-options-box'; filterOptionsBox.style.marginTop = '10px'; filterOptionsBox.style.borderBottom = '1px solid #ccc'; filterOptionsBox.style.padding = '10px'; filterOptionsBox.style.display = 'grid'; filterOptionsBox.style.gridTemplateColumns = 'repeat(3, 1fr)'; filterOptionsBox.style.gap = '10px'; // Add title const titleSpan = document.createElement('span'); titleSpan.textContent = "Galdyr's Buy Filter"; titleSpan.style.fontWeight = 'bold'; filterOptionsBox.insertBefore(titleSpan, filterOptionsBox.firstChild); // Add blank space const blankSpace = document.createElement('span'); filterOptionsBox.insertBefore(blankSpace, filterOptionsBox.firstChild.nextSibling); // Add collapse button (icon) const collapseButton = document.createElement('span'); collapseButton.id = 'collapse-button'; collapseButton.textContent = '+'; // Initial icon collapseButton.style.cursor = 'pointer'; collapseButton.style.fontSize = '20px'; collapseButton.style.fontWeight = 'bold'; collapseButton.addEventListener('click', toggleFilters); filterOptionsBox.insertBefore(collapseButton, filterOptionsBox.firstChild.nextSibling.nextSibling); return filterOptionsBox; } function toggleFilters() { const filterOptionsBox = document.getElementById('filter-options-box'); const collapseButton = document.getElementById('collapse-button'); filterOptionsBox.classList.toggle('collapsed'); collapseButton.textContent = filterOptionsBox.classList.contains('collapsed') ? '+' : '-'; // Toggle icon } function getItemId(itemElement) { const actionsWrapper = itemElement.querySelector('.actionsWrapper___lfaJ0'); if (actionsWrapper) { const buyButton = actionsWrapper.querySelector('.actionButton___pb_Da[aria-label*="Buy item"]'); if (buyButton) { const ariaControls = buyButton.getAttribute('aria-controls'); if (ariaControls) { const itemId = ariaControls.split('-').pop(); return itemId; } } } return null; } function getItemName(itemElement) { const nameElement = itemElement.querySelector('.name___ukdHN'); if (nameElement) { return nameElement.textContent; } return "Unknown Item"; } function addBuyFilter(itemElement, itemId, filterOptionsBox) { const itemName = getItemName(itemElement); const filterDiv = document.createElement('div'); filterDiv.id = `filter-item-${itemId}`; filterDiv.innerHTML = `<strong>${itemName}:</strong><br> <label style="margin-left: 20px;">Watch: <input type="checkbox" class="buy-filter"></label><br> <label style="margin-left: 20px;">Threshold:</label><br> <input type="number" class="buy-threshold" value="0" style="margin-left: 20px;"><br>`; filterOptionsBox.appendChild(filterDiv); const filterCheckbox = filterDiv.querySelector('.buy-filter'); const thresholdInput = filterDiv.querySelector('.buy-threshold'); filterCheckbox.addEventListener('change', (event) => { buyFilters[itemId] = { selected: event.target.checked, threshold: parseInt(thresholdInput.value, 10) }; highlightItems(); }); thresholdInput.addEventListener('change', (event) => { if (buyFilters[itemId]) { buyFilters[itemId].threshold = parseInt(event.target.value, 10); } else { buyFilters[itemId] = { selected: false, threshold: parseInt(event.target.value, 10) }; } highlightItems(); }); buyFilters[itemId] = { selected: filterCheckbox.checked, threshold: parseInt(thresholdInput.value, 10) }; } function highlightItems() { const itemElements = document.querySelectorAll('.itemTile___cbw7w'); itemElements.forEach((itemElement) => { const itemId = getItemId(itemElement); if (itemId && buyFilters[itemId] && buyFilters[itemId].selected) { const itemPrice = getItemPrice(itemElement); if (itemPrice !== null && itemPrice <= buyFilters[itemId].threshold) { itemElement.parentElement.style.backgroundColor = "#19166e"; } else { itemElement.parentElement.style.backgroundColor = ""; } } else { itemElement.parentElement.style.backgroundColor = ""; } }); } function getItemPrice(itemElement) { const priceElement = itemElement.querySelector('.priceAndTotal___eEVS7 span'); if (priceElement) { const priceText = priceElement.textContent.replace(/[$,]/g, ''); return parseInt(priceText, 10); } return null; } // Embed CSS for collapsing const style = document.createElement('style'); style.textContent = ` #filter-options-box.collapsed { height: 30px; overflow: hidden; padding: 0 10px; border-bottom: none; transition: height 0.3s ease-in-out, padding 0.3s ease-in-out; display: grid; grid-template-columns: 1fr 1fr 1fr; /* Set grid columns for collapsed state */ width: 100%; } #filter-options-box > div { padding-top: 30px; } `; document.head.appendChild(style); // Use MutationObserver to wait for the item list to load const observer = new MutationObserver((mutations) => { if (document.querySelector('.itemListWrapper___ugBOt')) { initializeBuyFilters(); observer.disconnect(); } }); observer.observe(document.body, { childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址