IngressBuilderRevenue

Add a tool to compute the number of fields, links, points, that a player can get from a particular area.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        IngressBuilderRevenue
// @namespace   notableTieView
// @description Add a tool to compute the number of fields, links, points, that a player can get from a particular area.
// @include     https://www.ingress.com/
// @version     1.0
// @grant       none
// ==/UserScript==

// add functions and variable that are to be available on the page
function wrapper() {
  window.toggleDisplay = function (selector) {
    item = $(selector);
    if (item.hasClass('invisible')) {
      item.removeClass('invisible');
    } else {
      item.addClass('invisible');
    }
  };
  window.addCommas = function(nStr) {
    nStr += '';
	  x = nStr.split('.');
	  x1 = x[0];
	  x2 = x.length > 1 ? '.' + x[1] : '';
	  var rgx = /(\d+)(\d{3})/;
	  while (rgx.test(x1)) {
		  x1 = x1.replace(rgx, '$1' + ',' + '$2');
	  }
	  return x1 + x2;
  };
  window.addLineData = function(selector, num, ap) {
    rowTds=$(selector);
    rowTds.eq(1).text(addCommas(num));
    rowTds.eq(2).text(addCommas(ap));
  };
  window.computeStatistics = function() {
    portals=parseInt($('#numPortals').val());
    portalsOnKonvexHull=parseInt($('#numBorder').val());
    if (isNaN(portals) || isNaN(portalsOnKonvexHull)) {
      alert("Please enter valid numbers.");
      return;
    }
    numFields=2*portals - portalsOnKonvexHull -2;
		numLinks = 3*portals -portalsOnKonvexHull -3;
		numResos = 8*portals;
		numMods = 2*portals;
    apFields=numFields*1250;
		apMods = numMods*150;
    apResos = numResos*125+portals*(500+250);
    apLinks = numLinks*313;
    sum=apFields+apMods+apResos+apLinks;
    addLineData('#ingressMods td', numMods, apMods);
    addLineData('#ingressResos td', numResos, apResos);
    addLineData('#ingressFields td', numFields, apFields);
    addLineData('#ingressLinks td', numLinks, apLinks);
    addLineData('#ingressSum td', '', sum);
  };
  // ...
}
var script = document.createElement('script');
script.appendChild(document.createTextNode('(' + wrapper + ')();'));
(document.body || document.head || document.documentElement).appendChild(script);
function addGlobalStyle(css) {
  var head,
  style;
  head = document.getElementsByTagName('head') [0];
  if (!head) {
    return;
  }
  style = document.createElement('style');
  style.type = 'text/css';
  style.innerHTML = css;
  head.appendChild(style);
}
addGlobalStyle('.invisible { display:none !important; }');
addGlobalStyle('#compute {\
  background-color: rgba(31,31,31,0.9);\
  color: rgb(17, 236, 247);\
  z-index: 100;\
  height: 320px;\
  margin-top: 100px;\
  left:50%;\
  width: 340px;\
  margin-left: -170px;\
  position:fixed;\
  padding:10px;\
  border-width: 1px;\
  border-style: solid;\
  font-family: coda_regular,sans-serif;\
}');
addGlobalStyle('#revenueButton,#intelButton {\
  font-size: 16px;\
  margin: 0.75em 0px;\
  padding: 0.7em 1em;\
  position: relative;\
  cursor: pointer;\
  font-weight: 700;\
  border-width: 1px;\
  border-style: solid;\
  font-family: sans-serif;\
  text-decoration: none;\
  z-index:999;\
  position:fixed;\
  right:10px;\
  background-color: #11ECf7;\
  color: black;\
}');

addGlobalStyle('#intelButton {\
margin-top:3.75em;\
}');


addGlobalStyle('.ingressAP {\
  text-align:right;\
}');

addGlobalStyle('.ingressCount {\
  text-align:right;\
}');

addGlobalStyle('#numPortals, #numBorder {\
width:50px;\
margin-right:10px;\
}');

addGlobalStyle('#builderHeading {\
font-size:2.3em;\
}');

addGlobalStyle('#revenueTable {\
width: 80%;\
margin-left: 5%;\
border-spacing: 20px 0px;\
table-layout: fixed;\
}');

addGlobalStyle('th {\
text-align:left;\
}');


$('body').append('  <a id="revenueButton" onclick="toggleDisplay(\'#compute\')">Compute Area AP</a>');
$('body').append('  <a id="intelButton" href="/intel">Intel</a>');

$('body').append('\
  <div id="compute" class="invisible">\
    <div id="builderHeading">Builder Revenue</div>\
    <p>Enter the number of portals in the area and the number of portals (thereof) which form the border (all other portals are inside the polygon they form).</p>\
    <p>\
      <label>Portals:</label>\
      <input type="number" id="numPortals"/>\
      <label>Border:</label>\
      <input type="number" id="numBorder"/>\
      <button type="button" id="computeButton" onclick="computeStatistics()">Compute</button>\
    </p>\
    <table id="revenueTable">\
      <tr>\
        <th class="ingressEntity">Entity</th><th class="ingressCount">Number</th><th class="ingressAP">AP</th>\
      </tr>\
      <tr id="ingressResos">\
        <td class="ingressEntity">Resos</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
      </tr>\
      <tr id="ingressLinks">\
        <td class="ingressEntity">Links</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
      </tr>\
      <tr id="ingressFields">\
        <td class="ingressEntity">Fields</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
      </tr>\
      <tr id="ingressMods">\
        <td class="ingressEntity">Mods</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
      </tr>\
      <tr id="ingressSum">\
        <td class="ingressEntity">Total</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
      </tr>\
    </table>\
  </div>'
);