Merge branch 'lefnire/spells' into develop

This commit is contained in:
Tyler Renelle
2014-01-22 00:32:29 -08:00
4 changed files with 51 additions and 19 deletions
+2 -1
View File
@@ -81,6 +81,7 @@
"expect.js": "~0.2.0",
"superagent": "~0.15.7",
"superagent-defaults": "~0.1.5",
"git-changelog": "colegleason/git-changelog"
"git-changelog": "colegleason/git-changelog",
"deep-diff": "~0.1.4"
}
}
+11 -4
View File
@@ -163,21 +163,28 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$
}
$scope.castEnd = function(target, type, $event){
if (!$rootScope.applyingAction) return;
$event && ($event.stopPropagation(),$event.preventDefault());
if ($scope.spell.target != type) return Notification.text("Invalid target");
$scope.spell.cast(User.user, target);
User.save();
$http.post('/api/v2/user/class/cast/' + $scope.spell.key, {target:target, type:type}).success(function(){
var msg = "You cast " + $scope.spell.text;
var spell = $scope.spell;
var targetId = (type == 'party' || type == 'self') ? '' : type == 'task' ? target.id : target._id;
$scope.spell = null;
$rootScope.applyingAction = false;
$http.post('/api/v2/user/class/cast/'+spell.key+'?targetType='+type+'&targetId='+targetId)
.success(function(){
var msg = "You cast " + spell.text;
switch (type) {
case 'task': msg += ' on ' + target.text;break;
case 'user': msg += ' on ' + target.profile.name;break;
case 'party': msg += ' on the Party';break;
}
Notification.text(msg);
$scope.spell = null;
});
$rootScope.applyingAction = false;
}
$rootScope.castCancel = function(){
+8 -14
View File
@@ -322,14 +322,8 @@ api.buyGemsPaypalIPN = function(req, res, next) {
*/
api.cast = function(req, res) {
var user = res.locals.user;
var type, target;
if (req.body.type) { // this is the method implemented in the app, it's not correct
type = req.body.type;
target = req.body.target;
} else if (req.query.targetType) { // this is the supported API method
type = req.query.targetType;
target = req.query.targetId;
}
var targetType = req.query.targetType;
var targetId = req.query.targetId;
var klass = shared.content.spells.special[req.params.spell] ? 'special' : user.stats.class
var spell = shared.content.spells[klass][req.params.spell];
@@ -340,9 +334,9 @@ api.cast = function(req, res) {
res.json(saved);
}
switch (type) {
switch (targetType) {
case 'task':
spell.cast(user, user.tasks[target.id]);
spell.cast(user, user.tasks[targetId]);
user.save(done);
break;
@@ -355,26 +349,26 @@ api.cast = function(req, res) {
case 'user':
async.waterfall([
function(cb){
Group.findOne({type: 'party', members: {'$in': [user._id]}}).populate('members').exec(cb);
Group.findOne({type: 'party', members: {'$in': [user._id]}}).populate('members', 'profile.name stats achievements').exec(cb);
},
function(group, cb) {
// Solo player? let's just create a faux group for simpler code
var g = group ? group : {members:[user]};
var series = [], found;
if (type == 'party') {
if (targetType == '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})
found = _.find(g.members, {_id: targetId})
spell.cast(user, found);
series.push(function(cb2){found.save(cb2)});
}
if (group) {
series.push(function(cb2){
var message = '`'+user.profile.name+' casts '+spell.text + (type=='user' ? ' on '+found.profile.name : ' for the party')+'.`';
var message = '`'+user.profile.name+' casts '+spell.text + (targetType=='user' ? ' on '+found.profile.name : ' for the party')+'.`';
group.sendChat(message);
group.save(cb2);
})
+30
View File
@@ -5,6 +5,7 @@
var _ = require('lodash');
var expect = require('expect.js');
var async = require('async');
var diff = require('deep-diff');
var superagentDefaults = require('superagent-defaults');
var request = superagentDefaults();
@@ -381,6 +382,35 @@ describe('API', function () {
})
});
it('Casts a spell', function(done){
var mp = user.stats.mp;
request.get(baseURL+'/members/'+party[0]._id).end(function(res){
party[0] = res.body;
request.post(baseURL+'/user/class/cast/snowball?targetType=user&targetId='+party[0]._id)
.end(function(res){
//expect(res.body.stats.mp).to.be.below(mp);
request.get(baseURL+'/members/'+party[0]._id).end(function(res){
var member = res.body;
expect(member.achievements.snowball).to.be(1);
expect(member.stats.buffs.snowball).to.be(true);
var difference = diff(member,party[0]);
expect(_.size(difference)).to.be(2);
// level up user so str is > 0
request.put(baseURL+'/user').send({'stats.lvl':5}).end(function(res){
request.post(baseURL+'/user/class/cast/valorousPresence?targetType=party').end(function(res){
request.get(baseURL+'/members/'+member._id).end(function(res){
expect(res.body.stats.buffs.str).to.be.above(0);
expect(diff(res.body,member).length).to.be(1);
done();
})
})
})
})
})
})
});
it("Doesn't include people who aren't participating",function(done){
request.get(baseURL+'/groups/'+group._id).end(function(res){
expect(_.size(res.body.quest.members)).to.be(3);