[uniques] ask to mark mission waypoints as visited upon completion

This commit is contained in:
fkloft 2015-05-25 16:15:15 +02:00
parent f4f656dcd2
commit e4a335db19
2 changed files with 74 additions and 10 deletions

View File

@ -575,7 +575,7 @@ window.plugin.missions = {
else else
this.checkedWaypoints[mwpid] = true; this.checkedWaypoints[mwpid] = true;
window.runHooks('plugin-missions-waypoint-changed', { mwpid: mwpid, }); window.runHooks('plugin-missions-waypoint-changed', { mwpid: mwpid, local: true, });
if (!dontsave) { if (!dontsave) {
this.checkedWaypointsUpdateQueue[mwpid] = true; this.checkedWaypointsUpdateQueue[mwpid] = true;
this.storeLocal('checkedWaypoints'); this.storeLocal('checkedWaypoints');
@ -606,7 +606,7 @@ window.plugin.missions = {
else else
this.checkedMissions[mid] = true; this.checkedMissions[mid] = true;
window.runHooks('plugin-missions-mission-changed', { mid: mid, }); window.runHooks('plugin-missions-mission-changed', { mid: mid, local: true, });
this.checkedMissionsUpdateQueue[mid] = true; this.checkedMissionsUpdateQueue[mid] = true;
this.storeLocal('checkedMissions'); this.storeLocal('checkedMissions');
this.storeLocal('checkedMissionsUpdateQueue'); this.storeLocal('checkedMissionsUpdateQueue');
@ -860,9 +860,9 @@ window.plugin.missions = {
this.storeLocal(fieldName + 'UpdateQueue'); this.storeLocal(fieldName + 'UpdateQueue');
if(fieldName === 'checkedMissions') { if(fieldName === 'checkedMissions') {
window.runHooks('plugin-missions-mission-changed', { mid: e.property, }); window.runHooks('plugin-missions-mission-changed', { mid: e.property, local: false, });
} else if(fieldName === 'checkedWaypoints') { } else if(fieldName === 'checkedWaypoints') {
window.runHooks('plugin-missions-waypoint-changed', { mwpid: e.property, }); window.runHooks('plugin-missions-waypoint-changed', { mwpid: e.property, local: false, });
} }
} }
}, },

View File

@ -489,18 +489,82 @@ window.plugin.uniques.setupPortalsList = function() {
}); });
} }
window.plugin.uniques.onMissionChanged = function(data) {
if(!data.local) return;
var mission = window.plugin.missions && window.plugin.missions.getMissionCache(data.mid, false);
if(!mission) return;
window.plugin.uniques.checkMissionWaypoints(mission);
};
window.plugin.uniques.onMissionLoaded = function(data) {
// the mission has been loaded, but the dialog isn't visible yet.
// we'll wait a moment so the mission dialog is opened behind the confirmation prompt
setTimeout(function() {
window.plugin.uniques.checkMissionWaypoints(data.mission);
}, 0);
};
window.plugin.uniques.checkMissionWaypoints = function(mission) {
if(!(window.plugin.missions && window.plugin.missions.checkedMissions[mission.guid])) return;
if(!mission.waypoints) return;
function isValidWaypoint(wp) {
// might be hidden or field trip card
if(!(wp && wp.portal && wp.portal.guid)) return false;
// only use hack, deploy, link, field and upgrade; ignore photo and passphrase
if(wp.objectiveNum <= 0 || wp.objectiveNum > 5) return false;
return true;
}
function isVisited(wp) {
var guid = wp.portal.guid,
uniqueInfo = plugin.uniques.uniques[guid],
visited = (uniqueInfo && uniqueInfo.visited) || false;
return visited;
}
// check if all waypoints are already visited
if(mission.waypoints.every(function(wp) {
if(!isValidWaypoint(wp)) return true;
return isVisited(wp);
})) return;
if(!confirm('The mission ' + mission.title + ' contains waypoints not yet marked as visited.\n\n' +
'Do you want to set them to \'visited\' now?'))
return;
mission.waypoints.forEach(function(wp) {
if(!isValidWaypoint(wp)) return;
if(isVisited(wp)) return;
plugin.uniques.setPortalVisited(wp.portal.guid);
});
};
var setup = function() { var setup = function() {
if($.inArray('pluginUniquesUpdateUniques', window.VALID_HOOKS) < 0) window.pluginCreateHook('pluginUniquesUpdateUniques');
window.VALID_HOOKS.push('pluginUniquesUpdateUniques'); window.pluginCreateHook('pluginUniquesRefreshAll');
if($.inArray('pluginUniquesRefreshAll', window.VALID_HOOKS) < 0)
window.VALID_HOOKS.push('pluginUniquesRefreshAll'); // to mark mission portals as visited
window.pluginCreateHook('plugin-missions-mission-changed');
window.pluginCreateHook('plugin-missions-loaded-mission');
window.plugin.uniques.setupCSS(); window.plugin.uniques.setupCSS();
window.plugin.uniques.setupContent(); window.plugin.uniques.setupContent();
window.plugin.uniques.loadLocal('uniques'); window.plugin.uniques.loadLocal('uniques');
window.addPortalHighlighter('Uniques', window.plugin.uniques.highlighter);
window.addHook('portalDetailsUpdated', window.plugin.uniques.onPortalDetailsUpdated); window.addHook('portalDetailsUpdated', window.plugin.uniques.onPortalDetailsUpdated);
window.addHook('publicChatDataAvailable', window.plugin.uniques.onPublicChatDataAvailable); window.addHook('publicChatDataAvailable', window.plugin.uniques.onPublicChatDataAvailable);
window.addHook('iitcLoaded', window.plugin.uniques.registerFieldForSyncing); window.addHook('iitcLoaded', window.plugin.uniques.registerFieldForSyncing);
window.addPortalHighlighter('Uniques', window.plugin.uniques.highlighter);
window.addHook('plugin-missions-mission-changed', window.plugin.uniques.onMissionChanged);
window.addHook('plugin-missions-loaded-mission', window.plugin.uniques.onMissionLoaded);
if(window.plugin.portalslist) { if(window.plugin.portalslist) {
window.plugin.uniques.setupPortalsList(); window.plugin.uniques.setupPortalsList();