NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Vault balance // @namespace http://tampermonkey.net/ // @version 0.1 // @description Calculates your and your spouses vault balance // @author Costi Mihai // @match https://www.torn.com/properties.php // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; console.log("Vault balance plugin active"); $( document ).ajaxComplete(function() { main(); }); function main() { createButton(); } function createButton() { let buttonExists = $("#custom-balance").length; if(!buttonExists) { let header = $("#top-page-links-list"); header.append('<a role="button" id="custom-balance" aria-labelledby="city" class=" city t-clear h c-pointer m-icon line-h24 right last">Calculate vault balance</a>'); header.click(handleButtonClick); } } function handleButtonClick() { let onVault = $(".vault-trans-wrap").length; if (!onVault) { alert("Not on vault page"); return; } parseTransactions(); } function parseTransactions() { let transactionElements = $('li[transaction_id'); let balances = {}; var formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }); if (!transactionElements.length) { alert("No transactions found on page, maybe wait for the page to fully load"); } let lastDate = ''; $.each(transactionElements, function (key, transaction){ transaction = $(transaction); let user = transaction.find('span[title]').attr('title'); let isDeposit = transaction.find('.type').html().trim() == 'Deposit' ? 1 : 0; let amount = transaction.find('.amount').html().match(/(\d+,?)+/)[0]; amount = parseInt(amount.replace(/,/g, '')); // remove commas lastDate = transaction.find('.date').html(); if (typeof balances[user] == 'undefined') { balances[user] = { 0: [], // withdrawals 1: [] // deposits }; } balances[user][isDeposit].push(amount); }); // end .each let text = '<div class="vault-custom-balance title m-bottom10 delimiter-999">'; let totals = []; for (let [key, value] of Object.entries(balances)) { let totalWidthdrawals = value[0].reduce(function(acc, val) { return acc + val; }, 0); let totalDeposits = value[1].reduce(function(acc, val) { return acc + val; }, 0); let net = totalDeposits - totalWidthdrawals; totals.push(net); text += '<p class="player">' + key + ':</p>'; text += '<p class="widthdrawals">Widthdrawals: ' + formatter.format(totalWidthdrawals) + '</p>'; text += '<p class="deposits">Deposits: ' + formatter.format(totalDeposits) + '</p>'; text += '<p class="net"> <b>Net: ' + formatter.format(net) + '</b></p>'; text += '</br>'; } let difference = Math.abs(totals[0] - totals[1]); text += '<p class="difference"> <b>Difference: ' + formatter.format(difference) + '</p></b>'; text += '<p class="transactions-count">Transaction elements: ' + transactionElements.length + '</p>'; text += '<p>Last date: ' + lastDate + '</p>'; text += '</div>'; let vaultLeft = $('.vault-cont.left').first(); vaultLeft.append(text); $('.vault-custom-balance').last().get(0).scrollIntoView(); } })();