Display targets and offsets for warchests
// ==UserScript== // @name Resource Bar Helper // @namespace https://politicsandwar.com/nation/id=98616 // @description Display targets and offsets for warchests // @version 1.0 // @author Talus // @license GPL-3.0-or-later // @match https://politicsandwar.com/* // @require https://code.jquery.com/jquery-3.6.0.min.js // @require https://openuserjs.org/src/libs/sizzle/GM_config.js // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function() { var $ = window.jQuery; $("#rssBar").hide(); $("#rssBar").after($("<div/>", {id: "newRssBar"})) const fields = ["cities", "credits", "days of raws", "coal/day", "oil/day", "lead/day", "iron/day", "bauxite/day", "uranium/city", "food/city", "gas/city", "munitions/city", "steel/city", "aluminum/city", "money/city"]; const configFields = fields.reduce((obj, field) => { obj[field] = { label: field, type: 'number', cols: 5 }; return obj; }, {}); const config = new GM_config({ id: 'resourceBarHelper', title: 'Resource Bar Helper Configuration', fields: configFields, events: { save: function() { fields.forEach(field => GM_setValue(field, config.get(field))); updateResourceBar(); } } }); function updateResourceBar() { const variables = fields.reduce((obj, field) => { var varName = field.replace(/[^a-zA-Z0-9]/g, '_'); obj[varName] = GM_getValue(field, 0); return obj; }, {}); var MARKET_URL = 'https://politicsandwar.com/index.php?id=90&display=world&resource1=RESOURCE1&buysell=&ob=price&od=DEF&maximum=100&minimum=0&search=Go' var wc = [ { "target": MARKET_URL.replace('RESOURCE1','credits'), "icon": '<img src="https://politicsandwar.com/img/icons/16/point_gold.png" alt="credits">', "required": Number(variables.credits) }, { "target": MARKET_URL.replace('RESOURCE1','coal'), "icon": '<img src="https://politicsandwar.com/img/resources/coal.png" alt="coal">', "required": Number(variables.days_of_raws * variables.coal_day) }, { "target": MARKET_URL.replace('RESOURCE1','oil'), "icon": '<img src="https://politicsandwar.com/img/resources/oil.png" alt="oil">', "required": Number(variables.days_of_raws * variables.oil_day) }, { "target": MARKET_URL.replace('RESOURCE1','uranium'), "icon": '<img src="https://politicsandwar.com/img/resources/uranium.png" alt="uranium">', "required": Number(variables.cities * variables.uranium_city) }, { "target": MARKET_URL.replace('RESOURCE1','lead'), "icon": '<img src="https://politicsandwar.com/img/resources/lead.png" alt="lead">', "required": Number(variables.days_of_raws * variables.lead_day) }, { "target": MARKET_URL.replace('RESOURCE1','iron'), "icon": '<img src="https://politicsandwar.com/img/resources/iron.png" alt="iron">', "required": Number(variables.days_of_raws * variables.iron_day) }, { "target": MARKET_URL.replace('RESOURCE1','bauxite'), "icon": '<img src="https://politicsandwar.com/img/resources/bauxite.png" alt="bauxite">', "required": Number(variables.days_of_raws * variables.bauxite_day) }, { "target": MARKET_URL.replace('RESOURCE1','gasoline'), "icon": '<img src="https://politicsandwar.com/img/resources/gasoline.png" alt="gasoline">', "required": Number(variables.cities * variables.gas_city) }, { "target": MARKET_URL.replace('RESOURCE1','munitions'), "icon": '<img src="https://politicsandwar.com/img/resources/munitions.png" alt="munitions">', "required": Number(variables.cities * variables.munitions_city) }, { "target": MARKET_URL.replace('RESOURCE1','steel'), "icon": '<img src="https://politicsandwar.com/img/resources/steel.png" alt="steel">', "required": Number(variables.cities * variables.steel_city) }, { "target": MARKET_URL.replace('RESOURCE1','aluminum'), "icon": '<img src="https://politicsandwar.com/img/resources/aluminum.png" alt="aluminum">', "required": Number(variables.cities * variables.aluminum_city) }, { "target": MARKET_URL.replace('RESOURCE1','food'), "icon": '<img src="https://politicsandwar.com/img/icons/16/steak_meat.png" alt="food">', "required": Number(variables.cities * variables.food_city) }, { "target": 'https://politicsandwar.com/nation/revenue/', "icon": '<b style="color: #28d020;" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Money">$</b>', "required": Number(variables.cities * variables.money_city) } ] var rssCount = document.querySelector("#rssBar > div > div > span") .textContent .trim() .split(/\s+/) .filter(function(val){return val != '$'}) .map(function(x){return Number(x.replace(/,/g,''))}); var html = ` <div class="container infobarcontainer notranslate hidden-xs hidden-sm" id="rssBarNew"> <div class="row" style="z-index: 2;"> <div class="informationbar col-xs-12" style="max-width:100vw;"> <table class="col-xs-12"> <tr> <td> <table> <tr> <td>Actual:</td> </tr> <tr> <td>Target:</td> </tr> <tr> <td>Difference:</td> </tr> </table> </td> `; for (var i=0; i<wc.length; i++) { var difference = rssCount[i] - wc[i].required; var color = difference >= 0 ? '#FFF' : '#000'; html += ` <td> <table> <tr> <td rowspan="3" style="vertical-align:text-top"> <a href="${wc[i].target}">${wc[i].icon}</a> </td> <td style="text-align:right"> ${rssCount[i].toLocaleString()} </td> </tr> <tr> <td style="text-align:right"> ${wc[i].required.toLocaleString()} </td> </tr> <tr> <td style="text-align:right;color:${color}"> ${difference.toLocaleString()} </td> </tr> </table> </td> `; } html += '</tr></table>' $("#newRssBar").replaceWith(html); } // Register a menu command to open the configuration interface GM_registerMenuCommand('Requirements', config.open.bind(config)); updateResourceBar(); })();