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, } 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 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', 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', 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'), }, }, }; each(quests, (v, key) => { defaults(v, { key, canBuy () { if (v.event) { return moment().isBetween(v.event.start, v.event.end); } return true; }, }); const b = v.boss; if (b) { defaults(b, { str: 1, def: 1, }); if (b.rage) { defaults(b.rage, { title: t('rage'), description: t('bossRageDescription'), }); } } }); const questsByLevel = sortBy(quests, quest => quest.lvl || 0); export { quests, questsByLevel, userCanOwnQuestCategories, };