diff --git a/website/public/js/controllers/partyCtrl.js b/website/public/js/controllers/partyCtrl.js index ea0f3fa8bd..61b3cb0ac6 100644 --- a/website/public/js/controllers/partyCtrl.js +++ b/website/public/js/controllers/partyCtrl.js @@ -2,6 +2,9 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User','Challenges','$state','$compile','Analytics','Quests','Social', function($rootScope,$scope,Groups,Chat,User,Challenges,$state,$compile,Analytics,Quests,Social) { + + var user = User.user; + $scope.type = 'party'; $scope.text = window.env.t('party'); $scope.group = $rootScope.party = Groups.party(); @@ -11,6 +14,20 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' if ($state.is('options.social.party')) { $scope.group.$syncParty(); // Sync party automatically when navigating to party page + + // Checks if user's party has reached 2 players for the first time. + if(!user.achievements.partyUp + && $scope.group.memberCount >= 2) { + user.achievements.partyUp = true; + $rootScope.openModal('achievements/partyUp', {controller:'UserCtrl', size:'sm'}); + } + + // Checks if user's party has reached 4 players for the first time. + if(!user.achievements.partyOn + && $scope.group.memberCount >= 4) { + user.achievements.partyOn = true; + $rootScope.openModal('achievements/partyOn', {controller:'UserCtrl', size:'sm'}); + } } Chat.seenMessage($scope.group._id); diff --git a/website/src/models/user.js b/website/src/models/user.js index f9ac573179..74068b3ed1 100644 --- a/website/src/models/user.js +++ b/website/src/models/user.js @@ -59,7 +59,9 @@ var UserSchema = new Schema({ greeting: Number, thankyou: Number, costumeContests: Number, - birthday: Number + birthday: Number, + partyUp: Boolean, + partyOn: Boolean }, auth: { blocked: Boolean, @@ -519,7 +521,7 @@ UserSchema.pre('save', function(next) { var mountMasterProgress = shared.count.mountMasterProgress(this.items.mounts); if (mountMasterProgress >= 90 || this.achievements.mountMasterCount > 0) { - this.achievements.mountMaster = true + this.achievements.mountMaster = true; } // Determines if Triad Bingo should be awarded @@ -531,6 +533,18 @@ UserSchema.pre('save', function(next) { this.achievements.triadBingo = true; } + // Determines if Party Up should be awarded + + if (this.party.memberCount >= 2) { + this.achievements.partyUp = true; + } + + // Determines if Party On should be awarded + + if (this.party.memberCount >= 4) { + this.achievements.partyOn = true; + } + // Enable weekly recap emails for old users who sign in if(this.flags.lastWeeklyRecapDiscriminator){ // Enable weekly recap emails in 24 hours diff --git a/website/views/shared/modals/achievements.jade b/website/views/shared/modals/achievements.jade index fdb7c02e1a..6f03746a07 100644 --- a/website/views/shared/modals/achievements.jade +++ b/website/views/shared/modals/achievements.jade @@ -83,7 +83,6 @@ script(id='modals/achievements/beastMaster.html', type='text/ng-template') button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') +achievementFooter - // Mount Master script(id='modals/achievements/mountMaster.html', type='text/ng-template') .modal-content(style='min-width:28em') @@ -132,3 +131,25 @@ script(id='modals/achievements/rebirth.html', type='text/ng-template') br button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') +achievementFooter + +// Party Up +script(id='modals/achievements/partyUp.html', type='text/ng-template') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('partyUp',0) + p=env.t('partyUpAchievement') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter + +// Party On +script(id='modals/achievements/partyOn.html', type='text/ng-template') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('partyOn',0) + p=env.t('partyOnAchievement') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter