classes WIP
This commit is contained in:
@@ -482,6 +482,67 @@ api.deleteTag = function(req, res){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------------------------
|
||||
Spells
|
||||
------------------------------------------------------------------------
|
||||
*/
|
||||
api.cast = function(req, res) {
|
||||
var user = res.locals.user;
|
||||
var type = req.body.type, target = req.body.target;
|
||||
var spell = items.items.spells[user.stats.class][req.params.spell];
|
||||
|
||||
var done = function(){
|
||||
var err = arguments[0];
|
||||
var saved = _.size(arguments == 3) ? arguments[2] : arguments[1];
|
||||
if (err) return res.json(500, {err:err});
|
||||
res.json(saved);
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case 'task':
|
||||
spell.cast(user, user.tasks[target.id]);
|
||||
user.save(done);
|
||||
break;
|
||||
|
||||
case 'self':
|
||||
spell.cast(user);
|
||||
user.save(done);
|
||||
break;
|
||||
|
||||
case 'party':
|
||||
async.waterfall([
|
||||
function(cb){
|
||||
Group.findOne({type: 'party', members: {'$in': [user._id]}}).populate('members').exec(cb);
|
||||
},
|
||||
function(group, cb) {
|
||||
spell.cast(user, group.members);
|
||||
var series = _.reduce(group.members, function(m,v){
|
||||
m.push(function(cb2){v.save(cb2);})
|
||||
return m;
|
||||
}, []);
|
||||
async.series(series, cb);
|
||||
}
|
||||
], 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;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------------------------
|
||||
Batch Update
|
||||
|
||||
+27
-3
@@ -188,12 +188,17 @@ var UserSchema = new Schema({
|
||||
armorSet: String,
|
||||
dayStart: {type:Number, 'default': 0},
|
||||
gender: {type:String, 'default': 'm'},
|
||||
hair: {type:String, 'default':'blond'},
|
||||
hair: {
|
||||
color: {type: String, 'default': 'blonde'},
|
||||
base: {type: Number, 'default': 0},
|
||||
bangs: {type: Number, 'default': 0}
|
||||
},
|
||||
hideHeader: {type:Boolean, 'default':false},
|
||||
showHelm: {type:Boolean, 'default':true},
|
||||
skin: {type:String, 'default':'white'},
|
||||
timezoneOffset: Number,
|
||||
language: String
|
||||
language: String,
|
||||
automaticAllocation: Boolean
|
||||
},
|
||||
profile: {
|
||||
blurb: String,
|
||||
@@ -202,9 +207,24 @@ var UserSchema = new Schema({
|
||||
},
|
||||
stats: {
|
||||
hp: Number,
|
||||
mp: Number,
|
||||
exp: Number,
|
||||
gp: Number,
|
||||
lvl: Number
|
||||
lvl: Number,
|
||||
|
||||
// Class System
|
||||
'class': String,
|
||||
points: {type: Number, 'default': 0},
|
||||
str: {type: Number, 'default': 0},
|
||||
def: {type: Number, 'default': 0},
|
||||
int: {type: Number, 'default': 0},
|
||||
per: {type: Number, 'default': 0},
|
||||
buffs: {
|
||||
str: Number,
|
||||
def: Number,
|
||||
per: Number,
|
||||
stealth: Number
|
||||
}
|
||||
},
|
||||
tags: [
|
||||
{
|
||||
@@ -264,6 +284,10 @@ UserSchema.pre('save', function(next) {
|
||||
'Anonymous';
|
||||
}
|
||||
|
||||
// FIXME handle this on level-up instead, and come up with how we're going to handle retroactively
|
||||
// Actually, can this be used as an attr default? (schema {type: ..., 'default': function(){}})
|
||||
this.stats.points = this.stats.lvl - (this.stats.def + this.stats.str + this.stats.per + this.stats.int);
|
||||
|
||||
var petCount = _.reduce(this.items.pets,function(m,v){return m+(v ? 1 : 0);},0);
|
||||
this.achievements.beastMaster = petCount >= 90;
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ router.post('/user/buy-gems', auth.auth, user.buyGems);
|
||||
router.post('/user/buy-gems/paypal-ipn', user.buyGemsPaypalIPN);
|
||||
router.post('/user/unlock', auth.auth, cron, user.unlock);
|
||||
router.post('/user/reset', auth.auth, user.reset);
|
||||
router.post('/user/cast/:spell', auth.auth, user.cast);
|
||||
router['delete']('/user', auth.auth, user['delete']);
|
||||
|
||||
/* Tags */
|
||||
|
||||
Reference in New Issue
Block a user