quest: add quest leader. only quest-leader can begin/abort. Abort
restores quest scroll to leader. Bug fixes on clearing quest data (completion, abort, etc)
This commit is contained in:
+21
-14
@@ -417,16 +417,13 @@ questStart = function(req, res) {
|
||||
// TODO will this handle appropriately when people leave/join party between quest invite?
|
||||
_.each(group.members, function(m){
|
||||
var updates = {$set:{},$inc:{'_v':1}};
|
||||
if (m == user._id)
|
||||
if (m == group.quest.leader)
|
||||
updates['$inc']['items.quests.'+key] = -1;
|
||||
if (group.quest.members[m] == true) {
|
||||
updates['$set']['party.quest.key'] = key;
|
||||
updates['$set']['party.quest.progress'] = {up:0,down:0,collect:collected};
|
||||
updates['$unset'] = {'party.quest.completed':1};
|
||||
updates['$set']['party.quest'] = Group.cleanQuestProgress({key:key,progress:{collect:collected}});
|
||||
questMembers[m] = true;
|
||||
} else {
|
||||
updates['$unset'] = {'party.quest.key':1};
|
||||
updates['$set']['party.quest.progress'] = {};
|
||||
updates['$set']['party.quest'] = Group.cleanQuestProgress();
|
||||
}
|
||||
parallel.push(function(cb2){
|
||||
User.update({_id:m},updates,cb2);
|
||||
@@ -464,9 +461,10 @@ api.questAccept = function(req, res) {
|
||||
// Invite everyone. true means "accepted", false="rejected", undefined="pending". Once we click "start quest"
|
||||
// or everyone has either accepted/rejected, then we store quest key in user object.
|
||||
_.each(group.members, function(m){
|
||||
if (m == user._id)
|
||||
if (m == user._id) {
|
||||
group.quest.members[m] = true;
|
||||
else
|
||||
group.quest.leader = user._id;
|
||||
} else
|
||||
group.quest.members[m] = undefined;
|
||||
});
|
||||
|
||||
@@ -493,14 +491,23 @@ api.questAbort = function(req, res, next){
|
||||
var group = res.locals.group;
|
||||
async.parallel([
|
||||
function(cb){
|
||||
User.update({_id:{$in: _.keys(group.quest.members)}},{
|
||||
$unset: {'party.quest.key':1},
|
||||
$set: {'party.quest.progress.collect':{}},
|
||||
$inc: {_v:1}
|
||||
},cb);
|
||||
User.update(
|
||||
{_id:{$in: _.keys(group.quest.members)}},
|
||||
{
|
||||
$set: {'party.quest':Group.cleanQuestProgress()},
|
||||
$inc: {_v:1}
|
||||
},
|
||||
{multi:true},
|
||||
cb);
|
||||
},
|
||||
// Refund party leader quest scroll
|
||||
function(cb){
|
||||
var update = {$inc:{}};
|
||||
update['$inc']['items.quests.' + group.quest.key] = 1;
|
||||
User.update({_id:group.quest.leader}, update, cb);
|
||||
},
|
||||
function(cb) {
|
||||
group.quest = {};
|
||||
group.quest = {key:null,progress:{},leader:null};
|
||||
group.markModified('quest');
|
||||
group.save(cb);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user