NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Torn Bazaar Buttons
// @version 0.1
// @description Add Items Quickly
// @author Merlin Reichwald
// @match https://www.torn.com/bazaar.php
// @copyright 2018, Merlin-R (https://openuserjs.org/users/Merlin-R)
// @license MIT
// @grant none
// ==/UserScript==
(function () {
'use strict';
$(() => {
// Set Value of Torn Inputs and refresh their state. May throw react errors but achieves its goal regardless
$.fn.tornInputVal = function (value) {
return $(this).val(value).each((i, e) => e.dispatchEvent(new Event("input", {
bubbles: true
})));
}
// Triggers Torn Button Click
$.fn.tornClick = function () {
return $(this).each((i, e) => e.dispatchEvent(new Event("click", {
bubbles: true
})));
}
function delay(ms) {
return new Promise((r, j) => setTimeout(r, ms))
}
// Create Torn Button
function tornButton(text, handler) {
let btn = $('<span class="btn-wrap silver"><span class="btn"><input type="submit" value="' + text + '"></input></span></span>');
if (handler) btn.on('click', handler);
return btn;
}
// Get all items of a certain type on the add items to bazaar page.
async function bazaarAllItemsOfType(type) {
let rows = $('li.clearfix.no-mods').filter((i, li) => $(li).data('reactid').indexOf(type) !== -1);
if (!rows.length) {
$('.ui-tabs-anchor[href=#' + type + ']').tornClick();
await delay(100);
let result = await bazaarAllItemsOfType(type);
$('.ui-tabs-anchor[href=#All]').tornClick();
return result;
}
return rows.map((i, li) => {
let $li = $(li);
let split = $li.find('.name-wrap').text().split(' ');
let name = split[1];
let amount = +split[2].substr(1);
let value = +$li.find('.info-main-wrap').text().substr(1).replace(/,/g, '');
let price = (value - 1); // - (value % 100);
let $amount = $li.find('.amount input');
let $price = $li.find('.price input');
return {
$li: $li,
name: name,
amount: amount,
value: value,
price: price,
$amount: $amount,
$price: $price
}
});
}
// Sells all goods of a given category for 500$ below market value, rounded to 100s
async function bazaarSellAllItemsOfType(type) {
return (await bazaarAllItemsOfType(type)).each((i, e) => {
e.$amount.tornInputVal(e.amount);
e.$price.tornInputVal(e.price);
});
}
// Sells all Plushies for 500$ below market value, rounded to 100s
async function bazaarSellAllPlushies() {
return await bazaarSellAllItemsOfType("Plushie");
}
// Sells all Flowers for 500$ below market value, rounded to 100s
async function bazaarSellAllFlowers() {
return await bazaarSellAllItemsOfType("Flower");
}
// Extend UI to create buttons for selling flowers or plushies
function bazaarAddButtons() {
let $top = $('.items-wrap.view-2 .items-footer.clearfix').first();
if ($top.data('extra-buttons')) return;
let $btnFlowers = tornButton("All Flowers", bazaarSellAllFlowers);
let $btnPlushies = tornButton("All Plushies", bazaarSellAllPlushies);
$top.prepend($btnFlowers, $btnPlushies);
$top.data('extra-buttons', 'true');
}
setInterval(bazaarAddButtons, 1000);
});
})();