diff --git a/plugins/ap-list.user.js b/plugins/ap-list.user.js
index c6f91392..1caeafbd 100644
--- a/plugins/ap-list.user.js
+++ b/plugins/ap-list.user.js
@@ -1,7 +1,7 @@
// ==UserScript==
// @id iitc-plugin-ap-list@xelio
// @name IITC plugin: AP List
-// @version 0.4.3.@@DATETIMEVERSION@@
+// @version 0.4.4.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@@ -44,13 +44,15 @@ window.plugin.apList.destroyPortalsGuid = new Array();
window.plugin.apList.portalLocationIndicator;
window.plugin.apList.animTimeout;
-
+// ENTRY POINT ///////////////////////////////////////////////////////////////////
window.plugin.apList.handleUpdate = function() {
if(!requests.isLastRequest('getThinnedEntitiesV2')) return;
plugin.apList.updateSortedPortals();
plugin.apList.updatePortalTable(plugin.apList.displaySide);
}
+// CONTENT GENERATION ////////////////////////////////////////////////////////////
+
// Generate html table from top portals
window.plugin.apList.updatePortalTable = function(side) {
var table = '
'
@@ -116,25 +118,7 @@ window.plugin.apList.getPortalDestroyCheckbox = function(portal) {
return div;
}
-window.plugin.apList.destroyPortal = function(guid) {
- // Add to destroyPortalsGuid if not yet added, remove if already added
- var portalIndex = plugin.apList.destroyPortalIndex(guid);
- if(portalIndex >= 0) {
- plugin.apList.destroyPortalsGuid.splice(portalIndex, 1);
- } else {
- plugin.apList.destroyPortalsGuid.push(guid);
- }
-
- plugin.apList.updateSortedPortals();
- plugin.apList.updatePortalTable(plugin.apList.displaySide);
-}
-
-// Return the index of portal in destroyPortalsGuid
-window.plugin.apList.destroyPortalIndex = function(guid) {
- return $.inArray(guid, plugin.apList.destroyPortalsGuid);
-}
-
-// Combine title and test
+// Combine ap title and test
window.plugin.apList.getPortalApText = function(portal) {
var title = plugin.apList.getPortalApTitle(portal);
return '' + digits(portal.playerApGain.totalAp) + '
';
@@ -147,12 +131,19 @@ window.plugin.apList.getPortalApTitle = function(portal) {
var playerApGain = portal.playerApGain;
if(plugin.apList.portalSide(portal) === plugin.apList.SIDE_FRIENDLY) {
t = 'Deploy & Upgrade\n';
+
for(var i = 0; i < playerApGain.upgradedReso.length; i++) {
var reso = playerApGain.upgradedReso[i];
var apGain = (reso.level === 0) ? DEPLOY_RESONATOR : UPGRADE_ANOTHERS_RESONATOR;
t += 'Resonator on ' + OCTANTS[reso.slot] + '\t' + reso.level + '->'
+ reso.newLevel + '\t= ' + apGain + '\n';
}
+
+ if(playerApGain.captureBonus > 0)
+ t += 'Capture\t\t= ' + playerApGain.captureBonus + '\n';
+ if(playerApGain.completionBonus > 0)
+ t += 'Bonus\t\t= ' + playerApGain.completionBonus + '\n';
+
t += 'Sum: ' + digits(playerApGain.totalAp) + ' AP';
} else {
t = 'Destroy & Capture:\n'
@@ -203,6 +194,8 @@ window.plugin.apList.getPortalLink = function(portal) {
return div;
}
+// MAIN LOGIC FUNCTIONS //////////////////////////////////////////////////////////
+
// Loop through portals and get playerApGain, then put in sortedPortals by side and sort them by AP.
window.plugin.apList.updateSortedPortals = function() {
plugin.apList.sortedPortals[plugin.apList.SIDE_FRIENDLY] = new Array();
@@ -324,19 +317,6 @@ window.plugin.apList.handleDestroyPortal = function() {
});
}
-window.plugin.apList.enableCache = function() {
- plugin.apList.useCachedPortals = true;
- plugin.apList.updateSortedPortals();
- plugin.apList.updatePortalTable(plugin.apList.displaySide);
-}
-
-window.plugin.apList.disableCache = function() {
- plugin.apList.useCachedPortals = false;
- plugin.apList.cachedPortals = {};
- plugin.apList.updateSortedPortals();
- plugin.apList.updatePortalTable(plugin.apList.displaySide);
-}
-
window.plugin.apList.isSamePortal = function(a,b) {
if(!a || !b) return false;
if(a.team !== b.team) return false;
@@ -349,7 +329,8 @@ window.plugin.apList.isSamePortal = function(a,b) {
}
window.plugin.apList.portalSide = function(portal) {
- return (portal.controllingTeam.team === PLAYER.team)
+ return (portal.controllingTeam.team === PLAYER.team
+ || portal.controllingTeam.team === 'NEUTRAL')
? plugin.apList.SIDE_FRIENDLY
: plugin.apList.SIDE_ENEMY;
}
@@ -361,6 +342,12 @@ window.plugin.apList.getDeployOrUpgradeApGain = function(d) {
var totalAp = 0;
var upgradedReso = new Array();
+ var deployCount = 0;
+ var upgradedCount = 0;
+
+ var captureBonus = 0;
+ var completionBonus = 0;
+
// loop through reso slot and find empty reso, deployed
// by others(only level lower than player level) or by player.
for(var i = 0; i < 8; i++) {
@@ -402,7 +389,8 @@ window.plugin.apList.getDeployOrUpgradeApGain = function(d) {
// Add upgraded reso to result
targetReso.newLevel = i;
upgradedReso.push(targetReso);
- // Add ap
+ // Counting upgrade or deploy
+ (targetReso.level === 0) ? deployCount++ : upgradedCount++;
totalAp += (targetReso.level === 0)
? DEPLOY_RESONATOR
: UPGRADE_ANOTHERS_RESONATOR;
@@ -411,7 +399,17 @@ window.plugin.apList.getDeployOrUpgradeApGain = function(d) {
}
}
+ if(deployCount > 0) completionBonus = COMPLETION_BONUS;
+ if(deployCount === 8) captureBonus = CAPTURE_PORTAL;
+
+ totalAp = deployCount * DEPLOY_RESONATOR
+ + upgradedCount * UPGRADE_ANOTHERS_RESONATOR
+ + captureBonus
+ + completionBonus;
+
return {
+ captureBonus: captureBonus,
+ completionBonus: completionBonus,
totalAp: totalAp,
upgradedReso: upgradedReso
};
@@ -523,6 +521,21 @@ window.plugin.apList.getShieldsMitigation = function(portal) {
return shieldsMitigation;
}
+// FEATURE TOGGLES AND INTERACTION HANDLER ///////////////////////////////////////
+
+window.plugin.apList.enableCache = function() {
+ plugin.apList.useCachedPortals = true;
+ plugin.apList.updateSortedPortals();
+ plugin.apList.updatePortalTable(plugin.apList.displaySide);
+}
+
+window.plugin.apList.disableCache = function() {
+ plugin.apList.useCachedPortals = false;
+ plugin.apList.cachedPortals = {};
+ plugin.apList.updateSortedPortals();
+ plugin.apList.updatePortalTable(plugin.apList.displaySide);
+}
+
window.plugin.apList.selectPortal = function(guid) {
renderPortalDetails(guid);
plugin.apList.setPortalLocationIndicator(guid);
@@ -567,6 +580,24 @@ window.plugin.apList.animPortalLocationIndicator = function() {
}
}
+window.plugin.apList.destroyPortal = function(guid) {
+ // Add to destroyPortalsGuid if not yet added, remove if already added
+ var portalIndex = plugin.apList.destroyPortalIndex(guid);
+ if(portalIndex >= 0) {
+ plugin.apList.destroyPortalsGuid.splice(portalIndex, 1);
+ } else {
+ plugin.apList.destroyPortalsGuid.push(guid);
+ }
+
+ plugin.apList.updateSortedPortals();
+ plugin.apList.updatePortalTable(plugin.apList.displaySide);
+}
+
+// Return the index of portal in destroyPortalsGuid
+window.plugin.apList.destroyPortalIndex = function(guid) {
+ return $.inArray(guid, plugin.apList.destroyPortalsGuid);
+}
+
// Change display table to friendly portals
window.plugin.apList.displayFriendly = function() {
plugin.apList.changeDisplaySide(plugin.apList.SIDE_FRIENDLY);
@@ -606,6 +637,8 @@ window.plugin.apList.showReloadLabel = function() {
$('#ap-list-reload').show();
}
+// SETUP /////////////////////////////////////////////////////////////////////////
+
window.plugin.apList.setupVar = function() {
plugin.apList.sides[plugin.apList.SIDE_FRIENDLY] = plugin.apList.SIDE_FRIENDLY;
plugin.apList.sides[plugin.apList.SIDE_ENEMY] = plugin.apList.SIDE_ENEMY;