您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Torn Organised Crimes v2.0 requirements for roles
// ==UserScript== // @name Torn OC 2 Requirements // @namespace https://github.com/SOLiNARY // @version 0.2 // @description Torn Organised Crimes v2.0 requirements for roles // @author Silmaril [2665762] // @license MIT License // @match https://www.torn.com/factions.php?step=your // @match https://www.torn.com/factions.php?step=your* // @match https://torn.com/factions.php?step=your // @match https://torn.com/factions.php?step=your* // @icon https://www.google.com/s2/favicons?sz=64&domain=torn.com // @run-at document-idle // ==/UserScript== (function() { 'use strict'; const CRIMES_TAB = '#/tab=crimes'; const CRIMES_REQUIREMENTS = {'Blast from the Past': {'Bomber': 70, 'Engineer': 70, 'Hacker': 70, 'Muscle': 70, 'Picklock #1': 70, 'Picklock #2': 0}, 'Break the Bank': {'Robber': 60, 'Thief #1': 60, 'Thief #2': 60, 'Muscle #1': 60, 'Muscle #2': 60, 'Muscle #3': 60}, 'Stacking the Deck': {'Cat Burglar': 68, 'Driver': 50, 'Imitator': 68, 'Hacker': 68}, 'Ace in the Hole': {'Hacker': 63, 'Driver': 53, 'Imitator': 63, 'Muscle #1': 63, 'Muscle #2': 63}}; const observerTarget = document.querySelector("#faction-crimes"); const observerConfig = { attributes: false, childList: true, characterData: false, subtree: true }; const observer = new MutationObserver(function(mutations) { mutations.forEach(mutationRaw => { if (window.location.href.indexOf(CRIMES_TAB) > -1){ let mutation = mutationRaw.target; if (String(mutation.className).indexOf('description___') > -1){ let crimeParentRow = mutation.parentNode.parentNode.parentNode; let crimeTitle = crimeParentRow.querySelector('[class^=scenario] > [class^=wrapper___] > [class^=panel___] > [class^=panelTitle___]').textContent; let crimeRequirements = CRIMES_REQUIREMENTS[crimeTitle]; if (crimeRequirements === undefined) return; crimeParentRow.querySelectorAll('[class^=wrapper___] > [class^=wrapper___]').forEach(crime => { let slotTitle = crime.querySelector('[class^=slotHeader___] > [class^=title___]').textContent; let slotSkill = Number(crime.querySelector('[class^=slotHeader___] > [class^=successChance___]').textContent); if (crime.className.indexOf('waitingJoin___') > -1){ let roleRequirement = crimeRequirements[slotTitle]; if (roleRequirement !== undefined){ if (slotSkill < roleRequirement){ let roleJoinBtn = crime.querySelector('[class^=slotBody___] > [class^=joinContainer___] > [class^=joinButtonContainer___] > [class*=joinButton___]'); roleJoinBtn.setAttribute('disabled', true); roleJoinBtn.textContent = `<${roleRequirement}`; roleJoinBtn.style.color = 'crimson'; } } } }); } } }); }); observer.observe(observerTarget, observerConfig); })();