// ==UserScript==
// @name Torn Safecracker
// @namespace rDacted
// @version 20241202
// @description Adds a bruteforce option to opening Duke's Safe
// @author rDacted
// @match https://www.torn.com/item.php
// @grant none
// @license MIT
// ==/UserScript==
// This implmentation is based on the excellent forum post by chaoticsoldier [2752977]
// https://www.torn.com/forums.php#/p=threads&f=47&t=16406373&b=0&a=0
(function() {
'use strict';
const COMBINATIONS = [
["10", "24", "10"],
["10", "25", "10"],
["10", "26", "10"],
["10", "25", "11"],
["10", "26", "11"],
["10", "27", "11"],
["10", "26", "12"],
["10", "27", "12"],
["10", "28", "12"],
["10", "29", "12"],
["11", "26", "11"],
["11", "27", "11"],
["11", "28", "11"],
["11", "29", "11"],
["11", "27", "12"],
["11", "28", "12"],
["11", "29", "12"],
["11", "30", "12"],
["11", "28", "13"],
["11", "29", "13"],
["11", "30", "13"],
["11", "31", "13"],
["12", "28", "12"],
["12", "29", "12"],
["12", "30", "12"],
["12", "31", "12"],
["12", "30", "13"],
["12", "31", "13"],
["12", "32", "13"],
["12", "33", "13"],
["12", "31", "14"],
["12", "32", "14"],
["12", "33", "14"],
["12", "34", "14"],
["13", "31", "13"],
["13", "32", "13"],
["13", "33", "13"],
["13", "34", "13"],
["13", "32", "14"],
["13", "33", "14"],
["13", "34", "14"],
["13", "35", "14"],
["13", "33", "15"],
["13", "34", "15"],
["13", "35", "15"],
["13", "36", "15"],
["14", "33", "14"],
["14", "34", "14"],
["14", "35", "14"],
["14", "36", "14"],
["14", "34", "15"],
["14", "35", "15"],
["14", "36", "15"],
["14", "37", "15"],
["14", "38", "15"],
["14", "36", "16"],
["14", "37", "16"],
["14", "38", "16"],
["14", "39", "16"],
["15", "36", "15"],
["15", "37", "15"],
["15", "38", "15"],
["15", "39", "15"],
["15", "37", "16"],
["15", "38", "16"],
["15", "39", "16"],
["15", "40", "16"],
["15", "38", "17"],
["15", "39", "17"],
["15", "40", "17"],
["15", "41", "17"],
["15", "42", "17"],
["16", "38", "16"],
["16", "39", "16"],
["16", "40", "16"],
["16", "41", "16"],
["16", "42", "16"],
["16", "39", "17"],
["16", "40", "17"],
["16", "41", "17"],
["16", "42", "17"],
["16", "43", "17"],
["16", "40", "18"],
["16", "41", "18"],
["16", "42", "18"],
["16", "43", "18"],
["16", "44", "18"],
["17", "40", "17"],
["17", "41", "17"],
["17", "42", "17"],
["17", "43", "17"],
["17", "44", "17"],
["17", "42", "18"],
["17", "43", "18"],
["17", "44", "18"],
["17", "45", "18"],
["17", "46", "18"],
["17", "43", "19"],
["17", "44", "19"],
["17", "45", "19"],
["17", "46", "19"],
["17", "47", "19"],
["18", "43", "18"],
["18", "44", "18"],
["18", "45", "18"],
["18", "46", "18"],
["18", "47", "18"],
["18", "44", "19"],
["18", "45", "19"],
["18", "46", "19"],
["18", "47", "19"],
["18", "48", "19"],
["18", "45", "20"],
["18", "46", "20"],
["18", "47", "20"],
["18", "48", "20"],
["18", "49", "20"],
["19", "45", "19"],
["19", "46", "19"],
["19", "47", "19"],
["19", "48", "19"],
["19", "49", "19"],
["19", "46", "20"],
["19", "47", "20"],
["19", "48", "20"],
["19", "49", "20"],
["19", "50", "20"],
["19", "51", "20"],
["19", "48", "21"],
["19", "49", "21"],
["19", "50", "21"],
["19", "51", "21"],
["19", "52", "21"],
["20", "49", "21"],
["20", "50", "21"],
["20", "51", "21"],
["20", "52", "21"],
["20", "53", "21"],
["20", "50", "22"],
["20", "51", "22"],
["20", "52", "22"],
["20", "53", "22"],
["20", "54", "22"],
["20", "55", "22"],
["21", "51", "22"],
["21", "52", "22"],
["21", "53", "22"],
["21", "54", "22"],
["21", "55", "22"],
["21", "56", "22"],
["21", "52", "23"],
["21", "53", "23"],
["21", "54", "23"],
["21", "55", "23"],
["21", "56", "23"],
["21", "57", "23"],
["21", "54", "24"],
["21", "55", "24"],
["21", "56", "24"],
["21", "57", "24"],
["21", "58", "24"],
["21", "59", "24"],
["22", "54", "23"],
["22", "55", "23"],
["22", "56", "23"],
["22", "57", "23"],
["22", "58", "23"],
["22", "59", "23"],
["22", "55", "24"],
["22", "56", "24"],
["22", "57", "24"],
["22", "58", "24"],
["22", "59", "24"],
["22", "60", "24"],
["22", "56", "25"],
["22", "57", "25"],
["22", "58", "25"],
["22", "59", "25"],
["22", "60", "25"],
["22", "61", "25"],
["23", "56", "24"],
["23", "57", "24"],
["23", "58", "24"],
["23", "59", "24"],
["23", "60", "24"],
["23", "61", "24"],
["23", "57", "25"],
["23", "58", "25"],
["23", "59", "25"],
["23", "60", "25"],
["23", "61", "25"],
["23", "62", "25"],
["23", "58", "26"],
["23", "59", "26"],
["23", "60", "26"],
["23", "61", "26"],
["23", "62", "26"],
["23", "63", "26"],
["23", "64", "26"],
["24", "58", "25"],
["24", "59", "25"],
["24", "60", "25"],
["24", "61", "25"],
["24", "62", "25"],
["24", "63", "25"],
["24", "64", "25"],
["24", "60", "26"],
["24", "61", "26"],
["24", "62", "26"],
["24", "63", "26"],
["24", "64", "26"],
["24", "65", "26"],
["24", "61", "27"],
["24", "62", "27"],
["24", "63", "27"],
["24", "64", "27"],
["24", "65", "27"],
["24", "66", "27"],
["25", "61", "26"],
["25", "62", "26"],
["25", "63", "26"],
["25", "64", "26"],
["25", "65", "26"],
["25", "66", "26"],
["25", "62", "27"],
["25", "63", "27"],
["25", "64", "27"],
["25", "65", "27"],
["25", "66", "27"],
["25", "67", "27"],
["25", "68", "27"],
["25", "63", "28"],
["25", "64", "28"],
["25", "65", "28"],
["25", "66", "28"],
["25", "67", "28"],
["25", "68", "28"],
["25", "69", "28"],
["26", "63", "27"],
["26", "64", "27"],
["26", "65", "27"],
["26", "66", "27"],
["26", "67", "27"],
["26", "68", "27"],
["26", "69", "27"],
["26", "64", "28"],
["26", "65", "28"],
["26", "66", "28"],
["26", "67", "28"],
["26", "68", "28"],
["26", "69", "28"],
["26", "70", "28"],
["26", "66", "29"],
["26", "67", "29"],
["26", "68", "29"],
["26", "69", "29"],
["26", "70", "29"],
["26", "71", "29"],
["26", "72", "29"],
["27", "66", "28"],
["27", "67", "28"],
["27", "68", "28"],
["27", "69", "28"],
["27", "70", "28"],
["27", "71", "28"],
["27", "72", "28"],
["27", "67", "29"],
["27", "68", "29"],
["27", "69", "29"],
["27", "70", "29"],
["27", "71", "29"],
["27", "72", "29"],
["27", "73", "29"],
["27", "68", "30"],
["27", "69", "30"],
["27", "70", "30"],
["27", "71", "30"],
["27", "72", "30"],
["27", "73", "30"],
["27", "74", "30"],
["28", "68", "29"],
["28", "69", "29"],
["28", "70", "29"],
["28", "71", "29"],
["28", "72", "29"],
["28", "73", "29"],
["28", "74", "29"],
["28", "69", "30"],
["28", "70", "30"],
["28", "71", "30"],
["28", "72", "30"],
["28", "73", "30"],
["28", "74", "30"],
["28", "75", "30"],
["28", "70", "31"],
["28", "71", "31"],
["28", "72", "31"],
["28", "73", "31"],
["28", "74", "31"],
["28", "75", "31"],
["28", "76", "31"],
["28", "77", "31"],
["29", "70", "30"],
["29", "71", "30"],
["29", "72", "30"],
["29", "73", "30"],
["29", "74", "30"],
["29", "75", "30"],
["29", "76", "30"],
["29", "77", "30"],
["29", "72", "31"],
["29", "73", "31"],
["29", "74", "31"],
["29", "75", "31"],
["29", "76", "31"],
["29", "77", "31"],
["29", "78", "31"],
["29", "73", "32"],
["29", "74", "32"],
["29", "75", "32"],
["29", "76", "32"],
["29", "77", "32"],
["29", "78", "32"],
["29", "79", "32"],
["30", "73", "31"],
["30", "74", "31"],
["30", "75", "31"],
["30", "76", "31"],
["30", "77", "31"],
["30", "78", "31"],
["30", "79", "31"],
["30", "74", "32"],
["30", "75", "32"],
["30", "76", "32"],
["30", "77", "32"],
["30", "78", "32"],
["30", "79", "32"],
["30", "80", "32"],
["30", "81", "32"],
["30", "75", "33"],
["30", "76", "33"],
["30", "77", "33"],
["30", "78", "33"],
["30", "79", "33"],
["30", "80", "33"],
["30", "81", "33"],
["30", "82", "33"],
["31", "76", "33"],
["31", "77", "33"],
["31", "78", "33"],
["31", "79", "33"],
["31", "80", "33"],
["31", "81", "33"],
["31", "82", "33"],
["31", "83", "33"],
["31", "78", "34"],
["31", "79", "34"],
["31", "80", "34"],
["31", "81", "34"],
["31", "82", "34"],
["31", "83", "34"],
["31", "84", "34"],
["31", "85", "34"],
["32", "79", "34"],
["32", "80", "34"],
["32", "81", "34"],
["32", "82", "34"],
["32", "83", "34"],
["32", "84", "34"],
["32", "85", "34"],
["32", "86", "34"],
["32", "80", "35"],
["32", "81", "35"],
["32", "82", "35"],
["32", "83", "35"],
["32", "84", "35"],
["32", "85", "35"],
["32", "86", "35"],
["32", "87", "35"],
["33", "81", "35"],
["33", "82", "35"],
["33", "83", "35"],
["33", "84", "35"],
["33", "85", "35"],
["33", "86", "35"],
["33", "87", "35"],
["33", "88", "35"],
["33", "82", "36"],
["33", "83", "36"],
["33", "84", "36"],
["33", "85", "36"],
["33", "86", "36"],
["33", "87", "36"],
["33", "88", "36"],
["33", "89", "36"],
["33", "90", "36"],
["34", "84", "36"],
["34", "85", "36"],
["34", "86", "36"],
["34", "87", "36"],
["34", "88", "36"],
["34", "89", "36"],
["34", "90", "36"],
["34", "91", "36"],
["34", "85", "37"],
["34", "86", "37"],
["34", "87", "37"],
["34", "88", "37"],
["34", "89", "37"],
["34", "90", "37"],
["34", "91", "37"],
["34", "92", "37"],
["35", "86", "37"],
["35", "87", "37"],
["35", "88", "37"],
["35", "89", "37"],
["35", "90", "37"],
["35", "91", "37"],
["35", "92", "37"],
["35", "93", "37"],
["35", "94", "37"],
["35", "87", "38"],
["35", "88", "38"],
["35", "89", "38"],
["35", "90", "38"],
["35", "91", "38"],
["35", "92", "38"],
["35", "93", "38"],
["35", "94", "38"],
["35", "95", "38"],
["36", "88", "38"],
["36", "89", "38"],
["36", "90", "38"],
["36", "91", "38"],
["36", "92", "38"],
["36", "93", "38"],
["36", "94", "38"],
["36", "95", "38"],
["36", "96", "38"],
["36", "90", "39"],
["36", "91", "39"],
["36", "92", "39"],
["36", "93", "39"],
["36", "94", "39"],
["36", "95", "39"],
["36", "96", "39"],
["36", "97", "39"],
["36", "98", "39"],
["37", "91", "39"],
["37", "92", "39"],
["37", "93", "39"],
["37", "94", "39"],
["37", "95", "39"],
["37", "96", "39"],
["37", "97", "39"],
["37", "98", "39"],
["37", "99", "39"],
["37", "92", "40"],
["37", "93", "40"],
["37", "94", "40"],
["37", "95", "40"],
["37", "96", "40"],
["37", "97", "40"],
["37", "98", "40"],
["37", "99", "40"],
["37", "10", "40"],
["38", "93", "40"],
["38", "94", "40"],
["38", "95", "40"],
["38", "96", "40"],
["38", "97", "40"],
["38", "98", "40"],
["38", "99", "40"],
["38", "10", "40"],
["38", "94", "41"],
["38", "95", "41"],
["38", "96", "41"],
["38", "97", "41"],
["38", "98", "41"],
["38", "99", "41"],
["38", "10", "41"],
["39", "96", "41"],
["39", "97", "41"],
["39", "98", "41"],
["39", "99", "41"],
["39", "10", "41"],
["39", "97", "42"],
["39", "98", "42"],
["39", "99", "42"],
["39", "10", "42"],
["40", "99", "43"],
["40", "10", "43"],
["40", "10", "44"],
["41", "10", "44"],
["41", "11", "44"],
["41", "10", "45"],
["41", "11", "45"],
["42", "10", "45"],
["42", "11", "45"],
["42", "10", "46"],
["42", "11", "46"],
["42", "10", "47"],
["42", "11", "47"],
["42", "10", "48"],
["42", "11", "48"],
["43", "10", "46"],
["43", "11", "46"],
["43", "10", "47"],
["43", "11", "47"],
["43", "10", "48"],
["43", "11", "48"],
["43", "11", "49"],
["43", "12", "49"],
["44", "10", "47"],
["44", "11", "47"],
["44", "11", "48"],
["44", "12", "48"],
["44", "11", "49"],
["44", "12", "49"],
["44", "11", "50"],
["44", "12", "50"],
["45", "11", "48"],
["45", "12", "48"],
["45", "11", "49"],
["45", "12", "49"],
["45", "11", "50"],
["45", "12", "50"],
["45", "11", "51"],
["45", "12", "51"],
["46", "11", "49"],
["46", "12", "49"],
["46", "11", "50"],
["46", "12", "50"],
["46", "11", "51"],
["46", "12", "51"],
["46", "11", "52"],
["46", "12", "52"],
["47", "11", "50"],
["47", "12", "50"],
["47", "11", "51"],
["47", "12", "51"],
["47", "11", "52"],
["47", "12", "52"],
["47", "12", "53"],
["47", "13", "53"],
["48", "11", "51"],
["48", "12", "51"],
["48", "12", "52"],
["48", "13", "52"],
["48", "12", "53"],
["48", "13", "53"],
["48", "12", "54"],
["48", "13", "54"],
["49", "12", "52"],
["49", "13", "52"],
["49", "12", "53"],
["49", "13", "53"],
["49", "12", "54"],
["49", "13", "54"],
["49", "12", "55"],
["49", "13", "55"],
["50", "12", "53"],
["50", "13", "53"],
["50", "12", "54"],
["50", "13", "54"],
["50", "12", "55"],
["50", "13", "55"],
["50", "12", "56"],
["50", "13", "56"],
["51", "12", "54"],
["51", "13", "54"],
["51", "12", "55"],
["51", "13", "55"],
["51", "12", "56"],
["51", "13", "56"],
["51", "12", "57"],
["51", "13", "57"],
["51", "14", "57"],
["52", "12", "55"],
["52", "13", "55"],
["52", "12", "56"],
["52", "13", "56"],
["52", "14", "56"],
["52", "13", "57"],
["52", "14", "57"],
["52", "13", "58"],
["52", "14", "58"],
["53", "13", "56"],
["53", "14", "56"],
["53", "13", "57"],
["53", "14", "57"],
["53", "13", "58"],
["53", "14", "58"],
["53", "13", "59"],
["53", "14", "59"],
["54", "13", "57"],
["54", "14", "57"],
["54", "13", "58"],
["54", "14", "58"],
["54", "13", "59"],
["54", "14", "59"],
["54", "13", "60"],
["54", "14", "60"],
["55", "13", "58"],
["55", "14", "58"],
["55", "13", "59"],
["55", "14", "59"],
["55", "13", "60"],
["55", "14", "60"],
["55", "15", "60"],
["55", "13", "61"],
["55", "14", "61"],
["55", "15", "61"],
["55", "14", "62"],
["55", "15", "62"],
["56", "13", "59"],
["56", "14", "59"],
["56", "15", "59"],
["56", "13", "60"],
["56", "14", "60"],
["56", "15", "60"],
["56", "14", "61"],
["56", "15", "61"],
["56", "14", "62"],
["56", "15", "62"],
["56", "14", "63"],
["56", "15", "63"],
["57", "14", "60"],
["57", "15", "60"],
["57", "14", "61"],
["57", "15", "61"],
["57", "14", "62"],
["57", "15", "62"],
["57", "14", "63"],
["57", "15", "63"],
["57", "14", "64"],
["57", "15", "64"],
["58", "14", "61"],
["58", "15", "61"],
["58", "14", "62"],
["58", "15", "62"],
["58", "14", "63"],
["58", "15", "63"],
["58", "14", "64"],
["58", "15", "64"],
["58", "14", "65"],
["58", "15", "65"],
["58", "16", "65"],
["59", "14", "62"],
["59", "15", "62"],
["59", "14", "63"],
["59", "15", "63"],
["59", "14", "64"],
["59", "15", "64"],
["59", "16", "64"],
["59", "14", "65"],
["59", "15", "65"],
["59", "16", "65"],
["59", "15", "66"],
["59", "16", "66"],
["60", "14", "63"],
["60", "15", "63"],
["60", "16", "63"],
["60", "14", "64"],
["60", "15", "64"],
["60", "16", "64"],
["60", "15", "65"],
["60", "16", "65"],
["60", "15", "66"],
["60", "16", "66"],
["60", "15", "67"],
["60", "16", "67"],
["61", "15", "64"],
["61", "16", "64"],
["61", "15", "65"],
["61", "16", "65"],
["61", "15", "66"],
["61", "16", "66"],
["61", "15", "67"],
["61", "16", "67"],
["61", "15", "68"],
["61", "16", "68"],
["62", "15", "65"],
["62", "16", "65"],
["62", "15", "66"],
["62", "16", "66"],
["62", "15", "67"],
["62", "16", "67"],
["62", "15", "68"],
["62", "16", "68"],
["62", "15", "69"],
["62", "16", "69"],
["62", "17", "69"],
["63", "15", "66"],
["63", "16", "66"],
["63", "15", "67"],
["63", "16", "67"],
["63", "15", "68"],
["63", "16", "68"],
["63", "17", "68"],
["63", "15", "69"],
["63", "16", "69"],
["63", "17", "69"],
["63", "15", "70"],
["63", "16", "70"],
["63", "17", "70"],
["64", "15", "67"],
["64", "16", "67"],
["64", "17", "67"],
["64", "15", "68"],
["64", "16", "68"],
["64", "17", "68"],
["64", "15", "69"],
["64", "16", "69"],
["64", "17", "69"],
["64", "16", "70"],
["64", "17", "70"],
["64", "16", "71"],
["64", "17", "71"],
["65", "15", "68"],
["65", "16", "68"],
["65", "17", "68"],
["65", "16", "69"],
["65", "17", "69"],
["65", "16", "70"],
["65", "17", "70"],
["65", "16", "71"],
["65", "17", "71"],
["65", "16", "72"],
["65", "17", "72"],
["66", "16", "69"],
["66", "17", "69"],
["66", "16", "70"],
["66", "17", "70"],
["66", "16", "71"],
["66", "17", "71"],
["66", "16", "72"],
["66", "17", "72"],
["66", "16", "73"],
["66", "17", "73"],
["66", "18", "73"],
["67", "16", "70"],
["67", "17", "70"],
["67", "16", "71"],
["67", "17", "71"],
["67", "16", "72"],
["67", "17", "72"],
["67", "18", "72"],
["67", "16", "73"],
["67", "17", "73"],
["67", "18", "73"],
["67", "16", "74"],
["67", "17", "74"],
["67", "18", "74"],
["68", "16", "71"],
["68", "17", "71"],
["68", "18", "71"],
["68", "16", "72"],
["68", "17", "72"],
["68", "18", "72"],
["68", "16", "73"],
["68", "17", "73"],
["68", "18", "73"],
["68", "17", "74"],
["68", "18", "74"],
["68", "17", "75"],
["68", "18", "75"],
["69", "16", "72"],
["69", "17", "72"],
["69", "18", "72"],
["69", "17", "73"],
["69", "18", "73"],
["69", "17", "74"],
["69", "18", "74"],
["69", "17", "75"],
["69", "18", "75"],
["69", "17", "76"],
["69", "18", "76"],
["70", "17", "73"],
["70", "18", "73"],
["70", "17", "74"],
["70", "18", "74"],
["70", "17", "75"],
["70", "18", "75"],
["70", "17", "76"],
["70", "18", "76"],
["70", "19", "76"],
["70", "17", "77"],
["70", "18", "77"],
["70", "19", "77"],
];
function set_next_safe_code(button, code1, code2, code3) {
for (let i = 0; i < COMBINATIONS.length; i++) {
let combo = COMBINATIONS[i];
if (code1.val() == combo[0] && code2.val() == combo[1] && code3.val() == combo[2]) {
i = i + 1;
if (i == COMBINATIONS.length) {
i = 0
}
let new_combo = COMBINATIONS[i]
code1.val(new_combo[0]);
code2.val(new_combo[1]);
code3.val(new_combo[2]);
button.val(`Brute Force ${i + 1} / ${COMBINATIONS.length}`);
return;
}
}
// It wasn't in the array, use the first item
let new_combo = COMBINATIONS[0]
code1.val(new_combo[0]);
code2.val(new_combo[1]);
code3.val(new_combo[2]);
button.val(`Brute Force 1 / ${COMBINATIONS.length}`);
}
async function duplicateButton(originalButton, code1, code2, code3) {
const duplicatedButton = originalButton.clone();
duplicatedButton.val("Brute Force");
duplicatedButton.attr("type", "button");
duplicatedButton.attr("style", "");
duplicatedButton.on('click', function () {
set_next_safe_code(duplicatedButton, code1, code2, code3);
// Attempt this combination
getAction({
type: 'post',
action: 'item.php',
data: {
step: 'useItem',
action: 'use',
itemID: '798',
code1: code1.val(),
code2: code2.val(),
code3: code3.val(),
},
success: (str) => {
let success = JSON.parse(str)["success"];
console.log(success)
if (success) {
button.disabled = true;
// Or is it this one?
//duplicatedButton.prop("disabled", true)
}
}
});
});
originalButton.after(duplicatedButton);
}
const observer = new MutationObserver(function (mutationsList) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
$('.safe-input').each(function () {
const safeInput = $(this);
const code1 = $('input[name="code1"]');
const code2 = $('input[name="code2"]');
const code3 = $('input[name="code3"]');
const tornBtn = safeInput.find('.torn-btn');
if (tornBtn.length && !tornBtn.data('duplicated')) {
duplicateButton(tornBtn, code1, code2, code3);
tornBtn.data('duplicated', true); // Prevent multiple duplications
}
});
}
}
});
// Start observing the page for changes
observer.observe(document.body, { childList: true, subtree: true });
})();