mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Split quests into separate files
This commit is contained in:
@@ -654,7 +654,7 @@ quests = require('../../dist/scripts/content/quests/index')
|
|||||||
|
|
||||||
api.userCanOwnQuestCategories = quests.canOwnCategories
|
api.userCanOwnQuestCategories = quests.canOwnCategories
|
||||||
|
|
||||||
api.quests = quests.scrolls
|
api.quests = quests.allQuests
|
||||||
|
|
||||||
api.questsByLevel = quests.byLevel
|
api.questsByLevel = quests.byLevel
|
||||||
|
|
||||||
|
|||||||
128
common/script/src/content/quests/gold-purchasable.js
Normal file
128
common/script/src/content/quests/gold-purchasable.js
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
import {each, defaults, assign} from 'lodash';
|
||||||
|
import capitalize from 'lodash.capitalize';
|
||||||
|
import camelCase from 'lodash.camelCase';
|
||||||
|
import t from '../helpers/translator';
|
||||||
|
|
||||||
|
let dilatoryDistressSeries = {
|
||||||
|
dilatoryDistress1: {
|
||||||
|
goldValue: 200,
|
||||||
|
collect: {
|
||||||
|
fireCoral: {
|
||||||
|
text: t('questDilatoryDistress1CollectFireCoral'),
|
||||||
|
count: 25
|
||||||
|
},
|
||||||
|
blueFins: {
|
||||||
|
text: t('questDilatoryDistress1CollectBlueFins'),
|
||||||
|
count: 25
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'gear',
|
||||||
|
key: 'armor_special_finnedOceanicArmor',
|
||||||
|
text: t('questDilatoryDistress1DropArmor')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
exp: 75
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dilatoryDistress2: {
|
||||||
|
previous: 'dilatoryDistress1',
|
||||||
|
goldValue: 300,
|
||||||
|
boss: {
|
||||||
|
hp: 500,
|
||||||
|
rage: {
|
||||||
|
title: t('questDilatoryDistress2RageTitle'),
|
||||||
|
description: t('questDilatoryDistress2RageDescription'),
|
||||||
|
value: 50,
|
||||||
|
healing: .3,
|
||||||
|
effect: t('questDilatoryDistress2RageEffect')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Skeleton',
|
||||||
|
text: t('questDilatoryDistress2DropSkeletonPotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'CottonCandyBlue',
|
||||||
|
text: t('questDilatoryDistress2DropCottonCandyBluePotion')
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'head_special_fireCoralCirclet',
|
||||||
|
text: t('questDilatoryDistress2DropHeadgear')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
exp: 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dilatoryDistress3: {
|
||||||
|
previous: 'dilatoryDistress2',
|
||||||
|
goldValue: 400,
|
||||||
|
boss: {
|
||||||
|
hp: 1000,
|
||||||
|
str: 2
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'food',
|
||||||
|
key: 'Fish',
|
||||||
|
text: t('questDilatoryDistress3DropFish')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Fish',
|
||||||
|
text: t('questDilatoryDistress3DropFish')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Fish',
|
||||||
|
text: t('questDilatoryDistress3DropFish')
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'weapon_special_tridentOfCrashingTides',
|
||||||
|
text: t('questDilatoryDistress3DropWeapon')
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'shield_special_moonpearlShield',
|
||||||
|
text: t('questDilatoryDistress3DropShield')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
exp: 650
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let goldPurchasableQuests = { };
|
||||||
|
|
||||||
|
assign(goldPurchasableQuests, dilatoryDistressSeries);
|
||||||
|
|
||||||
|
each(goldPurchasableQuests, (quest, name) => {
|
||||||
|
let camelName = camelCase(name);
|
||||||
|
let capitalizedName = capitalize(camelName);
|
||||||
|
|
||||||
|
let questDefaults = {
|
||||||
|
text: t(`quest${capitalizedName}Text`),
|
||||||
|
notes: t(`quest${capitalizedName}Notes`),
|
||||||
|
completion: t(`quest${capitalizedName}Completion`),
|
||||||
|
category: 'gold',
|
||||||
|
value: 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
let bossDefaults = {
|
||||||
|
name: t(`quest${capitalizedName}Boss`),
|
||||||
|
};
|
||||||
|
|
||||||
|
let dropDefaults = {
|
||||||
|
gold: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults(quest, questDefaults);
|
||||||
|
|
||||||
|
if (quest.boss) defaults(quest.boss, bossDefaults);
|
||||||
|
if (quest.drop) defaults(quest.drop, dropDefaults);
|
||||||
|
});
|
||||||
|
|
||||||
|
export default goldPurchasableQuests;
|
||||||
124
common/script/src/content/quests/holiday.js
Normal file
124
common/script/src/content/quests/holiday.js
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
import {each, defaults} from 'lodash';
|
||||||
|
import capitalize from 'lodash.capitalize';
|
||||||
|
import t from '../helpers/translator';
|
||||||
|
|
||||||
|
let holidayQuests = {
|
||||||
|
evilsanta: {
|
||||||
|
boss: {
|
||||||
|
name: t('questEvilSantaBoss'),
|
||||||
|
hp: 300,
|
||||||
|
str: 1
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'mounts',
|
||||||
|
key: 'BearCub-Polar',
|
||||||
|
text: t('questEvilSantaDropBearCubPolarMount')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 20,
|
||||||
|
exp: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
evilsanta2: {
|
||||||
|
previous: 'evilsanta',
|
||||||
|
collect: {
|
||||||
|
tracks: {
|
||||||
|
text: t('questEvilSanta2CollectTracks'),
|
||||||
|
count: 20
|
||||||
|
},
|
||||||
|
branches: {
|
||||||
|
text: t('questEvilSanta2CollectBranches'),
|
||||||
|
count: 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'pets',
|
||||||
|
key: 'BearCub-Polar',
|
||||||
|
text: t('questEvilSanta2DropBearCubPolarPet')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 20,
|
||||||
|
exp: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
egg: {
|
||||||
|
text: t('questEggHuntText'),
|
||||||
|
notes: t('questEggHuntNotes'),
|
||||||
|
completion: t('questEggHuntCompletion'),
|
||||||
|
value: 1,
|
||||||
|
collect: {
|
||||||
|
plainEgg: {
|
||||||
|
text: t('questEggHuntCollectPlainEgg'),
|
||||||
|
count: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Egg',
|
||||||
|
text: t('questEggHuntDropPlainEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
each(holidayQuests, (quest, name) => {
|
||||||
|
let capitalizedName = capitalize(name);
|
||||||
|
let questDefaults = {
|
||||||
|
text: t(`quest${capitalizedName}Text`),
|
||||||
|
notes: t(`quest${capitalizedName}Notes`),
|
||||||
|
completion: t(`quest${capitalizedName}Completion`),
|
||||||
|
canBuy: false,
|
||||||
|
value: 4,
|
||||||
|
category: 'pet',
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults(quest, questDefaults);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
export default holidayQuests;
|
||||||
File diff suppressed because it is too large
Load Diff
373
common/script/src/content/quests/pet.js
Normal file
373
common/script/src/content/quests/pet.js
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
import {each, defaults} from 'lodash';
|
||||||
|
import capitalize from 'lodash.capitalize';
|
||||||
|
import camelCase from 'lodash.camelCase';
|
||||||
|
import t from '../helpers/translator';
|
||||||
|
|
||||||
|
let petQuests = {
|
||||||
|
gryphon: {
|
||||||
|
boss: {
|
||||||
|
hp: 300,
|
||||||
|
str: 1.5,
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 25,
|
||||||
|
exp: 125,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hedgehog: {
|
||||||
|
boss: {
|
||||||
|
hp: 400,
|
||||||
|
str: 1.25
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 30,
|
||||||
|
exp: 125,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ghost_stag: {
|
||||||
|
boss: {
|
||||||
|
hp: 1200,
|
||||||
|
str: 2.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Deer',
|
||||||
|
text: t('questGhostStagDropDeerEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Deer',
|
||||||
|
text: t('questGhostStagDropDeerEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Deer',
|
||||||
|
text: t('questGhostStagDropDeerEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 80,
|
||||||
|
exp: 800,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rat: {
|
||||||
|
boss: {
|
||||||
|
hp: 1200,
|
||||||
|
str: 2.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 80,
|
||||||
|
exp: 800,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
octopus: {
|
||||||
|
boss: {
|
||||||
|
hp: 1200,
|
||||||
|
str: 2.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 80,
|
||||||
|
exp: 800,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dilatory_derby: {
|
||||||
|
text: t('questSeahorseText'),
|
||||||
|
notes: t('questSeahorseNotes'),
|
||||||
|
completion: t('questSeahorseCompletion'),
|
||||||
|
boss: {
|
||||||
|
name: t('questSeahorseBoss'),
|
||||||
|
hp: 300,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Seahorse',
|
||||||
|
text: t('questSeahorseDropSeahorseEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Seahorse',
|
||||||
|
text: t('questSeahorseDropSeahorseEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Seahorse',
|
||||||
|
text: t('questSeahorseDropSeahorseEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 25,
|
||||||
|
exp: 125,
|
||||||
|
unlock: t('questSeahorseUnlockText')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
harpy: {
|
||||||
|
boss: {
|
||||||
|
hp: 600,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Parrot',
|
||||||
|
text: t('questHarpyDropParrotEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Parrot',
|
||||||
|
text: t('questHarpyDropParrotEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Parrot',
|
||||||
|
text: t('questHarpyDropParrotEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 43,
|
||||||
|
exp: 350,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rooster: {
|
||||||
|
boss: {
|
||||||
|
hp: 300,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 25,
|
||||||
|
exp: 125,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
spider: {
|
||||||
|
boss: {
|
||||||
|
hp: 400,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 31,
|
||||||
|
exp: 200,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
owl: {
|
||||||
|
boss: {
|
||||||
|
hp: 500,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 37,
|
||||||
|
exp: 275,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
penguin: {
|
||||||
|
boss: {
|
||||||
|
hp: 400,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 31,
|
||||||
|
exp: 200,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trex: {
|
||||||
|
text: t('questTRexText'),
|
||||||
|
notes: t('questTRexNotes'),
|
||||||
|
completion: t('questTRexCompletion'),
|
||||||
|
boss: {
|
||||||
|
name: t('questTRexBoss'),
|
||||||
|
hp: 800,
|
||||||
|
str: 2
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 55,
|
||||||
|
exp: 500,
|
||||||
|
unlock: t('questTRexUnlockText')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trex_undead: {
|
||||||
|
text: t('questTRexUndeadText'),
|
||||||
|
notes: t('questTRexUndeadNotes'),
|
||||||
|
completion: t('questTRexUndeadCompletion'),
|
||||||
|
boss: {
|
||||||
|
name: t('questTRexUndeadBoss'),
|
||||||
|
hp: 500,
|
||||||
|
str: 2,
|
||||||
|
rage: {
|
||||||
|
title: t('questTRexUndeadRageTitle'),
|
||||||
|
description: t('questTRexUndeadRageDescription'),
|
||||||
|
value: 50,
|
||||||
|
healing: .3,
|
||||||
|
effect: t('questTRexUndeadRageEffect')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'TRex',
|
||||||
|
text: t('questTRexDropTRexEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 55,
|
||||||
|
exp: 500,
|
||||||
|
unlock: t('questTRexUnlockText')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rock: {
|
||||||
|
boss: {
|
||||||
|
hp: 400,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 31,
|
||||||
|
exp: 200,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
bunny: {
|
||||||
|
boss: {
|
||||||
|
hp: 300,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 25,
|
||||||
|
exp: 125,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slime: {
|
||||||
|
boss: {
|
||||||
|
hp: 400,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 31,
|
||||||
|
exp: 200,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sheep: {
|
||||||
|
boss: {
|
||||||
|
hp: 300,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 25,
|
||||||
|
exp: 125,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
kraken: {
|
||||||
|
boss: {
|
||||||
|
hp: 800,
|
||||||
|
str: 2
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Cuttlefish',
|
||||||
|
text: t('questKrakenDropCuttlefishEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Cuttlefish',
|
||||||
|
text: t('questKrakenDropCuttlefishEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Cuttlefish',
|
||||||
|
text: t('questKrakenDropCuttlefishEgg')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 55,
|
||||||
|
exp: 500,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
whale: {
|
||||||
|
boss: {
|
||||||
|
hp: 500,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 37,
|
||||||
|
exp: 275,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cheetah: {
|
||||||
|
boss: {
|
||||||
|
hp: 600,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 43,
|
||||||
|
exp: 350,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
horse: {
|
||||||
|
boss: {
|
||||||
|
hp: 500,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 37,
|
||||||
|
exp: 275,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
each(petQuests, (quest, name) => {
|
||||||
|
let camelName = camelCase(name);
|
||||||
|
let capitalizedName = capitalize(camelName);
|
||||||
|
|
||||||
|
let questDefaults = {
|
||||||
|
text: t(`quest${capitalizedName}Text`),
|
||||||
|
notes: t(`quest${capitalizedName}Notes`),
|
||||||
|
completion: t(`quest${capitalizedName}Completion`),
|
||||||
|
category: 'pet',
|
||||||
|
value: 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
let bossDefaults = {
|
||||||
|
name: t(`quest${capitalizedName}Boss`),
|
||||||
|
};
|
||||||
|
|
||||||
|
let dropDefaults = {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: capitalizedName,
|
||||||
|
text: t(`quest${capitalizedName}Drop${capitalizedName}Egg`)
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: capitalizedName,
|
||||||
|
text: t(`quest${capitalizedName}Drop${capitalizedName}Egg`)
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: capitalizedName,
|
||||||
|
text: t(`quest${capitalizedName}Drop${capitalizedName}Egg`)
|
||||||
|
},
|
||||||
|
],
|
||||||
|
unlock: t(`quest${capitalizedName}UnlockText`),
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults(quest, questDefaults);
|
||||||
|
|
||||||
|
if (quest.boss) defaults(quest.boss, bossDefaults);
|
||||||
|
if (quest.drop) defaults(quest.drop, dropDefaults);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
export default petQuests;
|
||||||
375
common/script/src/content/quests/unlockable.js
Normal file
375
common/script/src/content/quests/unlockable.js
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
import {each, defaults, assign} from 'lodash';
|
||||||
|
import capitalize from 'lodash.capitalize';
|
||||||
|
import camelCase from 'lodash.camelCase';
|
||||||
|
import t from '../helpers/translator';
|
||||||
|
|
||||||
|
let inviteFriends = {
|
||||||
|
basilist: {
|
||||||
|
unlockCondition: {
|
||||||
|
condition: 'party invite',
|
||||||
|
text: t('inviteFriends')
|
||||||
|
},
|
||||||
|
boss: {
|
||||||
|
hp: 100,
|
||||||
|
str: 0.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
gp: 8,
|
||||||
|
exp: 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let viceSeries = {
|
||||||
|
vice1: {
|
||||||
|
lvl: 30,
|
||||||
|
boss: {
|
||||||
|
hp: 750,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'vice2',
|
||||||
|
text: t('questVice1DropVice2Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 20,
|
||||||
|
exp: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
vice2: {
|
||||||
|
lvl: 30,
|
||||||
|
previous: 'vice1',
|
||||||
|
collect: {
|
||||||
|
lightCrystal: {
|
||||||
|
text: t('questVice2CollectLightCrystal'),
|
||||||
|
count: 45
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'vice3',
|
||||||
|
text: t('questVice2DropVice3Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 20,
|
||||||
|
exp: 75
|
||||||
|
}
|
||||||
|
},
|
||||||
|
vice3: {
|
||||||
|
completion: t('questVice3Completion'),
|
||||||
|
previous: 'vice2',
|
||||||
|
lvl: 30,
|
||||||
|
boss: {
|
||||||
|
hp: 1500,
|
||||||
|
str: 3
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'gear',
|
||||||
|
key: 'weapon_special_2',
|
||||||
|
text: t('questVice3DropWeaponSpecial2')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Dragon',
|
||||||
|
text: t('questVice3DropDragonEgg')
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'Dragon',
|
||||||
|
text: t('questVice3DropDragonEgg')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Shade',
|
||||||
|
text: t('questVice3DropShadeHatchingPotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Shade',
|
||||||
|
text: t('questVice3DropShadeHatchingPotion')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 100,
|
||||||
|
exp: 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let atomSeries = {
|
||||||
|
atom1: {
|
||||||
|
lvl: 15,
|
||||||
|
collect: {
|
||||||
|
soapBars: {
|
||||||
|
text: t('questAtom1CollectSoapBars'),
|
||||||
|
count: 20
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'atom2',
|
||||||
|
text: t('questAtom1Drop')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 7,
|
||||||
|
exp: 50
|
||||||
|
}
|
||||||
|
},
|
||||||
|
atom2: {
|
||||||
|
previous: 'atom1',
|
||||||
|
lvl: 15,
|
||||||
|
boss: {
|
||||||
|
hp: 300,
|
||||||
|
str: 1
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'atom3',
|
||||||
|
text: t('questAtom2Drop')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 20,
|
||||||
|
exp: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
atom3: {
|
||||||
|
previous: 'atom2',
|
||||||
|
completion: t('questAtom3Completion'),
|
||||||
|
lvl: 15,
|
||||||
|
boss: {
|
||||||
|
hp: 800,
|
||||||
|
str: 1.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'gear',
|
||||||
|
key: 'head_special_2',
|
||||||
|
text: t('headSpecial2Text')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Base',
|
||||||
|
text: t('questAtom3DropPotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Base',
|
||||||
|
text: t('questAtom3DropPotion')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 25,
|
||||||
|
exp: 125
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let moonstoneSeries = {
|
||||||
|
moonstone1: {
|
||||||
|
lvl: 60,
|
||||||
|
collect: {
|
||||||
|
moonstone: {
|
||||||
|
text: t('questMoonstone1CollectMoonstone'),
|
||||||
|
count: 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'moonstone2',
|
||||||
|
text: t('questMoonstone1DropMoonstone2Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 50,
|
||||||
|
exp: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
moonstone2: {
|
||||||
|
lvl: 60,
|
||||||
|
previous: 'moonstone1',
|
||||||
|
boss: {
|
||||||
|
hp: 1500,
|
||||||
|
str: 3
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'moonstone3',
|
||||||
|
text: t('questMoonstone2DropMoonstone3Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 500,
|
||||||
|
exp: 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
moonstone3: {
|
||||||
|
completion: t('questMoonstone3Completion'),
|
||||||
|
previous: 'moonstone2',
|
||||||
|
lvl: 60,
|
||||||
|
boss: {
|
||||||
|
hp: 2000,
|
||||||
|
str: 3.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'gear',
|
||||||
|
key: 'armor_special_2',
|
||||||
|
text: t('armorSpecial2Text')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('questMoonstone3DropRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('questMoonstone3DropRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('questMoonstone3DropRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('questMoonstone3DropRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('questMoonstone3DropRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Zombie',
|
||||||
|
text: t('questMoonstone3DropZombiePotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Zombie',
|
||||||
|
text: t('questMoonstone3DropZombiePotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Zombie',
|
||||||
|
text: t('questMoonstone3DropZombiePotion')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 900,
|
||||||
|
exp: 1500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let goldenKnightSeries = {
|
||||||
|
goldenknight1: {
|
||||||
|
lvl: 40,
|
||||||
|
collect: {
|
||||||
|
testimony: {
|
||||||
|
text: t('questGoldenknight1CollectTestimony'),
|
||||||
|
count: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'goldenknight2',
|
||||||
|
text: t('questGoldenknight1DropGoldenknight2Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 15,
|
||||||
|
exp: 120
|
||||||
|
}
|
||||||
|
},
|
||||||
|
goldenknight2: {
|
||||||
|
previous: 'goldenknight1',
|
||||||
|
lvl: 40,
|
||||||
|
boss: {
|
||||||
|
hp: 1000,
|
||||||
|
str: 3
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'quests',
|
||||||
|
key: 'goldenknight3',
|
||||||
|
text: t('questGoldenknight2DropGoldenknight3Quest')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 75,
|
||||||
|
exp: 750
|
||||||
|
}
|
||||||
|
},
|
||||||
|
goldenknight3: {
|
||||||
|
completion: t('questGoldenknight3Completion'),
|
||||||
|
previous: 'goldenknight2',
|
||||||
|
lvl: 40,
|
||||||
|
boss: {
|
||||||
|
hp: 1700,
|
||||||
|
str: 3.5
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('questGoldenknight3DropHoney')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('questGoldenknight3DropHoney')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('questGoldenknight3DropHoney')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Golden',
|
||||||
|
text: t('questGoldenknight3DropGoldenPotion')
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Golden',
|
||||||
|
text: t('questGoldenknight3DropGoldenPotion')
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'shield_special_goldenknight',
|
||||||
|
text: t('questGoldenknight3DropWeapon')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 900,
|
||||||
|
exp: 1500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let unlockableQuests = { };
|
||||||
|
|
||||||
|
assign(unlockableQuests, inviteFriends);
|
||||||
|
assign(unlockableQuests, atomSeries);
|
||||||
|
assign(unlockableQuests, viceSeries);
|
||||||
|
assign(unlockableQuests, moonstoneSeries);
|
||||||
|
assign(unlockableQuests, goldenKnightSeries);
|
||||||
|
|
||||||
|
each(unlockableQuests, (quest, name) => {
|
||||||
|
let camelName = camelCase(name);
|
||||||
|
let capitalizedName = capitalize(camelName);
|
||||||
|
|
||||||
|
let questDefaults = {
|
||||||
|
text: t(`quest${capitalizedName}Text`),
|
||||||
|
notes: t(`quest${capitalizedName}Notes`),
|
||||||
|
category: 'unlockable',
|
||||||
|
value: 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
let bossDefaults = {
|
||||||
|
name: t(`quest${capitalizedName}Boss`),
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults(quest, questDefaults);
|
||||||
|
|
||||||
|
if (quest.boss) defaults(quest.boss, bossDefaults);
|
||||||
|
});
|
||||||
|
|
||||||
|
export default unlockableQuests;
|
||||||
172
common/script/src/content/quests/world.js
Normal file
172
common/script/src/content/quests/world.js
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
import {each, defaults} from 'lodash';
|
||||||
|
import capitalize from 'lodash.capitalize';
|
||||||
|
import t from '../helpers/translator';
|
||||||
|
|
||||||
|
let worldQuests = {
|
||||||
|
dilatory: {
|
||||||
|
boss: {
|
||||||
|
name: t('questDilatoryBoss'),
|
||||||
|
hp: 5000000,
|
||||||
|
str: 1,
|
||||||
|
def: 1,
|
||||||
|
rage: {
|
||||||
|
title: t('questDilatoryBossRageTitle'),
|
||||||
|
description: t('questDilatoryBossRageDescription'),
|
||||||
|
value: 4000000,
|
||||||
|
tavern: t('questDilatoryBossRageTavern'),
|
||||||
|
stables: t('questDilatoryBossRageStables'),
|
||||||
|
market: t('questDilatoryBossRageMarket')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'pets',
|
||||||
|
key: 'MantisShrimp-Base',
|
||||||
|
text: t('questDilatoryDropMantisShrimpPet')
|
||||||
|
}, {
|
||||||
|
type: 'mounts',
|
||||||
|
key: 'MantisShrimp-Base',
|
||||||
|
text: t('questDilatoryDropMantisShrimpMount')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Meat',
|
||||||
|
text: t('foodMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Milk',
|
||||||
|
text: t('foodMilk')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Potatoe',
|
||||||
|
text: t('foodPotatoe')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Strawberry',
|
||||||
|
text: t('foodStrawberry')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Chocolate',
|
||||||
|
text: t('foodChocolate')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Fish',
|
||||||
|
text: t('foodFish')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('foodRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'CottonCandyPink',
|
||||||
|
text: t('foodCottonCandyPink')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'CottonCandyBlue',
|
||||||
|
text: t('foodCottonCandyBlue')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('foodHoney')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stressbeast: {
|
||||||
|
completionChat: t('questStressbeastCompletionChat'),
|
||||||
|
boss: {
|
||||||
|
name: t('questStressbeastBoss'),
|
||||||
|
hp: 2750000,
|
||||||
|
str: 1,
|
||||||
|
def: 1,
|
||||||
|
rage: {
|
||||||
|
title: t('questStressbeastBossRageTitle'),
|
||||||
|
description: t('questStressbeastBossRageDescription'),
|
||||||
|
value: 1450000,
|
||||||
|
healing: .3,
|
||||||
|
stables: t('questStressbeastBossRageStables'),
|
||||||
|
bailey: t('questStressbeastBossRageBailey'),
|
||||||
|
guide: t('questStressbeastBossRageGuide')
|
||||||
|
},
|
||||||
|
desperation: {
|
||||||
|
threshold: 500000,
|
||||||
|
str: 3.5,
|
||||||
|
def: 2,
|
||||||
|
text: t('questStressbeastDesperation')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'pets',
|
||||||
|
key: 'Mammoth-Base',
|
||||||
|
text: t('questStressbeastDropMammothPet')
|
||||||
|
}, {
|
||||||
|
type: 'mounts',
|
||||||
|
key: 'Mammoth-Base',
|
||||||
|
text: t('questStressbeastDropMammothMount')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Meat',
|
||||||
|
text: t('foodMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Milk',
|
||||||
|
text: t('foodMilk')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Potatoe',
|
||||||
|
text: t('foodPotatoe')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Strawberry',
|
||||||
|
text: t('foodStrawberry')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Chocolate',
|
||||||
|
text: t('foodChocolate')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Fish',
|
||||||
|
text: t('foodFish')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('foodRottenMeat')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'CottonCandyPink',
|
||||||
|
text: t('foodCottonCandyPink')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'CottonCandyBlue',
|
||||||
|
text: t('foodCottonCandyBlue')
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('foodHoney')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
each(worldQuests, (quest, name) => {
|
||||||
|
let capitalizedName = capitalize(name);
|
||||||
|
let questDefaults = {
|
||||||
|
text: t(`quest${capitalizedName}Text`),
|
||||||
|
notes: t(`quest${capitalizedName}Notes`),
|
||||||
|
completion: t(`quest${capitalizedName}Completion`),
|
||||||
|
value: 0,
|
||||||
|
canBuy: false,
|
||||||
|
category: 'world',
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults(quest, questDefaults);
|
||||||
|
});
|
||||||
|
|
||||||
|
export default worldQuests;
|
||||||
Reference in New Issue
Block a user