Merge branch 'sabrecat/wacky-fix' into release

This commit is contained in:
SabreCat
2022-04-12 14:38:41 -05:00
36 changed files with 124 additions and 49 deletions

View File

@@ -1,36 +1,46 @@
.quest_lostMasterclasser4 { .quest_lostMasterclasser4 {
background: url("~@/assets/images/animated/quest_lostMasterclasser4.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_lostMasterclasser4.gif") no-repeat;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_windup { .quest_windup {
background: url("~@/assets/images/animated/quest_windup.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_windup.gif") no-repeat;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_solarSystem { .quest_solarSystem {
background: url("~@/assets/images/animated/quest_solarSystem.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_solarSystem.gif") no-repeat;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.Pet_HatchingPotion_Dessert, .Pet_HatchingPotion_Veggie, .Pet_HatchingPotion_Windup { .quest_virtualpet {
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_virtualpet.gif") no-repeat;
width: 219px;
height: 219px;
}
.Pet_HatchingPotion_Dessert, .Pet_HatchingPotion_Veggie, .Pet_HatchingPotion_Windup, .Pet_HatchingPotion_VirtualPet {
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.Pet_HatchingPotion_Dessert { .Pet_HatchingPotion_Dessert {
background: url("~@/assets/images/animated/Pet_HatchingPotion_Dessert.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Dessert.gif") no-repeat;
} }
.Pet_HatchingPotion_Veggie { .Pet_HatchingPotion_Veggie {
background: url("~@/assets/images/animated/Pet_HatchingPotion_Veggie.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Veggie.gif") no-repeat;
} }
.Pet_HatchingPotion_Windup { .Pet_HatchingPotion_Windup {
background: url("~@/assets/images/animated/Pet_HatchingPotion_Windup.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Windup.gif") no-repeat;
}
.Pet_HatchingPotion_VirtualPet {
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_VirtualPet.gif") no-repeat;
} }
.Gems { .Gems {
@@ -68,7 +78,7 @@
/* Critical */ /* Critical */
.weapon_special_critical { .weapon_special_critical {
background: url("~@/assets/images/animated/weapon_special_critical.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_critical.gif") no-repeat;
width: 90px; width: 90px;
height: 90px; height: 90px;
margin-left:-12px; margin-left:-12px;
@@ -85,32 +95,32 @@
} }
.head_special_0 { .head_special_0 {
background: url("~@/assets/images/animated/BackerOnly-Equip-ShadeHelmet.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-ShadeHelmet.gif") no-repeat;
} }
.head_special_1 { .head_special_1 {
background: url("~@/assets/images/animated/ContributorOnly-Equip-CrystalHelmet.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/ContributorOnly-Equip-CrystalHelmet.gif") no-repeat;
margin-top: 3px; margin-top: 3px;
} }
.broad_armor_special_0,.slim_armor_special_0 { .broad_armor_special_0,.slim_armor_special_0 {
background: url("~@/assets/images/animated/BackerOnly-Equip-ShadeArmor.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-ShadeArmor.gif") no-repeat;
} }
.broad_armor_special_1,.slim_armor_special_1 { .broad_armor_special_1,.slim_armor_special_1 {
background: url("~@/assets/images/animated/ContributorOnly-Equip-CrystalArmor.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/ContributorOnly-Equip-CrystalArmor.gif") no-repeat;
} }
.shield_special_0 { .shield_special_0 {
background: url("~@/assets/images/animated/BackerOnly-Shield-TormentedSkull.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Shield-TormentedSkull.gif") no-repeat;
} }
.weapon_special_0 { .weapon_special_0 {
background: url("~@/assets/images/animated/BackerOnly-Weapon-DarkSoulsBlade.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Weapon-DarkSoulsBlade.gif") no-repeat;
} }
.Pet-Wolf-Cerberus { .Pet-Wolf-Cerberus {
width: 105px; width: 105px;
height: 72px; height: 72px;
background: url("~@/assets/images/animated/BackerOnly-Pet-CerberusPup.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Pet-CerberusPup.gif") no-repeat;
} }
.broad_armor_special_ks2019, .slim_armor_special_ks2019, .eyewear_special_ks2019, .head_special_ks2019, .shield_special_ks2019 { .broad_armor_special_ks2019, .slim_armor_special_ks2019, .eyewear_special_ks2019, .head_special_ks2019, .shield_special_ks2019 {
@@ -119,29 +129,29 @@
} }
.broad_armor_special_ks2019, .slim_armor_special_ks2019 { .broad_armor_special_ks2019, .slim_armor_special_ks2019 {
background: url("~@/assets/images/animated/BackerOnly-Equip-MythicGryphonArmor.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-MythicGryphonArmor.gif") no-repeat;
} }
.eyewear_special_ks2019 { .eyewear_special_ks2019 {
background: url("~@/assets/images/animated/BackerOnly-Equip-MythicGryphonVisor.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-MythicGryphonVisor.gif") no-repeat;
} }
.head_special_ks2019 { .head_special_ks2019 {
background: url("~@/assets/images/animated/BackerOnly-Equip-MythicGryphonHelm.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-MythicGryphonHelm.gif") no-repeat;
} }
.shield_special_ks2019 { .shield_special_ks2019 {
background: url("~@/assets/images/animated/BackerOnly-Equip-MythicGryphonShield.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-MythicGryphonShield.gif") no-repeat;
} }
.weapon_special_ks2019 { .weapon_special_ks2019 {
background: url("~@/assets/images/animated/BackerOnly-Equip-MythicGryphonGlaive.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Equip-MythicGryphonGlaive.gif") no-repeat;
width: 120px; width: 120px;
height: 120px; height: 120px;
} }
.Pet-Gryphon-Gryphatrice { .Pet-Gryphon-Gryphatrice {
background: url("~@/assets/images/animated/BackerOnly-Pet-Gryphatrice.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Pet-Gryphatrice.gif") no-repeat;
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -152,11 +162,11 @@
} }
.Mount_Head_Gryphon-Gryphatrice { .Mount_Head_Gryphon-Gryphatrice {
background: url("~@/assets/images/animated/BackerOnly-Mount-Head-Gryphatrice.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Mount-Head-Gryphatrice.gif") no-repeat;
} }
.Mount_Body_Gryphon-Gryphatrice { .Mount_Body_Gryphon-Gryphatrice {
background: url("~@/assets/images/animated/BackerOnly-Mount-Body-Gryphatrice.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/BackerOnly-Mount-Body-Gryphatrice.gif") no-repeat;
} }
.background_airship, .background_clocktower, .background_steamworks { .background_airship, .background_clocktower, .background_steamworks {
@@ -165,15 +175,15 @@
} }
.background_airship { .background_airship {
background: url("~@/assets/images/animated/background_airship.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_airship.gif") no-repeat;
} }
.background_clocktower { .background_clocktower {
background: url("~@/assets/images/animated/background_clocktower.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_clocktower.gif") no-repeat;
} }
.background_steamworks { .background_steamworks {
background: url("~@/assets/images/animated/background_steamworks.gif") no-repeat; background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_steamworks.gif") no-repeat;
} }
/* FIXME figure out how to handle customize menu!! /* FIXME figure out how to handle customize menu!!

View File

@@ -33648,6 +33648,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_quest_scroll_virtualpet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_virtualpet.png');
width: 68px;
height: 68px;
}
.inventory_quest_scroll_waffle { .inventory_quest_scroll_waffle {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_waffle.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_waffle.png');
width: 68px; width: 68px;
@@ -50113,8 +50118,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-BearCub-Virtual { .Pet-BearCub-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-BearCub-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-BearCub-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -50543,8 +50548,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-Cactus-Virtual { .Pet-Cactus-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Cactus-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Cactus-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -51078,8 +51083,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-Dragon-Virtual { .Pet-Dragon-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dragon-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dragon-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -51508,8 +51513,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-FlyingPig-Virtual { .Pet-FlyingPig-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-FlyingPig-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-FlyingPig-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -51793,8 +51798,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-Fox-Virtual { .Pet-Fox-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Fox-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Fox-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -52463,8 +52468,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-LionCub-Virtual { .Pet-LionCub-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-LionCub-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-LionCub-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -52963,8 +52968,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-PandaCub-Virtual { .Pet-PandaCub-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-PandaCub-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-PandaCub-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -54208,8 +54213,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-TigerCub-Virtual { .Pet-TigerCub-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-TigerCub-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-TigerCub-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
@@ -54808,8 +54813,8 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-Wolf-Virtual { .Pet-Wolf-VirtualPet {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Wolf-Virtual.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Wolf-VirtualPet.png');
width: 81px; width: 81px;
height: 99px; height: 99px;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 759 B

View File

@@ -19,7 +19,7 @@
top: -16px !important; top: -16px !important;
} }
.Pet.Pet-FlyingPig-Veggie, .Pet.Pet-FlyingPig-Dessert, .Pet.Pet-FlyingPig-Virtual { .Pet.Pet-FlyingPig-Veggie, .Pet.Pet-FlyingPig-Dessert, .Pet.Pet-FlyingPig-VirtualPet {
top: -28px !important; top: -28px !important;
} }

View File

@@ -308,6 +308,7 @@
"hatchingPotionMoonglow": "Moonglow", "hatchingPotionMoonglow": "Moonglow",
"hatchingPotionSolarSystem": "Solar System", "hatchingPotionSolarSystem": "Solar System",
"hatchingPotionOnyx": "Onyx", "hatchingPotionOnyx": "Onyx",
"hatchingPotionVirtualPet": "Virtual Pet",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.", "premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",

View File

@@ -867,5 +867,15 @@
"questOnyxCollectLeoRunes": "Leo Runes", "questOnyxCollectLeoRunes": "Leo Runes",
"questOnyxCollectOnyxStones": "Onyx Stones", "questOnyxCollectOnyxStones": "Onyx Stones",
"questOnyxDropOnyxPotion": "Onyx Hatching Potion", "questOnyxDropOnyxPotion": "Onyx Hatching Potion",
"questOnyxUnlockText": "Unlocks Onyx Hatching Potions for purchase in the Market" "questOnyxUnlockText": "Unlocks Onyx Hatching Potions for purchase in the Market",
"questVirtualPetText": "Virtual Mayhem with the April Fool: The Beepening",
"questVirtualPetNotes": "Its a quiet and pleasant spring morning in Habitica, a week past a memorable April Fools Day. You and @Beffymaroo are at the stables tending to your pets (who are still a bit confused from their time spent virtually!).<br><br>In the distance you hear a rumble and a beeping noise, soft at first but increasing in volume as if its getting closer. An egg-shape appears on the horizon and as it nears, beeping ever louder, you see that it is a gigantic virtual pet!<br><br>“Oh no,” @Beffymaroo exclaims, “I think the April Fool left some unfinished business with this big fella here, he seems to want attention!”<br><br>The virtual pet beeps angrily, throwing a virtual tantrum and whomping ever closer.",
"questVirtualPetCompletion": "Some careful button pushing seems to have fulfilled the virtual pets mysterious needs, and finally it has quieted down and appears content.<br><br>Suddenly in a burst of confetti, the April Fool appears with a basket full of strange potions emitting soft beeps.<br><br>“What timing, April Fool,” @Beffymaroo says with a wry smile. “I suspect this large beeping fellow is an acquaintance of yours.”<br><br>“Uh, yes,” the Fool says, sheepishly. “So sorry about that, and thank you both for taking care of Wotchimon! Take these potions in the way of thanks, they can bring your Virtual pets back anytime you like!”<br><br>Youre not 100% sure youre on board with all the beeping, but theyre sure cute so its worth a shot!",
"questVirtualPetBoss": "Wotchimon",
"questVirtualPetRageTitle": "The Beepening",
"questVirtualPetRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Wotchiman will heal 30% of its remaining health!",
"questVirtualPetRageEffect": "`Wotchimon uses Bothersome Beep!` Wotchimon sounds a bothersome beep, and its happiness bar suddenly disappears! Pending damage reduced.",
"questVirtualPetDropVirtualPetPotion": "Virtual Pet Hatching Potion",
"questVirtualPetUnlockText": "Unlocks Virtual Pet Hatching Potion for purchase in the Market"
} }

View File

@@ -531,11 +531,11 @@ const wacky = {
limited: true, limited: true,
event: EVENTS.spring2021, event: EVENTS.spring2021,
_addlNotes: t('eventAvailabilityReturning', { _addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndMarch'), availableDate: t('dateEndApril'),
previousDate: t('marchYYYY', { year: 2019 }), previousDate: t('aprilYYYY', { year: 2021 }),
}), }),
canBuy () { canBuy () {
return moment().isBetween('2021-04-01T08:00-05:00', EVENTS.spring2021.end); return moment().isBetween('2022-04-07T08:00-05:00', EVENTS.spring2022.end);
}, },
}, },
Dessert: { Dessert: {
@@ -544,6 +544,12 @@ const wacky = {
_addlNotes: t('premiumPotionUnlimitedNotes'), _addlNotes: t('premiumPotionUnlimitedNotes'),
canBuy: hasQuestAchievementFunction('waffle'), canBuy: hasQuestAchievementFunction('waffle'),
}, },
VirtualPet: {
text: t('hatchingPotionVirtualPet'),
limited: true,
_addlNotes: t('premiumPotionUnlimitedNotes'),
canBuy: hasQuestAchievementFunction('virtualpet'),
},
}; };
each(drops, (pot, key) => { each(drops, (pot, key) => {

View File

@@ -3876,6 +3876,49 @@ const quests = {
unlock: t('questOnyxUnlockText'), 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'),
},
},
}; };
each(quests, (v, key) => { each(quests, (v, key) => {