diff --git a/common/locales/en/content.json b/common/locales/en/content.json index ffe1e85eae..c7d3618109 100644 --- a/common/locales/en/content.json +++ b/common/locales/en/content.json @@ -3,8 +3,9 @@ "potionNotes": "Recover 15 Health (Instant Use)", "armoireText": "Enchanted Armoire", - "armoireNotesFull": "Open the Armoire to randomly receive special equipment, Experience, or food!", - "armoireNotesEmpty": "The Enchanted Armoire will have new Equipment every month. Until then, keep clicking for Experience and Food!", + "armoireNotesFull": "Open the Armoire to randomly receive special Equipment, Experience, or food! Equipment pieces remaining: ", + "armoireLastItem": "You've found the last piece of rare Equipment in the Enchanted Armoire.", + "armoireNotesEmpty": "The Armoire will have new Equipment every month. Until then, keep clicking for Experience and Food!", "dropEggWolfText": "Wolf", "dropEggWolfAdjective": "loyal", diff --git a/common/locales/en/messages.json b/common/locales/en/messages.json index 912599b13a..e4a900c46a 100644 --- a/common/locales/en/messages.json +++ b/common/locales/en/messages.json @@ -21,7 +21,7 @@ "messageDropEgg": "You've found a <%= dropText %> Egg! <%= dropNotes %>", "messageDropPotion": "You've found a <%= dropText %> Hatching Potion! <%= dropNotes %>", "messageFoundQuest": "You've found the quest \"<%= questText %>\"!", - "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome! There are <%= count %> pieces left.", + "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" } diff --git a/common/script/index.coffee b/common/script/index.coffee index 1b80e4dd10..3e053a5f34 100644 --- a/common/script/index.coffee +++ b/common/script/index.coffee @@ -363,8 +363,8 @@ api.countTriad = (pets) -> count3 api.countArmoire = (gear) -> - count4 = _.size(_.filter(content.gear.flat, ((i)->i.klass is 'armoire' and !gear[i.key]))) - count4 + count = _.size(_.filter(content.gear.flat, ((i)->i.klass is 'armoire' and !gear[i.key]))) + count ### ------------------------------------------------------ @@ -856,7 +856,8 @@ api.wrap = (user, main=true) -> drop = user.fns.randomVal(eligibleEquipment) user.items.gear.owned[drop.key] = true user.flags.armoireOpened = true - message = i18n.t('armoireEquipment', {image: '', dropText: drop.text(req.language), count: api.countArmoire(user.items.gear.owned)}, req.language) + message = i18n.t('armoireEquipment', {image: '', dropText: drop.text(req.language)}, req.language) + if api.countArmoire(user.items.gear.owned) is 0 then user.flags.armoireEmpty = true else if (!_.isEmpty(eligibleEquipment) and armoireResult < .85) or armoireResult < .6 drop = user.fns.randomVal _.where(content.food, {canDrop:true}) user.items.food[drop.key] ?= 0 diff --git a/migrations/20150604_ultimateGearSets.js b/migrations/20150604_ultimateGearSets.js index d1290420c7..5e1202ebef 100644 --- a/migrations/20150604_ultimateGearSets.js +++ b/migrations/20150604_ultimateGearSets.js @@ -17,48 +17,36 @@ var _ = require('lodash'); var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users'); -var query = { - 'items.gear.owned.weapon_wizard_6':true, - 'items.gear.owned.armor_wizard_5':true, - 'items.gear.owned.head_wizard_5':true +var fields = { + 'achievements.ultimateGearSets':1 }; -var fields = { - 'achievements.ultimateGearSets.wizard':true +var query = { + 'items.gear.owned.weapon_wizard_6': {$exists: true}, + 'items.gear.owned.armor_wizard_5': {$exists: true}, + 'items.gear.owned.head_wizard_5': {$exists: true} }; /* var query = { - 'items.gear.owned.weapon_warrior_6':true, - 'items.gear.owned.armor_warrior_5':true, - 'items.gear.owned.head_warrior_5':true, - 'items.gear.owned.shield_warrior_5':true -}; - -var fields = { - 'achievements.ultimateGearSets.warrior':true + 'items.gear.owned.weapon_warrior_6': {$exists: true}, + 'items.gear.owned.armor_warrior_5': {$exists: true}, + 'items.gear.owned.head_warrior_5': {$exists: true}, + 'items.gear.owned.shield_warrior_5': {$exists: true} }; */ /* var query = { - 'items.gear.owned.weapon_healer_6':true, - 'items.gear.owned.armor_healer_5':true, - 'items.gear.owned.head_healer_5':true, - 'items.gear.owned.shield_healer_5':true - }; - - var fields = { - 'achievements.ultimateGearSets.healer':true - }; */ + 'items.gear.owned.weapon_healer_6': {$exists: true}, + 'items.gear.owned.armor_healer_5': {$exists: true}, + 'items.gear.owned.head_healer_5': {$exists: true}, + 'items.gear.owned.shield_healer_5': {$exists: true} +}; */ /* var query = { - 'items.gear.owned.weapon_rogue_6':true, - 'items.gear.owned.armor_rogue_5':true, - 'items.gear.owned.head_rogue_5':true, - 'items.gear.owned.shield_rogue_6':true - }; - - var fields = { - 'achievements.ultimateGearSets.rogue':true - }; */ + 'items.gear.owned.weapon_rogue_6': {$exists: true}, + 'items.gear.owned.armor_rogue_5': {$exists: true}, + 'items.gear.owned.head_rogue_5': {$exists: true}, + 'items.gear.owned.shield_rogue_6': {$exists: true} +}; */ console.warn('Updating users...'); var progressCount = 1000; @@ -71,7 +59,7 @@ dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { } count++; - var set = {'migration':migrationName, 'achievements.ultimateGearSets':{'wizard':true} }; // Change per class + var set = {'migration':migrationName, 'achievements.ultimateGearSets.wizard':true}; // Change per class dbUsers.update({_id:user._id}, {$set:set}); if (count%progressCount == 0) console.warn(count + ' ' + user._id); diff --git a/website/public/js/controllers/notificationCtrl.js b/website/public/js/controllers/notificationCtrl.js index 8f7f1a30f8..578654afb0 100644 --- a/website/public/js/controllers/notificationCtrl.js +++ b/website/public/js/controllers/notificationCtrl.js @@ -106,6 +106,11 @@ habitrpg.controller('NotificationCtrl', $rootScope.openModal('achievements/ultimateGear'); }, true); + $rootScope.$watch('user.flags.armoireEmpty', function(after,before){ + if (before == undefined || after == before || after == false) return; + $rootScope.openModal('armoireEmpty'); + }); + $rootScope.$watch('user.achievements.rebirths', function(after, before){ if(after === before) return; $rootScope.openModal('achievements/rebirth'); diff --git a/website/public/js/controllers/rootCtrl.js b/website/public/js/controllers/rootCtrl.js index 4006a9e4e6..53e802a0b7 100644 --- a/website/public/js/controllers/rootCtrl.js +++ b/website/public/js/controllers/rootCtrl.js @@ -34,7 +34,6 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ $rootScope.Groups = Groups; $rootScope.toJson = angular.toJson; $rootScope.Payments = Payments; - $rootScope.armoireCount = Shared.countArmoire(User.user.items.gear.owned); // Angular UI Router $rootScope.$state = $state; diff --git a/website/public/js/controllers/tasksCtrl.js b/website/public/js/controllers/tasksCtrl.js index cf2838adb1..3bb0df8c31 100644 --- a/website/public/js/controllers/tasksCtrl.js +++ b/website/public/js/controllers/tasksCtrl.js @@ -4,6 +4,9 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','N function($scope, $rootScope, $location, User, Notification, $http, ApiUrl, $timeout, Shared, Guide) { $scope.obj = User.user; // used for task-lists $scope.user = User.user; + $scope.armoireCount = function(gear) { + return Shared.countArmoire(gear); + }; $scope.score = function(task, direction) { switch (task.type) { diff --git a/website/src/models/user.js b/website/src/models/user.js index 2ce2696cde..c7c2a9e601 100644 --- a/website/src/models/user.js +++ b/website/src/models/user.js @@ -159,7 +159,8 @@ var UserSchema = new Schema({ cronCount: {type:Number, 'default':0}, welcomed: {type: Boolean, 'default': false}, armoireEnabled: {type: Boolean, 'default': false}, - armoireOpened: {type: Boolean, 'default': false} + armoireOpened: {type: Boolean, 'default': false}, + armoireEmpty: {type: Boolean, 'default': false} }, history: { exp: Array, // [{date: Date, value: Number}], // big peformance issues if these are defined diff --git a/website/views/shared/modals/drops.jade b/website/views/shared/modals/drops.jade index 3e26912548..f47315128f 100644 --- a/website/views/shared/modals/drops.jade +++ b/website/views/shared/modals/drops.jade @@ -51,3 +51,14 @@ script(type='text/ng-template', id='modals/pet-key.html') span(ng-if='!user.achievements.triadBingo') | : 6  span.Pet_Currency_Gem1x.inline-gems + +script(type='text/ng-template', id='modals/armoireEmpty.html') + .modal-header + .shop_armoire.pull-right + h4=env.t('armoireText') + .modal-body + p=env.t('armoireLastItem') + br + p=env.t('armoireNotesEmpty') + .modal-footer + button.btn.btn-default(ng-click='$close()')=env.t('close') \ No newline at end of file diff --git a/website/views/shared/tasks/lists.jade b/website/views/shared/tasks/lists.jade index ef0fa8aec2..89e4430d0a 100644 --- a/website/views/shared/tasks/lists.jade +++ b/website/views/shared/tasks/lists.jade @@ -126,7 +126,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") // Static Rewards ul.items.rewards(ng-if='main && list.type=="reward"') - li.task.reward-item(ng-repeat='item in itemStore',popover-trigger='mouseenter', popover-placement='top', popover='{{item.key == "armoire" && armoireCount > 0 ? env.t("armoireNotesFull") : item.notes()}}') + li.task.reward-item(ng-repeat='item in itemStore',popover-trigger='mouseenter', popover-placement='top', popover='{{item.key == "armoire" && !user.flags.armoireEmpty ? env.t("armoireNotesFull") + armoireCount(user.items.gear.owned) : item.notes()}}') // right-hand side control buttons .task-meta-controls span.task-notes