mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
feat(hourglass): Buy pets/mounts
This commit is contained in:
@@ -72,5 +72,6 @@
|
|||||||
"mountsAlreadyOwned": "Mount already owned.",
|
"mountsAlreadyOwned": "Mount already owned.",
|
||||||
"typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types: ",
|
"typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types: ",
|
||||||
"petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.",
|
"petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.",
|
||||||
"mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass."
|
"mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.",
|
||||||
|
"hourglassPurchase": "Purchased an item using a Mystic Hourglass!"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1020,10 +1020,16 @@ api.wrap = (user, main=true) ->
|
|||||||
|
|
||||||
hourglassPurchase: (req, cb, analytics)->
|
hourglassPurchase: (req, cb, analytics)->
|
||||||
{type, key} = req.params
|
{type, key} = req.params
|
||||||
return cb?({code:400, message:i18n.t('typeNotAllowedHourglass', req.language) + JSON.stringify(_.keys(content.timeTravelStable))}) unless content.timeTravelStable[type]
|
return cb?({code:403, message:i18n.t('typeNotAllowedHourglass', req.language) + JSON.stringify(_.keys(content.timeTravelStable))}) unless content.timeTravelStable[type]
|
||||||
return cb?({code:400, message:i18n.t(type+'NotAllowedHourglass', req.language)}) if not _.includes(content.timeTravelStable[type], key)
|
return cb?({code:403, message:i18n.t(type+'NotAllowedHourglass', req.language)}) unless _.contains(content.timeTravelStable[type], key)
|
||||||
return cb?({code:400, message:i18n.t(type+'AlreadyOwned', req.language)}) if user.items[type][key]
|
return cb?({code:403, message:i18n.t(type+'AlreadyOwned', req.language)}) if user.items[type][key]
|
||||||
return cb?({code:400, message:i18n.t('notEnoughHourglasses', req.language)}) unless user.purchased.plan.consecutive.trinkets > 0
|
return cb?({code:403, message:i18n.t('notEnoughHourglasses', req.language)}) unless user.purchased.plan.consecutive.trinkets > 0
|
||||||
|
user.purchased.plan.consecutive.trinkets--
|
||||||
|
if type is 'pets'
|
||||||
|
user.items.pets[key] = 5
|
||||||
|
if type is 'mounts'
|
||||||
|
user.items.mounts[key] = true
|
||||||
|
cb? {code:200, message:i18n.t('hourglassPurchase', req.language)}, _.pick(user,$w 'items purchased.plan.consecutive')
|
||||||
|
|
||||||
sell: (req, cb) ->
|
sell: (req, cb) ->
|
||||||
{key, type} = req.params
|
{key, type} = req.params
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ var _ = require('lodash');
|
|||||||
|
|
||||||
require('coffee-script');
|
require('coffee-script');
|
||||||
var shared = require('../../common/script/index.coffee');
|
var shared = require('../../common/script/index.coffee');
|
||||||
var Content = require('../../common/script/content.coffee');
|
var Content = require('../../common/script/content/index.coffee');
|
||||||
|
|
||||||
describe('user.ops.buyMysterySet', function() {
|
describe('user.ops.buyMysterySet', function() {
|
||||||
var user;
|
var user;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ var _ = require('lodash');
|
|||||||
|
|
||||||
require('coffee-script');
|
require('coffee-script');
|
||||||
var shared = require('../../common/script/index.coffee');
|
var shared = require('../../common/script/index.coffee');
|
||||||
var Content = require('../../common/script/content.coffee');
|
var Content = require('../../common/script/content/index.coffee');
|
||||||
|
|
||||||
describe('user.ops.hourglassPurchase', function() {
|
describe('user.ops.hourglassPurchase', function() {
|
||||||
var user;
|
var user;
|
||||||
@@ -36,7 +36,7 @@ describe('user.ops.hourglassPurchase', function() {
|
|||||||
|
|
||||||
it('does not allow purchase of unsupported item types', function(done) {
|
it('does not allow purchase of unsupported item types', function(done) {
|
||||||
user.ops.hourglassPurchase({params:{type: 'hatchingPotions', key: 'Base'}}, function(response) {
|
user.ops.hourglassPurchase({params:{type: 'hatchingPotions', key: 'Base'}}, function(response) {
|
||||||
expect(response.message).to.eql("Item type not supported for purchase with Mystic Hourglass. Allowed types: [pets, mounts]");
|
expect(response.message).to.eql('Item type not supported for purchase with Mystic Hourglass. Allowed types: ["pets","mounts"]');
|
||||||
expect(user.items.hatchingPotions).to.eql({});
|
expect(user.items.hatchingPotions).to.eql({});
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -110,9 +110,10 @@ describe('user.ops.hourglassPurchase', function() {
|
|||||||
it('buys a pet', function(done) {
|
it('buys a pet', function(done) {
|
||||||
user.purchased.plan.consecutive.trinkets = 2;
|
user.purchased.plan.consecutive.trinkets = 2;
|
||||||
|
|
||||||
user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, function() {
|
user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, function(response) {
|
||||||
|
expect(response.message).to.eql('Purchased an item using a Mystic Hourglass!');
|
||||||
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
||||||
expect(user.items.pets).to.eql({'MantisShrimp-Base':true});
|
expect(user.items.pets).to.eql({'MantisShrimp-Base':5});
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -120,7 +121,8 @@ describe('user.ops.hourglassPurchase', function() {
|
|||||||
it('buys a mount', function(done) {
|
it('buys a mount', function(done) {
|
||||||
user.purchased.plan.consecutive.trinkets = 2;
|
user.purchased.plan.consecutive.trinkets = 2;
|
||||||
|
|
||||||
user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, function() {
|
user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, function(response) {
|
||||||
|
expect(response.message).to.eql('Purchased an item using a Mystic Hourglass!');
|
||||||
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
||||||
expect(user.items.mounts).to.eql({'MantisShrimp-Base':true});
|
expect(user.items.mounts).to.eql({'MantisShrimp-Base':true});
|
||||||
done();
|
done();
|
||||||
|
|||||||
Reference in New Issue
Block a user