Files
habitica/website/client-old/js/services/questServices.js
Sabe Jones 25b0ff38c4 Login Incentives (#8230)
* feat(incentives): login bennies WIP

* feat(content): incentive prize content WIP

* fix(content): placeholders pass tests

* WIP(content): Bard instrument placeholder

* feat(content): Incentives build

* chore(sprites): compile
and fix some strings

* WIP(incentives): quests and backgrounds

* fix(quests): correct buy/launch handling

* [WIP] Incentives rewarding (#8226)

* Added login incentive rewards

* Updated incentive rewards

* Added incentive modal and updated notification structure

* Added analytics to sleeping

* Added login incentives to user analytics

* Fixed unit tests and ensured that prizes are incremented and not replaced

* Updated style of daily login incentive modal

* Added rewards modal

* Added translations

* Added loigin incentive ui elements to profile

* Updated login incentives structure and abstracted to common.content

* Added dynamic display for login incentives on profile

* Added purple potion image

* Updated daily login modal

* Fixed progress calculation

* Added bard gear

* Updated login incentive rewards

* Fixed styles and text

* Added multiple read for notifications

* Fixed lint issues

* Fixed styles and added 50 limit

* Updated quest keys

* Added login incentives reward page

* Fixed tests

* Fixed linting and tests

* Read named notifications route. Add image for backgrounds

* Fixed style issues and added tranlsations to login incentive notification

* Hided abiltiy to purchase incentive backgrounds and added message to detail how to unlock

* Updated awarded message

* Fixed text and updated progress counter to display better

* Fixed purple potion reward text

* Fixed check in backgrouns reward text

* fix(quest): pass tests

* Added display of multiple rewards

* Updated modal styles

* Fixed neagtive 50 issue

* Remvoed total count from daily login incentives modal

* Fixed magic paw display

* fix(awards): give bunnies again

* WIP(incentives): more progress on BG shop

* fix(incentives): actually award backgrounds

* fix(incentives): more BG fixy

* fix(backgrounds): don't gem-buy checkin bgs

* Added dust bunny notification

* fix(incentives): don't redisplay bunny award

* chore(news): Bailey
and different promo sprite
2016-11-23 19:34:09 -06:00

157 lines
4.9 KiB
JavaScript

'use strict';
angular.module('habitrpg')
.factory('Quests', ['$http', '$state','$q', 'ApiUrl', 'Content', 'Groups', 'User', 'Analytics',
function questsFactory($http, $state, $q, ApiUrl, Content, Groups, User, Analytics) {
var user = User.user;
var party;
Groups.party()
.then(function (partyFound) {
party = partyFound;
});
function lockQuest(quest,ignoreLevel) {
if (!ignoreLevel){
if (quest.lvl && user.stats.lvl < quest.lvl) return true;
}
if (user.achievements.quests) return (quest.previous && !user.achievements.quests[quest.previous]);
return quest.locked;
}
function _preventQuestModal(quest) {
if (!quest) {
return 'No quest with that key found';
}
if (quest.previous && (!user.achievements.quests || (user.achievements.quests && !user.achievements.quests[quest.previous]))){
alert(window.env.t('unlockByQuesting', {title: Content.quests[quest.previous].text()}));
return 'unlockByQuesting';
}
if (quest.lvl > user.stats.lvl) {
alert(window.env.t('mustLvlQuest', {level: quest.lvl}))
return 'mustLvlQuest';
}
if (quest.unlockCondition && quest.unlockCondition.condition === 'create account') {
}
}
function buyQuest(quest) {
return $q(function(resolve, reject) {
var item = Content.quests[quest];
var preventQuestModal = _preventQuestModal(item);
if (preventQuestModal) {
return reject(preventQuestModal);
}
if (item.unlockCondition && item.unlockCondition.condition === 'party invite') {
if (!confirm(window.env.t('mustInviteFriend'))) return reject('Did not want to invite friends');
Groups.inviteOrStartParty(party)
return reject('Invite or start party');
}
if (item.unlockCondition && item.unlockCondition.condition === 'create account') {
alert(window.env.t('createAccountQuest'));
return reject('Awarded to new accounts');
}
if (item.unlockCondition && item.unlockCondition.condition === 'login incentive') {
if (user.loginIncentives > item.unlockCondition.incentiveThreshold) {
alert(window.env.t('loginIncentiveQuestObtained', {count: item.unlockCondition.incentiveThreshold}));
} else {
alert(window.env.t('loginIncentiveQuest', {count: item.unlockCondition.incentiveThreshold}));
}
return reject('Login incentive item');
}
resolve(item);
});
}
function questPopover(quest) {
// The popover gets parsed as markdown (hence the double \n for line breaks
var text = '';
if(quest.boss) {
text += '**' + window.env.t('bossHP') + ':** ' + quest.boss.hp + '\n\n';
text += '**' + window.env.t('bossStrength') + ':** ' + quest.boss.str + '\n\n';
} else if(quest.collect) {
var count = 0;
for (var key in quest.collect) {
text += '**' + window.env.t('collect') + ':** ' + quest.collect[key].count + ' ' + quest.collect[key].text() + '\n\n';
}
}
text += '---\n\n';
text += '**' + window.env.t('rewards') + ':**\n\n';
if(quest.drop.items) {
for (var item in quest.drop.items) {
text += quest.drop.items[item].text() + '\n\n';
}
}
if(quest.drop.exp)
text += quest.drop.exp + ' ' + window.env.t('experience') + '\n\n';
if(quest.drop.gp)
text += quest.drop.gp + ' ' + window.env.t('gold') + '\n\n';
return text;
}
function showQuest(quest) {
return $q(function(resolve, reject) {
var item = Content.quests[quest];
var preventQuestModal = _preventQuestModal(item);
if (preventQuestModal) {
return reject(preventQuestModal);
}
resolve(item);
});
}
function initQuest(key) {
return $q(function(resolve, reject) {
Analytics.updateUser({'partyID': party._id, 'partySize': party.memberCount});
Groups.Group.inviteToQuest(party._id, key)
.then(function(response) {
party.quest = response.data.data;
Groups.data.party = party;
$state.go('options.social.party');
resolve();
});
});
}
function sendAction(action) {
return $q(function(resolve, reject) {
$http.post(ApiUrl.get() + '/api/v3/groups/' + party._id + '/' + action)
.then(function(response) {
User.sync();
Analytics.updateUser({
partyID: party._id,
partySize: party.memberCount
});
var quest = response.data.quest;
if (!quest) quest = response.data.data;
resolve(quest);
});;
});
}
return {
lockQuest: lockQuest,
buyQuest: buyQuest,
questPopover: questPopover,
sendAction: sendAction,
showQuest: showQuest,
initQuest: initQuest
}
}]);