mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Pull in client side changes for quest routes
This commit is contained in:
@@ -39,21 +39,9 @@
|
||||
leave: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/leave'},
|
||||
invite: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/invite'},
|
||||
removeMember: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/removeMember'},
|
||||
questAccept: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questAccept'},
|
||||
questReject: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questReject'},
|
||||
questCancel: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questCancel'},
|
||||
questAbort: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questAbort'},
|
||||
questLeave: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questLeave'}
|
||||
startQuest: {method: "POST", url: ApiUrl.get() + '/api/v2/groups/:gid/questAccept'}
|
||||
});
|
||||
|
||||
function _syncUser() {
|
||||
User.sync();
|
||||
}
|
||||
|
||||
function _logError(err) {
|
||||
console.log(err);
|
||||
}
|
||||
|
||||
function party(cb) {
|
||||
if (!data.party) return (data.party = Group.get({gid: 'party'}, cb));
|
||||
return (cb) ? cb(party) : data.party;
|
||||
@@ -75,36 +63,6 @@
|
||||
return data.tavern;
|
||||
}
|
||||
|
||||
function questAccept(party) {
|
||||
Analytics.updateUser({'partyID':party.id,'partySize':party.memberCount});
|
||||
return party.$questAccept()
|
||||
.then(_syncUser, _logError);
|
||||
}
|
||||
|
||||
function questReject(party) {
|
||||
Analytics.updateUser({'partyID':party.id,'partySize':party.memberCount});
|
||||
return party.$questReject()
|
||||
.then(_syncUser, _logError);
|
||||
}
|
||||
|
||||
function questCancel(party) {
|
||||
Analytics.updateUser({'partyID':party.id,'partySize':party.memberCount});
|
||||
return party.$questCancel()
|
||||
.then(_syncUser, _logError);
|
||||
}
|
||||
|
||||
function questAbort(party) {
|
||||
Analytics.updateUser({'partyID':party.id,'partySize':party.memberCount});
|
||||
return party.$questAbort()
|
||||
.then(_syncUser, _logError);
|
||||
}
|
||||
|
||||
function questLeave(party) {
|
||||
Analytics.updateUser({'partyID':party.id,'partySize':party.memberCount});
|
||||
return party.$questLeave()
|
||||
.then(_syncUser, _logError);
|
||||
}
|
||||
|
||||
function inviteOrStartParty(group) {
|
||||
Analytics.track({'hitType':'event','eventCategory':'button','eventAction':'click','eventLabel':'Invite Friends'});
|
||||
if (group.type === "party" || $location.$$path === "/options/groups/party") {
|
||||
@@ -125,11 +83,6 @@
|
||||
publicGuilds: publicGuilds,
|
||||
myGuilds: myGuilds,
|
||||
tavern: tavern,
|
||||
questAccept: questAccept,
|
||||
questReject: questReject,
|
||||
questAbort: questAbort,
|
||||
questLeave: questLeave,
|
||||
questCancel: questCancel,
|
||||
inviteOrStartParty: inviteOrStartParty,
|
||||
|
||||
data: data,
|
||||
|
||||
@@ -6,14 +6,17 @@
|
||||
.factory('Quests', questsFactory);
|
||||
|
||||
questsFactory.$inject = [
|
||||
'$rootScope',
|
||||
'$http',
|
||||
'$state',
|
||||
'$q',
|
||||
'ApiUrl',
|
||||
'Content',
|
||||
'Groups',
|
||||
'User',
|
||||
'Analytics'
|
||||
];
|
||||
|
||||
function questsFactory($rootScope,Content,Groups,User,Analytics) {
|
||||
function questsFactory($http, $state, $q, ApiUrl, Content, Groups, User, Analytics) {
|
||||
|
||||
var user = User.user;
|
||||
var party = Groups.party();
|
||||
@@ -26,21 +29,39 @@
|
||||
return (quest.previous);
|
||||
}
|
||||
|
||||
function buyQuest(quest) {
|
||||
var item = Content.quests[quest];
|
||||
function _preventQuestModal(quest) {
|
||||
if (!quest) {
|
||||
return 'No quest with that key found';
|
||||
}
|
||||
|
||||
if (item.unlockCondition && item.unlockCondition.condition === 'party invite') {
|
||||
if (!confirm(window.env.t('mustInviteFriend'))) return;
|
||||
return Groups.inviteOrStartParty(party);
|
||||
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 (item.previous && (!User.user.achievements.quests || (User.user.achievements.quests && !User.user.achievements.quests[item.previous]))){
|
||||
return alert(window.env.t('unlockByQuesting', {title: Content.quests[item.previous].text()}));
|
||||
|
||||
if (quest.lvl > user.stats.lvl) {
|
||||
alert(window.env.t('mustLvlQuest', {level: quest.lvl}))
|
||||
return 'mustLvlQuest';
|
||||
}
|
||||
if (item.lvl && item.lvl > user.stats.lvl) {
|
||||
return alert(window.env.t('mustLvlQuest', {level: item.lvl}));
|
||||
}
|
||||
$rootScope.selectedQuest = item;
|
||||
$rootScope.openModal('buyQuest', {controller:'InventoryCtrl'});
|
||||
}
|
||||
|
||||
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');
|
||||
}
|
||||
|
||||
resolve(item);
|
||||
});
|
||||
}
|
||||
|
||||
function questPopover(quest) {
|
||||
@@ -71,37 +92,52 @@
|
||||
}
|
||||
|
||||
function showQuest(quest) {
|
||||
var item = Content.quests[quest];
|
||||
var completedPrevious = !item.previous || (User.user.achievements.quests && User.user.achievements.quests[item.previous]);
|
||||
if (!completedPrevious)
|
||||
return alert(window.env.t('mustComplete', {quest: $rootScope.Content.quests[item.previous].text()}));
|
||||
if (item.lvl && item.lvl > user.stats.lvl)
|
||||
return alert(window.env.t('mustLevel', {level: item.lvl}));
|
||||
$rootScope.selectedQuest = item;
|
||||
$rootScope.openModal('showQuest', {controller:'InventoryCtrl'});
|
||||
}
|
||||
return $q(function(resolve, reject) {
|
||||
var item = Content.quests[quest];
|
||||
|
||||
function closeQuest(){
|
||||
$rootScope.selectedQuest = undefined;
|
||||
}
|
||||
var preventQuestModal = _preventQuestModal(item);
|
||||
if (preventQuestModal) {
|
||||
return reject(preventQuestModal);
|
||||
}
|
||||
|
||||
function questInit(){
|
||||
Analytics.track({'hitType':'event','eventCategory':'behavior','eventAction':'quest','owner':true,'response':'accept','questName':$rootScope.selectedQuest.key});
|
||||
Analytics.updateUser({'partyID':party._id,'partySize':party.memberCount});
|
||||
party.$questAccept({key:$rootScope.selectedQuest.key}, function(){
|
||||
party.$get();
|
||||
$rootScope.$state.go('options.social.party');
|
||||
resolve(item);
|
||||
});
|
||||
}
|
||||
|
||||
function initQuest(key) {
|
||||
return $q(function(resolve, reject) {
|
||||
Analytics.track({'hitType':'event','eventCategory':'behavior','eventAction':'quest','owner':true,'response':'accept','questName': key});
|
||||
Analytics.updateUser({'partyID':party._id,'partySize':party.memberCount});
|
||||
party.$startQuest({key:key}, function(){
|
||||
party.$syncParty();
|
||||
$state.go('options.social.party');
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function sendAction(action) {
|
||||
return $q(function(resolve, reject) {
|
||||
|
||||
$http.post(ApiUrl.get() + '/api/v2/groups/' + party._id + '/' + action)
|
||||
.then(function(response) {
|
||||
Analytics.updateUser({
|
||||
partyID: party._id,
|
||||
partySize: party.memberCount
|
||||
});
|
||||
var quest = response.data.quest;
|
||||
resolve(quest);
|
||||
});;
|
||||
});
|
||||
closeQuest();
|
||||
}
|
||||
|
||||
return {
|
||||
lockQuest: lockQuest,
|
||||
buyQuest: buyQuest,
|
||||
questPopover: questPopover,
|
||||
sendAction: sendAction,
|
||||
showQuest: showQuest,
|
||||
closeQuest: closeQuest,
|
||||
questInit: questInit
|
||||
initQuest: initQuest
|
||||
}
|
||||
}
|
||||
}());
|
||||
|
||||
Reference in New Issue
Block a user