diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index ce38e504fb..10a833e10f 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -87,6 +87,12 @@ habitrpg.controller("InventoryCtrl", ['$rootScope', '$scope', '$window', 'User', } $scope.purchase = function(type, item){ + if (item.key=='spookDust') { + // FIXME stupid method of special-handling spookDust, since it can be purchased with gold and the system only accomodates gem-purchasable holiday spells + if (user.stats.gp < item.value) return alert(window.env.t('messageNotEnoughGold')); + return User.set({'stats.gp':user.stats.gp-item.value, 'items.special.spookDust':(user.items.special.spookDust || 0)+1}); + } + var gems = User.user.balance * 4; if(gems < item.value) return $rootScope.openModal('buyGems'); diff --git a/src/models/user.js b/src/models/user.js index d7bbe6b83c..a78f2d5b87 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -37,6 +37,7 @@ var UserSchema = new Schema({ beastMasterCount: Number, veteran: Boolean, snowball: Number, + spookDust: Number, streak: Number, challenges: Array, quests: Schema.Types.Mixed, @@ -155,6 +156,7 @@ var UserSchema = new Schema({ special:{ snowball: {type: Number, 'default': 0}, + spookDust: {type: Number, 'default': 0}, valentine: Number, valentineReceived: Array // array of strings, by sender name }, @@ -296,7 +298,8 @@ var UserSchema = new Schema({ con: {type: Number, 'default': 0}, stealth: {type: Number, 'default': 0}, streaks: {type: Boolean, 'default': false}, - snowball: {type: Boolean, 'default': false} + snowBall: {type: Boolean, 'default': false}, + spookDust: {type: Boolean, 'default': false} }, training: { int: {type: Number, 'default': 0}, diff --git a/views/options/inventory/inventory.jade b/views/options/inventory/inventory.jade index e59db2f58b..57033d71a8 100644 --- a/views/options/inventory/inventory.jade +++ b/views/options/inventory/inventory.jade @@ -58,11 +58,14 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') button.customize-option(popover='{{::Content.food[food].notes()}}', popover-title='{{::Content.food[food].text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='chooseFood(food)', class='Pet_Food_{{::food}}') .badge.badge-info.stack-count {{points}} - li.customize-menu(ng-if='user.items.special.snowball') - menu.pets-menu(label=env.t('special')) - div - button.customize-option(popover='{{::Content.special.snowball.notes()}}', popover-title='{{::Content.special.snowball.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='castStart(Content.special.snowball)', class='inventory_special_snowball') - .badge.badge-info.stack-count {{user.items.special.snowball}} + mixin specialItem(k) + li.customize-menu(ng-if='user.items.special.#{k}') + menu.pets-menu(label=env.t('special')) + div + button.customize-option(popover='{{::Content.special.#{k}.notes()}}', popover-title='{{::Content.special.#{k}.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='castStart(Content.special.#{k})', class='inventory_special_#{k}') + .badge.badge-info.stack-count {{user.items.special.#{k}}} + +specialItem('snowball') + +specialItem('spookDust') li.customize-menu(ng-if='user.items.special.valentineReceived[0]') menu.pets-menu(label=env.t('valentineCard')) @@ -142,11 +145,15 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') p | 4 span.Pet_Currency_Gem1x.inline-gems - //-div - button.customize-option(popover='{{::Content.spells.special.snowball.notes()}}', popover-title='{{::Content.spells.special.snowball.text()}}', popover-trigger='mouseenter', popover-placement='left', ng-click='purchase("special", Content.spells.special.snowball)', class='inventory_special_snowball') - p - | {{::Content.spells.special.snowball.value}} - span.Pet_Currency_Gem1x.inline-gems + mixin buySpecialSpell(k,gp) + div + button.customize-option(popover='{{::Content.spells.special.#{k}.notes()}}', popover-title='{{::Content.spells.special.#{k}.text()}}', popover-trigger='mouseenter', popover-placement='left', ng-click='purchase("special", Content.spells.special.#{k})', class='inventory_special_#{k}') + p + | {{::Content.spells.special.#{k}.value}} + span(class='#{gp ? "shop_gold" : "Pet_Currency_Gem1x inline-gems"}') + //-+buySpecialSpell('snowball',false) + +buySpecialSpell('spookDust',true) + div(ng-show='user.flags.rebirthEnabled') button.customize-option(popover=env.t('rebirthPop'), popover-title=env.t('rebirthName'), popover-trigger='mouseenter', popover-placement='left', ng-click='openModal("rebirth")', class='rebirth_orb') p(ng-show='user.stats.lvl < 100') diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index b5b1446e2b..415abe6ede 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -13,7 +13,9 @@ mixin avatar(opts) span(ng-if='profile.stats.buffs.snowball') span.snowman - span(ng-if='!profile.stats.buffs.snowball') + span(ng-if='profile.stats.buffs.spookDust') + span.spookman + span(ng-if='!profile.stats.buffs.snowball && !profile.stats.buffs.spookDust') // Back Accessory span(class='{{profile.items.gear.equipped.back}}', ng-if='!profile.preferences.costume') span(class='{{profile.items.gear.costume.back}}', ng-if='profile.preferences.costume') diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 26c4384298..7603a9f6d7 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -143,6 +143,13 @@ div(ng-if='profile.achievements.snowball') =env.t('annoyingFriendsText', {snowballs: "{{profile.achievements.snowball}}"}) hr +div(ng-if='profile.achievements.spookDust') + .achievement.achievement-spookDust + h5=env.t('alarmingFriends') + small + =env.t('alarmingFriendsText', {spookDust: "{{profile.achievements.spookDust}}"}) + hr + div(ng-if='::profile.achievements.habitBirthday') .achievement.achievement-habitBirthday h5=env.t('habitBirthday') diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index 4635818f00..78c5c3142b 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -50,32 +50,30 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") p.task-text {{item.text()}} // Events - ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball)') + ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust)') - li.task.reward-item(ng-if='user.items.special.snowball>0',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.snowball.notes()}}') - .task-meta-controls - span.task-notes - span.glyphicon.glyphicon-comment - //left-hand size commands - .task-controls - a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.snowball)') - span.reward-cost {{user.items.special.snowball}} - span.shop_snowball(style='display:inline-block;vertical-align:top;') - // main content - p.task-text {{Content.spells.special.snowball.text()}} + mixin specialSpell(k,canceler) + li.task.reward-item(ng-if='#{canceler ? "user.stats.buffs."+canceler : "user.items.special."+k+">0"}',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.#{k}.notes()}}') + .task-meta-controls + span.task-notes + span.glyphicon.glyphicon-comment + //left-hand size commands + .task-controls + a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.#{k})') + if canceler + span.reward-cost {{Content.spells.special.#{k}.value}} + span.shop_gold + else + span.reward-cost {{user.items.special.#{k}}} + span(class='shop_#{k}',style='display:inline-block;vertical-align:top;') + // main content + p.task-text {{Content.spells.special.#{k}.text()}} - li.task.reward-item(ng-if='user.stats.buffs.snowball',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.salt.notes()}}') - .task-meta-controls - span.task-notes - span.glyphicon.glyphicon-comment - //left-hand size commands - .task-controls - a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.salt)') - span.reward-cost {{Content.spells.special.salt.value}} - span.shop_gold - // main content - span.shop_salt.shop-sprite.item-img - p.task-text {{Content.spells.special.salt.text()}} + +specialSpell('snowball') + +specialSpell('spookDust') + + +specialSpell('salt','snowball') + +specialSpell('opaquePotion','spookDust') // Spells ul.items(ng-if='main && list.type=="reward" && user.stats.class && !user.preferences.disableClasses')