From 8d7500877db7eedd22bb5b5755c8e26b2e7a7b48 Mon Sep 17 00:00:00 2001 From: fkloft Date: Sun, 1 Dec 2013 18:49:13 +0100 Subject: [PATCH 1/5] Parse public chat data to guess player levels --- plugins/guess-player-levels.user.js | 32 +++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index 4a4a2dc7..6cab72d0 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -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,11 +35,11 @@ window.plugin.guessPlayerLevels.setupCallback = function() { window.plugin.guessPlayerLevels.fetchLevelByPlayer = function(nick) { var cache = window.plugin.guessPlayerLevels._nameToLevelCache; - if(cache["#" + nick] === undefined) { + 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"]) + cache = JSON.parse(localStorage['plugin-guess-player-levels']) window.plugin.guessPlayerLevels._nameToLevelCache = cache; window.plugin.guessPlayerLevels._localStorageLastUpdate = Date.now(); } catch(e) { @@ -46,7 +47,7 @@ window.plugin.guessPlayerLevels.fetchLevelByPlayer = function(nick) { } } - return cache["#" + nick]; + return cache['#' + nick]; } window.plugin.guessPlayerLevels._nameToLevelCache = {}; @@ -121,12 +122,31 @@ window.plugin.guessPlayerLevels.extractPortalData = function(data) { }); } +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); + } + }); +}; + window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level) { var stored = window.plugin.guessPlayerLevels.fetchLevelByPlayer(nick); if(stored && stored >= level) return; - window.plugin.guessPlayerLevels._nameToLevelCache["#" + nick] = level; + window.plugin.guessPlayerLevels._nameToLevelCache['#' + nick] = level; // to minimize accesses to localStorage, writing is delayed a bit @@ -134,7 +154,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 +232,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) { From e802b161089cd0fd08637650b74841b7c5d351d6 Mon Sep 17 00:00:00 2001 From: fkloft Date: Sun, 1 Dec 2013 18:51:47 +0100 Subject: [PATCH 2/5] Show tooltip on @nickname spans in chat --- plugins/guess-player-levels.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index 6cab72d0..d1c23b26 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -82,7 +82,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); }); } From f86033aab726419c56208ad6ffd413a65a74cdf0 Mon Sep 17 00:00:00 2001 From: fkloft Date: Sun, 1 Dec 2013 20:49:12 +0100 Subject: [PATCH 3/5] Distinguish guessed and sure levels --- plugins/guess-player-levels.user.js | 81 ++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 19 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index d1c23b26..5aedb552 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -35,24 +35,49 @@ 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 @@ -136,17 +161,35 @@ window.plugin.guessPlayerLevels.extractChatData = function(data) { && 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); + window.plugin.guessPlayerLevels.savePlayerLevel(nick, lvl, true); } }); }; -window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level) { - var stored = window.plugin.guessPlayerLevels.fetchLevelByPlayer(nick); - if(stored && stored >= level) - return; +window.plugin.guessPlayerLevels.savePlayerLevel = function(nick, level, safe) { + var cache = window.plugin.guessPlayerLevels._loadLevels(); - window.plugin.guessPlayerLevels._nameToLevelCache['#' + nick] = level; + 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 @@ -263,7 +306,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); } }); From 65ee4b367dfb2510111f270cf4bd4373d80ea272 Mon Sep 17 00:00:00 2001 From: fkloft Date: Sun, 1 Dec 2013 21:42:02 +0100 Subject: [PATCH 4/5] Show detailed player level --- plugins/guess-player-levels.user.js | 12 +++++++----- plugins/player-tracker.user.js | 24 +++++++++++++++--------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index 5aedb552..e27fd75b 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -84,13 +84,15 @@ window.plugin.guessPlayerLevels.setLevelTitle = function(dom) { 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); diff --git a/plugins/player-tracker.user.js b/plugins/player-tracker.user.js index efa3b964..2211508c 100644 --- a/plugins/player-tracker.user.js +++ b/plugins/player-tracker.user.js @@ -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 += '
' From 89e43734fb8d3df9ee6899532772200c331c785d Mon Sep 17 00:00:00 2001 From: fkloft Date: Sun, 1 Dec 2013 21:43:55 +0100 Subject: [PATCH 5/5] Bump versions --- plugins/guess-player-levels.user.js | 2 +- plugins/player-tracker.user.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index e27fd75b..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@@ diff --git a/plugins/player-tracker.user.js b/plugins/player-tracker.user.js index 2211508c..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@@