diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 601878898..5443f00f6 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -606,6 +606,7 @@ me_tab: "Me" picture_tab: "Picture" upload_picture: "Upload a picture" + god_mode: "God Mode" password_tab: "Password" emails_tab: "Emails" admin: "Admin" diff --git a/app/models/User.coffee b/app/models/User.coffee index be8243069..2d82c159c 100644 --- a/app/models/User.coffee +++ b/app/models/User.coffee @@ -12,6 +12,7 @@ module.exports = class User extends CocoModel notyErrors: false isAdmin: -> 'admin' in @get('permissions', true) + isInGodMode: -> 'godmode' in @get('permissions', true) isAnonymous: -> @get('anonymous', true) displayName: -> @get('name', true) @@ -72,13 +73,16 @@ module.exports = class User extends CocoModel return level if tierThreshold >= tier level: -> - User.levelFromExp(@get('points')) + totalPoint = @get('points') + totalPoint = totalPoint + 1000000 if me.isInGodMode() + User.levelFromExp(totalPoint) tier: -> User.tierFromLevel @level() gems: -> gemsEarned = @get('earned')?.gems ? 0 + gemsEarned = gemsEarned + 100000 if me.isInGodMode() gemsPurchased = @get('purchased')?.gems ? 0 gemsSpent = @get('spent') ? 0 Math.floor gemsEarned + gemsPurchased - gemsSpent @@ -89,7 +93,7 @@ module.exports = class User extends CocoModel heroes items: -> (me.get('earned')?.items ? []).concat(me.get('purchased')?.items ? []).concat([ThangType.items['simple-boots']]) levels: -> (me.get('earned')?.levels ? []).concat(me.get('purchased')?.levels ? []).concat(Level.levels['dungeons-of-kithgard']) - ownsHero: (heroOriginal) -> heroOriginal in @heroes() + ownsHero: (heroOriginal) -> me.isInGodMode() || heroOriginal in @heroes() ownsItem: (itemOriginal) -> itemOriginal in @items() ownsLevel: (levelOriginal) -> levelOriginal in @levels() @@ -166,6 +170,7 @@ module.exports = class User extends CocoModel return me.get('testGroupNumber') % numVideos isPremium: -> + return true if me.isInGodMode() return false unless stripe = @get('stripe') return true if stripe.subscriptionID return true if stripe.free is true diff --git a/app/templates/account/account-settings-view.jade b/app/templates/account/account-settings-view.jade index 00db82515..c53405651 100644 --- a/app/templates/account/account-settings-view.jade +++ b/app/templates/account/account-settings-view.jade @@ -12,6 +12,7 @@ else - var name = me.get('name') || ''; - var email = me.get('email'); - var admin = me.get('permissions', true).indexOf('admin') != -1; + - var godmode = me.get('permissions', true).indexOf('godmode') != -1; .form-group label.control-label(for="name", data-i18n="general.name") Name input#name.form-control(name="name", type="text", value="#{name}") @@ -22,7 +23,10 @@ else .form-group.checkbox label(for="admin", data-i18n="account_settings.admin") Admin input#admin(name="admin", type="checkbox", checked=admin) - + .form-group.checkbox + label(for="godmode", data-i18n="account_settings.god_mode") God Mode + input#godmode(name="godmode", type="checkbox", checked=godmode) + .panel.panel-default .panel-heading diff --git a/app/templates/play/campaign-view.jade b/app/templates/play/campaign-view.jade index dd1688bef..2ed824e18 100644 --- a/app/templates/play/campaign-view.jade +++ b/app/templates/play/campaign-view.jade @@ -56,7 +56,8 @@ else .portals for campaignSlug in ['dungeon', 'forest', 'desert', 'mountain', 'ice', 'volcano'] - var campaign = campaigns[campaignSlug]; - div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked ? " locked" : ""), data-campaign-slug=campaignSlug) + - var godmode = me.get('permissions', true).indexOf('godmode') != -1; + div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked && !godmode ? " locked" : ""), data-campaign-slug=campaignSlug) .campaign-label h2.campaign-name if campaign @@ -68,7 +69,7 @@ else span= campaign.levelsCompleted | / span= campaign.levelsTotal - if campaign && campaign.locked + if campaign && campaign.locked && !godmode h3.campaign-locked(data-i18n="play.locked") Locked else if campaign btn(data-i18n="common.play").btn.btn-illustrated.btn-lg.btn-success.play-button diff --git a/app/views/account/AccountSettingsView.coffee b/app/views/account/AccountSettingsView.coffee index b24dcac2d..48d913813 100644 --- a/app/views/account/AccountSettingsView.coffee +++ b/app/views/account/AccountSettingsView.coffee @@ -158,8 +158,15 @@ module.exports = class AccountSettingsView extends CocoView me.set('photoURL', @$el.find('#photoURL').val()) + permissions = [] + adminCheckbox = @$el.find('#admin') if adminCheckbox.length - permissions = [] permissions.push 'admin' if adminCheckbox.prop('checked') - me.set('permissions', permissions) + + godmodeCheckbox = @$el.find('#godmode') + if godmodeCheckbox.length + permissions.push 'godmode' if godmodeCheckbox.prop('checked') + + me.set('permissions', permissions) + diff --git a/app/views/play/CampaignView.coffee b/app/views/play/CampaignView.coffee index 22dcdc05d..aa2dd4c9b 100644 --- a/app/views/play/CampaignView.coffee +++ b/app/views/play/CampaignView.coffee @@ -252,7 +252,9 @@ module.exports = class CampaignView extends RootView level.locked = false if @levelStatusMap[level.slug] in ['started', 'complete'] level.locked = false if @editorMode level.locked = false if @campaign?.get('name') is 'Auditions' + level.locked = false if me.isInGodMode() level.disabled = true if level.adminOnly and @levelStatusMap[level.slug] not in ['started', 'complete'] + level.disabled = false if me.isInGodMode() level.color = 'rgb(255, 80, 60)' if level.requiresSubscription level.color = 'rgb(80, 130, 200)' diff --git a/server/users/User.coffee b/server/users/User.coffee index 65ead42e4..81c11a18b 100644 --- a/server/users/User.coffee +++ b/server/users/User.coffee @@ -34,6 +34,10 @@ UserSchema.post('init', -> @set('anonymous', false) if @get('email') ) +UserSchema.methods.isInGodMode = -> + p = @get('permissions') + return p and 'godmode' in p + UserSchema.methods.isAdmin = -> p = @get('permissions') return p and 'admin' in p @@ -77,6 +81,7 @@ UserSchema.methods.setEmailSubscription = (newName, enabled) -> UserSchema.methods.gems = -> gemsEarned = @get('earned')?.gems ? 0 + gemsEarned = gemsEarned + 100000 if @isInGodMode() gemsPurchased = @get('purchased')?.gems ? 0 gemsSpent = @get('spent') ? 0 gemsEarned + gemsPurchased - gemsSpent @@ -194,6 +199,7 @@ UserSchema.methods.register = (done) -> @saveActiveUser 'register' UserSchema.methods.isPremium = -> + return true if @isInGodMode() return false unless stripeObject = @get('stripe') return true if stripeObject.subscriptionID return true if stripeObject.free is true