classes: very simple "buffs applied" icon next to level, add chat message

for party / member casts (@wc8 @sabrecat)
This commit is contained in:
Tyler Renelle
2013-12-17 18:19:27 -07:00
parent 03c4a04ff5
commit d03a996946
5 changed files with 37 additions and 22 deletions
+30 -20
View File
@@ -320,16 +320,41 @@ api.cast = function(req, res) {
break;
case 'party':
case 'user':
async.waterfall([
function(cb){
Group.findOne({type: 'party', members: {'$in': [user._id]}}).populate('members').exec(cb);
},
function(group, cb) {
if (!group) group = {members:[user]};
spell.cast(user, group.members);
var series = _.transform(group.members, function(m,v,k){
m[k] = function(cb2){v.save(cb2);}
});
// Solo player? let's just create a faux group for simpler code
var g = group ? group : {members:[user]};
var series = [], found;
if (type == 'party') {
spell.cast(user, g.members);
series = _.transform(g.members, function(m,v,k){
m.push(function(cb2){v.save(cb2)});
});
} else {
found = _.find(g.members, {_id: target._id})
spell.cast(user, found);
series.push(function(cb2){found.save(cb2)});
}
if (group) {
series.push(function(cb2){
group.chat.unshift({
id: shared.uuid(),
uuid: user._id,
contributor: user.contributor && user.contributor.toObject(),
backer: user.backer && user.backer.toObject(),
text: '`casts ' + spell.text + ' on ' + (type == 'user' ? found.profile.name : 'the party') + '`',
user: '<'+user.profile.name+'>',
timestamp: +new Date
});
group.save(cb2);
})
}
async.series(series, cb);
},
function(whatever, cb){
@@ -337,21 +362,6 @@ api.cast = function(req, res) {
}
], done);
break;
case 'user':
async.waterfall([
function(cb) {
User.findById(target._id, cb);
},
function(member, cb) {
spell.cast(user, member);
member.save(cb); // not parallel because target could be user, which causes race condition when saving
},
function(saved, num, cb) {
user.save(cb);
}
], done);
break;
}
}