Torn Set Calculator

Calculates prices of plushie and flower sets

Versión del día 1/8/2015. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name Torn Set Calculator
// @version 0.2
// @description Calculates prices of plushie and flower sets
// @author MrHat
// @namespace MrHat.Torn
// @require http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @require http://cdnjs.cloudflare.com/ajax/libs/accounting.js/0.4.1/accounting.min.js
// @require https://greasyfork.org/scripts/11365-library-for-intercepting-ajax-communications/code/Library%20for%20intercepting%20AJAX%20communications.js?version=65323
// @match http://www.torn.com/imarket.php*
// @match https://www.torn.com/imarket.php*
// @grant metadata
// ==/UserScript==

function itemsLoaded(items) {
    // List item ids of sets
    var itemSets = {
        plushies: ["186", "215", "187", "261", "618", "258", "273", "269", "266", "268", "281", "274", "384"],
        flowers: ["260", "617", "263", "272", "264", "271", "267", "277", "282", "276", "385"]
    };

    // Create an array with all items ids we are interested in
    var sets = itemSets.plushies.concat(itemSets.flowers);

    // Loop through response items and calculate the sum of all relevant items
    var sum = 0;
    items.forEach(function(item) {
        if ($.inArray(item.itemID, sets) !== -1) {
            sum += parseInt(item.price);
        }
    });

    // Calculate price of individual points
    var individualPoint = sum / 10;

    // Show results on page (attempt to find container, if it's not there we create it)
    var container = $('#setCalculator');
    if (!container.length) {
        container = $('<div>').attr('id', 'setCalculator').addClass('msg right-round');

        var wrapper = $('<div>').addClass('info-msg border-round').html($('<i>').addClass('info-icon'));
        wrapper.append(container);
        wrapper.prependTo($('.main-market-page'));
    }

    // Clear text
    container.empty();

    // Only show results if we have something to show
    if (sum > 0) {
        var msg = $('<span>').html('1 complete set costs <b>' + accounting.formatMoney(sum, "$", 0) + '</b>. This equals to <b>' + accounting.formatMoney(individualPoint, "$", 0) + '</b> per point.');
        container.append(msg);
    } else {
        var msg = $('<span>').html('No sets available.');
        container.append(msg);
    }
}

// Set up interceptor
var AjaxInterceptor = require("ajax-intercept");
AjaxInterceptor.addResponseCallback(function(xhr) {
    
    // We only intercept requests for the item market
    var marketRegex = /^(http|https):\/\/www.torn.com\/imarket.php\?rfcv=(\d+)$/;
    if (marketRegex.test(xhr.responseURL)) {
        
         // Process the items and their pricess
        var items = JSON.parse(xhr.response);
        itemsLoaded(items);
    }
});

// Will proxify XHR to fire the above callbacks
AjaxInterceptor.wire();