NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name TORN: Museum Market
// @description Show inventory amount, meant for museum items.
// @version 1.1.1
// @author DeKleineKobini
// @updateURL https://openuserjs.org/meta/DeKleineKobini/TORN_Museum_Market.meta.js
// @downloadURL https://openuserjs.org/install/DeKleineKobini/TORN_Museum_Market.user.js
// @match https://www.torn.com/imarket.php*
// @license MIT
// @require https://openuserjs.org/src/libs/DeKleineKobini/DKK_Torn_Utilities.js
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
var settings = {
types: ["flowers", "plushies"],
cache: 15 * 60 * 1000 // default: 15 minutes
}
setDebug(false);
/* --------------------
CODE - EDIT ON OWN RISK
-------------------- */
setPrefixEasy("MM");
requireAPI();
var inventory = [];
var jsonLast;
getCache("museummarket-inventory").then(result => {
if (result) inventory = result;
else refreshInventory();
});
refreshInventory();
observeMutations(document, ".content-title-links", true, (mut, obs) => {
$(".content-title-links").append("<a role='button' id='refreshInventory' class='dd-important t-clear h c-pointer m-icon line-h24 right'><span>Refresh Inventory</span></a>")
$("#refreshInventory").click(() => refreshInventory());
}, {
childList: true,
subtree: true
});
xhrIntercept((page, json, uri) => {
if (page != "imarket" || !json) return;
jsonLast = json;
showAmounts();
});
function refreshInventory(onFinish) {
log("Refresh the inventory.");
sendAPIRequest("user", null, "inventory").then(resultApi => {
if (resultApi.inventory) {
inventory = resultApi.inventory;
setCache("museummarket-inventory", resultApi.inventory, settings.cache);
if (onFinish) onFinish();
}
});
}
function showAmounts() {
if (!jsonLast) return
let category = $(".market-tabs li[aria-selected='true']").attr("data-cat");
if (!settings.types.includes(category)) return;
debug("json", jsonLast)
let items = {};
jsonLast.forEach(item => {
let apiItems = inventory.filter(it => {
return it.ID == item.itemID
});
let id = item.itemID;
let amount = apiItems.length ? apiItems[0].quantity : 0;
items[id] = amount;
});
observeMutations($("#" + category + " .m-items-list")[0],
".m-item-wrap", true,
(mut, obs) => Object.keys(items).forEach(i => $(".m-item-wrap:has(div[itemid=" + i + "]) .qty").html(items[i])), {
attributes: true,
childList: true
});
}