您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes mugging easier
当前为
// ==UserScript== // @name Mug Helper // @namespace http://tampermonkey.net/ // @license NOLICENSE // @version 0.2 // @description Makes mugging easier // @author Harmageddon // @match https://www.torn.com/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM.xmlHttpRequest // @run-at document-end // ==/UserScript== let API_KEY = ""; const waitForElement = (selector) => { return new Promise(resolve => { if (document.querySelector(selector)) { return resolve(document.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (document.querySelector(selector)) { resolve(document.querySelector(selector)); observer.disconnect(); } }); observer.observe(document.body, { childList: true, subtree: true }); }); }; const getRequestAsync = (url) => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { resolve(response.responseText); }, onerror: function(error) { reject(error); } }); }); } const waitForElements = (selector, action, container, timeControl) => { let targetNodes = (container ?? document).querySelectorAll(selector); if (targetNodes && targetNodes.length > 0) { targetNodes.forEach(function (node) { let alreadyFound = node.getAttribute('data-found') || false; if (!alreadyFound) { if (!action(node)) { node.setAttribute('data-found', true); } } }); } if (!timeControl) { timeControl = setInterval(() => { waitForElements(selector, action, container, timeControl); }, 300); } }; const JSONparse = (str) => { try { return JSON.parse(str); } catch (e) {} return null; } const inject_initial_html = () => { }; const check_cloting_store = () => { const check_status = () => { let urlParams = new URLSearchParams(window.location.search); let userID = urlParams.get('user2ID'); //const url = `https://api.torn.com/user/${userID}?selections=basic,icons&key=${API_KEY}`; const url = `https://api.torn.com/user/${userID}?&key=${API_KEY}`; GM.xmlHttpRequest( { method: 'POST', url: url, onload: function (response) { if (response.status == '200') { const data = JSON.parse(response.responseText); const containsCompanyClothingStore = Object.values(data.basicicons).some(value => value.toLowerCase().includes("company") && value.toLowerCase().includes("(clothing store)") ); // Add span only if it doesn't already exist if (containsCompanyClothingStore) { const companyUrl = `https://api.torn.com/company/${data.job.company_id}?&key=${API_KEY}`; GM.xmlHttpRequest( { method: 'POST', url: companyUrl , onload: function (response) { if (response.status == '200') { const companyData = JSON.parse(response.responseText) if(companyData.company.rating >= 7) { injectFlashingCSS(); const container = document.querySelector('.title___rhtB4'); if (container && container.textContent.includes('Attacking') && !container.querySelector('.clothing-store-span')) { const span = document.createElement('span'); span.className = 'clothing-store-span flashing-text'; // Add a unique and flashing class span.textContent = 'Clothing Store Mug Protection is active'; span.style.color = "red"; container.appendChild(span); } } } } }); } } } }); }; function injectFlashingCSS() { const css = ` @keyframes flash { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } } .flashing-text { animation: flash 1s infinite; } `; const style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); } check_status(); }; const init = () => { check_cloting_store(); }; (function() { 'use strict'; inject_initial_html(); if (API_KEY) { init(); } })();