diff --git a/code/artifact.js b/code/artifact.js index b15fafe4..88676ab5 100644 --- a/code/artifact.js +++ b/code/artifact.js @@ -171,7 +171,7 @@ window.artifact.updateLayer = function() { artifact._layer.clearLayers(); $.each(artifact.portalInfo, function(guid,data) { - var latlng = L.latLng ([data._entityData.locationE6.latE6/1E6, data._entityData.locationE6.lngE6/1E6]); + var latlng = L.latLng ([data._entityData.latE6/1E6, data._entityData.lngE6/1E6]); // jarvis shard icon var iconUrl = undefined; @@ -235,8 +235,8 @@ window.artifact.showArtifactList = function() { var sortVal = 0; - var onclick = 'zoomToAndShowPortal(\''+guid+'\',['+data._entityData.locationE6.latE6/1E6+','+data._entityData.locationE6.lngE6/1E6+'])'; - var row = ''+escapeHtmlSpecialChars(data._entityData.portalV2.descriptiveText.TITLE)+''; + var onclick = 'zoomToAndShowPortal(\''+guid+'\',['+data._entityData.latE6/1E6+','+data._entityData.lngE6/1E6+'])'; + var row = ''+escapeHtmlSpecialChars(data._entityData.title)+''; row += ''; diff --git a/code/boot.js b/code/boot.js index 6a313f83..50258b5f 100644 --- a/code/boot.js +++ b/code/boot.js @@ -338,7 +338,6 @@ window.setMapBaseLayer = function() { // included as inline script in the original site, the data is static // and cannot be updated. window.setupPlayerStat = function() { - PLAYER.guid = playerNameToGuid(PLAYER.nickname); var level; var ap = parseInt(PLAYER.ap); for(level = 0; level < MIN_AP_FOR_LEVEL.length; level++) { @@ -531,7 +530,6 @@ function boot() { window.setupTaphold(); window.setupStyles(); window.setupDialogs(); - window.setupPlayerNameCache(); window.setupMap(); window.setupGeosearch(); window.setupRedeem(); @@ -542,6 +540,7 @@ function boot() { window.setupPlayerStat(); window.setupTooltips(); window.chat.setup(); + window.portalDetail.setup(); window.setupQRLoadLib(); window.setupLayerChooserSelectOne(); window.setupLayerChooserStatusRecorder(); diff --git a/code/chat.js b/code/chat.js index b5774ec6..2bcf5f79 100644 --- a/code/chat.js +++ b/code/chat.js @@ -127,7 +127,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) { var d = chat.genPostData(true, chat._faction, getOlderMsgs); var r = window.postAjax( - 'getPaginatedPlextsV2', + 'getPaginatedPlexts', d, function(data, textStatus, jqXHR) { chat.handleFaction(data, getOlderMsgs); }, isRetry @@ -178,7 +178,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) { var d = chat.genPostData(false, chat._public, getOlderMsgs); var r = window.postAjax( - 'getPaginatedPlextsV2', + 'getPaginatedPlexts', d, function(data, textStatus, jqXHR) { chat.handlePublic(data, getOlderMsgs); }, isRetry @@ -284,11 +284,9 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel, is switch(markup[0]) { case 'SENDER': // user generated messages nick = markup[1].plain.slice(0, -2); // cut “: ” at end - pguid = markup[1].guid; break; case 'PLAYER': // automatically generated messages - pguid = markup[1].guid; nick = markup[1].plain; team = markup[1].team === 'RESISTANCE' ? TEAM_RES : TEAM_ENL; if(ind > 0) msg += nick; // don’t repeat nick directly @@ -351,13 +349,9 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel, is if ((!isPublicChannel) && (!isSecureMessage)) msg = '[public] ' + msg; - // format: timestamp, autogenerated, HTML message, player guid - storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer, systemNarrowcast), pguid]; + // format: timestamp, autogenerated, HTML message + storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer, systemNarrowcast)]; - // if we're processing older messages, we could be looking at pre-name change mentions or similar - // so in that case, flag it so we don't overwrite existing name cache entries. - // (it's not perfect - the initial request has the wrong value here) - window.setPlayerName(pguid, nick, isOlderMsgs); // free nick name resolves. }); } diff --git a/code/map_data_cache.js b/code/data_cache.js similarity index 100% rename from code/map_data_cache.js rename to code/data_cache.js diff --git a/code/entity_info.js b/code/entity_info.js index 16fc06f4..ef856d3a 100644 --- a/code/entity_info.js +++ b/code/entity_info.js @@ -8,8 +8,14 @@ // given the entity detail data, returns the team the entity belongs // to. Uses TEAM_* enum values. window.getTeam = function(details) { + return teamStringToId(details.controllingTeam.team); +} + +window.teamStringToId = function(teamStr) { var team = TEAM_NONE; - if(details.controllingTeam.team === 'ALIENS' || details.controllingTeam.team === 'ENLIGHTENED') team = TEAM_ENL; - if(details.controllingTeam.team === 'RESISTANCE') team = TEAM_RES; + if(teamStr === 'ENLIGHTENED') team = TEAM_ENL; + if(teamStr === 'RESISTANCE') team = TEAM_RES; return team; } + + diff --git a/code/hooks.js b/code/hooks.js index 11c9b95c..745b7b46 100644 --- a/code/hooks.js +++ b/code/hooks.js @@ -48,7 +48,8 @@ // called after each map data request finished. Argument is // {success: boolean} indicated the request success or fail. // iitcLoaded: called after IITC and all plugins loaded - +// portalDetailLoaded: called when a request to load full portal detail +// completes. guid, success, details parameters window._hooks = {} window.VALID_HOOKS = [ @@ -58,7 +59,8 @@ window.VALID_HOOKS = [ 'portalDetailsUpdated', 'publicChatDataAvailable', 'factionChatDataAvailable', 'requestFinished', 'nicknameClicked', - 'geoSearch', 'iitcLoaded']; + 'geoSearch', 'iitcLoaded', + 'portalDetailLoaded']; window.runHooks = function(event, data) { if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event); diff --git a/code/map_data_render.js b/code/map_data_render.js index df354c4b..6606a022 100644 --- a/code/map_data_render.js +++ b/code/map_data_render.js @@ -104,7 +104,6 @@ window.Render.prototype.processDeletedGameEntityGuids = function(deleted) { } window.Render.prototype.processGameEntities = function(entities) { - var portalGuids = []; for (var i in entities) { var ent = entities[i]; @@ -112,14 +111,9 @@ window.Render.prototype.processGameEntities = function(entities) { // don't create entities in the 'deleted' list if (!(ent[0] in this.deletedGuid)) { this.createEntity(ent); - if ('portalV2' in ent[2]) portalGuids.push(ent[0]); } } - // now reconstruct links 'optimised' out of the data from the portal link data - for (var i in portalGuids) { - this.createLinksFromPortalData(portalGuids[i]); - } } @@ -130,6 +124,7 @@ window.Render.prototype.endRenderPass = function() { // check to see if there are any entities we haven't seen. if so, delete them for (var guid in window.portals) { // special case for selected portal - it's kept even if not seen + // artifact (e.g. jarvis shard) portals are also kept - but they're always 'seen' if (!(guid in this.seenPortalsGuid) && guid !== selectedPortal) { this.deletePortalEntity(guid); } @@ -214,22 +209,6 @@ window.Render.prototype.deleteFieldEntity = function(guid) { var f = window.fields[guid]; var fd = f.options.details; - var deletePortalLinkedField = function(pguid) { - if (pguid in window.portals) { - var pd = window.portals[pguid].options.details; - if (pd.portalV2.linkedFields) { - var i = pd.portalV2.linkedFields.indexOf(guid); - if (i >= 0) { - pd.portalV2.linkedFields.splice(i,1); - } - } - } - } - - deletePortalLinkedField (fd.capturedRegion.vertexA.guid); - deletePortalLinkedField (fd.capturedRegion.vertexB.guid); - deletePortalLinkedField (fd.capturedRegion.vertexC.guid); - fieldsFactionLayers[f.options.team].removeLayer(f); delete window.fields[guid]; } @@ -244,23 +223,30 @@ window.Render.prototype.createEntity = function(ent) { // logic on detecting entity type based on the stock site javascript. - if ("portalV2" in ent[2]) { - this.createPortalEntity(ent); - } else if ("capturedRegion" in ent[2]) { - this.createFieldEntity(ent); - } else if ("edge" in ent[2]) { - this.createLinkEntity(ent); - } else { - console.warn("Unknown entity found: "+JSON.stringify(ent)); - } + switch (ent[2].type) { + case 'portal': + this.createPortalEntity(ent); + break; + case 'edge': + this.createLinkEntity(ent); + break; + + case 'region': + this.createFieldEntity(ent); + break; + + default: + console.warn('unknown entity found: '+JSON.stringify(ent)); + break; + } } window.Render.prototype.createPortalEntity = function(ent) { this.seenPortalsGuid[ent[0]] = true; // flag we've seen it - var previousDetails = undefined; + var previousData = undefined; // check if entity already exists if (ent[0] in window.portals) { @@ -275,21 +261,17 @@ window.Render.prototype.createPortalEntity = function(ent) { // remember the old details, for the callback - previousDetails = p.options.details; + previousData = p.options.data; this.deletePortalEntity(ent[0]); } - var portalLevel = getPortalLevel(ent[2]); - var team = getTeam(ent[2]); + var portalLevel = parseInt(ent[2].level); + var team = teamStringToId(ent[2].team); + // the data returns unclaimed portals as level 1 - but IITC wants them treated as level 0 + if (team == TEAM_NONE) portalLevel = 0; - var latlng = L.latLng(ent[2].locationE6.latE6/1E6, ent[2].locationE6.lngE6/1E6); - -//TODO: move marker creation, style setting, etc into a separate class -//(as it's called from elsewhere - e.g. selecting/deselecting portals) - -//ALSO: change API for highlighters - make them return the updated style rather than directly calling setStyle on the portal marker -//(can this be done in a backwardly-compatible way??) + var latlng = L.latLng(ent[2].latE6/1E6, ent[2].lngE6/1E6); var dataOptions = { level: portalLevel, @@ -297,32 +279,16 @@ window.Render.prototype.createPortalEntity = function(ent) { ent: ent, // LEGACY - TO BE REMOVED AT SOME POINT! use .guid, .timestamp and .details instead guid: ent[0], timestamp: ent[1], - details: ent[2] + data: ent[2] }; - // Javascript uses references for objects. For now, at least, we need to modify the data within - // the options.details.portalV2 (to add in linkedFields). To avoid tainting the original data (which may be cached) - // we'll shallow-copy these items - dataOptions.details = $.extend({}, dataOptions.details); - dataOptions.details.portalV2 = $.extend({}, dataOptions.details.portalV2); - - - // create a linkedFields entry and add it to details - various bits of code assumes it will exist - for (var fguid in window.fields) { - var fd = window.fields[fguid].options.details; - if ( fd.capturedRegion.vertexA.guid == ent[0] || fd.capturedRegion.vertexB.guid == ent[0] || fd.capturedRegion.vertexC.guid == ent[0]) { - if (!dataOptions.details.portalV2.linkedFields) dataOptions.details.portalV2.linkedFields = []; - dataOptions.details.portalV2.linkedFields.push(fguid); - } - } - var marker = createMarker(latlng, dataOptions); marker.on('click', function() { window.renderPortalDetails(ent[0]); }); marker.on('dblclick', function() { window.renderPortalDetails(ent[0]); window.map.setView(latlng, 17); }); - window.runHooks('portalAdded', {portal: marker, previousDetails: previousDetails}); + window.runHooks('portalAdded', {portal: marker, previousData: previousData}); window.portals[ent[0]] = marker; @@ -370,12 +336,11 @@ window.Render.prototype.createFieldEntity = function(ent) { this.deleteFieldEntity(ent[0]); // option 2, for now } - var team = getTeam(ent[2]); - var reg = ent[2].capturedRegion; + var team = teamStringToId(ent[2].team); var latlngs = [ - L.latLng(reg.vertexA.location.latE6/1E6, reg.vertexA.location.lngE6/1E6), - L.latLng(reg.vertexB.location.latE6/1E6, reg.vertexB.location.lngE6/1E6), - L.latLng(reg.vertexC.location.latE6/1E6, reg.vertexC.location.lngE6/1E6) + L.latLng(ent[2].points[0].latE6/1E6, ent[2].points[0].lngE6/1E6), + L.latLng(ent[2].points[1].latE6/1E6, ent[2].points[1].lngE6/1E6), + L.latLng(ent[2].points[2].latE6/1E6, ent[2].points[2].lngE6/1E6) ]; var poly = L.geodesicPolygon(latlngs, { @@ -387,27 +352,9 @@ window.Render.prototype.createFieldEntity = function(ent) { team: team, guid: ent[0], timestamp: ent[1], - details: ent[2], - // LEGACY FIELDS: these duplicate data available via .details, as IITC previously stored it in data and vertices data: ent[2], - vertices: ent[2].capturedRegion }); - - // now fill in any references portals linkedFields data - var addPortalLinkedField = function(pguid) { - if (pguid in window.portals) { - var pd = window.portals[pguid].options.details; - if (!pd.portalV2.linkedFields) pd.portalV2.linkedFields = []; - if (pd.portalV2.linkedFields.indexOf(pguid) <0 ) { - pd.portalV2.linkedFields.push (ent[0]); - } - } - } - addPortalLinkedField(ent[2].capturedRegion.vertexA.guid); - addPortalLinkedField(ent[2].capturedRegion.vertexB.guid); - addPortalLinkedField(ent[2].capturedRegion.vertexC.guid); - runHooks('fieldAdded',{field: poly}); window.fields[ent[0]] = poly; @@ -433,11 +380,10 @@ window.Render.prototype.createLinkEntity = function(ent,faked) { this.deleteLinkEntity(ent[0]); // option 2 - for now } - var team = getTeam(ent[2]); - var edge = ent[2].edge; + var team = teamStringToId(ent[2].team); var latlngs = [ - L.latLng(edge.originPortalLocation.latE6/1E6, edge.originPortalLocation.lngE6/1E6), - L.latLng(edge.destinationPortalLocation.latE6/1E6, edge.destinationPortalLocation.lngE6/1E6) + L.latLng(ent[2].oLatE6/1E6, ent[2].oLngE6/1E6), + L.latLng(ent[2].dLatE6/1E6, ent[2].dLngE6/1E6) ]; var poly = L.geodesicPolyline(latlngs, { color: COLORS[team], @@ -448,8 +394,6 @@ window.Render.prototype.createLinkEntity = function(ent,faked) { team: team, guid: ent[0], timestamp: ent[1], - details: ent[2], - // LEGACY FIELDS: these duplicate data available via .details, as IITC previously stored it in data and vertices data: ent[2] }); @@ -465,56 +409,6 @@ window.Render.prototype.createLinkEntity = function(ent,faked) { } -window.Render.prototype.createLinksFromPortalData = function(portalGuid) { - - var sourcePortal = portals[portalGuid]; - - for (var sourceLinkIndex in sourcePortal.options.details.portalV2.linkedEdges||[]) { - var sourcePortalLinkInfo = sourcePortal.options.details.portalV2.linkedEdges[sourceLinkIndex]; - - // portals often contain details for edges that don't exist. so only consider faking an edge if this - // is the origin portal - if (sourcePortalLinkInfo.isOrigin) { - - // ... and the other porta has matching link information. - if (sourcePortalLinkInfo.otherPortalGuid in portals) { - - var targetPortal = portals[sourcePortalLinkInfo.otherPortalGuid]; - - for (var targetLinkIndex in targetPortal.options.details.portalV2.linkedEdges||[]) { - var targetPortalLinkInfo = targetPortal.options.details.portalV2.linkedEdges[targetLinkIndex]; - - if (targetPortalLinkInfo.edgeGuid == sourcePortalLinkInfo.edgeGuid) { - // yes - edge in both portals. create it - - var fakeEnt = [ - sourcePortalLinkInfo.edgeGuid, - 0, // mtime for entity data - unknown when faking it, so zero will be the oldest possible - { - controllingTeam: sourcePortal.options.details.controllingTeam, - edge: { - originPortalGuid: portalGuid, - originPortalLocation: sourcePortal.options.details.locationE6, - destinationPortalGuid: sourcePortalLinkInfo.otherPortalGuid, - destinationPortalLocation: targetPortal.options.details.locationE6 - } - } - ]; - - this.createLinkEntity(fakeEnt,true); - - - } - - } - - } - - } - - } -} - window.Render.prototype.updateEntityVisibility = function() { if (this.entityVisibilityZoom === undefined || this.entityVisibilityZoom != map.getZoom()) { diff --git a/code/map_data_request.js b/code/map_data_request.js index 64ea0d2c..9c4f52be 100644 --- a/code/map_data_request.js +++ b/code/map_data_request.js @@ -28,7 +28,7 @@ window.MapDataRequest = function() { this.MIN_TILES_PER_REQUEST = 4; // number of times to retry a tile after a 'bad' error (i.e. not a timeout) - this.MAX_TILE_RETRIES = 3; + this.MAX_TILE_RETRIES = 1; // refresh timers this.MOVE_REFRESH = 1; //time, after a map move (pan/zoom) before starting the refresh processing @@ -45,7 +45,7 @@ window.MapDataRequest = function() { this.RUN_QUEUE_DELAY = 0.5; // delay before requeuing tiles in failed requests - this.BAD_REQUEST_REQUEUE_DELAY = 5; // longer delay before retrying a completely failed request - as in this case the servers are struggling + this.BAD_REQUEST_REQUEUE_DELAY = 10; // longer delay before retrying a completely failed request - as in this case the servers are struggling // a delay before processing the queue after requeuing tiles. this gives a chance for other requests to finish // or other requeue actions to happen before the queue is processed, allowing better grouping of requests @@ -391,7 +391,7 @@ window.MapDataRequest.prototype.sendTileRequest = function(tiles) { var savedThis = this; // NOTE: don't add the request with window.request.add, as we don't want the abort handling to apply to map data any more - window.postAjax('getThinnedEntitiesV4', data, + window.postAjax('getThinnedEntities', data, function(data, textStatus, jqXHR) { savedThis.handleResponse (data, tiles, true); }, // request successful callback function() { savedThis.handleResponse (undefined, tiles, false); } // request failed callback ); diff --git a/code/munge.js b/code/munge.js index 0a9af428..f696cce0 100644 --- a/code/munge.js +++ b/code/munge.js @@ -14,140 +14,52 @@ var requestParameterMunges = [ // obsolete munge sets (they don't have some of the new parameters) deleted - // set 7 - 2013-11-06 + // set 10 - 2013-11-27 { - 'dashboard.getArtifactInfo': 'artifacts', // GET_ARTIFACT_INFO: new (and not obfuscated?!) - 'dashboard.getGameScore': 'yol4dxx5ufqolhk2', // GET_GAME_SCORE - 'dashboard.getPaginatedPlextsV2': '7b83j2z81rtk6101', // GET_PAGINATED_PLEXTS - 'dashboard.getThinnedEntitiesV4': '46su4lrisoq28gxh', // GET_THINNED_ENTITIES - 'dashboard.getPlayersByGuids': 'wsc5puahrymtf1qh', // LOOKUP_PLAYERS - 'dashboard.redeemReward': 'oo0n7pw2m0xufpzx', // REDEEM_REWARD - 'dashboard.sendInviteEmail': 'bo1bp74rz8kbdjkb', // SEND_INVITE_EMAIL - 'dashboard.sendPlext': 'q0f8o4v9t8pt91yv', // SEND_PLEXT + 'dashboard.getArtifactInfo': 'artifacts', // GET_ARTIFACT_INFO + 'dashboard.getGameScore': '4oid643d9zc168hs', // GET_GAME_SCORE + 'dashboard.getPaginatedPlexts': 's1msyywq51ntudpe', // GET_PAGINATED_PLEXTS + 'dashboard.getThinnedEntities': '4467ff9bgxxe4csa', // GET_THINNED_ENTITIES + 'dashboard.getPortalDetails': 'c00thnhf1yp3z6mn', // GET_PORTAL_DETAILS + 'dashboard.redeemReward': '66l9ivg39ygfqqjm', // REDEEM_REWARD + 'dashboard.sendInviteEmail': 'cgb7hi5hglv0xx8k', // SEND_INVITE_EMAIL + 'dashboard.sendPlext': 'etn9xq7brd6947kq', // SEND_PLEXT // common parameters - method: 'imo60cdzkemxduub', - version: '54lh4o0q7nz7dao9', //guessed parameter name - only seen munged - version_parameter: '370c0b4e160ed26c8c4ce40f10f546545730e1ef', // passed as the value to the above parameter + method: 'yyngyttbmmbuvdpa', + version: 'avz401t36lzrapis', + version_parameter: 'c5d0a5d608f729a1232bebdc12fb86ba5fb6c43f', // GET_THINNED_ENTITIES - quadKeys: 'iqy8e2d3zpne0cmh', //guessed parameter name - only seen munged + quadKeys: '1mpmxz2yun22rwnn', // GET_PAGINATED_PLEXTS - desiredNumItems: 'chwe3yko3xy0qlk3', - minLatE6: 'f31z3x27ua8i05cf', - minLngE6: 't0rmob7f42c0w04r', - maxLatE6: 'ebwfvri5io9q0tvu', - maxLngE6: 'lfqzvpj92dp8uxo6', - minTimestampMs: '23a6djyyieeaeduu', - maxTimestampMs: 'zhjtsm2gw7w3b7mx', - chatTab: 'tak64gipm3hhqpnh', //guessed parameter name - only seen munged - ascendingTimestampOrder: 'v5rzzxtg5rmry3dx', + desiredNumItems: 'nzd23jqm9k1cnnij', + minLatE6: '0dod6onpa1s4fezp', + minLngE6: 'soass3t7mm7anneo', + maxLatE6: 'cvarmr3o00ngylo1', + maxLngE6: 'udzwnlx07hzd3bfo', + minTimestampMs: '9iiiks138gkf8xho', + maxTimestampMs: '94wm0u3sc3sgzq7x', + chatTab: 'tqfj4a3okzn5v5o1', + ascendingTimestampOrder: '5jv1m90sq35u6utq', // SEND_PLEXT - message: 'onptntn3szan21lj', - latE6: '1jq9lgu3hjajrt7s', - lngE6: 'plbubiopnavbxxh6', -// chatTab: 'tak64gipm3hhqpnh', //guessed parameter name - only seen munged - - // LOOKUP_PLAYERS - guids: '919p2cfpdo2wz03n', - - // SEND_INVITE_EMAIL - inviteeEmailAddress: 'thpbnoyjx0antwm5', - }, - - // set 8 - 2013-11-07 - { - 'dashboard.getArtifactInfo': 'artifacts', // GET_ARTIFACT_INFO: new (and not obfuscated?!) - 'dashboard.getGameScore': 'lls4clhel87apzpa', // GET_GAME_SCORE - 'dashboard.getPaginatedPlextsV2': 'r6n2xgcd8wjsm4og', // GET_PAGINATED_PLEXTS - 'dashboard.getThinnedEntitiesV4': '1ybigzcf2sifu34b', // GET_THINNED_ENTITIES - 'dashboard.getPlayersByGuids': 'uig0xeb6trclqd2l', // LOOKUP_PLAYERS - 'dashboard.redeemReward': '7dd7x64cc2lbutoq', // REDEEM_REWARD - 'dashboard.sendInviteEmail': 'd8p6dvwilsr460u3', // SEND_INVITE_EMAIL - 'dashboard.sendPlext': 'repg2orpg7htkoto', // SEND_PLEXT - - // common parameters - method: '97aes4vnlvyhoxik', - version: 'an8mglz21qabq3wq', //guessed parameter name - only seen munged - version_parameter: 'b92c9d055fcdf715887b173c706e7a2c267e32c5', // passed as the value to the above parameter - - // GET_THINNED_ENTITIES - quadKeys: 'mhjknavysslwfhk6', //guessed parameter name - only seen munged - - // GET_PAGINATED_PLEXTS - desiredNumItems: 'l61g8u397alq3j1x', - minLatE6: 'wwsvpboc5bxd1s9q', - minLngE6: '48l4x7ngfsz47z3u', - maxLatE6: 'p3m1qg81uqldizu6', - maxLngE6: 'h4kv1eef878vfyk3', - minTimestampMs: 'uj1vcy9ufws24v2c', - maxTimestampMs: '8pt1x5nd9hk5vakv', - chatTab: 'zy1yc1rfczashshu', //guessed parameter name - only seen munged - ascendingTimestampOrder: 'duyuskmky68nl2ci', - - // SEND_PLEXT - message: 'xktwjguq0nohzioa', - latE6: 'm4crflfaibmg9mdf', - lngE6: 'h6jfungrw5ii830r', -// chatTab: 'zy1yc1rfczashshu', //guessed parameter name - only seen munged - - // LOOKUP_PLAYERS - guids: '3u9h9cpfh2yiy4fk', - - // SEND_INVITE_EMAIL - inviteeEmailAddress: 'jpg3y4ax7t0w356j', - }, - - // set 9 - 2013-11-1 - { - 'dashboard.getArtifactInfo': 'artifacts', // GET_ARTIFACT_INFO: new (and not obfuscated?!) - 'dashboard.getGameScore': '9w8phj2dccvns3t9', // GET_GAME_SCORE - 'dashboard.getPaginatedPlextsV2': '3b1nc3ub0sd1704x', // GET_PAGINATED_PLEXTS - 'dashboard.getThinnedEntitiesV4': '2xa55qj41qrhfhas', // GET_THINNED_ENTITIES - 'dashboard.getPlayersByGuids': '734hxjh89d53clqq', // LOOKUP_PLAYERS - 'dashboard.redeemReward': 'k3hwg41wf112gjjh', // REDEEM_REWARD - 'dashboard.sendInviteEmail': 'uwizjeb18xmcesa0', // SEND_INVITE_EMAIL - 'dashboard.sendPlext': '5au1m1hut1gyvnix', // SEND_PLEXT - - // common parameters - method: '3sld77nsm0tjmkvi', - version: 'xz7q6r3aja5ttvoo', //guessed parameter name - only seen munged - version_parameter: 'b121024077de2a0dc6b34119e4440785c9ea5e64', // passed as the value to the above parameter - - // GET_THINNED_ENTITIES - quadKeys: '0o6bkrbwevwn6bg1', //guessed parameter name - only seen munged - - // GET_PAGINATED_PLEXTS - desiredNumItems: '3fketl1tv01q7vxu', - minLatE6: '5i6jhgbv3aq3c4qz', - minLngE6: 'pe2io3r932qysg4u', - maxLatE6: 'plzyuy89bnlb3pth', - maxLngE6: 'q0qq1ooc7sxpynth', - minTimestampMs: 'nc282s8hdklv21mw', - maxTimestampMs: 'ezrljj0l71gpelpu', - chatTab: 'efaznrayv5n3jxs0', //guessed parameter name - only seen munged - ascendingTimestampOrder: 'fcmlcb8ya0oa1clk', - - // SEND_PLEXT - message: 'jg4ms2i14rgzi02n', - latE6: 'nkf3evzpkxkq8l2q', - lngE6: '7xoz0xl8se4d1j53', + message: '8exta9k7y8huhqmc', + latE6: 'kqek161gza3kjcry', + lngE6: '3dlxsqrjj2vcmhbc', // chatTab: 'efaznrayv5n3jxs0', //guessed parameter name - only seen munged - // LOOKUP_PLAYERS - guids: 'm4dcrdltldigfo94', + // GET_PORTAL_DETAILS + guid: 'seg6ohxgnqf9xu9w', // SEND_INVITE_EMAIL - inviteeEmailAddress: 'rye9be4um2t1z5ts', + inviteeEmailAddress: '8exta9k7y8huhqmc', }, ]; -var activeRequestMungeSet = undefined; - // in the recent stock site updates, their javascript code has been less obfuscated, but also the munge parameters // change on every release. I can only assume it's now an integrated step in the build/release system, rather @@ -158,14 +70,15 @@ function extractMungeFromStock() { var foundMunges = {}; // these are easy - directly available in variables - foundMunges['dashboard.getArtifactInfo'] = nemesis.dashboard.requests.MethodName.GET_ARTIFACT_INFO; - foundMunges['dashboard.getGameScore'] = nemesis.dashboard.requests.MethodName.GET_GAME_SCORE; - foundMunges['dashboard.getPaginatedPlextsV2'] = nemesis.dashboard.requests.MethodName.GET_PAGINATED_PLEXTS; - foundMunges['dashboard.getThinnedEntitiesV4'] = nemesis.dashboard.requests.MethodName.GET_THINNED_ENTITIES; - foundMunges['dashboard.getPlayersByGuids'] = nemesis.dashboard.requests.MethodName.LOOKUP_PLAYERS; - foundMunges['dashboard.redeemReward'] = nemesis.dashboard.requests.MethodName.REDEEM_REWARD; - foundMunges['dashboard.sendInviteEmail'] = nemesis.dashboard.requests.MethodName.SEND_INVITE_EMAIL; - foundMunges['dashboard.sendPlext'] = nemesis.dashboard.requests.MethodName.SEND_PLEXT; + // NOTE: the .toString() is there so missing variables throw an exception, rather than storing 'undefined' + foundMunges['dashboard.getArtifactInfo'] = nemesis.dashboard.requests.MethodName.GET_ARTIFACT_INFO.toString(); + foundMunges['dashboard.getGameScore'] = nemesis.dashboard.requests.MethodName.GET_GAME_SCORE.toString(); + foundMunges['dashboard.getPaginatedPlexts'] = nemesis.dashboard.requests.MethodName.GET_PAGINATED_PLEXTS.toString(); + foundMunges['dashboard.getThinnedEntities'] = nemesis.dashboard.requests.MethodName.GET_THINNED_ENTITIES.toString(); + foundMunges['dashboard.getPortalDetails'] = nemesis.dashboard.requests.MethodName.GET_PORTAL_DETAILS.toString(); + foundMunges['dashboard.redeemReward'] = nemesis.dashboard.requests.MethodName.REDEEM_REWARD.toString(); + foundMunges['dashboard.sendInviteEmail'] = nemesis.dashboard.requests.MethodName.SEND_INVITE_EMAIL.toString(); + foundMunges['dashboard.sendPlext'] = nemesis.dashboard.requests.MethodName.SEND_PLEXT.toString(); // the rest are trickier - we need to parse the functions of the stock site. these break very often // on site updates @@ -218,11 +131,11 @@ function extractMungeFromStock() { var chatTab = result[7] || result[8]; if (chatTab != foundMunges.chatTab) throw 'Error: inconsistent munge parsing for chatTab'; - // LOOKUP_PLAYERS - var reg = new RegExp('LOOKUP_PLAYERS, {'+mungeRegExpLit+'a}'); - var result = reg.exec(nemesis.dashboard.network.DataFetcher.prototype.lookupPlayersByGuids.toString()); + // GET_PORTAL_DETAILS + var reg = new RegExp('GET_PORTAL_DETAILS, {'+mungeRegExpLit+'a}'); + var result = reg.exec(nemesis.dashboard.network.DataFetcher.prototype.getPortalDetails.toString()); - foundMunges.guids = result[1] || result[2]; + foundMunges.guid = result[1] || result[2]; // SEND_INVITE_EMAIL var reg = new RegExp('SEND_INVITE_EMAIL, {'+mungeRegExpLit+'b}'); @@ -244,44 +157,32 @@ window.detectActiveMungeSet = function() { // first, try and parse the stock functions and extract the munges directly activeMunge = extractMungeFromStock(); if (activeMunge) { - console.log('IITC: Successfully extracted munges from stock javascript'); - return; - } - - // try and find the stock page functions - // FIXME? revert to searching through all the code? is that practical? - var stockFunc; - try { - stockFunc = nemesis.dashboard.network.XhrController.prototype.doSendRequest_.toString(); - } catch(e) { - try { - stockFunc = nemesis.dashboard.network.XhrController.prototype.sendRequest.toString(); - } catch(e) { - try { - stockFunc = nemesis.dashboard.network.DataFetcher.prototype.sendRequest_.toString(); - } catch(e) { - console.warn('Failed to find a relevant function in the stock site'); - } - } - } - - if(stockFunc) { - for (var i in requestParameterMunges) { - if (stockFunc.indexOf (requestParameterMunges[i]['method']) >= 0) { - console.log('IITC: found request munge set index '+i+' in stock intel site'); - activeRequestMungeSet = i; - } - } + console.log('IITC: Successfully extracted munges from stock javascript - excellent work!'); } else { - console.error('IITC: failed to find the stock site function for detecting munge set'); + console.warn('IITC: failed to detect a munge set from the code - searching our list...'); + + // try to find a matching munge set from the pre-defined ones. this code remains as in the case of + // things breaking it can be quicker to update the table than to fix the regular expressions used + // above + + try { + for (var i in requestParameterMunges) { + if (requestParameterMunges[i]['dashboard.getThinnedEntities'] == nemesis.dashboard.requests.MethodName.GET_THINNED_ENTITIES) { + console.log('IITC: found a match with munge set index '+i); + activeMunge = requestParameterMunges[i]; + break; + } + } + } catch(e) { + console.warn('IITC: failed to find matching munge set from supplied list'); + } } - if (activeRequestMungeSet===undefined) { - console.error('IITC: failed to find request munge set - IITC will likely fail'); - activeRequestMungeSet = 0; + if (!activeMunge) { + console.warn('IITC: Error!! failed to find a parameter munge set - neither extracting from stock, or searching through table. IITC CANNOT WORK'); + throw {error:'Failed to find a munge set'}; } - activeMunge = requestParameterMunges[activeRequestMungeSet]; } diff --git a/code/player_names.js b/code/player_names.js index e9475a03..4bb73597 100644 --- a/code/player_names.js +++ b/code/player_names.js @@ -1,152 +1,18 @@ // PLAYER NAMES ////////////////////////////////////////////////////// -// Player names are cached in sessionStorage. There is no GUI -// element from within the total conversion to clean them, but you -// can run sessionStorage.clean() to reset it. - - -window.setupPlayerNameCache = function() { - // IITC used to store player names in localStorage rather than sessionStorage. lets clear out any cached - // names from session storage - var matchPlayerGuid = new RegExp ('^[0-9a-f]{32}\\.c$'); - - $.each(Object.keys(localStorage), function(ind,key) { - if ( matchPlayerGuid.test(key) ) { - // copy from localStorage to sessionStorage if not already there - if (!sessionStorage[key]) sessionStorage[key] = localStorage[key]; - // then clear from localStorage - localStorage.removeItem(key); - } - }); - -} - - -// retrieves player name by GUID. If the name is not yet available, it -// will be added to a global list of GUIDs that need to be resolved. -// The resolve method is not called automatically. -window.getPlayerName = function(guid) { - if(sessionStorage[guid]) return sessionStorage[guid]; - // only add to queue if it isn’t already - if(playersToResolve.indexOf(guid) === -1 && playersInResolving.indexOf(guid) === -1) { - playersToResolve.push(guid); - } - return '{'+guid.slice(0, 12)+'}'; -} - -window._playerNameToGuidCache = {}; - -window.playerNameToGuid = function(playerName) { - var cachedGuid = window._playerNameToGuidCache[playerName]; - if (cachedGuid !== undefined) return cachedGuid; - - // IITC needs our own player GUID, from a lookup by name. so we retrieve this from localstorage (if available) - if (playerName == PLAYER.nickname) { - cachedGuid = localStorage['PLAYER-'+PLAYER.nickname]; - if (cachedGuid !== undefined) return cachedGuid; - } - - var guid = null; - $.each(Object.keys(sessionStorage), function(ind,key) { - if(playerName === sessionStorage[key]) { - guid = key; - window._playerNameToGuidCache[playerName] = guid; - return false; //break from $.each - } - }); - - return guid; -} - -// resolves all player GUIDs that have been added to the list. Reruns -// renderPortalDetails when finished, so that then-unresolved names -// get replaced by their correct versions. -window.resolvePlayerNames = function() { - if(window.playersToResolve.length === 0) return; - - //limit per request. stock site is never more than 13 (8 res, 4 mods, owner) - //testing shows 15 works and 20 fails - var MAX_RESOLVE_PLAYERS_PER_REQUEST = 15; - var MAX_RESOLVE_REQUESTS = 8; - - if (window.playersToResolve.length > MAX_RESOLVE_PLAYERS_PER_REQUEST*MAX_RESOLVE_REQUESTS) { - console.log('Warning: player name resolve queue had '+window.playersToResolve.length+' entries. Limiting to the first '+MAX_RESOLVE_PLAYERS_PER_REQUEST*MAX_RESOLVE_REQUESTS+' to prevent excessive requests'); - window.playersToResolve = playersToResolve.slice(0,MAX_RESOLVE_PLAYERS_PER_REQUEST*MAX_RESOLVE_REQUESTS); - } - - var p = window.playersToResolve.slice(0,MAX_RESOLVE_PLAYERS_PER_REQUEST); - window.playersToResolve = playersToResolve.slice(MAX_RESOLVE_PLAYERS_PER_REQUEST); - - var d = {guids: p}; - window.playersInResolving = window.playersInResolving.concat(p); - - postAjax('getPlayersByGuids', d, function(dat) { - var resolvedName = {}; - if(dat.result) { - $.each(dat.result, function(ind, player) { - window.setPlayerName(player.guid, player.nickname); - resolvedName[player.guid] = player.nickname; - // remove from array - window.playersInResolving.splice(window.playersInResolving.indexOf(player.guid), 1); - }); - } else { - //no 'result' - a successful http request, but the returned result was an error of some kind - console.warn('getplayers problem - no result in response: '+dat); - - //likely to be some kind of 'bad request' (e.g. too many names at once, or otherwise badly formatted data. - //therefore, not a good idea to automatically retry by adding back to the playersToResolve list - } - - // Run hook 'playerNameResolved' with the resolved player names - window.runHooks('playerNameResolved', {names: resolvedName}); - - //TODO: have an event triggered for this instead of hard-coded single function call - if(window.selectedPortal) - window.renderPortalDetails(window.selectedPortal); - - //if more to do, run again - if(window.playersToResolve.length>0) resolvePlayerNames(); - }, - function() { - // append failed resolves to the list again - console.warn('resolving player guids failed: ' + p.join(', ')); - window.playersToResolve.concat(p); - }); -} - - -window.setPlayerName = function(guid, nick, uncertain) { - // the 'uncertain' flag is set when we're scrolling back through chat. it's possible in this case - // to come across a message from before a name change. these should be ignored if existing cache entries exist - if(uncertain && guid in sessionStorage) return; - - if($.trim(('' + nick)).slice(0, 5) === '{"L":' && !window.alertFor37WasShown) { - window.alertFor37WasShown = true; - alert('You have run into bug #37. Please help me solve it!\nCopy and paste this text and post it here:\nhttps://github.com/breunigs/ingress-intel-total-conversion/issues/37\nIf copy & pasting doesn’t work, make a screenshot instead.\n\n\n' + window.debug.printStackTrace() + '\n\n\n' + JSON.stringify(nick)); - } - sessionStorage[guid] = nick; - - // IITC needs our own player ID early on in startup. the only way we can find this is by something else - // doing a guid->name lookup for our own name. as this doesn't always happen - and likely won't happen when needed - // we'll store our own name->guid lookup in localStorage - if (nick == PLAYER.nickname) { - localStorage['PLAYER-'+PLAYER.nickname] = guid; - PLAYER.guid = guid; // set it in PLAYER in case it wasn't already done - } -} - // test to see if a specific player GUID is a special system account (e.g. __JARVIS__, __ADA__) that shouldn't // be listed as a player -window.isSystemPlayer = function(guid) { +window.isSystemPlayer = function(name) { - switch (guid) { - case '00000000000000000000000000000001.c': - case '00000000000000000000000000000002.c': + switch (name) { + case '__ADA__': + case '__JARVIS__': return true; default: return false; } + } diff --git a/code/portal_data.js b/code/portal_data.js new file mode 100644 index 00000000..cf5aa62b --- /dev/null +++ b/code/portal_data.js @@ -0,0 +1,81 @@ +/// PORTAL DATA TOOLS /////////////////////////////////////////////////// +// misc functions to get portal info + +// search through the links data for all that link from or to a portal. returns an object with separate lists of in +// and out links. may or may not be as accurate as the portal details, depending on how much data the API returns +window.getPortalLinks = function(guid) { + + var links = { in: [], out: [] }; + + $.each(window.links, function(g,l) { + var d = l.options.data; + + if (d.oGuid == guid) { + links.out.push(g); + } + if (d.dGuid == guid) { + links.in.push(g); + } + }); + + return links; +} + + +// search through the fields for all that reference a portal +window.getPortalFields = function(guid) { + var fields = []; + + $.each(window.fields, function(g,f) { + var d = f.options.data; + + if ( d.points[0].guid == guid + || d.points[1].guid == guid + || d.points[2].guid == guid ) { + + fields.push(g); + } + }); + + return fields; +} + + +// find the lat/lon for a portal, using any and all available data +// (we have the list of portals, the cached portal details, plus links and fields as sources of portal locations) +window.findPortalLatLng = function(guid) { + if (window.portals[guid]) { + return window.portals[guid].getLatLng(); + } + + // not found in portals - try the cached (and possibly stale) details - good enough for location + var details = portalDetail.get(guid); + if (details) { + return L.latLng (details.locationE6.latE6/1E6, details.locationE6.lngE6/1E6); + } + + // now try searching through fields + for (var fguid in window.fields) { + var f = window.fields[fguid].options.data; + + for (var i in f.points) { + if (f.points[i].guid == guid) { + return L.latLng (f.points[i].latE6/1E6, f.points[i].lngE6/1E6); + } + } + } + + // and finally search through links + for (var lguid in window.links) { + var l = window.links[lguid].options.data; + if (l.oGuid == guid) { + return L.latLng (l.oLatE6/1E6, l.oLngE6/1E6); + } + if (l.dGuid == guid) { + return L.latLng (l.dLatE6/1E6, l.dLngE6/1E6); + } + } + + // no luck finding portal lat/lng + return undefined; +} diff --git a/code/portal_detail.js b/code/portal_detail.js new file mode 100644 index 00000000..e99d5b7a --- /dev/null +++ b/code/portal_detail.js @@ -0,0 +1,59 @@ +/// PORTAL DETAIL ////////////////////////////////////// +// code to retrieve the new potal detail data from the servers + +// NOTE: the API for portal detailed information is NOT FINAL +// this is a temporary measure to get things working again after a major change to the intel map +// API. expect things to change here + + +// anonymous function wrapper for the code - any variables/functions not placed into 'window' will be private +(function(){ + +var cache; + + +window.portalDetail = function() {}; + +window.portalDetail.setup = function() { + cache = new DataCache(); + + cache.startExpireInterval(20); +} + +window.portalDetail.get = function(guid) { + return cache.get(guid); +} + +window.portalDetail.isFresh = function(guid) { + return cache.isFresh(guid); +} + + +var handleResponse = function(guid, data, success) { + + if (success) { + cache.store(guid,data); + + //FIXME..? better way of handling sidebar refreshing... + + if (guid == selectedPortal) { + renderPortalDetails(guid); + } + } + + window.runHooks ('portalDetailLoaded', {guid:guid, success:success, details:data}); +} + +window.portalDetail.request = function(guid) { + + window.postAjax('getPortalDetails', {guid:guid}, + function(data,textStatus,jqXHR) { handleResponse(guid, data, true); }, + function() { handleResponse(guid, undefined, false); } + ); +} + + + +})(); // anonumous wrapper function end + + diff --git a/code/portal_detail_display.js b/code/portal_detail_display.js index 3562844f..231e9716 100644 --- a/code/portal_detail_display.js +++ b/code/portal_detail_display.js @@ -5,79 +5,45 @@ window.renderPortalDetails = function(guid) { selectPortal(window.portals[guid] ? guid : null); + if (!portalDetail.isFresh(guid)) { + portalDetail.request(guid); + } + + // TODO? handle the case where we request data for a particular portal GUID, but it *isn't* in + // window.portals.... + if(!window.portals[guid]) { urlPortal = guid; $('#portaldetails').html(''); if(isSmartphone()) { $('.fullimg').remove(); - $('#mobileinfo').html(''); + $('#mobileinfo').html('
tap here for info screen
'); } return; } - var d = window.portals[guid].options.details; - - // collect some random data that’s not worth to put in an own method - var links = {incoming: 0, outgoing: 0}; - if(d.portalV2.linkedEdges) $.each(d.portalV2.linkedEdges, function(ind, link) { - links[link.isOrigin ? 'outgoing' : 'incoming']++; - }); - function linkExpl(t) { return ''+t+''; } - var linksText = [linkExpl('links'), linkExpl(' ↳ ' + links.incoming+'  •  '+links.outgoing+' ↴')]; - - var player = d.captured && d.captured.capturingPlayerId - ? '' + getPlayerName(d.captured.capturingPlayerId) + '' - : null; - var playerText = player ? ['owner', player] : null; - - var time = d.captured - ? '' - + unixTimeToString(d.captured.capturedTime) + '' - : null; - var sinceText = time ? ['since', time] : null; - - var linkedFields = ['fields', d.portalV2.linkedFields ? d.portalV2.linkedFields.length : 0]; - - // collect and html-ify random data - var randDetails = [ - playerText, sinceText, - getRangeText(d), getEnergyText(d), - linksText, getAvgResoDistText(d), - linkedFields, getAttackApGainText(d), - getHackDetailsText(d), getMitigationText(d) - ]; - - // artifact details - - //niantic hard-code the fact it's just jarvis shards/targets - so until more examples exist, we'll do the same - //(at some future point we can iterate through all the artifact types and add rows as needed) - var jarvisArtifact = artifact.getPortalData (guid, 'jarvis'); - if (jarvisArtifact) { - // the genFourColumnTable function below doesn't handle cases where one column is null and the other isn't - so default to *something* in both columns - var target = ['',''], shards = ['shards','(none)']; - if (jarvisArtifact.target) { - target = ['target', ''+(jarvisArtifact.target==TEAM_RES?'Resistance':'Enlightened')+'']; - } - if (jarvisArtifact.fragments) { - shards = [jarvisArtifact.fragments.length>1?'shards':'shard', '#'+jarvisArtifact.fragments.join(', #')]; - } - - randDetails.push (target, shards); - } + var portal = window.portals[guid]; + var data = portal.options.data; + var details = portalDetail.get(guid); - randDetails = '' + genFourColumnTable(randDetails) + '
'; + var modDetails = details ? '
'+getModDetails(details)+'
' : ''; + var miscDetails = details ? getPortalMiscDetails(guid,details) : ''; + var resoDetails = details ? getResonatorDetails(details) : ''; - var resoDetails = '' + getResonatorDetails(d) + '
'; +//TODO? other status details... + var statusDetails = details ? '' : '
Loading details...
'; + - var img = getPortalImageUrl(d); - var lat = d.locationE6.latE6/1E6; - var lng = d.locationE6.lngE6/1E6; - var perma = '/intel?ll='+lat+','+lng+'&z=17&pll='+lat+','+lng; - var imgTitle = 'title="'+getPortalDescriptionFromDetails(d)+'\n\nClick to show full image."'; - var poslinks = 'window.showPortalPosLinks('+lat+','+lng+',\''+escapeJavascriptString(d.portalV2.descriptiveText.TITLE)+'\')'; - var portalDetailObj = window.getPortalDescriptionFromDetailsExtended(d); + var img = fixPortalImageUrl(details ? details.imageByUrl && details.imageByUrl.imageUrl : data.image); + var title = details ? details.portalV2.descriptiveText.TITLE : data.title; + + var lat = data.latE6/1E6; + var lng = data.lngE6/1E6; + + var imgTitle = details ? getPortalDescriptionFromDetails(details) : data.title; + imgTitle += '\n\nClick to show full image.'; + var portalDetailObj = details ? window.getPortalDescriptionFromDetailsExtended(details) : undefined; var portalDetailedDescription = ''; @@ -111,74 +77,184 @@ window.renderPortalDetails = function(guid) { portalDetailedDescription += ''; } - var levelDetails = getPortalLevel(d); - if(levelDetails != 8) { - if(levelDetails==Math.ceil(levelDetails)) - levelDetails += "\n8"; - else - levelDetails += "\n" + (Math.ceil(levelDetails) - levelDetails)*8; - levelDetails += " resonator level(s) needed for next portal level"; - } else { - levelDetails += "\nfully upgraded"; + // portal level. start with basic data - then extend with fractional info in tooltip if available + var levelInt = data ? data.level : getPortalLevel(details); + var levelDetails = data.level; + if (details) { + levelDetails = getPortalLevel(details); + if(levelDetails != 8) { + if(levelDetails==Math.ceil(levelDetails)) + levelDetails += "\n8"; + else + levelDetails += "\n" + (Math.ceil(levelDetails) - levelDetails)*8; + levelDetails += " resonator level(s) needed for next portal level"; + } else { + levelDetails += "\nfully upgraded"; + } } levelDetails = "Level " + levelDetails; + + var linkDetails = []; + + var posOnClick = 'window.showPortalPosLinks('+lat+','+lng+',\''+escapeJavascriptString(title)+'\')'; + var permalinkUrl = '/intel?ll='+lat+','+lng+'&z=17&pll='+lat+','+lng; + + if (typeof android !== 'undefined' && android && android.intentPosLink) { + // android devices. one share link option - and the android app provides an interface to share the URL, + // share as a geo: intent (navigation via google maps), etc + + var shareLink = $('
').html( $('').attr({onclick:posOnClick}).text('Share portal') ).html(); + linkDetails.push(''); + + } else { + // non-android - a permalink for the portal + var permaHtml = $('
').html( $('').attr({href:permalinkUrl, target:'_blank', title:'Create a URL link to this portal'}).text('Portal link') ).html(); + linkDetails.push ( '' ); + + // and a map link popup dialog + var mapHtml = $('
').html( $('').attr({onclick:posOnClick, title:'Link to alternative maps (Google, etc)'}).text('Map links') ).html(); + linkDetails.push(''); + + } + $('#portaldetails') - .attr('class', TEAM_TO_CSS[getTeam(d)]) - .html('' - + '

'+escapeHtmlSpecialChars(d.portalV2.descriptiveText.TITLE)+'

' - + 'X' + .html('') //to ensure it's clear + .attr('class', TEAM_TO_CSS[portal.options.team]) + .append( + $('

').attr({class:'title'}).text(data.title), + + $('').attr({class:'close', onclick:'renderPortalDetails(null); if(isSmartphone()) show("map");',title:'Close'}).text('X'), + // help cursor via ".imgpreview img" - + '
' - + ''+Math.floor(getPortalLevel(d))+'' - + '
'+ portalDetailedDescription + '
' - + '
' - + '

' - + '
'+getModDetails(d)+'
' - + randDetails - + resoDetails - + '
' + $('
') + .attr({class:'imgpreview', title:imgTitle, style:"background-image: url('"+img+"')"}) + .append( + $('').attr({id:'level', title: levelDetails}).text(levelInt), + $('
').attr({class:'portalDetails'}).html(portalDetailedDescription), + $('').attr({class:'hide', src:img}) + ), + + modDetails, + miscDetails, + resoDetails, + statusDetails, + '
' + linkDetails.join('') + '
' ); - // try to resolve names that were required for above functions, but - // weren't available yet. - resolvePlayerNames(); - - runHooks('portalDetailsUpdated', {portalDetails: d}); + // only run the hooks when we have a portalDetails object - most plugins rely on the extended data + // TODO? another hook to call always, for any plugins that can work with less data? + if (details) { + runHooks('portalDetailsUpdated', {guid: guid, portal: portal, portalDetails: details, portalData: data}); + } } + + +window.getPortalMiscDetails = function(guid,d) { + + var randDetails; + + if (d) { + + // collect some random data that’s not worth to put in an own method + var links = {incoming: 0, outgoing: 0}; + $.each(d.portalV2.linkedEdges||[], function(ind, link) { + links[link.isOrigin ? 'outgoing' : 'incoming']++; + }); + + function linkExpl(t) { return ''+t+''; } + var linksText = [linkExpl('links'), linkExpl(' ↳ ' + links.incoming+'  •  '+links.outgoing+' ↴')]; + + var player = d.captured && d.captured.capturingPlayerId + ? '' + d.captured.capturingPlayerId + '' + : null; + var playerText = player ? ['owner', player] : null; + + var time = d.captured + ? '' + + unixTimeToString(d.captured.capturedTime) + '' + : null; + var sinceText = time ? ['since', time] : null; + + var linkedFields = ['fields', d.portalV2.linkedFields ? d.portalV2.linkedFields.length : 0]; + + // collect and html-ify random data + var randDetailsData = []; + if (playerText && sinceText) { + randDetailsData.push (playerText, sinceText); + } + + randDetailsData.push ( + getRangeText(d), getEnergyText(d), + linksText, getAvgResoDistText(d), + linkedFields, getAttackApGainText(d), + getHackDetailsText(d), getMitigationText(d) + ); + + // artifact details + + //niantic hard-code the fact it's just jarvis shards/targets - so until more examples exist, we'll do the same + //(at some future point we can iterate through all the artifact types and add rows as needed) + var jarvisArtifact = artifact.getPortalData (guid, 'jarvis'); + if (jarvisArtifact) { + // the genFourColumnTable function below doesn't handle cases where one column is null and the other isn't - so default to *something* in both columns + var target = ['',''], shards = ['shards','(none)']; + if (jarvisArtifact.target) { + target = ['target', ''+(jarvisArtifact.target==TEAM_RES?'Resistance':'Enlightened')+'']; + } + if (jarvisArtifact.fragments) { + shards = [jarvisArtifact.fragments.length>1?'shards':'shard', '#'+jarvisArtifact.fragments.join(', #')]; + } + + randDetailsData.push (target, shards); + } + + randDetails = '' + genFourColumnTable(randDetailsData) + '
'; + + } + + return randDetails; +} + + // draws link-range and hack-range circles around the portal with the // given details. Clear them if parameter 'd' is null. -window.setPortalIndicators = function(d) { +window.setPortalIndicators = function(p) { + if(portalRangeIndicator) map.removeLayer(portalRangeIndicator); portalRangeIndicator = null; if(portalAccessIndicator) map.removeLayer(portalAccessIndicator); portalAccessIndicator = null; - if(d === null) return; + // if we have a portal... - var range = getPortalRange(d); - var coord = [d.locationE6.latE6/1E6, d.locationE6.lngE6/1E6]; - portalRangeIndicator = (range.range > 0 - ? L.geodesicCircle(coord, range.range, { - fill: false, - color: RANGE_INDICATOR_COLOR, - weight: 3, - dashArray: range.isLinkable ? undefined : "10,10", - clickable: false }) - : L.circle(coord, range.range, { fill: false, stroke: false, clickable: false }) + if(p) { + var coord = p.getLatLng(); + + // range is only known for sure if we have portal details + // TODO? render a min range guess until details are loaded..? + + var d = portalDetail.get(p.options.guid); + if (d) { + var range = getPortalRange(d); + portalRangeIndicator = (range.range > 0 + ? L.geodesicCircle(coord, range.range, { + fill: false, + color: RANGE_INDICATOR_COLOR, + weight: 3, + dashArray: range.isLinkable ? undefined : "10,10", + clickable: false }) + : L.circle(coord, range.range, { fill: false, stroke: false, clickable: false }) + ).addTo(map); + } + + portalAccessIndicator = L.circle(coord, HACK_RANGE, + { fill: false, color: ACCESS_INDICATOR_COLOR, weight: 2, clickable: false } ).addTo(map); + } - portalAccessIndicator = L.circle(coord, HACK_RANGE, - { fill: false, color: ACCESS_INDICATOR_COLOR, weight: 2, clickable: false } - ).addTo(map); } // highlights portal with given GUID. Automatically clears highlights @@ -205,7 +281,7 @@ window.selectPortal = function(guid) { } } - setPortalIndicators(newPortal ? newPortal.options.details : null); + setPortalIndicators(newPortal); runHooks('portalSelected', {selectedPortalGuid: guid, unselectedPortalGuid: oldPortalGuid}); return update; diff --git a/code/portal_detail_display_tools.js b/code/portal_detail_display_tools.js index 353189d9..a2891067 100644 --- a/code/portal_detail_display_tools.js +++ b/code/portal_detail_display_tools.js @@ -29,8 +29,8 @@ window.getPortalDescriptionFromDetails = function(details) { var desc = descObj.TITLE; if(descObj.ADDRESS) desc += '\n' + descObj.ADDRESS; - if(descObj.ATTRIBUTION) - desc += '\nby '+descObj.ATTRIBUTION+' ('+descObj.ATTRIBUTION_LINK+')'; +// if(descObj.ATTRIBUTION) +// desc += '\nby '+descObj.ATTRIBUTION+' ('+descObj.ATTRIBUTION_LINK+')'; return desc; } @@ -102,7 +102,7 @@ window.getModDetails = function(d) { modTooltip = modName + '\n'; if (mod.installingUser) { - modTooltip += 'Installed by: '+ getPlayerName(mod.installingUser) + '\n'; + modTooltip += 'Installed by: '+ mod.installingUser + '\n'; } if (mod.stats) { @@ -176,7 +176,7 @@ window.getResonatorDetails = function(d) { var l = parseInt(reso.level); var v = parseInt(reso.energyTotal); - var nick = window.getPlayerName(reso.ownerGuid); + var nick = reso.ownerGuid; var dist = reso.distanceToPortal; // if array order and slot order drift apart, at least the octant // naming will still be correct. @@ -184,7 +184,8 @@ window.getResonatorDetails = function(d) { resoDetails.push(renderResonatorDetails(slot, l, v, dist, nick)); }); - return genFourColumnTable(resoDetails); + return '' + genFourColumnTable(resoDetails) + '
'; + } // helper function that renders the HTML for a given resonator. Does diff --git a/code/portal_info.js b/code/portal_info.js index fd27b4ee..56c47c23 100644 --- a/code/portal_info.js +++ b/code/portal_info.js @@ -112,7 +112,8 @@ window.getAttackApGain = function(d) { return true; resoCount += 1; var reslevel=parseInt(reso.level); - if(reso.ownerGuid === PLAYER.guid) { + // NOTE: reso.ownerGuid is actually the name - no player GUIDs are visible in the protocol any more + if(reso.ownerGuid === PLAYER.nickname) { if(maxResonators[reslevel] > 0) { maxResonators[reslevel] -= 1; } @@ -167,7 +168,8 @@ window.potentialPortalLevel = function(d) { player_resontators[i] = i > PLAYER.level ? 0 : MAX_RESO_PER_PLAYER[i]; } $.each(resonators_on_portal, function(ind, reso) { - if(reso !== null && reso.ownerGuid === window.PLAYER.guid) { + // NOTE: reso.ownerGuid is actually the player name - GUIDs are not in the protocol any more + if(reso !== null && reso.ownerGuid === window.PLAYER.nickname) { player_resontators[reso.level]--; } resonator_levels.push(reso === null ? 0 : reso.level); @@ -194,10 +196,8 @@ window.potentialPortalLevel = function(d) { } -window.getPortalImageUrl = function(d) { - if (d.imageByUrl && d.imageByUrl.imageUrl) { - url = d.imageByUrl.imageUrl; - +window.fixPortalImageUrl = function(url) { + if (url) { if (window.location.protocol === 'https:') { url = url.indexOf('www.panoramio.com') !== -1 ? url.replace(/^http:\/\/www/, 'https://ssl').replace('small', 'medium') diff --git a/code/utils_misc.js b/code/utils_misc.js index 11ed6545..75d213e8 100644 --- a/code/utils_misc.js +++ b/code/utils_misc.js @@ -281,7 +281,7 @@ window.getMinPortalLevelForZoom = function(z) { // these values are from the stock intel map. however, they're too detailed for reasonable speed, and increasing // detail at a higher zoom level shows enough detail still, AND speeds up IITC considerably //var ZOOM_TO_LEVEL = [8, 8, 8, 8, 7, 7, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1, 1]; - var ZOOM_TO_LEVEL = [8, 8, 8, 8, 8, 8, 7, 7, 6, 5, 4, 4, 3, 2, 2, 1, 1]; + var ZOOM_TO_LEVEL = [8, 8, 8, 8, 8, 7, 7, 7, 6, 5, 4, 4, 3, 2, 2, 1, 1]; var l = ZOOM_TO_LEVEL[z] || 0; return l; diff --git a/json_examples/artifacts-response.js b/json_examples/artifacts-response.js new file mode 100644 index 00000000..7e19f0bb --- /dev/null +++ b/json_examples/artifacts-response.js @@ -0,0 +1,247 @@ +// artifacts - uses the same cut-down data format as the map portal data + +{ + "artifacts":[ + { + "targetInfos":[ + { + "portalInfo":{ + "title":"Cupid's Span", + "image":"http://lh6.ggpht.com/xBckx2qeAv4kog4JQfUxzzq86OG0RYP2ccrQv05HOuMeqUWV2cGMWrBU27LZJKUCSNCdQVAt3eqtnBlPGhyB", + "level":5, + "latE6":37791541, + "health":100.0, + "resCount":8, + "lngE6":-122390014, + "team":"ENLIGHTENED", + "type":"portal" + }, + "portalGuid":"9f2eaaa0c1ae4204a2ba5edd46ad4c95.12", + "team":"ENLIGHTENED" + }, + { + "portalInfo":{ + "title":"Pir\u00e1mide de Mayo", + "image":"http://lh6.ggpht.com/_3aFkA6XnDw502tysY7llc5rCCq--A-B7JtYckuKk48lyPo73MyMRd6PayGLFk6WckN-z8Rffnyw5rdojTE81A", + "level":6, + "latE6":-34608403, + "health":100.0, + "resCount":8, + "lngE6":-58372164, + "team":"ENLIGHTENED", + "type":"portal" + }, + "portalGuid":"6899fca3412a41fc97a509fa6030b0bf.12", + "team":"RESISTANCE" + } + ], + "fragmentInfos":[ + { + "portalInfo":{ + "title":"Kinesis Wellness Water Fountain", + "image":"http://lh5.ggpht.com/qrczaveosQtJW9HcQX0PPobh9Q3dJEfQ_weumBjKbtG1M5zQ8OmGHQCy4SRjUGofEz5KuES6N0ox6guBKp_n", + "level":1, + "latE6":1509661, + "health":0, + "resCount":0, + "lngE6":110362028, + "team":"NEUTRAL", + "type":"portal" + }, + "fragments":[ + 7 + ], + "portalGuid":"caf18e11731046e4a4c2fd9246abea4f.16" + }, + { + "portalInfo":{ + "title":"Statue 2", + "image":"http://lh5.ggpht.com/96RZXGomxTRD_F6pMFIm3Lbxibs6RBz9YZ4vQLAIzZ5CRuR-FL0YNs8oy6Mz6zfmq6PTrFI-LZ_59HM3bYzZ", + "level":7, + "latE6":31200954, + "health":55.0, + "resCount":8, + "lngE6":29950883, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 10 + ], + "portalGuid":"5e7fa56871d14e69a8a943a448e11889.16" + }, + { + "portalInfo":{ + "title":"\u30a4\u30eb\u30ab\u306e\u6c34\u9053", + "image":"http://lh3.ggpht.com/VOKphdag3JMRykYIgVFPFPlyXiGpRMift2XtRKcMFwg9zoErFKD-63AOFe_KU9JZtc8acGVS6x9FMRLKRhI", + "level":5, + "latE6":33681143, + "health":100.0, + "resCount":8, + "lngE6":135345213, + "team":"ENLIGHTENED", + "type":"portal" + }, + "fragments":[ + 4 + ], + "portalGuid":"05aa702ee9174e53a1c4659d1d070fc2.16" + }, + { + "portalInfo":{ + "title":"Church of South India", + "image":"http://lh3.ggpht.com/ngJhP9Q6b8LqfaRqMncRjjGxbX2NQoG65GUPAYZPHOKmW6ItJw408SShv7GPBmF02VmqSvxS2q8PTwa7XHNp", + "level":6, + "latE6":11002728, + "health":100.0, + "resCount":8, + "lngE6":76976030, + "team":"ENLIGHTENED", + "type":"portal" + }, + "fragments":[ + 3 + ], + "portalGuid":"f67814a00408447397edaab01529f972.16" + }, + { + "portalInfo":{ + "title":"Corvo Windmill", + "image":"http://lh5.ggpht.com/FRnWem84CCFT4VJdPA12_cj7zeEu9kFoak0EWbr8ELWj--FKPgvpXymrvCqbjnE48M_S2vWWBg7DNe6eGZCL", + "level":5, + "latE6":39670135, + "health":100.0, + "resCount":8, + "lngE6":-31113994, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 2 + ], + "portalGuid":"16e688dde1084251b762a96bd05892a6.16" + }, + { + "portalInfo":{ + "title":"\u0421\u043b\u0430\u0432\u0430 \u0413\u0435\u0440\u043e\u044f\u043c \u0413\u0440\u0430\u0436\u0434\u0430\u043d\u0441\u043a\u043e\u0439 \u0412\u043e\u0439\u043d\u044b", + "image":"http://lh6.ggpht.com/yD-0HgkNyEcZ3f5g6-01MIGskkUdFNoSXq8EkyWINJdZEXnEoT7Qd3tWL80fzKyK52vZZRnX3VVNuJzPGGaxGw", + "level":5, + "latE6":61723385, + "health":100.0, + "resCount":8, + "lngE6":129480552, + "team":"ENLIGHTENED", + "type":"portal" + }, + "fragments":[ + 12 + ], + "portalGuid":"539e8816c9774fad9d1f5da30da15236.16" + }, + { + "portalInfo":{ + "title":"US Post Office", + "image":"", + "level":1, + "latE6":43568894, + "health":0, + "resCount":0, + "lngE6":-101661386, + "team":"NEUTRAL", + "type":"portal" + }, + "fragments":[ + 1 + ], + "portalGuid":"075f54d4e7cb408eb181de704b291e00.12" + }, + { + "portalInfo":{ + "title":"Colegio Oficial De Aquitectos De Canarias", + "image":"http://www.panoramio.com/photos/small/7680566.jpg", + "level":7, + "latE6":28475279, + "health":85.0, + "resCount":8, + "lngE6":-16250839, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 9 + ], + "portalGuid":"61e745cab2f6415dbb9d97b5cf01ab22.12" + }, + { + "portalInfo":{ + "title":"Ricardo Ugarte \"Lorea\" 1973", + "image":"http://lh4.ggpht.com/r9aaw6LcBqwUDbkMv781mWmtNpq_vzqGajCcdGbMMGN00KC1P_YMJBOzevMFAT0WwZHONfsu_f49m7HTLUl93C1Pt6DggdQZw7Kxi1VSohksRFUXIw", + "level":8, + "latE6":28472611, + "health":100.0, + "resCount":8, + "lngE6":-16255785, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 8 + ], + "portalGuid":"08c321d96dd841a39b69c9bb58bc7d7e.16" + }, + { + "portalInfo":{ + "title":"Street Art L\u00e9zard", + "image":"http://lh5.ggpht.com/3CR9Ak8-bq42Ahx-i8Od_ERJxnfllwq_aZ8Ndd86RrlejiIHIjdlg7tsxQeo0PZ2vMoe8F4fkPmV-VO710pK", + "level":6, + "latE6":-22157401, + "health":42.0, + "resCount":8, + "lngE6":166448768, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 6 + ], + "portalGuid":"f854e60da70849b486ffd1eca238ba22.16" + }, + { + "portalInfo":{ + "title":"Estaci\u00f3n de Ferrocarril Mitre", + "image":"http://lh3.ggpht.com/6SBiNwknx2EjjNeaKHoegv1YaXzFsIL1wgSB0eeFehRjx3UpsWV2BJmn6_9KpOaWpkoXtq7QoVJqCrPO7ulXCsSU7givtJ3zWFr7ehU2BMIKYKQs", + "level":2, + "latE6":-26820833, + "health":84.0, + "resCount":8, + "lngE6":-65200000, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 11 + ], + "portalGuid":"ed88b9f4904041d8a384ac3a9cc90d7d.11" + }, + { + "portalInfo":{ + "title":"\u05d0\u05e8\u05db\u05d9\u05d5\u05df \u05d4\u05de\u05d5\u05e9\u05d1\u05d4 \u05d9\u05e1\u05d5\u05d3 \u05d4\u05de\u05e2\u05dc\u05d4 ", + "image":"http://lh5.ggpht.com/eB6juKp3dpj6a83c_g0ZBia-nDM8Gxns4c0uQaePqD2o7c5Cf82QBXy2Ceea-MiovDXaLEkpMQVXSgTRwmSzXw", + "level":6, + "latE6":33058575, + "health":100.0, + "resCount":8, + "lngE6":35612649, + "team":"RESISTANCE", + "type":"portal" + }, + "fragments":[ + 5 + ], + "portalGuid":"d911ef545cad44e6ae3e01ada3ceed1b.16" + } + ], + "artifactId":"jarvis" + } + ] +} diff --git a/json_examples/chat_faction.js b/json_examples/chat_faction.js deleted file mode 100644 index 63d87196..00000000 --- a/json_examples/chat_faction.js +++ /dev/null @@ -1,1684 +0,0 @@ -// http://www.ingress.com/rpc/dashboard.getPaginatedPlextsV2 - - -{ - "desiredNumItems": 50, - "minLatE6": 40741043, - "minLngE6": -73998640, - "maxLatE6": 40743335, - "maxLngE6": -73988732, - "minTimestampMs": -1, - "maxTimestampMs": -1, - "factionOnly": true, - "method": "dashboard.getPaginatedPlextsV2" -} - -//////////////////////////////////////////////////////////////////////// - - - -{ - "gameBasket": { - "deletedEntityGuids": [ - - ], - "gameEntities": [ - - ], - "inventory": [ - - ] - }, - "result": [ - [ - "0a4fbc5b22e248c081d1aca0f6a8d6e6.d", - 1359738394081, - { - "plext": { - "text": "[secure] mugenity: @RedJava lol. whoever asked about the gloves: http:\/\/www.amazon.com\/gp\/product\/B004A9FI2M\/ref=oh_details_o02_s00_i01", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "mugenity: ", - "guid": "30ac5ca1f9374a0aab7c5e07b7c2a9c4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@RedJava lol. whoever asked about the gloves: http:\/\/www.amazon.com\/gp\/product\/B004A9FI2M\/ref=oh_details_o02_s00_i01" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "cfcc2f1a80234dda9c579cd99ed8afe0.d", - 1359737693952, - { - "plext": { - "text": "[secure] RedJava: @mugenity, pockets... :)", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "RedJava: ", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@mugenity, pockets... :)" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "89a7286c798348feaccbc46ff51c6cc7.d", - 1359737651334, - { - "plext": { - "text": "[secure] RedJava: congrats @virusdave, keep it going :)", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "RedJava: ", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "congrats @virusdave, keep it going :)" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "485cc59b7b7a41a488b187b40245a29d.d", - 1359737024166, - { - "plext": { - "text": "[secure] virusdave: Awesome. Only 5k AP needed now for L5. can't wait", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "virusdave: ", - "guid": "4ec3807d4a844d99b9f8b5d3cdbe7c11.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Awesome. Only 5k AP needed now for L5. can't wait" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "12d4b93fc04c454281e8ea39174a6a42.d", - 1359735962735, - { - "plext": { - "text": "[secure] mugenity: jw, what makes a pair of gloves wind resistant?", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "mugenity: ", - "guid": "30ac5ca1f9374a0aab7c5e07b7c2a9c4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "jw, what makes a pair of gloves wind resistant?" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "d1b95ec50a884c01af862b17b19fc776.d", - 1359735479320, - { - "plext": { - "text": "[secure] Callido: Any recommendations about where to get some wind-resistant touch screen gloves?", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Callido: ", - "guid": "70c610a61845492ea74e41c8a60d2959.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Any recommendations about where to get some wind-resistant touch screen gloves?" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "506dfb88cdf2434ea7234d66d51b29f5.d", - 1359732787577, - { - "plext": { - "text": "[secure] FudoMyoo: @beave IM working w a vendor watching the portal under my feet taken over", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@beave IM working w a vendor watching the portal under my feet taken over" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "d3fac8bedabc4a239dcd84dd96b65f93.d", - 1359729709521, - { - "plext": { - "text": "[secure] TDP4: burb, don't burnout.. take 4hrs", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "TDP4: ", - "guid": "8a6f5675e3ff40f18ce187542c08f512.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "burb, don't burnout.. take 4hrs" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "d7991e7234864c0ca3cfef9dad85f960.d", - 1359723996559, - { - "plext": { - "text": "[secure] FudoMyoo: fucking GPS!!!!", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "fucking GPS!!!!" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "27697728f5d44d5fb866a49e357e5bf1.d", - 1359692564716, - { - "plext": { - "text": "[secure] Emil2015: grats @auhem", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Emil2015: ", - "guid": "450b292d66b945b8b89eeb05639116c9.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "grats @auhem" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "8c18f4b07ec94ae9a20b8bcb355944c7.d", - 1359692540191, - { - "plext": { - "text": "[secure] Emil2015: Is anyone at GCT? There are a ton of open portals", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Emil2015: ", - "guid": "450b292d66b945b8b89eeb05639116c9.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Is anyone at GCT? There are a ton of open portals" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "9a783ab8dc664aaa919daaebc5e95b99.d", - 1359690718559, - { - "plext": { - "text": "[secure] auhem: @skynet I know that feels... my new phone is on the way, hopefully it helps", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "auhem: ", - "guid": "8ac6001cf25e4d3f8d20746987d5066b.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@skynet I know that feels... my new phone is on the way, hopefully it helps" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "3f9935c304dd4e1c942369d04a6d96f9.d", - 1359689755829, - { - "plext": { - "text": "[secure] auhem: ding! level 7", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "auhem: ", - "guid": "8ac6001cf25e4d3f8d20746987d5066b.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "ding! level 7" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "2918132884514ba9beaac5238d34fb86.d", - 1359684807471, - { - "plext": { - "text": "[secure] Hankyman: if anyone's around gct, theres two wakened smurfs", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Hankyman: ", - "guid": "73810de556874d9996110e3623d143af.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "if anyone's around gct, theres two wakened smurfs" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "84ca9ae8a0ca42b79570422756aa0537.d", - 1359683560897, - { - "plext": { - "text": "[secure] Hankyman: I hate the lag", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Hankyman: ", - "guid": "73810de556874d9996110e3623d143af.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "I hate the lag" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "446cc5818cda4f61b68205819beeb50b.d", - 1359683458462, - { - "plext": { - "text": "[secure] Hankyman: anti", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Hankyman: ", - "guid": "73810de556874d9996110e3623d143af.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "anti" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "93a93596579241819c297e21d91beae7.d", - 1359682016348, - { - "plext": { - "text": "[secure] ginerc: plenty of portals to upgrade and link in USQ. ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "plenty of portals to upgrade and link in USQ. " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "206d58dcffec41bba49ac91b1f3dc3c5.d", - 1359681090077, - { - "plext": { - "text": "[secure] ginerc: in USQ now. Anyone else here? ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "in USQ now. Anyone else here? " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "41f3e66054ad4da5ba8b45d2218d4a7f.d", - 1359680539414, - { - "plext": { - "text": "[secure] ginerc: just leaving. What's up. ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "just leaving. What's up. " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "d3ddded0969742979548758342fa8ac8.d", - 1359680463400, - { - "plext": { - "text": "[secure] Hankyman: you at gct gineric?", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Hankyman: ", - "guid": "73810de556874d9996110e3623d143af.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "you at gct gineric?" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "ad505fe8acd14b4e865c190bd43127c0.d", - 1359680395047, - { - "plext": { - "text": "[secure] ginerc: plenty of portals to fill up and link at GCT. ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "plenty of portals to fill up and link at GCT. " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "f0540423a99b466cbaab4a2ab70734bb.d", - 1359678947425, - { - "plext": { - "text": "[secure] ginerc: I think I'll probably be in USQ in about 20 minutes, there will hopefully be room for a lot of cleanup and relinking if anyone is interested in joining.", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "I think I'll probably be in USQ in about 20 minutes, there will hopefully be room for a lot of cleanup and relinking if anyone is interested in joining." - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "02a5f1be2c224f81a31ae42e7d61ff82.d", - 1359678514518, - { - "plext": { - "text": "[secure] RedJava: LOL @kravmagirl... ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "RedJava: ", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "LOL @kravmagirl... " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "b60f44964522483ca718bd268942b6db.d", - 1359672802372, - { - "plext": { - "text": "[secure] ANZIBANONZI: @chair, was having data prob s had to go uptown. sorry!!", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ANZIBANONZI: ", - "guid": "a0cd0fb4055a4edeafbff86a3ab04aab.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@chair, was having data prob s had to go uptown. sorry!!" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "bbf48761a6ed4e4c96e43bb2f2c4e97a.d", - 1359671773199, - { - "plext": { - "text": "[secure] damonj: Something's definitely wrong with the Ingress servers right now. I tried to link a portal 10 times before it would actually take.", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "damonj: ", - "guid": "bc3d202c10b5432da83be18fddbc322d.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Something's definitely wrong with the Ingress servers right now. I tried to link a portal 10 times before it would actually take." - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "2cda3a29bf66496ca84c3325be60478e.d", - 1359671502617, - { - "plext": { - "text": "[secure] BlueElephant: anyone going to be around times square at 6pm?", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "BlueElephant: ", - "guid": "40c78d9fa6af4a458d6ade9ca71fde23.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "anyone going to be around times square at 6pm?" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "2044471d695b416a9ed15a6826d8f524.d", - 1359668629533, - { - "plext": { - "text": "[secure] FudoMyoo: yes, @src , giving portals back that were taken", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "yes, @src , giving portals back that were taken" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "bd16559564e54820bb4edff5c814a8b8.d", - 1359668578567, - { - "plext": { - "text": "[secure] Phatstabley: G+ NYC Community Approval Code: 550", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Phatstabley: ", - "guid": "5355c450d89e41afb6011adad0b460e6.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "G+ NYC Community Approval Code: 550" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "3b2e3265ef134aa2ac4b0f7047161311.d", - 1359667522232, - { - "plext": { - "text": "[secure] CrimsonBlitz: im neat gct i just cant leave work yet ..... -_-", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "CrimsonBlitz: ", - "guid": "f473bd6471ee4c6fbdc46e76dd7b523e.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "im neat gct i just cant leave work yet ..... -_-" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "d45c0ee13d4c4ff185097e7df70c2531.d", - 1359667248229, - { - "plext": { - "text": "[secure] 9ah: It's currently being hit ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "It's currently being hit " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "43df5648fb8342678e0ca99d048fa342.d", - 1359667224808, - { - "plext": { - "text": "[secure] 9ah: Anyone near GCT??", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Anyone near GCT??" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "be8e0d05549e4f559d6680d2f6317df9.d", - 1359666813847, - { - "plext": { - "text": "[secure] CrimsonBlitz: my car is in bayside lol", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "CrimsonBlitz: ", - "guid": "f473bd6471ee4c6fbdc46e76dd7b523e.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "my car is in bayside lol" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "30a52410520a4d19b6696512da20de2a.d", - 1359666500300, - { - "plext": { - "text": "[secure] Ruse: Just checking out y'alls portal situation in NYC. Wowzers item farming heaven.", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Ruse: ", - "guid": "67410f3a2ab64ecdb40a1fc82222273b.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Just checking out y'alls portal situation in NYC. Wowzers item farming heaven." - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "f1a4a31e92e54fb3954cbf0032e15e2a.d", - 1359663805907, - { - "plext": { - "text": "[secure] ginerc: @axelslash, brown jacket? ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "ginerc: ", - "guid": "6783774795e64a18800b7355088345e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@axelslash, brown jacket? " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "1a6e283c06bb4e0dab3aadf7b09e5fe3.d", - 1359663365489, - { - "plext": { - "text": "[secure] FudoMyoo: @vjfzuib9 did you not register with a gmail address? If you have an android, a google account is a benefit. If you have a google account, you already have G+", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@vjfzuib9 did you not register with a gmail address? If you have an android, a google account is a benefit. If you have a google account, you already have G+" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "46a6a6f249594703b578092f86ef87a4.d", - 1359657408606, - { - "plext": { - "text": "[secure] RedJava: please see G+ NYC Community for details, if you're not a member please request to join", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "RedJava: ", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "please see G+ NYC Community for details, if you're not a member please request to join" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "ff285a00ea0a4baa950ac2a364282586.d", - 1359657343107, - { - "plext": { - "text": "[secure] RedJava: the nyc enlightened g+ community is hosting a bootcamp this saturday at noon for level 1, 2 and 3 agents, higher level agents welcome to participate in setting up the farm", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "RedJava: ", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "the nyc enlightened g+ community is hosting a bootcamp this saturday at noon for level 1, 2 and 3 agents, higher level agents welcome to participate in setting up the farm" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "f8b8d78de89a425ea5e36dd5b9740e8d.d", - 1359655562381, - { - "plext": { - "text": "[secure] arg0s: G+ NYC Community Approval Code: 395", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "arg0s: ", - "guid": "ab40af6b7e834ba7a3ced6f030036ec1.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "G+ NYC Community Approval Code: 395" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "e305d0dacb35431ab586112661845f64.d", - 1359655448543, - { - "plext": { - "text": "[secure] 9ah: 2 of my portals were destroyed in midtown =[", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "2 of my portals were destroyed in midtown =[" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "55066b12ca414da4822df53b964ea9db.d", - 1359649928187, - { - "plext": { - "text": "[secure] FudoMyoo: love that, @burb", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "love that, @burb" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "cc1fdbe2caa74b14bf930dd206801c44.d", - 1359649393979, - { - "plext": { - "text": "[secure] 9ah: GCT neds some recharges and resonators if anyone is around... I'm going to try to stop by tomorrow night and do a few", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "GCT neds some recharges and resonators if anyone is around... I'm going to try to stop by tomorrow night and do a few" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "1bc1843b79754dd0a56fd1e493a7ec16.d", - 1359644897075, - { - "plext": { - "text": "[secure] FudoMyoo: vizewl is either out of resonators or is trying to level up - he's linking everything in sight, including L1 portals", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "FudoMyoo: ", - "guid": "3d1814fb8bb54da59752a3915c461821.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "vizewl is either out of resonators or is trying to level up - he's linking everything in sight, including L1 portals" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "64c6af2b8c3646618559690709476611.d", - 1359643051664, - { - "plext": { - "text": "[secure] Avumede: Small Resistance L7 farm in Chelsea. Attack!", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Avumede: ", - "guid": "bceb200315ec44c9b9d245a7c4528737.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "Small Resistance L7 farm in Chelsea. Attack!" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "493572cc08aa4a47ad01ca379f0bb9c5.d", - 1359642152207, - { - "plext": { - "text": "[secure] Earlskey: 2wg8ingress5r9q", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Earlskey: ", - "guid": "50490244b39243d78fddfbc044c70cf9.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "2wg8ingress5r9q" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "9caf226782444756bb447be87ab25ff0.d", - 1359606360278, - { - "plext": { - "text": "[secure] Leiron: We'll have some work at GCT tomorrow.", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "Leiron: ", - "guid": "5252e2b28f524c69ae6bbda5015f69e5.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "We'll have some work at GCT tomorrow." - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "0e07903325d04ac981f2aeed72e952de.d", - 1359606326439, - { - "plext": { - "text": "[secure] 9ah: if someone can add resonators to the portal in gcs that would be awesome. my gps flips in there and I was only able to do 3", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "if someone can add resonators to the portal in gcs that would be awesome. my gps flips in there and I was only able to do 3" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "24da86d5e37c4cd5953a99d1b35d5b67.d", - 1359606010244, - { - "plext": { - "text": "[secure] brianr: hello NYU Agents, see ingress.com\/campus", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "brianr: ", - "guid": "69e0731c8a5f4d04a2d9098743fa4f5a.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "hello NYU Agents, see ingress.com\/campus" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "1a826dba468345e1a4c99c41f315f8f6.d", - 1359603728472, - { - "plext": { - "text": "[secure] 9ah: I used my xmp to get a portal on 35", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "I used my xmp to get a portal on 35" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "710dbdfcdead4df3a16c4fb59a774203.d", - 1359603695883, - { - "plext": { - "text": "[secure] 9ah: @crimsonblitz there is a portal on park ave and 36 with 3k... if you want to try to take that", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "9ah: ", - "guid": "5d7bac2085394e2db5d75ced3cdaa082.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "@crimsonblitz there is a portal on park ave and 36 with 3k... if you want to try to take that" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ], - [ - "8433ca86ba3e490ca99ecfbb44243f76.d", - 1359603145773, - { - "plext": { - "text": "[secure] CrimsonBlitz: murray hill here i come ", - "markup": [ - [ - "SECURE", - { - "plain": "[secure] " - } - ], - [ - "SENDER", - { - "plain": "CrimsonBlitz: ", - "guid": "f473bd6471ee4c6fbdc46e76dd7b523e.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "murray hill here i come " - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ] - ] -} diff --git a/json_examples/chat_public.js b/json_examples/chat_public.js deleted file mode 100644 index 5f48dcaa..00000000 --- a/json_examples/chat_public.js +++ /dev/null @@ -1,2778 +0,0 @@ -// http://www.ingress.com/rpc/dashboard.getPaginatedPlextsV2 - -// newest chat -{ - "desiredNumItems": 50, - "minLatE6": 40741043, - "minLngE6": -73998640, - "maxLatE6": 40743335, - "maxLngE6": -73988732, - "minTimestampMs": -1, - "maxTimestampMs": -1, - "method": "dashboard.getPaginatedPlextsV2" -} - -// older chat -{ - "desiredNumItems": 50, - "minLatE6": 40741043, - "minLngE6": -73998640, - "maxLatE6": 40743335, - "maxLngE6": -73988732, - "minTimestampMs": -1, - "maxTimestampMs": 1359739560692, - "method": "dashboard.getPaginatedPlextsV2" -} - -//////////////////////////////////////////////////////////////////////// - - - -{ - "gameBasket": { - "deletedEntityGuids": [ - - ], - "gameEntities": [ - - ], - "inventory": [ - - ] - }, - "result": [ - [ - "1c1b35d2570543279fd1551e67362fea.d", - 1359740143004, - { - "plext": { - "text": "Kruxoli linked Beautiful sculpture \"Echo\" by (999 Broadway, Manhattan, NY) to Flatiron District (999 Broadway, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Beautiful sculpture \"Echo\" by ", - "plain": "Beautiful sculpture \"Echo\" by (999 Broadway, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40741667, - "address": "999 Broadway, Manhattan, NY", - "lngE6": -73988923, - "guid": "9991233462524e029a5c56a835d99176.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Flatiron District", - "plain": "Flatiron District (999 Broadway, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40741591, - "address": "999 Broadway, Manhattan, NY", - "lngE6": -73988584, - "guid": "57ccb37f589d4e1e82e97683f6f7f1e5.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "fa2c111fb0e849398517bdca2fa8678f.d", - 1359740090694, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "bf552990623a4fe1877c8d62a916d87b.d", - 1359740085929, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "5b2130888a9e468a9356487025467e5f.d", - 1359740082437, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "f8770bf7c5bf49d98c4550227d01e4bd.d", - 1359740079439, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "5fa0422b8b644ed78bd42621d1b3d39a.d", - 1359740077310, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "d0e05df882c344f3baf990086ef9a906.d", - 1359740073268, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "c68916b672b2427d9a5d9350fe35b4b4.d", - 1359740070976, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 23rd. & 5th. \/ NYC", - "plain": "Jamba Juice 23rd. & 5th. \/ NYC (176 5th Ave. New York, NY)", - "team": "RESISTANCE", - "latE6": 40741109, - "address": "176 5th Ave. New York, NY", - "lngE6": -73990112, - "guid": "9055e4cb060f4aefa216a1dd63b22ef2.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "54f69f32b7cc4adca4bc93168ea8e81e.d", - 1359740062191, - { - "plext": { - "text": "RedJava created a Control Field @New York Grand Central Termina (120 Park Ave, New York, NY) +9 MUs", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " created a Control Field @" - } - ], - [ - "PORTAL", - { - "name": "New York Grand Central Termina", - "plain": "New York Grand Central Termina (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40751955, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977749, - "guid": "1b6ae36318634814b7f87ef22cfd7254.12" - } - ], - [ - "TEXT", - { - "plain": " +" - } - ], - [ - "TEXT", - { - "plain": "9" - } - ], - [ - "TEXT", - { - "plain": " MUs" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "7b0decc1872b49f782b0e4ef3a207b7b.d", - 1359740062191, - { - "plext": { - "text": "RedJava linked New York Grand Central Termina (120 Park Ave, New York, NY) to Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "New York Grand Central Termina", - "plain": "New York Grand Central Termina (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40751955, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977749, - "guid": "1b6ae36318634814b7f87ef22cfd7254.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal, NYC", - "plain": "Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40752357, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977460, - "guid": "0c78f3b9a5a44784b1a2cc41ad4afc0d.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "bf366101223647e3a20f3ae399d3ea0f.d", - 1359740061870, - { - "plext": { - "text": "Kruxoli linked Flatiron Building (175 5th Ave, New York, NY) to William H. Seward Statue, Madi (2-16 Madison Ave, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Flatiron Building", - "plain": "Flatiron Building (175 5th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40741111, - "address": "175 5th Ave, New York, NY", - "lngE6": -73989722, - "guid": "643dc15b67684b3ea89484a4faa0e851.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "William H. Seward Statue, Madi", - "plain": "William H. Seward Statue, Madi (2-16 Madison Ave, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40741205, - "address": "2-16 Madison Ave, Manhattan, NY", - "lngE6": -73988010, - "guid": "7b6bfdb6b7b343909ab07601dab86828.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "38175e61b93b41bb92e02b2581e44e34.d", - 1359740029965, - { - "plext": { - "text": "RedJava linked Grand Central Terminal, NYC (120 Park Ave, New York, NY) to New York - Grand Central Stati (200-222 Park Ave, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal, NYC", - "plain": "Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40752357, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977460, - "guid": "0c78f3b9a5a44784b1a2cc41ad4afc0d.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "New York - Grand Central Stati", - "plain": "New York - Grand Central Stati (200-222 Park Ave, Manhattan, NY)", - "team": "ALIENS", - "latE6": 40752418, - "address": "200-222 Park Ave, Manhattan, NY", - "lngE6": -73977857, - "guid": "3c41125147214c6998cc4f4d2abf57c8.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "c5fb55d405184e44b8a07e2a3129ef97.d", - 1359740029965, - { - "plext": { - "text": "RedJava created a Control Field @Grand Central Terminal, NYC (120 Park Ave, New York, NY) +7 MUs", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " created a Control Field @" - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal, NYC", - "plain": "Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40752357, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977460, - "guid": "0c78f3b9a5a44784b1a2cc41ad4afc0d.12" - } - ], - [ - "TEXT", - { - "plain": " +" - } - ], - [ - "TEXT", - { - "plain": "7" - } - ], - [ - "TEXT", - { - "plain": " MUs" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "7cd3d69f60174c0c8afbfbd1e955591c.d", - 1359739983497, - { - "plext": { - "text": "RedJava linked Grand Central Terminal, NYC (120 Park Ave, New York, NY) to Statue of Cornelius Van Der Bi (120 Park Ave, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal, NYC", - "plain": "Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40752357, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977460, - "guid": "0c78f3b9a5a44784b1a2cc41ad4afc0d.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Statue of Cornelius Van Der Bi", - "plain": "Statue of Cornelius Van Der Bi (120 Park Ave, Manhattan, NY)", - "team": "ALIENS", - "latE6": 40751924, - "address": "120 Park Ave, Manhattan, NY", - "lngE6": -73978026, - "guid": "1cb40216c4e844e6a63d54549811a1a6.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "3c04f71e7155485796f50f127dce46e7.d", - 1359739953865, - { - "plext": { - "text": "RedJava linked Grand Central Terminal, NYC (120 Park Ave, New York, NY) to Grand Central Terminal (59 E 42nd St, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal, NYC", - "plain": "Grand Central Terminal, NYC (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40752357, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977460, - "guid": "0c78f3b9a5a44784b1a2cc41ad4afc0d.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal", - "plain": "Grand Central Terminal (59 E 42nd St, New York, NY)", - "team": "ALIENS", - "latE6": 40751935, - "address": "59 E 42nd St, New York, NY", - "lngE6": -73977090, - "guid": "d734a5b2fb5042b4813b9b594d110410.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "b47d069fbee74f9e9bf2762be77a55c6.d", - 1359739952568, - { - "plext": { - "text": "Moonworker linked George Washington Statue (475 Park Ave S, Manhattan, NY) to Triad (459 Park Avenue South, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Triad", - "plain": "Triad (459 Park Avenue South, New York, NY)", - "team": "RESISTANCE", - "latE6": 40745591, - "address": "459 Park Avenue South, New York, NY", - "lngE6": -73982622, - "guid": "06cddb0b9aad4455ab37632fbc40cb57.11" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "9fb86d551ed1477b861783f740d96d7c.d", - 1359739941031, - { - "plext": { - "text": "Moonworker deployed an L4 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L4" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "c0a307e0fa164a2fa31c0bb35904a2b1.d", - 1359739927693, - { - "plext": { - "text": "Moonworker deployed an L4 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L4" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "b1a3a845659941438a5187898289da05.d", - 1359739914992, - { - "plext": { - "text": "Moonworker deployed an L4 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L4" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "06e0d0cc3dd94c2ab58bdb7fb532fa09.d", - 1359739912416, - { - "plext": { - "text": "Moonworker deployed an L4 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L4" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "05edad5b286b45ffbe4fcb242832b2d4.d", - 1359739909722, - { - "plext": { - "text": "Moonworker deployed an L3 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "44f9a364259e4372bba72fc64dfe1db0.d", - 1359739905952, - { - "plext": { - "text": "Moonworker deployed an L3 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "da5be5ca96d947c7aff13a32294fd706.d", - 1359739902524, - { - "plext": { - "text": "Moonworker deployed an L3 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "ac1919216ade4695bfc30e79b1c1cbfd.d", - 1359739899623, - { - "plext": { - "text": "Moonworker deployed an L3 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "f347717677d04079b93bfc83190dc80d.d", - 1359739899623, - { - "plext": { - "text": "Moonworker captured George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " captured " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "07b443a1a3fa4facb4b38caef547b478.d", - 1359739892290, - { - "plext": { - "text": "Moonworker destroyed an L4 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " destroyed an " - } - ], - [ - "TEXT", - { - "plain": "L4" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "ALIENS", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "69fc7eacadbc42c8ac8dde5c531eff57.d", - 1359739881575, - { - "plext": { - "text": "RedJava linked New York Grand Central Termina (120 Park Ave, New York, NY) to Grand Central Terminal (59 E 42nd St, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "RedJava", - "guid": "540bf690bad2498b912e17b3f01c38b4.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "New York Grand Central Termina", - "plain": "New York Grand Central Termina (120 Park Ave, New York, NY)", - "team": "ALIENS", - "latE6": 40751955, - "address": "120 Park Ave, New York, NY", - "lngE6": -73977749, - "guid": "1b6ae36318634814b7f87ef22cfd7254.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Grand Central Terminal", - "plain": "Grand Central Terminal (59 E 42nd St, New York, NY)", - "team": "ALIENS", - "latE6": 40751935, - "address": "59 E 42nd St, New York, NY", - "lngE6": -73977090, - "guid": "d734a5b2fb5042b4813b9b594d110410.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "b3e479a451394a36ba7c094a105a32db.d", - 1359739876443, - { - "plext": { - "text": "objectdescent deployed an L1 Resonator on Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "markup": [ - [ - "PLAYER", - { - "plain": "objectdescent", - "guid": "3d45bed79759474bb16dab152d0df1cb.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Lee Young Hee Korea Museum", - "plain": "Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "team": "RESISTANCE", - "latE6": 40747539, - "address": "2 West 32nd Street, New York, NY 10001, United States", - "lngE6": -73986659, - "guid": "dac65bbe5acf48fe8a16c2b70a2386e3.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "41fad9beafed4982b072f47279cbb556.d", - 1359739871470, - { - "plext": { - "text": "objectdescent deployed an L1 Resonator on Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "markup": [ - [ - "PLAYER", - { - "plain": "objectdescent", - "guid": "3d45bed79759474bb16dab152d0df1cb.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Lee Young Hee Korea Museum", - "plain": "Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "team": "RESISTANCE", - "latE6": 40747539, - "address": "2 West 32nd Street, New York, NY 10001, United States", - "lngE6": -73986659, - "guid": "dac65bbe5acf48fe8a16c2b70a2386e3.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "f816f6838e7445cb9cbd0121068cc003.d", - 1359739862228, - { - "plext": { - "text": "objectdescent deployed an L1 Resonator on Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "markup": [ - [ - "PLAYER", - { - "plain": "objectdescent", - "guid": "3d45bed79759474bb16dab152d0df1cb.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Lee Young Hee Korea Museum", - "plain": "Lee Young Hee Korea Museum (2 West 32nd Street, New York, NY 10001, United States)", - "team": "RESISTANCE", - "latE6": 40747539, - "address": "2 West 32nd Street, New York, NY 10001, United States", - "lngE6": -73986659, - "guid": "dac65bbe5acf48fe8a16c2b70a2386e3.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "d1068992815942fe8ce789545a4ce4b0.d", - 1359739861901, - { - "plext": { - "text": "Moonworker destroyed an L5 Resonator on George Washington Statue (475 Park Ave S, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Moonworker", - "guid": "b91c1725457f462e9e1f6032f8f9bf94.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " destroyed an " - } - ], - [ - "TEXT", - { - "plain": "L5" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "George Washington Statue", - "plain": "George Washington Statue (475 Park Ave S, Manhattan, NY)", - "team": "ALIENS", - "latE6": 40745500, - "address": "475 Park Ave S, Manhattan, NY", - "lngE6": -73982333, - "guid": "0d29cfae9b5b4f7ba2882b7dd4096622.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "f3ff26a5c0bd45ae8e0f8f83565effbe.d", - 1359739810883, - { - "plext": { - "text": "objectdescent deployed an L1 Resonator on Zipcar Location (1250 Broadway New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "objectdescent", - "guid": "3d45bed79759474bb16dab152d0df1cb.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Zipcar Location", - "plain": "Zipcar Location (1250 Broadway New York, NY)", - "team": "RESISTANCE", - "latE6": 40747874, - "address": "1250 Broadway New York, NY", - "lngE6": -73987576, - "guid": "f60bdd59f3cc49d59e46b718a16f93fb.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "895b1e5a7673450c94d6a330307202d6.d", - 1359739797408, - { - "plext": { - "text": "objectdescent deployed an L1 Resonator on Zipcar Location (1250 Broadway New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "objectdescent", - "guid": "3d45bed79759474bb16dab152d0df1cb.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Zipcar Location", - "plain": "Zipcar Location (1250 Broadway New York, NY)", - "team": "RESISTANCE", - "latE6": 40747874, - "address": "1250 Broadway New York, NY", - "lngE6": -73987576, - "guid": "f60bdd59f3cc49d59e46b718a16f93fb.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "dd58c977f47c471390527b93afca4dbd.d", - 1359739668008, - { - "plext": { - "text": "Kruxoli linked Flatiron District (2-4 W 25th St, Manhattan, NY) to Fifth Avenue Building (200 5th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Flatiron District", - "plain": "Flatiron District (2-4 W 25th St, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40742908, - "address": "2-4 W 25th St, Manhattan, NY", - "lngE6": -73988981, - "guid": "3bcafe2f0ce24df7aea001d7d70ec723.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Fifth Avenue Building", - "plain": "Fifth Avenue Building (200 5th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40741782, - "address": "200 5th Ave, New York, NY", - "lngE6": -73989538, - "guid": "6c1c5473bacc45c7880846a465314f6b.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "048a3e28017d49d5a26e26608c590613.d", - 1359739625502, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "CHRYSLER BUILDING AT BROADWAY,", - "plain": "CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40742377, - "address": "15 W 24th St, Manhattan, NY", - "lngE6": -73989463, - "guid": "1cba9a6c6dd74070b09eaaeb49b5dd14.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "005261bb0cb24c9b9adae2b5e2c77fa8.d", - 1359739619325, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on Edith Wharton (14 W 23rd St, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Edith Wharton", - "plain": "Edith Wharton (14 W 23rd St, New York, NY)", - "team": "RESISTANCE", - "latE6": 40741571, - "address": "14 W 23rd St, New York, NY", - "lngE6": -73990382, - "guid": "d7d95bee06f84a1598271c520ca7df69.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "0d7d40828ec64e9c9279c86db62fb83a.d", - 1359739577089, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "CHRYSLER BUILDING AT BROADWAY,", - "plain": "CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40742377, - "address": "15 W 24th St, Manhattan, NY", - "lngE6": -73989463, - "guid": "1cba9a6c6dd74070b09eaaeb49b5dd14.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "2bf9e21cce464f47b3f1c9af138ab105.d", - 1359739574801, - { - "plext": { - "text": "Kruxoli deployed an L1 Resonator on CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "CHRYSLER BUILDING AT BROADWAY,", - "plain": "CHRYSLER BUILDING AT BROADWAY, (15 W 24th St, Manhattan, NY)", - "team": "RESISTANCE", - "latE6": 40742377, - "address": "15 W 24th St, Manhattan, NY", - "lngE6": -73989463, - "guid": "1cba9a6c6dd74070b09eaaeb49b5dd14.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "710e45a902ce45ed8d7917c16d2889d3.d", - 1359739560692, - { - "plext": { - "text": "ImportantCeleb linked NY Public Library (476 5th Avenue, New York, NY 10018, United States) to Bryant Park (53-99 West 40th Street, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "ImportantCeleb", - "guid": "e68695c7444e47aa927017f71b1e1e63.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "NY Public Library", - "plain": "NY Public Library (476 5th Avenue, New York, NY 10018, United States)", - "team": "ALIENS", - "latE6": 40753814, - "address": "476 5th Avenue, New York, NY 10018, United States", - "lngE6": -73983713, - "guid": "6c51507ab365422c885e4e67ccd200ac.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Bryant Park", - "plain": "Bryant Park (53-99 West 40th Street, New York, NY)", - "team": "ALIENS", - "latE6": 40753567, - "address": "53-99 West 40th Street, New York, NY", - "lngE6": -73984823, - "guid": "95dd5653d43d4f0eba8792d0ad1698b8.11" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "ALIENS" - } - } - ], - [ - "aaf7b9b04b0c41dfb9dcd6360ef2eb06.d", - 1359739459999, - { - "plext": { - "text": "MilesSky deployed an L3 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "08458ba908de4022a01e17b52b418a09.d", - 1359739456697, - { - "plext": { - "text": "MilesSky deployed an L3 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "90513f52f2654e6cbbe42f0b5c002a35.d", - 1359739447148, - { - "plext": { - "text": "MilesSky deployed an L2 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L2" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "a1ac073f8c084567b9afbc9f5c41213a.d", - 1359739444919, - { - "plext": { - "text": "MilesSky deployed an L2 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L2" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "7e0efc8d97ab453fbab7b501b35d0af7.d", - 1359739441966, - { - "plext": { - "text": "MilesSky deployed an L2 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L2" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "0e81acc113784e7e87c334cbe3325672.d", - 1359739439683, - { - "plext": { - "text": "MilesSky deployed an L1 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "78baad15581c4c87acfdc07872a6fbec.d", - 1359739434932, - { - "plext": { - "text": "MilesSky deployed an L1 Resonator on Anne Klein (481-485 7th Ave, New York, NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "MilesSky", - "guid": "da579e7053e64e3382dd5e54c384a3fc.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L1" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Anne Klein", - "plain": "Anne Klein (481-485 7th Ave, New York, NY)", - "team": "RESISTANCE", - "latE6": 40752329, - "address": "481-485 7th Ave, New York, NY", - "lngE6": -73989579, - "guid": "8197e8dd0f364f879ff625d9c2d6ec09.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "003630298d704d72b8d4fa8b25a7b690.d", - 1359739426373, - { - "plext": { - "text": "kurosen created a Control Field @Jamba Juice 5th Ave. & 32nd St. (321 5th Avenue New York, NY) +46 MUs", - "markup": [ - [ - "PLAYER", - { - "plain": "kurosen", - "guid": "050892f9ac5444aaa01760dd2105994a.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " created a Control Field @" - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 5th Ave. & 32nd St.", - "plain": "Jamba Juice 5th Ave. & 32nd St. (321 5th Avenue New York, NY)", - "team": "RESISTANCE", - "latE6": 40747500, - "address": "321 5th Avenue New York, NY", - "lngE6": -73985300, - "guid": "c97b407d218645f5b0046edc37439b6c.12" - } - ], - [ - "TEXT", - { - "plain": " +" - } - ], - [ - "TEXT", - { - "plain": "46" - } - ], - [ - "TEXT", - { - "plain": " MUs" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "295aacc8827c45fc828c1d867e5b0d37.d", - 1359739426373, - { - "plext": { - "text": "kurosen linked Jamba Juice 5th Ave. & 32nd St. (321 5th Avenue New York, NY) to Duane Reade - MIDTOWN (358 5TH AVE, MANHATTAN NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "kurosen", - "guid": "050892f9ac5444aaa01760dd2105994a.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " linked " - } - ], - [ - "PORTAL", - { - "name": "Jamba Juice 5th Ave. & 32nd St.", - "plain": "Jamba Juice 5th Ave. & 32nd St. (321 5th Avenue New York, NY)", - "team": "RESISTANCE", - "latE6": 40747500, - "address": "321 5th Avenue New York, NY", - "lngE6": -73985300, - "guid": "c97b407d218645f5b0046edc37439b6c.12" - } - ], - [ - "TEXT", - { - "plain": " to " - } - ], - [ - "PORTAL", - { - "name": "Duane Reade - MIDTOWN", - "plain": "Duane Reade - MIDTOWN (358 5TH AVE, MANHATTAN NY)", - "team": "RESISTANCE", - "latE6": 40748599, - "address": "358 5TH AVE, MANHATTAN NY", - "lngE6": -73984592, - "guid": "68794464b83e4f14aa650d9bebc2c6e6.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "9c7876b3b6a842e19dbcda12e9a7f777.d", - 1359739422451, - { - "plext": { - "text": "Kruxoli deployed an L3 Resonator on Duane Reade - FLATIRON (184 5TH AVENUE, MANHATTAN NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Duane Reade - FLATIRON", - "plain": "Duane Reade - FLATIRON (184 5TH AVENUE, MANHATTAN NY)", - "team": "RESISTANCE", - "latE6": 40741370, - "address": "184 5TH AVENUE, MANHATTAN NY", - "lngE6": -73989912, - "guid": "2efda7a59ea54569bdb8624b41718caf.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ], - [ - "7c1bbfb4d4bd4ff18892a178b8416232.d", - 1359739420296, - { - "plext": { - "text": "Kruxoli deployed an L3 Resonator on Duane Reade - FLATIRON (184 5TH AVENUE, MANHATTAN NY)", - "markup": [ - [ - "PLAYER", - { - "plain": "Kruxoli", - "guid": "acf0f0c0735a49fd8c49e8c45826be2c.c", - "team": "RESISTANCE" - } - ], - [ - "TEXT", - { - "plain": " deployed an " - } - ], - [ - "TEXT", - { - "plain": "L3" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Duane Reade - FLATIRON", - "plain": "Duane Reade - FLATIRON (184 5TH AVENUE, MANHATTAN NY)", - "team": "RESISTANCE", - "latE6": 40741370, - "address": "184 5TH AVENUE, MANHATTAN NY", - "lngE6": -73989912, - "guid": "2efda7a59ea54569bdb8624b41718caf.12" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "RESISTANCE" - } - } - ] - ] -} - - - - - - - - - - - - -{ - "gameBasket": { - "deletedEntityGuids": [ - - ], - "gameEntities": [ - - ], - "inventory": [ - - ] - }, - "result": [ - [ - "ca3de97465fb43f2b45ec34ca9cea2de.d", - 1359702662465, - { - "plext": { - "text": "Your L6 Resonator on Universit\u00e4tazeichen Heidelberg (Im Neuenheimer Feld 330, Campus Im Neunheimer Feld, 69120 Heidelberg, Germany) was destroyed by MohSai1r", - "markup": [ - [ - "TEXT", - { - "plain": "Your " - } - ], - [ - "TEXT", - { - "plain": "L6" - } - ], - [ - "TEXT", - { - "plain": " Resonator on " - } - ], - [ - "PORTAL", - { - "name": "Universit\u00e4tazeichen Heidelberg", - "plain": "Universit\u00e4tazeichen Heidelberg (Im Neuenheimer Feld 330, Campus Im Neunheimer Feld, 69120 Heidelberg, Germany)", - "team": "ALIENS", - "latE6": 49418303, - "address": "Im Neuenheimer Feld 330, Campus Im Neunheimer Feld, 69120 Heidelberg, Germany", - "lngE6": 8669490, - "guid": "b6cab1983f5d4795816e0d3ad3af3459.11" - } - ], - [ - "TEXT", - { - "plain": " was destroyed by " - } - ], - [ - "PLAYER", - { - "plain": "MohSai1r", - "guid": "a0c2e839783f4e889ca570e2cd5c7819.c", - "team": "RESISTANCE" - } - ] - ], - "plextType": "SYSTEM_NARROWCAST", - "team": "RESISTANCE" - } - } - ], - [ - "0b511244557349e6ad98a6d9b1332a3d.d", - 1359915357570, - { - "plext": { - "text": "xn37: x", - "markup": [ - [ - "SENDER", - { - "plain": "xn37: ", - "guid": "e015c2eecf2c424e82f375774c9e5446.c", - "team": "ALIENS" - } - ], - [ - "TEXT", - { - "plain": "x" - } - ] - ], - "plextType": "PLAYER_GENERATED", - "team": "ALIENS" - } - } - ] - ] -} diff --git a/json_examples/chat_public_decay_msg.js b/json_examples/chat_public_decay_msg.js deleted file mode 100644 index d7366372..00000000 --- a/json_examples/chat_public_decay_msg.js +++ /dev/null @@ -1,49 +0,0 @@ -[ - "431a30b634394956a16e62954222a37d.d", - 1360634878999, - { - "plext": { - "text": "Control Field @In the fishing village ( Lomse (Oktyabr'skaya ulitsa, 1, Kaliningrad, Kaliningrad Oblast, Russia) has decayed -108 MUs", - "markup": [ - [ - "TEXT", - { - "plain": "Control Field @" - } - ], - [ - "PORTAL", - { - "name": "In the fishing village ( Lomse", - "plain": "In the fishing village ( Lomse (Oktyabr'skaya ulitsa, 1, Kaliningrad, Kaliningrad Oblast, Russia)", - "team": "ALIENS", - "latE6": 54705182, - "address": "Oktyabr'skaya ulitsa, 1, Kaliningrad, Kaliningrad Oblast, Russia", - "lngE6": 20514959, - "guid": "6af16d09fb574c989b7fa09e718585a7.12" - } - ], - [ - "TEXT", - { - "plain": " has decayed -" - } - ], - [ - "TEXT", - { - "plain": "108" - } - ], - [ - "TEXT", - { - "plain": " MUs" - } - ] - ], - "plextType": "SYSTEM_BROADCAST", - "team": "NEUTRAL" - } - } -] diff --git a/json_examples/chat_send_message.js b/json_examples/chat_send_message.js deleted file mode 100644 index 97560ec2..00000000 --- a/json_examples/chat_send_message.js +++ /dev/null @@ -1,13 +0,0 @@ -// http://www.ingress.com/rpc/dashboard.sendPlext - -// posting: -{"message":"x","latE6":73689520,"lngE6":95322756,"factionOnly":true,"method":"dashboard.sendPlext"} - -{"message":"x","latE6":73689520,"lngE6":95322756,"method":"dashboard.sendPlext"} - - -// faction response: -{"gameBasket": {"deletedEntityGuids": [], "gameEntities": [], "inventory": []}, "result": "c709d0aa51664510a43c635d5df919cf.d"} - -// public response: -{"gameBasket": {"deletedEntityGuids": [], "gameEntities": [], "inventory": []}, "result": "1b113466f403499191eae568915b7cc9.d"} diff --git a/json_examples/field_json.js b/json_examples/field_json.js deleted file mode 100644 index ff1fe465..00000000 --- a/json_examples/field_json.js +++ /dev/null @@ -1,39 +0,0 @@ -[ - "98def9ad4f3a4c30908ad1dff5638c6c.b", - 1360156123960, - { - "controllingTeam": { - "team": "RESISTANCE" - }, - "capturedRegion": { - "vertexA": { - "guid": "c2afe403edca4114b8c724a46d23959c.11", - "location": { - "lngE6": 8687448, - "latE6": 49406850 - } - }, - "vertexC": { - "guid": "e1d616018f0647afb985a20fc9d7baa5.11", - "location": { - "lngE6": 8684374, - "latE6": 49408196 - } - }, - "vertexB": { - "guid": "cd4a44d7684e4d40a5754540fd7686b4.11", - "location": { - "lngE6": 8688377, - "latE6": 49406900 - } - } - }, - "entityScore": { - "entityScore": "4" - }, - "creator": { - "creatorGuid": "8d684d38d2654c8b971ff56b9f3c8895.c", - "creationTime": "1360156123445" - } - } -] diff --git a/json_examples/get_portal_details-request.js b/json_examples/get_portal_details-request.js new file mode 100644 index 00000000..694f5b7c --- /dev/null +++ b/json_examples/get_portal_details-request.js @@ -0,0 +1,16 @@ +// get_portal_details - request +// note the munged parameters +// also excess 'junk' parameters to obsfucate the request - the only ones needed are the first three +// (guid, method name, version parameter) + + +{ + "seg6ohxgnqf9xu9w":"56d5b86428c84aadac0d6214eff81f60.11", + "yyngyttbmmbuvdpa":"c00thnhf1yp3z6mn", + "avz401t36lzrapis":"c5d0a5d608f729a1232bebdc12fb86ba5fb6c43f", + "nzd23jqm9k1cnnij":67, + "0dod6onpa1s4fezp":-90000000, + "soass3t7mm7anneo":-180000000, + "cvarmr3o00ngylo1":90000000, + "udzwnlx07hzd3bfo":180000000 +} diff --git a/json_examples/get_portal_details-response.js b/json_examples/get_portal_details-response.js new file mode 100644 index 00000000..a8b8a0d3 --- /dev/null +++ b/json_examples/get_portal_details-response.js @@ -0,0 +1,129 @@ +// get_portal_details - response +// note no player GUIDs any more - resonators[].ownerGuid is actually a name + +{ + "resonatorArray":{ + "resonators":[ + { + "slot":0, + "level":7, + "energyTotal":5000, + "distanceToPortal":33, + "id":"cc5416d0-d894-47ee-b23b-47d761f0486b", + "ownerGuid":"dt11" + }, + { + "slot":1, + "level":6, + "energyTotal":4000, + "distanceToPortal":34, + "id":"b90874a2-0157-4033-8dac-0ee21c1c513b", + "ownerGuid":"dt11" + }, + { + "slot":2, + "level":5, + "energyTotal":3000, + "distanceToPortal":34, + "id":"f96d96b6-cdb0-4217-be58-34ac8ea82415", + "ownerGuid":"dt11" + }, + { + "slot":3, + "level":4, + "energyTotal":2500, + "distanceToPortal":35, + "id":"8dc8f746-13a7-4730-b0d0-25b75784a090", + "ownerGuid":"dt11" + }, + { + "slot":4, + "level":4, + "energyTotal":2500, + "distanceToPortal":33, + "id":"ae65fd13-c9cf-412b-93b4-65e9a71ef5d6", + "ownerGuid":"dt11" + }, + { + "slot":5, + "level":4, + "energyTotal":2500, + "distanceToPortal":34, + "id":"d0a4ee3e-ab78-424f-bafc-da1da2423d0a", + "ownerGuid":"dt11" + }, + { + "slot":6, + "level":5, + "energyTotal":3000, + "distanceToPortal":34, + "id":"09458b16-ccea-4f64-80ee-e2848f51b090", + "ownerGuid":"dt11" + }, + { + "slot":7, + "level":6, + "energyTotal":4000, + "distanceToPortal":34, + "id":"05f77a0e-ccc9-4f6a-8fbf-07b0010a02c2", + "ownerGuid":"dt11" + } + ] + }, + "locationE6":{ + "lngE6":-148266, + "latE6":51511550 + }, + "controllingTeam":{ + "team":"ENLIGHTENED" + }, + "portalV2":{ + "linkedEdges":[ + { + "otherPortalGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "edgeGuid":"dd3b4868cb74469aa69399b775ff8e48.9", + "isOrigin":true + }, + { + "otherPortalGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "edgeGuid":"c9c4ecc18ac24163bb937b86b48902dc.9", + "isOrigin":true + } + ], + "linkedModArray":[ + { + "installingUser":"dt11", + "displayName":"Portal Shield", + "type":"RES_SHIELD", + "stats":{ + "REMOVAL_STICKINESS":"0", + "MITIGATION":"20" + }, + "rarity":"RARE" + }, + { + "installingUser":"dt11", + "displayName":"Portal Shield", + "type":"RES_SHIELD", + "stats":{ + "REMOVAL_STICKINESS":"0", + "MITIGATION":"10" + }, + "rarity":"COMMON" + }, + null, + null + ], + "descriptiveText":{ + "TITLE":"Mayfair Post Office, London", + "ADDRESS":"32 Grosvenor Street, London, Greater London W1K 4QS, UK" + } + }, + "imageByUrl":{ + "imageUrl":"http://lh5.ggpht.com/5963D4ATz31LG-zWuPSWrdUKqq_u09-C-GNcyNd6vH1isg7PQjax2niQ5LbZfAwnjnB4DJITWbfuGeMH0MnDqThnmI_CNWIQ2euXk8Cwjls0yXO88A" + }, + "captured":{ + "capturedTime":"1385754854932", + "capturingPlayerId":"dt11" + } +} diff --git a/json_examples/get_thinned_entities-request.js b/json_examples/get_thinned_entities-request.js new file mode 100644 index 00000000..54c00f8a --- /dev/null +++ b/json_examples/get_thinned_entities-request.js @@ -0,0 +1,20 @@ +// a request for map data - note the munged random strings for parameter names, and also +// a set of additional junk parameters that have nothing to do with this request. Only the first +// three entries are relevant - the first is the set of quadkeys for the map tiles, +// the next is the method name, and finally a randomised protocol version parameter + +{ + "1mpmxz2yun22rwnn":[ + "1_32739_21790", + "1_32740_21790", + "1_32741_21790", + "1_32742_21790" + ], + "yyngyttbmmbuvdpa":"4467ff9bgxxe4csa", + "avz401t36lzrapis":"c5d0a5d608f729a1232bebdc12fb86ba5fb6c43f", + "nzd23jqm9k1cnnij":12, + "0dod6onpa1s4fezp":-90000000, + "soass3t7mm7anneo":-180000000, + "cvarmr3o00ngylo1":90000000, + "udzwnlx07hzd3bfo":180000000 +} diff --git a/json_examples/get_thinned_entities-response.js b/json_examples/get_thinned_entities-response.js new file mode 100644 index 00000000..1b31d092 --- /dev/null +++ b/json_examples/get_thinned_entities-response.js @@ -0,0 +1,5861 @@ +// a response to get_thinned_entities. note the vastly trimmed down portal summary data, rather than the full +// portal details sent in previous versions of the API + + +{ + "result":{ + "map":{ + "1_32742_21790":{ + "deletedGameEntityGuids":[ + "7501732989dc4004a86bd4495b664bbd.b", + "a45d224cc1444899ace43ef43c80ab99.b", + "4c4c4b38f8644894b60e957267b6bc4f.b", + "5c63ea938f514e25896b8a2aa39f0692.b", + "3e18aa91165c4a458f22f27636c48395.b", + "d848629d72484e199610a80d43b66df3.b", + "6075a26765cc4506af66416517947257.b", + "899d065260bd4464a376e38ada55d2de.b", + "aaf70c9729154c13aa5f847c9491dde5.9", + "0c19bccb56e4418fa7571fe0a8a2d1c0.9", + "c72ecd698da74ea5a0a0053ec881c6b8.9", + "35caa62f29f0411abdc34a34d0b7cc90.9", + "0f761122f9cd4b4388236f43128a4c86.9", + "59fb111a05d141c884b4e705e8c1ab5c.9", + "6673ac2a0c424d5c90af4ab198d546a6.9", + "1c6757b1666c4e6dab984a261f338fa5.9", + "d7c8741cfc304a61a2e1c837b17708ee.9", + "e92971f8778d4942bb7dd783d7cc4a34.9", + "3df7b5434a0a4e158b7a0e0fa81327d8.9", + "1b31d5d4792241c487c3f55a063c7b3d.9", + "903ca96311db4bde8a0f8239273f49d3.9", + "83fd455452ad4d72a6dec3b444fc20a7.9", + "94c7e110d8fb43f1a78867cf61ff64f1.9" + ], + "gameEntities":[ + [ + "51502606f12c4eaebef135ac5e48c751.16", + 1385766074861, + { + "level":6, + "title":"Regent Arcade House", + "image":"http://lh4.ggpht.com/Q7tg8F9zDIAq9J5d9sJxbG6iFPsd3pkB8AvuAMZsqRmnQLUSo2E7ukxA175I4sT8sS1u3j8pBw_SUF-CtVRC", + "resCount":8, + "latE6":51514835, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-141049, + "type":"portal" + } + ], + [ + "f693d048db644bd6ab10f8f332cdc286.16", + 1385731470196, + { + "level":4, + "title":"The Masons Arms - Maddox Street", + "image":"http://lh5.ggpht.com/prSa1VQdjkf5wdh2ZmU3Wo26eAuOXTuGTSqcxUvQl63bDuZp7mWFATRScaNn1CXzJV4eVVHfkjxPdYwVVPaqxACLmj7zgTx2x48HlBhsHx3fz0OIkw", + "resCount":5, + "latE6":51512787, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-142613, + "type":"portal" + } + ], + [ + "dc2192d231d147f3aa8fb4b7c060bd5b.16", + 1385747494378, + { + "level":6, + "title":"Roman Helmet ", + "image":"http://lh6.ggpht.com/3gck_cCKPIBTAryREX51u9e_E3t_QcH912ri-g9wwufOSmmXdWLsVAlWdeF9t_TcNvh3jlpZQ4ZPIAtpDsM2", + "resCount":8, + "latE6":51514440, + "health":55.0, + "team":"RESISTANCE", + "lngE6":-141353, + "type":"portal" + } + ], + [ + "db954eb71cb949ad94084d790b399fee.16", + 1385730455424, + { + "level":6, + "title":"Major-General William Roy's House", + "image":"http://lh5.ggpht.com/mVy693ZAtdBdeNsHmnzZcWGBqpAal1vOEWIshFkSyWtGiGVBXSlWQnaNp9uP4f1q1mbhtB9XQxALNVWztkRv", + "resCount":8, + "latE6":51514704, + "health":59.0, + "team":"RESISTANCE", + "lngE6":-140773, + "type":"portal" + } + ], + [ + "dfdaae2e28f744ca83ac3a67ae069f2f.16", + 1385729718691, + { + "level":6, + "title":"Liberty London", + "image":"http://lh4.ggpht.com/8P-YjDLIpr9P9TukR9OgRctRJk9Psi4Cg0dB0JsvJ8Df4DPOm-eir4OyTnH58mKOcNaIrcrmO9Vb3E_guqzs", + "resCount":8, + "latE6":51513927, + "health":58.0, + "team":"RESISTANCE", + "lngE6":-140224, + "type":"portal" + } + ], + [ + "471691e68499419e9e1a7f90b9d3929f.12", + 1385767472713, + { + "level":6, + "title":"Liberty's - just off Regent St", + "image":"http://www.panoramio.com/photos/small/10024019.jpg", + "resCount":8, + "latE6":51513861, + "health":67.0, + "team":"RESISTANCE", + "lngE6":-140950, + "type":"portal" + } + ], + [ + "672ecb2577114bd588551dc257543307.12", + 1385730654159, + { + "level":5, + "title":"Churchill & Roosevelt statue, ", + "image":"http://www.panoramio.com/photos/small/785572.jpg", + "resCount":8, + "latE6":51510385, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-142602, + "type":"portal" + } + ], + [ + "b38f452f55d44217a81d4cb361928592.16", + 1385747753597, + { + "level":5, + "title":"Church of the Assumption", + "image":"http://lh5.ggpht.com/lrLGCz1BXNv9olpUyyxdtTpHAgclyTsmHrmBsA0fVPooq2ODCtL-S3Xt3M3DGbGiqVbV9zcuisLznChspRas", + "resCount":8, + "latE6":51511185, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-138099, + "type":"portal" + } + ], + [ + "770fb08acd63484c88931ab98f1c8943.11", + 1385762222391, + { + "level":7, + "title":"Arch on Air St. with Regent St", + "image":"http://lh5.ggpht.com/77hgA4dtbuLsE2WGkyvWdVWj_z4Z18AUKXgtcThpXhebbch16TGwoRQkMUiVtOTc-IQijcOUqsztvcHQbo26COAZv126PIeWK81E5lF2Ji1yEX8", + "resCount":8, + "latE6":51509979, + "health":69.0, + "team":"RESISTANCE", + "lngE6":-136298, + "type":"portal" + } + ], + [ + "7efd900fbc744812b49aab6d0226d2d1.11", + 1385764455820, + { + "level":2, + "title":"Hanover Square - Fountain", + "image":"http://lh6.ggpht.com/TFBzuUVsAcjfDWCNZAeCFBzdA4h9AOPX5zZQG0z9PKv5t0dpqx4-xPDO3mwTZMFdWeyQRBI4lUJbh-8wreLhGofS1YettJJmx1GQUcHCy5sN2MU", + "resCount":3, + "latE6":51514039, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-143862, + "type":"portal" + } + ], + [ + "b0bc7a8edb3343139f47ed3d919a8eed.16", + 1385732830693, + { + "level":3, + "title":"The Spirit of Soho Mural", + "image":"http://lh5.ggpht.com/giuAeMZih_7bmKVw3ANFJxbkAyHIMvdzFhEF4iS_oO3CQtmKahjpJVnXF-CjnFU71kdU1HsSWgWCE0Io57lz", + "resCount":6, + "latE6":51512764, + "health":93.0, + "team":"RESISTANCE", + "lngE6":-138184, + "type":"portal" + } + ], + [ + "33fe90d0a2d04d0db47002285eaf2766.11", + 1385747555742, + { + "level":6, + "title":"Apple Store - Regent Street", + "image":"http://lh3.ggpht.com/UQY7Ckp-hlTVow0Qk6aN64iRUnH6G_8OFQlu96ooS_lslhdt4JnWWlQ2g1Yv_VreqBlJ2o7nznyMhMZwqHxZG12SOPF52Vv_vBnTh9k0bPsqbfR3", + "resCount":8, + "latE6":51514260, + "health":77.0, + "team":"RESISTANCE", + "lngE6":-141839, + "type":"portal" + } + ], + [ + "f40dcd87c4764789a72fecdd97fd4ed4.11", + 1385730481667, + { + "level":6, + "title":"London Palladium Statue", + "image":"http://lh5.ggpht.com/_eJIezwPmZJLqqBwCfndPHWUU7KPylsuburz_gG29nCxJ2buEKB1glCWfMLqJQ1N3YiqlqGsfmbbfgvRYlBeLrWM5WyNZDm6ccixs0wb8NCbv0Q", + "resCount":8, + "latE6":51514522, + "health":58.0, + "team":"RESISTANCE", + "lngE6":-140594, + "type":"portal" + } + ], + [ + "f13c73e60e714ce6b444b4f7ba751e17.11", + 1385747280600, + { + "level":4, + "title":"Golden Square", + "image":"http://lh3.ggpht.com/PgdpWBHdjzY7vRQZs9SQDiTFm9Bfx8PeikHl0eB9DtbUps7b4j-qR8J-2ULcGhqq395nEf9L4YlhdLyDeV_JjfE17Emb3L-__eSMQ1LheDK2MCA", + "resCount":8, + "latE6":51511643, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-137211, + "type":"portal" + } + ], + [ + "51e38ccd210c418e9f74885f6b6e0ae0.16", + 1385729815190, + { + "level":4, + "title":"Canaletto Blue Plaque", + "image":"http://lh3.ggpht.com/HqFZ_klN_JFiSQRuo_IfU03-CXpuLVTtLnTHn1UXacyAMD_oiHraLARRwmZRzJ7gghWkJjrwi_y-PmCRtqZq", + "resCount":8, + "latE6":51512414, + "health":49.0, + "team":"RESISTANCE", + "lngE6":-137537, + "type":"portal" + } + ], + [ + "764aeb38065b47d992e843d4ae77d15d.11", + 1385731498399, + { + "level":3, + "title":"Vogue House, Hanover Square", + "image":"http://lh5.ggpht.com/09fmmo18-rIqt8iYFU9EM1gZefNWBefvOtVahOhxuG0IEweJzI0BUnMfTGejSFc7yVDCCwG1KvW4tjjyum4sr8M_GHy5DYbDfncRQM9X0Zhdhvw", + "resCount":5, + "latE6":51513462, + "health":32.0, + "team":"RESISTANCE", + "lngE6":-143165, + "type":"portal" + } + ], + [ + "01960f90a13c4259b2921bec1fb45b2c.11", + 1385733727598, + { + "level":1, + "title":"Hanover Square - William Pitt Statue", + "image":"http://lh3.ggpht.com/wcExZAABxyfYUUIPMBj5b2Pj7m6Po2jsB3KcpVcxOqEvHj10Fm8yqFehqDtMPqMnT3LnxNQepEK4oDPtNOZZvvilxySX5M0csKbia27jSxM66Qo", + "resCount":1, + "latE6":51513667, + "health":28.0, + "team":"RESISTANCE", + "lngE6":-143707, + "type":"portal" + } + ], + [ + "35276da8f43740a1a06a2b8fe4ec7bef.16", + 1385729718315, + { + "level":5, + "title":"Wagamama Soho", + "image":"http://lh5.ggpht.com/QBxVosO0b7FyHo55g6gDI02WIA0qVa2-kvOLBM4K62FnHOu7XGhUzmu0veE1fl0LZPYmtuUw0m-AiOOuhvNF", + "resCount":8, + "latE6":51512676, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-135865, + "type":"portal" + } + ], + [ + "e60e96f76f2f41c588bb873035223a55.16", + 1385729718400, + { + "level":6, + "title":"Shakespeare's Head", + "image":"http://lh5.ggpht.com/EP8YbP8VVKbgpG1RkL8bEkLVyIsRDn0PYJQecNL3aER9h26ekYJZLBcuDWdSW6f-lRN6AfCn2Vpyc3r11sGJ-g", + "resCount":8, + "latE6":51513650, + "health":64.0, + "team":"RESISTANCE", + "lngE6":-139464, + "type":"portal" + } + ], + [ + "9108f98e201642d5b199a5e80f3634e3.11", + 1385746284838, + { + "level":4, + "title":"Kingly Court", + "image":"http://lh4.ggpht.com/Puh3wxka4oX5ifR_4uwJawzFQWHotWEMJtOV-4fM3FYQcFVAGiwKTpOJqoSW6_S2fMp8c4-eUw9Nsx3h9Ro2yzDjrAkpoRbCAW70wUsUvk5TItxO4w", + "resCount":8, + "latE6":51512628, + "health":76.0, + "team":"RESISTANCE", + "lngE6":-138809, + "type":"portal" + } + ], + [ + "de3bae13ea7a4003a69964bbc491a6a4.16", + 1385714278787, + { + "level":5, + "title":"The Soho Mural ", + "image":"http://lh3.ggpht.com/hNa2CiyMvSQbT9VSwsR4MAIBkzer8-OGlbIcpd3hd5K9M8--ZRtw0HLmwrEdaGaJlhpPkOX9VSzVf9_Mz9YD", + "resCount":8, + "latE6":51514800, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-137032, + "type":"portal" + } + ], + [ + "dbbfe3f544af4659ad4a7388fa77e3d5.12", + 1385753715962, + { + "level":2, + "title":"One Hanover Street", + "image":"http://www.panoramio.com/photos/small/40971120.jpg", + "resCount":8, + "latE6":51513839, + "health":69.0, + "team":"ENLIGHTENED", + "lngE6":-142541, + "type":"portal" + } + ], + [ + "4245331a25a149de8a856f0a40fbb0c3.11", + 1385729815327, + { + "level":5, + "title":"Giant Plug Socket", + "image":"http://lh5.ggpht.com/Sx14w_KJRpxhZ6Xj_4WDgH9HFGn6vBlsBTP4Dnxr58P5MnoXOV7MYCtUneKZV0DsYfbmLFh6oiaAI2BfrtDCjSzUpGboMA1mMBVSlqqQ01bwDSA", + "resCount":8, + "latE6":51513328, + "health":57.0, + "team":"RESISTANCE", + "lngE6":-138063, + "type":"portal" + } + ], + [ + "8bd1e401015d45c68a248cd3888a9f08.11", + 1385747403612, + { + "level":6, + "title":"Broadwick Street Pump", + "image":"http://lh5.ggpht.com/_zR6Ykvgy-qqfD8rKVlBr6ZT12ZjhUcPmvLYy32Kex8m6fXfNOqJ7brhSU2JYmJMSXcKW3eGm1beVHIxMDZTBu1v6Ig7rcMlOxc2-Vr-vp_NKvAl", + "resCount":8, + "latE6":51513504, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-136200, + "type":"portal" + } + ], + [ + "cdd3a54085a547f2a7320af688888f09.16", + 1385748399688, + { + "level":1, + "title":"Browns Bar", + "image":"http://lh4.ggpht.com/Dv6lYs0UMXlGklEJhtQNE4q_35ZkQooCtaK13ZOyJUAWEMvOLsJY24ZGkUhljiAeZsdsh916b4tDb8CGcSE", + "resCount":3, + "latE6":51512414, + "health":25.0, + "team":"ENLIGHTENED", + "lngE6":-143827, + "type":"portal" + } + ], + [ + "a3cd224132f544e99255cdab6b67c8e0.16", + 1385730711985, + { + "level":4, + "title":"Fine Art Society", + "image":"http://lh4.ggpht.com/yC-itqa1j9kIZISezpUyPXG5WGZi9Uv43Ssrw-bcqGO2DYsPYytAzgvAOtkddKXHKa0ombb27dnKWnskErLc", + "resCount":6, + "latE6":51511319, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-143617, + "type":"portal" + } + ], + [ + "cd465e2e18aa47fb9413ec9ddc32a52a.16", + 1385746744075, + { + "level":2, + "title":"The Crown Pub", + "image":"http://lh6.ggpht.com/t4lg3OwSu583Dpk81P4M4tRVneKxd17oiO9y895Uh2pSYFQWxsrAcGeUpErCPU3B3RrcxfkbVkSKeIGaqr1o", + "resCount":8, + "latE6":51511183, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-136289, + "type":"portal" + } + ], + [ + "0497a427aeee443b8a9344f3e42878c5.16", + 1385729718247, + { + "level":6, + "title":"Wall Art", + "image":"http://lh5.ggpht.com/rbZoECmRqIxU2uJXAqoVAR-o9QArak-cVj47oBYjYtlu7HouA4WDjWrZJU6Pq0lpBYOBRixXmr-tDUnUkA", + "resCount":8, + "latE6":51513159, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-139979, + "type":"portal" + } + ], + [ + "948e24b3ee6f4c938b26e1ccc546c344.12", + 1385734330704, + { + "level":1, + "title":"Time Reversal. Alice Anderson,", + "image":"http://www.panoramio.com/photos/small/34503556.jpg", + "resCount":2, + "latE6":51512802, + "health":77.0, + "team":"ENLIGHTENED", + "lngE6":-136425, + "type":"portal" + } + ], + [ + "65854ea080ad4c47af9a846bd2157a32.11", + 1385754050543, + { + "level":2, + "title":"1930s Red Telephone Box", + "image":"http://lh3.ggpht.com/Hqf1WDZsfcQFfh4Aj7gXyD7IJ1clxZAKqI14vwGp-44pH0kORC-enFJKHOJ2fjWnRB22YoEXswPVwNzxregOLX1sigE-zBwjJBWKncqRXqjoFZ4", + "resCount":8, + "latE6":51513771, + "health":73.0, + "team":"ENLIGHTENED", + "lngE6":-143224, + "type":"portal" + } + ], + [ + "4dcb09e36ff44fbda97d4ef9e422864a.16", + 1385747835960, + { + "level":2, + "title":"The Glassblower Pub", + "image":"http://lh4.ggpht.com/vgksd-D9aX8pwaxg1LGy6UquBCQE1JEVjjHwyEiNfo__p6kbdcdATq2wxiKK0yie29Px5uP50gJ2LI-2LE6O", + "resCount":8, + "latE6":51510532, + "health":90.0, + "team":"RESISTANCE", + "lngE6":-137153, + "type":"portal" + } + ], + [ + "bdd9f0a666194566a4a4410c0552f6b5.16", + 1385712589017, + { + "level":6, + "title":"Multiple Car Sculptures", + "image":"http://lh3.ggpht.com/paVSd0GG0-Rqp4QArc9gHVwTKveJHoHiYR10ZyFEtG6H-eTckFqvW-YFzb4Gr2aldf05at35Qw89iUgoQR4", + "resCount":8, + "latE6":51512023, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-139517, + "type":"portal" + } + ], + [ + "3d9e999015a449779e8d788a44db004f.16", + 1385748510417, + { + "level":6, + "title":"Piccadilly Theatre", + "image":"http://lh3.ggpht.com/jtawHo8jks5U04gl3vCqOT-sCinhyENhKesMflEwmGl5ZXGannk_rU7CcusbWtKWhZ4t3D0Y46_t7wKuN98V", + "resCount":8, + "latE6":51510726, + "health":62.0, + "team":"RESISTANCE", + "lngE6":-135512, + "type":"portal" + } + ], + [ + "05322044531c400fa651cae68b14070f.11", + 1385766247039, + { + "level":7, + "title":"Oxford Circus Underground Station", + "image":"http://lh4.ggpht.com/szxXe_OSEPms4uCZFbhiYcXSo4V2qEm3xCi_V8DETpmvwLvj0rEUJ9kYLTbnRaYgOWx2Nj86z16RlPgRO4_Lg4RaU45g9mkHFr5FlZSya88T63s4", + "resCount":8, + "latE6":51515259, + "health":83.0, + "team":"RESISTANCE", + "lngE6":-141449, + "type":"portal" + } + ], + [ + "18269c55037d44488851b182d20a7e02.b", + 1385391890331, + { + "points":[ + { + "lngE6":-134684, + "guid":"29b6e6694fc14063b293268b009a36c8.12", + "latE6":51509894 + }, + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-130173, + "guid":"4c4af23302c04fadbc79fc1ad6d8e37a.11", + "latE6":51511070 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "7b85e3ef2a4b4cf1bedace0b7c1ef464.b", + 1385582249184, + { + "points":[ + { + "lngE6":-141449, + "guid":"05322044531c400fa651cae68b14070f.11", + "latE6":51515259 + }, + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + }, + { + "lngE6":-141353, + "guid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "latE6":51514440 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "76297ebe3a224463a986d235c3c749f6.b", + 1385747710137, + { + "points":[ + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-138099, + "guid":"b38f452f55d44217a81d4cb361928592.16", + "latE6":51511185 + }, + { + "lngE6":-137211, + "guid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "latE6":51511643 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "127fa78ca3394b568e4769a043b3e7c9.b", + 1385580364098, + { + "points":[ + { + "lngE6":-141449, + "guid":"05322044531c400fa651cae68b14070f.11", + "latE6":51515259 + }, + { + "lngE6":-140773, + "guid":"db954eb71cb949ad94084d790b399fee.16", + "latE6":51514704 + }, + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "f7cf47b3cc7b42368d8ff7ea30cff360.b", + 1385386496392, + { + "points":[ + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-133877, + "guid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "latE6":51510627 + }, + { + "lngE6":-132406, + "guid":"d9ba97d5bb7b46abbdf6757190c06c70.16", + "latE6":51510684 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "e9f923cc0ecd4a8f8755d40311a8f5c3.b", + 1385719623001, + { + "points":[ + { + "lngE6":-135865, + "guid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "latE6":51512676 + }, + { + "lngE6":-140950, + "guid":"471691e68499419e9e1a7f90b9d3929f.12", + "latE6":51513861 + }, + { + "lngE6":-139464, + "guid":"e60e96f76f2f41c588bb873035223a55.16", + "latE6":51513650 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "b33b049eaf5d4c1587d4c595df2b5113.b", + 1385473816596, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-147665, + "guid":"b45a5a0a21124c0cba28167094c94358.16", + "latE6":51514310 + }, + { + "lngE6":-141839, + "guid":"33fe90d0a2d04d0db47002285eaf2766.11", + "latE6":51514260 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "c65cac4d2068489bbfc30f978a19817d.b", + 1385746389199, + { + "points":[ + { + "lngE6":-136415, + "guid":"0dfe4e6db22d45738454e5d6c3adb422.11", + "latE6":51509293 + }, + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-134684, + "guid":"29b6e6694fc14063b293268b009a36c8.12", + "latE6":51509894 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "bd80219282fa4c38a5da8e9fb5fe5dd1.b", + 1385322553829, + { + "points":[ + { + "lngE6":-130173, + "guid":"4c4af23302c04fadbc79fc1ad6d8e37a.11", + "latE6":51511070 + }, + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-132406, + "guid":"d9ba97d5bb7b46abbdf6757190c06c70.16", + "latE6":51510684 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "5f9447c37b9f4d4bbfa47eb053d7fb63.b", + 1385625228075, + { + "points":[ + { + "lngE6":-139979, + "guid":"0497a427aeee443b8a9344f3e42878c5.16", + "latE6":51513159 + }, + { + "lngE6":-141839, + "guid":"33fe90d0a2d04d0db47002285eaf2766.11", + "latE6":51514260 + }, + { + "lngE6":-140950, + "guid":"471691e68499419e9e1a7f90b9d3929f.12", + "latE6":51513861 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "65d2ebc2262a4081a5786b197a493568.b", + 1385657428075, + { + "points":[ + { + "lngE6":-136200, + "guid":"8bd1e401015d45c68a248cd3888a9f08.11", + "latE6":51513504 + }, + { + "lngE6":-137032, + "guid":"de3bae13ea7a4003a69964bbc491a6a4.16", + "latE6":51514800 + }, + { + "lngE6":-132564, + "guid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "latE6":51512246 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "b35a135a3d9a48e9beab909541f449a0.b", + 1385714984086, + { + "points":[ + { + "lngE6":-136298, + "guid":"770fb08acd63484c88931ab98f1c8943.11", + "latE6":51509979 + }, + { + "lngE6":-137211, + "guid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "latE6":51511643 + }, + { + "lngE6":-133877, + "guid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "latE6":51510627 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "2b465cbe51554b2ebbfea6ba67810c96.b", + 1385582115022, + { + "points":[ + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + }, + { + "lngE6":-140773, + "guid":"db954eb71cb949ad94084d790b399fee.16", + "latE6":51514704 + }, + { + "lngE6":-140594, + "guid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "latE6":51514522 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "502381e76870402e9da16405a4cb50df.9", + 1385632734585, + { + "oLatE6":51514260, + "dLatE6":51513462, + "dLngE6":-143165, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"764aeb38065b47d992e843d4ae77d15d.11", + "oLngE6":-141839 + } + ], + [ + "0ee6efa62b924df498b197cb8d28ce0d.9", + 1385719623001, + { + "oLatE6":51513861, + "dLatE6":51513650, + "dLngE6":-139464, + "team":"RESISTANCE", + "oGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "type":"edge", + "dGuid":"e60e96f76f2f41c588bb873035223a55.16", + "oLngE6":-140950 + } + ], + [ + "d2cbe4cf824f4f21a55021bcd0d881ab.9", + 1385747260119, + { + "oLatE6":51511643, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-137211 + } + ], + [ + "a47d16cfecbc4b71afcd38a321e9e178.9", + 1385582249184, + { + "oLatE6":51514835, + "dLatE6":51514440, + "dLngE6":-141353, + "team":"RESISTANCE", + "oGuid":"51502606f12c4eaebef135ac5e48c751.16", + "type":"edge", + "dGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "oLngE6":-141049 + } + ], + [ + "dbfecd40986d41379f1812b49f5a0ca7.9", + 1385625228075, + { + "oLatE6":51514260, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-141839 + } + ], + [ + "be54885e0c4b4425976875fd9da04fda.9", + 1385714984086, + { + "oLatE6":51510627, + "dLatE6":51511643, + "dLngE6":-137211, + "team":"RESISTANCE", + "oGuid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "type":"edge", + "dGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "oLngE6":-133877 + } + ], + [ + "353fc49fb4b84e8c912b47685cdd17de.9", + 1385577901773, + { + "oLatE6":51514260, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-141839 + } + ], + [ + "c04855db54bc41d3a70c83616cc42d12.9", + 1385391890331, + { + "oLatE6":51509979, + "dLatE6":51511070, + "dLngE6":-130173, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"4c4af23302c04fadbc79fc1ad6d8e37a.11", + "oLngE6":-136298 + } + ], + [ + "848d5d1ce2404f3a9c2dd68c8af2af1e.9", + 1385747710137, + { + "oLatE6":51511185, + "dLatE6":51509979, + "dLngE6":-136298, + "team":"RESISTANCE", + "oGuid":"b38f452f55d44217a81d4cb361928592.16", + "type":"edge", + "dGuid":"770fb08acd63484c88931ab98f1c8943.11", + "oLngE6":-138099 + } + ], + [ + "f67ae2fb1af745939b395f9ec419f7bf.9", + 1385740085724, + { + "oLatE6":51509664, + "dLatE6":51509347, + "dLngE6":-143285, + "team":"ENLIGHTENED", + "oGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "type":"edge", + "dGuid":"c59d1196b63b490ba209e13507e9e782.16", + "oLngE6":-145506 + } + ], + [ + "57f8e0f6556e4ea499d5ebeb20d46d36.9", + 1385625228075, + { + "oLatE6":51514260, + "dLatE6":51513159, + "dLngE6":-139979, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"0497a427aeee443b8a9344f3e42878c5.16", + "oLngE6":-141839 + } + ], + [ + "7dd4a812aae04517af41c6ab50077ac9.9", + 1385746389199, + { + "oLatE6":51509979, + "dLatE6":51509894, + "dLngE6":-134684, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"29b6e6694fc14063b293268b009a36c8.12", + "oLngE6":-136298 + } + ], + [ + "facef6508e7849a0921ad64778b45aac.9", + 1385754999512, + { + "oLatE6":51512712, + "dLatE6":51509347, + "dLngE6":-143285, + "team":"ENLIGHTENED", + "oGuid":"fecb59b9a1f342d88a767bfefbd98e2b.16", + "type":"edge", + "dGuid":"c59d1196b63b490ba209e13507e9e782.16", + "oLngE6":-147804 + } + ], + [ + "f365d59534944e3b84f8b4b3b16c12ed.9", + 1385719456171, + { + "oLatE6":51512676, + "dLatE6":51513328, + "dLngE6":-138063, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"4245331a25a149de8a856f0a40fbb0c3.11", + "oLngE6":-135865 + } + ], + [ + "9bd6ddb4a20b47b89c67c8c9c9ebd209.9", + 1385386496392, + { + "oLatE6":51509979, + "dLatE6":51510684, + "dLngE6":-132406, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"d9ba97d5bb7b46abbdf6757190c06c70.16", + "oLngE6":-136298 + } + ], + [ + "da001cc08c3e41d1a798ddebe677035e.9", + 1385657428075, + { + "oLatE6":51514800, + "dLatE6":51513504, + "dLngE6":-136200, + "team":"RESISTANCE", + "oGuid":"de3bae13ea7a4003a69964bbc491a6a4.16", + "type":"edge", + "dGuid":"8bd1e401015d45c68a248cd3888a9f08.11", + "oLngE6":-137032 + } + ], + [ + "2ccfd5cd8bb0437ba102f4caff4c7518.9", + 1385578078100, + { + "oLatE6":51514260, + "dLatE6":51512246, + "dLngE6":-132564, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "oLngE6":-141839 + } + ], + [ + "ec7972a6329e489796ea2d68393ed664.9", + 1385754527834, + { + "oLatE6":51509347, + "dLatE6":51509739, + "dLngE6":-146652, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"3c54417b68c84dd387cd67765d6e3703.12", + "oLngE6":-143285 + } + ], + [ + "d199513947fe4f309616af4f9045ced5.9", + 1385578477730, + { + "oLatE6":51512414, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-137537 + } + ], + [ + "eb545dae1a9b436398f936f0b89a3c98.9", + 1385747710137, + { + "oLatE6":51511643, + "dLatE6":51509979, + "dLngE6":-136298, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"770fb08acd63484c88931ab98f1c8943.11", + "oLngE6":-137211 + } + ], + [ + "18b4d524e17b4141a3365b753ec7daef.9", + 1385719623001, + { + "oLatE6":51512676, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-135865 + } + ], + [ + "bcd2c767090f4d0395bd91338acb62db.9", + 1385746389199, + { + "oLatE6":51509979, + "dLatE6":51509293, + "dLngE6":-136415, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"0dfe4e6db22d45738454e5d6c3adb422.11", + "oLngE6":-136298 + } + ], + [ + "1a101dc6f003414eb28d312394a3aac4.9", + 1385657428075, + { + "oLatE6":51512246, + "dLatE6":51513504, + "dLngE6":-136200, + "team":"RESISTANCE", + "oGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "type":"edge", + "dGuid":"8bd1e401015d45c68a248cd3888a9f08.11", + "oLngE6":-132564 + } + ], + [ + "f7ea70142e424d6c886352102c7189db.9", + 1385632874733, + { + "oLatE6":51514440, + "dLatE6":51515259, + "dLngE6":-141449, + "team":"RESISTANCE", + "oGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "type":"edge", + "dGuid":"05322044531c400fa651cae68b14070f.11", + "oLngE6":-141353 + } + ], + [ + "1148589078ac493b989763c9ea0e0bc0.9", + 1385648550035, + { + "oLatE6":51515946, + "dLatE6":51517740, + "dLngE6":-138807, + "team":"RESISTANCE", + "oGuid":"18df369dd4874e18a17352e39b988607.16", + "type":"edge", + "dGuid":"bd18f1580ca043cd822d8c61675061c5.16", + "oLngE6":-136452 + } + ], + [ + "c63119895c0c48bca3e4bbbaa65fe604.9", + 1385727558556, + { + "oLatE6":51508161, + "dLatE6":51509979, + "dLngE6":-136298, + "team":"RESISTANCE", + "oGuid":"e2ca382f5f934e4182a02b003cf25c65.16", + "type":"edge", + "dGuid":"770fb08acd63484c88931ab98f1c8943.11", + "oLngE6":-139274 + } + ], + [ + "3b0fce9187f64569aa3265d317b6c797.9", + 1385659939944, + { + "oLatE6":51512628, + "dLatE6":51512414, + "dLngE6":-137537, + "team":"RESISTANCE", + "oGuid":"9108f98e201642d5b199a5e80f3634e3.11", + "type":"edge", + "dGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "oLngE6":-138809 + } + ], + [ + "b1f4ec25949b462993b7e8ab5092fdb4.9", + 1385747555742, + { + "oLatE6":51521425, + "dLatE6":51514260, + "dLngE6":-141839, + "team":"RESISTANCE", + "oGuid":"ebeee5e795f24776b184236a6de00e84.16", + "type":"edge", + "dGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "oLngE6":-140080 + } + ], + [ + "929aae218204484b8b5e4357ae59ff49.9", + 1385648534796, + { + "oLatE6":51515946, + "dLatE6":51515259, + "dLngE6":-141449, + "team":"RESISTANCE", + "oGuid":"18df369dd4874e18a17352e39b988607.16", + "type":"edge", + "dGuid":"05322044531c400fa651cae68b14070f.11", + "oLngE6":-136452 + } + ], + [ + "6462ca068dbc467394222e163b6939ae.9", + 1385747280600, + { + "oLatE6":51511643, + "dLatE6":51511899, + "dLngE6":-134962, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"85bd3bee09294ae0ae0339635f01ac40.16", + "oLngE6":-137211 + } + ], + [ + "b6b8b7afb61c42939f9a4affa029ac2a.9", + 1385719444095, + { + "oLatE6":51512676, + "dLatE6":51512764, + "dLngE6":-138184, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"b0bc7a8edb3343139f47ed3d919a8eed.16", + "oLngE6":-135865 + } + ], + [ + "cc2a085bc3404adfaa556fe28b399014.9", + 1385475815508, + { + "oLatE6":51511643, + "dLatE6":51510726, + "dLngE6":-135512, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"3d9e999015a449779e8d788a44db004f.16", + "oLngE6":-137211 + } + ], + [ + "f8e769d955654caab03bb81b2627b955.9", + 1385754511911, + { + "oLatE6":51509347, + "dLatE6":51513092, + "dLngE6":-146417, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"2736d95c14834f49963dcd1ac6d20e1f.16", + "oLngE6":-143285 + } + ], + [ + "5fbb446f648a4c3f8703d4c2bb5f3c36.9", + 1385630014626, + { + "oLatE6":51511183, + "dLatE6":51510627, + "dLngE6":-133877, + "team":"RESISTANCE", + "oGuid":"cd465e2e18aa47fb9413ec9ddc32a52a.16", + "type":"edge", + "dGuid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "oLngE6":-136289 + } + ], + [ + "719b0a6ea191418381a1c4c01cd12828.9", + 1385581881617, + { + "oLatE6":51513650, + "dLatE6":51512246, + "dLngE6":-132564, + "team":"RESISTANCE", + "oGuid":"e60e96f76f2f41c588bb873035223a55.16", + "type":"edge", + "dGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "oLngE6":-139464 + } + ], + [ + "35d4550a08264d9b811a6f94d4a30791.9", + 1385541248130, + { + "oLatE6":51509979, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-136298 + } + ], + [ + "c684b208e9a64689b9f343723d6caafb.9", + 1385730712346, + { + "oLatE6":51517190, + "dLatE6":51515946, + "dLngE6":-136452, + "team":"RESISTANCE", + "oGuid":"41e40d981ea94bdfaa5219b46371d3b3.11", + "type":"edge", + "dGuid":"18df369dd4874e18a17352e39b988607.16", + "oLngE6":-138791 + } + ], + [ + "b0feea4407b841aa9cbb82a1d628032c.9", + 1385582249184, + { + "oLatE6":51515259, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-141449 + } + ], + [ + "e73cde8c568f45bd9558f98b5570c275.9", + 1385667686507, + { + "oLatE6":51513771, + "dLatE6":51513839, + "dLngE6":-142541, + "team":"ENLIGHTENED", + "oGuid":"65854ea080ad4c47af9a846bd2157a32.11", + "type":"edge", + "dGuid":"dbbfe3f544af4659ad4a7388fa77e3d5.12", + "oLngE6":-143224 + } + ], + [ + "bccf563e82d246728295dfdb094ec8fc.9", + 1385386189702, + { + "oLatE6":51510726, + "dLatE6":51510627, + "dLngE6":-133877, + "team":"RESISTANCE", + "oGuid":"3d9e999015a449779e8d788a44db004f.16", + "type":"edge", + "dGuid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "oLngE6":-135512 + } + ], + [ + "881f61ed946b48188478f3014b572c03.9", + 1385714984086, + { + "oLatE6":51509979, + "dLatE6":51510627, + "dLngE6":-133877, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"afb4636dc20a4f8ebebc4777150c02ff.12", + "oLngE6":-136298 + } + ], + [ + "6b4acf27652541feb55c001cca2b0341.9", + 1385582115022, + { + "oLatE6":51514522, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-140594 + } + ], + [ + "ba99f40526714c7797ff01888cbfa218.9", + 1385648514596, + { + "oLatE6":51515946, + "dLatE6":51517126, + "dLngE6":-138138, + "team":"RESISTANCE", + "oGuid":"18df369dd4874e18a17352e39b988607.16", + "type":"edge", + "dGuid":"c624e7b2c13348a0a3b889c8899bbde1.16", + "oLngE6":-136452 + } + ], + [ + "bdef2175cb124f04a850599f37ea809a.9", + 1385719634742, + { + "oLatE6":51512676, + "dLatE6":51511388, + "dLngE6":-133313, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"8b9e199e1e9f448fa2470192642abca8.12", + "oLngE6":-135865 + } + ], + [ + "34033d8241624e47b80ef51bad412e3c.9", + 1385613893144, + { + "oLatE6":51503124, + "dLatE6":51515254, + "dLngE6":-168579, + "team":"RESISTANCE", + "oGuid":"94762abecaa34116a18166df417372e3.16", + "type":"edge", + "dGuid":"0d9d4cbcd478488cb44433a373659221.11", + "oLngE6":-150071 + } + ], + [ + "5efb56e718644e00a6c19b8de6ae65c4.9", + 1385747710137, + { + "oLatE6":51511643, + "dLatE6":51511185, + "dLngE6":-138099, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"b38f452f55d44217a81d4cb361928592.16", + "oLngE6":-137211 + } + ], + [ + "f0da3f355af2486f924e8110bed44141.9", + 1385657428075, + { + "oLatE6":51514800, + "dLatE6":51512246, + "dLngE6":-132564, + "team":"RESISTANCE", + "oGuid":"de3bae13ea7a4003a69964bbc491a6a4.16", + "type":"edge", + "dGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "oLngE6":-137032 + } + ], + [ + "11ba338422404e3e8209b54d63b3031c.9", + 1385583603541, + { + "oLatE6":51512246, + "dLatE6":51513328, + "dLngE6":-138063, + "team":"RESISTANCE", + "oGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "type":"edge", + "dGuid":"4245331a25a149de8a856f0a40fbb0c3.11", + "oLngE6":-132564 + } + ], + [ + "e1e973ecfa4649aea55ee5bc96d65c54.9", + 1385659852387, + { + "oLatE6":51512764, + "dLatE6":51511899, + "dLngE6":-134962, + "team":"RESISTANCE", + "oGuid":"b0bc7a8edb3343139f47ed3d919a8eed.16", + "type":"edge", + "dGuid":"85bd3bee09294ae0ae0339635f01ac40.16", + "oLngE6":-138184 + } + ], + [ + "695f2064f5aa4eed93bb0f06a9a30458.9", + 1385746389199, + { + "oLatE6":51509293, + "dLatE6":51509894, + "dLngE6":-134684, + "team":"RESISTANCE", + "oGuid":"0dfe4e6db22d45738454e5d6c3adb422.11", + "type":"edge", + "dGuid":"29b6e6694fc14063b293268b009a36c8.12", + "oLngE6":-136415 + } + ], + [ + "9d606ef77667493884895d601a3cd448.9", + 1385625228075, + { + "oLatE6":51513159, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"0497a427aeee443b8a9344f3e42878c5.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-139979 + } + ], + [ + "e537529649b04f8e8cbd64243b58c9e0.9", + 1385624766402, + { + "oLatE6":51514867, + "dLatE6":51516866, + "dLngE6":-137129, + "team":"RESISTANCE", + "oGuid":"63b3a7a9284641e3a4022afdbe457b1d.16", + "type":"edge", + "dGuid":"056f6d91dca24b15948634be178b06f4.12", + "oLngE6":-133897 + } + ], + [ + "89ad49e90d5544799456d6e3ef718441.9", + 1385580364098, + { + "oLatE6":51515259, + "dLatE6":51514704, + "dLngE6":-140773, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"db954eb71cb949ad94084d790b399fee.16", + "oLngE6":-141449 + } + ], + [ + "82e353be1b144bcd97e3d48b6b5a826c.9", + 1385740085724, + { + "oLatE6":51509347, + "dLatE6":51510216, + "dLngE6":-145113, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "oLngE6":-143285 + } + ], + [ + "a4a5a70a80f74d53a5544b0f796f135b.9", + 1385578459607, + { + "oLatE6":51512414, + "dLatE6":51512764, + "dLngE6":-138184, + "team":"RESISTANCE", + "oGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "type":"edge", + "dGuid":"b0bc7a8edb3343139f47ed3d919a8eed.16", + "oLngE6":-137537 + } + ], + [ + "17c382d2af024bf79999e01bc4f8323e.9", + 1385473818025, + { + "oLatE6":51514260, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-141839 + } + ], + [ + "e3634fb8ecd04acf9109232213b86606.9", + 1385719623001, + { + "oLatE6":51512676, + "dLatE6":51513650, + "dLngE6":-139464, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"e60e96f76f2f41c588bb873035223a55.16", + "oLngE6":-135865 + } + ], + [ + "4de3735c6ec44fc7898ea6366e7d1717.9", + 1385579090010, + { + "oLatE6":51513504, + "dLatE6":51514704, + "dLngE6":-140773, + "team":"RESISTANCE", + "oGuid":"8bd1e401015d45c68a248cd3888a9f08.11", + "type":"edge", + "dGuid":"db954eb71cb949ad94084d790b399fee.16", + "oLngE6":-136200 + } + ], + [ + "a47d16cfecbc4b71afcd38a321e9e178.9", + 0, + { + "oLatE6":51514835, + "dLatE6":51514440, + "dLngE6":-141353, + "team":"RESISTANCE", + "oGuid":"51502606f12c4eaebef135ac5e48c751.16", + "type":"edge", + "dGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "oLngE6":-141049 + } + ], + [ + "4de3735c6ec44fc7898ea6366e7d1717.9", + 0, + { + "oLatE6":51513504, + "dLatE6":51514704, + "dLngE6":-140773, + "team":"RESISTANCE", + "oGuid":"8bd1e401015d45c68a248cd3888a9f08.11", + "type":"edge", + "dGuid":"db954eb71cb949ad94084d790b399fee.16", + "oLngE6":-136200 + } + ], + [ + "3b0fce9187f64569aa3265d317b6c797.9", + 0, + { + "oLatE6":51512628, + "dLatE6":51512414, + "dLngE6":-137537, + "team":"RESISTANCE", + "oGuid":"9108f98e201642d5b199a5e80f3634e3.11", + "type":"edge", + "dGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "oLngE6":-138809 + } + ], + [ + "dbfecd40986d41379f1812b49f5a0ca7.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-141839 + } + ], + [ + "6b4acf27652541feb55c001cca2b0341.9", + 0, + { + "oLatE6":51514522, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-140594 + } + ], + [ + "da001cc08c3e41d1a798ddebe677035e.9", + 0, + { + "oLatE6":51514800, + "dLatE6":51513504, + "dLngE6":-136200, + "team":"RESISTANCE", + "oGuid":"de3bae13ea7a4003a69964bbc491a6a4.16", + "type":"edge", + "dGuid":"8bd1e401015d45c68a248cd3888a9f08.11", + "oLngE6":-137032 + } + ], + [ + "0ee6efa62b924df498b197cb8d28ce0d.9", + 0, + { + "oLatE6":51513861, + "dLatE6":51513650, + "dLngE6":-139464, + "team":"RESISTANCE", + "oGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "type":"edge", + "dGuid":"e60e96f76f2f41c588bb873035223a55.16", + "oLngE6":-140950 + } + ], + [ + "502381e76870402e9da16405a4cb50df.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51513462, + "dLngE6":-143165, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"764aeb38065b47d992e843d4ae77d15d.11", + "oLngE6":-141839 + } + ], + [ + "89ad49e90d5544799456d6e3ef718441.9", + 0, + { + "oLatE6":51515259, + "dLatE6":51514704, + "dLngE6":-140773, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"db954eb71cb949ad94084d790b399fee.16", + "oLngE6":-141449 + } + ], + [ + "b0feea4407b841aa9cbb82a1d628032c.9", + 0, + { + "oLatE6":51515259, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-141449 + } + ], + [ + "f365d59534944e3b84f8b4b3b16c12ed.9", + 0, + { + "oLatE6":51512676, + "dLatE6":51513328, + "dLngE6":-138063, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"4245331a25a149de8a856f0a40fbb0c3.11", + "oLngE6":-135865 + } + ], + [ + "5efb56e718644e00a6c19b8de6ae65c4.9", + 0, + { + "oLatE6":51511643, + "dLatE6":51511185, + "dLngE6":-138099, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"b38f452f55d44217a81d4cb361928592.16", + "oLngE6":-137211 + } + ], + [ + "b6b8b7afb61c42939f9a4affa029ac2a.9", + 0, + { + "oLatE6":51512676, + "dLatE6":51512764, + "dLngE6":-138184, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"b0bc7a8edb3343139f47ed3d919a8eed.16", + "oLngE6":-135865 + } + ], + [ + "9d606ef77667493884895d601a3cd448.9", + 0, + { + "oLatE6":51513159, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"0497a427aeee443b8a9344f3e42878c5.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-139979 + } + ], + [ + "a5519aba410f4552bcb364d4b188cc25.9", + 0, + { + "oLatE6":51514704, + "dLatE6":51514522, + "dLngE6":-140594, + "team":"RESISTANCE", + "oGuid":"db954eb71cb949ad94084d790b399fee.16", + "type":"edge", + "dGuid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "oLngE6":-140773 + } + ], + [ + "a4a5a70a80f74d53a5544b0f796f135b.9", + 0, + { + "oLatE6":51512414, + "dLatE6":51512764, + "dLngE6":-138184, + "team":"RESISTANCE", + "oGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "type":"edge", + "dGuid":"b0bc7a8edb3343139f47ed3d919a8eed.16", + "oLngE6":-137537 + } + ], + [ + "e3634fb8ecd04acf9109232213b86606.9", + 0, + { + "oLatE6":51512676, + "dLatE6":51513650, + "dLngE6":-139464, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"e60e96f76f2f41c588bb873035223a55.16", + "oLngE6":-135865 + } + ], + [ + "18b4d524e17b4141a3365b753ec7daef.9", + 0, + { + "oLatE6":51512676, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"35276da8f43740a1a06a2b8fe4ec7bef.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-135865 + } + ], + [ + "cc2a085bc3404adfaa556fe28b399014.9", + 0, + { + "oLatE6":51511643, + "dLatE6":51510726, + "dLngE6":-135512, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"3d9e999015a449779e8d788a44db004f.16", + "oLngE6":-137211 + } + ], + [ + "d2cbe4cf824f4f21a55021bcd0d881ab.9", + 0, + { + "oLatE6":51511643, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-137211 + } + ], + [ + "d199513947fe4f309616af4f9045ced5.9", + 0, + { + "oLatE6":51512414, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"51e38ccd210c418e9f74885f6b6e0ae0.16", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-137537 + } + ], + [ + "e73cde8c568f45bd9558f98b5570c275.9", + 0, + { + "oLatE6":51513771, + "dLatE6":51513839, + "dLngE6":-142541, + "team":"ENLIGHTENED", + "oGuid":"65854ea080ad4c47af9a846bd2157a32.11", + "type":"edge", + "dGuid":"dbbfe3f544af4659ad4a7388fa77e3d5.12", + "oLngE6":-143224 + } + ], + [ + "f7ea70142e424d6c886352102c7189db.9", + 0, + { + "oLatE6":51514440, + "dLatE6":51515259, + "dLngE6":-141449, + "team":"RESISTANCE", + "oGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "type":"edge", + "dGuid":"05322044531c400fa651cae68b14070f.11", + "oLngE6":-141353 + } + ], + [ + "eb545dae1a9b436398f936f0b89a3c98.9", + 0, + { + "oLatE6":51511643, + "dLatE6":51509979, + "dLngE6":-136298, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"770fb08acd63484c88931ab98f1c8943.11", + "oLngE6":-137211 + } + ], + [ + "330d0fc655154fee9b221bdbb924c049.9", + 0, + { + "oLatE6":51514704, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"db954eb71cb949ad94084d790b399fee.16", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-140773 + } + ], + [ + "848d5d1ce2404f3a9c2dd68c8af2af1e.9", + 0, + { + "oLatE6":51511185, + "dLatE6":51509979, + "dLngE6":-136298, + "team":"RESISTANCE", + "oGuid":"b38f452f55d44217a81d4cb361928592.16", + "type":"edge", + "dGuid":"770fb08acd63484c88931ab98f1c8943.11", + "oLngE6":-138099 + } + ], + [ + "57f8e0f6556e4ea499d5ebeb20d46d36.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51513159, + "dLngE6":-139979, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"0497a427aeee443b8a9344f3e42878c5.16", + "oLngE6":-141839 + } + ] + ] + }, + "1_32740_21790":{ + "deletedGameEntityGuids":[ + "5c63ea938f514e25896b8a2aa39f0692.b", + "d848629d72484e199610a80d43b66df3.b", + "8f7f2f96910a4fcb90be57c9ea8c1a31.9", + "577c6da0509046029366080bd242418f.9", + "21d7d3e12e734538a948ec544eb867ba.9", + "94c7e110d8fb43f1a78867cf61ff64f1.9" + ], + "gameEntities":[ + [ + "b45a5a0a21124c0cba28167094c94358.16", + 1385771544876, + { + "level":6, + "title":"The Woodstock", + "image":"http://lh5.ggpht.com/V9lHY1dF8Ml_ygQ4Cc3uEDlgJ_37JsrObyYST4AXdIWmS_3VUgsM2MucS3Ke6ke__6Q7YN9bZ5l1gZk2LqSYTQ", + "resCount":8, + "latE6":51514310, + "health":80.0, + "team":"RESISTANCE", + "lngE6":-147665, + "type":"portal" + } + ], + [ + "2f86b199c523422f8166ef915bdb1b70.16", + 1385767610408, + { + "level":7, + "title":"Bond Street Station", + "image":"http://lh3.ggpht.com/_TK-XP1k9fPPeoDw_Zfml_2MLfHg1deEvh0gw5trLJlVrzREoQM_9AQtFYMDxXDwU9LPr72O-wBplIMBej0", + "resCount":8, + "latE6":51514228, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-149462, + "type":"portal" + } + ], + [ + "f177fead235c40a3a59e5f95afe7a330.12", + 1385743422896, + { + "level":4, + "title":"Nymph, (1973) by Emilio Greco ", + "image":"http://www.panoramio.com/photos/small/64749002.jpg", + "resCount":8, + "latE6":51510149, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-149267, + "type":"portal" + } + ], + [ + "56d5b86428c84aadac0d6214eff81f60.11", + 1385754907692, + { + "level":5, + "title":"Mayfair Post Office, London", + "image":"http://lh5.ggpht.com/5963D4ATz31LG-zWuPSWrdUKqq_u09-C-GNcyNd6vH1isg7PQjax2niQ5LbZfAwnjnB4DJITWbfuGeMH0MnDqThnmI_CNWIQ2euXk8Cwjls0yXO88A", + "resCount":8, + "latE6":51511550, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-148266, + "type":"portal" + } + ], + [ + "223a3fff9f5d4efc970c695477ac8d87.16", + 1385764358922, + { + "level":6, + "title":"1973 Style Architecture", + "image":"http://lh6.ggpht.com/hGydr4PDJmuhbySOZUWLv2O9fvWl6wwQATolBzk7kHHZfHAKGRCacXiDD8Dw2GL9ISSdOYCisfQYsLNCRJc", + "resCount":8, + "latE6":51515621, + "health":82.0, + "team":"RESISTANCE", + "lngE6":-149112, + "type":"portal" + } + ], + [ + "de3370c1f7e04e31b7800d55c641298a.12", + 1385767699010, + { + "level":6, + "title":"Selfridges, Oxford Street, Cit", + "image":"http://www.panoramio.com/photos/small/22779690.jpg", + "resCount":8, + "latE6":51514055, + "health":94.0, + "team":"RESISTANCE", + "lngE6":-152918, + "type":"portal" + } + ], + [ + "e0b231367a5b44459091f8722b9e451f.16", + 1385764212592, + { + "level":6, + "title":"Selfridges", + "image":"http://lh4.ggpht.com/My1WDqCj71Jy1hg4Ak3nSZU5qK5hcm0xQD4MIQfkZERkV2ET9lpF7y-ziX37nGqQsWMbEXVlRkhcSz931Xw", + "resCount":8, + "latE6":51514235, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-153814, + "type":"portal" + } + ], + [ + "52b33d95998045eba2545349588b56db.11", + 1385743621600, + { + "level":4, + "title":"The Bronze Guardian", + "image":"http://lh6.ggpht.com/Pm2dAL5Pb1fiC2TCI400F4PMVw78tRSf-aJlHdq4uI8JgJCwxkqu_IP6b-6wwoyMo7sKf-71EnS5Gy5F8WWM0AigJM_qn81YxIrP8l8jXZvuFhXE", + "resCount":8, + "latE6":51511295, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-150095, + "type":"portal" + } + ], + [ + "0799e2b9a84d4573b1e633f480b457ad.12", + 1385767685166, + { + "level":6, + "title":"Statue", + "image":"http://www.panoramio.com/photos/small/8539483.jpg", + "resCount":8, + "latE6":51514061, + "health":97.0, + "team":"RESISTANCE", + "lngE6":-152679, + "type":"portal" + } + ], + [ + "7fdc9960ccf946a3bf6cc62fb38ee141.12", + 1385767664719, + { + "level":6, + "title":"Woman with Lens", + "image":"http://www.panoramio.com/photos/small/33950443.jpg", + "resCount":8, + "latE6":51514211, + "health":97.0, + "team":"RESISTANCE", + "lngE6":-151942, + "type":"portal" + } + ], + [ + "fecb59b9a1f342d88a767bfefbd98e2b.16", + 1385754999512, + { + "level":5, + "title":"Claridge's", + "image":"http://lh6.ggpht.com/Nw_AUCmV6y_6UszJGrSLm1Fhj2mGWeQ7jjY124RdcUjN_yfvwX-0U6D6yY2DLBsAke__7A00ykRl1uavUOs0aw", + "resCount":8, + "latE6":51512712, + "health":87.0, + "team":"ENLIGHTENED", + "lngE6":-147804, + "type":"portal" + } + ], + [ + "457d81eba6f542a1983154ec61155239.16", + 1385760142640, + { + "level":6, + "title":"Carmen Miranda ", + "image":"http://lh3.ggpht.com/JCRUB71vlORT2IkrFhZ803SJ1EGTLKs1H-4jkUbWadNKpNrzCAVDEuMI1Ub0yrrhwNhNvHdXpmZ2njiZZ0E2wA", + "resCount":8, + "latE6":51515313, + "health":93.0, + "team":"RESISTANCE", + "lngE6":-152044, + "type":"portal" + } + ], + [ + "df187c57c94a47c39aeec2b9854724f9.16", + 1385761557899, + { + "level":6, + "title":"Barrett Square", + "image":"http://lh6.ggpht.com/C91k6VHs3bxfRTpt4046HWIvhZ3xxAvAIF36vT071VPTSwQ_Zi2tYPGAOaXMxnZmv6hgZV2lBum1TYPzPIo", + "resCount":8, + "latE6":51515117, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-150129, + "type":"portal" + } + ], + [ + "b0724f57f3534c3ca647fbdadcb3b408.16", + 1385721137699, + { + "level":5, + "title":"The Pontefract Castle Pub", + "image":"http://lh4.ggpht.com/8oYf2urEldFWyBLDXYtU11r9mNSm2J3u88WlLH1eripfkz6EqpmiCm-3HpqykM90PtspbEKLjqBtGze85wfQ", + "resCount":8, + "latE6":51515968, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-150665, + "type":"portal" + } + ], + [ + "c48c85f57ec044389f5a65679acfca98.16", + 1385743552045, + { + "level":4, + "title":"Timothy Tylor Gallery", + "image":"http://lh6.ggpht.com/84uqRaxPzU7l_LhUNsbh97N83zlSV5ThiZGgRFJipd6KCCzCacGcqqAv6e_DPUILAOeDI8dT0WqlQ2YQgso", + "resCount":8, + "latE6":51510464, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-149713, + "type":"portal" + } + ], + [ + "14eb22dca46e4f8dbb8ce7f592bdb148.16", + 1385750177159, + { + "level":5, + "title":"Brown Hart Gardens", + "image":"http://lh3.ggpht.com/2enF22Geg0ZgY2UlmR0wFTJWbPIhEjPH19h6EWIOQpXEtJi-t5g3PPKYZaiYkApye78azm_KM4mgHkDek22N", + "resCount":8, + "latE6":51513222, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-151021, + "type":"portal" + } + ], + [ + "918f7edeaf1b4083947957bc4e7bc130.16", + 1385750348929, + { + "level":5, + "title":"Kings Weigh House Chapel", + "image":"http://lh5.ggpht.com/_g-DbjI00VXocuDBq3EGO8DRp68OhBAsz-la_jQ-HLWpb7obx94tnb7ee-kX6Hpz7v98aIzAkGXZsw5MI1uj", + "resCount":8, + "latE6":51513410, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-150435, + "type":"portal" + } + ], + [ + "0a5e340f186d4aaca7904fbe5a3feba7.16", + 1385758229016, + { + "level":5, + "title":"Devonshire Arms", + "image":"http://lh6.ggpht.com/DZAuRhOCJQF_NwqBNNIRdmhTXZP8-WbH7HvlDqdUSHZt74eZKfA3hjdbbQJeklvgWfgvyipyWnpZDBvpMqxE", + "resCount":8, + "latE6":51516152, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-152271, + "type":"portal" + } + ], + [ + "ffcded7f2a3d4672ab326efe8ebc7087.16", + 1385726673133, + { + "level":5, + "title":"Grief is the Price we Pay for Love", + "image":"http://lh4.ggpht.com/0pjcogJaUdtje7QvQ5hOlibqxm5SnkFIupjnWt2SNJrZMkNu9VK5GZB2tF1IvglKAey3e5Gluz96o2LwdOvo", + "resCount":8, + "latE6":51511686, + "health":68.0, + "team":"RESISTANCE", + "lngE6":-150364, + "type":"portal" + } + ], + [ + "07fcfa63452f4c9d91f69fff8e1ea895.b", + 1385656796544, + { + "points":[ + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + }, + { + "lngE6":-153814, + "guid":"e0b231367a5b44459091f8722b9e451f.16", + "latE6":51514235 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "df982344b2cc44d8bce231d9f65ecab9.b", + 1385750349253, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-150435, + "guid":"918f7edeaf1b4083947957bc4e7bc130.16", + "latE6":51513410 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "864ab7bba0b649b980117b3ec898b87d.b", + 1385771545394, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-147665, + "guid":"b45a5a0a21124c0cba28167094c94358.16", + "latE6":51514310 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "8cd4001937dd470ea211ada9b06a7efe.b", + 1385576637363, + { + "points":[ + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "20ea3abd89b4439d801774ff40a100de.b", + 1385632231155, + { + "points":[ + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "eb38ce937b5145158149398ef0291744.b", + 1385472014804, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "b33b049eaf5d4c1587d4c595df2b5113.b", + 1385473816596, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-147665, + "guid":"b45a5a0a21124c0cba28167094c94358.16", + "latE6":51514310 + }, + { + "lngE6":-141839, + "guid":"33fe90d0a2d04d0db47002285eaf2766.11", + "latE6":51514260 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "300bd7037aae4a8890f450d1b6732f04.b", + 1385645776587, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + }, + { + "lngE6":-151762, + "guid":"ca57ec9edce1494eb28da06226772cd6.11", + "latE6":51517935 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "cc1eea50fae04713b4d782b999b8e4e3.b", + 1385754891759, + { + "points":[ + { + "lngE6":-148266, + "guid":"56d5b86428c84aadac0d6214eff81f60.11", + "latE6":51511550 + }, + { + "lngE6":-145113, + "guid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "latE6":51510216 + }, + { + "lngE6":-145506, + "guid":"bfcb133c0f3a43909be288eb27cf5968.16", + "latE6":51509664 + } + ], + "type":"region", + "team":"ENLIGHTENED" + } + ], + [ + "1dcca72cb3d3463f9f6367af60a966d3.b", + 1385576765160, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-151951, + "guid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "latE6":51516526 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "56f5ccb7bfe0407e811efd729ed98e8e.b", + 1385646897670, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-152943, + "guid":"66ec22e29ac84a828d7203535c1f50c5.11", + "latE6":51517188 + }, + { + "lngE6":-151951, + "guid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "latE6":51516526 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "3259bf135edc4f10b9b5ec64c8e55614.b", + 1385661945578, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "22a4c0cf2c604900997f6bd1d9fa018f.b", + 1385654637424, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "9574a736bf1b4f66ab4113e59a63641a.b", + 1385647122053, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "b148dfde41eb4ea3b6e5bf67adf2ccd7.b", + 1385645776197, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "25a180b49d5a4b3e990bfe69dd9ad175.b", + 1385750177389, + { + "points":[ + { + "lngE6":-151021, + "guid":"14eb22dca46e4f8dbb8ce7f592bdb148.16", + "latE6":51513222 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + }, + { + "lngE6":-150435, + "guid":"918f7edeaf1b4083947957bc4e7bc130.16", + "latE6":51513410 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "be9218a7d2974d7f94abcfd6717a7ea0.b", + 1385655632013, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-153814, + "guid":"e0b231367a5b44459091f8722b9e451f.16", + "latE6":51514235 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "6d9844ff0a7d4952a5234d028fc0f1a4.b", + 1385576791017, + { + "points":[ + { + "lngE6":-151951, + "guid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "latE6":51516526 + }, + { + "lngE6":-151762, + "guid":"ca57ec9edce1494eb28da06226772cd6.11", + "latE6":51517935 + }, + { + "lngE6":-150665, + "guid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "latE6":51515968 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "7826a01ffac541a7b6e2b956bc79fb11.b", + 1385369651793, + { + "points":[ + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "e473867e537548f0820953e8d1c606c8.9", + 1385576637363, + { + "oLatE6":51515117, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-150129 + } + ], + [ + "960b4636ecc841ba804190843f715129.9", + 1385645776587, + { + "oLatE6":51515968, + "dLatE6":51517935, + "dLngE6":-151762, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"ca57ec9edce1494eb28da06226772cd6.11", + "oLngE6":-150665 + } + ], + [ + "88844953ecf54149b7feb988910854ae.9", + 1385661945578, + { + "oLatE6":51514211, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-151942 + } + ], + [ + "a8084dcd0d1644499f0819adfcea1e96.9", + 1385771545394, + { + "oLatE6":51514228, + "dLatE6":51516368, + "dLngE6":-148230, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"0cb8844196c240dfa79652a452934a15.11", + "oLngE6":-149462 + } + ], + [ + "c07098ef45ca45a5a4456d735f44241e.9", + 1385645776197, + { + "oLatE6":51515968, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-150665 + } + ], + [ + "c9c4ecc18ac24163bb937b86b48902dc.9", + 1385754891759, + { + "oLatE6":51511550, + "dLatE6":51510216, + "dLngE6":-145113, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "oLngE6":-148266 + } + ], + [ + "7072c39f925f421baffb1e4bf60b02f1.9", + 1385647122053, + { + "oLatE6":51515968, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-150665 + } + ], + [ + "56a544e2c35d432aafdaaed99ad292dc.9", + 1385576791017, + { + "oLatE6":51515968, + "dLatE6":51516526, + "dLngE6":-151951, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "oLngE6":-150665 + } + ], + [ + "353fc49fb4b84e8c912b47685cdd17de.9", + 1385577901773, + { + "oLatE6":51514260, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-141839 + } + ], + [ + "531eef40d5184c58b84bdcf771477f08.9", + 1385647122053, + { + "oLatE6":51515968, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-150665 + } + ], + [ + "8e9ed368792d40d2aaa612f87348796b.9", + 1385750720448, + { + "oLatE6":51516681, + "dLatE6":51519513, + "dLngE6":-151818, + "team":"RESISTANCE", + "oGuid":"664552e088c24cda86826caf02a8f24b.16", + "type":"edge", + "dGuid":"bb2257f8954f4cb282b1a716dbf1b770.16", + "oLngE6":-160516 + } + ], + [ + "5d534086399a44869cdbbe5d4db58d02.9", + 1385750177389, + { + "oLatE6":51513222, + "dLatE6":51514211, + "dLngE6":-151942, + "team":"RESISTANCE", + "oGuid":"14eb22dca46e4f8dbb8ce7f592bdb148.16", + "type":"edge", + "dGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "oLngE6":-151021 + } + ], + [ + "1babe6042ab9447fab0d9bb7affb83b8.9", + 1385771545394, + { + "oLatE6":51514310, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"b45a5a0a21124c0cba28167094c94358.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-147665 + } + ], + [ + "35d4550a08264d9b811a6f94d4a30791.9", + 1385541248130, + { + "oLatE6":51509979, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-136298 + } + ], + [ + "950770189d6844e8a0d5e62ca41d6dbd.9", + 1385654637424, + { + "oLatE6":51515117, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-150129 + } + ], + [ + "facef6508e7849a0921ad64778b45aac.9", + 1385754999512, + { + "oLatE6":51512712, + "dLatE6":51509347, + "dLngE6":-143285, + "team":"ENLIGHTENED", + "oGuid":"fecb59b9a1f342d88a767bfefbd98e2b.16", + "type":"edge", + "dGuid":"c59d1196b63b490ba209e13507e9e782.16", + "oLngE6":-147804 + } + ], + [ + "cd329776e961475d9498717a64d9d3a5.9", + 1385661945578, + { + "oLatE6":51515313, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-152044 + } + ], + [ + "d893ca4f164147dfaca88099a19596d7.9", + 1385750177389, + { + "oLatE6":51513410, + "dLatE6":51513222, + "dLngE6":-151021, + "team":"RESISTANCE", + "oGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "type":"edge", + "dGuid":"14eb22dca46e4f8dbb8ce7f592bdb148.16", + "oLngE6":-150435 + } + ], + [ + "08bca6bd59d5449da1e9d1dbf684206c.9", + 1385656796544, + { + "oLatE6":51514211, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-151942 + } + ], + [ + "075f2d3dee0a40079cc8c5c2201b5761.9", + 1385645776197, + { + "oLatE6":51516368, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-148230 + } + ], + [ + "36f2a3e8aa4f4ceb83199a01a744ed58.9", + 1385074105982, + { + "oLatE6":51514228, + "dLatE6":51511686, + "dLngE6":-150364, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"ffcded7f2a3d4672ab326efe8ebc7087.16", + "oLngE6":-149462 + } + ], + [ + "0dda932fd46845cb9bfff99beb77d40c.9", + 1385750349253, + { + "oLatE6":51514228, + "dLatE6":51513410, + "dLngE6":-150435, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "oLngE6":-149462 + } + ], + [ + "8bf312c35efe44aea3e5a021e8d302df.9", + 1385751185290, + { + "oLatE6":51514235, + "dLatE6":51513607, + "dLngE6":-157821, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"2f3ae2cc96b44d4087abb3ecabdfd31a.11", + "oLngE6":-153814 + } + ], + [ + "af059f4640fd4f978054cdeb6f998e9f.9", + 1385472014804, + { + "oLatE6":51514228, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-149462 + } + ], + [ + "dd3b4868cb74469aa69399b775ff8e48.9", + 1385754891759, + { + "oLatE6":51511550, + "dLatE6":51509664, + "dLngE6":-145506, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "oLngE6":-148266 + } + ], + [ + "bfb5cb65dc794a9f88b38fd7c01beb94.9", + 1385570845263, + { + "oLatE6":51511295, + "dLatE6":51510464, + "dLngE6":-149713, + "team":"RESISTANCE", + "oGuid":"52b33d95998045eba2545349588b56db.11", + "type":"edge", + "dGuid":"c48c85f57ec044389f5a65679acfca98.16", + "oLngE6":-150095 + } + ], + [ + "f94c4edb49574eb2998c500e5fd3e240.9", + 1385645776587, + { + "oLatE6":51516368, + "dLatE6":51515968, + "dLngE6":-150665, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "oLngE6":-148230 + } + ], + [ + "d4386f98b5364b86a912dcdaf5414765.9", + 1385570774718, + { + "oLatE6":51510464, + "dLatE6":51510149, + "dLngE6":-149267, + "team":"RESISTANCE", + "oGuid":"c48c85f57ec044389f5a65679acfca98.16", + "type":"edge", + "dGuid":"f177fead235c40a3a59e5f95afe7a330.12", + "oLngE6":-149713 + } + ], + [ + "4d62b712ce2046d59358580344ee9201.9", + 1385646897670, + { + "oLatE6":51516526, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-151951 + } + ], + [ + "34033d8241624e47b80ef51bad412e3c.9", + 1385613893144, + { + "oLatE6":51503124, + "dLatE6":51515254, + "dLngE6":-168579, + "team":"RESISTANCE", + "oGuid":"94762abecaa34116a18166df417372e3.16", + "type":"edge", + "dGuid":"0d9d4cbcd478488cb44433a373659221.11", + "oLngE6":-150071 + } + ], + [ + "815c060444f6499daba9392dd4b51593.9", + 1385655632013, + { + "oLatE6":51516152, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-152271 + } + ], + [ + "50cd58e832fe46cda7577b87ec72dcf9.9", + 1385060925958, + { + "oLatE6":51516681, + "dLatE6":51522749, + "dLngE6":-155157, + "team":"RESISTANCE", + "oGuid":"664552e088c24cda86826caf02a8f24b.16", + "type":"edge", + "dGuid":"0eabb23fbd244c8cb8372f42780f5da1.16", + "oLngE6":-160516 + } + ], + [ + "c7a75d873d494998885f9e05ec88e916.9", + 1385750349253, + { + "oLatE6":51514211, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-151942 + } + ], + [ + "1b0ff1e100f34485a913ce54712ffec0.9", + 1385771545394, + { + "oLatE6":51516368, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-148230 + } + ], + [ + "d25fa85590584d49a1bee2e48f11db15.9", + 1385646897670, + { + "oLatE6":51517188, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"66ec22e29ac84a828d7203535c1f50c5.11", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-152943 + } + ], + [ + "961a8eaeaae34d479531049295206aa0.9", + 1385656796544, + { + "oLatE6":51515313, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-152044 + } + ], + [ + "bcf14bd9d1e040669e83c6a0995b926d.9", + 1385750349253, + { + "oLatE6":51513410, + "dLatE6":51514211, + "dLngE6":-151942, + "team":"RESISTANCE", + "oGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "type":"edge", + "dGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "oLngE6":-150435 + } + ], + [ + "d5c020fbac984e379f0ee70ba62f89ba.9", + 1385632231155, + { + "oLatE6":51515968, + "dLatE6":51515117, + "dLngE6":-150129, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "oLngE6":-150665 + } + ], + [ + "6cefb2cfe7094e95b35fdb2b87e45bb6.9", + 1385655632013, + { + "oLatE6":51514235, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-153814 + } + ], + [ + "be6d0d6f91184e23805bfb24fd969255.9", + 1385654637424, + { + "oLatE6":51515117, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-150129 + } + ], + [ + "17c382d2af024bf79999e01bc4f8323e.9", + 1385473818025, + { + "oLatE6":51514260, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-141839 + } + ], + [ + "36f2a3e8aa4f4ceb83199a01a744ed58.9", + 0, + { + "oLatE6":51514228, + "dLatE6":51511686, + "dLngE6":-150364, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"ffcded7f2a3d4672ab326efe8ebc7087.16", + "oLngE6":-149462 + } + ], + [ + "531eef40d5184c58b84bdcf771477f08.9", + 0, + { + "oLatE6":51515968, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-150665 + } + ], + [ + "be6d0d6f91184e23805bfb24fd969255.9", + 0, + { + "oLatE6":51515117, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-150129 + } + ], + [ + "bfb5cb65dc794a9f88b38fd7c01beb94.9", + 0, + { + "oLatE6":51511295, + "dLatE6":51510464, + "dLngE6":-149713, + "team":"RESISTANCE", + "oGuid":"52b33d95998045eba2545349588b56db.11", + "type":"edge", + "dGuid":"c48c85f57ec044389f5a65679acfca98.16", + "oLngE6":-150095 + } + ], + [ + "d5c020fbac984e379f0ee70ba62f89ba.9", + 0, + { + "oLatE6":51515968, + "dLatE6":51515117, + "dLngE6":-150129, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "oLngE6":-150665 + } + ], + [ + "950770189d6844e8a0d5e62ca41d6dbd.9", + 0, + { + "oLatE6":51515117, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-150129 + } + ], + [ + "88844953ecf54149b7feb988910854ae.9", + 0, + { + "oLatE6":51514211, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-151942 + } + ], + [ + "5d534086399a44869cdbbe5d4db58d02.9", + 0, + { + "oLatE6":51513222, + "dLatE6":51514211, + "dLngE6":-151942, + "team":"RESISTANCE", + "oGuid":"14eb22dca46e4f8dbb8ce7f592bdb148.16", + "type":"edge", + "dGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "oLngE6":-151021 + } + ], + [ + "c7a75d873d494998885f9e05ec88e916.9", + 0, + { + "oLatE6":51514211, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-151942 + } + ], + [ + "08bca6bd59d5449da1e9d1dbf684206c.9", + 0, + { + "oLatE6":51514211, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-151942 + } + ], + [ + "af059f4640fd4f978054cdeb6f998e9f.9", + 0, + { + "oLatE6":51514228, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-149462 + } + ], + [ + "c07098ef45ca45a5a4456d735f44241e.9", + 0, + { + "oLatE6":51515968, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-150665 + } + ], + [ + "6cefb2cfe7094e95b35fdb2b87e45bb6.9", + 0, + { + "oLatE6":51514235, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-153814 + } + ], + [ + "815c060444f6499daba9392dd4b51593.9", + 0, + { + "oLatE6":51516152, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-152271 + } + ], + [ + "7072c39f925f421baffb1e4bf60b02f1.9", + 0, + { + "oLatE6":51515968, + "dLatE6":51515313, + "dLngE6":-152044, + "team":"RESISTANCE", + "oGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "type":"edge", + "dGuid":"457d81eba6f542a1983154ec61155239.16", + "oLngE6":-150665 + } + ], + [ + "961a8eaeaae34d479531049295206aa0.9", + 0, + { + "oLatE6":51515313, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-152044 + } + ], + [ + "e473867e537548f0820953e8d1c606c8.9", + 0, + { + "oLatE6":51515117, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-150129 + } + ], + [ + "1babe6042ab9447fab0d9bb7affb83b8.9", + 0, + { + "oLatE6":51514310, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"b45a5a0a21124c0cba28167094c94358.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-147665 + } + ], + [ + "0dda932fd46845cb9bfff99beb77d40c.9", + 0, + { + "oLatE6":51514228, + "dLatE6":51513410, + "dLngE6":-150435, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "oLngE6":-149462 + } + ], + [ + "d893ca4f164147dfaca88099a19596d7.9", + 0, + { + "oLatE6":51513410, + "dLatE6":51513222, + "dLngE6":-151021, + "team":"RESISTANCE", + "oGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "type":"edge", + "dGuid":"14eb22dca46e4f8dbb8ce7f592bdb148.16", + "oLngE6":-150435 + } + ], + [ + "bcf14bd9d1e040669e83c6a0995b926d.9", + 0, + { + "oLatE6":51513410, + "dLatE6":51514211, + "dLngE6":-151942, + "team":"RESISTANCE", + "oGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "type":"edge", + "dGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "oLngE6":-150435 + } + ], + [ + "cd329776e961475d9498717a64d9d3a5.9", + 0, + { + "oLatE6":51515313, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-152044 + } + ], + [ + "d4386f98b5364b86a912dcdaf5414765.9", + 0, + { + "oLatE6":51510464, + "dLatE6":51510149, + "dLngE6":-149267, + "team":"RESISTANCE", + "oGuid":"c48c85f57ec044389f5a65679acfca98.16", + "type":"edge", + "dGuid":"f177fead235c40a3a59e5f95afe7a330.12", + "oLngE6":-149713 + } + ] + ] + }, + "1_32741_21790":{ + "deletedGameEntityGuids":[ + "7501732989dc4004a86bd4495b664bbd.b", + "a45d224cc1444899ace43ef43c80ab99.b", + "4c4c4b38f8644894b60e957267b6bc4f.b", + "5c63ea938f514e25896b8a2aa39f0692.b", + "3e18aa91165c4a458f22f27636c48395.b", + "6075a26765cc4506af66416517947257.b", + "d848629d72484e199610a80d43b66df3.b", + "899d065260bd4464a376e38ada55d2de.b", + "aaf70c9729154c13aa5f847c9491dde5.9", + "c72ecd698da74ea5a0a0053ec881c6b8.9", + "35caa62f29f0411abdc34a34d0b7cc90.9", + "0f761122f9cd4b4388236f43128a4c86.9", + "59fb111a05d141c884b4e705e8c1ab5c.9", + "6673ac2a0c424d5c90af4ab198d546a6.9", + "1c6757b1666c4e6dab984a261f338fa5.9", + "8f7f2f96910a4fcb90be57c9ea8c1a31.9", + "d7c8741cfc304a61a2e1c837b17708ee.9", + "e92971f8778d4942bb7dd783d7cc4a34.9", + "21d7d3e12e734538a948ec544eb867ba.9", + "3df7b5434a0a4e158b7a0e0fa81327d8.9", + "903ca96311db4bde8a0f8239273f49d3.9", + "1b31d5d4792241c487c3f55a063c7b3d.9", + "83fd455452ad4d72a6dec3b444fc20a7.9", + "94c7e110d8fb43f1a78867cf61ff64f1.9" + ], + "gameEntities":[ + [ + "b45a5a0a21124c0cba28167094c94358.16", + 1385771544876, + { + "level":6, + "title":"The Woodstock", + "image":"http://lh5.ggpht.com/V9lHY1dF8Ml_ygQ4Cc3uEDlgJ_37JsrObyYST4AXdIWmS_3VUgsM2MucS3Ke6ke__6Q7YN9bZ5l1gZk2LqSYTQ", + "resCount":8, + "latE6":51514310, + "health":80.0, + "team":"RESISTANCE", + "lngE6":-147665, + "type":"portal" + } + ], + [ + "c496bb33b1864e26be9d0b6e21535917.16", + 1385753624901, + { + "level":4, + "title":"Royal College of Nursing - Library", + "image":"http://lh6.ggpht.com/tY8biSicll6V57lPtexAQHeknl16OwVlrDJp5ek1G6bLiD7DBQ75mFlzGkEO7bPGhnQdoPlBKs-mg697EPFGfg", + "resCount":8, + "latE6":51515986, + "health":51.0, + "team":"ENLIGHTENED", + "lngE6":-145696, + "type":"portal" + } + ], + [ + "51502606f12c4eaebef135ac5e48c751.16", + 1385766074861, + { + "level":6, + "title":"Regent Arcade House", + "image":"http://lh4.ggpht.com/Q7tg8F9zDIAq9J5d9sJxbG6iFPsd3pkB8AvuAMZsqRmnQLUSo2E7ukxA175I4sT8sS1u3j8pBw_SUF-CtVRC", + "resCount":8, + "latE6":51514835, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-141049, + "type":"portal" + } + ], + [ + "bfcb133c0f3a43909be288eb27cf5968.16", + 1385754880940, + { + "level":5, + "title":"Pilgrim of the Future ", + "image":"http://lh6.ggpht.com/3I0TAOcR9NTABhLJojUbkXK-WxMPbBf7erlk_upuqhS9GR31fTiUxAGzJ2CsUmmjUWkS3YDAeuE1vj2weuqA", + "resCount":8, + "latE6":51509664, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-145506, + "type":"portal" + } + ], + [ + "2f86b199c523422f8166ef915bdb1b70.16", + 1385767610408, + { + "level":7, + "title":"Bond Street Station", + "image":"http://lh3.ggpht.com/_TK-XP1k9fPPeoDw_Zfml_2MLfHg1deEvh0gw5trLJlVrzREoQM_9AQtFYMDxXDwU9LPr72O-wBplIMBej0", + "resCount":8, + "latE6":51514228, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-149462, + "type":"portal" + } + ], + [ + "01960f90a13c4259b2921bec1fb45b2c.11", + 1385733727598, + { + "level":1, + "title":"Hanover Square - William Pitt Statue", + "image":"http://lh3.ggpht.com/wcExZAABxyfYUUIPMBj5b2Pj7m6Po2jsB3KcpVcxOqEvHj10Fm8yqFehqDtMPqMnT3LnxNQepEK4oDPtNOZZvvilxySX5M0csKbia27jSxM66Qo", + "resCount":1, + "latE6":51513667, + "health":28.0, + "team":"RESISTANCE", + "lngE6":-143707, + "type":"portal" + } + ], + [ + "764aeb38065b47d992e843d4ae77d15d.11", + 1385731498399, + { + "level":3, + "title":"Vogue House, Hanover Square", + "image":"http://lh5.ggpht.com/09fmmo18-rIqt8iYFU9EM1gZefNWBefvOtVahOhxuG0IEweJzI0BUnMfTGejSFc7yVDCCwG1KvW4tjjyum4sr8M_GHy5DYbDfncRQM9X0Zhdhvw", + "resCount":5, + "latE6":51513462, + "health":32.0, + "team":"RESISTANCE", + "lngE6":-143165, + "type":"portal" + } + ], + [ + "dbbfe3f544af4659ad4a7388fa77e3d5.12", + 1385753715962, + { + "level":2, + "title":"One Hanover Street", + "image":"http://www.panoramio.com/photos/small/40971120.jpg", + "resCount":8, + "latE6":51513839, + "health":69.0, + "team":"ENLIGHTENED", + "lngE6":-142541, + "type":"portal" + } + ], + [ + "f693d048db644bd6ab10f8f332cdc286.16", + 1385731470196, + { + "level":4, + "title":"The Masons Arms - Maddox Street", + "image":"http://lh5.ggpht.com/prSa1VQdjkf5wdh2ZmU3Wo26eAuOXTuGTSqcxUvQl63bDuZp7mWFATRScaNn1CXzJV4eVVHfkjxPdYwVVPaqxACLmj7zgTx2x48HlBhsHx3fz0OIkw", + "resCount":5, + "latE6":51512787, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-142613, + "type":"portal" + } + ], + [ + "dc2192d231d147f3aa8fb4b7c060bd5b.16", + 1385747494378, + { + "level":6, + "title":"Roman Helmet ", + "image":"http://lh6.ggpht.com/3gck_cCKPIBTAryREX51u9e_E3t_QcH912ri-g9wwufOSmmXdWLsVAlWdeF9t_TcNvh3jlpZQ4ZPIAtpDsM2", + "resCount":8, + "latE6":51514440, + "health":55.0, + "team":"RESISTANCE", + "lngE6":-141353, + "type":"portal" + } + ], + [ + "56d5b86428c84aadac0d6214eff81f60.11", + 1385754907692, + { + "level":5, + "title":"Mayfair Post Office, London", + "image":"http://lh5.ggpht.com/5963D4ATz31LG-zWuPSWrdUKqq_u09-C-GNcyNd6vH1isg7PQjax2niQ5LbZfAwnjnB4DJITWbfuGeMH0MnDqThnmI_CNWIQ2euXk8Cwjls0yXO88A", + "resCount":8, + "latE6":51511550, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-148266, + "type":"portal" + } + ], + [ + "2736d95c14834f49963dcd1ac6d20e1f.16", + 1385754511911, + { + "level":5, + "title":"Ideka Japanese Restaurant ", + "image":"http://lh4.ggpht.com/KHVquwazmQ3QAkW_5N9AN6fpKVvF1yBSmWu6KWsgJX7BRKMzUbvAcwYngG7dHGBBpc_P-YJRk4N-fxMONHDr", + "resCount":8, + "latE6":51513092, + "health":26.0, + "team":"ENLIGHTENED", + "lngE6":-146417, + "type":"portal" + } + ], + [ + "cdd3a54085a547f2a7320af688888f09.16", + 1385748399688, + { + "level":1, + "title":"Browns Bar", + "image":"http://lh4.ggpht.com/Dv6lYs0UMXlGklEJhtQNE4q_35ZkQooCtaK13ZOyJUAWEMvOLsJY24ZGkUhljiAeZsdsh916b4tDb8CGcSE", + "resCount":3, + "latE6":51512414, + "health":25.0, + "team":"ENLIGHTENED", + "lngE6":-143827, + "type":"portal" + } + ], + [ + "a3cd224132f544e99255cdab6b67c8e0.16", + 1385730711985, + { + "level":4, + "title":"Fine Art Society", + "image":"http://lh4.ggpht.com/yC-itqa1j9kIZISezpUyPXG5WGZi9Uv43Ssrw-bcqGO2DYsPYytAzgvAOtkddKXHKa0ombb27dnKWnskErLc", + "resCount":6, + "latE6":51511319, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-143617, + "type":"portal" + } + ], + [ + "1de1c2d0294148be8e0b739d1f6972f1.12", + 1385767545111, + { + "level":5, + "title":"Winged Figure. Barbara Hepwort", + "image":"http://www.panoramio.com/photos/small/33956036.jpg", + "resCount":8, + "latE6":51515127, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-144415, + "type":"portal" + } + ], + [ + "a0c12b7e99e742859b793017bbbdeb18.16", + 1385732881055, + { + "level":4, + "title":"Fancy Bear in the Brooks", + "image":"http://lh5.ggpht.com/ulCo8yUxWkgd92xDC3HEN9YqINAuDYLKe5MbHqcICXl7RmssBMXnOQ0qJ1XDZ3Mo-G3QKzGsvuRbPOo5RZze", + "resCount":8, + "latE6":51512467, + "health":67.0, + "team":"ENLIGHTENED", + "lngE6":-146070, + "type":"portal" + } + ], + [ + "8a094798b0a54b9d81cc2992edbd53e1.11", + 1385754891279, + { + "level":5, + "title":"Queen Elizabeth II Birth Plaque", + "image":"http://lh6.ggpht.com/_aGA3Fy3w5Av-3hXbzyQ_yBKUG2IR0h0wtibr5NZwqVQ1qkRjOBDuyIj0fJdqcLvve_kfuoW7zj1MyXZ4TrQqGvBEQcp_sHmFB8z95MHEN3TNxaRFA", + "resCount":8, + "latE6":51510216, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-145113, + "type":"portal" + } + ], + [ + "fecb59b9a1f342d88a767bfefbd98e2b.16", + 1385754999512, + { + "level":5, + "title":"Claridge's", + "image":"http://lh6.ggpht.com/Nw_AUCmV6y_6UszJGrSLm1Fhj2mGWeQ7jjY124RdcUjN_yfvwX-0U6D6yY2DLBsAke__7A00ykRl1uavUOs0aw", + "resCount":8, + "latE6":51512712, + "health":87.0, + "team":"ENLIGHTENED", + "lngE6":-147804, + "type":"portal" + } + ], + [ + "65854ea080ad4c47af9a846bd2157a32.11", + 1385754050543, + { + "level":2, + "title":"1930s Red Telephone Box", + "image":"http://lh3.ggpht.com/Hqf1WDZsfcQFfh4Aj7gXyD7IJ1clxZAKqI14vwGp-44pH0kORC-enFJKHOJ2fjWnRB22YoEXswPVwNzxregOLX1sigE-zBwjJBWKncqRXqjoFZ4", + "resCount":8, + "latE6":51513771, + "health":73.0, + "team":"ENLIGHTENED", + "lngE6":-143224, + "type":"portal" + } + ], + [ + "3c54417b68c84dd387cd67765d6e3703.12", + 1385757386511, + { + "level":5, + "title":"Seven Seas Maritime: Fish Scul", + "image":"http://www.panoramio.com/photos/small/64747011.jpg", + "resCount":8, + "latE6":51509739, + "health":53.0, + "team":"ENLIGHTENED", + "lngE6":-146652, + "type":"portal" + } + ], + [ + "672ecb2577114bd588551dc257543307.12", + 1385730654159, + { + "level":5, + "title":"Churchill & Roosevelt statue, ", + "image":"http://www.panoramio.com/photos/small/785572.jpg", + "resCount":8, + "latE6":51510385, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-142602, + "type":"portal" + } + ], + [ + "7efd900fbc744812b49aab6d0226d2d1.11", + 1385764455820, + { + "level":2, + "title":"Hanover Square - Fountain", + "image":"http://lh6.ggpht.com/TFBzuUVsAcjfDWCNZAeCFBzdA4h9AOPX5zZQG0z9PKv5t0dpqx4-xPDO3mwTZMFdWeyQRBI4lUJbh-8wreLhGofS1YettJJmx1GQUcHCy5sN2MU", + "resCount":3, + "latE6":51514039, + "health":70.0, + "team":"RESISTANCE", + "lngE6":-143862, + "type":"portal" + } + ], + [ + "33fe90d0a2d04d0db47002285eaf2766.11", + 1385747555742, + { + "level":6, + "title":"Apple Store - Regent Street", + "image":"http://lh3.ggpht.com/UQY7Ckp-hlTVow0Qk6aN64iRUnH6G_8OFQlu96ooS_lslhdt4JnWWlQ2g1Yv_VreqBlJ2o7nznyMhMZwqHxZG12SOPF52Vv_vBnTh9k0bPsqbfR3", + "resCount":8, + "latE6":51514260, + "health":77.0, + "team":"RESISTANCE", + "lngE6":-141839, + "type":"portal" + } + ], + [ + "df982344b2cc44d8bce231d9f65ecab9.b", + 1385750349253, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-150435, + "guid":"918f7edeaf1b4083947957bc4e7bc130.16", + "latE6":51513410 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "864ab7bba0b649b980117b3ec898b87d.b", + 1385771545394, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-147665, + "guid":"b45a5a0a21124c0cba28167094c94358.16", + "latE6":51514310 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "656bd2196d474ee482e26e1e5da0824c.b", + 1385754527834, + { + "points":[ + { + "lngE6":-146652, + "guid":"3c54417b68c84dd387cd67765d6e3703.12", + "latE6":51509739 + }, + { + "lngE6":-143285, + "guid":"c59d1196b63b490ba209e13507e9e782.16", + "latE6":51509347 + }, + { + "lngE6":-144961, + "guid":"b586841bf4ce4acc9c90bed7195572a9.12", + "latE6":51508992 + } + ], + "type":"region", + "team":"ENLIGHTENED" + } + ], + [ + "7b85e3ef2a4b4cf1bedace0b7c1ef464.b", + 1385582249184, + { + "points":[ + { + "lngE6":-141449, + "guid":"05322044531c400fa651cae68b14070f.11", + "latE6":51515259 + }, + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + }, + { + "lngE6":-141353, + "guid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "latE6":51514440 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "127fa78ca3394b568e4769a043b3e7c9.b", + 1385580364098, + { + "points":[ + { + "lngE6":-141449, + "guid":"05322044531c400fa651cae68b14070f.11", + "latE6":51515259 + }, + { + "lngE6":-140773, + "guid":"db954eb71cb949ad94084d790b399fee.16", + "latE6":51514704 + }, + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "eb38ce937b5145158149398ef0291744.b", + 1385472014804, + { + "points":[ + { + "lngE6":-148230, + "guid":"0cb8844196c240dfa79652a452934a15.11", + "latE6":51516368 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "b33b049eaf5d4c1587d4c595df2b5113.b", + 1385473816596, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-147665, + "guid":"b45a5a0a21124c0cba28167094c94358.16", + "latE6":51514310 + }, + { + "lngE6":-141839, + "guid":"33fe90d0a2d04d0db47002285eaf2766.11", + "latE6":51514260 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "cc1eea50fae04713b4d782b999b8e4e3.b", + 1385754891759, + { + "points":[ + { + "lngE6":-148266, + "guid":"56d5b86428c84aadac0d6214eff81f60.11", + "latE6":51511550 + }, + { + "lngE6":-145113, + "guid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "latE6":51510216 + }, + { + "lngE6":-145506, + "guid":"bfcb133c0f3a43909be288eb27cf5968.16", + "latE6":51509664 + } + ], + "type":"region", + "team":"ENLIGHTENED" + } + ], + [ + "3259bf135edc4f10b9b5ec64c8e55614.b", + 1385661945578, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "22a4c0cf2c604900997f6bd1d9fa018f.b", + 1385654637424, + { + "points":[ + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "5f9447c37b9f4d4bbfa47eb053d7fb63.b", + 1385625228075, + { + "points":[ + { + "lngE6":-139979, + "guid":"0497a427aeee443b8a9344f3e42878c5.16", + "latE6":51513159 + }, + { + "lngE6":-141839, + "guid":"33fe90d0a2d04d0db47002285eaf2766.11", + "latE6":51514260 + }, + { + "lngE6":-140950, + "guid":"471691e68499419e9e1a7f90b9d3929f.12", + "latE6":51513861 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "2b465cbe51554b2ebbfea6ba67810c96.b", + 1385582115022, + { + "points":[ + { + "lngE6":-141049, + "guid":"51502606f12c4eaebef135ac5e48c751.16", + "latE6":51514835 + }, + { + "lngE6":-140773, + "guid":"db954eb71cb949ad94084d790b399fee.16", + "latE6":51514704 + }, + { + "lngE6":-140594, + "guid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "latE6":51514522 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "452a0e2451de4b45b0850bf65144083f.b", + 1385740085724, + { + "points":[ + { + "lngE6":-145113, + "guid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "latE6":51510216 + }, + { + "lngE6":-143285, + "guid":"c59d1196b63b490ba209e13507e9e782.16", + "latE6":51509347 + }, + { + "lngE6":-145506, + "guid":"bfcb133c0f3a43909be288eb27cf5968.16", + "latE6":51509664 + } + ], + "type":"region", + "team":"ENLIGHTENED" + } + ], + [ + "7826a01ffac541a7b6e2b956bc79fb11.b", + 1385369651793, + { + "points":[ + { + "lngE6":-149112, + "guid":"223a3fff9f5d4efc970c695477ac8d87.16", + "latE6":51515621 + }, + { + "lngE6":-149462, + "guid":"2f86b199c523422f8166ef915bdb1b70.16", + "latE6":51514228 + }, + { + "lngE6":-150129, + "guid":"df187c57c94a47c39aeec2b9854724f9.16", + "latE6":51515117 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "502381e76870402e9da16405a4cb50df.9", + 1385632734585, + { + "oLatE6":51514260, + "dLatE6":51513462, + "dLngE6":-143165, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"764aeb38065b47d992e843d4ae77d15d.11", + "oLngE6":-141839 + } + ], + [ + "d2cbe4cf824f4f21a55021bcd0d881ab.9", + 1385747260119, + { + "oLatE6":51511643, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"f13c73e60e714ce6b444b4f7ba751e17.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-137211 + } + ], + [ + "a47d16cfecbc4b71afcd38a321e9e178.9", + 1385582249184, + { + "oLatE6":51514835, + "dLatE6":51514440, + "dLngE6":-141353, + "team":"RESISTANCE", + "oGuid":"51502606f12c4eaebef135ac5e48c751.16", + "type":"edge", + "dGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "oLngE6":-141049 + } + ], + [ + "dbfecd40986d41379f1812b49f5a0ca7.9", + 1385625228075, + { + "oLatE6":51514260, + "dLatE6":51513861, + "dLngE6":-140950, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"471691e68499419e9e1a7f90b9d3929f.12", + "oLngE6":-141839 + } + ], + [ + "a8084dcd0d1644499f0819adfcea1e96.9", + 1385771545394, + { + "oLatE6":51514228, + "dLatE6":51516368, + "dLngE6":-148230, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"0cb8844196c240dfa79652a452934a15.11", + "oLngE6":-149462 + } + ], + [ + "353fc49fb4b84e8c912b47685cdd17de.9", + 1385577901773, + { + "oLatE6":51514260, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-141839 + } + ], + [ + "57f8e0f6556e4ea499d5ebeb20d46d36.9", + 1385625228075, + { + "oLatE6":51514260, + "dLatE6":51513159, + "dLngE6":-139979, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"0497a427aeee443b8a9344f3e42878c5.16", + "oLngE6":-141839 + } + ], + [ + "f67ae2fb1af745939b395f9ec419f7bf.9", + 1385740085724, + { + "oLatE6":51509664, + "dLatE6":51509347, + "dLngE6":-143285, + "team":"ENLIGHTENED", + "oGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "type":"edge", + "dGuid":"c59d1196b63b490ba209e13507e9e782.16", + "oLngE6":-145506 + } + ], + [ + "950770189d6844e8a0d5e62ca41d6dbd.9", + 1385654637424, + { + "oLatE6":51515117, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"df187c57c94a47c39aeec2b9854724f9.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-150129 + } + ], + [ + "facef6508e7849a0921ad64778b45aac.9", + 1385754999512, + { + "oLatE6":51512712, + "dLatE6":51509347, + "dLngE6":-143285, + "team":"ENLIGHTENED", + "oGuid":"fecb59b9a1f342d88a767bfefbd98e2b.16", + "type":"edge", + "dGuid":"c59d1196b63b490ba209e13507e9e782.16", + "oLngE6":-147804 + } + ], + [ + "075f2d3dee0a40079cc8c5c2201b5761.9", + 1385645776197, + { + "oLatE6":51516368, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-148230 + } + ], + [ + "0dda932fd46845cb9bfff99beb77d40c.9", + 1385750349253, + { + "oLatE6":51514228, + "dLatE6":51513410, + "dLngE6":-150435, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"918f7edeaf1b4083947957bc4e7bc130.16", + "oLngE6":-149462 + } + ], + [ + "2ccfd5cd8bb0437ba102f4caff4c7518.9", + 1385578078100, + { + "oLatE6":51514260, + "dLatE6":51512246, + "dLngE6":-132564, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"f93d9ee0fa8240d3a55e3b0d3aad96f0.11", + "oLngE6":-141839 + } + ], + [ + "ec7972a6329e489796ea2d68393ed664.9", + 1385754527834, + { + "oLatE6":51509347, + "dLatE6":51509739, + "dLngE6":-146652, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"3c54417b68c84dd387cd67765d6e3703.12", + "oLngE6":-143285 + } + ], + [ + "dd3b4868cb74469aa69399b775ff8e48.9", + 1385754891759, + { + "oLatE6":51511550, + "dLatE6":51509664, + "dLngE6":-145506, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "oLngE6":-148266 + } + ], + [ + "c7a75d873d494998885f9e05ec88e916.9", + 1385750349253, + { + "oLatE6":51514211, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-151942 + } + ], + [ + "14ab35488ee042e983222ca16948eff9.9", + 1385754891759, + { + "oLatE6":51510216, + "dLatE6":51509664, + "dLngE6":-145506, + "team":"ENLIGHTENED", + "oGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "type":"edge", + "dGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "oLngE6":-145113 + } + ], + [ + "f7ea70142e424d6c886352102c7189db.9", + 1385632874733, + { + "oLatE6":51514440, + "dLatE6":51515259, + "dLngE6":-141449, + "team":"RESISTANCE", + "oGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "type":"edge", + "dGuid":"05322044531c400fa651cae68b14070f.11", + "oLngE6":-141353 + } + ], + [ + "b1f4ec25949b462993b7e8ab5092fdb4.9", + 1385747555742, + { + "oLatE6":51521425, + "dLatE6":51514260, + "dLngE6":-141839, + "team":"RESISTANCE", + "oGuid":"ebeee5e795f24776b184236a6de00e84.16", + "type":"edge", + "dGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "oLngE6":-140080 + } + ], + [ + "c9c4ecc18ac24163bb937b86b48902dc.9", + 1385754891759, + { + "oLatE6":51511550, + "dLatE6":51510216, + "dLngE6":-145113, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "oLngE6":-148266 + } + ], + [ + "f8e769d955654caab03bb81b2627b955.9", + 1385754511911, + { + "oLatE6":51509347, + "dLatE6":51513092, + "dLngE6":-146417, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"2736d95c14834f49963dcd1ac6d20e1f.16", + "oLngE6":-143285 + } + ], + [ + "1babe6042ab9447fab0d9bb7affb83b8.9", + 1385771545394, + { + "oLatE6":51514310, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"b45a5a0a21124c0cba28167094c94358.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-147665 + } + ], + [ + "35d4550a08264d9b811a6f94d4a30791.9", + 1385541248130, + { + "oLatE6":51509979, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"770fb08acd63484c88931ab98f1c8943.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-136298 + } + ], + [ + "cd329776e961475d9498717a64d9d3a5.9", + 1385661945578, + { + "oLatE6":51515313, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-152044 + } + ], + [ + "b0feea4407b841aa9cbb82a1d628032c.9", + 1385582249184, + { + "oLatE6":51515259, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-141449 + } + ], + [ + "e73cde8c568f45bd9558f98b5570c275.9", + 1385667686507, + { + "oLatE6":51513771, + "dLatE6":51513839, + "dLngE6":-142541, + "team":"ENLIGHTENED", + "oGuid":"65854ea080ad4c47af9a846bd2157a32.11", + "type":"edge", + "dGuid":"dbbfe3f544af4659ad4a7388fa77e3d5.12", + "oLngE6":-143224 + } + ], + [ + "36f2a3e8aa4f4ceb83199a01a744ed58.9", + 1385074105982, + { + "oLatE6":51514228, + "dLatE6":51511686, + "dLngE6":-150364, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"ffcded7f2a3d4672ab326efe8ebc7087.16", + "oLngE6":-149462 + } + ], + [ + "6b4acf27652541feb55c001cca2b0341.9", + 1385582115022, + { + "oLatE6":51514522, + "dLatE6":51514835, + "dLngE6":-141049, + "team":"RESISTANCE", + "oGuid":"f40dcd87c4764789a72fecdd97fd4ed4.11", + "type":"edge", + "dGuid":"51502606f12c4eaebef135ac5e48c751.16", + "oLngE6":-140594 + } + ], + [ + "af059f4640fd4f978054cdeb6f998e9f.9", + 1385472014804, + { + "oLatE6":51514228, + "dLatE6":51515621, + "dLngE6":-149112, + "team":"RESISTANCE", + "oGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "type":"edge", + "dGuid":"223a3fff9f5d4efc970c695477ac8d87.16", + "oLngE6":-149462 + } + ], + [ + "08639e84c7fb4db5a51551366f1c5f70.9", + 1385754527834, + { + "oLatE6":51509739, + "dLatE6":51508992, + "dLngE6":-144961, + "team":"ENLIGHTENED", + "oGuid":"3c54417b68c84dd387cd67765d6e3703.12", + "type":"edge", + "dGuid":"b586841bf4ce4acc9c90bed7195572a9.12", + "oLngE6":-146652 + } + ], + [ + "f94c4edb49574eb2998c500e5fd3e240.9", + 1385645776587, + { + "oLatE6":51516368, + "dLatE6":51515968, + "dLngE6":-150665, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"b0724f57f3534c3ca647fbdadcb3b408.16", + "oLngE6":-148230 + } + ], + [ + "34033d8241624e47b80ef51bad412e3c.9", + 1385613893144, + { + "oLatE6":51503124, + "dLatE6":51515254, + "dLngE6":-168579, + "team":"RESISTANCE", + "oGuid":"94762abecaa34116a18166df417372e3.16", + "type":"edge", + "dGuid":"0d9d4cbcd478488cb44433a373659221.11", + "oLngE6":-150071 + } + ], + [ + "1b0ff1e100f34485a913ce54712ffec0.9", + 1385771545394, + { + "oLatE6":51516368, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"0cb8844196c240dfa79652a452934a15.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-148230 + } + ], + [ + "89ad49e90d5544799456d6e3ef718441.9", + 1385580364098, + { + "oLatE6":51515259, + "dLatE6":51514704, + "dLngE6":-140773, + "team":"RESISTANCE", + "oGuid":"05322044531c400fa651cae68b14070f.11", + "type":"edge", + "dGuid":"db954eb71cb949ad94084d790b399fee.16", + "oLngE6":-141449 + } + ], + [ + "82e353be1b144bcd97e3d48b6b5a826c.9", + 1385740085724, + { + "oLatE6":51509347, + "dLatE6":51510216, + "dLngE6":-145113, + "team":"ENLIGHTENED", + "oGuid":"c59d1196b63b490ba209e13507e9e782.16", + "type":"edge", + "dGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "oLngE6":-143285 + } + ], + [ + "17c382d2af024bf79999e01bc4f8323e.9", + 1385473818025, + { + "oLatE6":51514260, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-141839 + } + ], + [ + "c9c4ecc18ac24163bb937b86b48902dc.9", + 0, + { + "oLatE6":51511550, + "dLatE6":51510216, + "dLngE6":-145113, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "oLngE6":-148266 + } + ], + [ + "a47d16cfecbc4b71afcd38a321e9e178.9", + 0, + { + "oLatE6":51514835, + "dLatE6":51514440, + "dLngE6":-141353, + "team":"RESISTANCE", + "oGuid":"51502606f12c4eaebef135ac5e48c751.16", + "type":"edge", + "dGuid":"dc2192d231d147f3aa8fb4b7c060bd5b.16", + "oLngE6":-141049 + } + ], + [ + "502381e76870402e9da16405a4cb50df.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51513462, + "dLngE6":-143165, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"764aeb38065b47d992e843d4ae77d15d.11", + "oLngE6":-141839 + } + ], + [ + "e73cde8c568f45bd9558f98b5570c275.9", + 0, + { + "oLatE6":51513771, + "dLatE6":51513839, + "dLngE6":-142541, + "team":"ENLIGHTENED", + "oGuid":"65854ea080ad4c47af9a846bd2157a32.11", + "type":"edge", + "dGuid":"dbbfe3f544af4659ad4a7388fa77e3d5.12", + "oLngE6":-143224 + } + ], + [ + "1babe6042ab9447fab0d9bb7affb83b8.9", + 0, + { + "oLatE6":51514310, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"b45a5a0a21124c0cba28167094c94358.16", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-147665 + } + ], + [ + "14ab35488ee042e983222ca16948eff9.9", + 0, + { + "oLatE6":51510216, + "dLatE6":51509664, + "dLngE6":-145506, + "team":"ENLIGHTENED", + "oGuid":"8a094798b0a54b9d81cc2992edbd53e1.11", + "type":"edge", + "dGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "oLngE6":-145113 + } + ], + [ + "353fc49fb4b84e8c912b47685cdd17de.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51514228, + "dLngE6":-149462, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"2f86b199c523422f8166ef915bdb1b70.16", + "oLngE6":-141839 + } + ], + [ + "17c382d2af024bf79999e01bc4f8323e.9", + 0, + { + "oLatE6":51514260, + "dLatE6":51514310, + "dLngE6":-147665, + "team":"RESISTANCE", + "oGuid":"33fe90d0a2d04d0db47002285eaf2766.11", + "type":"edge", + "dGuid":"b45a5a0a21124c0cba28167094c94358.16", + "oLngE6":-141839 + } + ], + [ + "dd3b4868cb74469aa69399b775ff8e48.9", + 0, + { + "oLatE6":51511550, + "dLatE6":51509664, + "dLngE6":-145506, + "team":"ENLIGHTENED", + "oGuid":"56d5b86428c84aadac0d6214eff81f60.11", + "type":"edge", + "dGuid":"bfcb133c0f3a43909be288eb27cf5968.16", + "oLngE6":-148266 + } + ] + ] + }, + "1_32739_21790":{ + "deletedGameEntityGuids":[ + "8f63a4b0143f4302a91b925c65d0067e.b", + "e7431222757b4919a85c433a61cc9314.b", + "da1bab6073f74b9faef6716f0d2809e1.b", + "1a49f223d69740bcaafd37534522c5cd.b", + "1898b02a792044018ec6afed12fcc2fa.b", + "52376b1dea1d4a48bd3cbb98499d529d.b", + "c92a5e53a4c84153b80e3a981c76a217.b", + "af20b3fa9f6e402a86337b5c6e741c9c.b", + "6fec01ea5f3e484697d93ed996fd02e0.9", + "4de752d94bb049e68bd441b5b6dacb2f.9", + "1383e4b73e824831818b357ef147cdc4.9", + "4741dfeb7e6f448d9c53bdaac91ffc60.9", + "5deeedf2839f411c86a2d619ff18dabf.9", + "521e4d1b6ecd422db54b3e02d0bd93de.9", + "82fc74a0c3fe46c0a75dc7e099655f0c.9", + "71ea8fd4c3534f63b1c258c68ad970b8.9", + "665dc5eda2c2490e8c17559d403e2e53.9", + "06806c0763be433e89bf70d944f499ab.9", + "97faed3033294df8ac7eefd844b85738.9", + "628455f6227c45d0b2569d32bc060b09.9", + "d2b685cf48cc4e44b7390ba126728899.9", + "a27d7ff364c44908952f13257f4b3b0a.9", + "3ef4bff6c5e04be49cb96261e740da18.9", + "5567e8e5c6a942ffafa85df9dbb21fb8.9", + "477528bcca9d4ded8e477145afbf80d0.9", + "f5d0c7216117413d9adea9e7257040e5.9", + "0d337fb61ff24d54a0df6bb221a468fc.9", + "a3ffc916d0df47c18588e54ac7b47510.9" + ], + "gameEntities":[ + [ + "9381595a135f466fadf574e2375a47f4.16", + 1385751924756, + { + "level":1, + "title":"Nestled Cherubs", + "image":"http://lh3.ggpht.com/VqUCsZziRNpszF_4WdeIw4XvywAauyna0L-bvSJ2A3wXZylF1jMg8uY-3uGaOhKzEwnhsRB6X8ONqlDaF98", + "resCount":1, + "latE6":51512626, + "health":17.0, + "team":"ENLIGHTENED", + "lngE6":-157138, + "type":"portal" + } + ], + [ + "b6dff6a9610948548201bd5f74fa1e97.12", + 1385751924944, + { + "level":3, + "title":"Horse Head", + "image":"http://www.panoramio.com/photos/small/29266280.jpg", + "resCount":4, + "latE6":51512587, + "health":20.0, + "team":"ENLIGHTENED", + "lngE6":-159240, + "type":"portal" + } + ], + [ + "ed1c2d5e0c364b88b55132dabdacbc54.12", + 1385764721746, + { + "level":3, + "title":"Animals in War", + "image":"http://www.panoramio.com/photos/small/14319204.jpg", + "resCount":8, + "latE6":51510826, + "health":66.0, + "team":"ENLIGHTENED", + "lngE6":-157692, + "type":"portal" + } + ], + [ + "8c2a81a1afdc4dd1b0eeb76171360f02.12", + 1385764927533, + { + "level":2, + "title":"Horse at Water, \"Horse's Head\"", + "image":"http://www.panoramio.com/photos/small/51448097.jpg", + "resCount":3, + "latE6":51512682, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-159543, + "type":"portal" + } + ], + [ + "c1d9ccae0c8c42d6a92fd36f8b3c7cf2.16", + 1385749860700, + { + "level":1, + "title":"Sir Thomas Sopwith Heritage Plaque", + "image":"http://lh6.ggpht.com/qC1wukG2p5H3v0aqeUy7v_8KnA6roop5f2lWoPudq-_X_O9aXHH8aZnccRBe6LjpJ0BKc3tirDezLCtWy5Ar", + "resCount":1, + "latE6":51512439, + "health":78.0, + "team":"RESISTANCE", + "lngE6":-155966, + "type":"portal" + } + ], + [ + "2f3ae2cc96b44d4087abb3ecabdfd31a.11", + 1385754186966, + { + "level":4, + "title":"Hamish Mackie Life Leopard", + "image":"http://lh5.ggpht.com/RUVD8pTLPZxboxI6dGyX7IPHTev48Lm-5NRokV4rYC8Ts4lXK2ZF6dBDipWFfCnUyWqCfS-X9qc4XNbDY1k4iEodnUMCHRTNgAZn5L72hOPTgDOjrg", + "resCount":8, + "latE6":51513607, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-157821, + "type":"portal" + } + ], + [ + "66ec22e29ac84a828d7203535c1f50c5.11", + 1385743780246, + { + "level":5, + "title":"The Wallace Collection", + "image":"http://lh6.ggpht.com/I57APxI7GFIkhqG5PwXGKpGBiF0rLwW4ZCDnZqhEbjVVowsQV-ztxDb8pDAH6bh1yRUXXvY6QcUfMLSPQtiRRo6bvjBsnVMt-YiSGQO1UBF9kDE0rQ", + "resCount":8, + "latE6":51517188, + "health":85.0, + "team":"RESISTANCE", + "lngE6":-152943, + "type":"portal" + } + ], + [ + "fb26ee3ef9034cf58bb2d86897953661.12", + 1385751463208, + { + "level":2, + "title":"Marble Arch at Night", + "image":"http://www.panoramio.com/photos/small/65839892.jpg", + "resCount":5, + "latE6":51512995, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-158610, + "type":"portal" + } + ], + [ + "d66b390130cc4377807e0ab86a6b7290.12", + 1385751471397, + { + "level":1, + "title":"Horse Head - Marble Arch", + "image":"http://www.panoramio.com/photos/small/56598706.jpg", + "resCount":1, + "latE6":51512436, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-159718, + "type":"portal" + } + ], + [ + "36257a57c6984883b397781201ea4df6.16", + 1385768508210, + { + "level":4, + "title":"Churchill Hyatt Regency London", + "image":"http://lh3.ggpht.com/41PTnYDH8Y0FltU_LCd-E2fGZyocPQ-PlaVTmIQTtJj6s2yVwaFRlXPOoMJ8WEJ4HE8Re12VT7-dcGA3iozR", + "resCount":8, + "latE6":51515466, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-156935, + "type":"portal" + } + ], + [ + "de3370c1f7e04e31b7800d55c641298a.12", + 1385767699010, + { + "level":6, + "title":"Selfridges, Oxford Street, Cit", + "image":"http://www.panoramio.com/photos/small/22779690.jpg", + "resCount":8, + "latE6":51514055, + "health":94.0, + "team":"RESISTANCE", + "lngE6":-152918, + "type":"portal" + } + ], + [ + "e0b231367a5b44459091f8722b9e451f.16", + 1385764212592, + { + "level":6, + "title":"Selfridges", + "image":"http://lh4.ggpht.com/My1WDqCj71Jy1hg4Ak3nSZU5qK5hcm0xQD4MIQfkZERkV2ET9lpF7y-ziX37nGqQsWMbEXVlRkhcSz931Xw", + "resCount":8, + "latE6":51514235, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-153814, + "type":"portal" + } + ], + [ + "e95e4a205c1a46cb88cc5d27bdd7c279.11", + 1385754186822, + { + "level":6, + "title":"Statue of Wallenberg", + "image":"http://lh6.ggpht.com/118m58xdlFj4BVG9KkaT51pylP6RvtVghKUwFjq4iO-GWLwvK2OdsESMN0zBWFHfxGZccJnmgC8wXgAzi_TwP3Y6B_cIZouioA_hoJvuvlQBae0", + "resCount":8, + "latE6":51515041, + "health":76.0, + "team":"RESISTANCE", + "lngE6":-159581, + "type":"portal" + } + ], + [ + "e142ec4d3d5840d0adcefc9211bfd34a.12", + 1385764733287, + { + "level":1, + "title":"Animals in War", + "image":"http://www.panoramio.com/photos/small/64758056.jpg", + "resCount":8, + "latE6":51511455, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-157580, + "type":"portal" + } + ], + [ + "8e102f77c2cd4b5aaaeb2375aeb007de.12", + 1385764616639, + { + "level":2, + "title":"Comme Je Fus, Dudley House", + "image":"http://www.panoramio.com/photos/small/64758125.jpg", + "resCount":6, + "latE6":51510635, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-157245, + "type":"portal" + } + ], + [ + "f76a2cb5cad0493d9be3026617cef7f1.16", + 1385754186758, + { + "level":2, + "title":"The Church of the Annunciation ", + "image":"http://lh6.ggpht.com/FQ4uOstFki4dpueSAysFNEvW-ag1zMK9Ud9A28Ip_aCzZHxb9T8eSYsaZTYkAQQSi8CQAOdeJBeJJxWTL34", + "resCount":4, + "latE6":51514438, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-158257, + "type":"portal" + } + ], + [ + "cfbb5db2246e4190ad059cfe5263d6f0.16", + 1385754186623, + { + "level":4, + "title":"New Quebec St. Crest", + "image":"http://lh3.ggpht.com/GnZKX4bbbcpeCmCujRj6ykozzaRM261fH1jjV4XPHzI0pJVqKjMhH-407fjjLu4iOc8njJah359Kgh4vVDqW", + "resCount":8, + "latE6":51515639, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-158538, + "type":"portal" + } + ], + [ + "e2e157a3560047b383bcc18a586c3ff7.12", + 1385751451321, + { + "level":2, + "title":"Sculpture at The Marble Arch", + "image":"http://www.panoramio.com/photos/small/72436459.jpg", + "resCount":8, + "latE6":51512810, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-158900, + "type":"portal" + } + ], + [ + "3728f3c32c6f4612969d6afb4d3e9fed.16", + 1385750720843, + { + "level":1, + "title":"Sir James John Hamilton Fountain", + "image":"http://lh3.ggpht.com/xH5e1uZQtC6-P5nh3d9u0u96x_-P_YMM0iRHiGukfrmqmMElnpeQJFHP0E7bw5TUxnOHBVZl-4yT0d5W0cE", + "resCount":1, + "latE6":51515867, + "health":66.0, + "team":"RESISTANCE", + "lngE6":-154833, + "type":"portal" + } + ], + [ + "a7fbde52d87d4ac9a024d74a74dbe6b1.12", + 1385764733287, + { + "level":1, + "title":"Animals in war", + "image":"http://www.panoramio.com/photos/small/15330804.jpg", + "resCount":8, + "latE6":51511056, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-157518, + "type":"portal" + } + ], + [ + "528e68a8205d49e5ae046e7e59b6c500.12", + 1385764971579, + { + "level":2, + "title":"Horse's Head", + "image":"http://www.panoramio.com/photos/small/51236185.jpg", + "resCount":7, + "latE6":51512863, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-159687, + "type":"portal" + } + ], + [ + "df3d33b654fa493b91c3e4226ab7f34f.16", + 1385755324224, + { + "level":5, + "title":"Alfred Milner Plaque", + "image":"http://lh3.ggpht.com/xWuN1vgCouMEjJ1CL1e2znSkqEhXtDX7IGgofvvDU6lxTj6tvtcMdSMXvjfIV8gKSu8UyBHLTlXsYVybinyt", + "resCount":8, + "latE6":51516467, + "health":100.0, + "team":"ENLIGHTENED", + "lngE6":-153231, + "type":"portal" + } + ], + [ + "80a9335e0e9f4a32ba30fed67070af97.12", + 1385743933349, + { + "level":1, + "title":"Marble arch", + "image":"http://www.panoramio.com/photos/small/59031723.jpg", + "resCount":1, + "latE6":51513420, + "health":100.0, + "team":"RESISTANCE", + "lngE6":-159012, + "type":"portal" + } + ], + [ + "07fcfa63452f4c9d91f69fff8e1ea895.b", + 1385656796544, + { + "points":[ + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-151942, + "guid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "latE6":51514211 + }, + { + "lngE6":-153814, + "guid":"e0b231367a5b44459091f8722b9e451f.16", + "latE6":51514235 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "56f5ccb7bfe0407e811efd729ed98e8e.b", + 1385646897670, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-152943, + "guid":"66ec22e29ac84a828d7203535c1f50c5.11", + "latE6":51517188 + }, + { + "lngE6":-151951, + "guid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "latE6":51516526 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "be9218a7d2974d7f94abcfd6717a7ea0.b", + 1385655632013, + { + "points":[ + { + "lngE6":-152271, + "guid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "latE6":51516152 + }, + { + "lngE6":-152044, + "guid":"457d81eba6f542a1983154ec61155239.16", + "latE6":51515313 + }, + { + "lngE6":-153814, + "guid":"e0b231367a5b44459091f8722b9e451f.16", + "latE6":51514235 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "423617ecd52748249ef0b592e01a1119.b", + 1385559670166, + { + "points":[ + { + "lngE6":-152943, + "guid":"66ec22e29ac84a828d7203535c1f50c5.11", + "latE6":51517188 + }, + { + "lngE6":-151762, + "guid":"ca57ec9edce1494eb28da06226772cd6.11", + "latE6":51517935 + }, + { + "lngE6":-151951, + "guid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "latE6":51516526 + } + ], + "type":"region", + "team":"RESISTANCE" + } + ], + [ + "2077771f112e4f95b0c8c6605bab39ca.9", + 1385559670166, + { + "oLatE6":51517935, + "dLatE6":51517188, + "dLngE6":-152943, + "team":"RESISTANCE", + "oGuid":"ca57ec9edce1494eb28da06226772cd6.11", + "type":"edge", + "dGuid":"66ec22e29ac84a828d7203535c1f50c5.11", + "oLngE6":-151762 + } + ], + [ + "8e9ed368792d40d2aaa612f87348796b.9", + 1385750720448, + { + "oLatE6":51516681, + "dLatE6":51519513, + "dLngE6":-151818, + "team":"RESISTANCE", + "oGuid":"664552e088c24cda86826caf02a8f24b.16", + "type":"edge", + "dGuid":"bb2257f8954f4cb282b1a716dbf1b770.16", + "oLngE6":-160516 + } + ], + [ + "ccf24610b90a4479ad32f407773f7e21.9", + 1385750497114, + { + "oLatE6":51515041, + "dLatE6":51513607, + "dLngE6":-157821, + "team":"RESISTANCE", + "oGuid":"e95e4a205c1a46cb88cc5d27bdd7c279.11", + "type":"edge", + "dGuid":"2f3ae2cc96b44d4087abb3ecabdfd31a.11", + "oLngE6":-159581 + } + ], + [ + "08bca6bd59d5449da1e9d1dbf684206c.9", + 1385656796544, + { + "oLatE6":51514211, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"7fdc9960ccf946a3bf6cc62fb38ee141.12", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-151942 + } + ], + [ + "d46675d327bc4300bd4e9bccac4c3cd4.9", + 1385750506053, + { + "oLatE6":51515041, + "dLatE6":51515639, + "dLngE6":-158538, + "team":"RESISTANCE", + "oGuid":"e95e4a205c1a46cb88cc5d27bdd7c279.11", + "type":"edge", + "dGuid":"cfbb5db2246e4190ad059cfe5263d6f0.16", + "oLngE6":-159581 + } + ], + [ + "494a7dd0236a40e98f6d67c05020f3dd.9", + 1385764733287, + { + "oLatE6":51511056, + "dLatE6":51511455, + "dLngE6":-157580, + "team":"ENLIGHTENED", + "oGuid":"a7fbde52d87d4ac9a024d74a74dbe6b1.12", + "type":"edge", + "dGuid":"e142ec4d3d5840d0adcefc9211bfd34a.12", + "oLngE6":-157518 + } + ], + [ + "4683c138914c4e2bb5f8990b354e6920.9", + 1385511177779, + { + "oLatE6":51501839, + "dLatE6":51514594, + "dLngE6":-174173, + "team":"RESISTANCE", + "oGuid":"f664e4eba6834e569c929e00b8769055.11", + "type":"edge", + "dGuid":"8916dc6eb80546b6a1ec4b77d782ba96.16", + "oLngE6":-159828 + } + ], + [ + "8bf312c35efe44aea3e5a021e8d302df.9", + 1385751185290, + { + "oLatE6":51514235, + "dLatE6":51513607, + "dLngE6":-157821, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"2f3ae2cc96b44d4087abb3ecabdfd31a.11", + "oLngE6":-153814 + } + ], + [ + "5661d32226484bff880289cf55501c91.9", + 1385646897670, + { + "oLatE6":51517188, + "dLatE6":51516526, + "dLngE6":-151951, + "team":"RESISTANCE", + "oGuid":"66ec22e29ac84a828d7203535c1f50c5.11", + "type":"edge", + "dGuid":"a24adc0a42d74c1397731cb7475d7c5d.16", + "oLngE6":-152943 + } + ], + [ + "34033d8241624e47b80ef51bad412e3c.9", + 1385613893144, + { + "oLatE6":51503124, + "dLatE6":51515254, + "dLngE6":-168579, + "team":"RESISTANCE", + "oGuid":"94762abecaa34116a18166df417372e3.16", + "type":"edge", + "dGuid":"0d9d4cbcd478488cb44433a373659221.11", + "oLngE6":-150071 + } + ], + [ + "50cd58e832fe46cda7577b87ec72dcf9.9", + 1385060925958, + { + "oLatE6":51516681, + "dLatE6":51522749, + "dLngE6":-155157, + "team":"RESISTANCE", + "oGuid":"664552e088c24cda86826caf02a8f24b.16", + "type":"edge", + "dGuid":"0eabb23fbd244c8cb8372f42780f5da1.16", + "oLngE6":-160516 + } + ], + [ + "d25fa85590584d49a1bee2e48f11db15.9", + 1385646897670, + { + "oLatE6":51517188, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"66ec22e29ac84a828d7203535c1f50c5.11", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-152943 + } + ], + [ + "961a8eaeaae34d479531049295206aa0.9", + 1385656796544, + { + "oLatE6":51515313, + "dLatE6":51514235, + "dLngE6":-153814, + "team":"RESISTANCE", + "oGuid":"457d81eba6f542a1983154ec61155239.16", + "type":"edge", + "dGuid":"e0b231367a5b44459091f8722b9e451f.16", + "oLngE6":-152044 + } + ], + [ + "5e45cc41f18044abae5d6ba512f2cc5c.9", + 1385661983796, + { + "oLatE6":51516467, + "dLatE6":51518516, + "dLngE6":-153510, + "team":"ENLIGHTENED", + "oGuid":"df3d33b654fa493b91c3e4226ab7f34f.16", + "type":"edge", + "dGuid":"ac5bb9d8e5fc44bf8976983fe02d16fb.16", + "oLngE6":-153231 + } + ], + [ + "578cb52d150c441a9cd95a5209201731.9", + 1385615160117, + { + "oLatE6":51516681, + "dLatE6":51515041, + "dLngE6":-159581, + "team":"RESISTANCE", + "oGuid":"664552e088c24cda86826caf02a8f24b.16", + "type":"edge", + "dGuid":"e95e4a205c1a46cb88cc5d27bdd7c279.11", + "oLngE6":-160516 + } + ], + [ + "6cefb2cfe7094e95b35fdb2b87e45bb6.9", + 1385655632013, + { + "oLatE6":51514235, + "dLatE6":51516152, + "dLngE6":-152271, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"0a5e340f186d4aaca7904fbe5a3feba7.16", + "oLngE6":-153814 + } + ], + [ + "8bf312c35efe44aea3e5a021e8d302df.9", + 0, + { + "oLatE6":51514235, + "dLatE6":51513607, + "dLngE6":-157821, + "team":"RESISTANCE", + "oGuid":"e0b231367a5b44459091f8722b9e451f.16", + "type":"edge", + "dGuid":"2f3ae2cc96b44d4087abb3ecabdfd31a.11", + "oLngE6":-153814 + } + ], + [ + "494a7dd0236a40e98f6d67c05020f3dd.9", + 0, + { + "oLatE6":51511056, + "dLatE6":51511455, + "dLngE6":-157580, + "team":"ENLIGHTENED", + "oGuid":"a7fbde52d87d4ac9a024d74a74dbe6b1.12", + "type":"edge", + "dGuid":"e142ec4d3d5840d0adcefc9211bfd34a.12", + "oLngE6":-157518 + } + ], + [ + "1b9127a0ebde49718050ff33f9bc24aa.9", + 0, + { + "oLatE6":51511056, + "dLatE6":51510826, + "dLngE6":-157692, + "team":"ENLIGHTENED", + "oGuid":"a7fbde52d87d4ac9a024d74a74dbe6b1.12", + "type":"edge", + "dGuid":"ed1c2d5e0c364b88b55132dabdacbc54.12", + "oLngE6":-157518 + } + ], + [ + "d46675d327bc4300bd4e9bccac4c3cd4.9", + 0, + { + "oLatE6":51515041, + "dLatE6":51515639, + "dLngE6":-158538, + "team":"RESISTANCE", + "oGuid":"e95e4a205c1a46cb88cc5d27bdd7c279.11", + "type":"edge", + "dGuid":"cfbb5db2246e4190ad059cfe5263d6f0.16", + "oLngE6":-159581 + } + ], + [ + "ccf24610b90a4479ad32f407773f7e21.9", + 0, + { + "oLatE6":51515041, + "dLatE6":51513607, + "dLngE6":-157821, + "team":"RESISTANCE", + "oGuid":"e95e4a205c1a46cb88cc5d27bdd7c279.11", + "type":"edge", + "dGuid":"2f3ae2cc96b44d4087abb3ecabdfd31a.11", + "oLngE6":-159581 + } + ] + ] + } + }, + "minLevelOfDetail":1 + } +} diff --git a/json_examples/link_json.js b/json_examples/link_json.js deleted file mode 100644 index bcc2cc32..00000000 --- a/json_examples/link_json.js +++ /dev/null @@ -1,25 +0,0 @@ -[ - "28cbec08d88643828755bd56b67fca75.9", - 1359639986825, - { - "controllingTeam": { - "team": "RESISTANCE" - }, - "creator": { - "creatorGuid": "2b8fb33c8d1b433d9a46da76b35185f8.c", - "creationTime": "1359639986543" - }, - "edge": { - "destinationPortalGuid": "9b08215c6da44ba18c948f5b7243dc00.12", - "originPortalLocation": { - "lngE6": 8561013, - "latE6": 49384861 - }, - "destinationPortalLocation": { - "lngE6": 8562566, - "latE6": 49383951 - }, - "originPortalGuid": "9e4a0dfacd5347e9ac71910761541699.12" - } - } -], diff --git a/json_examples/portal_json.js b/json_examples/portal_json.js deleted file mode 100644 index 863c4561..00000000 --- a/json_examples/portal_json.js +++ /dev/null @@ -1,162 +0,0 @@ - - -[ - "2c124b4e99074660a72668c888093834.11", - 1359563604824, - { - "turret": { - - }, - "resonatorArray": { - "resonators": [ - { - "slot": 0, - "level": 5, - "energyTotal": 2825, - "distanceToPortal": 35, - "id": "26da7ed9-9025-4974-b62f-495750b2d888", - "ownerGuid": "a1dc117457954b99b104be8c85e16276.c" - }, - { - "slot": 1, - "level": 6, - "energyTotal": 3725, - "distanceToPortal": 25, - "id": "f7f3312c-7440-4edf-95b9-9e416af1f399", - "ownerGuid": "a1dc117457954b99b104be8c85e16276.c" - }, - { - "slot": 2, - "level": 5, - "energyTotal": 2825, - "distanceToPortal": 31, - "id": "50627504-1efb-445d-84b0-f014948aedfb", - "ownerGuid": "c4981119edfb488a9fd19d99eb540449.c" - }, - { - "slot": 3, - "level": 6, - "energyTotal": 3725, - "distanceToPortal": 31, - "id": "06ee68fe-80e4-491b-a99d-aa126c9740d6", - "ownerGuid": "ef9657c5cc2743afa5e1953dd06df307.c" - }, - { - "slot": 4, - "level": 6, - "energyTotal": 3725, - "distanceToPortal": 30, - "id": "df80cd1f-d347-4dc5-a31b-deb8fb9f978d", - "ownerGuid": "ef9657c5cc2743afa5e1953dd06df307.c" - }, - { - "slot": 5, - "level": 5, - "energyTotal": 2825, - "distanceToPortal": 24, - "id": "c8c474ec-8deb-4218-8b7b-ea2a7ea3e4ac", - "ownerGuid": "a0c2e839783f4e889ca570e2cd5c7819.c" - }, - { - "slot": 6, - "level": 5, - "energyTotal": 2825, - "distanceToPortal": 29, - "id": "e57ea7b1-f3f7-4a62-a060-c794f85246e1", - "ownerGuid": "a0c2e839783f4e889ca570e2cd5c7819.c" - }, - { - "slot": 7, - "level": 5, - "energyTotal": 2825, - "distanceToPortal": 31, - "id": "d08b9027-88f3-4808-bd3f-41acce7e195a", - "ownerGuid": "c4981119edfb488a9fd19d99eb540449.c" - } - ] - }, - "imageByUrl": { - "imageUrl": "http:\/\/lh3.ggpht.com\/oh3OKN-Vc-GbS3hfp4ZaCB_ND6hmkfnp-gAQmCtfmmrj9R94eeiVAAh9HLd5gO-JV8rBGchle8CXLbr_bmK8sR-PdRYS1yCNHS48wf98RelEVjOe" - }, - "controllingTeam": { - "team": "RESISTANCE" - }, - "defaultActionRange": { - - }, - "portalV2": { - "linkedEdges": [ - { - "otherPortalGuid": "a38615195c7547639dfb77bfe3a700a8.11", - "edgeGuid": "29c13e7a9ba149008aa6355e201158f1.9", - "isOrigin": false - }, - { - "otherPortalGuid": "4dd1ede906a44420aa2b052a1363f170.11", - "edgeGuid": "cecc7c69103d4678aeb7172a1688e2b5.9", - "isOrigin": false - }, - { - "otherPortalGuid": "9d1fa3603e8c4363b3cd2448277a906b.11", - "edgeGuid": "ed61e4455e574a1c906778f29307a7b4.9", - "isOrigin": true - }, - { - "otherPortalGuid": "20c14bddc1384ee99dfe77c10737e842.11", - "edgeGuid": "0d63bde0620a4a89ad4a23ce8ef29c63.9", - "isOrigin": false - } - ], - "linkedModArray": [ - { - "installingUser": "a1dc117457954b99b104be8c85e16276.c", - "type": "RES_SHIELD", - "stats": { - "MITIGATION": "8" - }, - "displayName": "Portal Shield", - "rarity": "RARE" - }, - { - "installingUser": "a1dc117457954b99b104be8c85e16276.c", - "type": "RES_SHIELD", - "stats": { - "MITIGATION": "8" - }, - "displayName": "Portal Shield", - "rarity": "RARE" - }, - { - "installingUser": "a0c2e839783f4e889ca570e2cd5c7819.c", - "type": "RES_SHIELD", - "stats": { - "MITIGATION": "8" - }, - "displayName": "Portal Shield", - "rarity": "RARE" - }, - { - "installingUser": "ef9657c5cc2743afa5e1953dd06df307.c", - "type": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "COMMON" - } - ], - "descriptiveText": { - "TITLE": "M\u00f6biusband", - "ADDRESS": "Im Neuenheimer Feld 306, 69120 Heidelberg, Germany" - } - }, - "locationE6": { - "lngE6": 8672899, - "latE6": 49417115 - }, - "captured": { - "capturedTime": "1359390335006", - "capturingPlayerId": "a1dc117457954b99b104be8c85e16276.c" - } - } -] diff --git a/json_examples/redeeming.js b/json_examples/redeeming.js deleted file mode 100644 index f42ce914..00000000 --- a/json_examples/redeeming.js +++ /dev/null @@ -1,1998 +0,0 @@ -// http://www.ingress.com/rpc/dashboard.redeemReward - -{ - "passcode": "" -} - -//////////////////////////////////////////////////////////////////////// - -{ - "gameBasket": { - "playerEntity": [ - "00000000000000000000000000000000.c", - 1365600000000, - { - "playerPersonal": { - "notificationSettings": { - "shouldSendEmail": true, - "maySendPromoEmail": true - }, - "energyState": "XM_OK", - "energy": 10000, - "clientLevel": 36, - "ap": "12000000", - "mediaHighWaterMarks": { - "RESISTANCE": 9, - "General": 63 - }, - "allowNicknameEdit": false, - "allowFactionChoice": false - }, - "controllingTeam": { - "team": "RESISTANCE" - } - } - ], - "gameEntities": [], - "deletedEntityGuids": [], - "inventory": [ - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "COMMON" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 4 - }, - "requiredLevel": 4 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 4 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "resourceWithLevels": { - "resourceType": "POWER_CUBE", - "level": 6 - }, - "powerCube": { - "energy": 6000 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 4 - }, - "requiredLevel": 4 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 4 - } - } - ] - ], - "apGains": [ - { - "apTrigger": "REDEEMED_AP", - "apGainAmount": "200" - } - ] - }, - "result": { - "apAward": "1200000", - "xmAward": "10000", - "inventoryAward": [ - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 1 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMITTER_A", - "level": 2 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 3 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 4 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 5 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 1 - }, - "requiredLevel": 1 - }, - "resourceWithLevels": { - "resourceType": "EMP_BURSTER", - "level": 6 - }, - "empWeapon": { - "ammo": 1, - "level": 1 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "resourceWithLevels": { - "resourceType": "POWER_CUBE", - "level": 7 - }, - "powerCube": { - "energy": 6000 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "resourceWithLevels": { - "resourceType": "POWER_CUBE", - "level": 8 - }, - "powerCube": { - "energy": 6000 - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "COMMON" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "COMMON" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "RARE" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "RARE" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "VERY_RARE" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "modResource": { - "resourceType": "RES_SHIELD", - "stats": { - "MITIGATION": "6" - }, - "displayName": "Portal Shield", - "rarity": "VERY_RARE" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "resourceWithLevels": { - "resourceType": "MEDIA", - "level": 8 - }, - "storyItem": { - "shortDescription": "INGRESS_REPORT_42", - "primaryUrl": "http://www.nianticproject.com" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "resourceWithLevels": { - "resourceType": "MEDIA", - "level": 8 - }, - "storyItem": { - "shortDescription": "INGRESS_REPORT_42", - "primaryUrl": "http://www.nianticproject.com" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "resource": { - "resourceType": "PORTAL_LINK_KEY", - "displayName": "Portal Key" - }, - "portalCoupler": { - "portalGuid": "00000000000000000000000000000000.7", - "portalTitle": "Portal Name" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "accessLevel": { - "failure": { - "isAllowed": false, - "requiredLevel": 6 - }, - "requiredLevel": 6 - }, - "doesNotExist": { - "resourceType": "SUPER_SECRET" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "resource": { - "resourceType": "FLIP_CARD", - "resourceRarity": "VERY_RARE" - }, - "displayName": { - "displayDescription": "The ADA Refactor can be used to reverse the alignment of an Enlightened Portal.", - "displayName": "ADA Refactor" - }, - "flipCard": { - "flipCardType": "ADA" - } - } - ], - [ - "00000000000000000000000000000000.5", - 1365600000000, - { - "inInventory": { - "playerId": "00000000000000000000000000000000.c", - "acquisitionTimestampMs": "1365600000000" - }, - "resource": { - "resourceType": "FLIP_CARD", - "resourceRarity": "VERY_RARE" - }, - "displayName": { - "displayDescription": "The JARVIS Virus can be used to reverse the alignment of a Resistance Portal.", - "displayName": "JARVIS Virus" - }, - "flipCard": { - "flipCardType": "JARVIS" - } - } - ] - ] - } -} diff --git a/main.js b/main.js index 3600df45..071eb7c7 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ // ==UserScript== // @id ingress-intel-total-conversion@jonatkins // @name IITC: Ingress intel map total conversion -// @version 0.15.1.@@DATETIMEVERSION@@ +// @version 0.16.0.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 2d2b36a5..874ec60a 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="61" + android:versionName="0.10.0"> + @@ -26,8 +28,7 @@ android:name=".IITC_Mobile" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:label="@string/app_name" - android:launchMode="singleTop" - android:theme="@style/AppBaseTheme"> + android:launchMode="singleTop"> @@ -78,19 +79,16 @@ + android:label="@string/activity_settings"/> + android:label="@string/activity_plugins"/> + android:parentActivityName=".IITC_Mobile"> diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index ab91e41b..d7f7e446 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -40,12 +40,6 @@ android:key="pref_mics" android:title="@string/pref_misc_cat"> - - - + + + diff --git a/plugins/add-kml.user.js b/plugins/add-kml.user.js old mode 100755 new mode 100644 diff --git a/plugins/ap-list.user.js b/plugins/ap-list.user.js index 4fc2bb23..cd842aef 100644 --- a/plugins/ap-list.user.js +++ b/plugins/ap-list.user.js @@ -1,942 +1,15 @@ // ==UserScript== // @id iitc-plugin-ap-list@xelio // @name IITC plugin: AP List -// @category Info +// @category Deleted // @version 0.5.7.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ -// @description [@@BUILDNAME@@-@@BUILDDATE@@] List portals by AP of either faction or by effective level. Other functions and controls please refer to the Userguide. +// @description PLUGIN CURRENTLY UNAVAILABLE // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* // @match http://www.ingress.com/intel* // @grant none // ==/UserScript== - -@@PLUGINSTART@@ - -// PLUGIN START //////////////////////////////////////////////////////// - -// use own namespace for plugin -window.plugin.apList = function() { -}; - -window.plugin.apList.cachedPortals = {}; -window.plugin.apList.SIDE_FRIENDLY = 0; -window.plugin.apList.SIDE_ENEMY = 1; -window.plugin.apList.displaySide = window.plugin.apList.SIDE_ENEMY; -window.plugin.apList.sides = new Array(2); -window.plugin.apList.sortedPortals = new Array(2); -window.plugin.apList.playerApGainFunc = new Array(2); - -window.plugin.apList.SORT_BY_AP = 'AP'; -window.plugin.apList.SORT_BY_EL = 'EL'; -window.plugin.apList.sortBy = window.plugin.apList.SORT_BY_AP; -window.plugin.apList.SORT_ASC = 1; -window.plugin.apList.SORT_DESC = -1; -window.plugin.apList.sortOptions = {}; - -window.plugin.apList.currentPage = [1,1]; -window.plugin.apList.totalPage = [1,1]; -window.plugin.apList.portalPerPage = 10; -window.plugin.apList.sideLabelClass = {}; -window.plugin.apList.tableColumns = new Array(2); - -window.plugin.apList.useCachedPortals = false; -window.plugin.apList.cacheBounds; -window.plugin.apList.cacheActiveZoomLevel; - -window.plugin.apList.destroyPortalsGuid = new Array(); - -window.plugin.apList.portalLocationIndicator; -window.plugin.apList.animTimeout; - -// ENTRY POINT /////////////////////////////////////////////////////////////////// -window.plugin.apList.handleUpdate = function() { - if(!requests.isLastRequest('getThinnedEntitiesV4')) 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 = '' - + '' - + plugin.apList.tableHeaderBuilder(side) - + ''; - - table += ''; - var startingPortal = (plugin.apList.currentPage[side] - 1) * plugin.apList.portalPerPage; - for(var i = startingPortal; i < startingPortal + plugin.apList.portalPerPage; i++) { - var portal = plugin.apList.sortedPortals[side][i]; - table += plugin.apList.tableRowBuilder(side, portal); - } - table += '
'; - $('div#ap-list-table').html(table); - - plugin.apList.updatePaginationControl(); - plugin.apList.updateStats(); -} - -window.plugin.apList.tableHeaderBuilder = function(side) { - var headerRow = ''; - - $.each(plugin.apList.tableColumns[side], function(ind, column) { - var cssClass = column.headerTooltip ? (column.cssClass + ' help') : column.cssClass; - var title = column.headerTooltip ? column.headerTooltip : ''; - var onclick = column.headerOnClick ? column.headerOnClick: ''; - var content = column.headerFunction ? column.headerFunction() : column.header; - headerRow += '' - + content - + ''; - }); - - headerRow += ''; - return headerRow; -} - -window.plugin.apList.tableRowBuilder = function(side,portal) { - var row = ""; - - $.each(plugin.apList.tableColumns[side], function(ind, column) { - var content = portal ? column.contentFunction(portal) : ' '; - row += '' - + content - + ''; - }); - - row += ''; - return row; -} - -window.plugin.apList.getHeaderCheckbox = function() { - var onClick = 'window.plugin.apList.clearDestroyPortals();'; - var content = '
' - var div = plugin.apList.getCheckbox(onClick, null, content); - return div; -} - -window.plugin.apList.getPortalDestroyCheckbox = function(portal) { - // Change background color to border color if portal selected for destroy - var addedClass = plugin.apList.destroyPortalIndex(portal.guid) >= 0 - ? 'ap-list-checkbox-selected' : ''; - var onClick = 'window.plugin.apList.destroyPortal(\'' + portal.guid + '\');'; - var div = plugin.apList.getCheckbox(onClick, addedClass, null); - return div; -} - -window.plugin.apList.getCheckbox = function(onClick, addedClass, content) { - // 2 div for centering checkbox horizontally and vertically, - // click event on outest div for people with not so good aiming - var div = '
' - + '
' - + (content || '') - + '
' - + '
'; - return div; -} - -// Combine ap title and test -window.plugin.apList.getPortalApText = function(portal) { - var title = plugin.apList.getPortalApTitle(portal); - return '
' + digits(portal.playerApGain.totalAp) + '
'; -} - -// Friendly portal will get resonator upgrade list, enemy -// portal will get ap breakdown -window.plugin.apList.getPortalApTitle = function(portal) { - var t; - 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' - + 'R:' + playerApGain.resoCount + ' L:' + playerApGain.linkCount + ' CF:' + playerApGain.fieldCount + '\n' - + 'Destroy AP\t=\t' + digits(playerApGain.destroyAp) + '\n' - + 'Capture AP\t=\t' + digits(playerApGain.captureAp) + '\n' - + 'Sum: ' + digits(playerApGain.totalAp) + ' AP'; - } - return t; -} - -window.plugin.apList.getPortalEffectiveLvText = function(portal) { - var title = plugin.apList.getPortalEffectiveLvTitle(portal); - return '
' + portal.effectiveLevel.effectiveLevel.toFixed(1) + '
'; -} - -window.plugin.apList.getPortalEffectiveLvTitle = function(portal) { - var t = 'Effective energy:\t' + portal.effectiveLevel.effectiveEnergy + '\n' - + 'Effect of Shields:\t' + portal.effectiveLevel.effectOfShields + '\n' - + 'Effect of resos dist:\t' + portal.effectiveLevel.effectOfResoDistance + '\n' - + 'Origin Level:\t' + portal.effectiveLevel.originLevel; - return t; -} - -// portal link - single click: select portal -// double click: zoom to and select portal -// hover: show address -window.plugin.apList.getPortalLink = function(portal) { - var latlng = [portal.locationE6.latE6/1E6, portal.locationE6.lngE6/1E6].join(); - var jsSingleClick = 'window.plugin.apList.selectPortal(\''+portal.guid+'\');return false'; - var jsDoubleClick = 'window.zoomToAndShowPortal(\''+portal.guid+'\', ['+latlng+']);return false'; - var perma = '/intel?latE6='+portal.locationE6.latE6 - +'&lngE6='+portal.locationE6.lngE6+'&z=17&pguid='+portal.guid; - //Use Jquery to create the link, which escape characters in TITLE and ADDRESS of portal - var a = $('',{ - "class": 'help', - text: portal.portalV2.descriptiveText.TITLE, - title: portal.portalV2.descriptiveText.ADDRESS, - href: perma, - onClick: jsSingleClick, - onDblClick: jsDoubleClick - })[0].outerHTML; - - var divClass = plugin.apList.destroyPortalIndex(portal.guid) >= 0 - ? 'ap-list-link ap-list-link-selected' - : 'ap-list-link'; - var div = '
'+a+'
'; - return div; -} - -window.plugin.apList.updatePaginationControl = function() { - $('#ap-list-current-p').html(plugin.apList.currentPage[plugin.apList.displaySide]); - $('#ap-list-total-p').html(plugin.apList.totalPage[plugin.apList.displaySide]); -} - -window.plugin.apList.updateStats = function() { - var destroyPortals = plugin.apList.destroyPortalsGuid.length; - if(destroyPortals === 0) { - title = 'Stats'; - } else { - var destroyAP = 0; - var averageEL = 0; - $.each(plugin.apList.destroyPortalsGuid, function(ind,guid) { - destroyAP += plugin.apList.cachedPortals[guid].playerApGain.totalAp; - averageEL += plugin.apList.cachedPortals[guid].effectiveLevel.effectiveLevel; - }); - averageEL = Math.round(averageEL / destroyPortals * 10) / 10; - - var title = 'Stats\n' - + 'Selected portal(s)\t=\t' + destroyPortals + '\n' - + 'Total AP\t=\t' + destroyAP + '\n' - + 'Average EL\t=\t' + averageEL; - } - - $('#ap-list-misc-info').attr('title', title); -} - -// 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(); - plugin.apList.sortedPortals[plugin.apList.SIDE_ENEMY] = new Array(); - - // Make a backup of cachedPortals with shallow copy - // If cache is not enabled, empty cachedPortals. In following - // "$.each" loop, the backup portal will copy back into - // cachedPortals if it exist in "window.portals"" and didn't change.' - var oldcachedPortal = $.extend({},plugin.apList.cachedPortals); - if(!plugin.apList.useCachedPortals) - plugin.apList.cachedPortals = {}; - - $.each(window.portals, function(key, value) { - var portal = value.options.details; - var cachedPortal = oldcachedPortal[key]; - // If portal is changed, update playerApGain with latest - // information - if(!cachedPortal - || value.timestamp !== cachedPortal.timestamp - || plugin.apList.isFieldsChanged(portal.portalV2.linkedFields, cachedPortal.portalV2.linkedFields)) { - // Shallow copy portal detail to cachedPortal - cachedPortal = $.extend({}, portal); - var side = plugin.apList.portalSide(portal); - var getApGainFunc = plugin.apList.playerApGainFunc[side]; - // Assign playerApGain and guid to cachedPortal - cachedPortal.timestamp = value.timestamp - cachedPortal.playerApGain = getApGainFunc(portal); - cachedPortal.effectiveLevel = plugin.apList.getEffectiveLevel(portal); - cachedPortal.guid = value.options.guid; - } - plugin.apList.cachedPortals[key] = cachedPortal; - }); - - // Add all portals to sortedPortals by side and sort sortedPortals by AP - $.each(plugin.apList.cachedPortals, function(key, portal) { - var side = plugin.apList.portalSide(portal); - plugin.apList.sortedPortals[side].push(portal); - }); - $.each(plugin.apList.sides, function(ind, side) { - plugin.apList.sortedPortals[side].sort(plugin.apList.comparePortal); - }); - - // Modify sortedPortals if any portal selected for destroy - plugin.apList.handleDestroyPortal(); - // Update pagination control data - plugin.apList.updateTotalPages(); -} - -// This function will make AP gain of field and link only count once if -// one of the connected portal is selected for destroy -window.plugin.apList.handleDestroyPortal = function() { - if(plugin.apList.destroyPortalsGuid.length === 0) return; - - var enemy = window.plugin.apList.SIDE_ENEMY; - var destroyedLinks = {}; - var destroyedFields = {}; - - // Clean up portal selected for destroy, remove from destroyPortalsGuid - // if portal not exist or change to friendly side - plugin.apList.destroyPortalsGuid = $.grep(plugin.apList.destroyPortalsGuid, function(portalGuid,ind) { - var portal = plugin.apList.cachedPortals[portalGuid]; - if(!portal || plugin.apList.portalSide(portal) !== enemy) return false; - return true; - }); - - // Loop through portals from highest AP to lowest AP, matching links and fields to the - // portal only if the portal is selected for destroy and have highest AP. - // Matching info stores in "destroyedLinks" and "destroyedFields" - $.each(plugin.apList.sortedPortals[enemy], function(ind, portal) { - if(plugin.apList.destroyPortalIndex(portal.guid) < 0) return true; - - $.each(portal.portalV2.linkedEdges || [], function(ind,link) { - // Skip if the link already matched with a portal - if(destroyedLinks[link.edgeGuid]) return true; - belongTo = {portalGuid: portal.guid}; - destroyedLinks[link.edgeGuid] = belongTo; - }); - $.each(portal.portalV2.linkedFields || [], function(ind,field) { - // Skip if the field already matched with a portal - if(destroyedFields[field]) return true; - belongTo = {portalGuid: portal.guid}; - destroyedFields[field] = belongTo; - }); - }); - - // Remove the link and field which was matched with another portal - var getApGainFunc = plugin.apList.playerApGainFunc[enemy]; - $.each(plugin.apList.sortedPortals[enemy], function(ind, portal) { - // Filter out links which was matched with another portal - var newLinkedEdges = $.grep(portal.portalV2.linkedEdges || [], function(link,ind) { - if(!destroyedLinks[link.edgeGuid]) return true; - return (destroyedLinks[link.edgeGuid].portalGuid === portal.guid); - }); - // Filter out fields which was matched with another portal - var newLinkedFields = $.grep(portal.portalV2.linkedFields || [], function(field,ind) { - if(!destroyedFields[field]) return true; - return (destroyedFields[field].portalGuid === portal.guid); - }); - - // Skip modifying portal if no link and field changed - if(newLinkedEdges.length === (portal.portalV2.linkedEdges || []).length - && newLinkedFields.length === (portal.portalV2.linkedFields || []).length) - return true; - - // Clone the portal with deep copy to avoid modifying original data in cachedPortal - var newPortal = $.extend(true, {}, portal); - // Assign new links and fields and calculate new playerApGain - if(portal.portalV2.linkedEdges) newPortal.portalV2.linkedEdges = newLinkedEdges; - if(portal.portalV2.linkedFields) newPortal.portalV2.linkedFields = newLinkedFields; - newPortal.playerApGain = getApGainFunc(newPortal); - - plugin.apList.sortedPortals[enemy][ind] = newPortal; - }); - - // Sorting portals with updated AP - plugin.apList.sortedPortals[enemy].sort(plugin.apList.comparePortal); -} - -window.plugin.apList.updateTotalPages = function() { - $.each(plugin.apList.sortedPortals, function(side, portals) { - plugin.apList.totalPage[side] = Math.max(Math.ceil(portals.length / plugin.apList.portalPerPage), 1); - plugin.apList.currentPage[side] = Math.min(plugin.apList.totalPage[side], plugin.apList.currentPage[side]); - }); -} - -window.plugin.apList.isFieldsChanged = function(a,b) { - // http://stackoverflow.com/questions/1773069/using-jquery-to-compare-two-arrays - return $(a).not(b).get().length === 0 && $(b).not(a).get().length === 0;; -} - -window.plugin.apList.portalSide = function(portal) { - return (portal.controllingTeam.team === PLAYER.team - || portal.controllingTeam.team === 'NEUTRAL') - ? plugin.apList.SIDE_FRIENDLY - : plugin.apList.SIDE_ENEMY; -} - -// Get AP of friendly portal -window.plugin.apList.getDeployOrUpgradeApGain = function(d) { - var playerResoCount = new Array(MAX_PORTAL_LEVEL + 1); - var otherReso = new Array(); - 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++) { - var reso = d.resonatorArray.resonators[i]; - // Empty reso - if(!reso) { - otherReso.push({slot: i, level: 0}); - continue; - } - // By player - if(reso.ownerGuid === window.PLAYER.guid) { - playerResoCount[reso.level] = (playerResoCount[reso.level] || 0) + 1; - continue; - } - // By others and level lower than player - if(reso.level < window.PLAYER.level) { - otherReso.push(reso); - } - } - - // Sort others reso low to high, last reso in otherReso get upgrade first. - otherReso.sort(function(a, b) {return a.level - b.level;}); - - // Find out available count of reso for each level - for(var i = window.PLAYER.level; i > 0 && otherReso.length > 0; i--) { - var availableCount = MAX_RESO_PER_PLAYER[i] - (playerResoCount[i] || 0); - // Loop through lower level reso of others and add to result - while(availableCount > 0 && otherReso.length > 0) { - var targetReso = otherReso.pop(); - // Can only upgrade lower level reso - if(targetReso.level >= i) - continue; - // Add upgraded reso to result - targetReso.newLevel = i; - upgradedReso.push(targetReso); - // Counting upgrade or deploy - (targetReso.level === 0) ? deployCount++ : upgradedCount++; - - availableCount--; - } - } - - 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 - }; -} - -window.plugin.apList.getAttackApGain = function(d) { - var resoCount = 0; - $.each(d.resonatorArray.resonators, function(ind, reso) { - if (!reso) - return true; - resoCount += 1; - }); - - var linkCount = d.portalV2.linkedEdges ? d.portalV2.linkedEdges.length : 0; - var fieldCount = d.portalV2.linkedFields ? d.portalV2.linkedFields.length : 0; - - var resoAp = resoCount * DESTROY_RESONATOR; - var linkAp = linkCount * DESTROY_LINK; - var fieldAp = fieldCount * DESTROY_FIELD; - var destroyAp = resoAp + linkAp + fieldAp; - var captureAp = CAPTURE_PORTAL + 8 * DEPLOY_RESONATOR + COMPLETION_BONUS; - var totalAp = destroyAp + captureAp; - - return { - totalAp: totalAp, - destroyAp: destroyAp, - captureAp: captureAp, - resoCount: resoCount, - linkCount: linkCount, - fieldCount: fieldCount - } -} - -window.plugin.apList.getEffectiveLevel = function(portal) { - var effectiveEnergy = 0; - var effectiveLevel = 0; - - var resosStats = plugin.apList.getResonatorsStats(portal); - - - // Calculate effective energy - - var effectOfShields = plugin.apList.getShieldsEffect(portal); - - // If avgResoDistance is 0, 8 resonators in the same place and can be treated as 1 resonator. - // So the minimum effect of resonator distance is 1/8 - var effectOfResoDistance = (1 + (resosStats.avgResoDistance / HACK_RANGE) * 7 ) / 8; - - effectiveEnergy = resosStats.currentEnergy * effectOfShields * effectOfResoDistance; - - // Calculate effective level - for(var i = MAX_PORTAL_LEVEL; i >= 0; i--) { - var baseLevel = i; - var baseLevelEnergy = RESO_NRG[baseLevel] * 8; - if(effectiveEnergy >= baseLevelEnergy) { - var energyToNextLevel = baseLevel === MAX_PORTAL_LEVEL - ? baseLevelEnergy - RESO_NRG[MAX_PORTAL_LEVEL - 1] * 8 // Extrapolate - : RESO_NRG[baseLevel + 1] * 8 - baseLevelEnergy; // Interpolate - - var additionalLevel = (effectiveEnergy - baseLevelEnergy) / energyToNextLevel; - effectiveLevel = baseLevel + additionalLevel; - break; - } - } - - // Account for damage do to player by portal - var portalLevel = parseInt(getPortalLevel(portal)); - if(effectiveLevel < portalLevel) { - var energyPect = resosStats.currentEnergy / resosStats.totalEnergy; - effectiveLevel = effectiveLevel * (1-energyPect) + portalLevel * energyPect; - } - - return { - effectiveLevel: Math.round(effectiveLevel * 10) / 10, - effectiveEnergy: parseInt(effectiveEnergy), - effectOfShields: Math.round(effectOfShields * 100) / 100, - effectOfResoDistance: Math.round(effectOfResoDistance * 100) / 100, - originLevel: portalLevel - }; -} - -window.plugin.apList.getResonatorsStats = function(portal) { - var totalEnergy = 0; - var currentEnergy = 0; - var avgResoDistance = 0; - - $.each(portal.resonatorArray.resonators, function(ind, reso) { - if (!reso) - return true; - totalEnergy += RESO_NRG[reso.level]; - currentEnergy += reso.energyTotal; - avgResoDistance += (reso.distanceToPortal / 8); - }); - return { - totalEnergy: totalEnergy, - currentEnergy: currentEnergy, - avgResoDistance: avgResoDistance}; -} - -window.plugin.apList.getShieldsEffect = function(portal) { - // shield effect: each shield's mitigation value is assumed to be the percentage of the damage it will absorb - // the rest of the damage gets through to the next shield, and so on. - // so, to calculate the total protection, we multiply the fractions of damage allowed through each shield - // to get a final figure of how much damage gets through - // e.g. - // one shield: mitigation 10 - lets 90% of the damage through - // two shields: mitigation 20 and 30 - first one lets 80% through, second 70% of the remaining - // so final amount let through = 0.8 * 0.7 = 0.56 = 56% damage let through - // four shields: mitigation 30 - 70% through each = 0.7 * 0.7 * 0.7 * 0.7 = 0.24 = 24% damage gets through all four - - var shieldsEffect = 1; - $.each(portal.portalV2.linkedModArray, function(ind, mod) { - if(!mod) - return true; - if(!mod.stats.MITIGATION) - return true; - shieldsEffect *= (1 - parseInt(mod.stats.MITIGATION)/100.0); - }); - return shieldsEffect; -} - -// For using in .sort(func) of sortedPortals -// Use options in plugin.apList.sortOptions. Each type of sortBy has -// array of options. Option consist of an ordering and a property chain. -// -// Sorting done by loop through the options, get the property by -// property chain of each option, compare the property of two object -// with the ordering of option and return the result when the first -// difference is found. -window.plugin.apList.comparePortal = function(a,b) { - var result = 0; - var options = plugin.apList.sortOptions[plugin.apList.sortBy]; - - $.each(options, function(indO, option) { - var aProperty = a; - var bProperty = b; - // Walking down the chain - $.each(option.chain, function(indPN, propertyName) { - aProperty = aProperty[propertyName]; - bProperty = bProperty[propertyName]; - }); - // compare next property if equal - if(aProperty === bProperty) return true; - - result = (aProperty > bProperty ? 1 : -1) * option.order; - return false; - }); - - return result; -} - -// 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) { - // Add error catching to avoid following link of portal if error - // occurred in renderPortalDetails or hooked plugin - try { - renderPortalDetails(guid); - } catch(e) { - console.error(e.message); - console.log(e.stack); - console.log('Skipping error in renderPortalDetails or hooked plugin') - } - plugin.apList.setPortalLocationIndicator(guid); -} - -window.plugin.apList.setPortalLocationIndicator = function(guid) { - var portal = window.portals[guid]; - if(!portal) return; - var startRadius = screen.availWidth / 2; - var portalRadius = portal.options.radius; - var latlng = portal.getLatLng(); - var property = { - radius: startRadius, - fill: false, - color: COLOR_SELECTED_PORTAL, - weight: 2, - opacity: 1, - portalRadius: portalRadius, - clickable: false }; - - if(plugin.apList.portalLocationIndicator) - map.removeLayer(plugin.apList.portalLocationIndicator); - if(plugin.apList.animTimeout) - clearTimeout(plugin.apList.animTimeout); - plugin.apList.portalLocationIndicator = L.circleMarker(latlng, property).addTo(map); - plugin.apList.animTimeout = setTimeout(plugin.apList.animPortalLocationIndicator,100); -} - -window.plugin.apList.animPortalLocationIndicator = function() { - var radius = plugin.apList.portalLocationIndicator.options.radius; - var portalRadius = plugin.apList.portalLocationIndicator.options.portalRadius - if(radius > portalRadius) { - var step = radius / 3; - if(radius < 80) step = step / 3; - var newRadius = plugin.apList.portalLocationIndicator.options.radius -= step; - plugin.apList.portalLocationIndicator.setRadius(newRadius); - if(plugin.apList.animTimeout) - clearTimeout(plugin.apList.animTimeout); - plugin.apList.animTimeout = setTimeout(plugin.apList.animPortalLocationIndicator,100); - } else { - map.removeLayer(plugin.apList.portalLocationIndicator); - } -} - -window.plugin.apList.changePage = function(step, toEnd) { - var side = plugin.apList.displaySide; - var oldPage = plugin.apList.currentPage[side]; - - if(toEnd) { - if(step < 0) plugin.apList.currentPage[side] = 1; - if(step > 0) plugin.apList.currentPage[side] = plugin.apList.totalPage[side] - } else { - plugin.apList.currentPage[side] += step; - if(plugin.apList.currentPage[side] < 1) - plugin.apList.currentPage[side] = 1; - if(plugin.apList.currentPage[side] > plugin.apList.totalPage[side]) - plugin.apList.currentPage[side] = plugin.apList.totalPage[side]; - } - - if(plugin.apList.currentPage[side] !== oldPage) - plugin.apList.updatePortalTable(side); -} - -window.plugin.apList.changeSorting = function(sortBy) { - var oldSortBy = plugin.apList.sortBy; - plugin.apList.sortBy = sortBy; - if(plugin.apList.sortBy !== oldSortBy) { - plugin.apList.updateSortedPortals(); - plugin.apList.updatePortalTable(plugin.apList.displaySide); - } -} - -window.plugin.apList.clearDestroyPortals = function() { - plugin.apList.destroyPortalsGuid = new Array(); - - plugin.apList.updateSortedPortals(); - plugin.apList.updatePortalTable(plugin.apList.displaySide); -} - -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); -} - -// Change display table to enemy portals -window.plugin.apList.displayEnemy = function() { - plugin.apList.changeDisplaySide(plugin.apList.SIDE_ENEMY); -} - -window.plugin.apList.changeDisplaySide = function(side) { - var isChange = (plugin.apList.displaySide !== side); - var scrollTo = 0; - if(isChange) { - plugin.apList.displaySide = side; - plugin.apList.updatePortalTable(side); - plugin.apList.toggleSideLabel(side); - scrollTo = $("#ap-list").position().top + $("#ap-list").outerHeight() - - $("#sidebar").height() + $("#sidebar").scrollTop(); - } - $('#sidebar').scrollTop(scrollTo); -} - -window.plugin.apList.toggleSideLabel = function(side) { - $.each(plugin.apList.sides, function(ind,key) { - var labelClass = plugin.apList.sideLabelClass[key]; - var opacity = (key === side) ? 1.0 : 0.5; - $(labelClass).css("opacity", opacity); - }); -} - -window.plugin.apList.hideReloadLabel = function() { - $('#ap-list-reload').hide(); -} - -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; - plugin.apList.playerApGainFunc[plugin.apList.SIDE_FRIENDLY] - = plugin.apList.getDeployOrUpgradeApGain; - plugin.apList.playerApGainFunc[plugin.apList.SIDE_ENEMY] - = plugin.apList.getAttackApGain; - plugin.apList.sideLabelClass[plugin.apList.SIDE_FRIENDLY] - = "#ap-list-frd"; - plugin.apList.sideLabelClass[plugin.apList.SIDE_ENEMY] - = "#ap-list-eny"; - plugin.apList.sortedPortals[plugin.apList.SIDE_FRIENDLY] = new Array(); - plugin.apList.sortedPortals[plugin.apList.SIDE_ENEMY] = new Array(); -} - -window.plugin.apList.setupSorting = function() { - var optionELAsc = { - order: plugin.apList.SORT_ASC, - chain: ['effectiveLevel','effectiveLevel']}; - var optionAPDesc = { - order: plugin.apList.SORT_DESC, - chain: ['playerApGain','totalAp']}; - var optionGuidDesc = { - order: plugin.apList.SORT_DESC, - chain: ['guid']}; - - // order by EL -> AP -> guid - plugin.apList.sortOptions[plugin.apList.SORT_BY_EL] = [optionELAsc, optionAPDesc, optionGuidDesc]; - // order by AP -> EL -> guid - plugin.apList.sortOptions[plugin.apList.SORT_BY_AP] = [optionAPDesc, optionELAsc, optionGuidDesc]; -} - -// Setup table columns for header builder and row builder -window.plugin.apList.setupTableColumns = function() { - var enemyColumns = new Array(); - var friendlyColumns = new Array(); - - // AP and Eff. LV columns are same in enemy and friendly table - var apColumn = { - header: 'AP', - headerOnClick: 'plugin.apList.changeSorting(plugin.apList.SORT_BY_AP);', - headerTooltip: 'Click to sort by AP', - cssClass: 'ap-list-td-ap', - contentFunction: plugin.apList.getPortalApText - }; - var effectiveLevelColumn = { - header: 'EL', - headerOnClick: 'plugin.apList.changeSorting(plugin.apList.SORT_BY_EL);', - headerTooltip: 'Effective Level\nClick to sort by EL', - cssClass: 'ap-list-td-eff-lv', - contentFunction: plugin.apList.getPortalEffectiveLvText - }; - - // Columns: Checkbox | Portal | AP | Eff. LV - enemyColumns.push({ - headerFunction: plugin.apList.getHeaderCheckbox, - headerTooltip: 'Unselect all', - cssClass: 'ap-list-td-checkbox', - contentFunction: plugin.apList.getPortalDestroyCheckbox - }); - enemyColumns.push({ - header: 'Portal', - cssClass: 'ap-list-td-link ap-list-td-link-eny', - contentFunction: plugin.apList.getPortalLink - }); - enemyColumns.push(apColumn); - enemyColumns.push(effectiveLevelColumn); - - // Columns: Portal | AP | Eff. LV - friendlyColumns.push({ - header: 'Portal', - cssClass: 'ap-list-td-link ap-list-td-link-frd', - contentFunction: plugin.apList.getPortalLink - }); - friendlyColumns.push(apColumn); - friendlyColumns.push(effectiveLevelColumn); - - plugin.apList.tableColumns[plugin.apList.SIDE_ENEMY] = enemyColumns; - plugin.apList.tableColumns[plugin.apList.SIDE_FRIENDLY] = friendlyColumns; -} - -window.plugin.apList.setupCSS = function() { - $("'); + // Setup sorting + $(document).on('click.portalslist', '#portalslist table th', function() { + $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,window.plugin.portalslist.filter)); + }); + $(document).on('click.portalslist', '#portalslist .filterAll', function() { + $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,0)); + }); + $(document).on('click.portalslist', '#portalslist .filterRes', function() { + $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,1)); + }); + $(document).on('click.portalslist', '#portalslist .filterEnl', function() { + $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,2)); + }); +} + +// PLUGIN END ////////////////////////////////////////////////////////// + +@@PLUGINEND@@ diff --git a/plugins/broken/scoreboard.user.js b/plugins/broken/scoreboard.user.js new file mode 100644 index 00000000..d80cc819 --- /dev/null +++ b/plugins/broken/scoreboard.user.js @@ -0,0 +1,340 @@ +// ==UserScript== +// @id iitc-plugin-scoreboard@vita10gy +// @name IITC plugin: show a localized scoreboard. +// @category Info +// @version 0.1.9.@@DATETIMEVERSION@@ +// @namespace https://github.com/jonatkins/ingress-intel-total-conversion +// @updateURL @@UPDATEURL@@ +// @downloadURL @@DOWNLOADURL@@ +// @description [@@BUILDNAME@@-@@BUILDDATE@@] A localized scoreboard. +// @include https://www.ingress.com/intel* +// @include http://www.ingress.com/intel* +// @match https://www.ingress.com/intel* +// @match http://www.ingress.com/intel* +// @grant none +// ==/UserScript== + +@@PLUGINSTART@@ + +// PLUGIN START //////////////////////////////////////////////////////// + +// use own namespace for plugin +window.plugin.scoreboard = function() {}; + +window.plugin.scoreboard.scores = {}; +window.plugin.scoreboard.playerGuids = new Array(); + +window.plugin.scoreboard.resetTeam = function(team) { + var scores = window.plugin.scoreboard.scores['team']; + scores[team] = {}; + scores[team]['mu'] = 0; + scores[team]['count_fields'] = 0; + scores[team]['count_links'] = 0; + scores[team]['count_portals'] = 0; + scores[team]['count_resonators'] = 0; + scores[team]['count_mods'] = 0; + scores[team]['link_length'] = 0; + scores[team]['field_area'] = 0; + scores[team]['largest'] = {}; +}; + +window.plugin.scoreboard.initPlayer = function(player, team) { + var scores = window.plugin.scoreboard.scores['player']; + if(scores[player] === undefined) { + scores[player] = {}; + scores[player]['team'] = team; + scores[player]['mu'] = 0; + scores[player]['count_fields'] = 0; + scores[player]['count_links'] = 0; + scores[player]['count_portals'] = 0; + scores[player]['count_resonators'] = 0; + scores[player]['link_length'] = 0; + scores[player]['field_area'] = 0; + + scores[player]['count_mods'] = 0; + scores[player]['largest'] = {}; + window.plugin.scoreboard.playerGuids.push(player); + } +} + +window.plugin.scoreboard.compileStats = function() { + var somethingInView = false; + window.plugin.scoreboard.playerGuids = new Array(); + window.plugin.scoreboard.scores = {'team': {}, 'player': {}}; + var scores = window.plugin.scoreboard.scores; + window.plugin.scoreboard.resetTeam(TEAM_RES); + window.plugin.scoreboard.resetTeam(TEAM_ENL); + + $.each(window.fields, function(qk, val) { + + var team = getTeam(val.options.data); + + // Google sends fields long since dead in the data. This makes sure it's still actually up. + if(window.portals[val.options.vertices.vertexA.guid] !== undefined || + window.portals[val.options.vertices.vertexB.guid] !== undefined || + window.portals[val.options.vertices.vertexC.guid] !== undefined ) { + + var fieldArea = window.plugin.scoreboard.fieldArea(val); + somethingInView = true; + scores['team'][team]['count_fields']++; + scores['team'][team]['field_area'] += fieldArea; + val.options.data.fieldArea = fieldArea; + var largestArea = scores['team'][team]['largest']['field_area']; + if(largestArea === undefined || largestArea.options.data.fieldArea < val.options.data.fieldArea) { + largestArea = val; + } + scores['team'][team]['largest']['field_area'] = largestArea; + + } + }); + $.each(window.links, function(qk, link) { + somethingInView = true; + var team = getTeam(link.options.data); + + scores['team'][team]['count_links']++; + + var linkLength = window.plugin.scoreboard.portalDistance(link.options.data.edge.destinationPortalLocation,link.options.data.edge.originPortalLocation); + scores['team'][team]['link_length'] += linkLength; + + var largestLink = scores['team'][team]['largest']['link']; + if(largestLink === undefined || largestLink.distance < linkLength) { + largestLink = {}; + largestLink.distance = linkLength; + } + scores['team'][team]['largest']['link'] = largestLink; + + }); + $.each(window.portals, function(qk, portal) { + somethingInView = true; + + var team = getTeam(portal.options.details); + if(team !== TEAM_NONE) { + var player = portal.options.details.captured.capturingPlayerId; + window.plugin.scoreboard.initPlayer(player, team); + scores['team'][team]['count_portals']++; + scores['player'][player]['count_portals']++; + + $.each(portal.options.details.portalV2.linkedModArray, function(ind, mod) { + if(mod !== null) { + window.plugin.scoreboard.initPlayer(mod.installingUser, team); + somethingInView = true; + scores['team'][team]['count_mods']++; + scores['player'][mod.installingUser]['count_mods']++; + } + }); + + $.each(portal.options.details.resonatorArray.resonators, function(ind, reso) { + if(reso !== null) { + somethingInView = true; + window.plugin.scoreboard.initPlayer(reso.ownerGuid, team); + scores['team'][team]['count_resonators']++; + scores['player'][reso.ownerGuid]['count_resonators']++; + } + }); + } + }); + return somethingInView; +}; + +window.plugin.scoreboard.teamTableRow = function(field,title) { + var scores = window.plugin.scoreboard.scores['team']; + var retVal = '' + + title + + '' + + window.digits(Math.round(scores[TEAM_RES][field])) + + '' + + window.digits(Math.round(scores[TEAM_ENL][field])) + + '' + + window.digits(Math.round(scores[TEAM_RES][field] + scores[TEAM_ENL][field])) + + ''; + return retVal; +}; + +window.plugin.scoreboard.fieldInfoArea = function(field) { + var title = ''; + var retVal = ''; + + if(field !== undefined) { + var portal = window.portals[field.options.vertices.vertexA.guid]; + if(portal !== undefined) { + title = ' @' + portal.options.details.portalV2.descriptiveText.TITLE; + } + + retVal = '
' + + window.digits(Math.round(field.options.data.fieldArea)) + + '
'; + + } else { + retVal = 'N/A'; + } + return retVal; +}; + +window.plugin.scoreboard.playerTableRow = function(playerGuid) { + var scores = window.plugin.scoreboard.scores['player']; + var retVal = '' + + window.getPlayerName(playerGuid); + + ''; + + $.each(['count_portals','count_resonators','count_mods'], function(i, field) { + retVal += '' + + window.digits(Math.round(scores[playerGuid][field])) + + ''; + }); + retVal += ''; + return retVal; +}; + +window.plugin.scoreboard.playerTable = function(sortBy) { + + // Sort the playerGuid array by sortBy + window.plugin.scoreboard.playerGuids.sort(function(a, b) { + var playerA = window.plugin.scoreboard.scores['player'][a]; + var playerB = window.plugin.scoreboard.scores['player'][b]; + var retVal = 0; + if(sortBy === 'names') { + retVal = window.getPlayerName(a).toLowerCase() < window.getPlayerName(b).toLowerCase() ? -1 : 1; + } else { + retVal = playerB[sortBy] - playerA[sortBy]; + } + return retVal; + }); + + var sort = window.plugin.scoreboard.playerTableSort; + var scoreHtml = '' + + '' + + '' + + '' + + ''; + $.each(window.plugin.scoreboard.playerGuids, function(index, guid) { + scoreHtml += window.plugin.scoreboard.playerTableRow(guid); + }); + scoreHtml += '
PlayerPortalsResonatorsMods
'; + + return scoreHtml; +} + +// A little helper function so the above isn't so messy +window.plugin.scoreboard.playerTableSort = function(name, by) { + var retVal = 'data-sort="' + name + '"'; + if(name === by) { + retVal += ' class="sorted"'; + } + return retVal; +}; + +window.plugin.scoreboard.display = function() { + + var somethingInView = window.plugin.scoreboard.compileStats(); + var scores = window.plugin.scoreboard.scores; + var scoreHtml = ''; + var title = ''; + + if(somethingInView) { + scoreHtml += '' + + '' + + window.plugin.scoreboard.teamTableRow('count_fields','Field #') + + window.plugin.scoreboard.teamTableRow('field_area','Field (km²)') + + window.plugin.scoreboard.teamTableRow('count_links','Link #') + + window.plugin.scoreboard.teamTableRow('link_length','Link (m)') + + window.plugin.scoreboard.teamTableRow('count_portals','Portals') + + window.plugin.scoreboard.teamTableRow('count_resonators','Resonators') + + window.plugin.scoreboard.teamTableRow('count_mods','Mods') + + '
ResistanceEnlightenedTotal
'; + + scoreHtml += '' + + '' + + '' + + '' + + '
ResistanceEnlightened
Largest Field (km²)' + + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_RES]['largest']['field_area']) + + '' + + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_ENL]['largest']['field_area']) + + '
Longest Link (m)'; + if(scores['team'][TEAM_RES]['largest']['link'] === undefined) { + scoreHtml += 'N/A'; + } + else { + scoreHtml += window.digits(Math.round(scores['team'][TEAM_RES]['largest']['link']['distance'])); + } + scoreHtml += ''; + + if(scores['team'][TEAM_ENL]['largest']['link'] === undefined) { + scoreHtml += 'N/A'; + } + else { + scoreHtml += window.digits(Math.round(scores['team'][TEAM_ENL]['largest']['link']['distance'])); + } + scoreHtml += '
' + + '
' + + window.plugin.scoreboard.playerTable('count_portals') + + '
'; + + scoreHtml += '
Click on player table headers to sort by that column. ' + + 'Score is subject to portals available based on zoom level. ' + + 'If names are unresolved try again. For best results wait until updates are fully loaded.
'; + } else { + scoreHtml += 'You need something in view.'; + title = 'nothing in view'; + } + + dialog({ + html: '
' + scoreHtml + '
', + title: 'Scoreboard: ' + title, + dialogClass: 'ui-dialog-scoreboard', + id: 'scoreboard' + }); + + //run the name resolving process + resolvePlayerNames(); +} + +window.plugin.scoreboard.portalDistance = function(portalAE6Location, portalBE6Location) { + portalA = new L.LatLng(portalAE6Location.latE6 / 1E6, portalAE6Location.lngE6 / 1E6); + portalB = new L.LatLng(portalBE6Location.latE6 / 1E6, portalBE6Location.lngE6 / 1E6); + return (portalA.distanceTo(portalB)); +} + +window.plugin.scoreboard.fieldArea = function(field) { + var verts = field.options.vertices; + var sideA = window.plugin.scoreboard.portalDistance(verts.vertexA.location,verts.vertexB.location) / 1000; + var sideB = window.plugin.scoreboard.portalDistance(verts.vertexB.location,verts.vertexC.location) / 1000; + var sideC = window.plugin.scoreboard.portalDistance(verts.vertexC.location,verts.vertexA.location) / 1000; + // Heron's Formula; + var perimeter = sideA + sideB + sideC; + var s = perimeter/2; + return Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC)); +} + +var setup = function() { + $('#toolbox').append('
Scoreboard'); + $('head').append(''); + // Setup sorting + $(document).on('click', '#players table th', function() { + $('#players').html(window.plugin.scoreboard.playerTable($(this).data('sort'))); + }); +} + +// PLUGIN END ////////////////////////////////////////////////////////// + +@@PLUGINEND@@ diff --git a/plugins/compute-ap-stats.user.js b/plugins/compute-ap-stats.user.js index 8aa3b975..0e783765 100644 --- a/plugins/compute-ap-stats.user.js +++ b/plugins/compute-ap-stats.user.js @@ -1,141 +1,15 @@ // ==UserScript== // @id iitc-plugin-compute-ap-stats@Hollow011 // @name IITC plugin: Compute AP statistics -// @category Info +// @category Deleted // @version 0.3.1.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ -// @description [@@BUILDNAME@@-@@BUILDDATE@@] Displays the per-team AP gains available in the current view. +// @description PLUGIN CURRENTLY UNAVAILABLE // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* // @match http://www.ingress.com/intel* // @grant none // ==/UserScript== - -@@PLUGINSTART@@ - -// PLUGIN START //////////////////////////////////////////////////////// - -// use own namespace for plugin -window.plugin.compAPStats = function() {}; - -window.plugin.compAPStats.setupCallback = function() { - // add a new div to the bottom of the sidebar and style it - $('#sidebar').append('
'); - $('#available_ap_display').css({'color':'#ffce00', 'font-size':'90%', 'padding':'4px 2px'}); - - // do an initial calc for sidebar sizing purposes - window.plugin.compAPStats.onPositionMove(); - - // make the value update when the map data updates - window.addHook('mapDataRefreshEnd', window.plugin.compAPStats.onPositionMove); - -} - -window.plugin.compAPStats.onPositionMove = function() { - var result = window.plugin.compAPStats.compAPStats(); - $('#available_ap_display').html('Available AP in this area:' - + '' - + '' - + '
Enlightened:' + digits(result[1]) + '
Resistance:' + digits(result[0]) + '
'); -} - -window.plugin.compAPStats.missingResonatorAP = function(portal) { - var resAP = 0; - var missing_resonators = 0; - $.each(portal.resonatorArray.resonators, function(ind, reso) { - if(reso === null) { - missing_resonators++; - } - }); - if(missing_resonators > 0) { - resAP = window.DEPLOY_RESONATOR * missing_resonators; - resAP += window.COMPLETION_BONUS; - } - return(resAP); -}; - -window.plugin.compAPStats.compAPStats = function() { - - var totalAP_RES = 0; - var totalAP_ENL = 0; - - var allResEdges = []; - var allResFields = []; - var allEnlEdges = []; - var allEnlFields = []; - - var displayBounds = map.getBounds(); - - // Grab every portal in the viewable area and compute individual AP stats - $.each(window.portals, function(ind, portal) { - var d = portal.options.details; - - // eliminate offscreen portals (selected, and in padding) - if(!displayBounds.contains(portal.getLatLng())) return true; - - var portalStats = getAttackApGain(d); - var portalSum = portalStats.resoAp + portalStats.captureAp; - - if (getTeam(d) === TEAM_ENL) { - totalAP_RES += portalSum; - - $.each(d.portalV2.linkedEdges||[], function(ind, edge) { - if(!edge) return true; - allEnlEdges.push(edge.edgeGuid); - }); - - $.each(d.portalV2.linkedFields||[], function(ind, field) { - if(!field) return true; - allEnlFields.push(field); - }); - - totalAP_ENL += window.plugin.compAPStats.missingResonatorAP(d); - - } - else if (getTeam(d) === TEAM_RES) { - totalAP_ENL += portalSum; - - $.each(d.portalV2.linkedEdges||[], function(ind, edge) { - if(!edge) return true; - allResEdges.push(edge.edgeGuid); - }); - - $.each(d.portalV2.linkedFields||[], function(ind, field) { - if(!field) return true; - allResFields.push(field); - }); - - totalAP_RES += window.plugin.compAPStats.missingResonatorAP(d); - - } else { - // it's a neutral portal, potential for both teams. by definition no fields or edges - totalAP_ENL += portalSum; - totalAP_RES += portalSum; - } - }); - - // Compute team field AP - allResFields = uniqueArray(allResFields); - totalAP_ENL += (allResFields.length * DESTROY_FIELD); - allEnlFields = uniqueArray(allEnlFields); - totalAP_RES += (allEnlFields.length * DESTROY_FIELD); - - // Compute team Link AP - allResEdges = uniqueArray(allResEdges); - totalAP_ENL += (allResEdges.length * DESTROY_LINK); - allEnlEdges = uniqueArray(allEnlEdges); - totalAP_RES += (allEnlEdges.length * DESTROY_LINK); - - return [totalAP_RES, totalAP_ENL]; -} - -var setup = function() { - window.plugin.compAPStats.setupCallback(); -} - -// PLUGIN END ////////////////////////////////////////////////////////// - -@@PLUGINEND@@ diff --git a/plugins/debug-raw-portal-data.user.js b/plugins/debug-raw-portal-data.user.js index 58302591..db87f1c4 100644 --- a/plugins/debug-raw-portal-data.user.js +++ b/plugins/debug-raw-portal-data.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-raw-portal-data // @name IITC plugin: Debug: Raw portal JSON data // @category Debug -// @version 0.2.2.@@DATETIMEVERSION@@ +// @version 0.2.3.@@DATETIMEVERSION@@ // @namespace rawdata // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -36,40 +36,43 @@ window.plugin.rawdata.showPortalData = function(guid) { } - var d = window.portals[guid].options.details; + var data = window.portals[guid].options.data; var ts = window.portals[guid].options.timestamp; - var title = 'Raw portal data: ' + (d.portalV2.descriptiveText.TITLE || '') + ' ('+guid+')'; + var title = 'Raw portal data: ' + (data.title || '') + ' ('+guid+')'; var body = 'Portal GUID: '+guid+'
' + 'Entity timestamp: '+ts+' - '+window.unixTimeToDateTimeString(ts,true)+'
' + - '
'+JSON.stringify(d,null,2)+'
'; + '
'+JSON.stringify(data,null,2)+'
'; + + var details = portalDetail.get(guid); + if (details) { + body += 'Portal details:
'+JSON.stringify(details,null,2)+'
'; + } + body += '

Links referencing this portal

'; var haslinks = false; - for (var lguid in window.links) { + var linkGuids = getPortalLinks(guid); + $.each(linkGuids.in.concat(linkGuids.out), function(i,lguid) { var l = window.links[lguid]; - var ld = l.options.details; - if (ld.edge.originPortalGuid == guid || ld.edge.destinationPortalGuid == guid) { - body += 'Link GUID: '+l.options.guid+'
'+JSON.stringify(ld,null,2)+'
'; - haslinks = true; - } - } + var ld = l.options.data; + body += 'Link GUID: '+l.options.guid+'
'+JSON.stringify(ld,null,2)+'
'; + haslinks = true; + }); + if (!haslinks) body += '

No links to/from this portal

'; body += '

Fields referencing this portal

'; var hasfields = false; - for (var fguid in window.fields) { + var fieldGuids = getPortalFields(guid); + $.each(fieldGuids, function(i,fguid) { var f = window.fields[fguid]; - var fd = f.options.details; - if (fd.capturedRegion.vertexA.guid == guid || - fd.capturedRegion.vertexB.guid == guid || - fd.capturedRegion.vertexC.guid == guid) { - body += 'Field guid: '+f.options.guid+'
'+JSON.stringify(fd,null,2)+'
'; - hasfields = true; - } - } + var fd = f.options.data; + body += 'Field guid: '+f.options.guid+'
'+JSON.stringify(fd,null,2)+'
'; + hasfields = true; + }); if (!hasfields) body += '

No fields linked to this portal

'; dialog({ diff --git a/plugins/draw-resonators.user.js b/plugins/draw-resonators.user.js index 6e7ee025..f85d3b2f 100644 --- a/plugins/draw-resonators.user.js +++ b/plugins/draw-resonators.user.js @@ -1,811 +1,15 @@ // ==UserScript== // @id iitc-plugin-draw-resonators@xelio // @name IITC plugin: Draw resonators -// @category Layer +// @category Deleted // @version 0.4.0.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ -// @description [@@BUILDNAME@@-@@BUILDDATE@@] Draw resonators on map. With stylers to highlight resonators with specific criteria. +// @description PLUGIN CURRENTLY UNAVAILABLE // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* // @match http://www.ingress.com/intel* // @grant none // ==/UserScript== - -@@PLUGINSTART@@ - -// PLUGIN START //////////////////////////////////////////////////////// - -// use own namespace for plugin -window.plugin.drawResonators = function() {}; - - -window.plugin.drawResonators.options; -window.plugin.drawResonators.render; - - - -//////// Render for handling render of resonators //////// - -// As long as 'window.Render.prototype.createPortalEntity' delete and recreate portal -// on any change of data, this resonator render should make resonator create and remove -// with portal correctly. -// -// Resonators will create when -// 1.Portal added to map -// 2.Zooming in to enable zoom level -// -// Resonators will remove when -// 1.Portal removed from map -// 2.Zooming out beyond enable zoom level - -window.plugin.drawResonators.Render = function(options) { - this.enableZoomLevel = options['enableZoomLevel']; - this.useStyler = ''; - - this.stylers = {}; - this.resonators = {}; - this.resonatorLayerGroup = new L.LayerGroup(); - this.addStyler(new window.plugin.drawResonators.Styler()); - this.beforeZoomLevel = map.getZoom(); - - this.portalAdded = this.portalAdded.bind(this); - this.createResonatorEntities = this.createResonatorEntities.bind(this); - this.deleteResonatorEntities = this.deleteResonatorEntities.bind(this); - this.handleResonatorEntitiesBeforeZoom = this.handleResonatorEntitiesBeforeZoom.bind(this); - this.handleResonatorEntitiesAfterZoom = this.handleResonatorEntitiesAfterZoom.bind(this); - this.handleEnableZoomLevelChange = this.handleEnableZoomLevelChange.bind(this); - this.portalSelectionChange = this.portalSelectionChange.bind(this); - this.changeStyler = this.changeStyler.bind(this); - this.getStylersList = this.getStylersList.bind(this); -}; - -window.plugin.drawResonators.Render.prototype.registerHook = function() { - window.addHook('portalAdded', this.portalAdded); - window.addHook('portalSelected', this.portalSelectionChange); - window.map.on('zoomstart', this.handleResonatorEntitiesBeforeZoom); - window.map.on('zoomend', this.handleResonatorEntitiesAfterZoom); -} - -window.plugin.drawResonators.Render.prototype.portalAdded = function(data) { - var marker = data.portal; - var render = this; - - marker.on('add', function() { - render.createResonatorEntities(this); // the 'this' in here is the portal. - }); - - marker.on('remove', function() { - render.deleteResonatorEntities(this.options.guid); // the 'this' in here is the portal. - }); -} - -window.plugin.drawResonators.Render.prototype.createResonatorEntities = function(portal) { - // No need to check for existing resonators, as old resonators should be removed with the portal marker. - - if(!this.isResonatorsShow()) return; - var portalDetails = portal.options.details; - var resonatorsWithConnector = new L.LayerGroup() - - var portalLatLng = [portalDetails.locationE6.latE6/1E6, portalDetails.locationE6.lngE6/1E6]; - var portalSelected = selectedPortal === portal.options.guid; - - for(var i in portalDetails.resonatorArray.resonators) { - resoData = portalDetails.resonatorArray.resonators[i]; - if(resoData === null) continue; - - var resoLatLng = this.getResonatorLatLng(resoData.distanceToPortal, resoData.slot, portalLatLng); - - var resoMarker = this.createResoMarker(resoData, resoLatLng, portalSelected); - var connMarker = this.createConnMarker(resoData, resoLatLng, portalLatLng, portalSelected); - - resonatorsWithConnector.addLayer(resoMarker); - resonatorsWithConnector.addLayer(connMarker); - } - - resonatorsWithConnector.options = { - details: portalDetails.resonatorArray.resonators, - guid: portal.options.guid - }; - - this.resonators[portal.options.guid] = resonatorsWithConnector; - this.resonatorLayerGroup.addLayer(resonatorsWithConnector); - - // bring portal in front of resonator connector - portal.bringToFront(); -} - -window.plugin.drawResonators.Render.prototype.createResoMarker = function(resoData, resoLatLng, portalSelected) { - var resoProperty = this.getStyler().getResonatorStyle(resoData, portalSelected); - resoProperty.type = 'resonator'; - resoProperty.details = resoData; - var reso = L.circleMarker(resoLatLng, resoProperty); - return reso; -} - -window.plugin.drawResonators.Render.prototype.createConnMarker = function(resoData, resoLatLng, portalLatLng, portalSelected) { - var connProperty = this.getStyler().getConnectorStyle(resoData, portalSelected); - connProperty.type = 'connector'; - connProperty.details = resoData; - var conn = L.polyline([portalLatLng, resoLatLng], connProperty); - return conn; -} - -window.plugin.drawResonators.Render.prototype.getResonatorLatLng = function(dist, slot, portalLatLng) { - // offset in meters - var dn = dist*SLOT_TO_LAT[slot]; - var de = dist*SLOT_TO_LNG[slot]; - - // Coordinate offset in radians - var dLat = dn/EARTH_RADIUS; - var dLon = de/(EARTH_RADIUS*Math.cos(Math.PI/180*portalLatLng[0])); - - // OffsetPosition, decimal degrees - var lat0 = portalLatLng[0] + dLat * 180/Math.PI; - var lon0 = portalLatLng[1] + dLon * 180/Math.PI; - - return [lat0, lon0]; -} - -window.plugin.drawResonators.Render.prototype.deleteResonatorEntities = function(portalGuid) { - if (!(portalGuid in this.resonators)) return; - - var r = this.resonators[portalGuid]; - this.resonatorLayerGroup.removeLayer(r); - delete this.resonators[portalGuid]; -} - -// Save zoom level before zoom, use to determine redraw of resonator -window.plugin.drawResonators.Render.prototype.handleResonatorEntitiesBeforeZoom = function() { - this.beforeZoomLevel = map.getZoom(); -} - -window.plugin.drawResonators.Render.prototype.handleResonatorEntitiesAfterZoom = function() { - if(!this.isResonatorsShow()) { - this.clearAllResonators(); - return; - } - - // Draw all resonators if they were not drawn - if(!this.isResonatorsShowBeforeZoom()) { - this.drawAllResonators(); - } -} - -window.plugin.drawResonators.Render.prototype.handleEnableZoomLevelChange = function(zoomLevel) { - this.enableZoomLevel = zoomLevel; - - if(!this.isResonatorsShow()) { - this.clearAllResonators(); - return; - } - - // Draw all resonators if they were not drawn - if(!Object.keys(this.resonators).length > 0) { - this.drawAllResonators(); - } -} - -window.plugin.drawResonators.Render.prototype.clearAllResonators = function() { - this.resonatorLayerGroup.clearLayers(); - this.resonators = {}; -} - -window.plugin.drawResonators.Render.prototype.drawAllResonators = function() { - var render = this; - - // loop through level of portals, only draw if the portal is shown on map - for (var guid in window.portals) { - var portal = window.portals[guid]; - // FIXME: need to find a proper way to check if a portal is added to the map without depending on leaflet internals - // (and without depending on portalsLayers either - that's IITC internal) - if (portal._map) { - render.createResonatorEntities(portal); - } - } -} - -window.plugin.drawResonators.Render.prototype.portalSelectionChange = function(data) { - this.toggleSelectedStyle(data.selectedPortalGuid); - this.toggleSelectedStyle(data.unselectedPortalGuid); -} - -window.plugin.drawResonators.Render.prototype.toggleSelectedStyle = function(portalGuid) { - if (!(portalGuid in this.resonators)) return; - - var render = this; - var portalSelected = selectedPortal === portalGuid; - var r = this.resonators[portalGuid]; - - r.eachLayer(function(entity) { - var style; - if(entity.options.type === 'resonator') { - style = render.getStyler().getResonatorStyle(entity.options.details, portalSelected); - } else { - style = render.getStyler().getConnectorStyle(entity.options.details, portalSelected); - } - - entity.setStyle(style); - }); -} - -window.plugin.drawResonators.Render.prototype.addStyler = function(styler) { - this.stylers[styler.name] = styler; -} - -window.plugin.drawResonators.Render.prototype.getStylersList = function() { - return Object.keys(this.stylers); -} - -window.plugin.drawResonators.Render.prototype.getStyler = function() { - var stylerName = this.useStyler in this.stylers ? this.useStyler : 'Default'; - return this.stylers[stylerName]; -} - -// Change if styler need change, and redraw all resonators using new styler -window.plugin.drawResonators.Render.prototype.changeStyler = function(name) { - if (name === this.useStyler) return; - for(stylerName in this.stylers) { - if(stylerName === name) { - if(this.stylers[this.useStyler]) this.stylers[this.useStyler].onDisableFunc(); - this.useStyler = stylerName; - this.stylers[this.useStyler].onEnableFunc(); - this.clearAllResonators(); - this.drawAllResonators(); - return; - } - } -} - -window.plugin.drawResonators.Render.prototype.refreshStyler = function() { - this.clearAllResonators(); - this.drawAllResonators(); -} - -window.plugin.drawResonators.Render.prototype.isResonatorsShow = function() { - return map.getZoom() >= this.enableZoomLevel; -} - -window.plugin.drawResonators.Render.prototype.isResonatorsShowBeforeZoom = function() { - return this.beforeZoomLevel >= this.enableZoomLevel; -} - - - -//////// Styler for getting resonator and connector style //////// - - - -window.plugin.drawResonators.Styler = function(options) { - options = options || {}; - this.name = options['name'] || 'Default'; - this.otherOptions = options['otherOptions']; - this.getResonatorStyle = options['resonatorStyleFunc'] || this.defaultResonatorStyle; - this.getConnectorStyle = options['connectorStyleFunc'] || this.defaultConnectorStyle; - this.onEnableFunc = options['onEnableFunc'] || function() {}; - this.onDisableFunc = options['onDisableFunc'] || function() {}; -} - -window.plugin.drawResonators.Styler.prototype.DEFAULT_OPTIONS_RESONATOR_SELECTED = { - color: '#fff', - weight: 1.1, - radius: 4, - opacity: 1, - clickable: false}; - -window.plugin.drawResonators.Styler.prototype.DEFAULT_OPTIONS_RESONATOR_NON_SELECTED = { - color: '#aaa', - weight: 1, - radius: 3, - opacity: 1, - clickable: false}; - -window.plugin.drawResonators.Styler.prototype.DEFAULT_OPTIONS_RESONATOR_LINE_SELECTED = { - opacity: 0.7, - weight: 3, - color: '#FFA000', - dashArray: '0,10' + (new Array(25).join(',8,4')), - fill: false, - clickable: false}; - -window.plugin.drawResonators.Styler.prototype.DEFAULT_OPTIONS_RESONATOR_LINE_NON_SELECTED = { - opacity: 0.25, - weight: 2, - color: '#FFA000', - dashArray: '0,10' + (new Array(25).join(',8,4')), - fill: false, - clickable: false}; - -window.plugin.drawResonators.Styler.prototype.defaultResonatorStyle = function(resoDetail, selected) { - var resoSharedStyle = selected - ? this.DEFAULT_OPTIONS_RESONATOR_SELECTED - : this.DEFAULT_OPTIONS_RESONATOR_NON_SELECTED; - - var resoStyle = $.extend({ - fillColor: COLORS_LVL[resoDetail.level], - fillOpacity: resoDetail.energyTotal/RESO_NRG[resoDetail.level], - }, resoSharedStyle); - - return resoStyle; -} - -window.plugin.drawResonators.Styler.prototype.defaultConnectorStyle = function(resoDetail, selected) { - var connStyle = selected - ? this.DEFAULT_OPTIONS_RESONATOR_LINE_SELECTED - : this.DEFAULT_OPTIONS_RESONATOR_LINE_NON_SELECTED; - - return connStyle; -} - - - -//////// Options for storing and loading options //////// - - - -window.plugin.drawResonators.Options = function() { - this._options = {}; - this._callbacks = {}; -} - -window.plugin.drawResonators.Options.prototype.addCallback = function(name, callback) { - if (!this._callbacks[name]) { - this._callbacks[name] = []; - } - this._callbacks[name].push(callback); -} - -window.plugin.drawResonators.Options.prototype.newOption = function(name, defaultValue) { - this._options[name] = this.loadLocal(this.getStorageKey(name), defaultValue) -} - -window.plugin.drawResonators.Options.prototype.getOption = function(name) { - return this._options[name]; -} - -window.plugin.drawResonators.Options.prototype.removeOption = function(name) { - delete this._options[name]; - delete this._callbacks[name]; -} - -window.plugin.drawResonators.Options.prototype.changeOption = function(name, value) { - if(!(name in this._options)) return false; - if(value === this._options[name]) return false; - - this._options[name] = value; - this.storeLocal(this.getStorageKey(name), this._options[name]); - - if (this._callbacks[name] !== null) { - for(var i in this._callbacks[name]) { - this._callbacks[name][i](value); - } - } -} - -window.plugin.drawResonators.Options.prototype.getStorageKey = function(name) { - return 'plugin-drawResonators-option-' + name; -} - -window.plugin.drawResonators.Options.prototype.loadLocal = function(key, defaultValue) { - var objectJSON = localStorage[key]; - if(objectJSON) { - return JSON.parse(objectJSON); - } else { - return defaultValue; - } -} - -window.plugin.drawResonators.Options.prototype.storeLocal = function(key, value) { - if(typeof(value) !== 'undefined' && value !== null) { - localStorage[key] = JSON.stringify(value); - } else { - localStorage.removeItem(key); - } -} - - - -//////// Dialog - -window.plugin.drawResonators.Dialog = function() { - this._dialogEntries = {}; -} - -window.plugin.drawResonators.Dialog.prototype.addLink = function() { - $('#toolbox').append('Resonators '); -} - -window.plugin.drawResonators.Dialog.prototype.addEntry = function(name, dialogEntry) { - this._dialogEntries[name] = dialogEntry; - this.change(); -} - -window.plugin.drawResonators.Dialog.prototype.removeEntry = function(name) { - delete this._dialogEntries[name]; - this.change(); -} - -window.plugin.drawResonators.Dialog.prototype.show = function() { - window.dialog({html: this.getDialogHTML(), title: 'Resonators', modal: true, id: 'draw-reso-setting'}); - - // Attach entries event - for(var name in this._dialogEntries) { - var events = this._dialogEntries[name].getOnEvents(); - for(var i in events) { - var event = events[i]; - $('#draw-reso-dialog').on(event.event, '#' + event.id, event.callback); - } - } -} - -window.plugin.drawResonators.Dialog.prototype.change = function() { - if($('#draw-reso-dialog').length > 0) this.show(); -} - -window.plugin.drawResonators.Dialog.prototype.getDialogHTML = function() { - var html = '
' - for(var name in this._dialogEntries) { - html += '
' - + this._dialogEntries[name].getHTML() - + '
'; - } - html += '
'; - return html; -} - - - -//////// ListDialogEntry - - - -window.plugin.drawResonators.ListDialogEntry = function(options) { - this._name = options['name']; - this._label = options['label']; - this._valueFunc = options['valueFunc']; - this._valuesList = options['valuesList']; - this._valuesListFunc = options['valuesListFunc']; - this._onChangeCallback = options['onChangeCallback']; -} - -window.plugin.drawResonators.ListDialogEntry.prototype.getHTML = function() { - var curValue = this._valueFunc(); - var valuesList = this._valuesList ? this._valuesList : this._valuesListFunc(); - var html = '' - + ''; - return html; -} - -window.plugin.drawResonators.ListDialogEntry.prototype.getOnEvents = function() { - return [{'event': 'change', - 'id': this.getSelectId(), - 'callback': this._onChangeCallback - }]; -} - -window.plugin.drawResonators.ListDialogEntry.prototype.getSelectId = function() { - return 'draw-reso-option-' + this._name; -} - - - -//////// TextboxDialogEntry - - -window.plugin.drawResonators.TextboxDialogEntry = function(options) { - this._name = options['name']; - this._label = options['label']; - this._valueFunc = options['valueFunc']; - this._onChangeCallback = options['onChangeCallback']; -} - -window.plugin.drawResonators.TextboxDialogEntry.prototype.getHTML = function() { - var curValue = this._valueFunc(); - var html = '' - + ''; - return html; -} - - -window.plugin.drawResonators.TextboxDialogEntry.prototype.getOnEvents = function() { - return [{'event': 'change', - 'id': this.getInputId(), - 'callback': this._onChangeCallback - }]; -} - -window.plugin.drawResonators.TextboxDialogEntry.prototype.getInputId = function() { - return 'draw-reso-option-' + this._name; -} - - - -window.plugin.drawResonators.setupStyler = function() { - var thisPlugin = window.plugin.drawResonators; - - var highlightedReso = {color: '#fff', weight: 2, radius: 4, opacity: 1, clickable: false}; - var normalReso = {color: '#aaa', weight: 1, radius: 3, opacity: 1, clickable: false}; - var selectedReso = {color: '#eee', weight: 1.1, radius: 4, opacity: 1, clickable: false}; - var highlightedConn = {opacity: 0.7, weight: 3, color: '#FFA000', dashArray: '0,10,999', color: '#FFA000', fill: false, clickable: false}; - var normalConn = {opacity: 0.25, weight: 2, color: '#FFA000', dashArray: '0,10' + (new Array(25).join(',8,4')), fill: false, clickable: false}; - var selectedConn = {opacity: 0.7, weight: 3, color: '#FFA000', dashArray: '0,10' + (new Array(25).join(',8,4')), fill: false, clickable: false}; - - // Styler for highlighting resonators deployed by me - var myReso = { - name: 'Highlight my resonators', - otherOptions: { - 'highlightedReso' : highlightedReso, - 'normalReso' : normalReso, - 'selectedReso' : selectedReso, - 'highlightedConn' : highlightedConn, - 'normalConn' : normalConn, - 'selectedConn' : selectedConn - }, - resonatorStyleFunc: function(resoDetail, selected) { - var mine = resoDetail.ownerGuid === PLAYER.guid; - var resoSharedStyle = mine - ? this.otherOptions.highlightedReso - : (selected ? this.otherOptions.selectedReso : this.otherOptions.normalReso); - - var resoStyle = $.extend({ - fillColor: COLORS_LVL[resoDetail.level], - fillOpacity: resoDetail.energyTotal/RESO_NRG[resoDetail.level] * (mine ? 1 : 0.75) - }, resoSharedStyle); - return resoStyle; - }, - connectorStyleFunc: function(resoDetail, selected) { - var mine = resoDetail.ownerGuid === PLAYER.guid; - var connStyle = mine - ? this.otherOptions.highlightedConn - : (selected ? this.otherOptions.selectedConn : this.otherOptions.normalConn); - return connStyle; - } - }; - - thisPlugin.render.addStyler(new thisPlugin.Styler(myReso)); - - // Styler for highlighting L8 resonators - var l8Reso = { - name: 'Highlight L8 resonators', - otherOptions: { - 'highlightedReso' : highlightedReso, - 'normalReso' : normalReso, - 'selectedReso' : selectedReso, - 'highlightedConn' : highlightedConn, - 'normalConn' : normalConn, - 'selectedConn' : selectedConn - }, - resonatorStyleFunc: function(resoDetail, selected) { - var l8 = resoDetail.level === 8; - var resoSharedStyle = l8 - ? this.otherOptions.highlightedReso - : (selected ? this.otherOptions.selectedReso : this.otherOptions.normalReso); - - var resoStyle = $.extend({ - fillColor: COLORS_LVL[resoDetail.level], - fillOpacity: resoDetail.energyTotal/RESO_NRG[resoDetail.level] * (l8 ? 1 : 0.75) - }, resoSharedStyle); - return resoStyle; - }, - connectorStyleFunc: function(resoDetail, selected) { - var l8 = resoDetail.level === 8; - var connStyle = l8 - ? this.otherOptions.highlightedConn - : (selected ? this.otherOptions.selectedConn : this.otherOptions.normalConn); - return connStyle; - } - }; - - thisPlugin.render.addStyler(new thisPlugin.Styler(l8Reso)); - - // Styler for highlighting resonators with less than X% energy - var lessThanXPctReso = { - name: 'Highlight < X% resonators', - otherOptions: { - 'highlightedReso': highlightedReso, - 'normalReso': normalReso, - 'selectedReso': selectedReso, - 'highlightedConn': highlightedConn, - 'normalConn': normalConn, - 'selectedConn': selectedConn, - 'pct': 15, - 'dialogEntry': new thisPlugin.TextboxDialogEntry({ - name: 'resoLessThanPct-pct', - label: 'Percentage', - valueFunc: function() {return thisPlugin.options.getOption('styler-resoLessThanPct-pct')}, - onChangeCallback: function(event) {thisPlugin.options.changeOption('styler-resoLessThanPct-pct', parseInt(event.target.value));} - }) - }, - resonatorStyleFunc: function(resoDetail, selected) { - var highlight = (resoDetail.energyTotal * 100) < (RESO_NRG[resoDetail.level] * this.otherOptions.pct); - var resoSharedStyle = highlight - ? this.otherOptions.highlightedReso - : (selected ? this.otherOptions.selectedReso : this.otherOptions.normalReso); - - var resoStyle = $.extend({ - fillColor: COLORS_LVL[resoDetail.level], - fillOpacity: resoDetail.energyTotal/RESO_NRG[resoDetail.level] - }, resoSharedStyle); - return resoStyle; - }, - connectorStyleFunc: function(resoDetail, selected) { - var highlight = (resoDetail.energyTotal * 100) < (RESO_NRG[resoDetail.level] * this.otherOptions.pct); - var connStyle = highlight - ? this.otherOptions.highlightedConn - : (selected ? this.otherOptions.selectedConn : this.otherOptions.normalConn); - return connStyle; - }, - onEnableFunc: function() { - var thisPlugin = window.plugin.drawResonators; - var thisStyler = this; - // Add option - thisPlugin.options.newOption('styler-resoLessThanPct-pct', 15); - thisPlugin.options.addCallback('styler-resoLessThanPct-pct', function(value) { - thisStyler.otherOptions.pct = value; - thisPlugin.render.refreshStyler(); - }); - thisStyler.otherOptions.pct = thisPlugin.options.getOption('styler-resoLessThanPct-pct'); - // Add dialog entry - thisPlugin.dialog.addEntry('resoLessThanPct-pct', this.otherOptions.dialogEntry); - }, - onDisableFunc: function() { - var thisPlugin = window.plugin.drawResonators; - // Remove option - thisPlugin.options.removeOption('styler-resoLessThanPct-pct'); - // Remove dialog entry - thisPlugin.dialog.removeEntry('resoLessThanPct-pct'); - } - }; - - thisPlugin.render.addStyler(new thisPlugin.Styler(lessThanXPctReso)); - - // Styler for highlighting resonators deployed by specific player - var resoOfSpecificPlayer = { - name: 'Highlight resonators by player', - otherOptions: { - 'highlightedReso': highlightedReso, - 'normalReso': normalReso, - 'selectedReso': selectedReso, - 'highlightedConn': highlightedConn, - 'normalConn': normalConn, - 'selectedConn': selectedConn, - 'player': '', - 'playerGuid': '', - 'dialogEntry': new thisPlugin.TextboxDialogEntry({ - name: 'resoOfSpecificPlayer-player', - label: 'Player name', - valueFunc: function() {return thisPlugin.options.getOption('styler-resoOfSpecificPlayer-player')}, - onChangeCallback: function(event) {thisPlugin.options.changeOption('styler-resoOfSpecificPlayer-player', event.target.value);} - }) - }, - resonatorStyleFunc: function(resoDetail, selected) { - var highlight = resoDetail.ownerGuid === this.otherOptions.playerGuid; - var resoSharedStyle = highlight - ? this.otherOptions.highlightedReso - : (selected ? this.otherOptions.selectedReso : this.otherOptions.normalReso); - - var resoStyle = $.extend({ - fillColor: COLORS_LVL[resoDetail.level], - fillOpacity: resoDetail.energyTotal/RESO_NRG[resoDetail.level] * (highlight ? 1 : 0.75) - }, resoSharedStyle); - return resoStyle; - }, - connectorStyleFunc: function(resoDetail, selected) { - var highlight = resoDetail.ownerGuid === this.otherOptions.playerGuid; - var connStyle = highlight - ? this.otherOptions.highlightedConn - : (selected ? this.otherOptions.selectedConn : this.otherOptions.normalConn); - return connStyle; - }, - onEnableFunc: function() { - var thisPlugin = window.plugin.drawResonators; - var thisStyler = this; - // Add option - thisPlugin.options.newOption('styler-resoOfSpecificPlayer-player', ''); - thisPlugin.options.addCallback('styler-resoOfSpecificPlayer-player', function(value) { - thisStyler.otherOptions.player = value; - thisStyler.otherOptions.playerGuid = window.playerNameToGuid(value); - thisPlugin.render.refreshStyler(); - }); - thisStyler.otherOptions.player = thisPlugin.options.getOption('styler-resoOfSpecificPlayer-player'); - thisStyler.otherOptions.playerGuid = window.playerNameToGuid(thisStyler.otherOptions.player); - // Add dialog entry - thisPlugin.dialog.addEntry('resoOfSpecificPlayer-player', this.otherOptions.dialogEntry); - }, - onDisableFunc: function() { - var thisPlugin = window.plugin.drawResonators; - // Remove option - thisPlugin.options.removeOption('styler-resoOfSpecificPlayer-player'); - // Remove dialog entry - thisPlugin.dialog.removeEntry('resoOfSpecificPlayer-player'); - } - }; - - thisPlugin.render.addStyler(new thisPlugin.Styler(resoOfSpecificPlayer)); - - thisPlugin.render.changeStyler(thisPlugin.options.getOption('useStyler')); -} - - -window.plugin.drawResonators.setupOptions = function() { - var thisPlugin = window.plugin.drawResonators; - // Initialize options - thisPlugin.options = new thisPlugin.Options(); - thisPlugin.options.newOption('enableZoomLevel', 17); - thisPlugin.options.newOption('useStyler', 'Default'); -} - -window.plugin.drawResonators.setupDialog = function() { - var thisPlugin = window.plugin.drawResonators; - // Initialize dialog - thisPlugin.dialog = new thisPlugin.Dialog(); - - var enableZoomLevelDialogEntryOptions = { - name: 'enable-zoom-level', - label: 'Enable zoom level', - valueFunc: function() {return thisPlugin.options.getOption('enableZoomLevel')}, - valuesList: {'15':15, '16':16, '17':17, '18':18, '19':19, '20':20, 'None':99}, - onChangeCallback: function(event) {thisPlugin.options.changeOption('enableZoomLevel', parseInt(event.target.value));} - }; - var enableZoomLevelDialogEntry = new thisPlugin.ListDialogEntry(enableZoomLevelDialogEntryOptions); - thisPlugin.dialog.addEntry('enable-zoom-level', enableZoomLevelDialogEntry); - - var stylerDialogEntryOptions = { - name: 'use-styler', - label: 'Styler', - valueFunc: function() {return thisPlugin.options.getOption('useStyler')}, - valuesListFunc: thisPlugin.render.getStylersList, - onChangeCallback: function(event) {thisPlugin.options.changeOption('useStyler', event.target.value);} - }; - var stylerDialogEntry = new thisPlugin.ListDialogEntry(stylerDialogEntryOptions); - thisPlugin.dialog.addEntry('use-styler', stylerDialogEntry); - - thisPlugin.dialog.addLink(); -} - -var setup = function() { - var thisPlugin = window.plugin.drawResonators; - - // Initialize options - thisPlugin.setupOptions(); - - // Initialize render - var renderOptions = {'enableZoomLevel': thisPlugin.options.getOption('enableZoomLevel')}; - - thisPlugin.render = new thisPlugin.Render(renderOptions); - - // callback run at option change - thisPlugin.options.addCallback('enableZoomLevel', thisPlugin.render.handleEnableZoomLevelChange); - thisPlugin.options.addCallback('useStyler', thisPlugin.render.changeStyler); - - // Initialize Dialog - thisPlugin.setupDialog(); - // Initialize styler - thisPlugin.setupStyler(); - - thisPlugin.render.registerHook(); - window.addLayerGroup('Resonators', thisPlugin.render.resonatorLayerGroup, true); -} - -// PLUGIN END ////////////////////////////////////////////////////////// - -@@PLUGINEND@@ diff --git a/plugins/favorite-portals.user.js b/plugins/favorite-portals.user.js index 947104fb..f82526df 100644 --- a/plugins/favorite-portals.user.js +++ b/plugins/favorite-portals.user.js @@ -1,9 +1,9 @@ // ==UserScript== // @id iitc-plugin-favorite-portals@soulBit // @name IITC plugin: Favorite Portals -// @category Obsolete +// @category Deleted // @version 0.2.0.@@DATETIMEVERSION@@ -// @description [@@BUILDNAME@@-@@BUILDDATE@@] DEPRECATED. Please use "Bookmarks for maps and portals" instead. +// @description PLUGIN CURRENTLY UNAVAILABLE // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -13,161 +13,3 @@ // @match http://www.ingress.com/intel* // @grant none // ==/UserScript== - -@@PLUGINSTART@@ - -// PLUGIN START //////////////////////////////////////////////////////// - -window.plugin.favoritePortals = function() {}; - -window.plugin.favoritePortals.portalList = {}; -window.plugin.favoritePortals.LOCAL_STORAGE_KEY = "plugin-favorite-portals"; -window.plugin.favoritePortals.hasLocalStorage = ('localStorage' in window && window['localStorage'] !== null); - -window.plugin.favoritePortals.onDetailsUpdated = function(data) { - $('.linkdetails').prepend("
"); - if(window.plugin.favoritePortals.portalList[window.selectedPortal]) { - $('.toggle-favorite-portal').addClass( 'portal-on' ); - window.plugin.favoritePortals.portalList[window.selectedPortal] = window.portals[window.selectedPortal].options; - window.plugin.favoritePortals.savePortals(); - } -} - -window.plugin.favoritePortals.display = function() { - var output = ''; - - if (!window.plugin.favoritePortals.hasLocalStorage) { - output += "Favorite portals cannot save any data, please try another browser that supports 'localStorage'."; - } else { - if ($.isEmptyObject(window.plugin.favoritePortals.portalList)) { - output += "No portals have been marked as favorite, click the blue square in the bottom left corner of the portal details to save one."; - } else { - output += "
Portal list (values not current till portal on screen):
"; - output += "
"; - - var portals = [], dataChanged = false, portalData; - $.each( window.plugin.favoritePortals.portalList, function(i, portal) { - if(window.portals[i]) { - dataChanged = true; - window.plugin.favoritePortals.portalList[ i ] = window.portals[i].options; - } - portalData = (window.portals[i]) ? window.portals[i].options : portal; - portals.push({'guid': i, 'portalData': portalData}); - }); - if(dataChanged) - window.plugin.favoritePortals.savePortals(); - - portals.sort(function(a,b) { - var nameA = a.portalData.details.portalV2.descriptiveText.TITLE.toLowerCase(); - var nameB = b.portalData.details.portalV2.descriptiveText.TITLE.toLowerCase(); - return (nameA < nameB) ? -1 : (nameA > nameB) ? 1 : 0; - }); - - output += "
    "; - var teamName, energy; - $.each(portals, function(i, portal) { - portalData = portal.portalData; - output += "
  1. "; - - output += "X"; - output += "" + portalData.details.portalV2.descriptiveText.TITLE + ""; - teamName = portalData.details.controllingTeam.team; - output += " - L" + Math.floor( portalData.level ); - energy = Math.floor( window.getCurrentPortalEnergy(portalData.details) / window.getPortalEnergy(portalData.details) * 100 ); - if(!isNaN(energy)) - output += " @" + energy + "%"; - output += ": " + ( (teamName === "ALIENS") ? "Enlightened" : teamName[0] + teamName.slice(1).toLowerCase() ); - if(portalData.details.portalV2.linkedEdges.length > 0 || portalData.details.portalV2.linkedFields.length > 0) - output += ", " + portalData.details.portalV2.linkedEdges.length + " links & " + portalData.details.portalV2.linkedFields.length + " fields"; - output += "
  2. "; - }); - - output += "
" - output += "
"; - } - } - - window.dialog({'html': "
" + output + "
", 'title': 'Favorite portals', 'id': 'favorite-portals'}); -} - -window.plugin.favoritePortals.onDelete = function(guid) { - delete window.plugin.favoritePortals.portalList[ guid ]; - if(window.selectedPortal && window.selectedPortal === guid) - $('.toggle-favorite-portal').removeClass( 'portal-on' ).addClass( 'portal-off' ); - $("li[name='" + guid + "']").remove(); - window.plugin.favoritePortals.savePortals(); -} - -window.plugin.favoritePortals.onPortalClicked = function(guid, coords) { - window.zoomToAndShowPortal(guid, coords); - $('#dialog-favorite-portals').dialog('close'); -} - -window.plugin.favoritePortals.togglePortal = function() { - if(window.plugin.favoritePortals.portalList[window.selectedPortal]) { - $('.toggle-favorite-portal').removeClass('portal-on').addClass('portal-off'); - delete window.plugin.favoritePortals.portalList[ window.selectedPortal ]; - } else { - $('.toggle-favorite-portal').removeClass('portal-off').addClass('portal-on'); - window.plugin.favoritePortals.portalList[window.selectedPortal] = window.portals[window.selectedPortal].options; - } - window.plugin.favoritePortals.savePortals(); -} - -window.plugin.favoritePortals.savePortals = function() { - var portalsObject = {'portals': window.plugin.favoritePortals.portalList}; - var portalListJSON = JSON.stringify(portalsObject); - localStorage[window.plugin.favoritePortals.LOCAL_STORAGE_KEY] = portalListJSON; -} - -window.plugin.favoritePortals.loadPortals = function() { - var portalListJSON = localStorage[window.plugin.favoritePortals.LOCAL_STORAGE_KEY]; - if(!portalListJSON) return; - var portalsObject = JSON.parse(portalListJSON); - window.plugin.favoritePortals.portalList = portalsObject.portals; -} - -window.plugin.favoritePortals.setup = function() { - window.plugin.favoritePortals.loadPortals(); - window.addHook('portalDetailsUpdated', window.plugin.favoritePortals.onDetailsUpdated); - $('#toolbox').append("Favorite Portals"); - $("'); - // Setup sorting - $(document).on('click.portalslist', '#portalslist table th', function() { - $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,window.plugin.portalslist.filter)); - }); - $(document).on('click.portalslist', '#portalslist .filterAll', function() { - $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,0)); - }); - $(document).on('click.portalslist', '#portalslist .filterRes', function() { - $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,1)); - }); - $(document).on('click.portalslist', '#portalslist .filterEnl', function() { - $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,2)); - }); -} - -// PLUGIN END ////////////////////////////////////////////////////////// - -@@PLUGINEND@@ diff --git a/plugins/scoreboard.user.js b/plugins/scoreboard.user.js index d80cc819..b3237809 100644 --- a/plugins/scoreboard.user.js +++ b/plugins/scoreboard.user.js @@ -1,340 +1,15 @@ // ==UserScript== // @id iitc-plugin-scoreboard@vita10gy // @name IITC plugin: show a localized scoreboard. -// @category Info +// @category Deleted // @version 0.1.9.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ -// @description [@@BUILDNAME@@-@@BUILDDATE@@] A localized scoreboard. +// @description PLUGIN CURRENTLY UNAVAILABLE // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* // @match http://www.ingress.com/intel* // @grant none // ==/UserScript== - -@@PLUGINSTART@@ - -// PLUGIN START //////////////////////////////////////////////////////// - -// use own namespace for plugin -window.plugin.scoreboard = function() {}; - -window.plugin.scoreboard.scores = {}; -window.plugin.scoreboard.playerGuids = new Array(); - -window.plugin.scoreboard.resetTeam = function(team) { - var scores = window.plugin.scoreboard.scores['team']; - scores[team] = {}; - scores[team]['mu'] = 0; - scores[team]['count_fields'] = 0; - scores[team]['count_links'] = 0; - scores[team]['count_portals'] = 0; - scores[team]['count_resonators'] = 0; - scores[team]['count_mods'] = 0; - scores[team]['link_length'] = 0; - scores[team]['field_area'] = 0; - scores[team]['largest'] = {}; -}; - -window.plugin.scoreboard.initPlayer = function(player, team) { - var scores = window.plugin.scoreboard.scores['player']; - if(scores[player] === undefined) { - scores[player] = {}; - scores[player]['team'] = team; - scores[player]['mu'] = 0; - scores[player]['count_fields'] = 0; - scores[player]['count_links'] = 0; - scores[player]['count_portals'] = 0; - scores[player]['count_resonators'] = 0; - scores[player]['link_length'] = 0; - scores[player]['field_area'] = 0; - - scores[player]['count_mods'] = 0; - scores[player]['largest'] = {}; - window.plugin.scoreboard.playerGuids.push(player); - } -} - -window.plugin.scoreboard.compileStats = function() { - var somethingInView = false; - window.plugin.scoreboard.playerGuids = new Array(); - window.plugin.scoreboard.scores = {'team': {}, 'player': {}}; - var scores = window.plugin.scoreboard.scores; - window.plugin.scoreboard.resetTeam(TEAM_RES); - window.plugin.scoreboard.resetTeam(TEAM_ENL); - - $.each(window.fields, function(qk, val) { - - var team = getTeam(val.options.data); - - // Google sends fields long since dead in the data. This makes sure it's still actually up. - if(window.portals[val.options.vertices.vertexA.guid] !== undefined || - window.portals[val.options.vertices.vertexB.guid] !== undefined || - window.portals[val.options.vertices.vertexC.guid] !== undefined ) { - - var fieldArea = window.plugin.scoreboard.fieldArea(val); - somethingInView = true; - scores['team'][team]['count_fields']++; - scores['team'][team]['field_area'] += fieldArea; - val.options.data.fieldArea = fieldArea; - var largestArea = scores['team'][team]['largest']['field_area']; - if(largestArea === undefined || largestArea.options.data.fieldArea < val.options.data.fieldArea) { - largestArea = val; - } - scores['team'][team]['largest']['field_area'] = largestArea; - - } - }); - $.each(window.links, function(qk, link) { - somethingInView = true; - var team = getTeam(link.options.data); - - scores['team'][team]['count_links']++; - - var linkLength = window.plugin.scoreboard.portalDistance(link.options.data.edge.destinationPortalLocation,link.options.data.edge.originPortalLocation); - scores['team'][team]['link_length'] += linkLength; - - var largestLink = scores['team'][team]['largest']['link']; - if(largestLink === undefined || largestLink.distance < linkLength) { - largestLink = {}; - largestLink.distance = linkLength; - } - scores['team'][team]['largest']['link'] = largestLink; - - }); - $.each(window.portals, function(qk, portal) { - somethingInView = true; - - var team = getTeam(portal.options.details); - if(team !== TEAM_NONE) { - var player = portal.options.details.captured.capturingPlayerId; - window.plugin.scoreboard.initPlayer(player, team); - scores['team'][team]['count_portals']++; - scores['player'][player]['count_portals']++; - - $.each(portal.options.details.portalV2.linkedModArray, function(ind, mod) { - if(mod !== null) { - window.plugin.scoreboard.initPlayer(mod.installingUser, team); - somethingInView = true; - scores['team'][team]['count_mods']++; - scores['player'][mod.installingUser]['count_mods']++; - } - }); - - $.each(portal.options.details.resonatorArray.resonators, function(ind, reso) { - if(reso !== null) { - somethingInView = true; - window.plugin.scoreboard.initPlayer(reso.ownerGuid, team); - scores['team'][team]['count_resonators']++; - scores['player'][reso.ownerGuid]['count_resonators']++; - } - }); - } - }); - return somethingInView; -}; - -window.plugin.scoreboard.teamTableRow = function(field,title) { - var scores = window.plugin.scoreboard.scores['team']; - var retVal = '' - + title - + '' - + window.digits(Math.round(scores[TEAM_RES][field])) - + '' - + window.digits(Math.round(scores[TEAM_ENL][field])) - + '' - + window.digits(Math.round(scores[TEAM_RES][field] + scores[TEAM_ENL][field])) - + ''; - return retVal; -}; - -window.plugin.scoreboard.fieldInfoArea = function(field) { - var title = ''; - var retVal = ''; - - if(field !== undefined) { - var portal = window.portals[field.options.vertices.vertexA.guid]; - if(portal !== undefined) { - title = ' @' + portal.options.details.portalV2.descriptiveText.TITLE; - } - - retVal = '
' - + window.digits(Math.round(field.options.data.fieldArea)) - + '
'; - - } else { - retVal = 'N/A'; - } - return retVal; -}; - -window.plugin.scoreboard.playerTableRow = function(playerGuid) { - var scores = window.plugin.scoreboard.scores['player']; - var retVal = '' - + window.getPlayerName(playerGuid); - + ''; - - $.each(['count_portals','count_resonators','count_mods'], function(i, field) { - retVal += '' - + window.digits(Math.round(scores[playerGuid][field])) - + ''; - }); - retVal += ''; - return retVal; -}; - -window.plugin.scoreboard.playerTable = function(sortBy) { - - // Sort the playerGuid array by sortBy - window.plugin.scoreboard.playerGuids.sort(function(a, b) { - var playerA = window.plugin.scoreboard.scores['player'][a]; - var playerB = window.plugin.scoreboard.scores['player'][b]; - var retVal = 0; - if(sortBy === 'names') { - retVal = window.getPlayerName(a).toLowerCase() < window.getPlayerName(b).toLowerCase() ? -1 : 1; - } else { - retVal = playerB[sortBy] - playerA[sortBy]; - } - return retVal; - }); - - var sort = window.plugin.scoreboard.playerTableSort; - var scoreHtml = '' - + '' - + '' - + '' - + ''; - $.each(window.plugin.scoreboard.playerGuids, function(index, guid) { - scoreHtml += window.plugin.scoreboard.playerTableRow(guid); - }); - scoreHtml += '
PlayerPortalsResonatorsMods
'; - - return scoreHtml; -} - -// A little helper function so the above isn't so messy -window.plugin.scoreboard.playerTableSort = function(name, by) { - var retVal = 'data-sort="' + name + '"'; - if(name === by) { - retVal += ' class="sorted"'; - } - return retVal; -}; - -window.plugin.scoreboard.display = function() { - - var somethingInView = window.plugin.scoreboard.compileStats(); - var scores = window.plugin.scoreboard.scores; - var scoreHtml = ''; - var title = ''; - - if(somethingInView) { - scoreHtml += '' - + '' - + window.plugin.scoreboard.teamTableRow('count_fields','Field #') - + window.plugin.scoreboard.teamTableRow('field_area','Field (km²)') - + window.plugin.scoreboard.teamTableRow('count_links','Link #') - + window.plugin.scoreboard.teamTableRow('link_length','Link (m)') - + window.plugin.scoreboard.teamTableRow('count_portals','Portals') - + window.plugin.scoreboard.teamTableRow('count_resonators','Resonators') - + window.plugin.scoreboard.teamTableRow('count_mods','Mods') - + '
ResistanceEnlightenedTotal
'; - - scoreHtml += '' - + '' - + '' - + '' - + '
ResistanceEnlightened
Largest Field (km²)' - + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_RES]['largest']['field_area']) - + '' - + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_ENL]['largest']['field_area']) - + '
Longest Link (m)'; - if(scores['team'][TEAM_RES]['largest']['link'] === undefined) { - scoreHtml += 'N/A'; - } - else { - scoreHtml += window.digits(Math.round(scores['team'][TEAM_RES]['largest']['link']['distance'])); - } - scoreHtml += ''; - - if(scores['team'][TEAM_ENL]['largest']['link'] === undefined) { - scoreHtml += 'N/A'; - } - else { - scoreHtml += window.digits(Math.round(scores['team'][TEAM_ENL]['largest']['link']['distance'])); - } - scoreHtml += '
' - + '
' - + window.plugin.scoreboard.playerTable('count_portals') - + '
'; - - scoreHtml += '
Click on player table headers to sort by that column. ' - + 'Score is subject to portals available based on zoom level. ' - + 'If names are unresolved try again. For best results wait until updates are fully loaded.
'; - } else { - scoreHtml += 'You need something in view.'; - title = 'nothing in view'; - } - - dialog({ - html: '
' + scoreHtml + '
', - title: 'Scoreboard: ' + title, - dialogClass: 'ui-dialog-scoreboard', - id: 'scoreboard' - }); - - //run the name resolving process - resolvePlayerNames(); -} - -window.plugin.scoreboard.portalDistance = function(portalAE6Location, portalBE6Location) { - portalA = new L.LatLng(portalAE6Location.latE6 / 1E6, portalAE6Location.lngE6 / 1E6); - portalB = new L.LatLng(portalBE6Location.latE6 / 1E6, portalBE6Location.lngE6 / 1E6); - return (portalA.distanceTo(portalB)); -} - -window.plugin.scoreboard.fieldArea = function(field) { - var verts = field.options.vertices; - var sideA = window.plugin.scoreboard.portalDistance(verts.vertexA.location,verts.vertexB.location) / 1000; - var sideB = window.plugin.scoreboard.portalDistance(verts.vertexB.location,verts.vertexC.location) / 1000; - var sideC = window.plugin.scoreboard.portalDistance(verts.vertexC.location,verts.vertexA.location) / 1000; - // Heron's Formula; - var perimeter = sideA + sideB + sideC; - var s = perimeter/2; - return Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC)); -} - -var setup = function() { - $('#toolbox').append(' Scoreboard'); - $('head').append(''); - // Setup sorting - $(document).on('click', '#players table th', function() { - $('#players').html(window.plugin.scoreboard.playerTable($(this).data('sort'))); - }); -} - -// PLUGIN END ////////////////////////////////////////////////////////// - -@@PLUGINEND@@ diff --git a/plugins/show-linked-portals.user.js b/plugins/show-linked-portals.user.js index 58023949..fdf813e8 100644 --- a/plugins/show-linked-portals.user.js +++ b/plugins/show-linked-portals.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-show-linked-portals@fstopienski // @name IITC plugin: Show linked portals // @category Portal Info -// @version 0.1.0.@@DATETIMEVERSION@@ +// @version 0.1.1.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -35,6 +35,7 @@ window.plugin.showLinkedPortal.handleUpdate = function () { } window.plugin.showLinkedPortal.portalDetail = function (data) { + // don't render linked portal data if portal is neutral. // (the data can remain sometimes - when a portal decays?) if (data.portalDetails.controllingTeam.team == 'NEUTRAL') @@ -51,20 +52,17 @@ window.plugin.showLinkedPortal.portalDetail = function (data) { $('.showLinkedPortalLink:not(.outOfRange)').bind('click', function () { var guid = $(this).attr('data-guid'); - if (window.portals[guid] !== undefined) { - window.selectPortal($(this).attr('data-guid')); - window.renderPortalDetails(window.selectedPortal); - var portalDetails = window.portals[guid].options.details; - var lat0 = portalDetails.locationE6.latE6 / 1E6; - var lon0 = portalDetails.locationE6.lngE6 / 1E6; - var Rlatlng = [lat0, lon0]; - map.setView(Rlatlng, map.getZoom()); - } - else { - // TODO: instead of just zooming out one level, check the link data for the start+end coordinates, - // and fit the map view to the bounding box - map.setZoom((map.getZoom() - 1)); + window.renderPortalDetails(guid); + var latlng = findPortalLatLng(guid); + if (latlng) { + if (!map.getBounds().pad(-0.1).contains(latlng)) { + map.panTo(latlng); + } + } else { + // no idea where this portal is(!) - so step back one zoom level + map.setZoom(map.getZoom()-1); } + }); } @@ -74,7 +72,7 @@ window.plugin.showLinkedPortal.getPortalByGuid = function (guid,isorigin) { var portalInfoString; if (window.portals[guid] !== undefined) { - var portalDetails = window.portals[guid].options.details; + var portalData = window.portals[guid].options.data; var portalNameAddressAlt = "'" + portalDetails.portalV2.descriptiveText.TITLE + "' (" + portalDetails.portalV2.descriptiveText.ADDRESS + ")"; var portalNameAddressTitle = $('
').append($('').text(portalDetails.portalV2.descriptiveText.TITLE)) @@ -90,7 +88,7 @@ window.plugin.showLinkedPortal.getPortalByGuid = function (guid,isorigin) { .attr('title', portalNameAddressTitle)) .html(); } else { - var title = $('
').append($('').text('Zoom out')) + var title = $('
').append($('').text('Go to portal')) .append($('
')) .append(linkDirection) .html(); diff --git a/plugins/show-portal-weakness.user.js b/plugins/show-portal-weakness.user.js index c7622d3e..a469a741 100644 --- a/plugins/show-portal-weakness.user.js +++ b/plugins/show-portal-weakness.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-show-portal-weakness@vita10gy // @name IITC plugin: show portal weakness // @category Highlighter -// @version 0.7.1.@@DATETIMEVERSION@@ +// @version 0.7.2.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -22,66 +22,28 @@ window.plugin.portalWeakness = function() {}; window.plugin.portalWeakness.highlightWeakness = function(data) { - var d = data.portal.options.details; - var portal_weakness = 0; - if(getTeam(d) !== 0) { - var only_mods = true; - var missing_mods = 0; - if(window.getTotalPortalEnergy(d) > 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d)) { - portal_weakness = 1 - (window.getCurrentPortalEnergy(d)/window.getTotalPortalEnergy(d)); - only_mods = false; - } - //Ding the portal for every unapplicable mod. - $.each(d.portalV2.linkedModArray, function(ind, mod) { - if(mod === null || mod.type == 'MULTIHACK' || mod.type == 'HEATSINK' || mod.type == 'LINK_AMPLIFIER') { - if(mod === null) { - missing_mods++; - } - portal_weakness += .08; - } - }); - //Ding the portal for every missing resonator. - var resCount = 0; - $.each(d.resonatorArray.resonators, function(ind, reso) { - if(reso === null) { - portal_weakness += .125; - only_mods = false; - } else { - resCount++; - } - }); - if(portal_weakness < 0) { - portal_weakness = 0; - } - if(portal_weakness > 1) { - portal_weakness = 1; - } - if(portal_weakness > 0) { - var fill_opacity = portal_weakness*.85 + .15; - var color = 'orange'; - if(only_mods) { - color = 'yellow'; - //If only mods are missing, make portal yellow - // but fill more than usual since pale yellow is basically invisible - fill_opacity = missing_mods*.15 + .1; - } else if(missing_mods > 0) { - color = 'red'; - } - fill_opacity = Math.round(fill_opacity*100)/100; + if(data.portal.options.team != TEAM_NONE) { + var res_count = data.portal.options.data.resCount; + var portal_health = data.portal.options.data.health; + + var strength = (res_count/8) * (portal_health/100); + + if(strength < 1) { + var fill_opacity = (1-strength)*.85 + .15; + var color = 'red'; var params = {fillColor: color, fillOpacity: fill_opacity}; - if(resCount < 8) { - // Hole per missing resonator - var dash = new Array(8-resCount + 1).join("1,4,") + "100,0" - params["dashArray"] = dash; + + // Hole per missing resonator + if (res_count < 8) { + var dash = new Array((8 - res_count) + 1).join("1,4,") + "100,0" + params.dashArray = dash; } + data.portal.setStyle(params); - } else { - data.portal.setStyle({fillColor: COLORS[getTeam(data.portal.options.details)], - fillOpacity: 0.5, - dashArray: null}); - } + } } + } var setup = function() { diff --git a/plugins/zaprange.user.js b/plugins/zaprange.user.js index 6057aef5..814ce225 100644 --- a/plugins/zaprange.user.js +++ b/plugins/zaprange.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-zaprange@zaso // @name IITC plugin: Zaprange // @category Layer -// @version 0.1.2.@@DATETIMEVERSION@@ +// @version 0.1.3.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -25,11 +25,11 @@ window.plugin.zaprange.portalAdded = function(data) { data.portal.on('add', function() { - window.plugin.zaprange.draw(this.options.guid, this.options.details.controllingTeam.team); + window.plugin.zaprange.draw(this.options.guid, this.options.data.team); }); data.portal.on('remove', function() { - window.plugin.zaprange.remove(this.options.guid, this.options.details.controllingTeam.team); + window.plugin.zaprange.remove(this.options.guid, this.options.data.team); }); } @@ -51,7 +51,7 @@ if(faction !== "NEUTRAL") { var coo = d._latlng; var latlng = new L.LatLng(coo.lat,coo.lng); - var portalLevel = parseInt(getPortalLevel(d.options.details)); + var portalLevel = d.options.level; var optCircle = {color:'red',opacity:0.7,fillColor:'red',fillOpacity:0.1,weight:1,clickable:false, dashArray: [10,6]}; var range = (5*portalLevel)+35; diff --git a/website/page/home.php b/website/page/home.php index 077d5d1e..51329455 100644 --- a/website/page/home.php +++ b/website/page/home.php @@ -13,58 +13,46 @@ offers many more features. It is available for

Latest news

-

11th November 2013

+

2nd December 2013

-IITC 0.15.0 and IITC Mobile 0.9 have just been released. This update fixes things to work with the latest changes -to the standard intel site. Also -

    -
  • Support for Jarvis shards (and other future artifacts)
  • -
  • New base map plugins - for maps.stamen.com/ and Bing maps.
  • -
+IITC 0.16.0 and IITC Mobile 0.10.0 have been released. This update is required to work with the latest changes to +the standard intel site. This update took a fair amount of work due to major changes +in the network protocol used behind the standard intel website, hence the longer than usual delay for the update. +

+

+As well as IITC itself, nearly every single plugin broke in some way due to these changes. Due to the amount of work +needed to get everything possible working again, some plugins have been disabled for now. You can see the list of these +disabled plugins in the download list - they're in the 'Deleted' category with a description of 'PLUGIN CURRENTLY UNAVAILABLE'. +

+

+Shortly after the Niantic changes that broke IITC, there were reports of IITC users being banned. This seemed strange at +first, as IITC was not even functioning at this time, so why would people be using it and getting banned. The conclusion +that was reached was that a few people who tried to use the broken IITC Mobile app triggered either a bug in IITC that +caused excessive requests, or triggered some kind of alert in the intel servers. Changes have been made to IITC now +so this unlikely to be an issue again.

-

7th November 2013

+

27th November 2013

-IITC 0.14.6 and IITC Mobile 0.7.7.2 released. Another change needed to match a minor update to the standard intel site. -

- -

6th November 2013

-

-IITC 0.14.5 and IITC Mobile 0.7.7.1 have been released. This contains a fix to work with the latest intel site updates. -Other than this, it is identical to the 0.14.4/0.7.7 release. -

- -

29th October 2013

-

-IITC 0.14.4 and IITC Mobile 0.7.7 have just been released. A critical update required to work with changes made to the -standard intel site. Changes include -

    -
  • Fix to geodesic circle drawing. They were not correctly distorted, leading to incorrect link ranges drawn on the map.
  • -
  • Bookmarks plugin: add layer and highlighter to indicate bookmarked portals
  • -
  • Player tracker plugin: markers fade for older activity, and separate layers for each faction
  • -
  • The 'About IITC' dialog now lists which plugins are installed. This may not work correctly for 3rd party plugins at this time
  • -
  • Mobile: -
      -
    • Custom fullscreen preferences
    • -
    • Install to SD Card
    • -
    • Cache move to SD card option (hence the new permissions)
    • -
    -
  • -
  • ... and, as always, various bugfixes and improvements.
  • -
+IITC and IITC Mobile are currently broken, due to changes made to the standard intel website. This is a major change in how +portal details are sent, with most of the extra data that the standard site didn't use being removed.

-3RD PARTY PLUGIN AUTHORS: The plugin wrapper code has been modified to pass through the additional version -information. While existing plugins should continue to work, I highly recommend updating the wrapper code in your -scripts to match. +This is not something simple to fix, and will take some time. Also, it severely cripples what IITC can do, as using this +extra data, not displayed by the standard site, was its big feature.

- -

16th October 2013

-IITC 0.14.3 and IITC Mobile 0.7.4 have just been released. This is a critical update required to work with the latest -changes Niantic have made to the standard intel site. Additionally, the draw-tools plugin now snaps points to portals -when creating lines/polygons/markers (was actually in 0.14.2 release), a bugfix relating to IITC not realising who -'you' are, causing some highlighters to break, and a handful of other tweaks/bugfixes. +We will look into what can be done to get it working again, but it will take some time. Many plugins won't be practical +as the data will not be available. +

+

+More details, and discussion, available in the +Google+ post. +

+

+Update I've created a 'dummy' version of the desktop plugin that will, for now, disable IITC if you leave it installed. +This is shown as version 0.15.99. When a fixed build is released, it will be 0.16.something and will update and start working. +Test versions remain, but broken. Please join the Google+ Community where announcements will be made.

Older news diff --git a/website/page/news.php b/website/page/news.php index d8fd58e0..2dc0c9fc 100644 --- a/website/page/news.php +++ b/website/page/news.php @@ -1,5 +1,47 @@

News

+

2nd December 2013

+

+IITC 0.16.0 and IITC Mobile 0.10.0 have been released. This update is required to work with the latest changes to +the standard intel site. This update took a fair amount of work due to major changes +in the network protocol used behind the standard intel website, hence the longer than usual delay for the update. +

+

+As well as IITC itself, nearly every single plugin broke in some way due to these changes. Due to the amount of work +needed to get everything possible working again, some plugins have been disabled for now. You can see the list of these +disabled plugins in the download list - they're in the 'Deleted' category with a description of 'PLUGIN CURRENTLY UNAVAILABLE'. +

+

+Shortly after the Niantic changes that broke IITC, there were reports of IITC users being banned. This seemed strange at +first, as IITC was not even functioning at this time, so why would people be using it and getting banned. The conclusion +that was reached was that a few people who tried to use the broken IITC Mobile app triggered either a bug in IITC that +caused excessive requests, or triggered some kind of alert in the intel servers. Changes have been made to IITC now +so this unlikely to be an issue again. +

+ +

27th November 2013

+

+IITC and IITC Mobile are currently broken, due to changes made to the standard intel website. This is a major change in how +portal details are sent, with most of the extra data that the standard site didn't use being removed. +

+

+This is not something simple to fix, and will take some time. Also, it severely cripples what IITC can do, as using this +extra data, not displayed by the standard site, was it' big feature. +

+

+We will look into what can be done to get it working again, but it will take some time. Many plugins won't be practical +as the data will not be available. +

+

+More details, and discussion, available in the +Google+ post. +

+

+Update I've created a 'dummy' version of the desktop plugin that will, for now, disable IITC if you leave it installed. +This is shown as version 0.15.99. When a fixed build is released, it will be 0.16.something and will update and start working. +Test versions remain, but broken. Please join the Google+ Community where announcements will be made. +

+

11th November 2013

IITC 0.15.0 and IITC Mobile 0.9 have just been released. This update fixes things to work with the latest changes