diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index 703b1eb8b..99511e68c 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -68,8 +68,7 @@ module.exports = class WorldMapView extends RootView for level, index in campaign.levels level.x ?= 10 + 80 * Math.random() level.y ?= 10 + 80 * Math.random() - #level.locked = index > 0 and not me.earnedLevel level.original - level.locked = false # Not working yet, but time for sleep. + level.locked = index > 0 and not me.earnedLevel level.original context.levelStatusMap = @levelStatusMap context.levelPlayCountMap = @levelPlayCountMap context.isIPadApp = application.isIPadApp diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index 003f374fe..fb1796dc2 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -272,7 +272,7 @@ module.exports = class PlayLevelView extends RootView @insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session worldName = utils.i18n @level.attributes, 'name' @controlBar = @insertSubView new ControlBarView {worldName: worldName, session: @session, level: @level, supermodel: @supermodel} - Backbone.Mediator.publish('level:set-debug', debug: true) if @isIPadApp() # if me.displayName() is 'Nick' + _.delay (=> Backbone.Mediator.publish('level:set-debug', debug: true)), 5000 if @isIPadApp() # if me.displayName() is 'Nick' initVolume: -> volume = me.get('volume') diff --git a/server/plugins/achievements.coffee b/server/plugins/achievements.coffee index c0dacf96f..b252981e4 100644 --- a/server/plugins/achievements.coffee +++ b/server/plugins/achievements.coffee @@ -34,64 +34,65 @@ AchievablePlugin = (schema, options) -> if category of loadedAchievements docObj = doc.toObject() for achievement in loadedAchievements[category] - query = achievement.get('query') - isRepeatable = achievement.get('proportionalTo')? - alreadyAchieved = if isNew then false else LocalMongo.matchesQuery originalDocObj, query - newlyAchieved = LocalMongo.matchesQuery(docObj, query) - #log.debug 'isRepeatable: ' + isRepeatable - #log.debug 'alreadyAchieved: ' + alreadyAchieved - #log.debug 'newlyAchieved: ' + newlyAchieved + do (achievement) -> + query = achievement.get('query') + isRepeatable = achievement.get('proportionalTo')? + alreadyAchieved = if isNew then false else LocalMongo.matchesQuery originalDocObj, query + newlyAchieved = LocalMongo.matchesQuery(docObj, query) + #log.debug 'isRepeatable: ' + isRepeatable + #log.debug 'alreadyAchieved: ' + alreadyAchieved + #log.debug 'newlyAchieved: ' + newlyAchieved - userObjectID = doc.get(achievement.get('userField')) - userID = if _.isObject userObjectID then userObjectID.toHexString() else userObjectID # Standardize! Use strings, not ObjectId's + userObjectID = doc.get(achievement.get('userField')) + userID = if _.isObject userObjectID then userObjectID.toHexString() else userObjectID # Standardize! Use strings, not ObjectId's - if newlyAchieved and (not alreadyAchieved or isRepeatable) - earned = - user: userID - achievement: achievement._id.toHexString() - achievementName: achievement.get 'name' - earnedRewarsd: achievement.get 'rewards' + if newlyAchieved and (not alreadyAchieved or isRepeatable) + earned = + user: userID + achievement: achievement._id.toHexString() + achievementName: achievement.get 'name' + earnedRewarsd: achievement.get 'rewards' - worth = achievement.get('worth') ? 10 - earnedPoints = 0 - wrapUp = -> - # Update user's experience points - update = {$inc: {points: earnedPoints}} - for rewardType, rewards of achievement.get('rewards') ? {} - if rewardType is 'gems' - update.$inc['earned.gems'] = rewards if rewards - else if rewards.length - update.$addToSet ?= {} - update.$addToSet["earned.#{rewardType}"] = $each: rewards - User.update {_id: userID}, update, {}, (err, count) -> - log.error err if err? + worth = achievement.get('worth') ? 10 + earnedPoints = 0 + wrapUp = -> + # Update user's experience points + update = {$inc: {points: earnedPoints}} + for rewardType, rewards of achievement.get('rewards') ? {} + if rewardType is 'gems' + update.$inc['earned.gems'] = rewards if rewards + else if rewards.length + update.$addToSet ?= {} + update.$addToSet["earned.#{rewardType}"] = $each: rewards + User.update {_id: userID}, update, {}, (err, count) -> + log.error err if err? - if isRepeatable - #log.debug 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID - proportionalTo = achievement.get 'proportionalTo' - originalAmount = if originalDocObj then util.getByPath(originalDocObj, proportionalTo) or 0 else 0 - newAmount = docObj[proportionalTo] + if isRepeatable + #log.debug 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID + proportionalTo = achievement.get 'proportionalTo' + originalAmount = if originalDocObj then util.getByPath(originalDocObj, proportionalTo) or 0 else 0 + newAmount = docObj[proportionalTo] - if originalAmount isnt newAmount - expFunction = achievement.getExpFunction() - earned.notified = false - earned.achievedAmount = newAmount - earned.earnedPoints = (expFunction(newAmount) - expFunction(originalAmount)) * worth - earned.previouslyAchievedAmount = originalAmount - EarnedAchievement.update {achievement: earned.achievement, user: earned.user}, earned, {upsert: true}, (err) -> - return log.debug err if err? + if originalAmount isnt newAmount + expFunction = achievement.getExpFunction() + earned.notified = false + earned.achievedAmount = newAmount + earned.earnedPoints = (expFunction(newAmount) - expFunction(originalAmount)) * worth + earned.previouslyAchievedAmount = originalAmount + EarnedAchievement.update {achievement: earned.achievement, user: earned.user}, earned, {upsert: true}, (err) -> + return log.debug err if err? - earnedPoints = earned.earnedPoints - #log.debug earnedPoints - wrapUp() + earnedPoints = earned.earnedPoints + #log.debug earnedPoints + wrapUp() - else # not alreadyAchieved - #log.debug 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID - earned.earnedPoints = worth - (new EarnedAchievement(earned)).save (err, doc) -> - return log.error err if err? - earnedPoints = worth - wrapUp() + else # not alreadyAchieved + #log.debug 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID + earned.earnedPoints = worth + (new EarnedAchievement(earned)).save (err, doc) -> + return log.error err if err? + earnedPoints = worth + wrapUp() delete before[doc.id] if doc.id of before