Resource Bar Helper

Display targets and offsets for warchests

  1. // ==UserScript==
  2. // @name Resource Bar Helper
  3. // @namespace https://politicsandwar.com/nation/id=98616
  4. // @description Display targets and offsets for warchests
  5. // @version 1.0
  6. // @author Talus
  7. // @license GPL-3.0-or-later
  8. // @match https://politicsandwar.com/*
  9. // @require https://code.jquery.com/jquery-3.6.0.min.js
  10. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  11. // @grant GM_registerMenuCommand
  12. // @grant GM_getValue
  13. // @grant GM_setValue
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. var $ = window.jQuery;
  18.  
  19. $("#rssBar").hide();
  20. $("#rssBar").after($("<div/>", {id: "newRssBar"}))
  21.  
  22. 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"];
  23.  
  24. const configFields = fields.reduce((obj, field) => {
  25. obj[field] = { label: field, type: 'number', cols: 5 };
  26. return obj;
  27. }, {});
  28.  
  29. const config = new GM_config({
  30. id: 'resourceBarHelper',
  31. title: 'Resource Bar Helper Configuration',
  32. fields: configFields,
  33. events: {
  34. save: function() {
  35. fields.forEach(field => GM_setValue(field, config.get(field)));
  36. updateResourceBar();
  37. }
  38. }
  39. });
  40.  
  41. function updateResourceBar() {
  42. const variables = fields.reduce((obj, field) => {
  43. var varName = field.replace(/[^a-zA-Z0-9]/g, '_');
  44. obj[varName] = GM_getValue(field, 0);
  45. return obj;
  46. }, {});
  47.  
  48. 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'
  49. var wc = [
  50. {
  51. "target": MARKET_URL.replace('RESOURCE1','credits'),
  52. "icon": '<img src="https://politicsandwar.com/img/icons/16/point_gold.png" alt="credits">',
  53. "required": Number(variables.credits)
  54. },
  55. {
  56. "target": MARKET_URL.replace('RESOURCE1','coal'),
  57. "icon": '<img src="https://politicsandwar.com/img/resources/coal.png" alt="coal">',
  58. "required": Number(variables.days_of_raws * variables.coal_day)
  59. },
  60. {
  61. "target": MARKET_URL.replace('RESOURCE1','oil'),
  62. "icon": '<img src="https://politicsandwar.com/img/resources/oil.png" alt="oil">',
  63. "required": Number(variables.days_of_raws * variables.oil_day)
  64. },
  65. {
  66. "target": MARKET_URL.replace('RESOURCE1','uranium'),
  67. "icon": '<img src="https://politicsandwar.com/img/resources/uranium.png" alt="uranium">',
  68. "required": Number(variables.cities * variables.uranium_city)
  69. },
  70. {
  71. "target": MARKET_URL.replace('RESOURCE1','lead'),
  72. "icon": '<img src="https://politicsandwar.com/img/resources/lead.png" alt="lead">',
  73. "required": Number(variables.days_of_raws * variables.lead_day)
  74. },
  75. {
  76. "target": MARKET_URL.replace('RESOURCE1','iron'),
  77. "icon": '<img src="https://politicsandwar.com/img/resources/iron.png" alt="iron">',
  78. "required": Number(variables.days_of_raws * variables.iron_day)
  79. },
  80. {
  81. "target": MARKET_URL.replace('RESOURCE1','bauxite'),
  82. "icon": '<img src="https://politicsandwar.com/img/resources/bauxite.png" alt="bauxite">',
  83. "required": Number(variables.days_of_raws * variables.bauxite_day)
  84. },
  85. {
  86. "target": MARKET_URL.replace('RESOURCE1','gasoline'),
  87. "icon": '<img src="https://politicsandwar.com/img/resources/gasoline.png" alt="gasoline">',
  88. "required": Number(variables.cities * variables.gas_city)
  89. },
  90. {
  91. "target": MARKET_URL.replace('RESOURCE1','munitions'),
  92. "icon": '<img src="https://politicsandwar.com/img/resources/munitions.png" alt="munitions">',
  93. "required": Number(variables.cities * variables.munitions_city)
  94. },
  95. {
  96. "target": MARKET_URL.replace('RESOURCE1','steel'),
  97. "icon": '<img src="https://politicsandwar.com/img/resources/steel.png" alt="steel">',
  98. "required": Number(variables.cities * variables.steel_city)
  99. },
  100. {
  101. "target": MARKET_URL.replace('RESOURCE1','aluminum'),
  102. "icon": '<img src="https://politicsandwar.com/img/resources/aluminum.png" alt="aluminum">',
  103. "required": Number(variables.cities * variables.aluminum_city)
  104. },
  105. {
  106. "target": MARKET_URL.replace('RESOURCE1','food'),
  107. "icon": '<img src="https://politicsandwar.com/img/icons/16/steak_meat.png" alt="food">',
  108. "required": Number(variables.cities * variables.food_city)
  109. },
  110. {
  111. "target": 'https://politicsandwar.com/nation/revenue/',
  112. "icon": '<b style="color: #28d020;" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Money">$</b>',
  113. "required": Number(variables.cities * variables.money_city)
  114. }
  115. ]
  116.  
  117. var rssCount = document.querySelector("#rssBar > div > div > span")
  118. .textContent
  119. .trim()
  120. .split(/\s+/)
  121. .filter(function(val){return val != '$'})
  122. .map(function(x){return Number(x.replace(/,/g,''))});
  123.  
  124. var html = `
  125. <div class="container infobarcontainer notranslate hidden-xs hidden-sm" id="rssBarNew">
  126. <div class="row" style="z-index: 2;">
  127. <div class="informationbar col-xs-12" style="max-width:100vw;">
  128. <table class="col-xs-12">
  129. <tr>
  130. <td>
  131. <table>
  132. <tr>
  133. <td>Actual:</td>
  134. </tr>
  135. <tr>
  136. <td>Target:</td>
  137. </tr>
  138. <tr>
  139. <td>Difference:</td>
  140. </tr>
  141. </table>
  142. </td>
  143. `;
  144. for (var i=0; i<wc.length; i++) {
  145. var difference = rssCount[i] - wc[i].required;
  146. var color = difference >= 0 ? '#FFF' : '#000';
  147. html += `
  148. <td>
  149. <table>
  150. <tr>
  151. <td rowspan="3" style="vertical-align:text-top">
  152. <a href="${wc[i].target}">${wc[i].icon}</a>
  153. </td>
  154. <td style="text-align:right">
  155. ${rssCount[i].toLocaleString()}
  156. </td>
  157. </tr>
  158. <tr>
  159. <td style="text-align:right">
  160. ${wc[i].required.toLocaleString()}
  161. </td>
  162. </tr>
  163. <tr>
  164. <td style="text-align:right;color:${color}">
  165. ${difference.toLocaleString()}
  166. </td>
  167. </tr>
  168. </table>
  169. </td>
  170. `;
  171. }
  172. html += '</tr></table>'
  173.  
  174. $("#newRssBar").replaceWith(html);
  175. }
  176.  
  177. // Register a menu command to open the configuration interface
  178. GM_registerMenuCommand('Requirements', config.open.bind(config));
  179.  
  180. updateResourceBar();
  181. })();