mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
more quest logic
This commit is contained in:
@@ -98,7 +98,10 @@ const quests = {
|
|||||||
notes: t('questAtom2Notes'),
|
notes: t('questAtom2Notes'),
|
||||||
completion: t('questAtom2Completion'),
|
completion: t('questAtom2Completion'),
|
||||||
group: 'questGroupAtom',
|
group: 'questGroupAtom',
|
||||||
previous1: 'atom1',
|
previous: 'atom1',
|
||||||
|
prereqQuests: [
|
||||||
|
'atom1',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 15,
|
lvl: 15,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
@@ -124,8 +127,11 @@ const quests = {
|
|||||||
text: t('questAtom3Text'),
|
text: t('questAtom3Text'),
|
||||||
notes: t('questAtom3Notes'),
|
notes: t('questAtom3Notes'),
|
||||||
group: 'questGroupAtom',
|
group: 'questGroupAtom',
|
||||||
previous1: 'atom1',
|
previous: 'atom1',
|
||||||
previous2: 'atom2',
|
prereqQuests: [
|
||||||
|
'atom1',
|
||||||
|
'atom2',
|
||||||
|
],
|
||||||
completion: t('questAtom3Completion'),
|
completion: t('questAtom3Completion'),
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 15,
|
lvl: 15,
|
||||||
@@ -188,7 +194,10 @@ const quests = {
|
|||||||
completion: t('questGoldenknight2Completion'),
|
completion: t('questGoldenknight2Completion'),
|
||||||
group: 'questGroupGoldenknight',
|
group: 'questGroupGoldenknight',
|
||||||
value: 4,
|
value: 4,
|
||||||
previous1: 'goldenknight1',
|
previous: 'goldenknight1',
|
||||||
|
prereqQuests: [
|
||||||
|
'goldenknight1',
|
||||||
|
],
|
||||||
lvl: 40,
|
lvl: 40,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
boss: {
|
boss: {
|
||||||
@@ -214,8 +223,11 @@ const quests = {
|
|||||||
notes: t('questGoldenknight3Notes'),
|
notes: t('questGoldenknight3Notes'),
|
||||||
group: 'questGroupGoldenknight',
|
group: 'questGroupGoldenknight',
|
||||||
completion: t('questGoldenknight3Completion'),
|
completion: t('questGoldenknight3Completion'),
|
||||||
previous1: 'goldenknight1',
|
previous: 'goldenknight2',
|
||||||
previous2: 'goldenknight2',
|
prereqQuests: [
|
||||||
|
'goldenknight1',
|
||||||
|
'goldenknight2',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 40,
|
lvl: 40,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
@@ -291,7 +303,10 @@ const quests = {
|
|||||||
notes: t('questMoon2Notes'),
|
notes: t('questMoon2Notes'),
|
||||||
group: 'questGroupMoon',
|
group: 'questGroupMoon',
|
||||||
completion: t('questMoon2Completion'),
|
completion: t('questMoon2Completion'),
|
||||||
previous1: 'moon1',
|
previous: 'moon1',
|
||||||
|
prereqQuests: [
|
||||||
|
'moon1',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
unlockCondition: {
|
unlockCondition: {
|
||||||
@@ -321,8 +336,11 @@ const quests = {
|
|||||||
notes: t('questMoon3Notes'),
|
notes: t('questMoon3Notes'),
|
||||||
group: 'questGroupMoon',
|
group: 'questGroupMoon',
|
||||||
completion: t('questMoon3Completion'),
|
completion: t('questMoon3Completion'),
|
||||||
previous1: 'moon1',
|
previous1: 'moon2',
|
||||||
previous2: 'moon2',
|
prereqQuests: [
|
||||||
|
'moon1',
|
||||||
|
'moon2',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
unlockCondition: {
|
unlockCondition: {
|
||||||
@@ -381,7 +399,10 @@ const quests = {
|
|||||||
group: 'questGroupMoonstone',
|
group: 'questGroupMoonstone',
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 60,
|
lvl: 60,
|
||||||
previous1: 'moonstone1',
|
previous: 'moonstone1',
|
||||||
|
prereqQuests: [
|
||||||
|
'moonstone1',
|
||||||
|
],
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
boss: {
|
boss: {
|
||||||
name: t('questMoonstone2Boss'),
|
name: t('questMoonstone2Boss'),
|
||||||
@@ -406,8 +427,11 @@ const quests = {
|
|||||||
notes: t('questMoonstone3Notes'),
|
notes: t('questMoonstone3Notes'),
|
||||||
group: 'questGroupMoonstone',
|
group: 'questGroupMoonstone',
|
||||||
completion: t('questMoonstone3Completion'),
|
completion: t('questMoonstone3Completion'),
|
||||||
previous1: 'moonstone1',
|
previous: 'moonstone2',
|
||||||
previous2: 'moonstone2',
|
prereqQuests: [
|
||||||
|
'moonstone1',
|
||||||
|
'moonstone2',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 60,
|
lvl: 60,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
@@ -494,7 +518,10 @@ const quests = {
|
|||||||
value: 4,
|
value: 4,
|
||||||
lvl: 30,
|
lvl: 30,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
previous1: 'vice1',
|
previous: 'vice1',
|
||||||
|
prereqQuests: [
|
||||||
|
'vice1',
|
||||||
|
],
|
||||||
collect: {
|
collect: {
|
||||||
lightCrystal: {
|
lightCrystal: {
|
||||||
text: t('questVice2CollectLightCrystal'),
|
text: t('questVice2CollectLightCrystal'),
|
||||||
@@ -519,8 +546,11 @@ const quests = {
|
|||||||
notes: t('questVice3Notes'),
|
notes: t('questVice3Notes'),
|
||||||
group: 'questGroupVice',
|
group: 'questGroupVice',
|
||||||
completion: t('questVice3Completion'),
|
completion: t('questVice3Completion'),
|
||||||
previous1: 'vice1',
|
previous: 'vice2',
|
||||||
previous2: 'vice2',
|
prereqQuests: [
|
||||||
|
'vice1',
|
||||||
|
'vice2',
|
||||||
|
],
|
||||||
value: 4,
|
value: 4,
|
||||||
lvl: 30,
|
lvl: 30,
|
||||||
category: 'unlockable',
|
category: 'unlockable',
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import _mapValues from 'lodash/mapValues';
|
import _mapValues from 'lodash/mapValues';
|
||||||
|
import intersection from 'lodash/intersection'; // there's probably other ways to do this, but, quick way to hit what I'm thinking of
|
||||||
|
import keys from 'lodash/keys';
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
import content from '../content/index';
|
import content from '../content/index';
|
||||||
import { BadRequest } from './errors';
|
import { BadRequest } from './errors';
|
||||||
@@ -17,7 +19,9 @@ function userAbleToStartMasterclasser (user) {
|
|||||||
|
|
||||||
function lockQuest (quest, user) {
|
function lockQuest (quest, user) {
|
||||||
// masterclasser requirement
|
// masterclasser requirement
|
||||||
if (quest.key === 'lostMasterclasser1') return !userAbleToStartMasterclasser(user);
|
if (quest.key === 'lostMasterclasser1') {
|
||||||
|
return !userAbleToStartMasterclasser(user);
|
||||||
|
}
|
||||||
if (quest.key === 'lostMasterclasser2'
|
if (quest.key === 'lostMasterclasser2'
|
||||||
|| quest.key === 'lostMasterclasser3'
|
|| quest.key === 'lostMasterclasser3'
|
||||||
|| quest.key === 'lostMasterclasser4') {
|
|| quest.key === 'lostMasterclasser4') {
|
||||||
@@ -40,27 +44,32 @@ function lockQuest (quest, user) {
|
|||||||
return user.loginIncentives < quest.unlockCondition.incentiveThreshold;
|
return user.loginIncentives < quest.unlockCondition.incentiveThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks to make sure 1st quest completed (previous1)
|
// checks to make sure previous quest in chain is completed
|
||||||
if (user.achievements.quests) {
|
if (user.achievements.quests) {
|
||||||
return quest.previous1
|
return quest.previous
|
||||||
&& !user.achievements.quests[quest.previous1];
|
&& !user.achievements.quests[quest.previous];
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks to make sure 1st and 2nd quests completed (previous1 and previous2)
|
// TEST THIS ON MONDAYYYY
|
||||||
if (user.achievements.quests) {
|
if (quest.lvl && user.stats.lvl < quest.lvl) return true;
|
||||||
return quest.previous1
|
if (quest.unlockCondition
|
||||||
&& !user.achievements.quests[quest.previous1]
|
&& quest.unlockCondition.incentiveThreshold
|
||||||
&& !user.achievements.quests[quest.previous2];
|
&& user.loginIncentives < quest.unlockCondition.incentiveThreshold) return true;
|
||||||
|
if (quest.prereqQuests) {
|
||||||
|
if (!user.achievements.quests) return true;
|
||||||
|
const achievedQuestKeys = keys(user.achievements.quests);
|
||||||
|
if (intersection(quest.prereqQuests, achievedQuestKeys) !== quest.prereqQuests) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks to make sure 1st, 2nd, & 3rd quests completed (previous1, previous2, previous3)
|
// OR THIS
|
||||||
if (user.achievements.quests) {
|
// if (intersection(quest.prereqQuests, keys(user.quest.achievements)) !== quest.prereqQuests) {
|
||||||
return quest.previous1
|
// return true;
|
||||||
&& !user.achievements.quests[quest.previous1]
|
// }
|
||||||
&& !user.achievements.quests[quest.previous2]
|
|
||||||
&& !user.achievements.quests[quest.previous3];
|
// then if we've passed all the checks, at the end
|
||||||
}
|
return false;
|
||||||
return quest.previous1;
|
|
||||||
|
// return quest.previous; //what was at the end of the function before
|
||||||
}
|
}
|
||||||
|
|
||||||
function isItemSuggested (officialPinnedItems, itemInfo) {
|
function isItemSuggested (officialPinnedItems, itemInfo) {
|
||||||
|
|||||||
Reference in New Issue
Block a user