mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-05-04 09:53:55 -04:00
Fixed issues with achievements awarding awry. Fixed iPad auto-debug toggle.
This commit is contained in:
parent
2611e441d7
commit
5c77e103f3
3 changed files with 54 additions and 54 deletions
|
@ -68,8 +68,7 @@ module.exports = class WorldMapView extends RootView
|
||||||
for level, index in campaign.levels
|
for level, index in campaign.levels
|
||||||
level.x ?= 10 + 80 * Math.random()
|
level.x ?= 10 + 80 * Math.random()
|
||||||
level.y ?= 10 + 80 * Math.random()
|
level.y ?= 10 + 80 * Math.random()
|
||||||
#level.locked = index > 0 and not me.earnedLevel level.original
|
level.locked = index > 0 and not me.earnedLevel level.original
|
||||||
level.locked = false # Not working yet, but time for sleep.
|
|
||||||
context.levelStatusMap = @levelStatusMap
|
context.levelStatusMap = @levelStatusMap
|
||||||
context.levelPlayCountMap = @levelPlayCountMap
|
context.levelPlayCountMap = @levelPlayCountMap
|
||||||
context.isIPadApp = application.isIPadApp
|
context.isIPadApp = application.isIPadApp
|
||||||
|
|
|
@ -272,7 +272,7 @@ module.exports = class PlayLevelView extends RootView
|
||||||
@insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session
|
@insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session
|
||||||
worldName = utils.i18n @level.attributes, 'name'
|
worldName = utils.i18n @level.attributes, 'name'
|
||||||
@controlBar = @insertSubView new ControlBarView {worldName: worldName, session: @session, level: @level, supermodel: @supermodel}
|
@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: ->
|
initVolume: ->
|
||||||
volume = me.get('volume')
|
volume = me.get('volume')
|
||||||
|
|
|
@ -34,64 +34,65 @@ AchievablePlugin = (schema, options) ->
|
||||||
if category of loadedAchievements
|
if category of loadedAchievements
|
||||||
docObj = doc.toObject()
|
docObj = doc.toObject()
|
||||||
for achievement in loadedAchievements[category]
|
for achievement in loadedAchievements[category]
|
||||||
query = achievement.get('query')
|
do (achievement) ->
|
||||||
isRepeatable = achievement.get('proportionalTo')?
|
query = achievement.get('query')
|
||||||
alreadyAchieved = if isNew then false else LocalMongo.matchesQuery originalDocObj, query
|
isRepeatable = achievement.get('proportionalTo')?
|
||||||
newlyAchieved = LocalMongo.matchesQuery(docObj, query)
|
alreadyAchieved = if isNew then false else LocalMongo.matchesQuery originalDocObj, query
|
||||||
#log.debug 'isRepeatable: ' + isRepeatable
|
newlyAchieved = LocalMongo.matchesQuery(docObj, query)
|
||||||
#log.debug 'alreadyAchieved: ' + alreadyAchieved
|
#log.debug 'isRepeatable: ' + isRepeatable
|
||||||
#log.debug 'newlyAchieved: ' + newlyAchieved
|
#log.debug 'alreadyAchieved: ' + alreadyAchieved
|
||||||
|
#log.debug 'newlyAchieved: ' + newlyAchieved
|
||||||
|
|
||||||
userObjectID = doc.get(achievement.get('userField'))
|
userObjectID = doc.get(achievement.get('userField'))
|
||||||
userID = if _.isObject userObjectID then userObjectID.toHexString() else userObjectID # Standardize! Use strings, not ObjectId's
|
userID = if _.isObject userObjectID then userObjectID.toHexString() else userObjectID # Standardize! Use strings, not ObjectId's
|
||||||
|
|
||||||
if newlyAchieved and (not alreadyAchieved or isRepeatable)
|
if newlyAchieved and (not alreadyAchieved or isRepeatable)
|
||||||
earned =
|
earned =
|
||||||
user: userID
|
user: userID
|
||||||
achievement: achievement._id.toHexString()
|
achievement: achievement._id.toHexString()
|
||||||
achievementName: achievement.get 'name'
|
achievementName: achievement.get 'name'
|
||||||
earnedRewarsd: achievement.get 'rewards'
|
earnedRewarsd: achievement.get 'rewards'
|
||||||
|
|
||||||
worth = achievement.get('worth') ? 10
|
worth = achievement.get('worth') ? 10
|
||||||
earnedPoints = 0
|
earnedPoints = 0
|
||||||
wrapUp = ->
|
wrapUp = ->
|
||||||
# Update user's experience points
|
# Update user's experience points
|
||||||
update = {$inc: {points: earnedPoints}}
|
update = {$inc: {points: earnedPoints}}
|
||||||
for rewardType, rewards of achievement.get('rewards') ? {}
|
for rewardType, rewards of achievement.get('rewards') ? {}
|
||||||
if rewardType is 'gems'
|
if rewardType is 'gems'
|
||||||
update.$inc['earned.gems'] = rewards if rewards
|
update.$inc['earned.gems'] = rewards if rewards
|
||||||
else if rewards.length
|
else if rewards.length
|
||||||
update.$addToSet ?= {}
|
update.$addToSet ?= {}
|
||||||
update.$addToSet["earned.#{rewardType}"] = $each: rewards
|
update.$addToSet["earned.#{rewardType}"] = $each: rewards
|
||||||
User.update {_id: userID}, update, {}, (err, count) ->
|
User.update {_id: userID}, update, {}, (err, count) ->
|
||||||
log.error err if err?
|
log.error err if err?
|
||||||
|
|
||||||
if isRepeatable
|
if isRepeatable
|
||||||
#log.debug 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID
|
#log.debug 'Upserting repeatable achievement called \'' + (achievement.get 'name') + '\' for ' + userID
|
||||||
proportionalTo = achievement.get 'proportionalTo'
|
proportionalTo = achievement.get 'proportionalTo'
|
||||||
originalAmount = if originalDocObj then util.getByPath(originalDocObj, proportionalTo) or 0 else 0
|
originalAmount = if originalDocObj then util.getByPath(originalDocObj, proportionalTo) or 0 else 0
|
||||||
newAmount = docObj[proportionalTo]
|
newAmount = docObj[proportionalTo]
|
||||||
|
|
||||||
if originalAmount isnt newAmount
|
if originalAmount isnt newAmount
|
||||||
expFunction = achievement.getExpFunction()
|
expFunction = achievement.getExpFunction()
|
||||||
earned.notified = false
|
earned.notified = false
|
||||||
earned.achievedAmount = newAmount
|
earned.achievedAmount = newAmount
|
||||||
earned.earnedPoints = (expFunction(newAmount) - expFunction(originalAmount)) * worth
|
earned.earnedPoints = (expFunction(newAmount) - expFunction(originalAmount)) * worth
|
||||||
earned.previouslyAchievedAmount = originalAmount
|
earned.previouslyAchievedAmount = originalAmount
|
||||||
EarnedAchievement.update {achievement: earned.achievement, user: earned.user}, earned, {upsert: true}, (err) ->
|
EarnedAchievement.update {achievement: earned.achievement, user: earned.user}, earned, {upsert: true}, (err) ->
|
||||||
return log.debug err if err?
|
return log.debug err if err?
|
||||||
|
|
||||||
earnedPoints = earned.earnedPoints
|
earnedPoints = earned.earnedPoints
|
||||||
#log.debug earnedPoints
|
#log.debug earnedPoints
|
||||||
wrapUp()
|
wrapUp()
|
||||||
|
|
||||||
else # not alreadyAchieved
|
else # not alreadyAchieved
|
||||||
#log.debug 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID
|
#log.debug 'Creating a new earned achievement called \'' + (achievement.get 'name') + '\' for ' + userID
|
||||||
earned.earnedPoints = worth
|
earned.earnedPoints = worth
|
||||||
(new EarnedAchievement(earned)).save (err, doc) ->
|
(new EarnedAchievement(earned)).save (err, doc) ->
|
||||||
return log.error err if err?
|
return log.error err if err?
|
||||||
earnedPoints = worth
|
earnedPoints = worth
|
||||||
wrapUp()
|
wrapUp()
|
||||||
|
|
||||||
delete before[doc.id] if doc.id of before
|
delete before[doc.id] if doc.id of before
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue