quests: temporary fix to users who have left a party mid-quest

This commit is contained in:
Tyler Renelle 2013-12-26 15:39:09 -07:00
parent aa3767afd9
commit 2a63dfe687
2 changed files with 65 additions and 61 deletions

View file

@ -205,11 +205,8 @@ api.cron = function(req, res, next) {
user.save(cb); // make sure to save the cron effects
},
function(saved, count, cb){
Group.findOne({type: 'party', members: {'$in': [user._id]}}, cb);
},
function(group, cb){
var type = quest.boss ? 'boss' : 'collect';
group[type+'Quest'](user,progress,cb);
Group[type+'Quest'](user,progress,cb);
},
function(){
var cb = arguments[arguments.length-1];

View file

@ -147,9 +147,15 @@ GroupSchema.methods.finishQuest = function(quest, cb) {
mongoose.models.User.update({_id:{$in:members}}, updates, {multi:true}, cb);
}
GroupSchema.methods.collectQuest = function(user, progress, cb) {
var group = this,
quest = shared.content.quests[group.quest.key];
// FIXME this is a temporary measure, we need to remove quests from users when they traverse parties
function isOnQuest(user,group){
return group && user.party.quest.key && user.party.quest.key == group.quest.key;
}
GroupSchema.statics.collectQuest = function(user, progress, cb) {
this.findOne({type: 'party', members: {'$in': [user._id]}},function(err, group){
if (!isOnQuest(user,group)) return cb(null);
var quest = shared.content.quests[group.quest.key];
_.each(progress.collect,function(v,k){
group.quest.progress.collect[k] += v;
@ -177,17 +183,18 @@ GroupSchema.methods.collectQuest = function(user, progress, cb) {
group.save(cb2);
}
],cb);
})
}
GroupSchema.methods.bossQuest = function(user, progress, cb) {
var group = this;
GroupSchema.statics.bossQuest = function(user, progress, cb) {
this.findOne({type: 'party', members: {'$in': [user._id]}},function(err, group){
if (!isOnQuest(user,group)) return cb(null);
var quest = shared.content.quests[group.quest.key];
if (!progress) progress = {down:0,up:0}; // FIXME why is this ever happening, progress should be defined at this point
if (!progress || !quest) return cb(null); // FIXME why is this ever happening, progress should be defined at this point
var down = progress.down * quest.boss.str; // multiply by boss strength
group.quest.progress.hp -= progress.up;
group.sendChat("`<" + user.profile.name + "> attacks <" + quest.boss.name + "> for " + (progress.up.toFixed(1)) + " damage, <" + quest.boss.name + "> attacks party for " + (down.toFixed(1)) + " damage.`");
//var hp = group.quest.progress.hp;
// Everyone takes damage
var series = [
@ -207,7 +214,7 @@ GroupSchema.methods.bossQuest = function(user, progress, cb) {
series.push(function(cb2){group.save(cb2)});
async.series(series,cb);
//return hp;
})
}
module.exports.schema = GroupSchema;