您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hide unwanted targets from pickpocketing crime page to avoid unintended operation.
- // ==UserScript==
- // @name block-unwanted-pickpocketing-target
- // @namespace nodelore.torn.easy-market
- // @version 1.3
- // @description Hide unwanted targets from pickpocketing crime page to avoid unintended operation.
- // @author nodelore[2786679]
- // @license MIT
- // @match https://www.torn.com/loader.php?sid=crimes*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=torn.com
- // @grant none
- // ==/UserScript==
- (function(){
- console.log(`[BUP] Block unwanted pickpocketing target!`)
- const $ = window.jQuery;
- const url = location.href;
- if(url.indexOf('pickpocketing') === -1){
- return;
- }
- let blockFlag = true;
- // According to https://www.torn.com/forums.php#/p=threads&f=61&t=16358739&b=0&a=0
- const safety_targets = [
- "Drunk man",
- "Drunk woman",
- "Homeless person",
- "Junkie",
- "Elderly man",
- "Elderly woman"
- ]
- // add targets you want to block here
- const block_targets = [
- "Gang member",
- "Thug",
- "Police officer",
- "Mobster",
- ]
- // add activities you want to block here
- const avoid_activities = [
- "Jogging",
- "Cycling",
- "Walking", // you can remove this to enable showing walking target
- ]
- const block_physicalprops = [
- "Muscular",
- "Athletic",
- ]
- const block_elements = [];
- const extractPhysical = function(physicalProps){
- if(physicalProps.length > 0){
- const allText = physicalProps.text();
- if(allText.length > 0){
- const splitProps = allText.split(',');
- if(splitProps.length > 0){
- return splitProps[0].split(' ')[0];
- }
- }
- }
- return '';
- }
- const updatePocketState = function(crimeTitle){
- // update state
- const total = $('div.crime-option');
- let totalCount = 0;
- let blockCount = 0;
- total.each(function(){
- const clock = $(this).find("div[class^='clock']").text();
- if(clock === "0s"){
- $(this).hide();
- return;
- }
- else if($(this).css('display') === 'none'){
- blockCount += 1;
- }
- totalCount += 1;
- })
- // crimeTitle.find('span.pocket-state').text(`(${blockCount} of ${totalCount} blocked)`);
- }
- const updateCrimeOption = function(option){
- const crimeTitle = $("div[class^='crimeHeading'] div:eq(0)");
- if(crimeTitle.find("span.pocket-state").length < 1){
- const pocket_state = $(`<span class="pocket-state t-red" title="Click to toggle"></span>`);
- pocket_state.click(function(){
- blockFlag = !blockFlag;
- if(blockFlag){
- for(let ele of block_elements){
- if(ele){
- ele.hide();
- }
- }
- crimeTitle.find('span.pocket-state').text(`(Blocking Enabled)`);
- }
- else{
- $('div.crime-option').each(function(){
- if($(this).css('display') === 'none'){
- $(this).show();
- block_elements.push($(this));
- }
- });
- crimeTitle.find('span.pocket-state').text(`(Blocking Disabled)`);
- }
- updatePocketState(crimeTitle);
- });
- crimeTitle.append(pocket_state);
- }
- updatePocketState(crimeTitle);
- if(blockFlag){
- crimeTitle.find('span.pocket-state').text(`(Blocking Enabled)`);
- }
- const titleProps = option.find("div[class^='titleAndProps'] div");
- const physicalProps = option.find("div[class^='titleAndProps'] button[class^='physicalPropsButton']");
- const activities = option.find("div[class^='activity']");
- if(titleProps.length > 0 && activities.length > 0){
- const title = titleProps.contents().filter(function(){
- return this.nodeType === 3;
- }).text();
- const physical = extractPhysical(physicalProps);
- const activity = activities.contents().filter(function(){
- return this.nodeType === 3;
- }).text();
- if(block_targets.indexOf(title) !== -1){
- block_elements.push(option);
- option.find("button[class*='commitButton']").css({
- border: '2px solid red'
- });
- if(blockFlag){
- option.hide();
- }
- console.log(`[BUP] Block ${title} who is ${activity} with physical status ${physical}`);
- }
- else if(avoid_activities.indexOf(activity) !== -1){
- block_elements.push(option);
- option.find("button[class*='commitButton']").css({
- border: '2px solid red'
- });
- if(blockFlag){
- option.hide();
- }
- console.log(`[BUP] Block ${title} who is ${activity} with physical status ${physical}`);
- }
- else if(block_physicalprops.indexOf(physical) !== -1){
- block_elements.push(option);
- option.find("button[class*='commitButton']").css({
- border: '2px solid red'
- });
- if(blockFlag){
- option.hide();
- }
- console.log(`[BUP] Block ${title} who is ${activity} with physical status ${physical}`);
- }
- else if(safety_targets.indexOf(title) !== -1){
- option.find("button[class*='commitButton']").css({
- border: '2px solid #37b24d'
- });
- console.log(`[BUP] Highlight ${title} who is ${activity} with physical status ${physical}`);
- }
- }
- }
- waitForKeyElements('.crime-option', updateCrimeOption);
- })();
- function waitForKeyElements(
- selectorTxt,
- actionFunction,
- bWaitOnce,
- iframeSelector
- ) {
- var targetNodes, btargetsFound;
- if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt);
- else targetNodes = $(iframeSelector).contents().find(selectorTxt);
- if (targetNodes && targetNodes.length > 0) {
- btargetsFound = true;
- /*--- Found target node(s). Go through each and act if they
- are new.
- */
- targetNodes.each(function () {
- var jThis = $(this);
- var alreadyFound = jThis.data("alreadyFound") || false;
- if (!alreadyFound) {
- //--- Call the payload function.
- var cancelFound = actionFunction(jThis);
- if (cancelFound) btargetsFound = false;
- else jThis.data("alreadyFound", true);
- }
- });
- } else {
- btargetsFound = false;
- }
- //--- Get the timer-control variable for this selector.
- var controlObj = waitForKeyElements.controlObj || {};
- var controlKey = selectorTxt.replace(/[^\w]/g, "_");
- var timeControl = controlObj[controlKey];
- //--- Now set or clear the timer as appropriate.
- if (btargetsFound && bWaitOnce && timeControl) {
- //--- The only condition where we need to clear the timer.
- clearInterval(timeControl);
- delete controlObj[controlKey];
- } else {
- //--- Set a timer, if needed.
- if (!timeControl) {
- timeControl = setInterval(function () {
- waitForKeyElements(
- selectorTxt,
- actionFunction,
- bWaitOnce,
- iframeSelector
- );
- }, 300);
- controlObj[controlKey] = timeControl;
- }
- }
- waitForKeyElements.controlObj = controlObj;
- }