diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js
index 4a4a2dc7..bf6f57ec 100644
--- a/plugins/guess-player-levels.user.js
+++ b/plugins/guess-player-levels.user.js
@@ -2,7 +2,7 @@
// @id iitc-plugin-guess-player-levels@breunigs
// @name IITC plugin: guess player level
// @category Info
-// @version 0.4.10.@@DATETIMEVERSION@@
+// @version 0.5.0.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@@ -27,6 +27,7 @@ window.plugin.guessPlayerLevels = function() {};
window.plugin.guessPlayerLevels.setupCallback = function() {
$('#toolbox').append(' Guess player levels');
addHook('portalDetailLoaded', window.plugin.guessPlayerLevels.extractPortalData);
+ addHook('publicChatDataAvailable', window.plugin.guessPlayerLevels.extractChatData);
}
@@ -34,37 +35,64 @@ window.plugin.guessPlayerLevels.setupCallback = function() {
window.plugin.guessPlayerLevels.fetchLevelByPlayer = function(nick) {
var cache = window.plugin.guessPlayerLevels._nameToLevelCache;
- if(cache["#" + nick] === undefined) {
- // no use in reading localStorage repeatedly
- if(window.plugin.guessPlayerLevels._localStorageLastUpdate < Date.now() - 10*1000) {
- try {
- cache = JSON.parse(localStorage["plugin-guess-player-levels"])
- window.plugin.guessPlayerLevels._nameToLevelCache = cache;
- window.plugin.guessPlayerLevels._localStorageLastUpdate = Date.now();
- } catch(e) {
- }
- }
- }
+ if(cache['#' + nick] === undefined)
+ cache = window.plugin.guessPlayerLevels._loadLevels();
- return cache["#" + nick];
+ var details = cache['#' + nick];
+ if(details === undefined)
+ return 1;
+ if(typeof details === 'number')
+ return details;
+ return details.guessed;
+}
+
+// This function is intended to be called by other plugins
+window.plugin.guessPlayerLevels.fetchLevelDetailsByPlayer = function(nick) {
+ var cache = window.plugin.guessPlayerLevels._nameToLevelCache;
+
+ if(cache['#' + nick] === undefined)
+ cache = window.plugin.guessPlayerLevels._loadLevels();
+
+ var details = cache['#' + nick];
+ if(details === undefined)
+ return {min: 1, guessed: 1};
+ if(typeof details === 'number')
+ return {min: 1, guessed: details};
+ return details;
}
window.plugin.guessPlayerLevels._nameToLevelCache = {};
window.plugin.guessPlayerLevels._localStorageLastUpdate = 0;
+window.plugin.guessPlayerLevels._loadLevels = function() {
+ // no use in reading localStorage repeatedly
+ if(window.plugin.guessPlayerLevels._localStorageLastUpdate < Date.now() - 10*1000) {
+ try {
+ var cache = JSON.parse(localStorage['plugin-guess-player-levels'])
+ window.plugin.guessPlayerLevels._nameToLevelCache = cache;
+ window.plugin.guessPlayerLevels._localStorageLastUpdate = Date.now();
+ } catch(e) {
+ }
+ }
+
+ return window.plugin.guessPlayerLevels._nameToLevelCache;
+}
+
window.plugin.guessPlayerLevels.setLevelTitle = function(dom) {
// expects dom node with nick in its child text node
var el = $(dom);
var nick = el.text();
- var level = window.plugin.guessPlayerLevels.fetchLevelByPlayer(nick);
+ var details = window.plugin.guessPlayerLevels.fetchLevelDetailsByPlayer(nick);
var text;
- if (level) {
- text = 'Min player level: ' + level + ' (guessed)';
- } else {
- text = 'Min player level unknown';
+ if(details.min == 8)
+ text = 'Player level: 8';
+ else {
+ text = 'Min player level: ' + details.min;
+ if(details.min != details.guessed)
+ text += '\nGuessed player level: ' + details.guessed;
}
window.setupTooltips(el);
@@ -81,7 +109,7 @@ window.plugin.guessPlayerLevels.setLevelTitle = function(dom) {
}
window.plugin.guessPlayerLevels.setupChatNickHelper = function() {
- $(document).on('mouseenter', '.nickname', function() {
+ $(document).on('mouseenter', '.nickname, .pl_nudge_player', function() {
window.plugin.guessPlayerLevels.setLevelTitle(this);
});
}
@@ -121,12 +149,49 @@ window.plugin.guessPlayerLevels.extractPortalData = function(data) {
});
}
-window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level) {
- var stored = window.plugin.guessPlayerLevels.fetchLevelByPlayer(nick);
- if(stored && stored >= level)
- return;
+window.plugin.guessPlayerLevels.extractChatData = function(data) {
+ data.raw.result.forEach(function(msg) {
+ var plext = msg[2].plext;
+ if(plext.plextType == 'SYSTEM_BROADCAST'
+ && plext.markup.length==5
+ && plext.markup[0][0] == 'PLAYER'
+ && plext.markup[1][0] == 'TEXT'
+ && plext.markup[1][1].plain == ' deployed an '
+ && plext.markup[2][0] == 'TEXT'
+ && plext.markup[2][0] == 'TEXT'
+ && plext.markup[3][0] == 'TEXT'
+ && plext.markup[3][1].plain == ' Resonator on ') {
+ var nick = plext.markup[0][1].plain;
+ var lvl = parseInt(plext.markup[2][1].plain.substr(1));
+ window.plugin.guessPlayerLevels.savePlayerLevel(nick, lvl, true);
+ }
+ });
+};
- window.plugin.guessPlayerLevels._nameToLevelCache["#" + nick] = level;
+window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level, safe) {
+ var cache = window.plugin.guessPlayerLevels._loadLevels();
+
+ var details = cache['#' + nick];
+ if(details === undefined)
+ details = {min: 1, guessed: 1};
+ if(typeof details === 'number')
+ details = {min: 1, guessed: details};
+
+ if(safe) {
+ if(details.min >= level)
+ return;
+
+ details.min = level;
+ if(details.guessed < details.min)
+ details.guessed = details.min;
+ } else {
+ if(details.guessed >= level)
+ return;
+
+ details.guessed = level;
+ }
+
+ window.plugin.guessPlayerLevels._nameToLevelCache['#' + nick] = details;
// to minimize accesses to localStorage, writing is delayed a bit
@@ -134,7 +199,7 @@ window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level) {
clearTimeout(window.plugin.guessPlayerLevels._writeTimeout);
window.plugin.guessPlayerLevels._writeTimeout = setTimeout(function() {
- localStorage["plugin-guess-player-levels"] = JSON.stringify(window.plugin.guessPlayerLevels._nameToLevelCache);
+ localStorage['plugin-guess-player-levels'] = JSON.stringify(window.plugin.guessPlayerLevels._nameToLevelCache);
}, 500);
}
@@ -212,7 +277,7 @@ window.plugin.guessPlayerLevels.guess = function() {
buttons: {
'RESET GUESSES': function() {
// clear all guessed levels from local storage
- localStorage.removeItem("plugin-guess-player-levels")
+ localStorage.removeItem('plugin-guess-player-levels')
window.plugin.guessPlayerLevels._nameToLevelCache = {}
// now force all portals through the callback manually
$.each(window.portals, function(guid,p) {
@@ -243,7 +308,7 @@ var setup = function() {
// we used to sture level guesses as one localStorage key per player, named 'level-PLAYER_GUID'
// they're now stored in a single storage key - 'plugin-guess-player-levels' - so clear these old entries
$.each(Object.keys(localStorage), function(ind,key) {// legacy code - should be removed in the future
- if(key.lastIndexOf("level-",0)===0) {
+ if(key.lastIndexOf('level-',0)===0) {
localStorage.removeItem(key);
}
});
diff --git a/plugins/player-tracker.user.js b/plugins/player-tracker.user.js
index efa3b964..20d7cd46 100644
--- a/plugins/player-tracker.user.js
+++ b/plugins/player-tracker.user.js
@@ -2,7 +2,7 @@
// @id iitc-plugin-player-tracker@breunigs
// @name IITC Plugin: Player tracker
// @category Layer
-// @version 0.10.1.@@DATETIMEVERSION@@
+// @version 0.10.2.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@@ -311,16 +311,22 @@ window.plugin.playerTracker.drawData = function() {
var popup = '' + playerData.nick + '';
if(window.plugin.guessPlayerLevels !== undefined &&
- window.plugin.guessPlayerLevels.fetchLevelByPlayer !== undefined) {
- var playerLevel = window.plugin.guessPlayerLevels.fetchLevelByPlayer(pguid);
- if(playerLevel !== undefined) {
- popup += 'Level '
- + playerLevel
- + ' (guessed)'
- + '';
- } else {
- popup += 'Level unknown'
+ window.plugin.guessPlayerLevels.fetchLevelDetailsByPlayer !== undefined) {
+ function getLevel(lvl) {
+ return ''+lvl+'';
}
+ popup += '';
+
+ var playerLevelDetails = window.plugin.guessPlayerLevels.fetchLevelDetailsByPlayer(pguid);
+ if(playerLevelDetails.min == 8) {
+ popup += 'Level ' + getLevel(8);
+ } else {
+ popup += 'Min level: ' + getLevel(playerLevelDetails.min);
+ if(playerLevelDetails.min != playerLevelDetails.guessed)
+ popup += ', guessed level: ' + getLevel(playerLevelDetails.guessed);
+ }
+
+ popup += '';
}
popup += '
'