diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index f82781ac57..02572e7f7f 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -77,6 +77,18 @@ habitrpg.controller("InventoryCtrl", return _.pick(inventory, function(v,k){return v>0;}); } + $scope.calcTriadBingo = function() { + var hasPets = Shared.countPets(null, User.user.items.pets) >= 90 ; + var hasMounts = Shared.countMounts(null, User.user.items.mounts) >= 90; + + if(!(hasPets && hasMounts)) return false; + + for (var p in User.user.items.pets) { + if(User.user.items.pets[p] < 0) return false; + } + return true; + } + $scope.hatch = function(egg, potion){ var eggName = Content.eggs[egg.key].text(); var potName = Content.hatchingPotions[potion.key].text(); @@ -91,6 +103,13 @@ habitrpg.controller("InventoryCtrl", User.user.achievements.beastMaster = true; $rootScope.openModal('achievements/beastMaster'); } + + // Checks if Triad Bingo has been reached for the first time + if(!User.user.achievements.triadBingo + && $scope.calcTriadBingo()) { + User.user.achievements.triadBingo = true; + $rootScope.openModal('achievements/triadBingo'); + } } $scope.purchase = function(type, item){ diff --git a/src/models/user.js b/src/models/user.js index 91d1740ed8..d136e31e6f 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -38,6 +38,8 @@ var UserSchema = new Schema({ beastMasterCount: Number, mountMaster: Boolean, mountMasterCount: Number, + triadBingo: Boolean, + triadBingoCount: Number, veteran: Boolean, snowball: Number, spookDust: Number, @@ -450,6 +452,18 @@ UserSchema.pre('save', function(next) { this.achievements.mountMaster = true } + // Determines if Triad Bingo should be awarded + + var giveTriadBingo = function(pets) { + for(var p in pets) { + if(pets[p] == -1) return false; + } + return true; + }; + + if ((mountCount >= 90 && giveTriadBingo(this.items.pets)) || this.achievements.triadBingoCount > 0) { + this.achievements.triadBingo = true; + } // EXAMPLE CODE for allowing all existing and new players to be // automatically granted an item during a certain time period: diff --git a/views/shared/modals/achievements.jade b/views/shared/modals/achievements.jade index a8857f9110..9d1decd66c 100644 --- a/views/shared/modals/achievements.jade +++ b/views/shared/modals/achievements.jade @@ -41,6 +41,17 @@ script(id='modals/achievements/mountMaster.html', type='text/ng-template') .modal-footer button.btn.btn-default(ng-click='$close()')=env.t('ok') +// Triad Bingo +script(id='modals/achievements/triadBingo.html', type='text/ng-template') + .modal-header + h4=env.t('modalAchievement') + .modal-body + p + .achievement.achievement-triadbingo + =env.t('triadBingoAchievement') + .modal-footer + button.btn.btn-default(ng-click='$close()')=env.t('ok') + // Contributor // activated by user.flags.contributor script(id='modals/achievements/contributor.html', type='text/ng-template') diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 5e7f901fc9..af414f15b5 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -96,6 +96,15 @@ div(ng-if='profile.achievements.mountMaster || user._id == profile._id') =env.t('mountMasterText2', {count: "{{profile.achievements.mountMasterCount}}"}) hr +div(ng-if='profile.achievements.triadBingo || user._id == profile._id') + .achievement.achievement-triadbingo(ng-show='profile.achievements.triadBingo') + div(ng-class='{muted: !profile.achievements.triadBingo}') + h5=env.t('triadBingoName') + small=env.t('triadBingoText') + small(ng-if='profile.achievements.triadBingoCount') + =env.t('triadBingoText2', {count: "{{profile.achievements.triadBingoCount}}"}) + hr + div(ng-if='profile.achievements.rebirths') .achievement.achievement-sun h5(ng-if='profile.achievements.rebirths == 1')=env.t('rebirthBegan')