diff --git a/src/controllers/groups.js b/src/controllers/groups.js index c126373484..6fd86bdd90 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -571,13 +571,13 @@ api.questAccept = function(req, res, next) { var user = res.locals.user; var key = req.query.key; - if (!group) return res.json(400, {err: "Must be in a party to start quests (this will change in the future)."}); + if (!group) return res.json(400, {err: "Must be in a party to start quests."}); // If ?key=xxx is provided, we're starting a new quest and inviting the party. Otherwise, we're a party member accepting the invitation if (key) { var quest = shared.content.quests[key]; if (!quest) return res.json(404,{err:'Quest ' + key + ' not found'}); - if (quest.lvl && user.stats.lvl < quest.lvl) return res.json(400, {err: "You must be level "+quest.lvl+" to being this quest."}); + if (quest.lvl && user.stats.lvl < quest.lvl) return res.json(400, {err: "You must be level "+quest.lvl+" to begin this quest."}); if (group.quest.key) return res.json(400, {err: 'Party already on a quest (and only have one quest at a time)'}); if (!user.items.quests[key]) return res.json(400, {err: "You don't own that quest scroll"}); group.quest.key = key; @@ -609,8 +609,23 @@ api.questReject = function(req, res, next) { questStart(req,res,next); } +api.questCancel = function(req, res, next){ + // Cancel a quest BEFORE it has begun (i.e., in the invitation stage) + var group = res.locals.group; + async.parallel([ + function(cb){ + group.quest = {key:null,progress:{},leader:null}; + group.markModified('quest'); + group.save(cb); + } + ], function(err){ + if (err) return next(err); + res.json(group); + }) +} api.questAbort = function(req, res, next){ + // Abort a quest AFTER it has begun (see questCancel for BEFORE) var group = res.locals.group; async.parallel([ function(cb){ @@ -639,3 +654,4 @@ api.questAbort = function(req, res, next){ res.json(group); }) } + diff --git a/views/options/social/boss.jade b/views/options/social/boss.jade index c051d9ee49..837deff14d 100644 --- a/views/options/social/boss.jade +++ b/views/options/social/boss.jade @@ -9,16 +9,23 @@ mixin boss(tavern, mobile) table.table.table-striped tr(ng-repeat='member in group.members') td - span(ng-if=':: group.quest.leader==member._id') + span(ng-if=':: group.quest.leader && group.quest.leader==member._id') |*  {{::member.profile.name}} td {{group.quest.members[member._id] === true ? env.t('accepted') : group.quest.members[member._id] === false ? env.t('rejected') : env.t('pending')}} + //span(ng-if=':: group.quest.leader && group.members.indexOf(group.quest.leader) > -1') |*  =env.t('questOwner') + br + span(ng-if=':: !group.quest.leader') no quest leader + br + span(ng-if=':: group.members.indexOf(group.quest.leader) == -1') not in group + // span(ng-if=':: !group.quest.leader || group.members.indexOf(group.quest.leader) == -1')=env.t('questOwnerMIA') hr .npc_ian.pull-left p=env.t('questStart') - button.btn.btn-sm.btn-warning(ng-if=':: !group.quest.leader || group.quest.leader==user._id', ng-click='party.$questAccept({"force":true})')=env.t('begin') + button.btn.btn-sm.btn-warning(ng-if=':: !group.quest.leader || group.members.indexOf(group.quest.leader) == -1 || group.quest.leader==user._id', ng-click='party.$questAccept({"force":true})')=env.t('begin') + //button.btn.btn-sm.btn-warning(ng-if=':: !group.quest.leader || group.members.indexOf(group.quest.leader) == -1 || group.quest.leader==user._id', ng-click='party.$questCancel()')=env.t('cancel') //-TODO Cancel button //-TODO Both force-start & cancel should only be available to quest-initiator @@ -65,8 +72,10 @@ mixin boss(tavern, mobile) span(ng-if=':: group.quest.leader==v._id') |*  {{::v.profile.name}} - |*  - =env.t('questOwner') + // span(ng-if=':: group.quest.leader && group.members.indexOf(group.quest.leader) > -1') + // |*  + // =env.t('questOwner') + // span(ng-if=':: !group.quest.leader || group.members.indexOf(group.quest.leader) == -1')=env.t('questOwnerMIA') quest-rewards(key='{{::group.quest.key}}') div(ng-if='::Content.quests[group.quest.key].boss') @@ -86,4 +95,4 @@ mixin boss(tavern, mobile) unless tavern - button.btn.btn-xs.btn-danger(ng-if='::!group.quest.leader || group.quest.leader==user._id', ng-click='questAbort()')=env.t('abort') + button.btn.btn-xs.btn-danger(ng-if='::!group.quest.leader || group.members.indexOf(group.quest.leader) == -1 || group.quest.leader==user._id', ng-click='questAbort()')=env.t('abort')