diff --git a/website/common/script/content/constants/index.js b/website/common/script/content/constants/index.js index 3db080382a..044bb68039 100644 --- a/website/common/script/content/constants/index.js +++ b/website/common/script/content/constants/index.js @@ -33,3 +33,11 @@ export { default as ANIMAL_COLOR_ACHIEVEMENTS } from './animalColorAchievements' export { default as ANIMAL_SET_ACHIEVEMENTS } from './animalSetAchievements'; export { default as QUEST_SERIES_ACHIEVEMENTS } from './questSeriesAchievements'; export { default as ITEM_LIST } from './itemList'; +export { default as QUEST_SERIES } from '../quests/series'; +export { default as QUEST_MASTERCLASSER } from '../quests/masterclasser'; +export { default as QUEST_GENERIC } from '../quests/generic'; +export { default as QUEST_SEASONAL } from '../quests/seasonal'; +export { default as QUEST_PETS } from '../quests/pets'; +export { default as QUEST_POTIONS } from '../quests/potions'; +export { default as QUEST_TIME_TRAVEL } from '../quests/timeTravel'; +export { default as QUEST_WORLD } from '../quests/world'; diff --git a/website/common/script/content/quests.js b/website/common/script/content/quests.js index e1407c4e20..be62c01be9 100644 --- a/website/common/script/content/quests.js +++ b/website/common/script/content/quests.js @@ -1,3924 +1,39 @@ import defaults from 'lodash/defaults'; import each from 'lodash/each'; -import find from 'lodash/find'; -import moment from 'moment'; import sortBy from 'lodash/sortBy'; import t from './translation'; import { - EVENTS, USER_CAN_OWN_QUEST_CATEGORIES, + QUEST_GENERIC, + QUEST_MASTERCLASSER, + QUEST_PETS, + QUEST_POTIONS, + QUEST_SEASONAL, + QUEST_SERIES, + QUEST_TIME_TRAVEL, + QUEST_WORLD, } from './constants'; -const CURRENT_EVENT = find( - EVENTS, event => moment().isBetween(event.start, event.end) && Boolean(event.season), -); const userCanOwnQuestCategories = USER_CAN_OWN_QUEST_CATEGORIES; +const questGeneric = QUEST_GENERIC; +const questMasterclasser = QUEST_MASTERCLASSER; +const questPets = QUEST_PETS; +const questPotions = QUEST_POTIONS; +const questSeasonal = QUEST_SEASONAL; +const questSeries = QUEST_SERIES; +const questTimeTravel = QUEST_TIME_TRAVEL; +const questWorld = QUEST_WORLD; +// this uses the spread operator, which allows us to combine multiple objects into one const quests = { - dilatory: { - text: t('questDilatoryText'), - notes: t('questDilatoryNotes'), - completion: t('questDilatoryCompletion'), - value: 0, - canBuy () { - return false; - }, - category: 'world', - 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: { - text: t('questStressbeastText'), - notes: t('questStressbeastNotes'), - completion: t('questStressbeastCompletion'), - completionChat: t('questStressbeastCompletionChat'), - value: 0, - canBuy () { - return false; - }, - category: 'world', - boss: { - name: t('questStressbeastBoss'), - hp: 2750000, - str: 1, - def: 1, - rage: { - title: t('questStressbeastBossRageTitle'), - description: t('questStressbeastBossRageDescription'), - value: 1450000, - healing: 0.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, - }, - }, - burnout: { - text: t('questBurnoutText'), - notes: t('questBurnoutNotes'), - completion: t('questBurnoutCompletion'), - completionChat: t('questBurnoutCompletionChat'), - value: 0, - canBuy () { - return false; - }, - category: 'world', - boss: { - name: t('questBurnoutBoss'), - hp: 11000000, - str: 2.5, - def: 1, - rage: { - title: t('questBurnoutBossRageTitle'), - description: t('questBurnoutBossRageDescription'), - value: 1000000, - quests: t('questBurnoutBossRageQuests'), - seasonalShop: t('questBurnoutBossRageSeasonalShop'), - tavern: t('questBurnoutBossRageTavern'), - }, - }, - drop: { - items: [ - { - type: 'pets', - key: 'Phoenix-Base', - text: t('questBurnoutDropPhoenixPet'), - }, { - type: 'mounts', - key: 'Phoenix-Base', - text: t('questBurnoutDropPhoenixMount'), - }, { - type: 'food', - key: 'Candy_Base', - text: t('foodCandyBase'), - }, { - type: 'food', - key: 'Candy_White', - text: t('foodCandyWhite'), - }, { - type: 'food', - key: 'Candy_Desert', - text: t('foodCandyDesert'), - }, { - type: 'food', - key: 'Candy_Red', - text: t('foodCandyRed'), - }, { - type: 'food', - key: 'Candy_Shade', - text: t('foodCandyShade'), - }, { - type: 'food', - key: 'Candy_Skeleton', - text: t('foodCandySkeleton'), - }, { - type: 'food', - key: 'Candy_Zombie', - text: t('foodCandyZombie'), - }, { - type: 'food', - key: 'Candy_CottonCandyPink', - text: t('foodCandyCottonCandyPink'), - }, { - type: 'food', - key: 'Candy_CottonCandyBlue', - text: t('foodCandyCottonCandyBlue'), - }, { - type: 'food', - key: 'Candy_Golden', - text: t('foodCandyGolden'), - }, - ], - gp: 0, - exp: 0, - }, - }, - evilsanta: { - event: CURRENT_EVENT && CURRENT_EVENT.season === 'winter' ? CURRENT_EVENT : null, - text: t('questEvilSantaText'), - notes: t('questEvilSantaNotes'), - addlNotes: t('evilSantaAddlNotes'), - completion: t('questEvilSantaCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questEvilSantaBoss'), - hp: 300, - str: 1, - }, - drop: { - items: [ - { - type: 'mounts', - key: 'BearCub-Polar', - text: t('questEvilSantaDropBearCubPolarMount'), - }, - ], - gp: 20, - exp: 100, - }, - }, - evilsanta2: { - event: CURRENT_EVENT && CURRENT_EVENT.season === 'winter' ? CURRENT_EVENT : null, - text: t('questEvilSanta2Text'), - notes: t('questEvilSanta2Notes'), - addlNotes: t('evilSantaAddlNotes'), - completion: t('questEvilSanta2Completion'), - value: 4, - category: 'pet', - 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, - }, - }, - gryphon: { - text: t('questGryphonText'), - notes: t('questGryphonNotes'), - completion: t('questGryphonCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questGryphonBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Gryphon', - text: t('questGryphonDropGryphonEgg'), - }, { - type: 'eggs', - key: 'Gryphon', - text: t('questGryphonDropGryphonEgg'), - }, { - type: 'eggs', - key: 'Gryphon', - text: t('questGryphonDropGryphonEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questGryphonUnlockText'), - }, - }, - hedgehog: { - text: t('questHedgehogText'), - notes: t('questHedgehogNotes'), - completion: t('questHedgehogCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questHedgehogBoss'), - hp: 400, - str: 1.25, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Hedgehog', - text: t('questHedgehogDropHedgehogEgg'), - }, { - type: 'eggs', - key: 'Hedgehog', - text: t('questHedgehogDropHedgehogEgg'), - }, { - type: 'eggs', - key: 'Hedgehog', - text: t('questHedgehogDropHedgehogEgg'), - }, - ], - gp: 30, - exp: 125, - unlock: t('questHedgehogUnlockText'), - }, - }, - ghost_stag: { // eslint-disable-line camelcase - text: t('questGhostStagText'), - notes: t('questGhostStagNotes'), - completion: t('questGhostStagCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questGhostStagBoss'), - 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, - unlock: t('questGhostStagUnlockText'), - }, - }, - vice1: { - text: t('questVice1Text'), - notes: t('questVice1Notes'), - completion: t('questVice1Completion'), - group: 'questGroupVice', - value: 4, - lvl: 30, - category: 'unlockable', - boss: { - name: t('questVice1Boss'), - hp: 750, - str: 1.5, - }, - drop: { - items: [ - { - type: 'quests', - key: 'vice2', - text: t('questVice1DropVice2Quest'), - onlyOwner: true, - }, - ], - gp: 20, - exp: 100, - }, - }, - vice2: { - text: t('questVice2Text'), - notes: t('questVice2Notes'), - completion: t('questVice2Completion'), - group: 'questGroupVice', - value: 4, - lvl: 30, - category: 'unlockable', - previous: 'vice1', - collect: { - lightCrystal: { - text: t('questVice2CollectLightCrystal'), - count: 30, - }, - }, - drop: { - items: [ - { - type: 'quests', - key: 'vice3', - text: t('questVice2DropVice3Quest'), - onlyOwner: true, - }, - ], - gp: 20, - exp: 75, - }, - }, - vice3: { - text: t('questVice3Text'), - notes: t('questVice3Notes'), - group: 'questGroupVice', - completion: t('questVice3Completion'), - previous: 'vice2', - value: 4, - lvl: 30, - category: 'unlockable', - boss: { - name: t('questVice3Boss'), - 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, - }, - }, - egg: { - text: t('questEggHuntText'), - notes: t('questEggHuntNotes'), - completion: t('questEggHuntCompletion'), - value: 1, - category: 'pet', - canBuy () { - return CURRENT_EVENT && CURRENT_EVENT.season === 'spring'; - }, - event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, - collect: { - plainEgg: { - text: t('questEggHuntCollectPlainEgg'), - count: 40, - }, - }, - 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, - }, - }, - rat: { - text: t('questRatText'), - notes: t('questRatNotes'), - completion: t('questRatCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questRatBoss'), - hp: 1200, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Rat', - text: t('questRatDropRatEgg'), - }, { - type: 'eggs', - key: 'Rat', - text: t('questRatDropRatEgg'), - }, { - type: 'eggs', - key: 'Rat', - text: t('questRatDropRatEgg'), - }, - ], - gp: 80, - exp: 800, - unlock: t('questRatUnlockText'), - }, - }, - octopus: { - text: t('questOctopusText'), - notes: t('questOctopusNotes'), - completion: t('questOctopusCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questOctopusBoss'), - hp: 1200, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Octopus', - text: t('questOctopusDropOctopusEgg'), - }, { - type: 'eggs', - key: 'Octopus', - text: t('questOctopusDropOctopusEgg'), - }, { - type: 'eggs', - key: 'Octopus', - text: t('questOctopusDropOctopusEgg'), - }, - ], - gp: 80, - exp: 800, - unlock: t('questOctopusUnlockText'), - }, - }, - dilatory_derby: { // eslint-disable-line camelcase - text: t('questSeahorseText'), - notes: t('questSeahorseNotes'), - completion: t('questSeahorseCompletion'), - value: 4, - category: 'pet', - 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'), - }, - }, - atom1: { - text: t('questAtom1Text'), - notes: t('questAtom1Notes'), - completion: t('questAtom1Completion'), - group: 'questGroupAtom', - value: 4, - lvl: 15, - category: 'unlockable', - collect: { - soapBars: { - text: t('questAtom1CollectSoapBars'), - count: 20, - }, - }, - drop: { - items: [ - { - type: 'quests', - key: 'atom2', - text: t('questAtom1Drop'), - onlyOwner: true, - }, - ], - gp: 7, - exp: 50, - }, - }, - atom2: { - text: t('questAtom2Text'), - notes: t('questAtom2Notes'), - completion: t('questAtom2Completion'), - group: 'questGroupAtom', - previous: 'atom1', - value: 4, - lvl: 15, - category: 'unlockable', - boss: { - name: t('questAtom2Boss'), - hp: 300, - str: 1, - }, - drop: { - items: [ - { - type: 'quests', - key: 'atom3', - text: t('questAtom2Drop'), - onlyOwner: true, - }, - ], - gp: 20, - exp: 100, - }, - }, - atom3: { - text: t('questAtom3Text'), - notes: t('questAtom3Notes'), - group: 'questGroupAtom', - previous: 'atom2', - completion: t('questAtom3Completion'), - value: 4, - lvl: 15, - category: 'unlockable', - boss: { - name: t('questAtom3Boss'), - 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, - }, - }, - harpy: { - text: t('questHarpyText'), - notes: t('questHarpyNotes'), - completion: t('questHarpyCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questHarpyBoss'), - 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, - unlock: t('questHarpyUnlockText'), - }, - }, - rooster: { - text: t('questRoosterText'), - notes: t('questRoosterNotes'), - completion: t('questRoosterCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questRoosterBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Rooster', - text: t('questRoosterDropRoosterEgg'), - }, { - type: 'eggs', - key: 'Rooster', - text: t('questRoosterDropRoosterEgg'), - }, { - type: 'eggs', - key: 'Rooster', - text: t('questRoosterDropRoosterEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questRoosterUnlockText'), - }, - }, - spider: { - text: t('questSpiderText'), - notes: t('questSpiderNotes'), - completion: t('questSpiderCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSpiderBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Spider', - text: t('questSpiderDropSpiderEgg'), - }, { - type: 'eggs', - key: 'Spider', - text: t('questSpiderDropSpiderEgg'), - }, { - type: 'eggs', - key: 'Spider', - text: t('questSpiderDropSpiderEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questSpiderUnlockText'), - }, - }, - moonstone1: { - text: t('questMoonstone1Text'), - notes: t('questMoonstone1Notes'), - completion: t('questMoonstone1Completion'), - group: 'questGroupMoonstone', - value: 4, - lvl: 60, - category: 'unlockable', - collect: { - moonstone: { - text: t('questMoonstone1CollectMoonstone'), - count: 100, - }, - }, - drop: { - items: [ - { - type: 'quests', - key: 'moonstone2', - text: t('questMoonstone1DropMoonstone2Quest'), - onlyOwner: true, - }, - ], - gp: 50, - exp: 100, - }, - }, - moonstone2: { - text: t('questMoonstone2Text'), - notes: t('questMoonstone2Notes'), - completion: t('questMoonstone2Completion'), - group: 'questGroupMoonstone', - value: 4, - lvl: 60, - previous: 'moonstone1', - category: 'unlockable', - boss: { - name: t('questMoonstone2Boss'), - hp: 1500, - str: 3, - }, - drop: { - items: [ - { - type: 'quests', - key: 'moonstone3', - text: t('questMoonstone2DropMoonstone3Quest'), - onlyOwner: true, - }, - ], - gp: 500, - exp: 1000, - }, - }, - moonstone3: { - text: t('questMoonstone3Text'), - notes: t('questMoonstone3Notes'), - group: 'questGroupMoonstone', - completion: t('questMoonstone3Completion'), - previous: 'moonstone2', - value: 4, - lvl: 60, - category: 'unlockable', - boss: { - name: t('questMoonstone3Boss'), - 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, - }, - }, - goldenknight1: { - text: t('questGoldenknight1Text'), - notes: t('questGoldenknight1Notes'), - completion: t('questGoldenknight1Completion'), - group: 'questGroupGoldenknight', - value: 4, - lvl: 40, - category: 'unlockable', - collect: { - testimony: { - text: t('questGoldenknight1CollectTestimony'), - count: 60, - }, - }, - drop: { - items: [ - { - type: 'quests', - key: 'goldenknight2', - text: t('questGoldenknight1DropGoldenknight2Quest'), - onlyOwner: true, - }, - ], - gp: 15, - exp: 120, - }, - }, - goldenknight2: { - text: t('questGoldenknight2Text'), - notes: t('questGoldenknight2Notes'), - completion: t('questGoldenknight2Completion'), - group: 'questGroupGoldenknight', - value: 4, - previous: 'goldenknight1', - lvl: 40, - category: 'unlockable', - boss: { - name: t('questGoldenknight2Boss'), - hp: 1000, - str: 3, - }, - drop: { - items: [ - { - type: 'quests', - key: 'goldenknight3', - text: t('questGoldenknight2DropGoldenknight3Quest'), - onlyOwner: true, - }, - ], - gp: 75, - exp: 750, - }, - }, - goldenknight3: { - text: t('questGoldenknight3Text'), - notes: t('questGoldenknight3Notes'), - group: 'questGroupGoldenknight', - completion: t('questGoldenknight3Completion'), - previous: 'goldenknight2', - value: 4, - lvl: 40, - category: 'unlockable', - boss: { - name: t('questGoldenknight3Boss'), - 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, - }, - }, - basilist: { - text: t('questBasilistText'), - notes: t('questBasilistNotes'), - group: 'questGroupEarnable', - completion: t('questBasilistCompletion'), - goldValue: 100, - category: 'unlockable', - unlockCondition: { - condition: 'party invite', - text: t('inviteFriends'), - }, - boss: { - name: t('questBasilistBoss'), - hp: 100, - str: 0.5, - }, - drop: { - gp: 8, - exp: 42, - }, - }, - owl: { - text: t('questOwlText'), - notes: t('questOwlNotes'), - completion: t('questOwlCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questOwlBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Owl', - text: t('questOwlDropOwlEgg'), - }, { - type: 'eggs', - key: 'Owl', - text: t('questOwlDropOwlEgg'), - }, { - type: 'eggs', - key: 'Owl', - text: t('questOwlDropOwlEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questOwlUnlockText'), - }, - }, - penguin: { - text: t('questPenguinText'), - notes: t('questPenguinNotes'), - completion: t('questPenguinCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questPenguinBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Penguin', - text: t('questPenguinDropPenguinEgg'), - }, { - type: 'eggs', - key: 'Penguin', - text: t('questPenguinDropPenguinEgg'), - }, { - type: 'eggs', - key: 'Penguin', - text: t('questPenguinDropPenguinEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questPenguinUnlockText'), - }, - }, - trex: { - text: t('questTRexText'), - notes: t('questTRexNotes'), - completion: t('questTRexCompletion'), - value: 4, - category: 'pet', - 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: { // eslint-disable-line camelcase - text: t('questTRexUndeadText'), - notes: t('questTRexUndeadNotes'), - completion: t('questTRexUndeadCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questTRexUndeadBoss'), - hp: 500, - str: 2, - rage: { - title: t('questTRexUndeadRageTitle'), - description: t('questTRexUndeadRageDescription'), - value: 50, - healing: 0.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: { - text: t('questRockText'), - notes: t('questRockNotes'), - completion: t('questRockCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questRockBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Rock', - text: t('questRockDropRockEgg'), - }, { - type: 'eggs', - key: 'Rock', - text: t('questRockDropRockEgg'), - }, { - type: 'eggs', - key: 'Rock', - text: t('questRockDropRockEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questRockUnlockText'), - }, - }, - bunny: { - text: t('questBunnyText'), - notes: t('questBunnyNotes'), - completion: t('questBunnyCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questBunnyBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Bunny', - text: t('questBunnyDropBunnyEgg'), - }, { - type: 'eggs', - key: 'Bunny', - text: t('questBunnyDropBunnyEgg'), - }, { - type: 'eggs', - key: 'Bunny', - text: t('questBunnyDropBunnyEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questBunnyUnlockText'), - }, - }, - slime: { - text: t('questSlimeText'), - notes: t('questSlimeNotes'), - completion: t('questSlimeCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSlimeBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Slime', - text: t('questSlimeDropSlimeEgg'), - }, { - type: 'eggs', - key: 'Slime', - text: t('questSlimeDropSlimeEgg'), - }, { - type: 'eggs', - key: 'Slime', - text: t('questSlimeDropSlimeEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questSlimeUnlockText'), - }, - }, - sheep: { - text: t('questSheepText'), - notes: t('questSheepNotes'), - completion: t('questSheepCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSheepBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Sheep', - text: t('questSheepDropSheepEgg'), - }, { - type: 'eggs', - key: 'Sheep', - text: t('questSheepDropSheepEgg'), - }, { - type: 'eggs', - key: 'Sheep', - text: t('questSheepDropSheepEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questSheepUnlockText'), - }, - }, - kraken: { - text: t('questKrakenText'), - notes: t('questKrakenNotes'), - completion: t('questKrakenCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questKrakenBoss'), - 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, - unlock: t('questKrakenUnlockText'), - }, - }, - whale: { - text: t('questWhaleText'), - notes: t('questWhaleNotes'), - completion: t('questWhaleCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questWhaleBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Whale', - text: t('questWhaleDropWhaleEgg'), - }, { - type: 'eggs', - key: 'Whale', - text: t('questWhaleDropWhaleEgg'), - }, { - type: 'eggs', - key: 'Whale', - text: t('questWhaleDropWhaleEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questWhaleUnlockText'), - }, - }, - dilatoryDistress1: { - text: t('questDilatoryDistress1Text'), - notes: t('questDilatoryDistress1Notes'), - group: 'questGroupDilatoryDistress', - completion: t('questDilatoryDistress1Completion'), - value: 4, - goldValue: 200, - category: 'gold', - collect: { - fireCoral: { - text: t('questDilatoryDistress1CollectFireCoral'), - count: 20, - }, - blueFins: { - text: t('questDilatoryDistress1CollectBlueFins'), - count: 20, - }, - }, - drop: { - items: [ - { - type: 'gear', - key: 'armor_special_finnedOceanicArmor', - text: t('questDilatoryDistress1DropArmor'), - }, - ], - gp: 0, - exp: 75, - }, - }, - dilatoryDistress2: { - text: t('questDilatoryDistress2Text'), - notes: t('questDilatoryDistress2Notes'), - group: 'questGroupDilatoryDistress', - completion: t('questDilatoryDistress2Completion'), - previous: 'dilatoryDistress1', - value: 4, - goldValue: 300, - category: 'gold', - boss: { - name: t('questDilatoryDistress2Boss'), - hp: 500, - rage: { - title: t('questDilatoryDistress2RageTitle'), - description: t('questDilatoryDistress2RageDescription'), - value: 50, - healing: 0.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'), - }, - ], - gp: 0, - exp: 500, - }, - }, - dilatoryDistress3: { - text: t('questDilatoryDistress3Text'), - notes: t('questDilatoryDistress3Notes'), - group: 'questGroupDilatoryDistress', - completion: t('questDilatoryDistress3Completion'), - previous: 'dilatoryDistress2', - value: 4, - goldValue: 400, - category: 'gold', - boss: { - name: t('questDilatoryDistress3Boss'), - 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'), - }, - ], - gp: 0, - exp: 650, - }, - }, - cheetah: { - text: t('questCheetahText'), - notes: t('questCheetahNotes'), - completion: t('questCheetahCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questCheetahBoss'), - hp: 600, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Cheetah', - text: t('questCheetahDropCheetahEgg'), - }, { - type: 'eggs', - key: 'Cheetah', - text: t('questCheetahDropCheetahEgg'), - }, { - type: 'eggs', - key: 'Cheetah', - text: t('questCheetahDropCheetahEgg'), - }, - ], - gp: 43, - exp: 350, - unlock: t('questCheetahUnlockText'), - }, - }, - horse: { - text: t('questHorseText'), - notes: t('questHorseNotes'), - completion: t('questHorseCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questHorseBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Horse', - text: t('questHorseDropHorseEgg'), - }, { - type: 'eggs', - key: 'Horse', - text: t('questHorseDropHorseEgg'), - }, { - type: 'eggs', - key: 'Horse', - text: t('questHorseDropHorseEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questHorseUnlockText'), - }, - }, - frog: { - text: t('questFrogText'), - notes: t('questFrogNotes'), - completion: t('questFrogCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questFrogBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Frog', - text: t('questFrogDropFrogEgg'), - }, { - type: 'eggs', - key: 'Frog', - text: t('questFrogDropFrogEgg'), - }, { - type: 'eggs', - key: 'Frog', - text: t('questFrogDropFrogEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questFrogUnlockText'), - }, - }, - snake: { - text: t('questSnakeText'), - notes: t('questSnakeNotes'), - completion: t('questSnakeCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSnakeBoss'), - hp: 1100, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Snake', - text: t('questSnakeDropSnakeEgg'), - }, { - type: 'eggs', - key: 'Snake', - text: t('questSnakeDropSnakeEgg'), - }, { - type: 'eggs', - key: 'Snake', - text: t('questSnakeDropSnakeEgg'), - }, - ], - gp: 73, - exp: 725, - unlock: t('questSnakeUnlockText'), - }, - }, - unicorn: { - text: t('questUnicornText'), - notes: t('questUnicornNotes'), - completion: t('questUnicornCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questUnicornBoss'), - hp: 600, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Unicorn', - text: t('questUnicornDropUnicornEgg'), - }, { - type: 'eggs', - key: 'Unicorn', - text: t('questUnicornDropUnicornEgg'), - }, { - type: 'eggs', - key: 'Unicorn', - text: t('questUnicornDropUnicornEgg'), - }, - ], - gp: 43, - exp: 350, - unlock: t('questUnicornUnlockText'), - }, - }, - sabretooth: { - text: t('questSabretoothText'), - notes: t('questSabretoothNotes'), - completion: t('questSabretoothCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSabretoothBoss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Sabretooth', - text: t('questSabretoothDropSabretoothEgg'), - }, { - type: 'eggs', - key: 'Sabretooth', - text: t('questSabretoothDropSabretoothEgg'), - }, { - type: 'eggs', - key: 'Sabretooth', - text: t('questSabretoothDropSabretoothEgg'), - }, - ], - gp: 67, - exp: 650, - unlock: t('questSabretoothUnlockText'), - }, - }, - monkey: { - text: t('questMonkeyText'), - notes: t('questMonkeyNotes'), - completion: t('questMonkeyCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questMonkeyBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Monkey', - text: t('questMonkeyDropMonkeyEgg'), - }, { - type: 'eggs', - key: 'Monkey', - text: t('questMonkeyDropMonkeyEgg'), - }, { - type: 'eggs', - key: 'Monkey', - text: t('questMonkeyDropMonkeyEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questMonkeyUnlockText'), - }, - }, - snail: { - text: t('questSnailText'), - notes: t('questSnailNotes'), - completion: t('questSnailCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSnailBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Snail', - text: t('questSnailDropSnailEgg'), - }, { - type: 'eggs', - key: 'Snail', - text: t('questSnailDropSnailEgg'), - }, { - type: 'eggs', - key: 'Snail', - text: t('questSnailDropSnailEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questSnailUnlockText'), - }, - }, - bewilder: { - text: t('questBewilderText'), - notes: t('questBewilderNotes'), - completion: t('questBewilderCompletion'), - completionChat: t('questBewilderCompletionChat'), - value: 0, - canBuy () { - return false; - }, - category: 'world', - boss: { - name: t('questBewilderText'), - hp: 20000000, - str: 1, - def: 1, - rage: { - title: t('questBewilderBossRageTitle'), - description: t('questBewilderBossRageDescription'), - value: 800000, - bailey: t('questBewilderBossRageBailey'), - stables: t('questBewilderBossRageStables'), - market: t('questBewilderBossRageMarket'), - }, - }, - drop: { - items: [ - { - type: 'pets', - key: 'MagicalBee-Base', - text: t('questBewilderDropBumblebeePet'), - }, { - type: 'mounts', - key: 'MagicalBee-Base', - text: t('questBewilderDropBumblebeeMount'), - }, { - 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, - }, - }, - falcon: { - text: t('questFalconText'), - notes: t('questFalconNotes'), - completion: t('questFalconCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questFalconBoss'), - hp: 700, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Falcon', - text: t('questFalconDropFalconEgg'), - }, { - type: 'eggs', - key: 'Falcon', - text: t('questFalconDropFalconEgg'), - }, { - type: 'eggs', - key: 'Falcon', - text: t('questFalconDropFalconEgg'), - }, - ], - gp: 49, - exp: 425, - unlock: t('questFalconUnlockText'), - }, - }, - treeling: { - text: t('questTreelingText'), - notes: t('questTreelingNotes'), - completion: t('questTreelingCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questTreelingBoss'), - hp: 600, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Treeling', - text: t('questTreelingDropTreelingEgg'), - }, { - type: 'eggs', - key: 'Treeling', - text: t('questTreelingDropTreelingEgg'), - }, { - type: 'eggs', - key: 'Treeling', - text: t('questTreelingDropTreelingEgg'), - }, - ], - gp: 43, - exp: 350, - unlock: t('questTreelingUnlockText'), - }, - }, - axolotl: { - text: t('questAxolotlText'), - notes: t('questAxolotlNotes'), - completion: t('questAxolotlCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questAxolotlBoss'), - hp: 500, - str: 1.5, - rage: { - title: t('questAxolotlRageTitle'), - description: t('questAxolotlRageDescription'), - value: 50, - healing: 0.3, - effect: t('questAxolotlRageEffect'), - }, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Axolotl', - text: t('questAxolotlDropAxolotlEgg'), - }, { - type: 'eggs', - key: 'Axolotl', - text: t('questAxolotlDropAxolotlEgg'), - }, { - type: 'eggs', - key: 'Axolotl', - text: t('questAxolotlDropAxolotlEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questAxolotlUnlockText'), - }, - }, - turtle: { - text: t('questTurtleText'), - notes: t('questTurtleNotes'), - completion: t('questTurtleCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questTurtleBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Turtle', - text: t('questTurtleDropTurtleEgg'), - }, { - type: 'eggs', - key: 'Turtle', - text: t('questTurtleDropTurtleEgg'), - }, { - type: 'eggs', - key: 'Turtle', - text: t('questTurtleDropTurtleEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questTurtleUnlockText'), - }, - }, - armadillo: { - text: t('questArmadilloText'), - notes: t('questArmadilloNotes'), - completion: t('questArmadilloCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questArmadilloBoss'), - hp: 600, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Armadillo', - text: t('questArmadilloDropArmadilloEgg'), - }, { - type: 'eggs', - key: 'Armadillo', - text: t('questArmadilloDropArmadilloEgg'), - }, { - type: 'eggs', - key: 'Armadillo', - text: t('questArmadilloDropArmadilloEgg'), - }, - ], - gp: 43, - exp: 350, - unlock: t('questArmadilloUnlockText'), - }, - }, - cow: { - text: t('questCowText'), - notes: t('questCowNotes'), - completion: t('questCowCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questCowBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Cow', - text: t('questCowDropCowEgg'), - }, { - type: 'eggs', - key: 'Cow', - text: t('questCowDropCowEgg'), - }, { - type: 'eggs', - key: 'Cow', - text: t('questCowDropCowEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questCowUnlockText'), - }, - }, - beetle: { - text: t('questBeetleText'), - notes: t('questBeetleNotes'), - completion: t('questBeetleCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questBeetleBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Beetle', - text: t('questBeetleDropBeetleEgg'), - }, { - type: 'eggs', - key: 'Beetle', - text: t('questBeetleDropBeetleEgg'), - }, { - type: 'eggs', - key: 'Beetle', - text: t('questBeetleDropBeetleEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questBeetleUnlockText'), - }, - }, - taskwoodsTerror1: { - text: t('questTaskwoodsTerror1Text'), - notes: t('questTaskwoodsTerror1Notes'), - group: 'questGroupTaskwoodsTerror', - completion: t('questTaskwoodsTerror1Completion'), - value: 4, - goldValue: 200, - category: 'gold', - boss: { - name: t('questTaskwoodsTerror1Boss'), - hp: 500, - rage: { - title: t('questTaskwoodsTerror1RageTitle'), - description: t('questTaskwoodsTerror1RageDescription'), - value: 50, - healing: 0.3, - effect: t('questTaskwoodsTerror1RageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Skeleton', - text: t('questTaskwoodsTerror1DropSkeletonPotion'), - }, { - type: 'hatchingPotions', - key: 'Red', - text: t('questTaskwoodsTerror1DropRedPotion'), - }, { - type: 'gear', - key: 'head_special_pyromancersTurban', - text: t('questTaskwoodsTerror1DropHeadgear'), - }, - ], - gp: 0, - exp: 500, - }, - }, - taskwoodsTerror2: { - text: t('questTaskwoodsTerror2Text'), - notes: t('questTaskwoodsTerror2Notes'), - group: 'questGroupTaskwoodsTerror', - completion: t('questTaskwoodsTerror2Completion'), - previous: 'taskwoodsTerror1', - value: 4, - goldValue: 300, - category: 'gold', - collect: { - pixie: { - text: t('questTaskwoodsTerror2CollectPixies'), - count: 25, - }, - brownie: { - text: t('questTaskwoodsTerror2CollectBrownies'), - count: 15, - }, - dryad: { - text: t('questTaskwoodsTerror2CollectDryads'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'gear', - key: 'armor_special_pyromancersRobes', - text: t('questTaskwoodsTerror2DropArmor'), - }, - ], - gp: 0, - exp: 75, - }, - }, - taskwoodsTerror3: { - text: t('questTaskwoodsTerror3Text'), - notes: t('questTaskwoodsTerror3Notes'), - group: 'questGroupTaskwoodsTerror', - completion: t('questTaskwoodsTerror3Completion'), - previous: 'taskwoodsTerror2', - value: 4, - goldValue: 400, - category: 'gold', - boss: { - name: t('questTaskwoodsTerror3Boss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'food', - key: 'Strawberry', - text: t('questTaskwoodsTerror3DropStrawberry'), - }, { - type: 'food', - key: 'Strawberry', - text: t('questTaskwoodsTerror3DropStrawberry'), - }, { - type: 'food', - key: 'Strawberry', - text: t('questTaskwoodsTerror3DropStrawberry'), - }, { - type: 'gear', - key: 'weapon_special_taskwoodsLantern', - text: t('questTaskwoodsTerror3DropWeapon'), - }, - ], - gp: 0, - exp: 650, - }, - }, - ferret: { - text: t('questFerretText'), - notes: t('questFerretNotes'), - completion: t('questFerretCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questFerretBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Ferret', - text: t('questFerretDropFerretEgg'), - }, { - type: 'eggs', - key: 'Ferret', - text: t('questFerretDropFerretEgg'), - }, { - type: 'eggs', - key: 'Ferret', - text: t('questFerretDropFerretEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questFerretUnlockText'), - }, - }, - dustbunnies: { - text: t('questDustBunniesText'), - notes: t('questDustBunniesNotes'), - group: 'questGroupEarnable', - completion: t('questDustBunniesCompletion'), - value: 1, - category: 'unlockable', - boss: { - name: t('questDustBunniesBoss'), - hp: 100, - str: 0.5, - }, - drop: { - gp: 8, - exp: 42, - }, - }, - moon1: { - text: t('questMoon1Text'), - notes: t('questMoon1Notes'), - group: 'questGroupMoon', - completion: t('questMoon1Completion'), - value: 4, - category: 'unlockable', - unlockCondition: { - condition: 'login reward', - incentiveThreshold: 7, - text: t('loginReward', { count: 7 }), - }, - collect: { - shard: { - text: t('questMoon1CollectShards'), - count: 20, - }, - }, - drop: { - items: [ - { - type: 'gear', - key: 'head_special_lunarWarriorHelm', - text: t('questMoon1DropHeadgear'), - }, - ], - gp: 7, - exp: 50, - }, - }, - moon2: { - text: t('questMoon2Text'), - notes: t('questMoon2Notes'), - group: 'questGroupMoon', - completion: t('questMoon2Completion'), - previous: 'moon1', - value: 4, - category: 'unlockable', - unlockCondition: { - condition: 'login reward', - incentiveThreshold: 22, - text: t('loginReward', { count: 22 }), - }, - boss: { - name: t('questMoon2Boss'), - hp: 100, - str: 1.5, - }, - drop: { - items: [ - { - type: 'gear', - key: 'armor_special_lunarWarriorArmor', - text: t('questMoon2DropArmor'), - }, - ], - gp: 37, - exp: 275, - }, - }, - moon3: { - text: t('questMoon3Text'), - notes: t('questMoon3Notes'), - group: 'questGroupMoon', - completion: t('questMoon3Completion'), - previous: 'moon2', - value: 4, - category: 'unlockable', - unlockCondition: { - condition: 'login reward', - incentiveThreshold: 40, - text: t('loginReward', { count: 40 }), - }, - boss: { - name: t('questMoon3Boss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'gear', - key: 'weapon_special_lunarScythe', - text: t('questMoon3DropWeapon'), - }, - ], - gp: 67, - exp: 650, - }, - }, - sloth: { - text: t('questSlothText'), - notes: t('questSlothNotes'), - completion: t('questSlothCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSlothBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Sloth', - text: t('questSlothDropSlothEgg'), - }, { - type: 'eggs', - key: 'Sloth', - text: t('questSlothDropSlothEgg'), - }, { - type: 'eggs', - key: 'Sloth', - text: t('questSlothDropSlothEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questSlothUnlockText'), - }, - }, - triceratops: { - text: t('questTriceratopsText'), - notes: t('questTriceratopsNotes'), - completion: t('questTriceratopsCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questTriceratopsBoss'), - hp: 1200, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Triceratops', - text: t('questTriceratopsDropTriceratopsEgg'), - }, { - type: 'eggs', - key: 'Triceratops', - text: t('questTriceratopsDropTriceratopsEgg'), - }, { - type: 'eggs', - key: 'Triceratops', - text: t('questTriceratopsDropTriceratopsEgg'), - }, - ], - gp: 80, - exp: 800, - unlock: t('questTriceratopsUnlockText'), - }, - }, - stoikalmCalamity1: { - text: t('questStoikalmCalamity1Text'), - notes: t('questStoikalmCalamity1Notes'), - group: 'questGroupStoikalmCalamity', - completion: t('questStoikalmCalamity1Completion'), - value: 4, - goldValue: 200, - category: 'gold', - boss: { - name: t('questStoikalmCalamity1Boss'), - hp: 500, - rage: { - title: t('questStoikalmCalamity1RageTitle'), - description: t('questStoikalmCalamity1RageDescription'), - value: 50, - healing: 0.3, - effect: t('questStoikalmCalamity1RageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Skeleton', - text: t('questStoikalmCalamity1DropSkeletonPotion'), - }, { - type: 'hatchingPotions', - key: 'Desert', - text: t('questStoikalmCalamity1DropDesertPotion'), - }, { - type: 'gear', - key: 'armor_special_mammothRiderArmor', - text: t('questStoikalmCalamity1DropArmor'), - }, - ], - gp: 0, - exp: 500, - }, - }, - stoikalmCalamity2: { - text: t('questStoikalmCalamity2Text'), - notes: t('questStoikalmCalamity2Notes'), - group: 'questGroupStoikalmCalamity', - completion: t('questStoikalmCalamity2Completion'), - previous: 'stoikalmCalamity1', - value: 4, - goldValue: 300, - category: 'gold', - collect: { - icicleCoin: { - text: t('questStoikalmCalamity2CollectIcicleCoins'), - count: 40, - }, - }, - drop: { - items: [ - { - type: 'gear', - key: 'head_special_mammothRiderHelm', - text: t('questStoikalmCalamity2DropHeadgear'), - }, - ], - gp: 0, - exp: 75, - }, - }, - stoikalmCalamity3: { - text: t('questStoikalmCalamity3Text'), - notes: t('questStoikalmCalamity3Notes'), - group: 'questGroupStoikalmCalamity', - completion: t('questStoikalmCalamity3Completion'), - previous: 'stoikalmCalamity2', - value: 4, - goldValue: 400, - category: 'gold', - boss: { - name: t('questStoikalmCalamity3Boss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'food', - key: 'CottonCandyBlue', - text: t('questStoikalmCalamity3DropBlueCottonCandy'), - }, { - type: 'food', - key: 'CottonCandyBlue', - text: t('questStoikalmCalamity3DropBlueCottonCandy'), - }, { - type: 'food', - key: 'CottonCandyBlue', - text: t('questStoikalmCalamity3DropBlueCottonCandy'), - }, { - type: 'gear', - key: 'weapon_special_mammothRiderSpear', - text: t('questStoikalmCalamity3DropWeapon'), - }, { - type: 'gear', - key: 'shield_special_mammothRiderHorn', - text: t('questStoikalmCalamity3DropShield'), - }, - ], - gp: 0, - exp: 650, - }, - }, - guineapig: { - text: t('questGuineaPigText'), - notes: t('questGuineaPigNotes'), - completion: t('questGuineaPigCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questGuineaPigBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'GuineaPig', - text: t('questGuineaPigDropGuineaPigEgg'), - }, { - type: 'eggs', - key: 'GuineaPig', - text: t('questGuineaPigDropGuineaPigEgg'), - }, { - type: 'eggs', - key: 'GuineaPig', - text: t('questGuineaPigDropGuineaPigEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questGuineaPigUnlockText'), - }, - }, - peacock: { - text: t('questPeacockText'), - notes: t('questPeacockNotes'), - completion: t('questPeacockCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questPeacockBoss'), - hp: 300, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Peacock', - text: t('questPeacockDropPeacockEgg'), - }, { - type: 'eggs', - key: 'Peacock', - text: t('questPeacockDropPeacockEgg'), - }, { - type: 'eggs', - key: 'Peacock', - text: t('questPeacockDropPeacockEgg'), - }, - ], - gp: 25, - exp: 125, - unlock: t('questPeacockUnlockText'), - }, - }, - butterfly: { - text: t('questButterflyText'), - notes: t('questButterflyNotes'), - completion: t('questButterflyCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questButterflyBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Butterfly', - text: t('questButterflyDropButterflyEgg'), - }, { - type: 'eggs', - key: 'Butterfly', - text: t('questButterflyDropButterflyEgg'), - }, { - type: 'eggs', - key: 'Butterfly', - text: t('questButterflyDropButterflyEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questButterflyUnlockText'), - }, - }, - mayhemMistiflying1: { - text: t('questMayhemMistiflying1Text'), - notes: t('questMayhemMistiflying1Notes'), - group: 'questGroupMayhemMistiflying', - completion: t('questMayhemMistiflying1Completion'), - value: 4, - goldValue: 200, - category: 'gold', - boss: { - name: t('questMayhemMistiflying1Boss'), - hp: 500, - rage: { - title: t('questMayhemMistiflying1RageTitle'), - description: t('questMayhemMistiflying1RageDescription'), - value: 50, - healing: 0.3, - effect: t('questMayhemMistiflying1RageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Skeleton', - text: t('questMayhemMistiflying1DropSkeletonPotion'), - }, { - type: 'hatchingPotions', - key: 'White', - text: t('questMayhemMistiflying1DropWhitePotion'), - }, { - type: 'gear', - key: 'armor_special_roguishRainbowMessengerRobes', - text: t('questMayhemMistiflying1DropArmor'), - }, - ], - gp: 0, - exp: 500, - }, - }, - mayhemMistiflying2: { - text: t('questMayhemMistiflying2Text'), - notes: t('questMayhemMistiflying2Notes'), - group: 'questGroupMayhemMistiflying', - completion: t('questMayhemMistiflying2Completion'), - previous: 'mayhemMistiflying1', - value: 4, - goldValue: 300, - category: 'gold', - collect: { - mistifly1: { - text: t('questMayhemMistiflying2CollectRedMistiflies'), - count: 25, - }, - mistifly2: { - text: t('questMayhemMistiflying2CollectBlueMistiflies'), - count: 15, - }, - mistifly3: { - text: t('questMayhemMistiflying2CollectGreenMistiflies'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'gear', - key: 'head_special_roguishRainbowMessengerHood', - text: t('questMayhemMistiflying2DropHeadgear'), - }, - ], - gp: 0, - exp: 75, - }, - }, - mayhemMistiflying3: { - text: t('questMayhemMistiflying3Text'), - notes: t('questMayhemMistiflying3Notes'), - group: 'questGroupMayhemMistiflying', - completion: t('questMayhemMistiflying3Completion'), - previous: 'mayhemMistiflying2', - value: 4, - goldValue: 400, - category: 'gold', - boss: { - name: t('questMayhemMistiflying3Boss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'food', - key: 'CottonCandyPink', - text: t('questMayhemMistiflying3DropPinkCottonCandy'), - }, { - type: 'food', - key: 'CottonCandyPink', - text: t('questMayhemMistiflying3DropPinkCottonCandy'), - }, { - type: 'food', - key: 'CottonCandyPink', - text: t('questMayhemMistiflying3DropPinkCottonCandy'), - }, { - type: 'gear', - key: 'weapon_special_roguishRainbowMessage', - text: t('questMayhemMistiflying3DropWeapon'), - }, { - type: 'gear', - key: 'shield_special_roguishRainbowMessage', - text: t('questMayhemMistiflying3DropShield'), - }, - ], - gp: 0, - exp: 650, - }, - }, - nudibranch: { - text: t('questNudibranchText'), - notes: t('questNudibranchNotes'), - completion: t('questNudibranchCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questNudibranchBoss'), - hp: 400, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Nudibranch', - text: t('questNudibranchDropNudibranchEgg'), - }, { - type: 'eggs', - key: 'Nudibranch', - text: t('questNudibranchDropNudibranchEgg'), - }, { - type: 'eggs', - key: 'Nudibranch', - text: t('questNudibranchDropNudibranchEgg'), - }, - ], - gp: 31, - exp: 200, - unlock: t('questNudibranchUnlockText'), - }, - }, - hippo: { - text: t('questHippoText'), - notes: t('questHippoNotes'), - completion: t('questHippoCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questHippoBoss'), - hp: 800, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Hippo', - text: t('questHippoDropHippoEgg'), - }, { - type: 'eggs', - key: 'Hippo', - text: t('questHippoDropHippoEgg'), - }, { - type: 'eggs', - key: 'Hippo', - text: t('questHippoDropHippoEgg'), - }, - ], - gp: 55, - exp: 500, - unlock: t('questHippoUnlockText'), - }, - }, - lostMasterclasser1: { - text: t('questLostMasterclasser1Text'), - notes: t('questLostMasterclasser1Notes'), - group: 'questGroupLostMasterclasser', - completion: t('questLostMasterclasser1Completion'), - value: 4, - goldValue: 400, - category: 'gold', - collect: { - ancientTome: { - text: t('questLostMasterclasser1CollectAncientTomes'), - count: 40, - }, - forbiddenTome: { - text: t('questLostMasterclasser1CollectForbiddenTomes'), - count: 40, - }, - hiddenTome: { - text: t('questLostMasterclasser1CollectHiddenTomes'), - count: 40, - }, - }, - drop: { - items: [ - { - type: 'food', - key: 'Potatoe', - text: t('foodPotatoe'), - }, { - type: 'food', - key: 'Potatoe', - text: t('foodPotatoe'), - }, { - type: 'food', - key: 'Potatoe', - text: t('foodPotatoe'), - }, { - type: 'food', - key: 'Meat', - text: t('foodMeat'), - }, { - type: 'food', - key: 'Meat', - text: t('foodMeat'), - }, { - type: 'food', - key: 'Meat', - text: t('foodMeat'), - }, { - type: 'food', - key: 'Milk', - text: t('foodMilk'), - }, { - type: 'food', - key: 'Milk', - text: t('foodMilk'), - }, { - type: 'food', - key: 'Milk', - text: t('foodMilk'), - }, - ], - gp: 0, - exp: 200, - }, - }, - lostMasterclasser2: { - text: t('questLostMasterclasser2Text'), - notes: t('questLostMasterclasser2Notes'), - group: 'questGroupLostMasterclasser', - previous: 'lostMasterclasser1', - completion: t('questLostMasterclasser2Completion'), - value: 4, - goldValue: 500, - category: 'gold', - boss: { - name: t('questLostMasterclasser2Boss'), - hp: 1500, - str: 2.5, - }, - drop: { - items: [ - { - type: 'food', - key: 'Chocolate', - text: t('foodChocolate'), - }, { - type: 'food', - key: 'Chocolate', - text: t('foodChocolate'), - }, { - type: 'food', - key: 'Chocolate', - text: t('foodChocolate'), - }, { - type: 'food', - key: 'Honey', - text: t('foodHoney'), - }, { - type: 'food', - key: 'Honey', - text: t('foodHoney'), - }, { - type: 'food', - key: 'Honey', - text: t('foodHoney'), - }, { - type: 'food', - key: 'RottenMeat', - text: t('foodRottenMeat'), - }, { - type: 'food', - key: 'RottenMeat', - text: t('foodRottenMeat'), - }, { - type: 'food', - key: 'RottenMeat', - text: t('foodRottenMeat'), - }, { - type: 'gear', - key: 'eyewear_special_aetherMask', - text: t('questLostMasterclasser2DropEyewear'), - }, - ], - gp: 0, - exp: 1500, - }, - }, - lostMasterclasser3: { - text: t('questLostMasterclasser3Text'), - notes: t('questLostMasterclasser3Notes'), - group: 'questGroupLostMasterclasser', - completion: t('questLostMasterclasser3Completion'), - previous: 'lostMasterclasser2', - value: 4, - goldValue: 600, - category: 'gold', - boss: { - name: t('questLostMasterclasser3Boss'), - hp: 2000, - str: 3, - rage: { - title: t('questLostMasterclasser3RageTitle'), - description: t('questLostMasterclasser3RageDescription'), - value: 25, - healing: 0.3, - effect: t('questLostMasterclasser3RageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Base', - text: t('questLostMasterclasser3DropBasePotion'), - }, { - type: 'hatchingPotions', - key: 'CottonCandyPink', - text: t('questLostMasterclasser3DropPinkPotion'), - }, { - type: 'hatchingPotions', - key: 'Golden', - text: t('questLostMasterclasser3DropGoldenPotion'), - }, { - type: 'hatchingPotions', - key: 'Shade', - text: t('questLostMasterclasser3DropShadePotion'), - }, { - type: 'hatchingPotions', - key: 'Zombie', - text: t('questLostMasterclasser3DropZombiePotion'), - }, { - type: 'gear', - key: 'body_special_aetherAmulet', - text: t('questLostMasterclasser3DropBodyAccessory'), - }, - ], - gp: 0, - exp: 2000, - }, - }, - lostMasterclasser4: { - text: t('questLostMasterclasser4Text'), - notes: t('questLostMasterclasser4Notes'), - group: 'questGroupLostMasterclasser', - completion: t('questLostMasterclasser4Completion'), - previous: 'lostMasterclasser3', - value: 4, - goldValue: 700, - category: 'gold', - boss: { - name: t('questLostMasterclasser4Boss'), - hp: 3000, - str: 4, - rage: { - title: t('questLostMasterclasser4RageTitle'), - description: t('questLostMasterclasser4RageDescription'), - value: 15, - mpDrain: true, - effect: t('questLostMasterclasser4RageEffect'), - }, - }, - drop: { - items: [ - { - type: 'mounts', - key: 'Aether-Invisible', - text: t('questLostMasterclasser4DropMount'), - }, { - type: 'gear', - key: 'back_special_aetherCloak', - text: t('questLostMasterclasser4DropBackAccessory'), - }, { - type: 'gear', - key: 'weapon_special_aetherCrystals', - text: t('questLostMasterclasser4DropWeapon'), - }, - ], - gp: 0, - exp: 3500, - }, - }, - yarn: { - text: t('questYarnText'), - notes: t('questYarnNotes'), - completion: t('questYarnCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questYarnBoss'), - hp: 500, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Yarn', - text: t('questYarnDropYarnEgg'), - }, { - type: 'eggs', - key: 'Yarn', - text: t('questYarnDropYarnEgg'), - }, { - type: 'eggs', - key: 'Yarn', - text: t('questYarnDropYarnEgg'), - }, - ], - gp: 37, - exp: 275, - unlock: t('questYarnUnlockText'), - }, - }, - pterodactyl: { - text: t('questPterodactylText'), - notes: t('questPterodactylNotes'), - completion: t('questPterodactylCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questPterodactylBoss'), - hp: 1000, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Pterodactyl', - text: t('questPterodactylDropPterodactylEgg'), - }, { - type: 'eggs', - key: 'Pterodactyl', - text: t('questPterodactylDropPterodactylEgg'), - }, { - type: 'eggs', - key: 'Pterodactyl', - text: t('questPterodactylDropPterodactylEgg'), - }, - ], - gp: 67, - exp: 650, - unlock: t('questPterodactylUnlockText'), - }, - }, - badger: { - text: t('questBadgerText'), - notes: t('questBadgerNotes'), - completion: t('questBadgerCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questBadgerBoss'), - hp: 600, - str: 1.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Badger', - text: t('questBadgerDropBadgerEgg'), - }, { - type: 'eggs', - key: 'Badger', - text: t('questBadgerDropBadgerEgg'), - }, { - type: 'eggs', - key: 'Badger', - text: t('questBadgerDropBadgerEgg'), - }, - ], - gp: 43, - exp: 350, - unlock: t('questBadgerUnlockText'), - }, - }, - dysheartener: { - text: t('questDysheartenerText'), - notes: t('questDysheartenerNotes'), - completion: t('questDysheartenerCompletion'), - completionChat: t('questDysheartenerCompletionChat'), - value: 0, - canBuy () { - return false; - }, - category: 'world', - boss: { - name: t('questDysheartenerText'), - hp: 17000000, - str: 1.25, - def: 1, - rage: { - title: t('questDysheartenerBossRageTitle'), - description: t('questDysheartenerBossRageDescription'), - value: 500000, - seasonalShop: t('questDysheartenerBossRageSeasonal'), - market: t('questDysheartenerBossRageMarket'), - quests: t('questDysheartenerBossRageQuests'), - }, - }, - colors: { - dark: '#410F2A', - medium: '#5C1130', - light: '#931F4D', - extralight: '#DC4069', - }, - drop: { - items: [ - { - type: 'pets', - key: 'Hippogriff-Hopeful', - text: t('questDysheartenerDropHippogriffPet'), - }, { - type: 'mounts', - key: 'Hippogriff-Hopeful', - text: t('questDysheartenerDropHippogriffMount'), - }, { - type: 'food', - key: 'Cake_Base', - text: t('foodCakeBase'), - }, { - type: 'food', - key: 'Candy_White', - text: t('foodCandyWhite'), - }, { - type: 'food', - key: 'Cake_Desert', - text: t('foodCakeDesert'), - }, { - type: 'food', - key: 'Candy_Red', - text: t('foodCandyRed'), - }, { - type: 'food', - key: 'Cake_Shade', - text: t('foodCakeShade'), - }, { - type: 'food', - key: 'Candy_Skeleton', - text: t('foodCandySkeleton'), - }, { - type: 'food', - key: 'Cake_Zombie', - text: t('foodCakeZombie'), - }, { - type: 'food', - key: 'Candy_CottonCandyPink', - text: t('foodCandyCottonCandyPink'), - }, { - type: 'food', - key: 'Candy_CottonCandyBlue', - text: t('foodCandyCottonCandyBlue'), - }, { - type: 'food', - key: 'Cake_Golden', - text: t('foodCakeGolden'), - }, - ], - gp: 0, - exp: 0, - }, - }, - squirrel: { - text: t('questSquirrelText'), - notes: t('questSquirrelNotes'), - completion: t('questSquirrelCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSquirrelBoss'), - hp: 700, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Squirrel', - text: t('questSquirrelDropSquirrelEgg'), - }, { - type: 'eggs', - key: 'Squirrel', - text: t('questSquirrelDropSquirrelEgg'), - }, { - type: 'eggs', - key: 'Squirrel', - text: t('questSquirrelDropSquirrelEgg'), - }, - ], - gp: 49, - exp: 425, - unlock: t('questSquirrelUnlockText'), - }, - }, - seaserpent: { - text: t('questSeaSerpentText'), - notes: t('questSeaSerpentNotes'), - completion: t('questSeaSerpentCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questSeaSerpentBoss'), - hp: 1200, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'SeaSerpent', - text: t('questSeaSerpentDropSeaSerpentEgg'), - }, { - type: 'eggs', - key: 'SeaSerpent', - text: t('questSeaSerpentDropSeaSerpentEgg'), - }, { - type: 'eggs', - key: 'SeaSerpent', - text: t('questSeaSerpentDropSeaSerpentEgg'), - }, - ], - gp: 80, - exp: 800, - unlock: t('questSeaSerpentUnlockText'), - }, - }, - kangaroo: { - text: t('questKangarooText'), - notes: t('questKangarooNotes'), - completion: t('questKangarooCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questKangarooBoss'), - hp: 700, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Kangaroo', - text: t('questKangarooDropKangarooEgg'), - }, { - type: 'eggs', - key: 'Kangaroo', - text: t('questKangarooDropKangarooEgg'), - }, { - type: 'eggs', - key: 'Kangaroo', - text: t('questKangarooDropKangarooEgg'), - }, - ], - gp: 49, - exp: 425, - unlock: t('questKangarooUnlockText'), - }, - }, - alligator: { - text: t('questAlligatorText'), - notes: t('questAlligatorNotes'), - completion: t('questAlligatorCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questAlligatorBoss'), - hp: 1100, - str: 2.5, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Alligator', - text: t('questAlligatorDropAlligatorEgg'), - }, { - type: 'eggs', - key: 'Alligator', - text: t('questAlligatorDropAlligatorEgg'), - }, { - type: 'eggs', - key: 'Alligator', - text: t('questAlligatorDropAlligatorEgg'), - }, - ], - gp: 73, - exp: 725, - unlock: t('questAlligatorUnlockText'), - }, - }, - velociraptor: { - text: t('questVelociraptorText'), - notes: t('questVelociraptorNotes'), - completion: t('questVelociraptorCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questVelociraptorBoss'), - hp: 900, - str: 2, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Velociraptor', - text: t('questVelociraptorDropVelociraptorEgg'), - }, { - type: 'eggs', - key: 'Velociraptor', - text: t('questVelociraptorDropVelociraptorEgg'), - }, { - type: 'eggs', - key: 'Velociraptor', - text: t('questVelociraptorDropVelociraptorEgg'), - }, - ], - gp: 63, - exp: 575, - unlock: t('questVelociraptorUnlockText'), - }, - }, - bronze: { - text: t('questBronzeText'), - notes: t('questBronzeNotes'), - completion: t('questBronzeCompletion'), - value: 4, - category: 'hatchingPotion', - boss: { - name: t('questBronzeBoss'), - hp: 800, - str: 2, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Bronze', - text: t('questBronzeDropBronzePotion'), - }, { - type: 'hatchingPotions', - key: 'Bronze', - text: t('questBronzeDropBronzePotion'), - }, { - type: 'hatchingPotions', - key: 'Bronze', - text: t('questBronzeDropBronzePotion'), - }, - ], - gp: 63, - exp: 575, - unlock: t('questBronzeUnlockText'), - }, - }, - dolphin: { - text: t('questDolphinText'), - notes: t('questDolphinNotes'), - completion: t('questDolphinCompletion'), - value: 4, - category: 'pet', - boss: { - name: t('questDolphinBoss'), - hp: 300, - str: 1.25, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Dolphin', - text: t('questDolphinDropDolphinEgg'), - }, { - type: 'eggs', - key: 'Dolphin', - text: t('questDolphinDropDolphinEgg'), - }, { - type: 'eggs', - key: 'Dolphin', - text: t('questDolphinDropDolphinEgg'), - }, - ], - gp: 22, - exp: 110, - unlock: t('questDolphinUnlockText'), - }, - }, - silver: { - text: t('questSilverText'), - notes: t('questSilverNotes'), - completion: t('questSilverCompletion'), - value: 4, - category: 'hatchingPotion', - collect: { - silverIngot: { - text: t('questSilverCollectSilverIngots'), - count: 20, - }, - moonRune: { - text: t('questSilverCollectMoonRunes'), - count: 15, - }, - cancerRune: { - text: t('questSilverCollectCancerRunes'), - count: 15, - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Silver', - text: t('questSilverDropSilverPotion'), - }, { - type: 'hatchingPotions', - key: 'Silver', - text: t('questSilverDropSilverPotion'), - }, { - type: 'hatchingPotions', - key: 'Silver', - text: t('questSilverDropSilverPotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questSilverUnlockText'), - }, - }, - robot: { - text: t('questRobotText'), - notes: t('questRobotNotes'), - completion: t('questRobotCompletion'), - value: 1, - category: 'timeTravelers', - canBuy () { - return false; - }, - collect: { - bolt: { - text: t('questRobotCollectBolts'), - count: 15, - }, - gear: { - text: t('questRobotCollectGears'), - count: 10, - }, - spring: { - text: t('questRobotCollectSprings'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'eggs', - key: 'Robot', - text: t('questRobotDropRobotEgg'), - }, { - type: 'eggs', - key: 'Robot', - text: t('questRobotDropRobotEgg'), - }, { - type: 'eggs', - key: 'Robot', - text: t('questRobotDropRobotEgg'), - }, - ], - gp: 40, - exp: 75, - unlock: t('questRobotUnlockText'), - }, - }, - amber: { - text: t('questAmberText'), - notes: t('questAmberNotes'), - completion: t('questAmberCompletion'), - value: 4, - category: 'hatchingPotion', - boss: { - name: t('questAmberBoss'), - hp: 300, - str: 1.25, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Amber', - text: t('questAmberDropAmberPotion'), - }, { - type: 'hatchingPotions', - key: 'Amber', - text: t('questAmberDropAmberPotion'), - }, { - type: 'hatchingPotions', - key: 'Amber', - text: t('questAmberDropAmberPotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questAmberUnlockText'), - }, - }, - ruby: { - text: t('questRubyText'), - notes: t('questRubyNotes'), - completion: t('questRubyCompletion'), - value: 4, - category: 'hatchingPotion', - collect: { - rubyGem: { - text: t('questRubyCollectRubyGems'), - count: 25, - }, - venusRune: { - text: t('questRubyCollectVenusRunes'), - count: 10, - }, - aquariusRune: { - text: t('questRubyCollectAquariusRunes'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Ruby', - text: t('questRubyDropRubyPotion'), - }, { - type: 'hatchingPotions', - key: 'Ruby', - text: t('questRubyDropRubyPotion'), - }, { - type: 'hatchingPotions', - key: 'Ruby', - text: t('questRubyDropRubyPotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questRubyUnlockText'), - }, - }, - waffle: { - text: t('questWaffleText'), - notes: t('questWaffleNotes'), - completion: t('questWaffleCompletion'), - value: 4, - category: 'hatchingPotion', - canBuy () { - return CURRENT_EVENT && CURRENT_EVENT.season === 'spring'; - }, - event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, - boss: { - name: t('questWaffleBoss'), - hp: 500, - str: 2, - rage: { - title: t('questWaffleRageTitle'), - description: t('questWaffleRageDescription'), - value: 50, - progressDrain: 0.5, - effect: t('questWaffleRageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Dessert', - text: t('questWaffleDropDessertPotion'), - }, { - type: 'hatchingPotions', - key: 'Dessert', - text: t('questWaffleDropDessertPotion'), - }, { - type: 'hatchingPotions', - key: 'Dessert', - text: t('questWaffleDropDessertPotion'), - }, - ], - gp: 40, - exp: 500, - unlock: t('questWaffleUnlockText'), - }, - }, - fluorite: { - text: t('questFluoriteText'), - notes: t('questFluoriteNotes'), - completion: t('questFluoriteCompletion'), - value: 4, - category: 'hatchingPotion', - boss: { - name: t('questFluoriteBoss'), - hp: 1200, - str: 2, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Fluorite', - text: t('questFluoriteDropFluoritePotion'), - }, { - type: 'hatchingPotions', - key: 'Fluorite', - text: t('questFluoriteDropFluoritePotion'), - }, { - type: 'hatchingPotions', - key: 'Fluorite', - text: t('questFluoriteDropFluoritePotion'), - }, - ], - gp: 70, - exp: 750, - unlock: t('questFluoriteUnlockText'), - }, - }, - windup: { - text: t('questWindupText'), - notes: t('questWindupNotes'), - completion: t('questWindupCompletion'), - value: 1, - category: 'timeTravelers', - canBuy () { - return false; - }, - boss: { - name: t('questWindupBoss'), - hp: 1000, - str: 1, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Windup', - text: t('questWindupDropWindupPotion'), - }, { - type: 'hatchingPotions', - key: 'Windup', - text: t('questWindupDropWindupPotion'), - }, { - type: 'hatchingPotions', - key: 'Windup', - text: t('questWindupDropWindupPotion'), - }, - ], - gp: 50, - exp: 425, - unlock: t('questWindupUnlockText'), - }, - }, - turquoise: { - text: t('questTurquoiseText'), - notes: t('questTurquoiseNotes'), - completion: t('questTurquoiseCompletion'), - value: 4, - category: 'hatchingPotion', - collect: { - turquoiseGem: { - text: t('questTurquoiseCollectTurquoiseGems'), - count: 25, - }, - sagittariusRune: { - text: t('questTurquoiseCollectSagittariusRunes'), - count: 10, - }, - neptuneRune: { - text: t('questTurquoiseCollectNeptuneRunes'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Turquoise', - text: t('questTurquoiseDropTurquoisePotion'), - }, { - type: 'hatchingPotions', - key: 'Turquoise', - text: t('questTurquoiseDropTurquoisePotion'), - }, { - type: 'hatchingPotions', - key: 'Turquoise', - text: t('questTurquoiseDropTurquoisePotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questTurquoiseUnlockText'), - }, - }, - blackPearl: { - text: t('questBlackPearlText'), - notes: t('questBlackPearlNotes'), - completion: t('questBlackPearlCompletion'), - value: 4, - category: 'hatchingPotion', - boss: { - name: t('questBlackPearlBoss'), - hp: 725, - str: 1.75, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'BlackPearl', - text: t('questBlackPearlDropBlackPearlPotion'), - }, { - type: 'hatchingPotions', - key: 'BlackPearl', - text: t('questBlackPearlDropBlackPearlPotion'), - }, { - type: 'hatchingPotions', - key: 'BlackPearl', - text: t('questBlackPearlDropBlackPearlPotion'), - }, - ], - gp: 50, - exp: 450, - unlock: t('questBlackPearlUnlockText'), - }, - }, - stone: { - text: t('questStoneText'), - notes: t('questStoneNotes'), - completion: t('questStoneCompletion'), - value: 4, - category: 'hatchingPotion', - collect: { - mossyStone: { - text: t('questStoneCollectMossyStones'), - count: 25, - }, - marsRune: { - text: t('questStoneCollectMarsRunes'), - count: 10, - }, - capricornRune: { - text: t('questStoneCollectCapricornRunes'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'MossyStone', - text: t('questStoneDropMossyStonePotion'), - }, { - type: 'hatchingPotions', - key: 'MossyStone', - text: t('questStoneDropMossyStonePotion'), - }, { - type: 'hatchingPotions', - key: 'MossyStone', - text: t('questStoneDropMossyStonePotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questStoneUnlockText'), - }, - }, - solarSystem: { - text: t('questSolarSystemText'), - notes: t('questSolarSystemNotes'), - completion: t('questSolarSystemCompletion'), - value: 1, - category: 'timeTravelers', - canBuy () { - return false; - }, - boss: { - name: t('questSolarSystemBoss'), - hp: 1500, - str: 2.5, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'SolarSystem', - text: t('questSolarSystemDropSolarSystemPotion'), - }, { - type: 'hatchingPotions', - key: 'SolarSystem', - text: t('questSolarSystemDropSolarSystemPotion'), - }, { - type: 'hatchingPotions', - key: 'SolarSystem', - text: t('questSolarSystemDropSolarSystemPotion'), - }, - ], - gp: 90, - exp: 900, - unlock: t('questSolarSystemUnlockText'), - }, - }, - onyx: { - text: t('questOnyxText'), - notes: t('questOnyxNotes'), - completion: t('questOnyxCompletion'), - value: 4, - category: 'hatchingPotion', - collect: { - onyxStone: { - text: t('questOnyxCollectOnyxStones'), - count: 25, - }, - plutoRune: { - text: t('questOnyxCollectPlutoRunes'), - count: 10, - }, - leoRune: { - text: t('questOnyxCollectLeoRunes'), - count: 10, - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'Onyx', - text: t('questOnyxDropOnyxPotion'), - }, { - type: 'hatchingPotions', - key: 'Onyx', - text: t('questOnyxDropOnyxPotion'), - }, { - type: 'hatchingPotions', - key: 'Onyx', - text: t('questOnyxDropOnyxPotion'), - }, - ], - gp: 50, - exp: 100, - unlock: t('questOnyxUnlockText'), - }, - }, - virtualpet: { - text: t('questVirtualPetText'), - notes: t('questVirtualPetNotes'), - completion: t('questVirtualPetCompletion'), - value: 4, - category: 'hatchingPotion', - canBuy () { - return CURRENT_EVENT && CURRENT_EVENT.season === 'spring'; - }, - event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, - boss: { - name: t('questVirtualPetBoss'), - hp: 500, - str: 2, - rage: { - title: t('questVirtualPetRageTitle'), - description: t('questVirtualPetRageDescription'), - value: 50, - progressDrain: 0.5, - effect: t('questVirtualPetRageEffect'), - }, - }, - drop: { - items: [ - { - type: 'hatchingPotions', - key: 'VirtualPet', - text: t('questVirtualPetDropVirtualPetPotion'), - }, { - type: 'hatchingPotions', - key: 'VirtualPet', - text: t('questVirtualPetDropVirtualPetPotion'), - }, { - type: 'hatchingPotions', - key: 'VirtualPet', - text: t('questVirtualPetDropVirtualPetPotion'), - }, - ], - gp: 40, - exp: 500, - unlock: t('questVirtualPetUnlockText'), - }, - }, + ...questGeneric, + ...questMasterclasser, + ...questPets, + ...questPotions, + ...questSeasonal, + ...questSeries, + ...questTimeTravel, + ...questWorld, }; each(quests, (v, key) => { diff --git a/website/common/script/content/quests/generic.js b/website/common/script/content/quests/generic.js new file mode 100644 index 0000000000..1cb2648473 --- /dev/null +++ b/website/common/script/content/quests/generic.js @@ -0,0 +1,44 @@ +import t from '../translation'; + +const QUEST_GENERIC = { + basilist: { + text: t('questBasilistText'), + notes: t('questBasilistNotes'), + group: 'questGroupEarnable', + completion: t('questBasilistCompletion'), + goldValue: 100, + category: 'unlockable', + unlockCondition: { + condition: 'party invite', + text: t('inviteFriends'), + }, + boss: { + name: t('questBasilistBoss'), + hp: 100, + str: 0.5, + }, + drop: { + gp: 8, + exp: 42, + }, + }, + dustbunnies: { + text: t('questDustBunniesText'), + notes: t('questDustBunniesNotes'), + group: 'questGroupEarnable', + completion: t('questDustBunniesCompletion'), + value: 1, + category: 'unlockable', + boss: { + name: t('questDustBunniesBoss'), + hp: 100, + str: 0.5, + }, + drop: { + gp: 8, + exp: 42, + }, + }, +}; + +export default QUEST_GENERIC; diff --git a/website/common/script/content/quests/masterclasser.js b/website/common/script/content/quests/masterclasser.js new file mode 100644 index 0000000000..b3b56bbc6f --- /dev/null +++ b/website/common/script/content/quests/masterclasser.js @@ -0,0 +1,731 @@ +import t from '../translation'; + +const QUEST_MASTERCLASSER = { + dilatoryDistress1: { + text: t('questDilatoryDistress1Text'), + notes: t('questDilatoryDistress1Notes'), + group: 'questGroupDilatoryDistress', + completion: t('questDilatoryDistress1Completion'), + value: 4, + goldValue: 200, + category: 'gold', + collect: { + fireCoral: { + text: t('questDilatoryDistress1CollectFireCoral'), + count: 20, + }, + blueFins: { + text: t('questDilatoryDistress1CollectBlueFins'), + count: 20, + }, + }, + drop: { + items: [ + { + type: 'gear', + key: 'armor_special_finnedOceanicArmor', + text: t('questDilatoryDistress1DropArmor'), + }, + ], + gp: 0, + exp: 75, + }, + }, + dilatoryDistress2: { + text: t('questDilatoryDistress2Text'), + notes: t('questDilatoryDistress2Notes'), + group: 'questGroupDilatoryDistress', + completion: t('questDilatoryDistress2Completion'), + previous: 'dilatoryDistress1', + prereqQuests: [ + 'dilatoryDistress1', + ], + value: 4, + goldValue: 300, + category: 'gold', + boss: { + name: t('questDilatoryDistress2Boss'), + hp: 500, + rage: { + title: t('questDilatoryDistress2RageTitle'), + description: t('questDilatoryDistress2RageDescription'), + value: 50, + healing: 0.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'), + }, + ], + gp: 0, + exp: 500, + }, + }, + dilatoryDistress3: { + text: t('questDilatoryDistress3Text'), + notes: t('questDilatoryDistress3Notes'), + group: 'questGroupDilatoryDistress', + completion: t('questDilatoryDistress3Completion'), + previous: 'dilatoryDistress2', + prereqQuests: [ + 'dilatoryDistress1', + 'dilatoryDistress2', + ], + value: 4, + goldValue: 400, + category: 'gold', + boss: { + name: t('questDilatoryDistress3Boss'), + 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'), + }, + ], + gp: 0, + exp: 650, + }, + }, + mayhemMistiflying1: { + text: t('questMayhemMistiflying1Text'), + notes: t('questMayhemMistiflying1Notes'), + group: 'questGroupMayhemMistiflying', + completion: t('questMayhemMistiflying1Completion'), + value: 4, + goldValue: 200, + category: 'gold', + boss: { + name: t('questMayhemMistiflying1Boss'), + hp: 500, + rage: { + title: t('questMayhemMistiflying1RageTitle'), + description: t('questMayhemMistiflying1RageDescription'), + value: 50, + healing: 0.3, + effect: t('questMayhemMistiflying1RageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Skeleton', + text: t('questMayhemMistiflying1DropSkeletonPotion'), + }, { + type: 'hatchingPotions', + key: 'White', + text: t('questMayhemMistiflying1DropWhitePotion'), + }, { + type: 'gear', + key: 'armor_special_roguishRainbowMessengerRobes', + text: t('questMayhemMistiflying1DropArmor'), + }, + ], + gp: 0, + exp: 500, + }, + }, + mayhemMistiflying2: { + text: t('questMayhemMistiflying2Text'), + notes: t('questMayhemMistiflying2Notes'), + group: 'questGroupMayhemMistiflying', + completion: t('questMayhemMistiflying2Completion'), + previous: 'mayhemMistiflying1', + prereqQuests: [ + 'mayhemMistiflying1', + ], + value: 4, + goldValue: 300, + category: 'gold', + collect: { + mistifly1: { + text: t('questMayhemMistiflying2CollectRedMistiflies'), + count: 25, + }, + mistifly2: { + text: t('questMayhemMistiflying2CollectBlueMistiflies'), + count: 15, + }, + mistifly3: { + text: t('questMayhemMistiflying2CollectGreenMistiflies'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'gear', + key: 'head_special_roguishRainbowMessengerHood', + text: t('questMayhemMistiflying2DropHeadgear'), + }, + ], + gp: 0, + exp: 75, + }, + }, + mayhemMistiflying3: { + text: t('questMayhemMistiflying3Text'), + notes: t('questMayhemMistiflying3Notes'), + group: 'questGroupMayhemMistiflying', + completion: t('questMayhemMistiflying3Completion'), + previous: 'mayhemMistiflying2', + prereqQuests: [ + 'mayhemMistiflying1', + 'mayhemMistiflying2', + ], + value: 4, + goldValue: 400, + category: 'gold', + boss: { + name: t('questMayhemMistiflying3Boss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'food', + key: 'CottonCandyPink', + text: t('questMayhemMistiflying3DropPinkCottonCandy'), + }, { + type: 'food', + key: 'CottonCandyPink', + text: t('questMayhemMistiflying3DropPinkCottonCandy'), + }, { + type: 'food', + key: 'CottonCandyPink', + text: t('questMayhemMistiflying3DropPinkCottonCandy'), + }, { + type: 'gear', + key: 'weapon_special_roguishRainbowMessage', + text: t('questMayhemMistiflying3DropWeapon'), + }, { + type: 'gear', + key: 'shield_special_roguishRainbowMessage', + text: t('questMayhemMistiflying3DropShield'), + }, + ], + gp: 0, + exp: 650, + }, + }, + stoikalmCalamity1: { + text: t('questStoikalmCalamity1Text'), + notes: t('questStoikalmCalamity1Notes'), + group: 'questGroupStoikalmCalamity', + completion: t('questStoikalmCalamity1Completion'), + value: 4, + goldValue: 200, + category: 'gold', + boss: { + name: t('questStoikalmCalamity1Boss'), + hp: 500, + rage: { + title: t('questStoikalmCalamity1RageTitle'), + description: t('questStoikalmCalamity1RageDescription'), + value: 50, + healing: 0.3, + effect: t('questStoikalmCalamity1RageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Skeleton', + text: t('questStoikalmCalamity1DropSkeletonPotion'), + }, { + type: 'hatchingPotions', + key: 'Desert', + text: t('questStoikalmCalamity1DropDesertPotion'), + }, { + type: 'gear', + key: 'armor_special_mammothRiderArmor', + text: t('questStoikalmCalamity1DropArmor'), + }, + ], + gp: 0, + exp: 500, + }, + }, + stoikalmCalamity2: { + text: t('questStoikalmCalamity2Text'), + notes: t('questStoikalmCalamity2Notes'), + group: 'questGroupStoikalmCalamity', + completion: t('questStoikalmCalamity2Completion'), + previous: 'stoikalmCalamity1', + prereqQuests: [ + 'stoikalmCalamity1', + ], + value: 4, + goldValue: 300, + category: 'gold', + collect: { + icicleCoin: { + text: t('questStoikalmCalamity2CollectIcicleCoins'), + count: 40, + }, + }, + drop: { + items: [ + { + type: 'gear', + key: 'head_special_mammothRiderHelm', + text: t('questStoikalmCalamity2DropHeadgear'), + }, + ], + gp: 0, + exp: 75, + }, + }, + stoikalmCalamity3: { + text: t('questStoikalmCalamity3Text'), + notes: t('questStoikalmCalamity3Notes'), + group: 'questGroupStoikalmCalamity', + completion: t('questStoikalmCalamity3Completion'), + previous: 'stoikalmCalamity2', + prereqQuests: [ + 'stoikalmCalamity1', + 'stoikalmCalamity2', + ], + value: 4, + goldValue: 400, + category: 'gold', + boss: { + name: t('questStoikalmCalamity3Boss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'food', + key: 'CottonCandyBlue', + text: t('questStoikalmCalamity3DropBlueCottonCandy'), + }, { + type: 'food', + key: 'CottonCandyBlue', + text: t('questStoikalmCalamity3DropBlueCottonCandy'), + }, { + type: 'food', + key: 'CottonCandyBlue', + text: t('questStoikalmCalamity3DropBlueCottonCandy'), + }, { + type: 'gear', + key: 'weapon_special_mammothRiderSpear', + text: t('questStoikalmCalamity3DropWeapon'), + }, { + type: 'gear', + key: 'shield_special_mammothRiderHorn', + text: t('questStoikalmCalamity3DropShield'), + }, + ], + gp: 0, + exp: 650, + }, + }, + taskwoodsTerror1: { + text: t('questTaskwoodsTerror1Text'), + notes: t('questTaskwoodsTerror1Notes'), + group: 'questGroupTaskwoodsTerror', + completion: t('questTaskwoodsTerror1Completion'), + value: 4, + goldValue: 200, + category: 'gold', + boss: { + name: t('questTaskwoodsTerror1Boss'), + hp: 500, + rage: { + title: t('questTaskwoodsTerror1RageTitle'), + description: t('questTaskwoodsTerror1RageDescription'), + value: 50, + healing: 0.3, + effect: t('questTaskwoodsTerror1RageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Skeleton', + text: t('questTaskwoodsTerror1DropSkeletonPotion'), + }, { + type: 'hatchingPotions', + key: 'Red', + text: t('questTaskwoodsTerror1DropRedPotion'), + }, { + type: 'gear', + key: 'head_special_pyromancersTurban', + text: t('questTaskwoodsTerror1DropHeadgear'), + }, + ], + gp: 0, + exp: 500, + }, + }, + taskwoodsTerror2: { + text: t('questTaskwoodsTerror2Text'), + notes: t('questTaskwoodsTerror2Notes'), + group: 'questGroupTaskwoodsTerror', + completion: t('questTaskwoodsTerror2Completion'), + previous: 'taskwoodsTerror1', + prereqQuests: [ + 'taskwoodsTerror1', + ], + value: 4, + goldValue: 300, + category: 'gold', + collect: { + pixie: { + text: t('questTaskwoodsTerror2CollectPixies'), + count: 25, + }, + brownie: { + text: t('questTaskwoodsTerror2CollectBrownies'), + count: 15, + }, + dryad: { + text: t('questTaskwoodsTerror2CollectDryads'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'gear', + key: 'armor_special_pyromancersRobes', + text: t('questTaskwoodsTerror2DropArmor'), + }, + ], + gp: 0, + exp: 75, + }, + }, + taskwoodsTerror3: { + text: t('questTaskwoodsTerror3Text'), + notes: t('questTaskwoodsTerror3Notes'), + group: 'questGroupTaskwoodsTerror', + completion: t('questTaskwoodsTerror3Completion'), + previous: 'taskwoodsTerror2', + prereqQuests: [ + 'taskwoodsTerror1', + 'taskwoodsTerror2', + ], + value: 4, + goldValue: 400, + category: 'gold', + boss: { + name: t('questTaskwoodsTerror3Boss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'food', + key: 'Strawberry', + text: t('questTaskwoodsTerror3DropStrawberry'), + }, { + type: 'food', + key: 'Strawberry', + text: t('questTaskwoodsTerror3DropStrawberry'), + }, { + type: 'food', + key: 'Strawberry', + text: t('questTaskwoodsTerror3DropStrawberry'), + }, { + type: 'gear', + key: 'weapon_special_taskwoodsLantern', + text: t('questTaskwoodsTerror3DropWeapon'), + }, + ], + gp: 0, + exp: 650, + }, + }, + // final quest series in Masterclasser + lostMasterclasser1: { + text: t('questLostMasterclasser1Text'), + notes: t('questLostMasterclasser1Notes'), + group: 'questGroupLostMasterclasser', + completion: t('questLostMasterclasser1Completion'), + value: 4, + prereqQuests: [ + 'dilatoryDistress1', + 'dilatoryDistress2', + 'dilatoryDistress3', + 'mayhemMistiflying1', + 'mayhemMistiflying2', + 'mayhemMistiflying3', + 'stoikalmCalamity1', + 'stoikalmCalamity2', + 'stoikalmCalamity3', + 'taskwoodsTerror1', + 'taskwoodsTerror2', + 'taskwoodsTerror3', + ], + goldValue: 400, + category: 'gold', + collect: { + ancientTome: { + text: t('questLostMasterclasser1CollectAncientTomes'), + count: 40, + }, + forbiddenTome: { + text: t('questLostMasterclasser1CollectForbiddenTomes'), + count: 40, + }, + hiddenTome: { + text: t('questLostMasterclasser1CollectHiddenTomes'), + count: 40, + }, + }, + drop: { + items: [ + { + type: 'food', + key: 'Potatoe', + text: t('foodPotatoe'), + }, { + type: 'food', + key: 'Potatoe', + text: t('foodPotatoe'), + }, { + type: 'food', + key: 'Potatoe', + text: t('foodPotatoe'), + }, { + type: 'food', + key: 'Meat', + text: t('foodMeat'), + }, { + type: 'food', + key: 'Meat', + text: t('foodMeat'), + }, { + type: 'food', + key: 'Meat', + text: t('foodMeat'), + }, { + type: 'food', + key: 'Milk', + text: t('foodMilk'), + }, { + type: 'food', + key: 'Milk', + text: t('foodMilk'), + }, { + type: 'food', + key: 'Milk', + text: t('foodMilk'), + }, + ], + gp: 0, + exp: 200, + }, + }, + lostMasterclasser2: { + text: t('questLostMasterclasser2Text'), + notes: t('questLostMasterclasser2Notes'), + group: 'questGroupLostMasterclasser', + previous1: 'lostMasterclasser1', + completion: t('questLostMasterclasser2Completion'), + prereqQuests: [ + 'lostMasterclasser1', + ], + value: 4, + goldValue: 500, + category: 'gold', + boss: { + name: t('questLostMasterclasser2Boss'), + hp: 1500, + str: 2.5, + }, + drop: { + items: [ + { + type: 'food', + key: 'Chocolate', + text: t('foodChocolate'), + }, { + type: 'food', + key: 'Chocolate', + text: t('foodChocolate'), + }, { + type: 'food', + key: 'Chocolate', + text: t('foodChocolate'), + }, { + type: 'food', + key: 'Honey', + text: t('foodHoney'), + }, { + type: 'food', + key: 'Honey', + text: t('foodHoney'), + }, { + type: 'food', + key: 'Honey', + text: t('foodHoney'), + }, { + type: 'food', + key: 'RottenMeat', + text: t('foodRottenMeat'), + }, { + type: 'food', + key: 'RottenMeat', + text: t('foodRottenMeat'), + }, { + type: 'food', + key: 'RottenMeat', + text: t('foodRottenMeat'), + }, { + type: 'gear', + key: 'eyewear_special_aetherMask', + text: t('questLostMasterclasser2DropEyewear'), + }, + ], + gp: 0, + exp: 1500, + }, + }, + lostMasterclasser3: { + text: t('questLostMasterclasser3Text'), + notes: t('questLostMasterclasser3Notes'), + group: 'questGroupLostMasterclasser', + completion: t('questLostMasterclasser3Completion'), + previous: 'lostMasterclasser2', + prereqQuests: [ + 'lostMasterclasser1', + 'lostMasterclasser2', + ], + value: 4, + goldValue: 600, + category: 'gold', + boss: { + name: t('questLostMasterclasser3Boss'), + hp: 2000, + str: 3, + rage: { + title: t('questLostMasterclasser3RageTitle'), + description: t('questLostMasterclasser3RageDescription'), + value: 25, + healing: 0.3, + effect: t('questLostMasterclasser3RageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Base', + text: t('questLostMasterclasser3DropBasePotion'), + }, { + type: 'hatchingPotions', + key: 'CottonCandyPink', + text: t('questLostMasterclasser3DropPinkPotion'), + }, { + type: 'hatchingPotions', + key: 'Golden', + text: t('questLostMasterclasser3DropGoldenPotion'), + }, { + type: 'hatchingPotions', + key: 'Shade', + text: t('questLostMasterclasser3DropShadePotion'), + }, { + type: 'hatchingPotions', + key: 'Zombie', + text: t('questLostMasterclasser3DropZombiePotion'), + }, { + type: 'gear', + key: 'body_special_aetherAmulet', + text: t('questLostMasterclasser3DropBodyAccessory'), + }, + ], + gp: 0, + exp: 2000, + }, + }, + lostMasterclasser4: { + text: t('questLostMasterclasser4Text'), + notes: t('questLostMasterclasser4Notes'), + group: 'questGroupLostMasterclasser', + completion: t('questLostMasterclasser4Completion'), + previous: 'lostMasterclasser3', + prereqQuests: [ + 'lostMasterclasser1', + 'lostMasterclasser2', + 'lostMasterclasser3', + ], + value: 4, + goldValue: 700, + category: 'gold', + boss: { + name: t('questLostMasterclasser4Boss'), + hp: 3000, + str: 4, + rage: { + title: t('questLostMasterclasser4RageTitle'), + description: t('questLostMasterclasser4RageDescription'), + value: 15, + mpDrain: true, + effect: t('questLostMasterclasser4RageEffect'), + }, + }, + drop: { + items: [ + { + type: 'mounts', + key: 'Aether-Invisible', + text: t('questLostMasterclasser4DropMount'), + }, { + type: 'gear', + key: 'back_special_aetherCloak', + text: t('questLostMasterclasser4DropBackAccessory'), + }, { + type: 'gear', + key: 'weapon_special_aetherCrystals', + text: t('questLostMasterclasser4DropWeapon'), + }, + ], + gp: 0, + exp: 3500, + }, + }, +}; + +export default QUEST_MASTERCLASSER; diff --git a/website/common/script/content/quests/pets.js b/website/common/script/content/quests/pets.js new file mode 100644 index 0000000000..e4b42da25e --- /dev/null +++ b/website/common/script/content/quests/pets.js @@ -0,0 +1,1652 @@ +import t from '../translation'; + +const QUEST_PETS = { + alligator: { + text: t('questAlligatorText'), + notes: t('questAlligatorNotes'), + completion: t('questAlligatorCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questAlligatorBoss'), + hp: 1100, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Alligator', + text: t('questAlligatorDropAlligatorEgg'), + }, { + type: 'eggs', + key: 'Alligator', + text: t('questAlligatorDropAlligatorEgg'), + }, { + type: 'eggs', + key: 'Alligator', + text: t('questAlligatorDropAlligatorEgg'), + }, + ], + gp: 73, + exp: 725, + unlock: t('questAlligatorUnlockText'), + }, + }, + armadillo: { + text: t('questArmadilloText'), + notes: t('questArmadilloNotes'), + completion: t('questArmadilloCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questArmadilloBoss'), + hp: 600, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Armadillo', + text: t('questArmadilloDropArmadilloEgg'), + }, { + type: 'eggs', + key: 'Armadillo', + text: t('questArmadilloDropArmadilloEgg'), + }, { + type: 'eggs', + key: 'Armadillo', + text: t('questArmadilloDropArmadilloEgg'), + }, + ], + gp: 43, + exp: 350, + unlock: t('questArmadilloUnlockText'), + }, + }, + axolotl: { + text: t('questAxolotlText'), + notes: t('questAxolotlNotes'), + completion: t('questAxolotlCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questAxolotlBoss'), + hp: 500, + str: 1.5, + rage: { + title: t('questAxolotlRageTitle'), + description: t('questAxolotlRageDescription'), + value: 50, + healing: 0.3, + effect: t('questAxolotlRageEffect'), + }, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Axolotl', + text: t('questAxolotlDropAxolotlEgg'), + }, { + type: 'eggs', + key: 'Axolotl', + text: t('questAxolotlDropAxolotlEgg'), + }, { + type: 'eggs', + key: 'Axolotl', + text: t('questAxolotlDropAxolotlEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questAxolotlUnlockText'), + }, + }, + badger: { + text: t('questBadgerText'), + notes: t('questBadgerNotes'), + completion: t('questBadgerCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questBadgerBoss'), + hp: 600, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Badger', + text: t('questBadgerDropBadgerEgg'), + }, { + type: 'eggs', + key: 'Badger', + text: t('questBadgerDropBadgerEgg'), + }, { + type: 'eggs', + key: 'Badger', + text: t('questBadgerDropBadgerEgg'), + }, + ], + gp: 43, + exp: 350, + unlock: t('questBadgerUnlockText'), + }, + }, + beetle: { + text: t('questBeetleText'), + notes: t('questBeetleNotes'), + completion: t('questBeetleCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questBeetleBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Beetle', + text: t('questBeetleDropBeetleEgg'), + }, { + type: 'eggs', + key: 'Beetle', + text: t('questBeetleDropBeetleEgg'), + }, { + type: 'eggs', + key: 'Beetle', + text: t('questBeetleDropBeetleEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questBeetleUnlockText'), + }, + }, + bunny: { + text: t('questBunnyText'), + notes: t('questBunnyNotes'), + completion: t('questBunnyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questBunnyBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg'), + }, { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg'), + }, { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questBunnyUnlockText'), + }, + }, + butterfly: { + text: t('questButterflyText'), + notes: t('questButterflyNotes'), + completion: t('questButterflyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questButterflyBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Butterfly', + text: t('questButterflyDropButterflyEgg'), + }, { + type: 'eggs', + key: 'Butterfly', + text: t('questButterflyDropButterflyEgg'), + }, { + type: 'eggs', + key: 'Butterfly', + text: t('questButterflyDropButterflyEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questButterflyUnlockText'), + }, + }, + cheetah: { + text: t('questCheetahText'), + notes: t('questCheetahNotes'), + completion: t('questCheetahCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questCheetahBoss'), + hp: 600, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg'), + }, { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg'), + }, { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg'), + }, + ], + gp: 43, + exp: 350, + unlock: t('questCheetahUnlockText'), + }, + }, + cow: { + text: t('questCowText'), + notes: t('questCowNotes'), + completion: t('questCowCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questCowBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Cow', + text: t('questCowDropCowEgg'), + }, { + type: 'eggs', + key: 'Cow', + text: t('questCowDropCowEgg'), + }, { + type: 'eggs', + key: 'Cow', + text: t('questCowDropCowEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questCowUnlockText'), + }, + }, + dilatory_derby: { // eslint-disable-line camelcase + text: t('questSeahorseText'), + notes: t('questSeahorseNotes'), + completion: t('questSeahorseCompletion'), + value: 4, + category: 'pet', + 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'), + }, + }, + dolphin: { + text: t('questDolphinText'), + notes: t('questDolphinNotes'), + completion: t('questDolphinCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questDolphinBoss'), + hp: 300, + str: 1.25, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Dolphin', + text: t('questDolphinDropDolphinEgg'), + }, { + type: 'eggs', + key: 'Dolphin', + text: t('questDolphinDropDolphinEgg'), + }, { + type: 'eggs', + key: 'Dolphin', + text: t('questDolphinDropDolphinEgg'), + }, + ], + gp: 22, + exp: 110, + unlock: t('questDolphinUnlockText'), + }, + }, + falcon: { + text: t('questFalconText'), + notes: t('questFalconNotes'), + completion: t('questFalconCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questFalconBoss'), + hp: 700, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Falcon', + text: t('questFalconDropFalconEgg'), + }, { + type: 'eggs', + key: 'Falcon', + text: t('questFalconDropFalconEgg'), + }, { + type: 'eggs', + key: 'Falcon', + text: t('questFalconDropFalconEgg'), + }, + ], + gp: 49, + exp: 425, + unlock: t('questFalconUnlockText'), + }, + }, + ferret: { + text: t('questFerretText'), + notes: t('questFerretNotes'), + completion: t('questFerretCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questFerretBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Ferret', + text: t('questFerretDropFerretEgg'), + }, { + type: 'eggs', + key: 'Ferret', + text: t('questFerretDropFerretEgg'), + }, { + type: 'eggs', + key: 'Ferret', + text: t('questFerretDropFerretEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questFerretUnlockText'), + }, + }, + frog: { + text: t('questFrogText'), + notes: t('questFrogNotes'), + completion: t('questFrogCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questFrogBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg'), + }, { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg'), + }, { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questFrogUnlockText'), + }, + }, + ghost_stag: { // eslint-disable-line camelcase + text: t('questGhostStagText'), + notes: t('questGhostStagNotes'), + completion: t('questGhostStagCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questGhostStagBoss'), + 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, + unlock: t('questGhostStagUnlockText'), + }, + }, + gryphon: { + text: t('questGryphonText'), + notes: t('questGryphonNotes'), + completion: t('questGryphonCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questGryphonBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg'), + }, { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg'), + }, { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questGryphonUnlockText'), + }, + }, + guineapig: { + text: t('questGuineaPigText'), + notes: t('questGuineaPigNotes'), + completion: t('questGuineaPigCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questGuineaPigBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'GuineaPig', + text: t('questGuineaPigDropGuineaPigEgg'), + }, { + type: 'eggs', + key: 'GuineaPig', + text: t('questGuineaPigDropGuineaPigEgg'), + }, { + type: 'eggs', + key: 'GuineaPig', + text: t('questGuineaPigDropGuineaPigEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questGuineaPigUnlockText'), + }, + }, + harpy: { + text: t('questHarpyText'), + notes: t('questHarpyNotes'), + completion: t('questHarpyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHarpyBoss'), + 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, + unlock: t('questHarpyUnlockText'), + }, + }, + hedgehog: { + text: t('questHedgehogText'), + notes: t('questHedgehogNotes'), + completion: t('questHedgehogCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHedgehogBoss'), + hp: 400, + str: 1.25, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg'), + }, { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg'), + }, { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg'), + }, + ], + gp: 30, + exp: 125, + unlock: t('questHedgehogUnlockText'), + }, + }, + hippo: { + text: t('questHippoText'), + notes: t('questHippoNotes'), + completion: t('questHippoCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHippoBoss'), + hp: 800, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Hippo', + text: t('questHippoDropHippoEgg'), + }, { + type: 'eggs', + key: 'Hippo', + text: t('questHippoDropHippoEgg'), + }, { + type: 'eggs', + key: 'Hippo', + text: t('questHippoDropHippoEgg'), + }, + ], + gp: 55, + exp: 500, + unlock: t('questHippoUnlockText'), + }, + }, + horse: { + text: t('questHorseText'), + notes: t('questHorseNotes'), + completion: t('questHorseCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHorseBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg'), + }, { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg'), + }, { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questHorseUnlockText'), + }, + }, + kangaroo: { + text: t('questKangarooText'), + notes: t('questKangarooNotes'), + completion: t('questKangarooCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questKangarooBoss'), + hp: 700, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Kangaroo', + text: t('questKangarooDropKangarooEgg'), + }, { + type: 'eggs', + key: 'Kangaroo', + text: t('questKangarooDropKangarooEgg'), + }, { + type: 'eggs', + key: 'Kangaroo', + text: t('questKangarooDropKangarooEgg'), + }, + ], + gp: 49, + exp: 425, + unlock: t('questKangarooUnlockText'), + }, + }, + kraken: { + text: t('questKrakenText'), + notes: t('questKrakenNotes'), + completion: t('questKrakenCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questKrakenBoss'), + 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, + unlock: t('questKrakenUnlockText'), + }, + }, + monkey: { + text: t('questMonkeyText'), + notes: t('questMonkeyNotes'), + completion: t('questMonkeyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questMonkeyBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Monkey', + text: t('questMonkeyDropMonkeyEgg'), + }, { + type: 'eggs', + key: 'Monkey', + text: t('questMonkeyDropMonkeyEgg'), + }, { + type: 'eggs', + key: 'Monkey', + text: t('questMonkeyDropMonkeyEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questMonkeyUnlockText'), + }, + }, + nudibranch: { + text: t('questNudibranchText'), + notes: t('questNudibranchNotes'), + completion: t('questNudibranchCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questNudibranchBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Nudibranch', + text: t('questNudibranchDropNudibranchEgg'), + }, { + type: 'eggs', + key: 'Nudibranch', + text: t('questNudibranchDropNudibranchEgg'), + }, { + type: 'eggs', + key: 'Nudibranch', + text: t('questNudibranchDropNudibranchEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questNudibranchUnlockText'), + }, + }, + octopus: { + text: t('questOctopusText'), + notes: t('questOctopusNotes'), + completion: t('questOctopusCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questOctopusBoss'), + hp: 1200, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg'), + }, { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg'), + }, { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg'), + }, + ], + gp: 80, + exp: 800, + unlock: t('questOctopusUnlockText'), + }, + }, + owl: { + text: t('questOwlText'), + notes: t('questOwlNotes'), + completion: t('questOwlCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questOwlBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg'), + }, { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg'), + }, { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questOwlUnlockText'), + }, + }, + peacock: { + text: t('questPeacockText'), + notes: t('questPeacockNotes'), + completion: t('questPeacockCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questPeacockBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Peacock', + text: t('questPeacockDropPeacockEgg'), + }, { + type: 'eggs', + key: 'Peacock', + text: t('questPeacockDropPeacockEgg'), + }, { + type: 'eggs', + key: 'Peacock', + text: t('questPeacockDropPeacockEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questPeacockUnlockText'), + }, + }, + penguin: { + text: t('questPenguinText'), + notes: t('questPenguinNotes'), + completion: t('questPenguinCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questPenguinBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg'), + }, { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg'), + }, { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questPenguinUnlockText'), + }, + }, + pterodactyl: { + text: t('questPterodactylText'), + notes: t('questPterodactylNotes'), + completion: t('questPterodactylCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questPterodactylBoss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Pterodactyl', + text: t('questPterodactylDropPterodactylEgg'), + }, { + type: 'eggs', + key: 'Pterodactyl', + text: t('questPterodactylDropPterodactylEgg'), + }, { + type: 'eggs', + key: 'Pterodactyl', + text: t('questPterodactylDropPterodactylEgg'), + }, + ], + gp: 67, + exp: 650, + unlock: t('questPterodactylUnlockText'), + }, + }, + rat: { + text: t('questRatText'), + notes: t('questRatNotes'), + completion: t('questRatCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRatBoss'), + hp: 1200, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg'), + }, { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg'), + }, { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg'), + }, + ], + gp: 80, + exp: 800, + unlock: t('questRatUnlockText'), + }, + }, + rock: { + text: t('questRockText'), + notes: t('questRockNotes'), + completion: t('questRockCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRockBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg'), + }, { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg'), + }, { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questRockUnlockText'), + }, + }, + rooster: { + text: t('questRoosterText'), + notes: t('questRoosterNotes'), + completion: t('questRoosterCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRoosterBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg'), + }, { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg'), + }, { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questRoosterUnlockText'), + }, + }, + sabretooth: { + text: t('questSabretoothText'), + notes: t('questSabretoothNotes'), + completion: t('questSabretoothCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSabretoothBoss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Sabretooth', + text: t('questSabretoothDropSabretoothEgg'), + }, { + type: 'eggs', + key: 'Sabretooth', + text: t('questSabretoothDropSabretoothEgg'), + }, { + type: 'eggs', + key: 'Sabretooth', + text: t('questSabretoothDropSabretoothEgg'), + }, + ], + gp: 67, + exp: 650, + unlock: t('questSabretoothUnlockText'), + }, + }, + seaserpent: { + text: t('questSeaSerpentText'), + notes: t('questSeaSerpentNotes'), + completion: t('questSeaSerpentCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSeaSerpentBoss'), + hp: 1200, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'SeaSerpent', + text: t('questSeaSerpentDropSeaSerpentEgg'), + }, { + type: 'eggs', + key: 'SeaSerpent', + text: t('questSeaSerpentDropSeaSerpentEgg'), + }, { + type: 'eggs', + key: 'SeaSerpent', + text: t('questSeaSerpentDropSeaSerpentEgg'), + }, + ], + gp: 80, + exp: 800, + unlock: t('questSeaSerpentUnlockText'), + }, + }, + sheep: { + text: t('questSheepText'), + notes: t('questSheepNotes'), + completion: t('questSheepCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSheepBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg'), + }, { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg'), + }, { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questSheepUnlockText'), + }, + }, + slime: { + text: t('questSlimeText'), + notes: t('questSlimeNotes'), + completion: t('questSlimeCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSlimeBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg'), + }, { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg'), + }, { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questSlimeUnlockText'), + }, + }, + sloth: { + text: t('questSlothText'), + notes: t('questSlothNotes'), + completion: t('questSlothCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSlothBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Sloth', + text: t('questSlothDropSlothEgg'), + }, { + type: 'eggs', + key: 'Sloth', + text: t('questSlothDropSlothEgg'), + }, { + type: 'eggs', + key: 'Sloth', + text: t('questSlothDropSlothEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questSlothUnlockText'), + }, + }, + snail: { + text: t('questSnailText'), + notes: t('questSnailNotes'), + completion: t('questSnailCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSnailBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Snail', + text: t('questSnailDropSnailEgg'), + }, { + type: 'eggs', + key: 'Snail', + text: t('questSnailDropSnailEgg'), + }, { + type: 'eggs', + key: 'Snail', + text: t('questSnailDropSnailEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questSnailUnlockText'), + }, + }, + snake: { + text: t('questSnakeText'), + notes: t('questSnakeNotes'), + completion: t('questSnakeCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSnakeBoss'), + hp: 1100, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg'), + }, { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg'), + }, { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg'), + }, + ], + gp: 73, + exp: 725, + unlock: t('questSnakeUnlockText'), + }, + }, + spider: { + text: t('questSpiderText'), + notes: t('questSpiderNotes'), + completion: t('questSpiderCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSpiderBoss'), + hp: 400, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg'), + }, { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg'), + }, { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg'), + }, + ], + gp: 31, + exp: 200, + unlock: t('questSpiderUnlockText'), + }, + }, + squirrel: { + text: t('questSquirrelText'), + notes: t('questSquirrelNotes'), + completion: t('questSquirrelCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSquirrelBoss'), + hp: 700, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Squirrel', + text: t('questSquirrelDropSquirrelEgg'), + }, { + type: 'eggs', + key: 'Squirrel', + text: t('questSquirrelDropSquirrelEgg'), + }, { + type: 'eggs', + key: 'Squirrel', + text: t('questSquirrelDropSquirrelEgg'), + }, + ], + gp: 49, + exp: 425, + unlock: t('questSquirrelUnlockText'), + }, + }, + treeling: { + text: t('questTreelingText'), + notes: t('questTreelingNotes'), + completion: t('questTreelingCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTreelingBoss'), + hp: 600, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Treeling', + text: t('questTreelingDropTreelingEgg'), + }, { + type: 'eggs', + key: 'Treeling', + text: t('questTreelingDropTreelingEgg'), + }, { + type: 'eggs', + key: 'Treeling', + text: t('questTreelingDropTreelingEgg'), + }, + ], + gp: 43, + exp: 350, + unlock: t('questTreelingUnlockText'), + }, + }, + trex: { + text: t('questTRexText'), + notes: t('questTRexNotes'), + completion: t('questTRexCompletion'), + value: 4, + category: 'pet', + 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: { // eslint-disable-line camelcase + text: t('questTRexUndeadText'), + notes: t('questTRexUndeadNotes'), + completion: t('questTRexUndeadCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTRexUndeadBoss'), + hp: 500, + str: 2, + rage: { + title: t('questTRexUndeadRageTitle'), + description: t('questTRexUndeadRageDescription'), + value: 50, + healing: 0.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'), + }, + }, + triceratops: { + text: t('questTriceratopsText'), + notes: t('questTriceratopsNotes'), + completion: t('questTriceratopsCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTriceratopsBoss'), + hp: 1200, + str: 2.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Triceratops', + text: t('questTriceratopsDropTriceratopsEgg'), + }, { + type: 'eggs', + key: 'Triceratops', + text: t('questTriceratopsDropTriceratopsEgg'), + }, { + type: 'eggs', + key: 'Triceratops', + text: t('questTriceratopsDropTriceratopsEgg'), + }, + ], + gp: 80, + exp: 800, + unlock: t('questTriceratopsUnlockText'), + }, + }, + turtle: { + text: t('questTurtleText'), + notes: t('questTurtleNotes'), + completion: t('questTurtleCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTurtleBoss'), + hp: 300, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Turtle', + text: t('questTurtleDropTurtleEgg'), + }, { + type: 'eggs', + key: 'Turtle', + text: t('questTurtleDropTurtleEgg'), + }, { + type: 'eggs', + key: 'Turtle', + text: t('questTurtleDropTurtleEgg'), + }, + ], + gp: 25, + exp: 125, + unlock: t('questTurtleUnlockText'), + }, + }, + unicorn: { + text: t('questUnicornText'), + notes: t('questUnicornNotes'), + completion: t('questUnicornCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questUnicornBoss'), + hp: 600, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Unicorn', + text: t('questUnicornDropUnicornEgg'), + }, { + type: 'eggs', + key: 'Unicorn', + text: t('questUnicornDropUnicornEgg'), + }, { + type: 'eggs', + key: 'Unicorn', + text: t('questUnicornDropUnicornEgg'), + }, + ], + gp: 43, + exp: 350, + unlock: t('questUnicornUnlockText'), + }, + }, + velociraptor: { + text: t('questVelociraptorText'), + notes: t('questVelociraptorNotes'), + completion: t('questVelociraptorCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questVelociraptorBoss'), + hp: 900, + str: 2, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Velociraptor', + text: t('questVelociraptorDropVelociraptorEgg'), + }, { + type: 'eggs', + key: 'Velociraptor', + text: t('questVelociraptorDropVelociraptorEgg'), + }, { + type: 'eggs', + key: 'Velociraptor', + text: t('questVelociraptorDropVelociraptorEgg'), + }, + ], + gp: 63, + exp: 575, + unlock: t('questVelociraptorUnlockText'), + }, + }, + whale: { + text: t('questWhaleText'), + notes: t('questWhaleNotes'), + completion: t('questWhaleCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questWhaleBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg'), + }, { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg'), + }, { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questWhaleUnlockText'), + }, + }, + yarn: { + text: t('questYarnText'), + notes: t('questYarnNotes'), + completion: t('questYarnCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questYarnBoss'), + hp: 500, + str: 1.5, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Yarn', + text: t('questYarnDropYarnEgg'), + }, { + type: 'eggs', + key: 'Yarn', + text: t('questYarnDropYarnEgg'), + }, { + type: 'eggs', + key: 'Yarn', + text: t('questYarnDropYarnEgg'), + }, + ], + gp: 37, + exp: 275, + unlock: t('questYarnUnlockText'), + }, + }, +}; + +export default QUEST_PETS; diff --git a/website/common/script/content/quests/potions.js b/website/common/script/content/quests/potions.js new file mode 100644 index 0000000000..5bd146cf71 --- /dev/null +++ b/website/common/script/content/quests/potions.js @@ -0,0 +1,339 @@ +import t from '../translation'; + +const QUEST_POTIONS = { + amber: { + text: t('questAmberText'), + notes: t('questAmberNotes'), + completion: t('questAmberCompletion'), + value: 4, + category: 'hatchingPotion', + boss: { + name: t('questAmberBoss'), + hp: 300, + str: 1.25, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Amber', + text: t('questAmberDropAmberPotion'), + }, { + type: 'hatchingPotions', + key: 'Amber', + text: t('questAmberDropAmberPotion'), + }, { + type: 'hatchingPotions', + key: 'Amber', + text: t('questAmberDropAmberPotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questAmberUnlockText'), + }, + }, + blackPearl: { + text: t('questBlackPearlText'), + notes: t('questBlackPearlNotes'), + completion: t('questBlackPearlCompletion'), + value: 4, + category: 'hatchingPotion', + boss: { + name: t('questBlackPearlBoss'), + hp: 725, + str: 1.75, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'BlackPearl', + text: t('questBlackPearlDropBlackPearlPotion'), + }, { + type: 'hatchingPotions', + key: 'BlackPearl', + text: t('questBlackPearlDropBlackPearlPotion'), + }, { + type: 'hatchingPotions', + key: 'BlackPearl', + text: t('questBlackPearlDropBlackPearlPotion'), + }, + ], + gp: 50, + exp: 450, + unlock: t('questBlackPearlUnlockText'), + }, + }, + bronze: { + text: t('questBronzeText'), + notes: t('questBronzeNotes'), + completion: t('questBronzeCompletion'), + value: 4, + category: 'hatchingPotion', + boss: { + name: t('questBronzeBoss'), + hp: 800, + str: 2, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Bronze', + text: t('questBronzeDropBronzePotion'), + }, { + type: 'hatchingPotions', + key: 'Bronze', + text: t('questBronzeDropBronzePotion'), + }, { + type: 'hatchingPotions', + key: 'Bronze', + text: t('questBronzeDropBronzePotion'), + }, + ], + gp: 63, + exp: 575, + unlock: t('questBronzeUnlockText'), + }, + }, + fluorite: { + text: t('questFluoriteText'), + notes: t('questFluoriteNotes'), + completion: t('questFluoriteCompletion'), + value: 4, + category: 'hatchingPotion', + boss: { + name: t('questFluoriteBoss'), + hp: 1200, + str: 2, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Fluorite', + text: t('questFluoriteDropFluoritePotion'), + }, { + type: 'hatchingPotions', + key: 'Fluorite', + text: t('questFluoriteDropFluoritePotion'), + }, { + type: 'hatchingPotions', + key: 'Fluorite', + text: t('questFluoriteDropFluoritePotion'), + }, + ], + gp: 70, + exp: 750, + unlock: t('questFluoriteUnlockText'), + }, + }, + onyx: { + text: t('questOnyxText'), + notes: t('questOnyxNotes'), + completion: t('questOnyxCompletion'), + value: 4, + category: 'hatchingPotion', + collect: { + onyxStone: { + text: t('questOnyxCollectOnyxStones'), + count: 25, + }, + plutoRune: { + text: t('questOnyxCollectPlutoRunes'), + count: 10, + }, + leoRune: { + text: t('questOnyxCollectLeoRunes'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Onyx', + text: t('questOnyxDropOnyxPotion'), + }, { + type: 'hatchingPotions', + key: 'Onyx', + text: t('questOnyxDropOnyxPotion'), + }, { + type: 'hatchingPotions', + key: 'Onyx', + text: t('questOnyxDropOnyxPotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questOnyxUnlockText'), + }, + }, + ruby: { + text: t('questRubyText'), + notes: t('questRubyNotes'), + completion: t('questRubyCompletion'), + value: 4, + category: 'hatchingPotion', + collect: { + rubyGem: { + text: t('questRubyCollectRubyGems'), + count: 25, + }, + venusRune: { + text: t('questRubyCollectVenusRunes'), + count: 10, + }, + aquariusRune: { + text: t('questRubyCollectAquariusRunes'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Ruby', + text: t('questRubyDropRubyPotion'), + }, { + type: 'hatchingPotions', + key: 'Ruby', + text: t('questRubyDropRubyPotion'), + }, { + type: 'hatchingPotions', + key: 'Ruby', + text: t('questRubyDropRubyPotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questRubyUnlockText'), + }, + }, + silver: { + text: t('questSilverText'), + notes: t('questSilverNotes'), + completion: t('questSilverCompletion'), + value: 4, + category: 'hatchingPotion', + collect: { + silverIngot: { + text: t('questSilverCollectSilverIngots'), + count: 20, + }, + moonRune: { + text: t('questSilverCollectMoonRunes'), + count: 15, + }, + cancerRune: { + text: t('questSilverCollectCancerRunes'), + count: 15, + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Silver', + text: t('questSilverDropSilverPotion'), + }, { + type: 'hatchingPotions', + key: 'Silver', + text: t('questSilverDropSilverPotion'), + }, { + type: 'hatchingPotions', + key: 'Silver', + text: t('questSilverDropSilverPotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questSilverUnlockText'), + }, + }, + stone: { + text: t('questStoneText'), + notes: t('questStoneNotes'), + completion: t('questStoneCompletion'), + value: 4, + category: 'hatchingPotion', + collect: { + mossyStone: { + text: t('questStoneCollectMossyStones'), + count: 25, + }, + marsRune: { + text: t('questStoneCollectMarsRunes'), + count: 10, + }, + capricornRune: { + text: t('questStoneCollectCapricornRunes'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'MossyStone', + text: t('questStoneDropMossyStonePotion'), + }, { + type: 'hatchingPotions', + key: 'MossyStone', + text: t('questStoneDropMossyStonePotion'), + }, { + type: 'hatchingPotions', + key: 'MossyStone', + text: t('questStoneDropMossyStonePotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questStoneUnlockText'), + }, + }, + turquoise: { + text: t('questTurquoiseText'), + notes: t('questTurquoiseNotes'), + completion: t('questTurquoiseCompletion'), + value: 4, + category: 'hatchingPotion', + collect: { + turquoiseGem: { + text: t('questTurquoiseCollectTurquoiseGems'), + count: 25, + }, + sagittariusRune: { + text: t('questTurquoiseCollectSagittariusRunes'), + count: 10, + }, + neptuneRune: { + text: t('questTurquoiseCollectNeptuneRunes'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Turquoise', + text: t('questTurquoiseDropTurquoisePotion'), + }, { + type: 'hatchingPotions', + key: 'Turquoise', + text: t('questTurquoiseDropTurquoisePotion'), + }, { + type: 'hatchingPotions', + key: 'Turquoise', + text: t('questTurquoiseDropTurquoisePotion'), + }, + ], + gp: 50, + exp: 100, + unlock: t('questTurquoiseUnlockText'), + }, + }, +}; + +export default QUEST_POTIONS; diff --git a/website/common/script/content/quests/seasonal.js b/website/common/script/content/quests/seasonal.js new file mode 100644 index 0000000000..0c736f1bcb --- /dev/null +++ b/website/common/script/content/quests/seasonal.js @@ -0,0 +1,226 @@ +import find from 'lodash/find'; +import moment from 'moment'; +import { EVENTS } from '../constants/events'; +import t from '../translation'; + +const CURRENT_EVENT = find( + EVENTS, event => moment().isBetween(event.start, event.end) && Boolean(event.season), +); + +const QUEST_SEASONAL = { + // winter + evilsanta: { + event: CURRENT_EVENT && CURRENT_EVENT.season === 'winter' ? CURRENT_EVENT : null, + text: t('questEvilSantaText'), + notes: t('questEvilSantaNotes'), + addlNotes: t('evilSantaAddlNotes'), + completion: t('questEvilSantaCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questEvilSantaBoss'), + hp: 300, + str: 1, + }, + drop: { + items: [ + { + type: 'mounts', + key: 'BearCub-Polar', + text: t('questEvilSantaDropBearCubPolarMount'), + }, + ], + gp: 20, + exp: 100, + }, + canBuy () { + return this.event && moment().isBetween(this.event.start, this.event.end); + }, + }, + evilsanta2: { + event: CURRENT_EVENT && CURRENT_EVENT.season === 'winter' ? CURRENT_EVENT : null, + text: t('questEvilSanta2Text'), + notes: t('questEvilSanta2Notes'), + addlNotes: t('evilSantaAddlNotes'), + completion: t('questEvilSanta2Completion'), + value: 4, + category: 'pet', + 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, + }, + canBuy () { + return this.event && moment().isBetween(this.event.start, this.event.end); + }, + }, + // spring + egg: { + text: t('questEggHuntText'), + notes: t('questEggHuntNotes'), + completion: t('questEggHuntCompletion'), + value: 1, + category: 'pet', + event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, + collect: { + plainEgg: { + text: t('questEggHuntCollectPlainEgg'), + count: 40, + }, + }, + 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, + }, + canBuy () { + return this.event && moment().isBetween(this.event.start, this.event.end); + }, + }, + virtualpet: { + text: t('questVirtualPetText'), + notes: t('questVirtualPetNotes'), + completion: t('questVirtualPetCompletion'), + value: 4, + category: 'hatchingPotion', + canBuy () { + return CURRENT_EVENT && CURRENT_EVENT.season === 'spring'; + }, + event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, + boss: { + name: t('questVirtualPetBoss'), + hp: 500, + str: 2, + rage: { + title: t('questVirtualPetRageTitle'), + description: t('questVirtualPetRageDescription'), + value: 50, + progressDrain: 0.5, + effect: t('questVirtualPetRageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'VirtualPet', + text: t('questVirtualPetDropVirtualPetPotion'), + }, { + type: 'hatchingPotions', + key: 'VirtualPet', + text: t('questVirtualPetDropVirtualPetPotion'), + }, { + type: 'hatchingPotions', + key: 'VirtualPet', + text: t('questVirtualPetDropVirtualPetPotion'), + }, + ], + gp: 40, + exp: 500, + unlock: t('questVirtualPetUnlockText'), + }, + }, + waffle: { + text: t('questWaffleText'), + notes: t('questWaffleNotes'), + completion: t('questWaffleCompletion'), + value: 4, + category: 'hatchingPotion', + event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, + boss: { + name: t('questWaffleBoss'), + hp: 500, + str: 2, + rage: { + title: t('questWaffleRageTitle'), + description: t('questWaffleRageDescription'), + value: 50, + progressDrain: 0.5, + effect: t('questWaffleRageEffect'), + }, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Dessert', + text: t('questWaffleDropDessertPotion'), + }, { + type: 'hatchingPotions', + key: 'Dessert', + text: t('questWaffleDropDessertPotion'), + }, { + type: 'hatchingPotions', + key: 'Dessert', + text: t('questWaffleDropDessertPotion'), + }, + ], + gp: 40, + exp: 500, + unlock: t('questWaffleUnlockText'), + }, + canBuy () { + return this.event && moment().isBetween(this.event.start, this.event.end); + }, + }, +}; + +export default QUEST_SEASONAL; diff --git a/website/common/script/content/quests/series.js b/website/common/script/content/quests/series.js new file mode 100644 index 0000000000..0dc75d650a --- /dev/null +++ b/website/common/script/content/quests/series.js @@ -0,0 +1,504 @@ +import t from '../translation'; + +const QUEST_SERIES = { + atom1: { + text: t('questAtom1Text'), + notes: t('questAtom1Notes'), + completion: t('questAtom1Completion'), + group: 'questGroupAtom', + prerequisite: { + lvl: 15, + }, + value: 4, + lvl: 15, + category: 'unlockable', + collect: { + soapBars: { + text: t('questAtom1CollectSoapBars'), + count: 20, + }, + }, + drop: { + items: [ + { + type: 'quests', + key: 'atom2', + text: t('questAtom1Drop'), + onlyOwner: true, + }, + ], + gp: 7, + exp: 50, + }, + }, + atom2: { + text: t('questAtom2Text'), + notes: t('questAtom2Notes'), + completion: t('questAtom2Completion'), + group: 'questGroupAtom', + prerequisite: { + lvl: 15, + atom1: true, + }, + previous: 'atom1', + value: 4, + lvl: 15, + category: 'unlockable', + boss: { + name: t('questAtom2Boss'), + hp: 300, + str: 1, + }, + drop: { + items: [ + { + type: 'quests', + key: 'atom3', + text: t('questAtom2Drop'), + onlyOwner: true, + }, + ], + gp: 20, + exp: 100, + }, + }, + atom3: { + text: t('questAtom3Text'), + notes: t('questAtom3Notes'), + group: 'questGroupAtom', + previous: 'atom2', + completion: t('questAtom3Completion'), + prerequisite: { + lvl: 15, + atom1: true, + atom2: true, + }, + value: 4, + lvl: 15, + category: 'unlockable', + boss: { + name: t('questAtom3Boss'), + 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, + }, + }, + goldenknight1: { + text: t('questGoldenknight1Text'), + notes: t('questGoldenknight1Notes'), + completion: t('questGoldenknight1Completion'), + group: 'questGroupGoldenknight', + value: 4, + lvl: 40, + category: 'unlockable', + collect: { + testimony: { + text: t('questGoldenknight1CollectTestimony'), + count: 60, + }, + }, + drop: { + items: [ + { + type: 'quests', + key: 'goldenknight2', + text: t('questGoldenknight1DropGoldenknight2Quest'), + onlyOwner: true, + }, + ], + gp: 15, + exp: 120, + }, + }, + goldenknight2: { + text: t('questGoldenknight2Text'), + notes: t('questGoldenknight2Notes'), + completion: t('questGoldenknight2Completion'), + group: 'questGroupGoldenknight', + value: 4, + previous: 'goldenknight1', + lvl: 40, + category: 'unlockable', + boss: { + name: t('questGoldenknight2Boss'), + hp: 1000, + str: 3, + }, + drop: { + items: [ + { + type: 'quests', + key: 'goldenknight3', + text: t('questGoldenknight2DropGoldenknight3Quest'), + onlyOwner: true, + }, + ], + gp: 75, + exp: 750, + }, + }, + goldenknight3: { + text: t('questGoldenknight3Text'), + notes: t('questGoldenknight3Notes'), + group: 'questGroupGoldenknight', + completion: t('questGoldenknight3Completion'), + previous: 'goldenknight2', + value: 4, + lvl: 40, + category: 'unlockable', + boss: { + name: t('questGoldenknight3Boss'), + 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, + }, + }, + moon1: { + text: t('questMoon1Text'), + notes: t('questMoon1Notes'), + group: 'questGroupMoon', + completion: t('questMoon1Completion'), + value: 4, + category: 'unlockable', + unlockCondition: { + condition: 'login reward', + incentiveThreshold: 7, + text: t('loginReward', { count: 7 }), + }, + collect: { + shard: { + text: t('questMoon1CollectShards'), + count: 20, + }, + }, + drop: { + items: [ + { + type: 'gear', + key: 'head_special_lunarWarriorHelm', + text: t('questMoon1DropHeadgear'), + }, + ], + gp: 7, + exp: 50, + }, + }, + moon2: { + text: t('questMoon2Text'), + notes: t('questMoon2Notes'), + group: 'questGroupMoon', + completion: t('questMoon2Completion'), + previous: 'moon1', + value: 4, + category: 'unlockable', + unlockCondition: { + condition: 'login reward', + incentiveThreshold: 22, + text: t('loginReward', { count: 22 }), + }, + boss: { + name: t('questMoon2Boss'), + hp: 100, + str: 1.5, + }, + drop: { + items: [ + { + type: 'gear', + key: 'armor_special_lunarWarriorArmor', + text: t('questMoon2DropArmor'), + }, + ], + gp: 37, + exp: 275, + }, + }, + moon3: { + text: t('questMoon3Text'), + notes: t('questMoon3Notes'), + group: 'questGroupMoon', + completion: t('questMoon3Completion'), + previous: 'moon2', + value: 4, + category: 'unlockable', + unlockCondition: { + condition: 'login reward', + incentiveThreshold: 40, + text: t('loginReward', { count: 40 }), + }, + boss: { + name: t('questMoon3Boss'), + hp: 1000, + str: 2, + }, + drop: { + items: [ + { + type: 'gear', + key: 'weapon_special_lunarScythe', + text: t('questMoon3DropWeapon'), + }, + ], + gp: 67, + exp: 650, + }, + }, + moonstone1: { + text: t('questMoonstone1Text'), + notes: t('questMoonstone1Notes'), + completion: t('questMoonstone1Completion'), + group: 'questGroupMoonstone', + value: 4, + lvl: 60, + category: 'unlockable', + collect: { + moonstone: { + text: t('questMoonstone1CollectMoonstone'), + count: 100, + }, + }, + drop: { + items: [ + { + type: 'quests', + key: 'moonstone2', + text: t('questMoonstone1DropMoonstone2Quest'), + onlyOwner: true, + }, + ], + gp: 50, + exp: 100, + }, + }, + moonstone2: { + text: t('questMoonstone2Text'), + notes: t('questMoonstone2Notes'), + completion: t('questMoonstone2Completion'), + group: 'questGroupMoonstone', + value: 4, + lvl: 60, + previous: 'moonstone1', + category: 'unlockable', + boss: { + name: t('questMoonstone2Boss'), + hp: 1500, + str: 3, + }, + drop: { + items: [ + { + type: 'quests', + key: 'moonstone3', + text: t('questMoonstone2DropMoonstone3Quest'), + onlyOwner: true, + }, + ], + gp: 500, + exp: 1000, + }, + }, + moonstone3: { + text: t('questMoonstone3Text'), + notes: t('questMoonstone3Notes'), + group: 'questGroupMoonstone', + completion: t('questMoonstone3Completion'), + previous: 'moonstone2', + value: 4, + lvl: 60, + category: 'unlockable', + boss: { + name: t('questMoonstone3Boss'), + 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, + }, + }, + vice1: { + text: t('questVice1Text'), + notes: t('questVice1Notes'), + completion: t('questVice1Completion'), + group: 'questGroupVice', + value: 4, + lvl: 30, + category: 'unlockable', + boss: { + name: t('questVice1Boss'), + hp: 750, + str: 1.5, + }, + drop: { + items: [ + { + type: 'quests', + key: 'vice2', + text: t('questVice1DropVice2Quest'), + onlyOwner: true, + }, + ], + gp: 20, + exp: 100, + }, + }, + vice2: { + text: t('questVice2Text'), + notes: t('questVice2Notes'), + completion: t('questVice2Completion'), + group: 'questGroupVice', + value: 4, + lvl: 30, + category: 'unlockable', + previous: 'vice1', + collect: { + lightCrystal: { + text: t('questVice2CollectLightCrystal'), + count: 30, + }, + }, + drop: { + items: [ + { + type: 'quests', + key: 'vice3', + text: t('questVice2DropVice3Quest'), + onlyOwner: true, + }, + ], + gp: 20, + exp: 75, + }, + }, + vice3: { + text: t('questVice3Text'), + notes: t('questVice3Notes'), + group: 'questGroupVice', + completion: t('questVice3Completion'), + previous: 'vice2', + value: 4, + lvl: 30, + category: 'unlockable', + boss: { + name: t('questVice3Boss'), + 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, + }, + }, +}; + +export default QUEST_SERIES; diff --git a/website/common/script/content/quests/timeTravel.js b/website/common/script/content/quests/timeTravel.js new file mode 100644 index 0000000000..96367761a4 --- /dev/null +++ b/website/common/script/content/quests/timeTravel.js @@ -0,0 +1,120 @@ +import t from '../translation'; + +const QUEST_TIME_TRAVEL = { + robot: { + text: t('questRobotText'), + notes: t('questRobotNotes'), + completion: t('questRobotCompletion'), + value: 1, + category: 'timeTravelers', + canBuy () { + return false; + }, + collect: { + bolt: { + text: t('questRobotCollectBolts'), + count: 15, + }, + gear: { + text: t('questRobotCollectGears'), + count: 10, + }, + spring: { + text: t('questRobotCollectSprings'), + count: 10, + }, + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Robot', + text: t('questRobotDropRobotEgg'), + }, { + type: 'eggs', + key: 'Robot', + text: t('questRobotDropRobotEgg'), + }, { + type: 'eggs', + key: 'Robot', + text: t('questRobotDropRobotEgg'), + }, + ], + gp: 40, + exp: 75, + unlock: t('questRobotUnlockText'), + }, + }, + solarSystem: { + text: t('questSolarSystemText'), + notes: t('questSolarSystemNotes'), + completion: t('questSolarSystemCompletion'), + value: 1, + category: 'timeTravelers', + canBuy () { + return false; + }, + boss: { + name: t('questSolarSystemBoss'), + hp: 1500, + str: 2.5, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'SolarSystem', + text: t('questSolarSystemDropSolarSystemPotion'), + }, { + type: 'hatchingPotions', + key: 'SolarSystem', + text: t('questSolarSystemDropSolarSystemPotion'), + }, { + type: 'hatchingPotions', + key: 'SolarSystem', + text: t('questSolarSystemDropSolarSystemPotion'), + }, + ], + gp: 90, + exp: 900, + unlock: t('questSolarSystemUnlockText'), + }, + }, + windup: { + text: t('questWindupText'), + notes: t('questWindupNotes'), + completion: t('questWindupCompletion'), + value: 1, + category: 'timeTravelers', + canBuy () { + return false; + }, + boss: { + name: t('questWindupBoss'), + hp: 1000, + str: 1, + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Windup', + text: t('questWindupDropWindupPotion'), + }, { + type: 'hatchingPotions', + key: 'Windup', + text: t('questWindupDropWindupPotion'), + }, { + type: 'hatchingPotions', + key: 'Windup', + text: t('questWindupDropWindupPotion'), + }, + ], + gp: 50, + exp: 425, + unlock: t('questWindupUnlockText'), + }, + }, +}; + +export default QUEST_TIME_TRAVEL; diff --git a/website/common/script/content/quests/world.js b/website/common/script/content/quests/world.js new file mode 100644 index 0000000000..13a68851e5 --- /dev/null +++ b/website/common/script/content/quests/world.js @@ -0,0 +1,418 @@ +import t from '../translation'; + +const QUEST_WORLD = { + bewilder: { + text: t('questBewilderText'), + notes: t('questBewilderNotes'), + completion: t('questBewilderCompletion'), + completionChat: t('questBewilderCompletionChat'), + value: 0, + canBuy () { + return false; + }, + category: 'world', + boss: { + name: t('questBewilderText'), + hp: 20000000, + str: 1, + def: 1, + rage: { + title: t('questBewilderBossRageTitle'), + description: t('questBewilderBossRageDescription'), + value: 800000, + bailey: t('questBewilderBossRageBailey'), + stables: t('questBewilderBossRageStables'), + market: t('questBewilderBossRageMarket'), + }, + }, + drop: { + items: [ + { + type: 'pets', + key: 'MagicalBee-Base', + text: t('questBewilderDropBumblebeePet'), + }, { + type: 'mounts', + key: 'MagicalBee-Base', + text: t('questBewilderDropBumblebeeMount'), + }, { + 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, + }, + }, + burnout: { + text: t('questBurnoutText'), + notes: t('questBurnoutNotes'), + completion: t('questBurnoutCompletion'), + completionChat: t('questBurnoutCompletionChat'), + value: 0, + canBuy () { + return false; + }, + category: 'world', + boss: { + name: t('questBurnoutBoss'), + hp: 11000000, + str: 2.5, + def: 1, + rage: { + title: t('questBurnoutBossRageTitle'), + description: t('questBurnoutBossRageDescription'), + value: 1000000, + quests: t('questBurnoutBossRageQuests'), + seasonalShop: t('questBurnoutBossRageSeasonalShop'), + tavern: t('questBurnoutBossRageTavern'), + }, + }, + drop: { + items: [ + { + type: 'pets', + key: 'Phoenix-Base', + text: t('questBurnoutDropPhoenixPet'), + }, { + type: 'mounts', + key: 'Phoenix-Base', + text: t('questBurnoutDropPhoenixMount'), + }, { + type: 'food', + key: 'Candy_Base', + text: t('foodCandyBase'), + }, { + type: 'food', + key: 'Candy_White', + text: t('foodCandyWhite'), + }, { + type: 'food', + key: 'Candy_Desert', + text: t('foodCandyDesert'), + }, { + type: 'food', + key: 'Candy_Red', + text: t('foodCandyRed'), + }, { + type: 'food', + key: 'Candy_Shade', + text: t('foodCandyShade'), + }, { + type: 'food', + key: 'Candy_Skeleton', + text: t('foodCandySkeleton'), + }, { + type: 'food', + key: 'Candy_Zombie', + text: t('foodCandyZombie'), + }, { + type: 'food', + key: 'Candy_CottonCandyPink', + text: t('foodCandyCottonCandyPink'), + }, { + type: 'food', + key: 'Candy_CottonCandyBlue', + text: t('foodCandyCottonCandyBlue'), + }, { + type: 'food', + key: 'Candy_Golden', + text: t('foodCandyGolden'), + }, + ], + gp: 0, + exp: 0, + }, + }, + dilatory: { + text: t('questDilatoryText'), + notes: t('questDilatoryNotes'), + completion: t('questDilatoryCompletion'), + value: 0, + canBuy () { + return false; + }, + category: 'world', + 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, + }, + }, + dysheartener: { + text: t('questDysheartenerText'), + notes: t('questDysheartenerNotes'), + completion: t('questDysheartenerCompletion'), + completionChat: t('questDysheartenerCompletionChat'), + value: 0, + canBuy () { + return false; + }, + category: 'world', + boss: { + name: t('questDysheartenerText'), + hp: 17000000, + str: 1.25, + def: 1, + rage: { + title: t('questDysheartenerBossRageTitle'), + description: t('questDysheartenerBossRageDescription'), + value: 500000, + seasonalShop: t('questDysheartenerBossRageSeasonal'), + market: t('questDysheartenerBossRageMarket'), + quests: t('questDysheartenerBossRageQuests'), + }, + }, + colors: { + dark: '#410F2A', + medium: '#5C1130', + light: '#931F4D', + extralight: '#DC4069', + }, + drop: { + items: [ + { + type: 'pets', + key: 'Hippogriff-Hopeful', + text: t('questDysheartenerDropHippogriffPet'), + }, { + type: 'mounts', + key: 'Hippogriff-Hopeful', + text: t('questDysheartenerDropHippogriffMount'), + }, { + type: 'food', + key: 'Cake_Base', + text: t('foodCakeBase'), + }, { + type: 'food', + key: 'Candy_White', + text: t('foodCandyWhite'), + }, { + type: 'food', + key: 'Cake_Desert', + text: t('foodCakeDesert'), + }, { + type: 'food', + key: 'Candy_Red', + text: t('foodCandyRed'), + }, { + type: 'food', + key: 'Cake_Shade', + text: t('foodCakeShade'), + }, { + type: 'food', + key: 'Candy_Skeleton', + text: t('foodCandySkeleton'), + }, { + type: 'food', + key: 'Cake_Zombie', + text: t('foodCakeZombie'), + }, { + type: 'food', + key: 'Candy_CottonCandyPink', + text: t('foodCandyCottonCandyPink'), + }, { + type: 'food', + key: 'Candy_CottonCandyBlue', + text: t('foodCandyCottonCandyBlue'), + }, { + type: 'food', + key: 'Cake_Golden', + text: t('foodCakeGolden'), + }, + ], + gp: 0, + exp: 0, + }, + }, + stressbeast: { + text: t('questStressbeastText'), + notes: t('questStressbeastNotes'), + completion: t('questStressbeastCompletion'), + completionChat: t('questStressbeastCompletionChat'), + value: 0, + canBuy () { + return false; + }, + category: 'world', + boss: { + name: t('questStressbeastBoss'), + hp: 2750000, + str: 1, + def: 1, + rage: { + title: t('questStressbeastBossRageTitle'), + description: t('questStressbeastBossRageDescription'), + value: 1450000, + healing: 0.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, + }, + }, +}; + +export default QUEST_WORLD;