From 104d888bfb116e2225619a67f2b75a1e3e2e04df Mon Sep 17 00:00:00 2001 From: osiris Date: Sun, 15 Dec 2019 19:18:16 +0800 Subject: [PATCH 01/98] Fix incorrect error when sending private messages (PMs) to a player you have blocked #11612 Introduce a new error type blockedToSendToThisUser for the cases where you have blocked a player from sending private messages to you, if you try to message them or if you try to transfer gems to them, you will see the error "You can't send to this player because you have block this player." --- .../v3/integration/members/POST-send_private_message.test.js | 2 +- test/api/v3/integration/members/POST-transfer_gems.test.js | 2 +- website/common/locales/en/groups.json | 1 + website/server/models/user/methods.js | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/api/v3/integration/members/POST-send_private_message.test.js b/test/api/v3/integration/members/POST-send_private_message.test.js index eed6386c15..a66c682286 100644 --- a/test/api/v3/integration/members/POST-send_private_message.test.js +++ b/test/api/v3/integration/members/POST-send_private_message.test.js @@ -66,7 +66,7 @@ describe('POST /members/send-private-message', () => { })).to.eventually.be.rejected.and.eql({ code: 401, error: 'NotAuthorized', - message: t('notAuthorizedToSendMessageToThisUser'), + message: t('blockedToSendToThisUser'), }); }); diff --git a/test/api/v3/integration/members/POST-transfer_gems.test.js b/test/api/v3/integration/members/POST-transfer_gems.test.js index 88c6446097..10b14f7dfe 100644 --- a/test/api/v3/integration/members/POST-transfer_gems.test.js +++ b/test/api/v3/integration/members/POST-transfer_gems.test.js @@ -89,7 +89,7 @@ describe('POST /members/transfer-gems', () => { })).to.eventually.be.rejected.and.eql({ code: 401, error: 'NotAuthorized', - message: t('notAuthorizedToSendMessageToThisUser'), + message: t('blockedToSendToThisUser'), }); }); diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index 637a7fbb8a..103d22009c 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -151,6 +151,7 @@ "toUserIDRequired": "A User ID is required", "gemAmountRequired": "A number of gems is required", "notAuthorizedToSendMessageToThisUser": "You can't send a message to this player because they have chosen to block messages.", + "blockedToSendToThisUser": "You can't send to this player because you have blocked this player.", "privateMessageGiftGemsMessage": "Hello <%= receiverName %>, <%= senderName %> has sent you <%= gemAmount %> gems!", "privateMessageGiftSubscriptionMessage": "<%= numberOfMonths %> months of subscription! ", "cannotSendGemsToYourself": "Cannot send gems to yourself. Try a subscription instead.", diff --git a/website/server/models/user/methods.js b/website/server/models/user/methods.js index 11775ee37f..e8b37f4e7d 100644 --- a/website/server/models/user/methods.js +++ b/website/server/models/user/methods.js @@ -61,7 +61,7 @@ const INTERACTION_CHECKS = Object.freeze({ // Direct user blocks prevent all interactions (sndr, rcvr) => rcvr.inbox.blocks.includes(sndr._id) && 'notAuthorizedToSendMessageToThisUser', - (sndr, rcvr) => sndr.inbox.blocks.includes(rcvr._id) && 'notAuthorizedToSendMessageToThisUser', + (sndr, rcvr) => sndr.inbox.blocks.includes(rcvr._id) && 'blockedToSendToThisUser', ], 'send-private-message': [ From 9cbdf0df421ee7b84ddd6222dab9397d4a505360 Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 19:57:07 +0300 Subject: [PATCH 02/98] Fix: reassign object for user.items.gear.owned to trigger change in vue view --- website/client/src/store/actions/shops.js | 5 +- .../common/script/content/loginIncentives.js | 125 ++++++++++++++---- website/common/script/fns/resetGear.js | 5 +- website/common/script/ops/buy/buyArmoire.js | 5 +- .../common/script/ops/buy/buyMysterySet.js | 5 +- website/common/script/ops/buy/purchase.js | 5 +- website/common/script/ops/changeClass.js | 12 +- website/common/script/ops/openMysteryItem.js | 5 +- website/common/script/ops/pinnedGearUtils.js | 5 +- website/common/script/ops/revive.js | 5 +- 10 files changed, 142 insertions(+), 35 deletions(-) diff --git a/website/client/src/store/actions/shops.js b/website/client/src/store/actions/shops.js index e79beb187f..c0ee965045 100644 --- a/website/client/src/store/actions/shops.js +++ b/website/client/src/store/actions/shops.js @@ -60,7 +60,10 @@ async function buyArmoire (store, params) { const isExperience = item.type === 'experience'; if (item.type === 'gear') { - store.state.user.data.items.gear.owned[item.dropKey] = true; + store.state.user.data.items.gear.owned = { + ...store.state.user.data.items.gear.owned, + [item.dropKey]: true, + }; } if (item.type === 'food') { diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index c63b8b4fdd..c878111b7c 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -9,7 +9,10 @@ export default function getLoginIncentives (api) { rewardKey: ['armor_special_bardRobes'], reward: [api.gear.flat.armor_special_bardRobes], assignReward: function assignReward (user) { - user.items.gear.owned.armor_special_bardRobes = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_bardRobes: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -30,7 +33,10 @@ export default function getLoginIncentives (api) { rewardKey: ['head_special_bardHat'], reward: [api.gear.flat.head_special_bardHat], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_bardHat = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_bardHat: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -91,7 +97,10 @@ export default function getLoginIncentives (api) { rewardKey: ['weapon_special_bardInstrument'], reward: [api.gear.flat.weapon_special_bardInstrument], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_bardInstrument = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_bardInstrument: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -177,7 +186,10 @@ export default function getLoginIncentives (api) { rewardKey: ['slim_armor_special_pageArmor'], reward: [api.gear.flat.armor_special_pageArmor], assignReward: function assignReward (user) { - user.items.gear.owned.armor_special_pageArmor = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_pageArmor: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -194,7 +206,10 @@ export default function getLoginIncentives (api) { rewardKey: ['head_special_pageHelm'], reward: [api.gear.flat.head_special_pageHelm], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_pageHelm = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_pageHelm: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -211,7 +226,10 @@ export default function getLoginIncentives (api) { rewardKey: ['weapon_special_pageBanner'], reward: [api.gear.flat.weapon_special_pageBanner], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_pageBanner = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_pageBanner: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -228,7 +246,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shield_special_diamondStave'], reward: [api.gear.flat.shield_special_diamondStave], assignReward: function assignReward (user) { - user.items.gear.owned.shield_special_diamondStave = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_diamondStave: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -389,8 +410,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_skeletonKey', 'shop_shield_special_lootBag'], reward: [api.gear.flat.weapon_special_skeletonKey, api.gear.flat.shield_special_lootBag], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_skeletonKey = true; // eslint-disable-line camelcase - user.items.gear.owned.shield_special_lootBag = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_skeletonKey: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_lootBag: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -410,8 +437,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_sneakthiefRobes, ], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_clandestineCowl = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_sneakthiefRobes = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_clandestineCowl: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_sneakthiefRobes: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -431,8 +464,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_snowSovereignRobes, ], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_snowSovereignCrown = true; // eslint-disable-line camelcase, max-len - user.items.gear.owned.armor_special_snowSovereignRobes = true; // eslint-disable-line camelcase, max-len + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_snowSovereignCrown: true, + }; // eslint-disable-line camelcase, max-len + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_snowSovereignRobes: true, + }; // eslint-disable-line camelcase, max-len if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -449,8 +488,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_shield_special_wintryMirror', 'shop_back_special_snowdriftVeil'], reward: [api.gear.flat.shield_special_wintryMirror, api.gear.flat.back_special_snowdriftVeil], assignReward: function assignReward (user) { - user.items.gear.owned.shield_special_wintryMirror = true; // eslint-disable-line camelcase - user.items.gear.owned.back_special_snowdriftVeil = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_wintryMirror: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + back_special_snowdriftVeil: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -479,8 +524,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_nomadsCuirass, ], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_nomadsScimitar = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_nomadsCuirass = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_nomadsScimitar: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_nomadsCuirass: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -488,7 +539,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_spikedHelm'], reward: [api.gear.flat.head_special_spikedHelm], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_spikedHelm = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_spikedHelm: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -557,7 +611,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_dandyHat'], reward: [api.gear.flat.head_special_dandyHat], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_dandyHat = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_dandyHat: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -565,8 +622,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_fencingFoil', 'shop_armor_special_dandySuit'], reward: [api.gear.flat.weapon_special_fencingFoil, api.gear.flat.armor_special_dandySuit], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_fencingFoil = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_dandySuit = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_fencingFoil: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_dandySuit: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -655,8 +718,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_tachi', 'shop_armor_special_samuraiArmor'], reward: [api.gear.flat.weapon_special_tachi, api.gear.flat.armor_special_samuraiArmor], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_tachi = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_samuraiArmor = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_tachi: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_samuraiArmor: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -664,8 +733,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_kabuto', 'shop_shield_special_wakizashi'], reward: [api.gear.flat.head_special_kabuto, api.gear.flat.shield_special_wakizashi], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_kabuto = true; // eslint-disable-line camelcase - user.items.gear.owned.shield_special_wakizashi = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_kabuto: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_wakizashi: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, diff --git a/website/common/script/fns/resetGear.js b/website/common/script/fns/resetGear.js index 008b1a13b9..9ad23b727e 100644 --- a/website/common/script/fns/resetGear.js +++ b/website/common/script/fns/resetGear.js @@ -16,7 +16,10 @@ export default function resetGear (user) { // The content.gear.flat[k] check should prevent this causing an error each(gear.owned, (v, k) => { if (gear.owned[k] && content.gear.flat[k] && content.gear.flat[k].value) { - gear.owned[k] = false; + gear.owned = { + ...gear.owned, + [k]: false, + }; } }); diff --git a/website/common/script/ops/buy/buyArmoire.js b/website/common/script/ops/buy/buyArmoire.js index 97d5213aca..ce7a978512 100644 --- a/website/common/script/ops/buy/buyArmoire.js +++ b/website/common/script/ops/buy/buyArmoire.js @@ -90,7 +90,10 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d throw new NotAuthorized(this.i18n('equipmentAlreadyOwned')); } - user.items.gear.owned[drop.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [drop.key]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); user.flags.armoireOpened = true; diff --git a/website/common/script/ops/buy/buyMysterySet.js b/website/common/script/ops/buy/buyMysterySet.js index 018322cba8..4e1765c013 100644 --- a/website/common/script/ops/buy/buyMysterySet.js +++ b/website/common/script/ops/buy/buyMysterySet.js @@ -25,7 +25,10 @@ export default function buyMysterySet (user, req = {}, analytics) { } each(mysterySet.items, item => { - user.items.gear.owned[item.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [item.key]: true, + }; if (analytics) { analytics.track('acquire item', { uuid: user._id, diff --git a/website/common/script/ops/buy/purchase.js b/website/common/script/ops/buy/purchase.js index f4156f7683..67b65224eb 100644 --- a/website/common/script/ops/buy/purchase.js +++ b/website/common/script/ops/buy/purchase.js @@ -46,7 +46,10 @@ function purchaseItem (user, item, price, type, key) { user.balance -= price; if (type === 'gear') { - user.items.gear.owned[key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [key]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); } else if (type === 'bundles') { const subType = item.type; diff --git a/website/common/script/ops/changeClass.js b/website/common/script/ops/changeClass.js index 460786c6bd..a9d7104fa3 100644 --- a/website/common/script/ops/changeClass.js +++ b/website/common/script/ops/changeClass.js @@ -53,8 +53,16 @@ export default function changeClass (user, req = {}, analytics) { addPinnedGearByClass(user); - user.items.gear.owned[`weapon_${klass}_0`] = true; - if (klass === 'rogue') user.items.gear.owned[`shield_${klass}_0`] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [`weapon_${klass}_0`]: true, + }; + if (klass === 'rogue') { + user.items.gear.owned = { + ...user.items.gear.owned, + [`shield_${klass}_0`]: true, + }; + } if (user.markModified) user.markModified('items.gear.owned'); removePinnedItemsByOwnedGear(user); diff --git a/website/common/script/ops/openMysteryItem.js b/website/common/script/ops/openMysteryItem.js index 0ab7926c40..7df705aeb3 100644 --- a/website/common/script/ops/openMysteryItem.js +++ b/website/common/script/ops/openMysteryItem.js @@ -23,7 +23,10 @@ export default function openMysteryItem (user, req = {}, analytics) { item = cloneDeep(content.gear.flat[item]); item.text = content.gear.flat[item.key].text(user.preferences.language); - user.items.gear.owned[item.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [item.key]: true, + }; if (user.markModified) { user.markModified('purchased.plan.mysteryItems'); diff --git a/website/common/script/ops/pinnedGearUtils.js b/website/common/script/ops/pinnedGearUtils.js index 5c919c51a1..c69d9d30ed 100644 --- a/website/common/script/ops/pinnedGearUtils.js +++ b/website/common/script/ops/pinnedGearUtils.js @@ -95,7 +95,10 @@ export function removePinnedGearAddPossibleNewOnes (user, itemPath, newItemKey) // remove the old pinned gear items and add the new gear back removePinnedGearByClass(user); - user.items.gear.owned[newItemKey] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [newItemKey]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); addPinnedGearByClass(user); diff --git a/website/common/script/ops/revive.js b/website/common/script/ops/revive.js index e8ce46010b..b50c1ca7e5 100644 --- a/website/common/script/ops/revive.js +++ b/website/common/script/ops/revive.js @@ -89,7 +89,10 @@ export default function revive (user, req = {}, analytics) { if (item) { removePinnedGearByClass(user); - user.items.gear.owned[lostItem] = false; + user.items.gear.owned = { + ...user.items.gear.owned, + [lostItem]: false, + }; if (user.markModified) user.markModified('items.gear.owned'); addPinnedGearByClass(user); From 3e476c4f52a20d9def375632750910c3df14e874 Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 20:05:11 +0300 Subject: [PATCH 03/98] Fix: reassign object for items.pets to trigger change in vue view --- website/common/script/ops/buy/hourglassPurchase.js | 5 ++++- website/common/script/ops/feed.js | 5 ++++- website/common/script/ops/hatch.js | 5 ++++- website/common/script/ops/releaseBoth.js | 5 ++++- website/common/script/ops/releasePets.js | 5 ++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/website/common/script/ops/buy/hourglassPurchase.js b/website/common/script/ops/buy/hourglassPurchase.js index f721acbc43..29f089d8c7 100644 --- a/website/common/script/ops/buy/hourglassPurchase.js +++ b/website/common/script/ops/buy/hourglassPurchase.js @@ -47,7 +47,10 @@ export default function purchaseHourglass (user, req = {}, analytics, quantity = user.purchased.plan.consecutive.trinkets -= 1; if (type === 'pets') { - user.items.pets[key] = 5; + user.items.pets = { + ...user.items.pets, + [key]: 5, + }; if (user.markModified) user.markModified('items.pets'); } diff --git a/website/common/script/ops/feed.js b/website/common/script/ops/feed.js index 92fb47bd92..d7f970dae0 100644 --- a/website/common/script/ops/feed.js +++ b/website/common/script/ops/feed.js @@ -13,7 +13,10 @@ import { import errorMessage from '../libs/errorMessage'; function evolve (user, pet, req) { - user.items.pets[pet.key] = -1; + user.items.pets = { + ...user.items.pets, + [pet.key]: -1, + }; user.items.mounts[pet.key] = true; if (user.markModified) { diff --git a/website/common/script/ops/hatch.js b/website/common/script/ops/hatch.js index 7a60e92ac1..b0c6d6ea40 100644 --- a/website/common/script/ops/hatch.js +++ b/website/common/script/ops/hatch.js @@ -40,7 +40,10 @@ export default function hatch (user, req = {}) { throw new NotAuthorized(i18n.t('messageAlreadyPet', req.language)); } - user.items.pets[pet] = 5; + user.items.pets = { + ...user.items.pets, + [pet]: 5, + }; user.items.eggs[egg] -= 1; user.items.hatchingPotions[hatchingPotion] -= 1; if (user.markModified) { diff --git a/website/common/script/ops/releaseBoth.js b/website/common/script/ops/releaseBoth.js index 80a7c81241..ec405a3544 100644 --- a/website/common/script/ops/releaseBoth.js +++ b/website/common/script/ops/releaseBoth.js @@ -60,7 +60,10 @@ export default function releaseBoth (user, req = {}) { giveMountMasterAchievement = false; } - user.items.pets[animal] = 0; + user.items.pets = { + ...user.items.pets, + [animal]: 0, + }; user.items.mounts[animal] = null; } diff --git a/website/common/script/ops/releasePets.js b/website/common/script/ops/releasePets.js index df7596a1a3..6dc1fbd7e6 100644 --- a/website/common/script/ops/releasePets.js +++ b/website/common/script/ops/releasePets.js @@ -28,7 +28,10 @@ export default function releasePets (user, req = {}, analytics) { if (!user.items.pets[pet]) { giveBeastMasterAchievement = false; } - user.items.pets[pet] = 0; + user.items.pets = { + ...user.items.pets, + [pet]: 0, + }; } if (user.markModified) user.markModified('items.pets'); From aea02d735efe52df433856ad0d529feeaa0de69f Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 20:22:47 +0300 Subject: [PATCH 04/98] Fix: reassign object for user.items.eggs to trigger change in vue view --- .../common/script/content/loginIncentives.js | 135 ++++++++++++++---- website/common/script/fns/randomDrop.js | 10 +- website/common/script/fns/updateStats.js | 10 +- website/common/script/ops/hatch.js | 5 +- 4 files changed, 128 insertions(+), 32 deletions(-) diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index c878111b7c..cf16dc0888 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -289,23 +289,50 @@ export default function getLoginIncentives (api) { rewardName: 'oneOfAllPetEggs', assignReward: function assignReward (user) { if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; - user.items.eggs.BearCub += 1; + user.items.eggs = { + ...user.items.eggs, + BearCub: user.items.eggs.BearCub + 1, + }; if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; - user.items.eggs.Cactus += 1; + user.items.eggs = { + ...user.items.eggs, + Cactus: user.items.eggs.Cactus + 1, + }; if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; - user.items.eggs.Dragon += 1; + user.items.eggs = { + ...user.items.eggs, + Dragon: user.items.eggs.Dragon + 1, + }; if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; - user.items.eggs.FlyingPig += 1; + user.items.eggs = { + ...user.items.eggs, + FlyingPig: user.items.eggs.FlyingPig + 1, + }; if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; - user.items.eggs.Fox += 1; + user.items.eggs = { + ...user.items.eggs, + Fox: user.items.eggs.Fox + 1, + }; if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; - user.items.eggs.LionCub += 1; + user.items.eggs = { + ...user.items.eggs, + LionCub: user.items.eggs.LionCub + 1, + }; if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; - user.items.eggs.PandaCub += 1; + user.items.eggs = { + ...user.items.eggs, + PandaCub: user.items.eggs.PandaCub + 1, + }; if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; - user.items.eggs.TigerCub += 1; + user.items.eggs = { + ...user.items.eggs, + TigerCub: user.items.eggs.TigerCub + 1, + }; if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; - user.items.eggs.Wolf += 1; + user.items.eggs = { + ...user.items.eggs, + Wolf: user.items.eggs.Wolf + 1, + }; if (user.markModified) user.markModified('items.eggs'); }, }, @@ -587,23 +614,50 @@ export default function getLoginIncentives (api) { rewardName: 'twoOfAllPetEggs', assignReward: function assignReward (user) { if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; - user.items.eggs.BearCub += 2; + user.items.eggs = { + ...user.items.eggs, + BearCub: user.items.eggs.BearCub + 2, + }; if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; - user.items.eggs.Cactus += 2; + user.items.eggs = { + ...user.items.eggs, + Cactus: user.items.eggs.Cactus + 2, + }; if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; - user.items.eggs.Dragon += 2; + user.items.eggs = { + ...user.items.eggs, + Dragon: user.items.eggs.Dragon + 2, + }; if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; - user.items.eggs.FlyingPig += 2; + user.items.eggs = { + ...user.items.eggs, + FlyingPig: user.items.eggs.FlyingPig + 2, + }; if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; - user.items.eggs.Fox += 2; + user.items.eggs = { + ...user.items.eggs, + Fox: user.items.eggs.Fox + 2, + }; if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; - user.items.eggs.LionCub += 2; + user.items.eggs = { + ...user.items.eggs, + LionCub: user.items.eggs.LionCub + 2, + }; if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; - user.items.eggs.PandaCub += 2; + user.items.eggs = { + ...user.items.eggs, + PandaCub: user.items.eggs.PandaCub + 2, + }; if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; - user.items.eggs.TigerCub += 2; + user.items.eggs = { + ...user.items.eggs, + TigerCub: user.items.eggs.TigerCub + 2, + }; if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; - user.items.eggs.Wolf += 2; + user.items.eggs = { + ...user.items.eggs, + Wolf: user.items.eggs.Wolf + 2, + }; if (user.markModified) user.markModified('items.eggs'); }, }, @@ -652,23 +706,50 @@ export default function getLoginIncentives (api) { rewardName: 'threeOfAllPetEggs', assignReward: function assignReward (user) { if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; - user.items.eggs.BearCub += 3; + user.items.eggs = { + ...user.items.eggs, + BearCub: user.items.eggs.BearCub + 3, + }; if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; - user.items.eggs.Cactus += 3; + user.items.eggs = { + ...user.items.eggs, + Cactus: user.items.eggs.Cactus + 3, + }; if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; - user.items.eggs.Dragon += 3; + user.items.eggs = { + ...user.items.eggs, + Dragon: user.items.eggs.Dragon + 3, + }; if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; - user.items.eggs.FlyingPig += 3; + user.items.eggs = { + ...user.items.eggs, + FlyingPig: user.items.eggs.FlyingPig + 3, + }; if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; - user.items.eggs.Fox += 3; + user.items.eggs = { + ...user.items.eggs, + Fox: user.items.eggs.Fox + 3, + }; if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; - user.items.eggs.LionCub += 3; + user.items.eggs = { + ...user.items.eggs, + LionCub: user.items.eggs.LionCub + 3, + }; if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; - user.items.eggs.PandaCub += 3; + user.items.eggs = { + ...user.items.eggs, + PandaCub: user.items.eggs.PandaCub + 3, + }; if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; - user.items.eggs.TigerCub += 3; + user.items.eggs = { + ...user.items.eggs, + TigerCub: user.items.eggs.TigerCub + 3, + }; if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; - user.items.eggs.Wolf += 3; + user.items.eggs = { + ...user.items.eggs, + Wolf: user.items.eggs.Wolf + 3, + }; if (user.markModified) user.markModified('items.eggs'); }, }, diff --git a/website/common/script/fns/randomDrop.js b/website/common/script/fns/randomDrop.js index a3f8101424..50892c2d5a 100644 --- a/website/common/script/fns/randomDrop.js +++ b/website/common/script/fns/randomDrop.js @@ -91,8 +91,14 @@ export default function randomDrop (user, options, req = {}, analytics) { } else if (rarity > 0.3) { // eggs 30% chance drop = cloneDropItem(randomVal(content.dropEggs)); - user.items.eggs[drop.key] = user.items.eggs[drop.key] || 0; - user.items.eggs[drop.key] += 1; + user.items.eggs = { + ...user.items.eggs, + [drop.key]: user.items.eggs[drop.key] || 0, + }; + user.items.eggs = { + ...user.items.eggs, + [drop.key]: drop.key += 1, + }; if (user.markModified) user.markModified('items.eggs'); drop.type = 'Egg'; diff --git a/website/common/script/fns/updateStats.js b/website/common/script/fns/updateStats.js index 49ca605959..7eb672eb24 100644 --- a/website/common/script/fns/updateStats.js +++ b/website/common/script/fns/updateStats.js @@ -71,9 +71,15 @@ export default function updateStats (user, stats, req = {}, analytics) { if (user.addNotification) user.addNotification('DROPS_ENABLED'); if (user.items.eggs.Wolf > 0) { - user.items.eggs.Wolf += 1; + user.items.eggs = { + ...user.items.eggs, + Wolf: user.items.eggs.Wolf + 1, + }; } else { - user.items.eggs.Wolf = 1; + user.items.eggs = { + ...user.items.eggs, + Wolf: 1, + }; } if (user.markModified) user.markModified('items.eggs'); diff --git a/website/common/script/ops/hatch.js b/website/common/script/ops/hatch.js index b0c6d6ea40..551ef89463 100644 --- a/website/common/script/ops/hatch.js +++ b/website/common/script/ops/hatch.js @@ -44,7 +44,10 @@ export default function hatch (user, req = {}) { ...user.items.pets, [pet]: 5, }; - user.items.eggs[egg] -= 1; + user.items.eggs = { + ...user.items.eggs, + [egg]: user.items.eggs - 1, + }; user.items.hatchingPotions[hatchingPotion] -= 1; if (user.markModified) { user.markModified('items.pets'); From dec0488b082ebb3f75ae85cf63479fee8e1a50c4 Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 20:26:53 +0300 Subject: [PATCH 05/98] Fix: reassign object for user.items.mounts to trigger change in vue view --- website/common/script/ops/buy/buyMount.js | 5 ++++- website/common/script/ops/buy/hourglassPurchase.js | 5 ++++- website/common/script/ops/feed.js | 6 ++++-- website/common/script/ops/releaseBoth.js | 5 ++++- website/common/script/ops/releaseMounts.js | 5 ++++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/website/common/script/ops/buy/buyMount.js b/website/common/script/ops/buy/buyMount.js index 660b78b1dd..dbc4517938 100644 --- a/website/common/script/ops/buy/buyMount.js +++ b/website/common/script/ops/buy/buyMount.js @@ -34,7 +34,10 @@ export class BuyHourglassMountOperation extends AbstractHourglassItemOperation { } executeChanges (user) { - user.items.mounts[this.key] = true; + user.items.mounts = { + ...user.items.mounts, + [this.key]: true, + }; if (user.markModified) user.markModified('items.mounts'); diff --git a/website/common/script/ops/buy/hourglassPurchase.js b/website/common/script/ops/buy/hourglassPurchase.js index 29f089d8c7..3181bc49b4 100644 --- a/website/common/script/ops/buy/hourglassPurchase.js +++ b/website/common/script/ops/buy/hourglassPurchase.js @@ -55,7 +55,10 @@ export default function purchaseHourglass (user, req = {}, analytics, quantity = } if (type === 'mounts') { - user.items.mounts[key] = true; + user.items.mounts = { + ...user.items.mounts, + [key]: true, + }; if (user.markModified) user.markModified('items.mounts'); } } diff --git a/website/common/script/ops/feed.js b/website/common/script/ops/feed.js index d7f970dae0..05170ddba4 100644 --- a/website/common/script/ops/feed.js +++ b/website/common/script/ops/feed.js @@ -17,8 +17,10 @@ function evolve (user, pet, req) { ...user.items.pets, [pet.key]: -1, }; - user.items.mounts[pet.key] = true; - + user.items.mounts = { + ...user.items.mounts, + [pet.key]: true, + }; if (user.markModified) { user.markModified('items.pets'); user.markModified('items.mounts'); diff --git a/website/common/script/ops/releaseBoth.js b/website/common/script/ops/releaseBoth.js index ec405a3544..c97d352e9e 100644 --- a/website/common/script/ops/releaseBoth.js +++ b/website/common/script/ops/releaseBoth.js @@ -64,7 +64,10 @@ export default function releaseBoth (user, req = {}) { ...user.items.pets, [animal]: 0, }; - user.items.mounts[animal] = null; + user.items.mounts = { + ...user.items.mounts, + [animal]: null, + }; } if (user.markModified) { diff --git a/website/common/script/ops/releaseMounts.js b/website/common/script/ops/releaseMounts.js index b41e50d861..e63a1ec4c5 100644 --- a/website/common/script/ops/releaseMounts.js +++ b/website/common/script/ops/releaseMounts.js @@ -28,7 +28,10 @@ export default function releaseMounts (user, req = {}, analytics) { if (user.items.mounts[mount] === null || user.items.mounts[mount] === undefined) { giveMountMasterAchievement = false; } - user.items.mounts[mount] = null; + user.items.mounts = { + ...user.items.mounts, + [mount]: null, + }; } if (user.markModified) user.markModified('items.mounts'); From 8b780eaf0d75d8ac632f8b07e138e1824d336e85 Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 22:00:34 +0300 Subject: [PATCH 06/98] Fix: pet tests --- website/common/script/ops/feed.js | 12 ++++++------ website/common/script/ops/hatch.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/website/common/script/ops/feed.js b/website/common/script/ops/feed.js index 05170ddba4..58a204fe22 100644 --- a/website/common/script/ops/feed.js +++ b/website/common/script/ops/feed.js @@ -17,6 +17,7 @@ function evolve (user, pet, req) { ...user.items.pets, [pet.key]: -1, }; + user.items.mounts = { ...user.items.mounts, [pet.key]: true, @@ -52,9 +53,8 @@ export default function feed (user, req = {}) { throw new NotFound(errorMessage('invalidFoodName', req.language)); } - const userPets = user.items.pets; - if (!userPets[pet.key]) { + if (!user.items.pets[pet.key]) { throw new NotFound(i18n.t('messagePetNotFound', req.language)); } @@ -81,16 +81,16 @@ export default function feed (user, req = {}) { }; if (food.target === pet.potion || pet.type === 'premium') { - userPets[pet.key] += 5; + user.items.pets[pet.key] += 5; message = i18n.t('messageLikesFood', messageParams, req.language); } else { - userPets[pet.key] += 2; + user.items.pets[pet.key] += 2; message = i18n.t('messageDontEnjoyFood', messageParams, req.language); } if (user.markModified) user.markModified('items.pets'); - if (userPets[pet.key] >= 50 && !user.items.mounts[pet.key]) { + if (user.items.pets[pet.key] >= 50 && !user.items.mounts[pet.key]) { message = evolve(user, pet, req); } } @@ -116,7 +116,7 @@ export default function feed (user, req = {}) { }); return [ - userPets[pet.key], + user.items.pets[pet.key], message, ]; } diff --git a/website/common/script/ops/hatch.js b/website/common/script/ops/hatch.js index 551ef89463..86eca5dcd0 100644 --- a/website/common/script/ops/hatch.js +++ b/website/common/script/ops/hatch.js @@ -46,7 +46,7 @@ export default function hatch (user, req = {}) { }; user.items.eggs = { ...user.items.eggs, - [egg]: user.items.eggs - 1, + [egg]: Number.isInteger(user.items.eggs) ? user.items.eggs - 1 : 0, }; user.items.hatchingPotions[hatchingPotion] -= 1; if (user.markModified) { From 0f755ab80da3ecac1eeacd703e832d00160905cf Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 22:09:07 +0300 Subject: [PATCH 07/98] Fix: reassign object for user.items.hatchingPotions to trigger change in vue view --- .../common/script/content/loginIncentives.js | 140 ++++++++++++++---- website/common/script/fns/randomDrop.js | 10 +- website/common/script/ops/hatch.js | 6 +- 3 files changed, 125 insertions(+), 31 deletions(-) diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index cf16dc0888..569d8265b3 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -45,7 +45,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -76,7 +79,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -118,7 +124,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -142,7 +151,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -160,7 +172,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -178,7 +193,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -198,7 +216,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -218,7 +239,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -238,7 +262,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -258,7 +285,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -276,7 +306,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -341,7 +374,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -357,29 +393,59 @@ export default function getLoginIncentives (api) { rewardName: 'oneOfAllHatchingPotions', assignReward: function assignReward (user) { if (!user.items.hatchingPotions.Base) user.items.hatchingPotions.Base = 0; - user.items.hatchingPotions.Base += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Base: user.items.hatchingPotions.Base + 1, + }; if (!user.items.hatchingPotions.CottonCandyBlue) { user.items.hatchingPotions.CottonCandyBlue = 0; } - user.items.hatchingPotions.CottonCandyBlue += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + CottonCandyBlue: user.items.hatchingPotions.CottonCandyBlue + 1, + }; if (!user.items.hatchingPotions.CottonCandyPink) { user.items.hatchingPotions.CottonCandyPink = 0; } - user.items.hatchingPotions.CottonCandyPink += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + CottonCandyPink: user.items.hatchingPotions.CottonCandyPink + 1, + }; if (!user.items.hatchingPotions.Desert) user.items.hatchingPotions.Desert = 0; - user.items.hatchingPotions.Desert += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Desert: user.items.hatchingPotions.Desert + 1, + }; if (!user.items.hatchingPotions.Golden) user.items.hatchingPotions.Golden = 0; - user.items.hatchingPotions.Golden += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Golden: user.items.hatchingPotions.Golden + 1, + }; if (!user.items.hatchingPotions.Red) user.items.hatchingPotions.Red = 0; - user.items.hatchingPotions.Red += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Red: user.items.hatchingPotions.Red + 1, + }; if (!user.items.hatchingPotions.Shade) user.items.hatchingPotions.Shade = 0; - user.items.hatchingPotions.Shade += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Shade: user.items.hatchingPotions.Shade + 1, + }; if (!user.items.hatchingPotions.Skeleton) user.items.hatchingPotions.Skeleton = 0; - user.items.hatchingPotions.Skeleton += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Skeleton: user.items.hatchingPotions.Skeleton + 1, + }; if (!user.items.hatchingPotions.White) user.items.hatchingPotions.White = 0; - user.items.hatchingPotions.White += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + White: user.items.hatchingPotions.White + 1, + }; if (!user.items.hatchingPotions.Zombie) user.items.hatchingPotions.Zombie = 0; - user.items.hatchingPotions.Zombie += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + Zombie: user.items.hatchingPotions.Zombie + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -388,7 +454,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -429,7 +498,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -453,7 +525,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -480,7 +555,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -507,7 +585,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, @@ -531,7 +612,10 @@ export default function getLoginIncentives (api) { reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; - user.items.hatchingPotions.RoyalPurple += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + RoyalPurple: user.items.hatchingPotions.RoyalPurple + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); }, }, diff --git a/website/common/script/fns/randomDrop.js b/website/common/script/fns/randomDrop.js index 50892c2d5a..5c95bf4505 100644 --- a/website/common/script/fns/randomDrop.js +++ b/website/common/script/fns/randomDrop.js @@ -120,8 +120,14 @@ export default function randomDrop (user, options, req = {}, analytics) { randomVal(pickBy(content.hatchingPotions, (v, k) => acceptableDrops.indexOf(k) >= 0)), ); - user.items.hatchingPotions[drop.key] = user.items.hatchingPotions[drop.key] || 0; - user.items.hatchingPotions[drop.key] += 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + [drop.key]: user.items.hatchingPotions[drop.key] || 0, + }; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + [drop.key]: drop.key + 1, + }; if (user.markModified) user.markModified('items.hatchingPotions'); drop.type = 'HatchingPotion'; diff --git a/website/common/script/ops/hatch.js b/website/common/script/ops/hatch.js index 86eca5dcd0..4ecb1f308d 100644 --- a/website/common/script/ops/hatch.js +++ b/website/common/script/ops/hatch.js @@ -48,7 +48,11 @@ export default function hatch (user, req = {}) { ...user.items.eggs, [egg]: Number.isInteger(user.items.eggs) ? user.items.eggs - 1 : 0, }; - user.items.hatchingPotions[hatchingPotion] -= 1; + user.items.hatchingPotions = { + ...user.items.hatchingPotions, + [hatchingPotion]: + Number.isInteger(user.items.hatchingPotion) ? user.items.hatchingPotion - 1 : 0, + }; if (user.markModified) { user.markModified('items.pets'); user.markModified('items.eggs'); From 6e183c3927a0dc18d0fb53b3d19a657cfd0a8eac Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 22:14:40 +0300 Subject: [PATCH 08/98] Fix: reassign object for user.items.food to trigger change in vue view --- .../common/script/content/loginIncentives.js | 225 ++++++++++++++---- website/common/script/fns/randomDrop.js | 10 +- website/common/script/ops/buy/buyArmoire.js | 9 +- website/common/script/ops/feed.js | 5 +- 4 files changed, 199 insertions(+), 50 deletions(-) diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index 569d8265b3..88cd142ed6 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -57,11 +57,20 @@ export default function getLoginIncentives (api) { reward: [api.food.Chocolate, api.food.Meat, api.food.CottonCandyPink], assignReward: function assignReward (user) { if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; - user.items.food.Chocolate += 1; + user.items.food = { + ...user.items.food, + Chocolate: user.items.food.Chocolate + 1, + }; if (!user.items.food.Meat) user.items.food.Meat = 0; - user.items.food.Meat += 1; + user.items.food = { + ...user.items.food, + Meat: user.items.food.Meat + 1, + }; if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; - user.items.food.CottonCandyPink += 1; + user.items.food = { + ...user.items.food, + CottonCandyPink: user.items.food.CottonCandyPink + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -91,11 +100,20 @@ export default function getLoginIncentives (api) { reward: [api.food.Strawberry, api.food.Potatoe, api.food.CottonCandyBlue], assignReward: function assignReward (user) { if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; - user.items.food.Strawberry += 1; + user.items.food = { + ...user.items.food, + Strawberry: user.items.food.Strawberry + 1, + }; if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; - user.items.food.Potatoe += 1; + user.items.food = { + ...user.items.food, + Potatoe: user.items.food.Potatoe + 1, + }; if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; - user.items.food.CottonCandyBlue += 1; + user.items.food = { + ...user.items.food, + CottonCandyBlue: user.items.food.CottonCandyBlue + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -136,13 +154,25 @@ export default function getLoginIncentives (api) { reward: [api.food.Fish, api.food.Milk, api.food.RottenMeat, api.food.Honey], assignReward: function assignReward (user) { if (!user.items.food.Fish) user.items.food.Fish = 0; - user.items.food.Fish += 1; + user.items.food = { + ...user.items.food, + Fish: user.items.food.Fish + 1, + }; if (!user.items.food.Milk) user.items.food.Milk = 0; - user.items.food.Milk += 1; + user.items.food = { + ...user.items.food, + Milk: user.items.food.Milk + 1, + }; if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; - user.items.food.RottenMeat += 1; + user.items.food = { + ...user.items.food, + RottenMeat: user.items.food.RottenMeat + 1, + }; if (!user.items.food.Honey) user.items.food.Honey = 0; - user.items.food.Honey += 1; + user.items.food = { + ...user.items.food, + Honey: user.items.food.Honey + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -184,7 +214,10 @@ export default function getLoginIncentives (api) { reward: [api.food.Saddle], assignReward: function assignReward (user) { if (!user.items.food.Saddle) user.items.food.Saddle = 0; - user.items.food.Saddle += 1; + user.items.food = { + ...user.items.food, + Saddle: user.items.food.Saddle + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -297,7 +330,10 @@ export default function getLoginIncentives (api) { reward: [api.food.Saddle], assignReward: function assignReward (user) { if (!user.items.food.Saddle) user.items.food.Saddle = 0; - user.items.food.Saddle += 1; + user.items.food = { + ...user.items.food, + Saddle: user.items.food.Saddle + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -471,25 +507,55 @@ export default function getLoginIncentives (api) { rewardName: 'threeOfEachFood', assignReward: function assignReward (user) { if (!user.items.food.Meat) user.items.food.Meat = 0; - user.items.food.Meat += 3; + user.items.food = { + ...user.items.food, + Meat: user.items.food.Meat + 3, + }; if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; - user.items.food.CottonCandyBlue += 3; + user.items.food = { + ...user.items.food, + CottonCandyBlue: user.items.food.CottonCandyBlue + 3, + }; if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; - user.items.food.CottonCandyPink += 3; + user.items.food = { + ...user.items.food, + CottonCandyPink: user.items.food.CottonCandyPink + 3, + }; if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; - user.items.food.Potatoe += 3; + user.items.food = { + ...user.items.food, + Potatoe: user.items.food.Potatoe + 3, + }; if (!user.items.food.Honey) user.items.food.Honey = 0; - user.items.food.Honey += 3; + user.items.food = { + ...user.items.food, + Honey: user.items.food.Honey + 3, + }; if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; - user.items.food.Strawberry += 3; + user.items.food = { + ...user.items.food, + Strawberry: user.items.food.Strawberry + 3, + }; if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; - user.items.food.Chocolate += 3; + user.items.food = { + ...user.items.food, + Chocolate: user.items.food.Chocolate + 3, + }; if (!user.items.food.Fish) user.items.food.Fish = 0; - user.items.food.Fish += 3; + user.items.food = { + ...user.items.food, + Fish: user.items.food.Fish + 3, + }; if (!user.items.food.Milk) user.items.food.Milk = 0; - user.items.food.Milk += 3; + user.items.food = { + ...user.items.food, + Milk: user.items.food.Milk + 3, + }; if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; - user.items.food.RottenMeat += 3; + user.items.food = { + ...user.items.food, + RottenMeat: user.items.food.RottenMeat + 3, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -624,7 +690,10 @@ export default function getLoginIncentives (api) { reward: [api.food.Saddle], assignReward: function assignReward (user) { if (!user.items.food.Saddle) user.items.food.Saddle = 0; - user.items.food.Saddle += 1; + user.items.food = { + ...user.items.food, + Saddle: user.items.food.Saddle + 1, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -667,25 +736,55 @@ export default function getLoginIncentives (api) { rewardName: 'threeOfEachFood', assignReward: function assignReward (user) { if (!user.items.food.Meat) user.items.food.Meat = 0; - user.items.food.Meat += 3; + user.items.food = { + ...user.items.food, + Meat: user.items.food.Meat + 3, + }; if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; - user.items.food.CottonCandyBlue += 3; + user.items.food = { + ...user.items.food, + CottonCandyBlue: user.items.food.CottonCandyBlue + 3, + }; if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; - user.items.food.CottonCandyPink += 3; + user.items.food = { + ...user.items.food, + CottonCandyPink: user.items.food.CottonCandyPink + 3, + }; if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; - user.items.food.Potatoe += 3; + user.items.food = { + ...user.items.food, + Potatoe: user.items.food.Potatoe + 3, + }; if (!user.items.food.Honey) user.items.food.Honey = 0; - user.items.food.Honey += 3; + user.items.food = { + ...user.items.food, + Honey: user.items.food.Honey + 3, + }; if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; - user.items.food.Strawberry += 3; + user.items.food = { + ...user.items.food, + Strawberry: user.items.food.Strawberry + 3, + }; if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; - user.items.food.Chocolate += 3; + user.items.food = { + ...user.items.food, + Chocolate: user.items.food.Chocolate + 3, + }; if (!user.items.food.Fish) user.items.food.Fish = 0; - user.items.food.Fish += 3; + user.items.food = { + ...user.items.food, + Fish: user.items.food.Fish + 3, + }; if (!user.items.food.Milk) user.items.food.Milk = 0; - user.items.food.Milk += 3; + user.items.food = { + ...user.items.food, + Milk: user.items.food.Milk + 3, + }; if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; - user.items.food.RottenMeat += 3; + user.items.food = { + ...user.items.food, + RottenMeat: user.items.food.RottenMeat + 3, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -777,7 +876,10 @@ export default function getLoginIncentives (api) { rewardName: 'twoSaddles', assignReward: function assignReward (user) { if (!user.items.food.Saddle) user.items.food.Saddle = 0; - user.items.food.Saddle += 2; + user.items.food = { + ...user.items.food, + Saddle: user.items.food.Saddle + 2, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -847,25 +949,55 @@ export default function getLoginIncentives (api) { rewardName: 'fourOfEachFood', assignReward: function assignReward (user) { if (!user.items.food.Meat) user.items.food.Meat = 0; - user.items.food.Meat += 4; + user.items.food = { + ...user.items.food, + Meat: user.items.food.Meat + 4, + }; if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; - user.items.food.CottonCandyBlue += 4; + user.items.food = { + ...user.items.food, + CottonCandyBlue: user.items.food.CottonCandyBlue + 4, + }; if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; - user.items.food.CottonCandyPink += 4; + user.items.food = { + ...user.items.food, + CottonCandyPink: user.items.food.CottonCandyPink + 4, + }; if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; - user.items.food.Potatoe += 4; + user.items.food = { + ...user.items.food, + Potatoe: user.items.food.Potatoe + 4, + }; if (!user.items.food.Honey) user.items.food.Honey = 0; - user.items.food.Honey += 4; + user.items.food = { + ...user.items.food, + Honey: user.items.food.Honey + 4, + }; if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; - user.items.food.Strawberry += 4; + user.items.food = { + ...user.items.food, + Strawberry: user.items.food.Strawberry + 4, + }; if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; - user.items.food.Chocolate += 4; + user.items.food = { + ...user.items.food, + Chocolate: user.items.food.Chocolate + 4, + }; if (!user.items.food.Fish) user.items.food.Fish = 0; - user.items.food.Fish += 4; + user.items.food = { + ...user.items.food, + Fish: user.items.food.Fish + 4, + }; if (!user.items.food.Milk) user.items.food.Milk = 0; - user.items.food.Milk += 4; + user.items.food = { + ...user.items.food, + Milk: user.items.food.Milk + 4, + }; if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; - user.items.food.RottenMeat += 4; + user.items.food = { + ...user.items.food, + RottenMeat: user.items.food.RottenMeat + 4, + }; if (user.markModified) user.markModified('items.food'); }, }, @@ -875,7 +1007,10 @@ export default function getLoginIncentives (api) { rewardName: 'threeSaddles', assignReward: function assignReward (user) { if (!user.items.food.Saddle) user.items.food.Saddle = 0; - user.items.food.Saddle += 3; + user.items.food = { + ...user.items.food, + Saddle: user.items.food.Saddle + 3, + }; if (user.markModified) user.markModified('items.food'); }, }, diff --git a/website/common/script/fns/randomDrop.js b/website/common/script/fns/randomDrop.js index 5c95bf4505..0719685e31 100644 --- a/website/common/script/fns/randomDrop.js +++ b/website/common/script/fns/randomDrop.js @@ -79,8 +79,14 @@ export default function randomDrop (user, options, req = {}, analytics) { canDrop: true, }))); - user.items.food[drop.key] = user.items.food[drop.key] || 0; - user.items.food[drop.key] += 1; + user.items.food = { + ...user.items.food, + [drop.key]: user.items.food[drop.key] || 0, + }; + user.items.food = { + ...user.items.food, + [drop.key]: +1, + }; if (user.markModified) user.markModified('items.food'); drop.type = 'Food'; diff --git a/website/common/script/ops/buy/buyArmoire.js b/website/common/script/ops/buy/buyArmoire.js index ce7a978512..e370c0d1b5 100644 --- a/website/common/script/ops/buy/buyArmoire.js +++ b/website/common/script/ops/buy/buyArmoire.js @@ -129,8 +129,13 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d canDrop: true, })); - user.items.food[drop.key] = user.items.food[drop.key] || 0; - user.items.food[drop.key] += 1; + user.items.food = { + ...user.items.food, + [drop.key]: user.items.food[drop.key] || 0, + }; + user.items.food = { + [drop.key]: drop.key + 1, + }; if (user.markModified) user.markModified('items.food'); if (this.analytics) { diff --git a/website/common/script/ops/feed.js b/website/common/script/ops/feed.js index 58a204fe22..4f88b3c0d9 100644 --- a/website/common/script/ops/feed.js +++ b/website/common/script/ops/feed.js @@ -95,7 +95,10 @@ export default function feed (user, req = {}) { } } - user.items.food[food.key] -= 1; + user.items.food = { + ...user.items.food, + [food.key]: user.items.food[food.key] - 1, + }; if (user.markModified) user.markModified('items.food'); forEach(content.animalColorAchievements, achievement => { From 2c0da084eaede3b08181cd2bcefc2eb39d68fc55 Mon Sep 17 00:00:00 2001 From: Xaz16 Date: Sun, 15 Dec 2019 22:18:26 +0300 Subject: [PATCH 09/98] Fix: reassign object for user.items.quest to trigger change in vue view --- website/common/script/content/loginIncentives.js | 15 ++++++++++++--- website/common/script/fns/updateStats.js | 5 ++++- website/common/script/ops/buy/buyQuestGem.js | 5 ++++- website/common/script/ops/buy/buyQuestGold.js | 5 ++++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index 88cd142ed6..4a53cd22d4 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -79,7 +79,10 @@ export default function getLoginIncentives (api) { reward: [api.quests.moon1], assignReward: function assignReward (user) { if (!user.items.quests.moon1) user.items.quests.moon1 = 0; - user.items.quests.moon1 += 1; + user.items.quests = { + ...user.items.quests, + moon1: user.items.quests.moon1 + 1, + }; if (user.markModified) user.markModified('items.quests'); }, }, @@ -133,7 +136,10 @@ export default function getLoginIncentives (api) { reward: [api.quests.moon2], assignReward: function assignReward (user) { if (!user.items.quests.moon2) user.items.quests.moon2 = 0; - user.items.quests.moon2 += 1; + user.items.quests = { + ...user.items.quests, + moon2: user.items.quests.moon2 + 1, + }; if (user.markModified) user.markModified('items.quests'); }, }, @@ -193,7 +199,10 @@ export default function getLoginIncentives (api) { reward: [api.quests.moon3], assignReward: function assignReward (user) { if (!user.items.quests.moon3) user.items.quests.moon3 = 0; - user.items.quests.moon3 += 1; + user.items.quests = { + ...user.items.quests, + moon3: user.items.quests.moon3 + 1, + }; if (user.markModified) user.markModified('items.quests'); }, }, diff --git a/website/common/script/fns/updateStats.js b/website/common/script/fns/updateStats.js index 7eb672eb24..79b4f660c7 100644 --- a/website/common/script/fns/updateStats.js +++ b/website/common/script/fns/updateStats.js @@ -95,7 +95,10 @@ export default function updateStats (user, stats, req = {}, analytics) { if (user.markModified) user.markModified('flags.levelDrops'); if (!user.items.quests[k]) user.items.quests[k] = 0; - user.items.quests[k] += 1; + user.items.quests = { + ...user.items.quests, + [k]: user.items.quests[k] + 1, + }; if (user.markModified) user.markModified('items.quests'); if (analytics) { diff --git a/website/common/script/ops/buy/buyQuestGem.js b/website/common/script/ops/buy/buyQuestGem.js index 3f099d2a3a..91f60ad6df 100644 --- a/website/common/script/ops/buy/buyQuestGem.js +++ b/website/common/script/ops/buy/buyQuestGem.js @@ -47,7 +47,10 @@ export class BuyQuestWithGemOperation extends AbstractGemItemOperation { // esli !user.items.quests[item.key] || user.items.quests[item.key] < 0 ) user.items.quests[item.key] = 0; - user.items.quests[item.key] += this.quantity; + user.items.quests = { + ...user.items.quests, + [item.key]: user.items.quests[item.key] + this.quantity, + }; if (user.markModified) user.markModified('items.quests'); this.subtractCurrency(user, item, this.quantity); diff --git a/website/common/script/ops/buy/buyQuestGold.js b/website/common/script/ops/buy/buyQuestGold.js index ead059829c..a4f16d4bfd 100644 --- a/website/common/script/ops/buy/buyQuestGold.js +++ b/website/common/script/ops/buy/buyQuestGold.js @@ -67,7 +67,10 @@ export class BuyQuestWithGoldOperation extends AbstractGoldItemOperation { // es !user.items.quests[item.key] || user.items.quests[item.key] < 0 ) user.items.quests[item.key] = 0; - user.items.quests[item.key] += this.quantity; + user.items.quests = { + ...user.items.quests, + [item.key]: user.items.quests[item.key] + this.quantity, + }; if (user.markModified) user.markModified('items.quests'); this.subtractCurrency(user, item, this.quantity); From a05c7d2c6cc1e5eb57e50f3b3af2b4fbe65b217f Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 20 Dec 2019 12:45:01 +0100 Subject: [PATCH 10/98] fix(onboarding): make sure migration does not fail with missing field --- .../users/20191125_onboarding_achievements.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/migrations/users/20191125_onboarding_achievements.js b/migrations/users/20191125_onboarding_achievements.js index 290db87eca..eb77b48510 100644 --- a/migrations/users/20191125_onboarding_achievements.js +++ b/migrations/users/20191125_onboarding_achievements.js @@ -50,20 +50,22 @@ async function updateUser (user) { set['achievements.purchasedEquipment'] = true; } - const hasTask = Object.keys(user.tasksOrder).find(tasksOrderType => { - const order = user.tasksOrder[tasksOrderType]; + if (user.tasksOrder) { + const hasTask = Object.keys(user.tasksOrder).find(tasksOrderType => { + const order = user.tasksOrder[tasksOrderType]; - if (order && order.length > 0) return true; - return false; - }); + if (order && order.length > 0) return true; + return false; + }); - if (hasTask) { - set['achievements.createdTask'] = true; - } + if (hasTask) { + set['achievements.createdTask'] = true; + } - const hasExperience = user.stats && user.stats.exp && user.stats.exp > 0; - if (hasTask && hasExperience) { - set['achievements.completedTask'] = true; + const hasExperience = user.stats && user.stats.exp && user.stats.exp > 0; + if (hasTask && hasExperience) { + set['achievements.completedTask'] = true; + } } if (count % progressCount === 0) console.warn(`${count} ${user._id}`); From da380567e9cd898f548bbc78a32a36ec5e21eccd Mon Sep 17 00:00:00 2001 From: Melior Date: Fri, 20 Dec 2019 17:16:46 +0100 Subject: [PATCH 11/98] Translated using Weblate (Latin) Currently translated at 100.0% (8 of 8 strings) Translation: Habitica/Overview Translate-URL: https://translate.habitica.com/projects/habitica/overview/la/ Translated using Weblate (Swedish) Currently translated at 91.7% (1821 of 1985 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/sv/ Translated using Weblate (Latin) Currently translated at 100.0% (8 of 8 strings) Translation: Habitica/Overview Translate-URL: https://translate.habitica.com/projects/habitica/overview/la/ Translated using Weblate (Latin) Currently translated at 100.0% (36 of 36 strings) Translation: Habitica/Loadingscreentips Translate-URL: https://translate.habitica.com/projects/habitica/loadingscreentips/la/ Translated using Weblate (Spanish) Currently translated at 91.6% (1820 of 1985 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (676 of 676 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (676 of 676 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/ Translated using Weblate (Japanese) Currently translated at 100.0% (487 of 487 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/ Translated using Weblate (Japanese) Currently translated at 64.6% (42 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/ Translated using Weblate (Latin) Currently translated at 100.0% (57 of 57 strings) Translation: Habitica/Spells Translate-URL: https://translate.habitica.com/projects/habitica/spells/la/ Translated using Weblate (Latin) Currently translated at 96.4% (27 of 28 strings) Translation: Habitica/Rebirth Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/la/ Translated using Weblate (Latin) Currently translated at 100.0% (8 of 8 strings) Translation: Habitica/Overview Translate-URL: https://translate.habitica.com/projects/habitica/overview/la/ Translated using Weblate (Latin) Currently translated at 100.0% (36 of 36 strings) Translation: Habitica/Loadingscreentips Translate-URL: https://translate.habitica.com/projects/habitica/loadingscreentips/la/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/ Translated using Weblate (Japanese) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/ Translated using Weblate (Spanish (Latin America)) Currently translated at 52.3% (34 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (169 of 169 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (169 of 169 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (483 of 483 strings) Translation: Habitica/Groups Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/pt_BR/ Translated using Weblate (Japanese) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/ Translated using Weblate (Japanese) Currently translated at 98.5% (480 of 487 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt_BR/ Translated using Weblate (French) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/ Translated using Weblate (German) Currently translated at 84.6% (55 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/ --- website/common/locales/de/achievements.json | 15 +++- website/common/locales/es/gear.json | 4 +- .../common/locales/es_419/achievements.json | 10 ++- website/common/locales/fr/achievements.json | 25 ++++++- website/common/locales/ja/achievements.json | 8 ++- website/common/locales/ja/backgrounds.json | 16 ++++- website/common/locales/ja/generic.json | 4 +- website/common/locales/ja/npc.json | 3 +- .../common/locales/la/loadingscreentips.json | 72 +++++++++---------- website/common/locales/la/overview.json | 20 +++--- website/common/locales/la/rebirth.json | 11 +-- website/common/locales/la/spells.json | 14 ++-- .../common/locales/pt_BR/achievements.json | 25 ++++++- website/common/locales/pt_BR/generic.json | 4 +- website/common/locales/pt_BR/groups.json | 4 +- website/common/locales/pt_BR/limited.json | 4 +- website/common/locales/pt_BR/npc.json | 3 +- .../common/locales/pt_BR/questscontent.json | 2 +- website/common/locales/sv/gear.json | 14 +++- website/common/locales/zh/achievements.json | 25 ++++++- website/common/locales/zh/generic.json | 4 +- website/common/locales/zh/limited.json | 2 +- website/common/locales/zh/npc.json | 3 +- website/common/locales/zh/questscontent.json | 2 +- 24 files changed, 211 insertions(+), 83 deletions(-) diff --git a/website/common/locales/de/achievements.json b/website/common/locales/de/achievements.json index e8a3a9f322..f2d20a3996 100644 --- a/website/common/locales/de/achievements.json +++ b/website/common/locales/de/achievements.json @@ -40,5 +40,18 @@ "achievementPrimedForPaintingText": "Hat alle weißen Haustiere gesammelt.", "achievementPearlyProText": "Hat alle weißen Reittiere gezähmt.", "achievementPearlyPro": "Perlweiß-Profi", - "achievementPrimedForPainting": "Grundierung gemalt" + "achievementPrimedForPainting": "Grundierung gemalt", + "achievementCreatedTask": "Erstelle eine Aufgabe", + "onboardingCompleteDesc": "Du hast durch das Abschließen der Liste 5 Erfolge freigeschaltet und 100 Goldstücke verdient.", + "earnedAchievement": "Du hast einen Erfolg freigeschaltet!", + "achievementPurchasedEquipmentModalText": "Durch Ausrüstung kann Dein Avatar personalisiert und die Attributswerte erhöht werden", + "achievementPurchasedEquipment": "Erwerbe Ausrüstung", + "achievementFedPetModalText": "Es gibt viele verschiedene Arten an Futter, aber Haustiere können wählerisch sein", + "achievementFedPet": "Füttere ein Haustier", + "achievementHatchedPet": "Schlüpfe ein Haustier", + "hideAchievements": "<%= category %> ausblenden", + "showAllAchievements": "Alle <%= category %> anzeigen", + "viewAchievements": "Erfolge ansehen", + "letsGetStarted": "Los geht's!", + "onboardingProgress": "<%= percentage %>% Fortschritt" } diff --git a/website/common/locales/es/gear.json b/website/common/locales/es/gear.json index 5914cac590..ccb0eebe53 100644 --- a/website/common/locales/es/gear.json +++ b/website/common/locales/es/gear.json @@ -1816,5 +1816,7 @@ "weaponArmoireNephriteBowText": "Arco de Nerfita", "armorSpecialKS2019Text": "Armadura Mítica de Grifo", "weaponMystery201911Notes": "La bola de cristal encima del báculo puede revelarte el futuro, ¡Pero cuidado! Usando esa peligrosa sabiduría puede cambiar una persona de maneras inesperadas. No otorga ningún beneficio Artículo de Suscriptor de noviembre de 2019.", - "weaponMystery201911Text": "Báculo de cristal atractivo" + "weaponMystery201911Text": "Báculo de cristal atractivo", + "weaponArmoireFloridFanNotes": "Te encariñan los pliegues de seda cuando no están en uso. Incrementa la Constitución en <%= con %>. Armario Encantado: Objeto Independiente.", + "weaponArmoireFloridFanText": "Abanico Florido" } diff --git a/website/common/locales/es_419/achievements.json b/website/common/locales/es_419/achievements.json index 57d33adf2e..ccfb82fcb0 100644 --- a/website/common/locales/es_419/achievements.json +++ b/website/common/locales/es_419/achievements.json @@ -24,5 +24,13 @@ "achievementAridAuthority": "Autoridad Árida", "achievementDustDevilModalText": "¡Has coleccionado todas las Mascotas Desierto!", "achievementDustDevilText": "Ha coleccionado todas las Mascotas Desierto.", - "achievementDustDevil": "Diablo de Polvo" + "achievementDustDevil": "Diablo de Polvo", + "hideAchievements": "Ocultar <%= category %>", + "showAllAchievements": "Ver todo <%= category %>", + "onboardingCompleteDesc": "Obtuviste 5 logros y 100 monedas de oro por completar la lista.", + "earnedAchievement": "¡Has completado un logro!", + "viewAchievements": "Ver los logros", + "letsGetStarted": "¡Comencemos!", + "onboardingProgress": "<%= percentage %>% de progreso", + "gettingStartedDesc": "Creemos una tarea, completémosla y luego mira tus recompensas. ¡Completarás 5 logros y ganarás 100 monedas de oro cuando acabes!" } diff --git a/website/common/locales/fr/achievements.json b/website/common/locales/fr/achievements.json index 6e52bf2f67..9ca1d17092 100644 --- a/website/common/locales/fr/achievements.json +++ b/website/common/locales/fr/achievements.json @@ -40,5 +40,28 @@ "achievementPearlyPro": "Une vraie perle", "achievementPrimedForPaintingModalText": "Vous avez collecté tous les familiers blancs !", "achievementPrimedForPaintingText": "A collecté tous les familiers blancs.", - "achievementPrimedForPainting": "Sous-couche de peinture" + "achievementPrimedForPainting": "Sous-couche de peinture", + "achievementPurchasedEquipmentModalText": "L'équipement est une façon de customiser votre avatar et d'améliorer vos stats", + "achievementPurchasedEquipmentText": "A acheté sa première pièce d'équipement.", + "achievementPurchasedEquipment": "Achetez de l'équipement", + "achievementFedPetModalText": "Il y a plusieurs types de nourriture, mais les familiers peuvent être capricieux", + "achievementFedPetText": "A nourri son premier familier.", + "achievementFedPet": "Donnez à manger à un familier", + "achievementHatchedPetModalText": "Rendez-vous dans votre inventaire et essayez de combiner une potion d'éclosion et un œuf", + "achievementHatchedPetText": "A fait éclore son premier familier.", + "achievementHatchedPet": "Faites éclore un familier", + "achievementCompletedTaskModalText": "Valider n'importe laquelle de vos tâches pour remporter des récompenses", + "achievementCompletedTaskText": "A rempli sa première tâche.", + "achievementCompletedTask": "Valider une tâche", + "achievementCreatedTaskModalText": "Ajouter une tâche pour quelque chose que vous voudriez accomplir cette semaine", + "achievementCreatedTaskText": "A créé sa première tâche.", + "achievementCreatedTask": "Créer une tâche", + "hideAchievements": "Cacher <%= category %>", + "showAllAchievements": "Voir tout <%= category %>", + "onboardingCompleteDesc": "Vous avec remporté 5 succès et 100 pièces d'or pour avoir complété la liste.", + "earnedAchievement": "Vous avez remporté un succès !", + "viewAchievements": "Voir les succès", + "letsGetStarted": "Commençons !", + "onboardingProgress": "<%= percentage %>% de progression", + "gettingStartedDesc": "Créons une tâche, pour ensuite la valider et regarder le résultat. Vous gagnerez 5 succès et 100 pièces d'or quand vous aurez fini !" } diff --git a/website/common/locales/ja/achievements.json b/website/common/locales/ja/achievements.json index b149f80060..51c6c595be 100644 --- a/website/common/locales/ja/achievements.json +++ b/website/common/locales/ja/achievements.json @@ -34,5 +34,11 @@ "achievementKickstarter2019Text": "2019年のPin Kickstarterプロジェクトで支援しました", "achievementUndeadUndertaker": "不死の葬儀屋", "achievementUndeadUndertakerModalText": "ゾンビの乗騎をすべて手なずけました!", - "achievementUndeadUndertakerText": "ゾンビの乗騎をすべて手なずけました。" + "achievementUndeadUndertakerText": "ゾンビの乗騎をすべて手なずけました。", + "onboardingCompleteDesc": "リストを完了したため5つの実績100ゴールドを獲得しました。", + "viewAchievements": "実績を見る", + "letsGetStarted": "はじめましょう!", + "onboardingProgress": "<%= percentage %>% 進捗", + "gettingStartedDesc": "タスクを作成して、完了して、ごほうびをチェックしましょう。 一度やると5つの実績100ゴールドを獲得できます!", + "earnedAchievement": "実績を獲得しました!" } diff --git a/website/common/locales/ja/backgrounds.json b/website/common/locales/ja/backgrounds.json index 8ef13ef2d5..d2f2ca7f4a 100644 --- a/website/common/locales/ja/backgrounds.json +++ b/website/common/locales/ja/backgrounds.json @@ -471,5 +471,19 @@ "backgroundAutumnFlowerGardenNotes": "秋の花園の暖かな空気を吸い込みましょう。", "backgroundAutumnFlowerGardenText": "秋の花園", "backgrounds092019": "セット64:2019年9月リリース", - "backgroundMonsterMakersWorkshopNotes": "モンスターメーカーの工房で、疑惑の技術を実験しましょう。" + "backgroundMonsterMakersWorkshopNotes": "モンスターメーカーの工房で、疑惑の技術を実験しましょう。", + "backgroundHolidayMarketNotes": "祭日の市場で、すばらしい贈り物と飾りを探しましょう。", + "backgroundHolidayMarketText": "祭日の市場", + "backgroundFlyingInAThunderstormNotes": "思い切ってできる限り近くまで荒々しい雷雨を追いかけましょう。", + "backgroundFlyingInAThunderstormText": "荒々しい雷雨", + "backgroundFarmersMarketNotes": "農産物直売所でとびきり新鮮な食べ物を買いましょう。", + "backgroundFarmersMarketText": "農産物直売所", + "backgrounds112019": "セット66:2019年11月リリース", + "backgroundHolidayWreathText": "祭日のリース", + "backgroundWinterNocturneText": "冬の夜想曲", + "backgroundWinterNocturneNotes": "冬の夜想曲の星明かりを浴びましょう。", + "backgroundHolidayWreathNotes": "かぐわしい祭日のリースであなたのアバターを飾りましょう。", + "backgrounds122019": "セット67:2019年12月リリース", + "backgroundPotionShopNotes": "薬屋であらゆる病気の万能薬を探しましょう。", + "backgroundPotionShopText": "薬屋" } diff --git a/website/common/locales/ja/generic.json b/website/common/locales/ja/generic.json index 19f03db5a4..fef2ce18e8 100644 --- a/website/common/locales/ja/generic.json +++ b/website/common/locales/ja/generic.json @@ -294,5 +294,7 @@ "options": "オプション", "demo": "デモ", "loadEarlierMessages": "以前のメッセージを読み込む", - "finish": "終了" + "finish": "終了", + "congratulations": "おめでとうございます!", + "onboardingAchievs": "初心者入門の実績" } diff --git a/website/common/locales/ja/npc.json b/website/common/locales/ja/npc.json index d1acd5b1d8..0389a589ff 100644 --- a/website/common/locales/ja/npc.json +++ b/website/common/locales/ja/npc.json @@ -169,5 +169,6 @@ "imReady": "Habitica をはじめる", "limitedOffer": "<%= date %>まで購入可能", "paymentAutoRenew": "この寄付会員はキャンセルするまで自動更新されます。もしこの寄付会員をキャンセルする必要があるときは、設定からキャンセルできます。", - "paymentCanceledDisputes": "キャンセルの承認のメールをあなたに送りました。もしそのメールが見つからない場合は、今後の請求についての論争を防ぐために、私たちにご連絡をお願いいたします。" + "paymentCanceledDisputes": "キャンセルの承認のメールをあなたに送りました。もしそのメールが見つからない場合は、今後の請求についての論争を防ぐために、私たちにご連絡をお願いいたします。", + "cannotUnpinItem": "このアイテムはピン留めを外せません。" } diff --git a/website/common/locales/la/loadingscreentips.json b/website/common/locales/la/loadingscreentips.json index 20dd7dcbc4..91322e8a5d 100755 --- a/website/common/locales/la/loadingscreentips.json +++ b/website/common/locales/la/loadingscreentips.json @@ -1,38 +1,38 @@ { - "tipTitle": "Monitus #<%= tipNumber %>", - "tip1": "Check tasks on the go with the Habitica mobile apps.", - "tip2": "Click any equipment to see a preview, or equip it instantly by clicking the star in its upper-left corner!", - "tip3": "Use emoji to quickly differentiate between your tasks.", - "tip4": "Use the # sign before a task name to make it really big!", - "tip5": "It’s best to use skills that cause buffs in the morning so they last longer.", - "tip6": "Hover over a task and click the dots to access advanced task controls, such as the ability to push tasks to the top/bottom of your list.", - "tip7": "Some backgrounds connect perfectly if Party members use the same background. Ex: Mountain Lake, Pagodas, and Rolling Hills.", - "tip8": "Send a Message to someone by clicking their name in chat and then clicking the envelope icon at the top of their profile!", - "tip9": "Use the filters + search bar in the Inventories, Shops, Guilds, and Challenges to quickly find what you want.", - "tip10": "You can win gems by competing in Challenges. New ones are added every day!", - "tip11": "Having more than four Party members increases accountability!", - "tip12": "Add checklists to your To-Dos to multiply your rewards!", - "tip13": "Click “Tags” on your task page to make an unwieldy task list very manageable!", - "tip14": "You can add headers or inspirational quotes to your list as Habits with no (+/-).", - "tip15": "Complete all the Masterclasser Quest-lines to learn about Habitica’s secret lore.", - "tip16": "Click the link to the Data Display Tool in the footer for valuable insights on your progress.", - "tip17": "Use the mobile apps to set reminders for your tasks.", - "tip18": "Habits that are just positive or just negative gradually “fade” and return to yellow.", - "tip19": "Boost your Intelligence Stat to gain more experience when you complete a task.", - "tip20": "Boost your Perception Stat to get more drops and gold.", - "tip21": "Boost your Strength Stat to do more boss damage or get critical hits.", - "tip22": "Boost your Constitution Stat to lessen the damage from incomplete Dailies.", - "tip23": "Reach level 100 to unlock the Orb of Rebirth for free and start a new adventure!", - "tip24": "Have a question? Ask in the Habitica Help Guild!", - "tip25": "The four seasonal Grand Galas start near the solstices and equinoxes.", - "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", - "tip27": "Did a Daily yesterday, but forgot to check it off? Don't worry! With Record Yesterday's Activity, you'll have a chance to record what you did before starting your new day.", - "tip28": "Set a Custom Day Start under User Icon > Settings to control when your day restarts.", - "tip29": "Complete all your Dailies to get a Perfect Day Buff that increases your Stats!", - "tip30": "You can invite people to Guilds, not just Parties.", - "tip31": "Check out the pre-made lists in the Library of Tasks and Challenges Guild for example tasks.", - "tip32": "Lots of Habitica’s code, art, and writing is made by volunteer contributors! Head to the Aspiring Legends Guild to help.", - "tip33": "Check out The Bulletin Board Guild for news about Guilds, Challenges, and other player-created events - and announce your own there!", - "tip34": "Occasionally re-evaluate your tasks to make sure they’re up-to-date!", - "tip35": "Users who are part of a Group Plan gain the ability to assign tasks to other users in that Group for extra task management and accountability." + "tipTitle": "Monitus #<%= tipNumber %>", + "tip1": "Check tasks on the go with the Habitica mobile apps.", + "tip2": "Click any equipment to see a preview, or equip it instantly by clicking the star in its upper-left corner!", + "tip3": "Utere emoji ut inter munera tua celeriter distinguas.", + "tip4": "Utere signum # ante nominem muneris ut id magnissimum faciat!", + "tip5": "It’s best to use skills that cause buffs in the morning so they last longer.", + "tip6": "Hover over a task and click the dots to access advanced task controls, such as the ability to push tasks to the top/bottom of your list.", + "tip7": "Some backgrounds connect perfectly if Party members use the same background. Ex: Mountain Lake, Pagodas, and Rolling Hills.", + "tip8": "Send a Message to someone by clicking their name in chat and then clicking the envelope icon at the top of their profile!", + "tip9": "Use the filters + search bar in the Inventories, Shops, Guilds, and Challenges to quickly find what you want.", + "tip10": "You can win gems by competing in Challenges. New ones are added every day!", + "tip11": "Having more than four Party members increases accountability!", + "tip12": "Add checklists to your To-Dos to multiply your rewards!", + "tip13": "Click “Tags” on your task page to make an unwieldy task list very manageable!", + "tip14": "You can add headers or inspirational quotes to your list as Habits with no (+/-).", + "tip15": "Complete all the Masterclasser Quest-lines to learn about Habitica’s secret lore.", + "tip16": "Click the link to the Data Display Tool in the footer for valuable insights on your progress.", + "tip17": "Use the mobile apps to set reminders for your tasks.", + "tip18": "Habits that are just positive or just negative gradually “fade” and return to yellow.", + "tip19": "Boost your Intelligence Stat to gain more experience when you complete a task.", + "tip20": "Boost your Perception Stat to get more drops and gold.", + "tip21": "Boost your Strength Stat to do more boss damage or get critical hits.", + "tip22": "Boost your Constitution Stat to lessen the damage from incomplete Dailies.", + "tip23": "Reach level 100 to unlock the Orb of Rebirth for free and start a new adventure!", + "tip24": "Have a question? Ask in the Habitica Help Guild!", + "tip25": "The four seasonal Grand Galas start near the solstices and equinoxes.", + "tip26": "You can look for a Party or find Party members in the Party Wanted Guild!", + "tip27": "Did a Daily yesterday, but forgot to check it off? Don't worry! With Record Yesterday's Activity, you'll have a chance to record what you did before starting your new day.", + "tip28": "Set a Custom Day Start under User Icon > Settings to control when your day restarts.", + "tip29": "Complete all your Dailies to get a Perfect Day Buff that increases your Stats!", + "tip30": "You can invite people to Guilds, not just Parties.", + "tip31": "Check out the pre-made lists in the Library of Tasks and Challenges Guild for example tasks.", + "tip32": "Lots of Habitica’s code, art, and writing is made by volunteer contributors! Head to the Aspiring Legends Guild to help.", + "tip33": "Check out The Bulletin Board Guild for news about Guilds, Challenges, and other player-created events - and announce your own there!", + "tip34": "Occasionally re-evaluate your tasks to make sure they’re up-to-date!", + "tip35": "Users who are part of a Group Plan gain the ability to assign tasks to other users in that Group for extra task management and accountability." } diff --git a/website/common/locales/la/overview.json b/website/common/locales/la/overview.json index 7e9880e410..ce7da5864d 100755 --- a/website/common/locales/la/overview.json +++ b/website/common/locales/la/overview.json @@ -1,14 +1,10 @@ { - "needTips": "Aliquasne instructiones incipiente requiris? Ducens simplex hic est!", - - "step1": "Gradus 1: Munera Inscribere", - "webStep1Text": "Habitica is nothing without real-world goals, so enter a few tasks. You can add more later as you think of them! All tasks can be added by clicking the green \"Create\" button.\n* **Set up [To-Dos](http://habitica.wikia.com/wiki/To-Dos):** Enter tasks you do once or rarely in the To-Dos column, one at a time. You can click on the tasks to edit them and add checklists, due dates, and more!\n* **Set up [Dailies](http://habitica.wikia.com/wiki/Dailies):** Enter activities you need to do daily or on a particular day of the week, month, or year in the Dailies column. Click task to edit when it will be due and/or set a start date. You can also make it due on a repeating basis, for example, every 3 days.\n* **Set up [Habits](http://habitica.wikia.com/wiki/Habits):** Enter habits you want to establish in the Habits column. You can edit the Habit to change it to just a good habit :heavy_plus_sign: or a bad habit :heavy_minus_sign:\n* **Set up [Rewards](http://habitica.wikia.com/wiki/Rewards):** In addition to the in-game Rewards offered, add activities or treats which you want to use as a motivation to the Rewards column. It's important to give yourself a break or allow some indulgence in moderation!\n* If you need inspiration for which tasks to add, you can look at the wiki's pages on [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits), [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies), [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos), and [Sample Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards).", - - "step2": "Gradus 2: Puncta Facientibus Munera in Vita Naturali Potiri", - "webStep2Text": "Nunc, tuos scopos ex tuo indice assultare incipe! [Experientiam](http://habitica.wikia.com/wiki/Experience_Points), quae te increscere tuum gradum adiuvat, et [Aurum](http://habitica.wikia.com/wiki/Gold_Points), quo Praemia emas, acquires dum munera comples et notas. Si in habitus malos recedas aut tua cotidiana desis, [Valitudonem](http://habitica.wikia.com/wiki/Health_Points) perdas. Ita Habitica barrae Experientiae Valitudonisque sunt indicatores geniati tui progressui ad tuos scopos. Notabis ut tua vita in meliorem fiet dum tua persona in ludo proficit.", - - "step3": "Gradus 3: Habitica Explorare et Adaptare", - "webStep3Text": "Once you're familiar with the basics, you can get even more out of Habitica with these nifty features:\n * Organize your tasks with [tags](http://habitica.wikia.com/wiki/Tags) (edit a task to add them).\n * Customize your [avatar](http://habitica.wikia.com/wiki/Avatar) by clicking the user icon in the upper-right corner.\n * Buy your [Equipment](http://habitica.wikia.com/wiki/Equipment) under Rewards or from the [Shops](<%= shopUrl %>), and change it under [Inventory > Equipment](<%= equipUrl %>).\n * Connect with other users via the [Tavern](http://habitica.wikia.com/wiki/Tavern).\n * Starting at Level 3, hatch [Pets](http://habitica.wikia.com/wiki/Pets) by collecting [eggs](http://habitica.wikia.com/wiki/Eggs) and [hatching potions](http://habitica.wikia.com/wiki/Hatching_Potions). [Feed](http://habitica.wikia.com/wiki/Food) them to create [Mounts](http://habitica.wikia.com/wiki/Mounts).\n * At level 10: Choose a particular [class](http://habitica.wikia.com/wiki/Class_System) and then use class-specific [skills](http://habitica.wikia.com/wiki/Skills) (levels 11 to 14).\n * Form a party with your friends (by clicking [Party](<%= partyUrl %>) in the navigation bar) to stay accountable and earn a Quest scroll.\n * Defeat monsters and collect objects on [quests](http://habitica.wikia.com/wiki/Quests) (you will be given a quest at level 15).", - - "overviewQuestions": "Have questions? Check out the [FAQ](<%= faqUrl %>)! If your question isn't mentioned there, you can ask for further help in the [Habitica Help guild](<%= helpGuildUrl %>).\n\nGood luck with your tasks!" + "needTips": "Aliquasne instructiones incipiente requiris? Ducens simplex hic est!", + "step1": "Gradus 1: Munera Inscribere", + "webStep1Text": "Habitica est nihil sine scopis vita naturalis, inscribe igitur pauca munera. Si plus cogitas, postmodum quae potes addere! Omnia munera deprimente globulum viridem nominatum \"Crea\" potent addere.\n* **Statue [Agenda](http://habitica.wikia.com/wiki/To-Dos):** Inscribe munera semel aut infrequent, in columna Agendis unum ad tempus. Munera potes deprimere ut quae recenseas et alba signorum et dies terminas et plus addas!\n* **Statue [Cotidiana](http://habitica.wikia.com/wiki/Dailies):** Inscribe agenda cotidiana aut in certa diei hebdomada aut mensis aut anni in columna Cotidiana. Deprime munus ut diem terminam recenseas et/aut diem initiantem statuas. Etiam frequentiam diei terminae potes assignare, exempli gratia, quaque tertia die.\n* **Statue [Habitus](http://habitica.wikia.com/wiki/Habits):** Inscribe habitus volentis statuere in columna Habitibus. Habitum potes recensere ut mutes in habitum solum bonum :heavy_plus_sign: aut habitum solum malum :heavy_minus_sign:\n* **Statue [Praemia](http://habitica.wikia.com/wiki/Rewards):** Praeter praemia oblatos intra ludum, adde actiones et libita quos vis uti pro incitamento in columna Praemiis. Est magnus, in moderationem, quiescere aut indulgere!\n* Si inspirationem de quibus muneribus addituris requiris, potes specere paginae wiki de [Habitibus Exemplis](http://habitica.wikia.com/wiki/Sample_Habits), [Cotidianis Exemplis](http://habitica.wikia.com/wiki/Sample_Dailies), [Agendis Exemplis](http://habitica.wikia.com/wiki/Sample_To-Dos), et [Praemiis Exemplis](http://habitica.wikia.com/wiki/Sample_Custom_Rewards).", + "step2": "Gradus 2: Puncta Facientibus Munera in Vita Naturali Potiri", + "webStep2Text": "Nunc, tuos scopos ex tuo indice assultare incipe! [Experientiam](http://habitica.wikia.com/wiki/Experience_Points), quae te increscere tuum gradum adiuvat, et [Aurum](http://habitica.wikia.com/wiki/Gold_Points), quo Praemia emas, acquires dum munera comples et notas. Si in habitus malos recedas aut tua cotidiana desis, [Valitudonem](http://habitica.wikia.com/wiki/Health_Points) perdas. Ita Habitica barrae Experientiae Valitudonisque sunt indicatores geniati tui progressui ad tuos scopos. Notabis ut tua vita in meliorem fiet dum tua persona in ludo proficit.", + "step3": "Gradus 3: Habitica Explorare et Adaptare", + "webStep3Text": "Once you're familiar with the basics, you can get even more out of Habitica with these nifty features:\n * Organize your tasks with [tags](http://habitica.wikia.com/wiki/Tags) (edit a task to add them).\n * Customize your [avatar](http://habitica.wikia.com/wiki/Avatar) by clicking the user icon in the upper-right corner.\n * Buy your [Equipment](http://habitica.wikia.com/wiki/Equipment) under Rewards or from the [Shops](<%= shopUrl %>), and change it under [Inventory > Equipment](<%= equipUrl %>).\n * Connect with other users via the [Tavern](http://habitica.wikia.com/wiki/Tavern).\n * Initians quando pervenis Gradum 3, hatch [Pets](http://habitica.wikia.com/wiki/Pets) by collecting [eggs](http://habitica.wikia.com/wiki/Eggs) and [hatching potions](http://habitica.wikia.com/wiki/Hatching_Potions). [Feed](http://habitica.wikia.com/wiki/Food) them to create [Mounts](http://habitica.wikia.com/wiki/Mounts).\n * Quando pervenis gradum 10: Choose a particular [class](http://habitica.wikia.com/wiki/Class_System) and then use class-specific [skills](http://habitica.wikia.com/wiki/Skills) (gradi 11, 12, 13, et 14).\n * Form a party with your friends (by clicking [Party](<%= partyUrl %>) in the navigation bar) to stay accountable and earn a Quest scroll.\n * Vince monstra et collige collect res in [investigationibus](http://habitica.wikia.com/wiki/Quests) (quando pervenis gradum 15, investigatio tibi dabitur).", + "overviewQuestions": "Have questions? Check out the [FAQ](<%= faqUrl %>)! If your question isn't mentioned there, you can ask for further help in the [Habitica Help guild](<%= helpGuildUrl %>).\n\nGood luck with your tasks!" } diff --git a/website/common/locales/la/rebirth.json b/website/common/locales/la/rebirth.json index 51ea997e47..8aab8128b1 100755 --- a/website/common/locales/la/rebirth.json +++ b/website/common/locales/la/rebirth.json @@ -18,12 +18,13 @@ "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Iter Novum inceptum esse", "rebirthText": "Itinera nova <%= rebirths %> incepta esse", - "rebirthOrb": "Used an Orb of Rebirth to start over after attaining Level <%= level %>.", - "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher.", - "rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.", + "rebirthOrb": "Orbis Renascientae usus est ut incipiat iterum post tenentem Gradum <%= level %>.", + "rebirthOrb100": "Orbis Renascientae usus est ut incipiat iterum post tenentem Gradum 100 aut altiorem.", + "rebirthOrbNoLevel": "Orbis Renascientae usus est ut incipiat iterum.", "rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's Orb of Rebirth page.", "rebirthName": "Orbis Renascentiae", "reborn": "Renatus, gradus maximus <%= reLevel %>", "confirmReborn": "Esne certus?", - "rebirthComplete": "Renatus/a es!" -} \ No newline at end of file + "rebirthComplete": "Renatus/a es!", + "nextFreeRebirth": "<%= days %> diei usque ad Orbem Renascientae est GRATUM" +} diff --git a/website/common/locales/la/spells.json b/website/common/locales/la/spells.json index 4966f1289a..69a8105c13 100755 --- a/website/common/locales/la/spells.json +++ b/website/common/locales/la/spells.json @@ -35,21 +35,21 @@ "spellHealerHealAllText": "Benedictio", "spellHealerHealAllNotes": "Incantatio relaxans tua valitudinem Partium tuorum totorum restituit! (Secundum: ROB et INT)", "spellSpecialSnowballAuraText": "Viburnum", - "spellSpecialSnowballAuraNotes": "Turn a friend into a frosty snowman!", + "spellSpecialSnowballAuraNotes": "Unum amicum in virum nivis gelidum mutat!", "spellSpecialSaltText": "Sal", - "spellSpecialSaltNotes": "Reverse the spell that made you a snowman.", + "spellSpecialSaltNotes": "Incantationem quam te mutavit in virum nivis revertitur.", "spellSpecialSpookySparklesText": "Scintillationes Formidabiles", - "spellSpecialSpookySparklesNotes": "Turn your friend into a transparent pal!", + "spellSpecialSpookySparklesNotes": "Amicum tuum in perlucidum amicum mutat!", "spellSpecialOpaquePotionText": "Potio Turbida", - "spellSpecialOpaquePotionNotes": "Reverse the spell that made you transparent.", + "spellSpecialOpaquePotionNotes": "Incantationem quam te mutavit perlucidum revertitur.", "spellSpecialShinySeedText": "Fulgens Semen", "spellSpecialShinySeedNotes": "Unum amicum in laetum florem mutat!", "spellSpecialPetalFreePotionText": "Sine Folio Potio", - "spellSpecialPetalFreePotionNotes": "Reverse the spell that made you a flower.", + "spellSpecialPetalFreePotionNotes": "Incantationem quam te mutavit in florem revertitur.", "spellSpecialSeafoamText": "Spuma", - "spellSpecialSeafoamNotes": "Unum Amicum in Maritimum Monstrum Mutat!", + "spellSpecialSeafoamNotes": "Unum amicum in maritimum monstrum mutat!", "spellSpecialSandText": "Pulvis", - "spellSpecialSandNotes": "Reverse the spell that made you a sea star.", + "spellSpecialSandNotes": "Incantationem quam te mutavit in maritimum monstrum revertitur.", "partyNotFound": "Grex non repertus est", "targetIdUUID": "Debere \"targetId\" Utentem ID licitum esse.", "challengeTasksNoCast": "Non licet incantanti in muneribus provocationis.", diff --git a/website/common/locales/pt_BR/achievements.json b/website/common/locales/pt_BR/achievements.json index e1ff2d40b3..5f2424a1e4 100644 --- a/website/common/locales/pt_BR/achievements.json +++ b/website/common/locales/pt_BR/achievements.json @@ -40,5 +40,28 @@ "achievementPearlyPro": "Perolado Pro", "achievementPrimedForPaintingModalText": "Você coletou todos os Mascotes brancos!", "achievementPrimedForPaintingText": "Coletou todos os Mascotes brancos.", - "achievementPrimedForPainting": "Preparado para pintura" + "achievementPrimedForPainting": "Preparado para pintura", + "achievementPurchasedEquipmentModalText": "Equipamento é um meio de personalizar seu avatar e melhorar suas estatísticas", + "achievementPurchasedEquipmentText": "Comprou sua primeira peça de equipamento.", + "achievementPurchasedEquipment": "Comprar equipamento", + "achievementFedPetModalText": "Há diferentes tipos de comida, mas os mascotes podem ser exigentes", + "achievementFedPetText": "Alimentou seu primeiro mascote.", + "achievementFedPet": "Alimentar um Mascote", + "achievementHatchedPetModalText": "Vá até o seu inventário e tente combinar uma poção de eclosão e um ovo", + "achievementHatchedPetText": "Chocou seu primeiro mascote.", + "achievementHatchedPet": "Chocar um Mascote", + "achievementCompletedTaskModalText": "Marque qualquer uma das suas tarefas para ganhar recompensas", + "achievementCompletedTaskText": "Concluiu sua primeira tarefa.", + "achievementCompletedTask": "Concluir uma tarefa", + "achievementCreatedTaskModalText": "Adicione uma tarefa para algo que você gostaria de realizar esta semana", + "achievementCreatedTaskText": "Criou sua primeira tarefa.", + "achievementCreatedTask": "Criar uma Tarefa", + "hideAchievements": "Ocultar <%= category %>", + "showAllAchievements": "Exibir todos(as) <%= category %>", + "onboardingCompleteDesc": "Você ganhou 5 conquistas e 100 peças de ouro por completar a lista.", + "earnedAchievement": "Você ganhou uma conquista!", + "viewAchievements": "Visualizar Conquistas", + "letsGetStarted": "Vamos começar!", + "onboardingProgress": "<%= percentage %>% concluído", + "gettingStartedDesc": "Vamos criar uma tarefa, concluí-la e, então, conferir suas recompensas. Você ganhará 5 conquistas e 100 peças ouro assim que terminar!" } diff --git a/website/common/locales/pt_BR/generic.json b/website/common/locales/pt_BR/generic.json index 55a582c066..2cafc6d435 100644 --- a/website/common/locales/pt_BR/generic.json +++ b/website/common/locales/pt_BR/generic.json @@ -294,5 +294,7 @@ "options": "Opções", "demo": "Demonstração", "loadEarlierMessages": "Carregar mensagens anteriores", - "finish": "Finalizar" + "finish": "Finalizar", + "congratulations": "Parabéns!", + "onboardingAchievs": "Conquistas de integração" } diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index 2872a1c009..3bf24f14f3 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -161,10 +161,10 @@ "abuseFlagModalButton": "Reportar Violação", "abuseReported": "Obrigado por reportar essa violação. Os moderadores foram notificados.", "abuseAlreadyReported": "Você já reportou essa mensagem.", - "whyReportingPost": "Por quê você está denunciando esta publicação?", + "whyReportingPost": "Por que você está denunciando esta publicação?", "whyReportingPostPlaceholder": "Por favor, ajude nossos moderadores explicando qual violação você esta denunciando nesta publicação, como por exemplo: spam, palavrões, profanação religiosa, intolerância, insultos, conteúdo adulto e violência.", "optional": "Opcional", - "needsText": "Por favor digite uma mensagem.", + "needsText": "Por favor, digite uma mensagem.", "needsTextPlaceholder": "Digite sua mensagem aqui.", "copyMessageAsToDo": "Copiar mensagem como Afazer", "copyAsTodo": "Copiar como Afazer", diff --git a/website/common/locales/pt_BR/limited.json b/website/common/locales/pt_BR/limited.json index cc1cbed92f..61df00a9c0 100644 --- a/website/common/locales/pt_BR/limited.json +++ b/website/common/locales/pt_BR/limited.json @@ -147,8 +147,8 @@ "dateEndJanuary": "31 de Janeiro", "dateEndFebruary": "28 de fevereiro", "winterPromoGiftHeader": "Presenteie alguém com uma assinatura e ganhe outra grátis !", - "winterPromoGiftDetails1": "Apenas até o dia 15 de Janeiro, quando você presentear alguém com uma assinatura, você irá ganhar uma assinatura idêntica gratuitamente!", - "winterPromoGiftDetails2": "Hey, se você ou a outra pessoa já tiver uma assinatura ativa, a nova somente irá iniciar depois da assinatura atual ser cancelada ou expirar. Muito obrigado por todo o apoio. <3", + "winterPromoGiftDetails1": "Apenas até o dia 6 de Janeiro, quando você presentear alguém com uma assinatura, você irá ganhar uma assinatura idêntica gratuitamente!", + "winterPromoGiftDetails2": "Por favor, note que se você ou a outra pessoa já tiver uma assinatura ativa, a nova será iniciada somente depois que a assinatura atual tiver sido cancelada ou expirada. Agradecemos seu apoio! <3", "discountBundle": "pacote", "g1g1Announcement": "O evento \"Dê uma Assinatura de presente e ganhe outra grátis\" está acontecendo agora!", "g1g1Details": "Dê de presente uma assinatura para um amigo através do perfil dele e você receberá a mesma assinatura de graça!", diff --git a/website/common/locales/pt_BR/npc.json b/website/common/locales/pt_BR/npc.json index d8f2a406da..0fdf43b134 100644 --- a/website/common/locales/pt_BR/npc.json +++ b/website/common/locales/pt_BR/npc.json @@ -169,5 +169,6 @@ "imReady": "Entre no Habitica", "limitedOffer": "Disponível até <%= date %>", "paymentAutoRenew": "Esta assinatura será renovada automaticamente até ser cancelada. Se você precisar cancelar, poderá fazê-lo através da configurações.", - "paymentCanceledDisputes": "Enviamos uma confirmação de cancelamento para o seu e-mail. Se você não está vendo o e-mail, entre em contato para evitar cobranças futuras." + "paymentCanceledDisputes": "Enviamos uma confirmação de cancelamento para o seu e-mail. Se você não está vendo o e-mail, entre em contato para evitar cobranças futuras.", + "cannotUnpinItem": "Este item não pode ser desfixado." } diff --git a/website/common/locales/pt_BR/questscontent.json b/website/common/locales/pt_BR/questscontent.json index 5c7e2af606..6b1feef5aa 100644 --- a/website/common/locales/pt_BR/questscontent.json +++ b/website/common/locales/pt_BR/questscontent.json @@ -635,7 +635,7 @@ "questVelociraptorBoss": "Veloci-Rapper", "questVelociraptorDropVelociraptorEgg": "Velociraptor (Ovo)", "questVelociraptorUnlockText": "Desbloqueia Ovos de Velociraptor para compra no Mercado", - "mythicalMarvelsText": "Pacote Mítico de Maravilhas da Missão", + "mythicalMarvelsText": "Pacote de Missões Maravilhas Míticas", "mythicalMarvelsNotes": "Contém 'Convencer a Rainha do Unicórnio', 'O Grifo Ardente' e 'Perigo nas Profundezas: Ataque à Serpente Marinha!' Disponível até 28 de fevereiro.", "questBronzeText": "Batalha do Besouro de Bronze", "questBronzeNotes": "Uma pausa renovadora entre tarefas, você e alguns amigos andam pelas trilhas da Floresta de Tarefas. Você encontra um largo buraco em um tronco e um brilho dentro chama sua atenção.

Por quê? É um esconderijo de Poções Mágicas! O líquido bronzeado cintilante balança dentro da frasco, and @Hachiseiko pega um para examinar.\"Parem!\" uma voz estranha atrás de você. É um gigante besouro com uma carapaça de bronze cintilante, levantando seus pés com garras em uma posição de combate. \"Essas são minhas poções, e se vocês querem elas, terão que provar em um duelo de pessoas finas!\"", diff --git a/website/common/locales/sv/gear.json b/website/common/locales/sv/gear.json index 6ed47d6165..c35482315d 100644 --- a/website/common/locales/sv/gear.json +++ b/website/common/locales/sv/gear.json @@ -1805,9 +1805,19 @@ "shieldMystery201902Text": "Kryptisk konfetti", "shieldMystery201902Notes": "Detta glittriga papper bildar magiska hjärtan som långsamt driver och dansar i luften. Ger ingen fördel. Februari 2019 Abonnentföremål", "shieldArmoireMightyPizzaText": "Mäktig pizza", - "shieldArmoireMightyPizzaNotes": "Visst, den är en ganska bra sköld, men vi föreslår hellre att du äter denna läckra, läckra pizza. Ökar Uppmärksamhet med <%= per %>. Förtrollat vapenskåp: Kock-set (Föremål 4 av 4). ", + "shieldArmoireMightyPizzaNotes": "Visst, det är en ganska bra sköld, men vi föreslår att du äter denna läckra, läckra pizza. Ökar Uppmärksamhet med <%= per %>. Förtrollat vapenskåp: Kock-set (Föremål 4 av 4).", "eyewearMystery201902Text": "Hemlighetsfull mask", "eyewearMystery201902Notes": "Denna mystiska mask döljer din identitet men inte ditt vinnande leende. Medför inga ökningar. Februari 2019 Abonnentföremål.", "headArmoireEarflapHatText": "Öronlapp Hatt", - "armorArmoireDuffleCoatText": "Duffelrock" + "armorArmoireDuffleCoatText": "Duffelrock", + "eyewearSpecialKS2019Notes": "Djärv som en grips... hmm, gripar har inte visirer. Det påminner dig att... oh, vem försöker vi lura, det ser bara coolt ut! Ger ingen fördel.", + "eyewearSpecialKS2019Text": "Mystisk Grip-Visir", + "shieldSpecialKS2019Notes": "Gnistrande som skalet av en grips ägg, visar denna magnifika sköld dig hur man står redo att hjälpa andra när dina egna bördor är lätta. Ökar Uppmärksamhet med <%= per %>.", + "shieldSpecialKS2019Text": "Mystisk Grip-Sköld", + "headSpecialKS2019Notes": "Prydd med en grips avbildning och fjäderdräkt, symboliserar denna strålande hjälm sättet dina förmågor och uppförande ger ett ledande exempel för andra. Ökar Intelligens med <%= int %>.", + "headSpecialKS2019Text": "Mystisk Grip-Hjälm", + "armorSpecialKS2019Notes": "Glödande inifrån likt en grips ädla hjärta, uppmuntrar denna glänsande rustning dig till att vara stolt över dina framgångar. Ökar Tålighet med <%= con %>.", + "armorSpecialKS2019Text": "Mystisk Grip-Rustning", + "weaponSpecialKS2019Notes": "Böjd som en grips näbb och klor, påminner denna utsmyckade polarm om att kämpa vidare när uppgiften framför dig är skrämmande. Ökar Styrka med <%= str %>.", + "weaponSpecialKS2019Text": "Mystisk Grip-Galv" } diff --git a/website/common/locales/zh/achievements.json b/website/common/locales/zh/achievements.json index 581d713086..d68ccb930f 100644 --- a/website/common/locales/zh/achievements.json +++ b/website/common/locales/zh/achievements.json @@ -40,5 +40,28 @@ "achievementPearlyPro": "珍珠形专业人士", "achievementPrimedForPaintingModalText": "你集齐了所有白色宠物!", "achievementPrimedForPaintingText": "集齐了所有白色宠物。", - "achievementPrimedForPainting": "上涂底漆" + "achievementPrimedForPainting": "上涂底漆", + "achievementPurchasedEquipmentModalText": "你可以用装备特别制造你的形象和增值你的属性", + "achievementPurchasedEquipmentText": "买了他们头一个装备。", + "achievementPurchasedEquipment": "买了装备", + "achievementFedPetModalText": "有各种各样的食物,但是宠物可能会挑剔", + "achievementFedPetText": "喂了他们头一只宠物。", + "achievementFedPet": "喂一只宠物", + "achievementHatchedPetModalText": "去你的物品栏来合并及孵化药水和一粒蛋", + "achievementHatchedPetText": "孵化了他们头一只宠物。", + "achievementHatchedPet": "孵化一只宠物", + "achievementCompletedTaskModalText": "你可以清点任务已得到奖励", + "achievementCompletedTaskText": "完成了他们头一回任务。", + "achievementCompletedTask": "完成一个任务", + "achievementCreatedTaskModalText": "把这个星期你想完成的任务加在这里", + "achievementCreatedTaskText": "制造了他们头一回任务。", + "achievementCreatedTask": "制造一个任务", + "hideAchievements": "隐藏<%= category %>", + "showAllAchievements": "列出所有<%= category %>", + "onboardingCompleteDesc": "完成了任务单以后,你得到了五个成就一百金币。", + "earnedAchievement": "你得到了一个成就!", + "viewAchievements": "看成就", + "letsGetStarted": "我们开始吧!", + "onboardingProgress": "<%= percentage %>% 完成", + "gettingStartedDesc": "我们一起制作一个任务,做完它,然后看你的奖励。你会得到五个成就一百金币!" } diff --git a/website/common/locales/zh/generic.json b/website/common/locales/zh/generic.json index 91f1bdd68d..bec298b2ba 100644 --- a/website/common/locales/zh/generic.json +++ b/website/common/locales/zh/generic.json @@ -294,5 +294,7 @@ "options": "选项", "demo": "样本", "loadEarlierMessages": "载入早期信息", - "finish": "完成" + "finish": "完成", + "congratulations": "恭喜你!", + "onboardingAchievs": "到职成就" } diff --git a/website/common/locales/zh/limited.json b/website/common/locales/zh/limited.json index e4c38f4317..5e08850404 100644 --- a/website/common/locales/zh/limited.json +++ b/website/common/locales/zh/limited.json @@ -147,7 +147,7 @@ "dateEndJanuary": "1月31日", "dateEndFebruary": "2月28日", "winterPromoGiftHeader": "赠送其他用户订阅服务的同时,您自己也能免费得到订阅者身份!", - "winterPromoGiftDetails1": "本活动持续到1月15日,当你送给你的朋友一份订阅时,你可以免费得到相同的订阅时长!", + "winterPromoGiftDetails1": "本活动持续到1月6日,当你送给你的朋友一份订阅时,你可以免费得到相同的订阅时长!", "winterPromoGiftDetails2": "请注意,如果您或您的礼物收件人已经有一个订阅了,作为礼物的订阅只会在原来的订阅取消后或者过期后开始生效。非常感谢你的支持!(*^_^*)", "discountBundle": "一批", "g1g1Announcement": "赠送他人一份订阅,免费享受一份相同订阅,活动正在进行中!", diff --git a/website/common/locales/zh/npc.json b/website/common/locales/zh/npc.json index f0c7607513..e854f70259 100644 --- a/website/common/locales/zh/npc.json +++ b/website/common/locales/zh/npc.json @@ -169,5 +169,6 @@ "imReady": "进入Habitica", "limitedOffer": "有效期至<%= date %>", "paymentCanceledDisputes": "我们已为您的电子邮件发送了取消确认。如果您没有看到电子邮件,请联系我们,以防止将来发生账单纠纷。", - "paymentAutoRenew": "此订阅在被取消前会自动续订。你可以在设置里取消订阅。" + "paymentAutoRenew": "此订阅在被取消前会自动续订。你可以在设置里取消订阅。", + "cannotUnpinItem": "您不能取消这个物品的固定。" } diff --git a/website/common/locales/zh/questscontent.json b/website/common/locales/zh/questscontent.json index a663da2864..98d47ea113 100644 --- a/website/common/locales/zh/questscontent.json +++ b/website/common/locales/zh/questscontent.json @@ -205,7 +205,7 @@ "questBunnyDropBunnyEgg": "兔(宠物蛋)", "questBunnyUnlockText": "解锁兔子蛋以在市场上购买", "questSlimeText": "果冻摄政王", - "questSlimeNotes": "正当你在努力完成你的任务时,你注意到你移动得越来越慢了。”就像是走在糖浆里一样,“@Leephon抱怨道。”不,像是在果冻里穿行!”@starsystemic说:”那黏糊糊的果冻摄政王已经彻底到达Habitica了。它扰乱了我们的工作,每个人都在越来越慢。“你环顾四周。街道正慢慢地被五颜六色、炫彩夺目的软泥填充着,Habiticans做任何事情都变得艰难起来。当其他人逃离该地区的时候,你抓起了一个拖把,准备战斗!", + "questSlimeNotes": "正当你在努力完成你的任务时,你注意到你移动得越来越慢了。“就像是走在糖浆里一样,”@Leephon抱怨道。“不,像是在果冻里穿行!”@starsystemic说:“那黏糊糊的果冻摄政王已经彻底到达Habitica了。它扰乱了我们的工作,每个人都在越来越慢。”你环顾四周。街道正慢慢地被五颜六色、炫彩夺目的软泥填充着,Habitica居民们做任何事情都变得艰难起来。当其他人逃离该地区的时候,你抓起了一个拖把,准备战斗!", "questSlimeBoss": "果冻摄政王", "questSlimeCompletion": "伴随着最后一戳,你将果冻摄政王引进了你的超大甜甜圈陷阱里,糕点俱乐部的三个思维敏捷的领导者@overomega,@LordDarkly,和@Shaner 冲了进来。每个人都拍着你的背,你觉得有人将什么东西滑进了你的口袋里。这是对你这次甜蜜胜利的奖励:三个棉花糖史莱姆蛋。", "questSlimeDropSlimeEgg": "棉花糖史莱姆(蛋)", From 411219c4b23e110b785050b687a5f7cb15e0c553 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:17:35 +0100 Subject: [PATCH 12/98] build(deps): bump @babel/core from 7.7.5 to 7.7.7 (#11661) Bumps [@babel/core](https://github.com/babel/babel) from 7.7.5 to 7.7.7. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.5...v7.7.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 27 +++++++++++++++++++-------- package.json | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e68574e05..310ce5cc2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,14 +13,14 @@ } }, "@babel/core": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", - "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", + "@babel/generator": "^7.7.7", "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", + "@babel/parser": "^7.7.7", "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4", @@ -33,10 +33,21 @@ "source-map": "^0.5.0" }, "dependencies": { + "@babel/generator": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==" + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==" }, "convert-source-map": { "version": "1.7.0", diff --git a/package.json b/package.json index d00ac0cdec..b23a4d7ad5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "4.127.1", "main": "./website/server/index.js", "dependencies": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.7.7", "@babel/preset-env": "^7.7.6", "@babel/register": "^7.7.4", "@google-cloud/trace-agent": "^4.2.4", From 29ac38a60e5bade230f2eb5191338c7367b30956 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:17:53 +0100 Subject: [PATCH 13/98] build(deps): bump @babel/register from 7.7.4 to 7.7.7 (#11659) Bumps [@babel/register](https://github.com/babel/babel) from 7.7.4 to 7.7.7. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.4...v7.7.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 310ce5cc2d..dbf949c661 100644 --- a/package-lock.json +++ b/package-lock.json @@ -714,9 +714,9 @@ } }, "@babel/register": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.4.tgz", - "integrity": "sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.7.tgz", + "integrity": "sha512-S2mv9a5dc2pcpg/ConlKZx/6wXaEwHeqfo7x/QbXsdCAZm+WJC1ekVvL1TVxNsedTs5y/gG63MhJTEsmwmjtiA==", "requires": { "find-cache-dir": "^2.0.0", "lodash": "^4.17.13", diff --git a/package.json b/package.json index b23a4d7ad5..bda4156811 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dependencies": { "@babel/core": "^7.7.7", "@babel/preset-env": "^7.7.6", - "@babel/register": "^7.7.4", + "@babel/register": "^7.7.7", "@google-cloud/trace-agent": "^4.2.4", "@slack/client": "^3.8.1", "accepts": "^1.3.5", From 14821f39b0bc2321af5fc01d5ffd80c25dcf78c6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:18:07 +0100 Subject: [PATCH 14/98] build(deps): bump eslint from 6.7.2 to 6.8.0 (#11656) Bumps [eslint](https://github.com/eslint/eslint) from 6.7.2 to 6.8.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v6.7.2...v6.8.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbf949c661..cee1c4b234 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4282,9 +4282,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -7311,9 +7311,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", @@ -7324,7 +7324,7 @@ "lodash": "^4.17.15", "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "rxjs": "^6.5.3", "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" diff --git a/package.json b/package.json index bda4156811..1b45bf0e96 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "csv-stringify": "^5.3.4", "cwait": "^1.1.1", "domain-middleware": "~0.1.0", - "eslint": "^6.7.2", + "eslint": "^6.8.0", "eslint-config-habitrpg": "^6.2.0", "eslint-plugin-mocha": "^5.0.0", "express": "^4.16.3", From 4ef3ccd23b82ae3e3e41d3ed4e1bc3eb2a36dcec Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:18:17 +0100 Subject: [PATCH 15/98] build(deps): bump mongoose from 5.8.1 to 5.8.2 (#11654) Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.8.1 to 5.8.2. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md) - [Commits](https://github.com/Automattic/mongoose/compare/5.8.1...5.8.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index cee1c4b234..975c68465b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8970,9 +8970,9 @@ } }, "mongoose": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.1.tgz", - "integrity": "sha512-8Cffl52cMK2iBlpLipoRKW/RdrhkxvVzXsy+xVsfbKHQBCWkFiS0T0jU4smYzomTMP4gW0sReJoRA7Gu/7VVgQ==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.2.tgz", + "integrity": "sha512-g9huwQpz3K+DadNIsvaTYe/8sNKS/Sy33k/4wbK6lk+h9qfuBsqYKxK2l6YffRiDV6RO6MNJEWVMdlQx3/P7lw==", "requires": { "bson": "~1.1.1", "kareem": "2.3.1", diff --git a/package.json b/package.json index 1b45bf0e96..03ab54bb61 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "method-override": "^3.0.0", "moment": "^2.24.0", "moment-recur": "^1.0.7", - "mongoose": "^5.8.1", + "mongoose": "^5.8.2", "morgan": "^1.7.0", "nconf": "^0.10.0", "node-gcm": "^1.0.2", From 8c661e55c70db53a75ce7432dfd976a18425e8c2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:18:41 +0100 Subject: [PATCH 16/98] build(deps): bump aws-sdk from 2.590.0 to 2.595.0 (#11652) Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.590.0 to 2.595.0. - [Release notes](https://github.com/aws/aws-sdk-js/releases) - [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js/compare/v2.590.0...v2.595.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 975c68465b..51060c1d04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1723,9 +1723,9 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sdk": { - "version": "2.590.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.590.0.tgz", - "integrity": "sha512-cdH3B/IuEuds84zRvi52WEW0UXOjsyl9hEkdbS2Uo8P7pWepaKTOZ3BKIUsy/lXen0nHcRWDCHeUkBwNW1Q2bg==", + "version": "2.595.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.595.0.tgz", + "integrity": "sha512-bE/XzwlvEv3YPGfU7EfvAOi1IaEzmM+9VWP6xD9xN1lLhdBgCIiQIvSnr52LDR4J7ohqVP+oYpuBZcXrqZaP2Q==", "requires": { "buffer": "4.9.1", "events": "1.1.1", diff --git a/package.json b/package.json index 03ab54bb61..6e41cce454 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "amplitude": "^3.5.0", "apidoc": "^0.17.5", "apn": "^2.2.0", - "aws-sdk": "^2.590.0", + "aws-sdk": "^2.595.0", "bcrypt": "^3.0.7", "body-parser": "^1.18.3", "compression": "^1.7.4", From c13f45dcebc3afa7ccbcec2d6f6f39d172b8f316 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:18:49 +0100 Subject: [PATCH 17/98] build(deps): bump webpack from 4.41.2 to 4.41.4 in /website/client (#11650) Bumps [webpack](https://github.com/webpack/webpack) from 4.41.2 to 4.41.4. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v4.41.2...v4.41.4) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 74 ++++++++++++++++++++------------ website/client/package.json | 2 +- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 568cbb7f28..0d993f76b8 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -4912,9 +4912,9 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -5748,12 +5748,9 @@ "integrity": "sha512-2bcAqHastlPSCvZ+ur8bgHInGAWvUnysWz3h3xRX+/XZoCY7avolJJnVXOPGoVoyCcg1b231XixonoArmgxaoA==" }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "console-control-strings": { "version": "1.1.0", @@ -6294,11 +6291,6 @@ "whatwg-url": "^7.0.0" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -6575,9 +6567,9 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -6847,9 +6839,9 @@ } }, "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -15394,9 +15386,9 @@ } }, "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "vue": { "version": "2.6.11", @@ -15567,9 +15559,9 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "version": "4.41.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.4.tgz", + "integrity": "sha512-Lc+2uB6NjpCWsHI3trkoISOI64h9QYIXenbEWj3bn3oyjfB1lEBXjWAfAyY2sM0rZn41oD5V91OLwKRwS6Wp8Q==", "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", @@ -15591,9 +15583,37 @@ "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", + "terser-webpack-plugin": "^1.4.3", "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" + }, + "dependencies": { + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + } } }, "webpack-bundle-analyzer": { diff --git a/website/client/package.json b/website/client/package.json index 8c1aa554ab..37086884bc 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -60,6 +60,6 @@ "vue-template-compiler": "^2.6.11", "vuedraggable": "^2.23.1", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec", - "webpack": "^4.41.2" + "webpack": "^4.41.4" } } From 9309821c778ec6f3db3b9e8a2e06b187c2f348c5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:18:58 +0100 Subject: [PATCH 18/98] build(deps): bump core-js from 3.5.0 to 3.6.0 in /website/client (#11649) Bumps [core-js](https://github.com/zloirock/core-js) from 3.5.0 to 3.6.0. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/compare/v3.5.0...v3.6.0) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 0d993f76b8..ee8cc5ce17 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -5900,9 +5900,9 @@ } }, "core-js": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.5.0.tgz", - "integrity": "sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.0.tgz", + "integrity": "sha512-AHPTNKzyB+YwgDWoSOCaid9PUSEF6781vsfiK8qUz62zRR448/XgK2NtCbpiUGizbep8Lrpt0Du19PpGGZvw3Q==" }, "core-js-compat": { "version": "3.4.5", diff --git a/website/client/package.json b/website/client/package.json index 37086884bc..924f4941a1 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -31,7 +31,7 @@ "bootstrap": "^4.4.1", "bootstrap-vue": "^2.1.0", "chai": "^4.1.2", - "core-js": "^3.5.0", + "core-js": "^3.6.0", "eslint": "^6.7.2", "eslint-config-habitrpg": "^6.2.0", "eslint-plugin-mocha": "^5.3.0", From 7cd18717542bc10cf9e3ffab2bb337e6d024b5de Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:19:09 +0100 Subject: [PATCH 19/98] build(deps): bump sass from 1.23.7 to 1.24.0 in /website/client (#11648) Bumps [sass](https://github.com/sass/dart-sass) from 1.23.7 to 1.24.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.23.7...1.24.0) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index ee8cc5ce17..f27264c3f7 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -13577,9 +13577,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.23.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.23.7.tgz", - "integrity": "sha512-cYgc0fanwIpi0rXisGxl+/wadVQ/HX3RhpdRcjLdj2o2ye/sxUTpAxIhbmJy3PLQgRFbf6Pn8Jsrta2vdXcoOQ==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.24.0.tgz", + "integrity": "sha512-1TsPyMhLTx+9DLlmwg02iBW2p4poGA7LlkWJLpUY/XticFKNhPcx+l4FsIJLKl6oSUfXmAKpVljHEez1hwjqiw==", "requires": { "chokidar": ">=2.0.0 <4.0.0" } diff --git a/website/client/package.json b/website/client/package.json index 924f4941a1..06b8209edd 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -44,7 +44,7 @@ "lodash": "^4.17.15", "moment": "^2.24.0", "nconf": "^0.10.0", - "sass": "^1.23.7", + "sass": "^1.24.0", "sass-loader": "^8.0.0", "smartbanner.js": "^1.15.0", "svg-inline-loader": "^0.8.0", From 3490930594396b7db2c26183f3b19d34c3f35f44 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:19:49 +0100 Subject: [PATCH 20/98] build(deps): bump xml2js from 0.4.22 to 0.4.23 (#11660) Bumps [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) from 0.4.22 to 0.4.23. - [Release notes](https://github.com/Leonidas-from-XIV/node-xml2js/releases) - [Commits](https://github.com/Leonidas-from-XIV/node-xml2js/commits) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51060c1d04..8ec40c405e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9736,6 +9736,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "optional": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" @@ -13025,6 +13026,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "optional": true, "requires": { "define-properties": "^1.1.2", "object.getownpropertydescriptors": "^2.0.3" @@ -13500,12 +13502,11 @@ } }, "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "requires": { "sax": ">=0.6.0", - "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" }, "dependencies": { diff --git a/package.json b/package.json index 6e41cce454..ca37bdc4a9 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "vinyl-buffer": "^1.0.1", "winston": "^2.4.3", "winston-loggly-bulk": "^2.0.2", - "xml2js": "^0.4.4" + "xml2js": "^0.4.23" }, "private": true, "engines": { From 5bc052c12cbaf0318e96e8e18366cf79a00e9667 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:20:01 +0100 Subject: [PATCH 21/98] build(deps): bump superagent from 5.1.2 to 5.1.3 (#11653) Bumps [superagent](https://github.com/visionmedia/superagent) from 5.1.2 to 5.1.3. - [Release notes](https://github.com/visionmedia/superagent/releases) - [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md) - [Commits](https://github.com/visionmedia/superagent/compare/v5.1.2...v5.1.3) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ec40c405e..0cc5892c95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12038,9 +12038,9 @@ "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "superagent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.1.2.tgz", - "integrity": "sha512-VwPCbi9H02qDtTbdY+e3+cK5XR0YHsJy9hmeCOXLQ8ezjq8+S1Bs4MdNRmpmf2QjDBetD7drG7/nEta7E3E6Sg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.1.3.tgz", + "integrity": "sha512-2bno1Nb4uvZPECTJ7NDYlae6Q8LLQoZZZ9Vumd346jU1UGVkNC/lQI42jHwtrqVoepyt0QxNKFty01IRKgD4CA==", "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", diff --git a/package.json b/package.json index ca37bdc4a9..8de553ff77 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "rimraf": "^3.0.0", "short-uuid": "^3.0.0", "stripe": "^7.14.0", - "superagent": "^5.1.2", + "superagent": "^5.1.3", "universal-analytics": "^0.4.17", "useragent": "^2.1.9", "uuid": "^3.3.3", From 383f353534151c828ab0f23131d8f409d480f423 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:20:23 +0100 Subject: [PATCH 22/98] build(deps): bump @babel/preset-env from 7.7.6 to 7.7.7 (#11657) Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.7.6 to 7.7.7. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.6...v7.7.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 72 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0cc5892c95..c539056834 100644 --- a/package-lock.json +++ b/package-lock.json @@ -306,9 +306,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", + "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.7.4" @@ -324,9 +324,9 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", - "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", + "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" @@ -447,9 +447,9 @@ } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", - "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", + "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" @@ -571,9 +571,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", - "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", + "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", "requires": { "@babel/helper-call-delegate": "^7.7.4", "@babel/helper-get-function-arity": "^7.7.4", @@ -656,18 +656,18 @@ } }, "@babel/preset-env": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", - "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", + "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", "requires": { "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.7.4", "@babel/plugin-proposal-dynamic-import": "^7.7.4", "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", "@babel/plugin-syntax-async-generators": "^7.7.4", "@babel/plugin-syntax-dynamic-import": "^7.7.4", "@babel/plugin-syntax-json-strings": "^7.7.4", @@ -681,7 +681,7 @@ "@babel/plugin-transform-classes": "^7.7.4", "@babel/plugin-transform-computed-properties": "^7.7.4", "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", "@babel/plugin-transform-duplicate-keys": "^7.7.4", "@babel/plugin-transform-exponentiation-operator": "^7.7.4", "@babel/plugin-transform-for-of": "^7.7.4", @@ -695,7 +695,7 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", "@babel/plugin-transform-new-target": "^7.7.4", "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", "@babel/plugin-transform-property-literals": "^7.7.4", "@babel/plugin-transform-regenerator": "^7.7.5", "@babel/plugin-transform-reserved-words": "^7.7.4", @@ -707,7 +707,7 @@ "@babel/plugin-transform-unicode-regex": "^7.7.4", "@babel/types": "^7.7.4", "browserslist": "^4.6.0", - "core-js-compat": "^3.4.7", + "core-js-compat": "^3.6.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" @@ -2676,9 +2676,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001015", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", - "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==" + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", + "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==" }, "capture-stack-trace": { "version": "1.0.1", @@ -3354,18 +3354,18 @@ "dev": true }, "core-js-compat": { - "version": "3.4.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.8.tgz", - "integrity": "sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.0.tgz", + "integrity": "sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg==", "requires": { "browserslist": "^4.8.2", - "semver": "^6.3.0" + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" } } }, @@ -9487,9 +9487,9 @@ } }, "node-releases": { - "version": "1.1.42", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", - "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", + "version": "1.1.43", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", + "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", "requires": { "semver": "^6.3.0" }, @@ -10862,9 +10862,9 @@ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", "requires": { "jsesc": "~0.5.0" }, diff --git a/package.json b/package.json index 8de553ff77..0bc070fceb 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.7.7", - "@babel/preset-env": "^7.7.6", + "@babel/preset-env": "^7.7.7", "@babel/register": "^7.7.7", "@google-cloud/trace-agent": "^4.2.4", "@slack/client": "^3.8.1", From 92009c1100eb06e165f691df9ae92f1b816cd268 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:20:36 +0100 Subject: [PATCH 23/98] build(deps): bump csv-stringify from 5.3.4 to 5.3.5 (#11655) Bumps [csv-stringify](https://github.com/adaltas/node-csv-stringify) from 5.3.4 to 5.3.5. - [Release notes](https://github.com/adaltas/node-csv-stringify/releases) - [Changelog](https://github.com/adaltas/node-csv-stringify/blob/master/CHANGELOG.md) - [Commits](https://github.com/adaltas/node-csv-stringify/compare/v5.3.4...v5.3.5) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c539056834..d2b7a1c903 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3467,9 +3467,9 @@ } }, "csv-stringify": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.4.tgz", - "integrity": "sha512-w3sjZh/b5xvN1NeWPbMBnvW+Q4D+cCoAk/2J0C/DqJKV3dHqseQGzP/BsdpqbIBl5UTFQxHgHkSUu5aiMFT62g==" + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.5.tgz", + "integrity": "sha512-bFbaJqz7LcwnTzdryyJuhR6Pys2deU8+z7O8N0JBnNGm7vnJVr3K0n68bhb+rlMpwCmDbUtinr8yq5I2RlPMqw==" }, "currently-unhandled": { "version": "0.4.1", diff --git a/package.json b/package.json index 0bc070fceb..79fbc0f382 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "compression": "^1.7.4", "cookie-session": "^1.3.3", "coupon-code": "^0.4.5", - "csv-stringify": "^5.3.4", + "csv-stringify": "^5.3.5", "cwait": "^1.1.1", "domain-middleware": "~0.1.0", "eslint": "^6.8.0", From 6b072f0f8f013ee7db8434241f9abad3f4a8fec2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:22:48 +0100 Subject: [PATCH 24/98] build(deps): bump eslint from 6.7.2 to 6.8.0 in /website/client (#11651) Bumps [eslint](https://github.com/eslint/eslint) from 6.7.2 to 6.8.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v6.7.2...v6.8.0) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 27 +++++++-------------------- website/client/package.json | 2 +- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index f27264c3f7..f25fa338dc 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -7011,9 +7011,9 @@ } }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -7088,19 +7088,6 @@ "resolve-from": "^4.0.0" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -9354,9 +9341,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", @@ -9367,7 +9354,7 @@ "lodash": "^4.17.15", "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "rxjs": "^6.5.3", "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" diff --git a/website/client/package.json b/website/client/package.json index 06b8209edd..5672827655 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -32,7 +32,7 @@ "bootstrap-vue": "^2.1.0", "chai": "^4.1.2", "core-js": "^3.6.0", - "eslint": "^6.7.2", + "eslint": "^6.8.0", "eslint-config-habitrpg": "^6.2.0", "eslint-plugin-mocha": "^5.3.0", "eslint-plugin-vue": "^6.0.1", From b9af3fb40e4e22993d5ecd04ec3405e6ea212a1c Mon Sep 17 00:00:00 2001 From: Glendon Solsberry Date: Mon, 23 Dec 2019 11:45:42 -0500 Subject: [PATCH 25/98] Updates notifications screen to a more consistent UI (#11635) --- .../src/components/settings/notifications.vue | 69 +++++++++---------- website/common/locales/en/settings.json | 4 +- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/website/client/src/components/settings/notifications.vue b/website/client/src/components/settings/notifications.vue index 29017b4899..24a4b46d17 100644 --- a/website/client/src/components/settings/notifications.vue +++ b/website/client/src/components/settings/notifications.vue @@ -28,39 +28,38 @@ {{ $t('unsubscribeAllEmailsText') }}
-
- - - - {{ $t('email') }} - - - {{ $t('push') }} - - - - - {{ $t(notification) }} - - - - - - -
- - + + + + + + + + + + + +
+ {{ $t('email') }} + + {{ $t('push') }} +
+ {{ $t(notification) }} + + + + + +   +
@@ -74,6 +73,8 @@ export default { data () { return { notificationsIds: Object.freeze([ + 'majorUpdates', + 'onboarding', 'newPM', 'wonChallenge', 'giftedGems', @@ -85,8 +86,6 @@ export default { 'invitedQuest', 'importantAnnouncements', 'weeklyRecaps', - 'onboarding', - 'majorUpdates', 'subscriptionReminders', ]), // list of email-only notifications diff --git a/website/common/locales/en/settings.json b/website/common/locales/en/settings.json index e018b2a421..c60c370c98 100644 --- a/website/common/locales/en/settings.json +++ b/website/common/locales/en/settings.json @@ -120,7 +120,7 @@ "giftedSubscriptionFull": "Hello <%= username %>, <%= sender %> has sent you <%= monthCount %> months of subscription!", "giftedSubscriptionWinterPromo": "Hello <%= username %>, you received <%= monthCount %> months of subscription as part of our holiday gift-giving promotion!", "invitedParty": "You were invited to a Party", - "invitedGuild": "You were invited to a Guild", + "invitedGuild": "You were invited to a Guild", "importantAnnouncements": "Reminders to check in to complete tasks and receive prizes", "weeklyRecaps": "Summaries of your account activity in the past week (Note: this is currently disabled due to performance issues, but we hope to have this back up and sending e-mails again soon!)", "onboarding": "Guidance with setting up your Habitica account", @@ -211,4 +211,4 @@ "suggestMyUsername": "Suggest my username", "everywhere": "Everywhere", "onlyPrivateSpaces": "Only in private spaces" -} \ No newline at end of file +} From 7d2c5ed33929719f22491998fe990201dd7ac54b Mon Sep 17 00:00:00 2001 From: Timothy <32404189+MeisterRed@users.noreply.github.com> Date: Mon, 23 Dec 2019 11:48:55 -0500 Subject: [PATCH 26/98] Fixed disappearing email form bug by forcing a refresh after submission, Fixes #11565 (#11614) * Fixed disappearing form bug by forcing a refresh after submission * Added reloadPage() to the changeEmail submit button * Added indentation for the reloadPage() function * Adjusted changeUser() function (added reloadPage) Added reloadPage() function to the changeUser() function. This should allow the page to reload after the email is updated instead of before the function gets to finish updating the account's email * Adjusted changeUser() function Added window.location.reload() to the changeUser() function. This should allow the page to reload after the email is updated instead of before the function gets to finish updating the account's email * Adjusted changeUser function --- website/client/src/components/settings/site.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/client/src/components/settings/site.vue b/website/client/src/components/settings/site.vue index b63f964f31..ac3299c44c 100644 --- a/website/client/src/components/settings/site.vue +++ b/website/client/src/components/settings/site.vue @@ -812,7 +812,8 @@ export default { this.localAuth.username = this.user.auth.local.username; this.user.flags.verifiedUsername = true; } else if (attribute === 'email') { - this.user.auth.local.email = updates[attribute]; + this.user.auth.local.email = updates.newEmail; + window.alert(this.$t('emailSuccess')); } }, async changeDisplayName (newName) { From 04a9c9739369e98a4dddf9cc134d0e3e5b1f9df8 Mon Sep 17 00:00:00 2001 From: Yo <58630804+flowed@users.noreply.github.com> Date: Mon, 23 Dec 2019 22:22:55 +0530 Subject: [PATCH 27/98] Fix Typos (#11644) * Fix Typos * Fix More Typos --- migrations/s3-upload.js | 2 +- test/api/unit/libs/analyticsService.test.js | 4 ++-- test/api/unit/libs/payments/payments.test.js | 2 +- test/api/v3/integration/challenges/POST-challenges.test.js | 2 +- test/api/v3/integration/groups/GET-groups_id.test.js | 4 ++-- test/api/v3/integration/groups/POST-groups_groupId_leave.js | 4 ++-- .../payments/amazon/POST-payments_amazon_checkout.test.js | 2 +- test/api/v3/integration/tasks/DELETE-tasks_id.test.js | 2 +- test/api/v3/integration/tasks/GET-tasks_id.test.js | 2 +- .../DELETE-tasks_id_challenge_challengeId.test.js | 2 +- .../v3/integration/user/auth/PUT-user_update_email.test.js | 2 +- test/common/libs/getDebuffPotionItems.test.js | 2 +- test/common/ops/unlock.js | 2 +- website/client/src/components/achievements/death.vue | 2 +- website/client/src/components/achievements/streak.vue | 4 ++-- website/client/src/components/auth/registerLoginReset.vue | 2 +- website/client/src/components/chat/chatMessages.vue | 2 +- website/client/src/components/creatorIntro.vue | 4 ++-- website/client/src/components/groups/membersModal.vue | 2 +- website/client/src/components/inventory/equipment/index.vue | 4 ++-- website/client/src/libs/logging.js | 2 +- website/client/src/mixins/spells.js | 2 +- website/client/tests/unit/components/avatar.spec.js | 2 +- website/common/locales/en_GB/gear.json | 2 +- website/common/script/cron.js | 2 +- website/common/script/ops/pinnedGearUtils.js | 2 +- website/server/controllers/api-v3/content.js | 6 +++--- website/server/controllers/api-v3/groups.js | 2 +- website/server/controllers/api-v3/hall.js | 2 +- website/server/controllers/api-v3/members.js | 2 +- website/server/controllers/api-v3/user.js | 2 +- website/server/controllers/top-level/dataexport.js | 2 +- website/server/libs/auth/index.js | 2 +- website/server/libs/i18n.js | 2 +- website/server/libs/taskManager.js | 2 +- website/server/middlewares/errorHandler.js | 2 +- website/server/models/challenge.js | 2 +- website/server/models/group.js | 2 +- website/server/models/user/methods.js | 2 +- 39 files changed, 47 insertions(+), 47 deletions(-) diff --git a/migrations/s3-upload.js b/migrations/s3-upload.js index fabb819d7d..32ae1d71cb 100644 --- a/migrations/s3-upload.js +++ b/migrations/s3-upload.js @@ -27,7 +27,7 @@ function uploadFile (buffer, fileName) { if (error) { reject(error); } else { - // console.info(`${fileName} uploaded to ${BUCKET_NAME} succesfully.`); + // console.info(`${fileName} uploaded to ${BUCKET_NAME} successfully.`); resolve(fileName); } }); diff --git a/test/api/unit/libs/analyticsService.test.js b/test/api/unit/libs/analyticsService.test.js index 27d78d3f3c..c977bef7fc 100644 --- a/test/api/unit/libs/analyticsService.test.js +++ b/test/api/unit/libs/analyticsService.test.js @@ -155,7 +155,7 @@ describe('analyticsService', () => { }); }); - it('sets Unkown if headers are not passed in', () => { + it('sets Unknown if headers are not passed in', () => { delete data.headers; return analyticsService.track(eventType, data) @@ -476,7 +476,7 @@ describe('analyticsService', () => { }); }); - it('sets Unkown if headers are not passed in', () => { + it('sets Unknown if headers are not passed in', () => { delete data.headers; return analyticsService.trackPurchase(data) diff --git a/test/api/unit/libs/payments/payments.test.js b/test/api/unit/libs/payments/payments.test.js index b3c5e3c59d..efc11f8e2a 100644 --- a/test/api/unit/libs/payments/payments.test.js +++ b/test/api/unit/libs/payments/payments.test.js @@ -697,7 +697,7 @@ describe('payments/index', () => { .calledWith(recipient, { receiverMsg: msg, senderMsg: msg, save: false }); }); - it('sends a message from purchaser to recipient wtih custom message', async () => { + it('sends a message from purchaser to recipient with custom message', async () => { data.gift.message = 'giftmessage'; await api.buyGems(data); diff --git a/test/api/v3/integration/challenges/POST-challenges.test.js b/test/api/v3/integration/challenges/POST-challenges.test.js index 23475c1f23..8896c3e79d 100644 --- a/test/api/v3/integration/challenges/POST-challenges.test.js +++ b/test/api/v3/integration/challenges/POST-challenges.test.js @@ -251,7 +251,7 @@ describe('POST /challenges', () => { expect(groupLeader.balance).to.eql(oldUserBalance); }); - it('sets all properites of the challenge as passed', async () => { + it('sets all properties of the challenge as passed', async () => { const name = 'Test Challenge'; const shortName = 'TC Label'; const description = 'Test Description'; diff --git a/test/api/v3/integration/groups/GET-groups_id.test.js b/test/api/v3/integration/groups/GET-groups_id.test.js index 3e2f3b8742..801ee3d434 100644 --- a/test/api/v3/integration/groups/GET-groups_id.test.js +++ b/test/api/v3/integration/groups/GET-groups_id.test.js @@ -177,7 +177,7 @@ describe('GET /groups/:id', () => { }); }); - it('removes non-existant guild from user\'s guild list', async () => { + it('removes non-existent guild from user\'s guild list', async () => { const guildId = generateUUID(); await user.update({ @@ -197,7 +197,7 @@ describe('GET /groups/:id', () => { expect(user.guilds).to.not.include(guildId); }); - it('removes non-existant party from user\'s party object', async () => { + it('removes non-existent party from user\'s party object', async () => { const partyId = generateUUID(); await user.update({ diff --git a/test/api/v3/integration/groups/POST-groups_groupId_leave.js b/test/api/v3/integration/groups/POST-groups_groupId_leave.js index 70d60cc3d0..c4764e3428 100644 --- a/test/api/v3/integration/groups/POST-groups_groupId_leave.js +++ b/test/api/v3/integration/groups/POST-groups_groupId_leave.js @@ -210,7 +210,7 @@ describe('POST /groups/:groupId/leave', () => { expect(userWithoutInvitation.invitations.guilds).to.not.be.empty; }); - it('deletes non existant guild from user when user tries to leave', async () => { + it('deletes non existent guild from user when user tries to leave', async () => { const nonExistentGuildId = generateUUID(); const userWithNonExistentGuild = await generateUser({ guilds: [nonExistentGuildId] }); expect(userWithNonExistentGuild.guilds).to.contain(nonExistentGuildId); @@ -258,7 +258,7 @@ describe('POST /groups/:groupId/leave', () => { }); }); - it('deletes non existant party from user when user tries to leave', async () => { + it('deletes non existent party from user when user tries to leave', async () => { const nonExistentPartyId = generateUUID(); const userWithNonExistentParty = await generateUser({ 'party._id': nonExistentPartyId }); expect(userWithNonExistentParty.party._id).to.eql(nonExistentPartyId); diff --git a/test/api/v3/integration/payments/amazon/POST-payments_amazon_checkout.test.js b/test/api/v3/integration/payments/amazon/POST-payments_amazon_checkout.test.js index 93d08dc44b..6774317c9c 100644 --- a/test/api/v3/integration/payments/amazon/POST-payments_amazon_checkout.test.js +++ b/test/api/v3/integration/payments/amazon/POST-payments_amazon_checkout.test.js @@ -29,7 +29,7 @@ describe('payments - amazon - #checkout', () => { amzLib.checkout.restore(); }); - it('makes a purcahse with amazon checkout', async () => { + it('makes a purchase with amazon checkout', async () => { user = await generateUser({ 'profile.name': 'sender', 'purchased.plan.customerId': 'customer-id', diff --git a/test/api/v3/integration/tasks/DELETE-tasks_id.test.js b/test/api/v3/integration/tasks/DELETE-tasks_id.test.js index d1835ac022..e64923e14d 100644 --- a/test/api/v3/integration/tasks/DELETE-tasks_id.test.js +++ b/test/api/v3/integration/tasks/DELETE-tasks_id.test.js @@ -120,7 +120,7 @@ describe('DELETE /tasks/:id', () => { }); context('task cannot be deleted', () => { - it('cannot delete a non-existant task', async () => { + it('cannot delete a non-existent task', async () => { await expect(user.del('/tasks/550e8400-e29b-41d4-a716-446655440000')).to.eventually.be.rejected.and.eql({ code: 404, error: 'NotFound', diff --git a/test/api/v3/integration/tasks/GET-tasks_id.test.js b/test/api/v3/integration/tasks/GET-tasks_id.test.js index e46a08706c..d56b3fd151 100644 --- a/test/api/v3/integration/tasks/GET-tasks_id.test.js +++ b/test/api/v3/integration/tasks/GET-tasks_id.test.js @@ -39,7 +39,7 @@ describe('GET /tasks/:id', () => { }); context('task cannot be accessed', () => { - it('cannot get a non-existant task', async () => { + it('cannot get a non-existent task', async () => { const dummyId = generateUUID(); await expect(user.get(`/tasks/${dummyId}`)).to.eventually.be.rejected.and.eql({ diff --git a/test/api/v3/integration/tasks/challenges/DELETE-tasks_id_challenge_challengeId.test.js b/test/api/v3/integration/tasks/challenges/DELETE-tasks_id_challenge_challengeId.test.js index 14245c3e54..f329775baf 100644 --- a/test/api/v3/integration/tasks/challenges/DELETE-tasks_id_challenge_challengeId.test.js +++ b/test/api/v3/integration/tasks/challenges/DELETE-tasks_id_challenge_challengeId.test.js @@ -27,7 +27,7 @@ describe('DELETE /tasks/:id', () => { }); }); - it('cannot delete a non-existant task', async () => { + it('cannot delete a non-existent task', async () => { await expect(user.del(`/tasks/${generateUUID()}`)).to.eventually.be.rejected.and.eql({ code: 404, error: 'NotFound', diff --git a/test/api/v3/integration/user/auth/PUT-user_update_email.test.js b/test/api/v3/integration/user/auth/PUT-user_update_email.test.js index d924a99ebf..9f54b8eeba 100644 --- a/test/api/v3/integration/user/auth/PUT-user_update_email.test.js +++ b/test/api/v3/integration/user/auth/PUT-user_update_email.test.js @@ -16,7 +16,7 @@ describe('PUT /user/auth/update-email', () => { const newEmail = 'SOmE-nEw-emAIl_2@example.net'; const oldPassword = 'password'; // from habitrpg/test/helpers/api-integration/v3/object-generators.js - context('Local Authenticaion User', async () => { + context('Local Authentication User', async () => { let user; beforeEach(async () => { diff --git a/test/common/libs/getDebuffPotionItems.test.js b/test/common/libs/getDebuffPotionItems.test.js index b1cb41658a..512c2a8834 100644 --- a/test/common/libs/getDebuffPotionItems.test.js +++ b/test/common/libs/getDebuffPotionItems.test.js @@ -15,7 +15,7 @@ describe('getDebuffPotionItems', () => { for (const key of Object.keys(TRANSFORMATION_DEBUFFS_LIST)) { const debuff = TRANSFORMATION_DEBUFFS_LIST[key]; - // Here we itterate whole object to dynamicaly create test suites as + // Here we itterate whole object to dynamically create test suites as // it described in dock of mocha // https://mochajs.org/#dynamically-generating-tests // That's why we have eslint-disable here diff --git a/test/common/ops/unlock.js b/test/common/ops/unlock.js index 5087534b48..80354c2ffc 100644 --- a/test/common/ops/unlock.js +++ b/test/common/ops/unlock.js @@ -54,7 +54,7 @@ describe('shared.ops.unlock', () => { } }); - // disabled untill fully implemente + // disabled until fully implemente xit('returns an error when user already owns items in a full set', done => { try { unlock(user, { query: { path: unlockPath } }); diff --git a/website/client/src/components/achievements/death.vue b/website/client/src/components/achievements/death.vue index c94b99c848..998c8745e9 100644 --- a/website/client/src/components/achievements/death.vue +++ b/website/client/src/components/achievements/death.vue @@ -32,7 +32,7 @@ :avatar-only="true" :with-background="true" /> - + diff --git a/website/client/src/components/achievements/streak.vue b/website/client/src/components/achievements/streak.vue index 4eac3c1228..d2b9b8be53 100644 --- a/website/client/src/components/achievements/streak.vue +++ b/website/client/src/components/achievements/streak.vue @@ -71,8 +71,8 @@ export default { this.$root.$emit('bv::hide::modal', 'streak'); }, suppressModals () { - const surpress = !!this.user.preferences.suppressModals.streak; - this.$store.dispatch('user:set', { 'preferences.suppressModals.streak': surpress }); + const suppress = !!this.user.preferences.suppressModals.streak; + this.$store.dispatch('user:set', { 'preferences.suppressModals.streak': suppress }); }, }, }; diff --git a/website/client/src/components/auth/registerLoginReset.vue b/website/client/src/components/auth/registerLoginReset.vue index c771514c34..8d1dc9db69 100644 --- a/website/client/src/components/auth/registerLoginReset.vue +++ b/website/client/src/components/auth/registerLoginReset.vue @@ -700,7 +700,7 @@ export default { return; } - // @TODO: implement langauge and invite accepting + // @TODO: implement language and invite accepting // var url = ApiUrl.get() + "/api/v4/user/auth/local/register"; // if (location.search && location.search.indexOf('Invite=') !== -1) // { // matches groupInvite and partyInvite diff --git a/website/client/src/components/chat/chatMessages.vue b/website/client/src/components/chat/chatMessages.vue index 050c03623c..eb9ed8508c 100644 --- a/website/client/src/components/chat/chatMessages.vue +++ b/website/client/src/components/chat/chatMessages.vue @@ -282,7 +282,7 @@ export default { const promises = []; const noProfilesLoaded = Object.keys(this.cachedProfileData).length === 0; - // @TODO: write an explination + // @TODO: write an explanation // @TODO: Remove this after enough messages are cached if ( !noProfilesLoaded diff --git a/website/client/src/components/creatorIntro.vue b/website/client/src/components/creatorIntro.vue index c939251526..93195cda15 100644 --- a/website/client/src/components/creatorIntro.vue +++ b/website/client/src/components/creatorIntro.vue @@ -329,7 +329,7 @@
{{ $t('exercise') }}
diff --git a/website/client/src/components/groups/membersModal.vue b/website/client/src/components/groups/membersModal.vue index b48109ac72..33e48a14e6 100644 --- a/website/client/src/components/groups/membersModal.vue +++ b/website/client/src/components/groups/membersModal.vue @@ -499,7 +499,7 @@ export default { }, watch: { groupId () { - // @TOOD: We might not need this since groupId is computed now + // @TODO: We might not need this since groupId is computed now this.getMembers(); }, challengeId () { diff --git a/website/client/src/components/inventory/equipment/index.vue b/website/client/src/components/inventory/equipment/index.vue index 0d9d819c65..105aed4de8 100644 --- a/website/client/src/components/inventory/equipment/index.vue +++ b/website/client/src/components/inventory/equipment/index.vue @@ -341,7 +341,7 @@ export default { const { firstRender } = viewOptions; const { itemsInFirstPosition } = viewOptions; - // Render selected items in first postion only for the first render + // Render selected items in first position only for the first render if (itemsInFirstPosition.indexOf(ownedItem.key) !== -1 && firstRender === false) { gearItemsByType[type].unshift(ownedItem); } else if (isEquipped === true && firstRender === true) { @@ -382,7 +382,7 @@ export default { const { firstRender } = viewOptions; const { itemsInFirstPosition } = viewOptions; - // Render selected items in first postion only for the first render + // Render selected items in first position only for the first render if (itemsInFirstPosition.indexOf(ownedItem.key) !== -1 && firstRender === false) { gearItemsByClass[klass].unshift(ownedItem); } else if (isEquipped === true && firstRender === true) { diff --git a/website/client/src/libs/logging.js b/website/client/src/libs/logging.js index 89a7725fe4..f2c442e101 100644 --- a/website/client/src/libs/logging.js +++ b/website/client/src/libs/logging.js @@ -29,7 +29,7 @@ export function setUpLogging () { // eslint-disable-line import/prefer-default-e Vue.config.errorHandler = (err, vm, info) => { console.error('Unhandled error in Vue.js code.'); console.error('Error:', err); - console.error('Component where it occured:', vm); + console.error('Component where it occurred:', vm); console.error('Info:', info); _LTracker.push({ diff --git a/website/client/src/mixins/spells.js b/website/client/src/mixins/spells.js index 22da51019b..dc64b987c8 100644 --- a/website/client/src/mixins/spells.js +++ b/website/client/src/mixins/spells.js @@ -165,7 +165,7 @@ export default { } return null; - // @TOOD: User.sync(); + // @TODO: User.sync(); }, castCancel () { this.potionClickMode = false; diff --git a/website/client/tests/unit/components/avatar.spec.js b/website/client/tests/unit/components/avatar.spec.js index d7e970ee5e..96d09702a2 100644 --- a/website/client/tests/unit/components/avatar.spec.js +++ b/website/client/tests/unit/components/avatar.spec.js @@ -112,7 +112,7 @@ context('avatar.vue', () => { }; }); - it('returns if showing equiped gear', () => { + it('returns if showing equipped gear', () => { expect(vm.costumeClass).to.equal('equipped'); }); it('returns if wearing a costume', () => { diff --git a/website/common/locales/en_GB/gear.json b/website/common/locales/en_GB/gear.json index 70dc1bfed0..ec7be61cf3 100644 --- a/website/common/locales/en_GB/gear.json +++ b/website/common/locales/en_GB/gear.json @@ -540,7 +540,7 @@ "armorSpecialWinter2016MageNotes": "The wisest wizard keeps well-bundled in the winter wind. Increases Intelligence by <%= int %>. Limited Edition 2015-2016 Winter Gear.", "armorSpecialWinter2016HealerText": "Festive Fairy Cloak", "armorSpecialWinter2016HealerNotes": "Festive Fairies wrap their body wings around themselves for protection as they use their head wings to catch headwinds and fly around Habitica at speeds of up to 100 mph, delivering gifts and spraying everyone with confetti. How droll. Increases Constitution by <%= con %>. Limited Edition 2015-2016 Winter Gear.", - "armorSpecialSpring2016RogueText": "Canine Camouflauge Suit", + "armorSpecialSpring2016RogueText": "Canine Camouflage Suit", "armorSpecialSpring2016RogueNotes": "A clever pup knows to choose a brighter guise for concealment when everything is green and vibrant. Increases Perception by <%= per %>. Limited Edition 2016 Spring Gear.", "armorSpecialSpring2016WarriorText": "Mighty Mail", "armorSpecialSpring2016WarriorNotes": "Though you be but little, you are fierce! Increases Constitution by <%= con %>. Limited Edition 2016 Spring Gear.", diff --git a/website/common/script/cron.js b/website/common/script/cron.js index 53be939a4e..8afca4bcda 100644 --- a/website/common/script/cron.js +++ b/website/common/script/cron.js @@ -66,7 +66,7 @@ export function startOfWeek (options = {}) { /* This is designed for use with any date that has an important time portion (e.g., when comparing the current date-time with the previous cron's date-time - for determing if cron should run now). + for determining if cron should run now). It changes the time portion of the date-time to be the Custom Day Start hour, so that the date-time is now the user's correct start of day. It SUBTRACTS a day if the date-time's original hour is before CDS diff --git a/website/common/script/ops/pinnedGearUtils.js b/website/common/script/ops/pinnedGearUtils.js index 1150fb6a2f..e7a0f98bd1 100644 --- a/website/common/script/ops/pinnedGearUtils.js +++ b/website/common/script/ops/pinnedGearUtils.js @@ -157,7 +157,7 @@ export function togglePinnedItem (user, { item, type, path }, req = {}) { } if (isOfficialPinned) { - // if an offical item is also present in the user.pinnedItems array + // if an official item is also present in the user.pinnedItems array const itemInUserItems = pathExistsInArray(user.pinnedItems, path); if (itemInUserItems !== -1) { diff --git a/website/server/controllers/api-v3/content.js b/website/server/controllers/api-v3/content.js index 727a56fa13..15cbf282c8 100644 --- a/website/server/controllers/api-v3/content.js +++ b/website/server/controllers/api-v3/content.js @@ -82,7 +82,7 @@ async function saveContentToDisk (language, content) { * the user's configured language. * * @apiSuccess {Object} data Various data about the content of Habitica. The content route - * contains many keys, but the data listed below are the recomended data to use. + * contains many keys, but the data listed below are the recommended data to use. * @apiSuccess {Object} data.mystery The mystery sets awarded to paying subscribers. * @apiSuccess {Object} data.gear The gear that can be equipped. * @apiSuccess {Object} data.gear.tree Detailed information about the gear, organized by type. @@ -101,7 +101,7 @@ async function saveContentToDisk (language, content) { * @apiSuccess {Object} data.food All the food. * @apiSuccess {Array} data.userCanOwnQuestCategories The types of quests that a user can own. * @apiSuccess {Object} data.quests Data about the quests. - * @apiSuccess {Object} data.appearances Data about the apperance properties. + * @apiSuccess {Object} data.appearances Data about the appearance properties. * @apiSuccess {Object} data.appearances.hair Data about available hair options. * @apiSuccess {Object} data.appearances.shirt Data about available shirt options. * @apiSuccess {Object} data.appearances.size Data about available body size options. @@ -109,7 +109,7 @@ async function saveContentToDisk (language, content) { * @apiSuccess {Object} data.appearances.chair Data about available chair options. * @apiSuccess {Object} data.appearances.background Data about available background options. * @apiSuccess {Object} data.backgrounds Data about the background sets. - * @apiSuccess {Object} data.subscriptionBlocks Data about the various subscirption blocks. + * @apiSuccess {Object} data.subscriptionBlocks Data about the various subscriptions blocks. * */ api.getContent = { diff --git a/website/server/controllers/api-v3/groups.js b/website/server/controllers/api-v3/groups.js index dbfaac3ba2..1fb322e0f3 100644 --- a/website/server/controllers/api-v3/groups.js +++ b/website/server/controllers/api-v3/groups.js @@ -1049,7 +1049,7 @@ api.removeGroupMember = { * * @apiSuccess {Array} data The invites * @apiSuccess {Object} data[0] If the invitation was a User ID, you'll receive back an object. - * You'll receive one Object for each succesful User ID invite. + * You'll receive one Object for each successful User ID invite. * @apiSuccess {String} data[1] If the invitation was an email, you'll receive back the email. * You'll receive one String for each successful email invite. * diff --git a/website/server/controllers/api-v3/hall.js b/website/server/controllers/api-v3/hall.js index 2874cd9b35..8e28fbc17a 100644 --- a/website/server/controllers/api-v3/hall.js +++ b/website/server/controllers/api-v3/hall.js @@ -267,7 +267,7 @@ api.updateHero = { while (tierDiff) { hero.balance += gemsPerTier[newTier] / 4; // balance is in $ tierDiff -= 1; - newTier -= 1; // give them gems for the next tier down if they weren't aready that tier + newTier -= 1; // give them gems for the next tier down if they weren't already that tier } hero.addNotification('NEW_CONTRIBUTOR_LEVEL'); diff --git a/website/server/controllers/api-v3/members.js b/website/server/controllers/api-v3/members.js index 74e5ea15d5..9a2736d0a8 100644 --- a/website/server/controllers/api-v3/members.js +++ b/website/server/controllers/api-v3/members.js @@ -486,7 +486,7 @@ api.getInvitesForGroup = { * until you get less than 30 results. * BETA You can also use ?includeAllMembers=true. This option is currently in BETA * and may be removed in future. - * Its use is discouraged and its performaces are not optimized especially for large challenges. + * Its use is discouraged and its performances are not optimized especially for large challenges. * * @apiName GetMembersForChallenge * @apiGroup Member diff --git a/website/server/controllers/api-v3/user.js b/website/server/controllers/api-v3/user.js index 1594e4fd7c..3fe24678f4 100644 --- a/website/server/controllers/api-v3/user.js +++ b/website/server/controllers/api-v3/user.js @@ -989,7 +989,7 @@ api.purchase = { if (!canGetGems) throw new NotAuthorized(res.t('groupPolicyCannotGetGems')); } - // Req is currently used as options. Slighly confusing, but this will solve that for now. + // Req is currently used as options. Slightly confusing, but this will solve that for now. let quantity = 1; if (req.body.quantity) quantity = req.body.quantity; req.quantity = quantity; diff --git a/website/server/controllers/top-level/dataexport.js b/website/server/controllers/top-level/dataexport.js index 4aead64047..7d55fb4074 100644 --- a/website/server/controllers/top-level/dataexport.js +++ b/website/server/controllers/top-level/dataexport.js @@ -27,7 +27,7 @@ const api = {}; * @apiDefine DataExport Data Export * These routes allow you to download backups of your data. * - * **Note:** They are intented to be used on the website only and as such are part + * **Note:** They are intended to be used on the website only and as such are part * of the private API and may change at any time. */ diff --git a/website/server/libs/auth/index.js b/website/server/libs/auth/index.js index 495096062e..7b5b3c8c73 100644 --- a/website/server/libs/auth/index.js +++ b/website/server/libs/auth/index.js @@ -113,7 +113,7 @@ async function registerLocal (req, res, { isV3 = false }) { const { password } = req.body; // Get the lowercase version of username to check that we do not have duplicates - // So we can search for it in the database and then reject the choosen + // So we can search for it in the database and then reject the chosen // username if 1 or more results are found email = email.toLowerCase(); username = username.trim(); diff --git a/website/server/libs/i18n.js b/website/server/libs/i18n.js index de620003a6..85f8c14880 100644 --- a/website/server/libs/i18n.js +++ b/website/server/libs/i18n.js @@ -10,7 +10,7 @@ export const translations = {}; // Store MomentJS localization files export const momentLangs = {}; -// Handle differencies in language codes between MomentJS and /locales +// Handle differences in language codes between MomentJS and /locales const momentLangsMapping = { en: 'en-gb', en_GB: 'en-gb', // eslint-disable-line camelcase diff --git a/website/server/libs/taskManager.js b/website/server/libs/taskManager.js index 729bb4f30b..9a06be5772 100644 --- a/website/server/libs/taskManager.js +++ b/website/server/libs/taskManager.js @@ -268,7 +268,7 @@ export function syncableAttrs (task) { * * @param order The list of ordered tasks * @param taskId The Task._id of the task to move - * @param to A integer specifiying the index to move the task to + * @param to A integer specifying the index to move the task to * * @return Empty */ diff --git a/website/server/middlewares/errorHandler.js b/website/server/middlewares/errorHandler.js index 4fddc09dd0..b73b9d6df3 100644 --- a/website/server/middlewares/errorHandler.js +++ b/website/server/middlewares/errorHandler.js @@ -84,7 +84,7 @@ export default function errorHandler (err, req, res, next) { // eslint-disable-l jsonRes.errors = responseErr.errors; } - // In some occasions like when invalid JSON is supplied `res.respond` might be not yet avalaible, + // In some occasions like when invalid JSON is supplied `res.respond` might be not yet available, // in this case we use the standard res.status(...).json(...) return res.status(responseErr.httpCode).json(jsonRes); } diff --git a/website/server/models/challenge.js b/website/server/models/challenge.js index 3707b2a929..5f37c3aa9e 100644 --- a/website/server/models/challenge.js +++ b/website/server/models/challenge.js @@ -56,7 +56,7 @@ schema.plugin(baseModel, { schema.pre('init', chal => { // The Vue website makes the summary be mandatory for all new challenges, but the - // Angular website did not, and the API does not yet for backwards-compatibilty. + // Angular website did not, and the API does not yet for backwards-compatibility. // When any challenge without a summary is fetched from the database, this code // supplies the name as the summary. This can be removed when all challenges have // a summary and the API makes it mandatory (a breaking change!) diff --git a/website/server/models/group.js b/website/server/models/group.js index 805532f280..dbdcee2d60 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -158,7 +158,7 @@ schema.plugin(baseModel, { schema.pre('init', group => { // The Vue website makes the summary be mandatory for all new groups, but the - // Angular website did not, and the API does not yet for backwards-compatibilty. + // Angular website did not, and the API does not yet for backwards-compatibility. // When any guild without a summary is fetched from the database, this code // supplies the name as the summary. This can be removed when all guilds have // a summary and the API makes it mandatory (a breaking change!) diff --git a/website/server/models/user/methods.js b/website/server/models/user/methods.js index d1ef743b1e..49fe2fc73f 100644 --- a/website/server/models/user/methods.js +++ b/website/server/models/user/methods.js @@ -329,7 +329,7 @@ schema.statics.addComputedStatsToJSONObj = function addComputedStatsToUserJSONOb // This creates some odd Dependency Injection issues. To counter that, // we use the user as the third layer // To negotiate between the payment providers and the payment helper -// (which probably has too many responsiblities) +// (which probably has too many responsibilities) // In summary, currently is is best practice to use this method to cancel a user subscription, // rather than calling the // payment helper. From dd0bcfab97e73869c461b32fee92932e25bcdbcd Mon Sep 17 00:00:00 2001 From: negue Date: Mon, 23 Dec 2019 18:10:48 +0100 Subject: [PATCH 28/98] fix challenge layout (#11620) * wrap challenge task icons + margins * full width challenge card on small devices + padding under add-challenge button --- .../src/components/challenges/challengeItem.vue | 5 ++++- .../src/components/challenges/findChallenges.vue | 11 +++++++++++ .../client/src/components/challenges/myChallenges.vue | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/website/client/src/components/challenges/challengeItem.vue b/website/client/src/components/challenges/challengeItem.vue index 5dd44f0656..b3a1fd61e0 100644 --- a/website/client/src/components/challenges/challengeItem.vue +++ b/website/client/src/components/challenges/challengeItem.vue @@ -294,8 +294,9 @@ justify-content: space-evenly; background-color: $gray-700; text-align: center; - padding: 16px; + padding: 8px; border-radius: .25em; + flex-wrap: wrap; > div { .value { @@ -326,6 +327,8 @@ } > div.muted { + margin: 8px; + .value { opacity: 0.5; font-size: 20px; diff --git a/website/client/src/components/challenges/findChallenges.vue b/website/client/src/components/challenges/findChallenges.vue index b75bd6f427..7c4342af78 100644 --- a/website/client/src/components/challenges/findChallenges.vue +++ b/website/client/src/components/challenges/findChallenges.vue @@ -68,6 +68,17 @@ diff --git a/website/client/src/components/groups/membersModal.vue b/website/client/src/components/groups/membersModal.vue index 33e48a14e6..bf35a7f775 100644 --- a/website/client/src/components/groups/membersModal.vue +++ b/website/client/src/components/groups/membersModal.vue @@ -536,13 +536,12 @@ export default { }, methods: { sendMessage (member) { - this.$root.$emit('habitica::new-inbox-message', { - userIdToMessage: member._id, - displayName: member.profile.name, - username: member.auth.local.username, - backer: member.backer, - contributor: member.contributor, + this.$store.dispatch('user:newPrivateMessageTo', { + member, }); + + this.$root.$emit('bv::hide::modal', 'members-modal'); + this.$router.push('/private-messages'); }, async searchMembers (searchTerm = '') { this.members = await this.$store.state.memberModalOptions.fetchMoreMembers({ diff --git a/website/client/src/components/header/index.vue b/website/client/src/components/header/index.vue index bc5a3e50bb..ca41bb1e78 100644 --- a/website/client/src/components/header/index.vue +++ b/website/client/src/components/header/index.vue @@ -8,7 +8,7 @@
- @@ -408,6 +407,7 @@ + + diff --git a/website/client/src/components/messages/messageCard.vue b/website/client/src/components/messages/messageCard.vue new file mode 100644 index 0000000000..e858586fc0 --- /dev/null +++ b/website/client/src/components/messages/messageCard.vue @@ -0,0 +1,216 @@ + + + + + + + diff --git a/website/client/src/components/messages/messageList.vue b/website/client/src/components/messages/messageList.vue new file mode 100644 index 0000000000..5270ee7b6c --- /dev/null +++ b/website/client/src/components/messages/messageList.vue @@ -0,0 +1,400 @@ + + + + + diff --git a/website/client/src/components/ui/countBadge.stories.js b/website/client/src/components/ui/countBadge.stories.js index 8f516fec61..ff2f8ed2f6 100644 --- a/website/client/src/components/ui/countBadge.stories.js +++ b/website/client/src/components/ui/countBadge.stories.js @@ -1,9 +1,14 @@ /* eslint-disable import/no-extraneous-dependencies */ import { storiesOf } from '@storybook/vue'; +import { withKnobs, number } from '@storybook/addon-knobs'; import CountBadge from './countBadge.vue'; -storiesOf('Count Badge', module) +const stories = storiesOf('Count Badge', module); + +stories.addDecorator(withKnobs); + +stories .add('simple', () => ({ components: { CountBadge }, template: ` @@ -19,9 +24,9 @@ storiesOf('Count Badge', module)
`, - data () { - return { - count: 3, - }; + props: { + count: { + default: number('Count', 3), + }, }, })); diff --git a/website/client/src/components/ui/toggleSwitch.vue b/website/client/src/components/ui/toggleSwitch.vue index c1c06036dc..d51ff321fd 100644 --- a/website/client/src/components/ui/toggleSwitch.vue +++ b/website/client/src/components/ui/toggleSwitch.vue @@ -2,14 +2,14 @@
- {{ label }} + {{ label }}
+
+ {{ displayName }} +
+
+ + + + + diff --git a/website/client/src/components/userMenu/inbox.vue b/website/client/src/components/userMenu/inbox.vue deleted file mode 100644 index 72cceb6e11..0000000000 --- a/website/client/src/components/userMenu/inbox.vue +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - - diff --git a/website/client/src/components/userMenu/profile.vue b/website/client/src/components/userMenu/profile.vue index 4f96f6e245..d10ecef08a 100644 --- a/website/client/src/components/userMenu/profile.vue +++ b/website/client/src/components/userMenu/profile.vue @@ -859,13 +859,12 @@ export default { window.history.replaceState(null, null, ''); }, sendMessage () { - this.$root.$emit('habitica::new-inbox-message', { - userIdToMessage: this.user._id, - displayName: this.user.profile.name, - username: this.user.auth.local.username, - backer: this.user.backer, - contributor: this.user.contributor, + this.$store.dispatch('user:newPrivateMessageTo', { + member: this.user, }); + + this.$router.push('/private-messages'); + this.$root.$emit('bv::hide::modal', 'profile'); }, getProgressDisplay () { // let currentLoginDay = Content.loginIncentives[this.user.loginIncentives]; diff --git a/website/client/src/pages/private-messages.vue b/website/client/src/pages/private-messages.vue new file mode 100644 index 0000000000..7b023d5e98 --- /dev/null +++ b/website/client/src/pages/private-messages.vue @@ -0,0 +1,867 @@ + + + + + + + diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index b44689dd15..6c4f07c4c0 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -75,6 +75,8 @@ const GroupPlanIndex = () => import(/* webpackChunkName: "group-plans" */ '@/com const GroupPlanTaskInformation = () => import(/* webpackChunkName: "group-plans" */ '@/components/group-plans/taskInformation'); const GroupPlanBilling = () => import(/* webpackChunkName: "group-plans" */ '@/components/group-plans/billing'); +const MessagesIndex = () => import(/* webpackChunkName: "private-messages" */ '@/pages/private-messages'); + // Challenges const ChallengeIndex = () => import(/* webpackChunkName: "challenges" */ '@/components/challenges/index'); const MyChallenges = () => import(/* webpackChunkName: "challenges" */ '@/components/challenges/myChallenges'); @@ -193,6 +195,7 @@ const router = new VueRouter({ }, ], }, + { path: '/private-messages', name: 'privateMessages', component: MessagesIndex }, { name: 'challenges', path: '/challenges', diff --git a/website/client/src/store/actions/user.js b/website/client/src/store/actions/user.js index 87697b39af..3a98137fed 100644 --- a/website/client/src/store/actions/user.js +++ b/website/client/src/store/actions/user.js @@ -160,3 +160,65 @@ export async function userLookup (store, params) { } return response; } + +export function block (store, params) { + store.state.user.data.inbox.blocks.push(params.uuid); + return axios.post(`/api/v4/user/block/${params.uuid}`); +} + +export function unblock (store, params) { + const index = store.state.user.data.inbox.blocks.indexOf(params.uuid); + store.state.user.data.inbox.blocks.splice(index, 1); + return axios.post(`/api/v4/user/block/${params.uuid}`); +} + +export function newPrivateMessageTo (store, params) { + const { member } = params; + + const userStyles = {}; + userStyles.items = { gear: {} }; + + if (member.items) { + userStyles.items.gear = {}; + userStyles.items.gear.costume = { ...member.items.gear.costume }; + userStyles.items.gear.equipped = { ...member.items.gear.equipped }; + + userStyles.items.currentMount = member.items.currentMount; + userStyles.items.currentPet = member.items.currentPet; + } + + if (member.preferences) { + userStyles.preferences = {}; + if (member.preferences.style) userStyles.preferences.style = member.preferences.style; + userStyles.preferences.hair = member.preferences.hair; + userStyles.preferences.skin = member.preferences.skin; + userStyles.preferences.shirt = member.preferences.shirt; + userStyles.preferences.chair = member.preferences.chair; + userStyles.preferences.size = member.preferences.size; + userStyles.preferences.chair = member.preferences.chair; + userStyles.preferences.background = member.preferences.background; + userStyles.preferences.costume = member.preferences.costume; + } + + if (member.stats) { + userStyles.stats = {}; + userStyles.stats.class = member.stats.class; + if (member.stats.buffs) { + userStyles.stats.buffs = { + seafoam: member.stats.buffs.seafoam, + shinySeed: member.stats.buffs.shinySeed, + spookySparkles: member.stats.buffs.spookySparkles, + snowball: member.stats.buffs.snowball, + }; + } + } + + store.state.privateMessageOptions = { + userIdToMessage: member._id, + displayName: member.profile.name, + username: member.auth.local.username, + backer: member.backer, + contributor: member.contributor, + userStyles, + }; +} diff --git a/website/client/src/store/index.js b/website/client/src/store/index.js index 42fe46c9a8..21bd4d58d8 100644 --- a/website/client/src/store/index.js +++ b/website/client/src/store/index.js @@ -127,6 +127,13 @@ export default function () { equipmentDrawerOpen: true, groupPlans: [], isRunningYesterdailies: false, + privateMessageOptions: { + userIdToMessage: '', + displayName: '', + username: '', + backer: {}, + contributor: {}, + }, }, }); diff --git a/website/client/webpack.webstorm.config b/website/client/webpack.webstorm.config new file mode 100644 index 0000000000..729c3d2a88 --- /dev/null +++ b/website/client/webpack.webstorm.config @@ -0,0 +1,9 @@ +const path = require('path'); + +module.exports = { + resolve: { + alias: { + '@': path.join(__dirname, 'src'), + } + }, +}; diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index 637a7fbb8a..61c12e28ba 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -138,6 +138,7 @@ "PMPlaceholderDescription": "Select a conversation on the left", "PMPlaceholderTitleRevoked": "Your chat privileges have been revoked", "PMReceive": "Receive Private Messages", + "PMDisabled": "Disable Private Messages", "PMEnabledOptPopoverText": "Private Messages are enabled. Users can contact you via your profile.", "PMDisabledOptPopoverText": "Private Messages are disabled. Enable this option to allow users to contact you via your profile.", "PMDisabledCaptionTitle": "Private Messages are disabled", diff --git a/website/common/locales/en/messages.json b/website/common/locales/en/messages.json index 8b3428aebf..7b5735a09c 100644 --- a/website/common/locales/en/messages.json +++ b/website/common/locales/en/messages.json @@ -68,7 +68,8 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", - "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", + "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>.", + "beginningOfConversationReminder": "Remember to be kind, respectful, and follow the Community Guidelines!", "messageDeletedUser": "Sorry, this user has deleted their account.", "messageMissingDisplayName": "Missing display name.", diff --git a/website/server/controllers/api-v4/inbox.js b/website/server/controllers/api-v4/inbox.js index e6c9927c2a..6ced58cc26 100644 --- a/website/server/controllers/api-v4/inbox.js +++ b/website/server/controllers/api-v4/inbox.js @@ -1,9 +1,10 @@ import { authWithHeaders } from '../../middlewares/auth'; import apiError from '../../libs/apiError'; -import * as inboxLib from '../../libs/inbox'; import { NotFound, } from '../../libs/errors'; +import { listConversations } from '../../libs/inbox/conversation.methods'; +import { clearPMs, deleteMessage, getUserInbox } from '../../libs/inbox'; const api = {}; @@ -40,7 +41,7 @@ api.deleteMessage = { const { messageId } = req.params; const { user } = res.locals; - const deleted = await inboxLib.deleteMessage(user, messageId); + const deleted = await deleteMessage(user, messageId); if (!deleted) throw new NotFound(res.t('messageGroupChatNotFound')); res.respond(200); @@ -66,7 +67,7 @@ api.clearMessages = { async handler (req, res) { const { user } = res.locals; - await inboxLib.clearPMs(user); + await clearPMs(user); res.respond(200, {}); }, @@ -101,7 +102,7 @@ api.conversations = { async handler (req, res) { const { user } = res.locals; - const result = await inboxLib.listConversations(user); + const result = await listConversations(user); res.respond(200, result); }, @@ -128,7 +129,7 @@ api.getInboxMessages = { const { page } = req.query; const { conversation } = req.query; - const userInbox = await inboxLib.getUserInbox(user, { + const userInbox = await getUserInbox(user, { page, conversation, mapProps: true, }); diff --git a/website/server/libs/inbox/conversation.methods.js b/website/server/libs/inbox/conversation.methods.js new file mode 100644 index 0000000000..b1f20d53fe --- /dev/null +++ b/website/server/libs/inbox/conversation.methods.js @@ -0,0 +1,121 @@ +import { inboxModel as Inbox, setUserStyles } from '../../models/message'; +import { model as User } from '../../models/user'; + +/** + * Get the users for conversations + * 1. Get the user data of last sent message by conversation + * 2. If the target user hasn't replied yet ( 'sent:true' ) , list user data by users directly + * @param owner + * @param users + * @returns {Promise} + */ +async function usersMapByConversations (owner, users) { + const query = Inbox + .aggregate([ + { + $match: { + ownerId: owner._id, + uuid: { $in: users }, + sent: false, // only messages the other user sent to you + }, + }, + { + $group: { + _id: '$uuid', + userStyles: { $last: '$userStyles' }, + contributor: { $last: '$contributor' }, + backer: { $last: '$backer' }, + }, + }, + ]); + + + const usersAr = await query.exec(); + const usersMap = {}; + + for (const usr of usersAr) { + usersMap[usr._id] = usr; + } + + // if a conversation doesn't have a response of the chat-partner, + // those won't be listed by the query above + const usersStillNeedToBeLoaded = users.filter(userId => !usersMap[userId]); + + if (usersStillNeedToBeLoaded.length > 0) { + const usersQuery = { + _id: { $in: usersStillNeedToBeLoaded }, + }; + + const loadedUsers = await User.find(usersQuery, { + _id: 1, + contributor: 1, + backer: 1, + items: 1, + preferences: 1, + stats: 1, + }).exec(); + + for (const usr of loadedUsers) { + const loadedUserConversation = { + _id: usr._id, + backer: usr.backer, + contributor: usr.contributor, + }; + // map user values to conversation properties + setUserStyles(loadedUserConversation, usr); + + usersMap[usr._id] = loadedUserConversation; + } + } + + return usersMap; +} + +export async function listConversations (owner) { + // group messages by user owned by logged-in user + const query = Inbox + .aggregate([ + { + $match: { + ownerId: owner._id, + }, + }, + { + $group: { + _id: '$uuid', + user: { $last: '$user' }, + username: { $last: '$username' }, + timestamp: { $last: '$timestamp' }, + text: { $last: '$text' }, + count: { $sum: 1 }, + }, + }, + { $sort: { timestamp: -1 } }, // sort by latest message + ]); + + const conversationsList = await query.exec(); + + const userIdList = conversationsList.map(c => c._id); + + // get user-info based on conversations + const usersMap = await usersMapByConversations(owner, userIdList); + + const conversations = conversationsList.map(res => { + const uuid = res._id; + + const conversation = { + uuid, + ...res, + }; + + if (usersMap[uuid]) { + conversation.userStyles = usersMap[uuid].userStyles; + conversation.contributor = usersMap[uuid].contributor; + conversation.backer = usersMap[uuid].backer; + } + + return conversation; + }); + + return conversations; +} diff --git a/website/server/libs/inbox/index.js b/website/server/libs/inbox/index.js index e6aa8c057e..db16cd02ff 100644 --- a/website/server/libs/inbox/index.js +++ b/website/server/libs/inbox/index.js @@ -80,74 +80,6 @@ export async function getUserInbox (user, options = { return messagesObj; } -async function usersMapByConversations (owner, users) { - const query = Inbox - .aggregate([ - { - $match: { - ownerId: owner._id, - uuid: { $in: users }, - }, - }, - { - $group: { - _id: '$uuid', - userStyles: { $last: '$userStyles' }, - contributor: { $last: '$contributor' }, - }, - }, - ]); - - - const usersAr = await query.exec(); - const usersMap = {}; - - for (const usr of usersAr) { - usersMap[usr._id] = usr; - } - - return usersMap; -} - -export async function listConversations (owner) { - // group messages by user owned by logged-in user - const query = Inbox - .aggregate([ - { - $match: { - ownerId: owner._id, - }, - }, - { - $group: { - _id: '$uuid', - user: { $last: '$user' }, - username: { $last: '$username' }, - timestamp: { $last: '$timestamp' }, - text: { $last: '$text' }, - count: { $sum: 1 }, - }, - }, - { $sort: { timestamp: -1 } }, // sort by latest message - ]); - - const conversationsList = await query.exec(); - - const userIdList = conversationsList.map(c => c._id); - - // get user-info based on conversations - const usersMap = await usersMapByConversations(owner, userIdList); - - const conversations = conversationsList.map(res => ({ - uuid: res._id, - ...res, - userStyles: usersMap[res._id].userStyles, - contributor: usersMap[res._id].contributor, - })); - - return conversations; -} - export async function getUserInboxMessage (user, messageId) { return Inbox.findOne({ ownerId: user._id, _id: messageId }).exec(); } diff --git a/website/server/models/message.js b/website/server/models/message.js index 1cf5d1b575..d3a99dae1d 100644 --- a/website/server/models/message.js +++ b/website/server/models/message.js @@ -107,7 +107,10 @@ export function setUserStyles (newMessage, user) { newMessage.contributor = contributorCopy; newMessage.userStyles = userStyles; - newMessage.markModified('userStyles contributor'); + + if (newMessage.markModified) { + newMessage.markModified('userStyles contributor'); + } } export function messageDefaults (msg, user, client, flagCount = 0, info = {}) { From bb50586622d097f1685a67d6195e5486b5bbea66 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:02:47 +0000 Subject: [PATCH 71/98] build(deps): bump core-js from 3.6.1 to 3.6.3 in /website/client Bumps [core-js](https://github.com/zloirock/core-js) from 3.6.1 to 3.6.3. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/compare/v3.6.1...v3.6.3) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..fb17dad2c2 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -5664,9 +5664,9 @@ } }, "core-js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz", - "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ==" + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.3.tgz", + "integrity": "sha512-DOO9b18YHR+Wk5kJ/c5YFbXuUETreD4TrvXb6edzqZE3aAEd0eJIAWghZ9HttMuiON8SVCnU3fqA4rPxRDD1HQ==" }, "core-js-compat": { "version": "3.4.5", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..e75b0f2773 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -31,7 +31,7 @@ "bootstrap": "^4.4.1", "bootstrap-vue": "^2.1.0", "chai": "^4.1.2", - "core-js": "^3.6.1", + "core-js": "^3.6.3", "eslint": "^6.8.0", "eslint-config-habitrpg": "^6.2.0", "eslint-plugin-mocha": "^5.3.0", From d0eb6196d3ca004f726ab63d3edfedee0a470279 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:03:56 +0000 Subject: [PATCH 72/98] build(deps): bump bootstrap-vue from 2.1.0 to 2.2.0 in /website/client Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases) - [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md) - [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.1.0...v2.2.0) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 22 +++++++++++----------- website/client/package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..bd972078c6 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -4506,14 +4506,14 @@ "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" }, "bootstrap-vue": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.1.0.tgz", - "integrity": "sha512-dftb5fc42x7QLv814nN+3Cx8MMuCB+xrGQjOmSXH81ET0+yo7KYb4lUN3/pOnf+8Tkv8oaawZ1OOth5/AZfktg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.2.0.tgz", + "integrity": "sha512-Y/n6wxMga0Be/RKb1tkAZfCXfSN9vPS66TRuva/MlJ+MqyxW9+htbsTOQj13Yq0oBw0aY5r6cVBlqoCEpZb7tQ==", "requires": { "@nuxt/opencollective": "^0.3.0", - "bootstrap": ">=4.3.1 <5.0.0", + "bootstrap": ">=4.4.1 <5.0.0", "popper.js": "^1.16.0", - "portal-vue": "^2.1.6", + "portal-vue": "^2.1.7", "vue-functional-data-merge": "^3.1.0" } }, @@ -5507,9 +5507,9 @@ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" }, "consola": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.11.0.tgz", - "integrity": "sha512-2bcAqHastlPSCvZ+ur8bgHInGAWvUnysWz3h3xRX+/XZoCY7avolJJnVXOPGoVoyCcg1b231XixonoArmgxaoA==" + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.11.3.tgz", + "integrity": "sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw==" }, "console-browserify": { "version": "1.2.0", @@ -11961,9 +11961,9 @@ "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==" }, "portal-vue": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.6.tgz", - "integrity": "sha512-lvCF85D4e8whd0nN32D8FqKwwkk7nYUI3Ku8UAEx4Z1reomu75dv5evRUTZNaj1EalxxWNXiNl0EHRq36fG8WA==" + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz", + "integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==" }, "portfinder": { "version": "1.0.25", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..0ae6f8cdee 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -29,7 +29,7 @@ "axios-progress-bar": "^1.2.0", "babel-eslint": "^10.0.1", "bootstrap": "^4.4.1", - "bootstrap-vue": "^2.1.0", + "bootstrap-vue": "^2.2.0", "chai": "^4.1.2", "core-js": "^3.6.1", "eslint": "^6.8.0", From 47fb821956d0d36b0fbf5d4693c4a152bdc15d0c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:04:57 +0000 Subject: [PATCH 73/98] build(deps): bump sass from 1.24.2 to 1.24.4 in /website/client Bumps [sass](https://github.com/sass/dart-sass) from 1.24.2 to 1.24.4. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.24.2...1.24.4) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..3b5ff5121e 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -13578,9 +13578,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.24.2.tgz", - "integrity": "sha512-0JxdMMRd0fOmGFQFRI91vh4n0Ed766ib9JwPUa+1C37zn3VaqlHxbknUn/6LqP/MSfvNPxRYoCrYf5g8vu4OHw==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.24.4.tgz", + "integrity": "sha512-SqizkIEEcVPzmK1tYdlNRl/RSXMEwGcifL9GD+S2p9rEPdj6ycRbk4PWZs0jwlajNSyBPo/SXRB81i22SG0jmw==", "requires": { "chokidar": ">=2.0.0 <4.0.0" } diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..e988566a8e 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -44,7 +44,7 @@ "lodash": "^4.17.15", "moment": "^2.24.0", "nconf": "^0.10.0", - "sass": "^1.24.2", + "sass": "^1.24.4", "sass-loader": "^8.0.0", "smartbanner.js": "^1.15.0", "svg-inline-loader": "^0.8.0", From d1ecb960b0bfc37d457effa14f4d5267746bba05 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:09:31 +0000 Subject: [PATCH 74/98] build(deps): bump @storybook/addon-notes in /website/client Bumps [@storybook/addon-notes](https://github.com/storybookjs/storybook/tree/HEAD/addons/notes) from 5.2.8 to 5.3.1. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v5.3.1/addons/notes) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 239 +++++++++++++++++++++++++++++-- website/client/package.json | 2 +- 2 files changed, 230 insertions(+), 11 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..daaf75e56a 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -2068,23 +2068,215 @@ } }, "@storybook/addon-notes": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-notes/-/addon-notes-5.2.8.tgz", - "integrity": "sha512-6we9WUD4cQzGhy9yej7ob+5SWk5OZ2BC1PWEcZOR/GcgYSWNk8cNNnpqAlFqB+DAQk5yawZ41MhQom0NT6LWOw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-notes/-/addon-notes-5.3.1.tgz", + "integrity": "sha512-qsn3ZrHs4X2ZwsAo3fnRu4ELC2eFEmTKreBnt6dpkHT/1Ed0usC+RyQZmbIqRsa1oMwPlBqMAv6B/oDx0Jl2wA==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/client-logger": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", + "@storybook/addons": "5.3.1", + "@storybook/api": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/components": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", "core-js": "^3.0.1", "global": "^4.3.2", "markdown-to-jsx": "^6.10.3", "memoizerific": "^1.11.3", "prop-types": "^15.7.2", "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/components": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.1.tgz", + "integrity": "sha512-Ywr4EYk49boBgse07H6emzLWNa5N0v/57XvSlhiTm/BRcwwNztKSIFWcX+77CIdfcCZMie+77Ce/c8R6XPDIhw==", + "requires": { + "@storybook/client-logger": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/react-syntax-highlighter": "11.0.2", + "@types/react-textarea-autosize": "^4.3.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "markdown-to-jsx": "^6.9.1", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "popper.js": "^1.14.7", + "prop-types": "^15.7.2", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^2.1.0", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^11.0.2", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6", + "ts-dedent": "^1.1.0" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-iMNcixH8330f2dq0RY+VOXCP8JFehgmOhLOtnO85Ty+qu0fHXJNEqWx5VuFv8v0aEq0U/N9d/k1yvA+c6PEmPw==", + "requires": { + "@types/react": "*" + } + }, + "highlight.js": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" + }, + "lowlight": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", + "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", + "requires": { + "fault": "^1.0.2", + "highlight.js": "~9.13.0" + } + }, + "qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "react-focus-lock": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.2.1.tgz", + "integrity": "sha512-47g0xYcCTZccdzKRGufepY8oZ3W1Qg+2hn6u9SHZ0zUB6uz/4K4xJe7yYFNZ1qT6m+2JDm82F6QgKeBTbjW4PQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.6.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.2", + "use-callback-ref": "^1.2.1", + "use-sidecar": "^1.0.1" + } + }, + "react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww==", + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "~9.13.0", + "lowlight": "~1.11.0", + "prismjs": "^1.8.4", + "refractor": "^2.4.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@storybook/addons": { @@ -2473,6 +2665,14 @@ "core-js": "^3.0.1" } }, + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "requires": { + "lodash": "^4.17.15" + } + }, "@storybook/node-logger": { "version": "5.2.8", "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.2.8.tgz", @@ -15016,6 +15216,11 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-dedent": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-1.1.0.tgz", + "integrity": "sha512-CVCvDwMBWZKjDxpN3mU/Dx1v3k+sJgE8nrhXcC9vRopRfoa7vVzilNvHEAUi5jQnmFHpnxDx5jZdI1TpG8ny2g==" + }, "ts-pnp": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz", @@ -15306,6 +15511,20 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-callback-ref": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.2.1.tgz", + "integrity": "sha512-C3nvxh0ZpaOxs9RCnWwAJ+7bJPwQI8LHF71LzbQ3BvzH5XkdtlkMadqElGevg5bYBDFip4sAnD4m06zAKebg1w==" + }, + "use-sidecar": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.0.2.tgz", + "integrity": "sha512-287RZny6m5KNMTb/Kq9gmjafi7lQL0YHO1lYolU6+tY1h9+Z3uCtkJJ3OSOq3INwYf2hBryCcDh4520AhJibMA==", + "requires": { + "detect-node": "^2.0.4", + "tslib": "^1.9.3" + } + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..0b3c6fea34 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -21,7 +21,7 @@ "@storybook/addon-actions": "^5.0.0", "@storybook/addon-knobs": "^5.0.0", "@storybook/addon-links": "^5.0.0", - "@storybook/addon-notes": "^5.0.0", + "@storybook/addon-notes": "^5.3.1", "@storybook/vue": "^5.2.5", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^5.8.0", From 5762f85798a55f019521e958071b04e52d516e17 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:10:42 +0000 Subject: [PATCH 75/98] build(deps): bump @storybook/addon-knobs in /website/client Bumps [@storybook/addon-knobs](https://github.com/storybookjs/storybook/tree/HEAD/addons/knobs) from 5.2.8 to 5.3.1. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v5.3.1/addons/knobs) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 286 +++++++++++++++++++++++++++++-- website/client/package.json | 2 +- 2 files changed, 274 insertions(+), 14 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..c3016bfefa 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -2014,16 +2014,16 @@ } }, "@storybook/addon-knobs": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.2.8.tgz", - "integrity": "sha512-5SAMJj+0pbhCiyNkKjkUxEbM9L/wrOE4HTvM7gvm902fULuKZklb3wV8iiUNRfIPCs6VhmmIhPzXICGjhW5xIg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.3.1.tgz", + "integrity": "sha512-lhldozJTcWLmfygoui8Zz8Ztk9GWO/tpowy1KcBRwUUphQaPuthnz6Png29k7JXEuiidncKDb5cIkWYZGMoXSw==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8", + "@storybook/addons": "5.3.1", + "@storybook/api": "5.3.1", + "@storybook/client-api": "5.3.1", + "@storybook/components": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/theming": "5.3.1", "@types/react-color": "^3.0.1", "copy-to-clipboard": "^3.0.8", "core-js": "^3.0.1", @@ -2035,13 +2035,246 @@ "qs": "^6.6.0", "react-color": "^2.17.0", "react-lifecycles-compat": "^3.0.4", - "react-select": "^3.0.0" + "react-select": "^3.0.8" }, "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channel-postmessage": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.1.tgz", + "integrity": "sha512-oGwjAgpj/1wTYlfRnVLSPfHu7iptWSIHiWmjqlOTwNWFQpbDt+RI1LmZW2HpkyBKnU4+TMfue+ISlc+n90DD3A==", + "requires": { + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "telejson": "^3.2.0" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.3.1.tgz", + "integrity": "sha512-j9dHHttx5K8XFX4LVWFivFBSD/XRrbEytsUzhRVDRDAlvPHQQhnQyFUxH8o4gdbJqnhC+q6K5AF79Et3OyymKw==", + "requires": { + "@storybook/addons": "5.3.1", + "@storybook/channel-postmessage": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "core-js": "^3.0.1", + "eventemitter3": "^4.0.0", + "global": "^4.3.2", + "is-plain-object": "^3.0.0", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "stable": "^0.1.8", + "ts-dedent": "^1.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/components": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.1.tgz", + "integrity": "sha512-Ywr4EYk49boBgse07H6emzLWNa5N0v/57XvSlhiTm/BRcwwNztKSIFWcX+77CIdfcCZMie+77Ce/c8R6XPDIhw==", + "requires": { + "@storybook/client-logger": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/react-syntax-highlighter": "11.0.2", + "@types/react-textarea-autosize": "^4.3.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "markdown-to-jsx": "^6.9.1", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "popper.js": "^1.14.7", + "prop-types": "^15.7.2", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^2.1.0", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^11.0.2", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6", + "ts-dedent": "^1.1.0" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-iMNcixH8330f2dq0RY+VOXCP8JFehgmOhLOtnO85Ty+qu0fHXJNEqWx5VuFv8v0aEq0U/N9d/k1yvA+c6PEmPw==", + "requires": { + "@types/react": "*" + } + }, + "highlight.js": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" + }, + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" + }, + "lowlight": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", + "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", + "requires": { + "fault": "^1.0.2", + "highlight.js": "~9.13.0" + } + }, "qs": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "react-focus-lock": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.2.1.tgz", + "integrity": "sha512-47g0xYcCTZccdzKRGufepY8oZ3W1Qg+2hn6u9SHZ0zUB6uz/4K4xJe7yYFNZ1qT6m+2JDm82F6QgKeBTbjW4PQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.6.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.2", + "use-callback-ref": "^1.2.1", + "use-sidecar": "^1.0.1" + } + }, + "react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww==", + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "~9.13.0", + "lowlight": "~1.11.0", + "prismjs": "^1.8.4", + "refractor": "^2.4.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -2473,6 +2706,14 @@ "core-js": "^3.0.1" } }, + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "requires": { + "lodash": "^4.17.15" + } + }, "@storybook/node-logger": { "version": "5.2.8", "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.2.8.tgz", @@ -12732,9 +12973,9 @@ } }, "react-color": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.3.tgz", - "integrity": "sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.18.0.tgz", + "integrity": "sha512-FyVeU1kQiSokWc8NPz22azl1ezLpJdUyTbWL0LPUpcuuYDrZ/Y1veOk9rRK5B3pMlyDGvTk4f4KJhlkIQNRjEA==", "requires": { "@icons/material": "^0.2.4", "lodash": "^4.17.11", @@ -15016,6 +15257,11 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-dedent": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-1.1.0.tgz", + "integrity": "sha512-CVCvDwMBWZKjDxpN3mU/Dx1v3k+sJgE8nrhXcC9vRopRfoa7vVzilNvHEAUi5jQnmFHpnxDx5jZdI1TpG8ny2g==" + }, "ts-pnp": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz", @@ -15306,6 +15552,20 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-callback-ref": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.2.1.tgz", + "integrity": "sha512-C3nvxh0ZpaOxs9RCnWwAJ+7bJPwQI8LHF71LzbQ3BvzH5XkdtlkMadqElGevg5bYBDFip4sAnD4m06zAKebg1w==" + }, + "use-sidecar": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.0.2.tgz", + "integrity": "sha512-287RZny6m5KNMTb/Kq9gmjafi7lQL0YHO1lYolU6+tY1h9+Z3uCtkJJ3OSOq3INwYf2hBryCcDh4520AhJibMA==", + "requires": { + "detect-node": "^2.0.4", + "tslib": "^1.9.3" + } + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..129dad12c2 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -19,7 +19,7 @@ "@vue/cli-plugin-unit-mocha": "^4.1.2", "@vue/cli-service": "^4.1.2", "@storybook/addon-actions": "^5.0.0", - "@storybook/addon-knobs": "^5.0.0", + "@storybook/addon-knobs": "^5.3.1", "@storybook/addon-links": "^5.0.0", "@storybook/addon-notes": "^5.0.0", "@storybook/vue": "^5.2.5", From fdfe76ca162af0360eea8c7bc5d3b2e3a3c875b6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:11:33 +0000 Subject: [PATCH 76/98] build(deps): bump hellojs from 1.18.1 to 1.18.4 in /website/client Bumps [hellojs](https://github.com/MrSwitch/hello.js) from 1.18.1 to 1.18.4. - [Release notes](https://github.com/MrSwitch/hello.js/releases) - [Commits](https://github.com/MrSwitch/hello.js/compare/v1.18.1...v1.18.4) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..2f056bb0b4 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -8744,9 +8744,9 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hellojs": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/hellojs/-/hellojs-1.18.1.tgz", - "integrity": "sha512-T673GW3RSuM4xzYfJpp/wNPDbUG9FlNSNkQn0thII8DOpl3NphcmtmNrHrmv8hyk1fosJHkgzDfbcpJvmeq5Gw==" + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/hellojs/-/hellojs-1.18.4.tgz", + "integrity": "sha512-h9s7cYE5TlojfgPtdMDXWAyYInQuBCC21jL9TwJGY3NN6wYOw4B83NrEC4p+R015kndQAqZamWe/VolOaQrLeQ==" }, "hex-color-regex": { "version": "1.1.0", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..d4c42bc9df 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -37,7 +37,7 @@ "eslint-plugin-mocha": "^5.3.0", "eslint-plugin-vue": "^6.1.2", "habitica-markdown": "^1.3.2", - "hellojs": "^1.18.1", + "hellojs": "^1.18.4", "inspectpack": "^4.3.0", "intro.js": "^2.9.3", "jquery": "^3.4.1", From c934cf990dc4fa1bdc45514cfc617e2f461a2b41 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:12:35 +0000 Subject: [PATCH 77/98] build(deps): bump vue2-perfect-scrollbar in /website/client Bumps [vue2-perfect-scrollbar](https://github.com/mercs600/vue2-perfect-scrollbar) from 1.2.4 to 1.3.0. - [Release notes](https://github.com/mercs600/vue2-perfect-scrollbar/releases) - [Commits](https://github.com/mercs600/vue2-perfect-scrollbar/commits/1.3.0) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 6 +++--- website/client/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 24f9f538a1..c71607daa9 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -15493,9 +15493,9 @@ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==" }, "vue2-perfect-scrollbar": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/vue2-perfect-scrollbar/-/vue2-perfect-scrollbar-1.2.4.tgz", - "integrity": "sha512-RI4+OEKHQm5H+cWq0kaK8OxUB11NdSUQZ4yagD00eDRf9pd5SWo9B9J9K2z82nORM2IMw0RssxBXXUf09Ck20g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vue2-perfect-scrollbar/-/vue2-perfect-scrollbar-1.3.0.tgz", + "integrity": "sha512-QCFTgRtUHsn4WSvR08pjKJEXQJLqFFl4V7ODsFAhJkdhYweY4Ac6KYqwoxnXRIeJXd/JZgY9vy1601Z0osNJcQ==", "requires": { "cssnano": "^4.1.3", "perfect-scrollbar": "^1.4.0", diff --git a/website/client/package.json b/website/client/package.json index 2fe64b3945..e324ab058d 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -58,7 +58,7 @@ "vue-mugen-scroll": "^0.2.6", "vue-router": "^3.0.6", "vue-template-compiler": "^2.6.11", - "vue2-perfect-scrollbar": "^1.2.1", + "vue2-perfect-scrollbar": "^1.3.0", "vuedraggable": "^2.23.1", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec", "webpack": "^4.41.5" From 11a2696179a826b8341138eb911b8c13c0370c8a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:15:32 +0000 Subject: [PATCH 78/98] build(deps-dev): bump monk from 7.1.1 to 7.1.2 Bumps [monk](https://github.com/Automattic/monk) from 7.1.1 to 7.1.2. - [Release notes](https://github.com/Automattic/monk/releases) - [Changelog](https://github.com/Automattic/monk/blob/master/CHANGELOG.md) - [Commits](https://github.com/Automattic/monk/commits) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..c52ac1f83b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8958,9 +8958,9 @@ } }, "mongodb": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.3.tgz", - "integrity": "sha512-MdRnoOjstmnrKJsK8PY0PjP6fyF/SBS4R8coxmhsfEU7tQ46/J6j+aSHF2n4c2/H8B+Hc/Klbfp8vggZfI0mmA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz", + "integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==", "dev": true, "requires": { "bson": "^1.1.1", @@ -9006,9 +9006,9 @@ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, "monk": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/monk/-/monk-7.1.1.tgz", - "integrity": "sha512-7H4bKRUiopLkWsufom7xUZpflz/Ees4V3QXLKZMxMdh4B4R2zultrTUjPXj37DOijvj0PluJMmkffrsUkBVxCA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/monk/-/monk-7.1.2.tgz", + "integrity": "sha512-wyO1wW2lVlVChJXtNIyJ/ZSlBg/wQ/XTsWzfhuV19pl47/44nxR1KhXKxTnSB1hx08xuTMF3QodvaFBuRWPUjQ==", "dev": true, "requires": { "debug": "*", diff --git a/package.json b/package.json index 9d649dd13a..ff19cc828c 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "expect.js": "^0.3.1", "istanbul": "^1.1.0-alpha.1", "mocha": "^5.1.1", - "monk": "^7.1.1", + "monk": "^7.1.2", "require-again": "^2.0.0", "sinon": "^7.2.4", "sinon-chai": "^3.4.0", From 4f167c6b2e6ea2b402b8f5fd1bc7955ee0695371 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:17:02 +0000 Subject: [PATCH 79/98] build(deps): bump @babel/core from 7.7.7 to 7.8.0 Bumps [@babel/core](https://github.com/babel/babel) from 7.7.7 to 7.8.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.7...v7.8.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 232 +++++++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 209 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..12e3d191f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,19 +13,20 @@ } }, "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.0.tgz", + "integrity": "sha512-3rqPi/bv/Xfu2YzHvBz4XqMI1fKVwnhntPA1/fjoECrSjrhbOCxlTrbVu5gUtr8zkxW+RpkDOa/HCW93gzS2Dw==", "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helpers": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", @@ -33,21 +34,101 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "requires": { - "@babel/types": "^7.7.4", + "@babel/highlight": "^7.8.0" + } + }, + "@babel/generator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "requires": { + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "requires": { + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "requires": { + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "requires": { + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==" + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + }, + "@babel/template": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "requires": { + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" + } + }, + "@babel/traverse": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "requires": { + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } }, "convert-source-map": { "version": "1.7.0", @@ -253,13 +334,111 @@ } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.0.tgz", + "integrity": "sha512-srWKpjAFbiut5JoCReZJ098hLqoZ9HufOnKZPggc7j74XaPuQ+9b3RYPV1M/HfjL63lCNd8uI1O487qIWxAFNA==", "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "requires": { + "@babel/highlight": "^7.8.0" + } + }, + "@babel/generator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "requires": { + "@babel/types": "^7.8.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "requires": { + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "requires": { + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "requires": { + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + }, + "@babel/template": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "requires": { + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" + } + }, + "@babel/traverse": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "requires": { + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/highlight": { @@ -6097,6 +6276,11 @@ "is-property": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", diff --git a/package.json b/package.json index 9d649dd13a..8b30076292 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "4.129.2", "main": "./website/server/index.js", "dependencies": { - "@babel/core": "^7.7.7", + "@babel/core": "^7.8.0", "@babel/preset-env": "^7.7.7", "@babel/register": "^7.7.7", "@google-cloud/trace-agent": "^4.2.4", From 24ca2cd2deab1eeddf542d92091b50d5be83207d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:17:48 +0000 Subject: [PATCH 80/98] build(deps): bump aws-sdk from 2.597.0 to 2.601.0 Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.597.0 to 2.601.0. - [Release notes](https://github.com/aws/aws-sdk-js/releases) - [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js/compare/v2.597.0...v2.601.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..70d5e32c0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1723,9 +1723,9 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sdk": { - "version": "2.597.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.597.0.tgz", - "integrity": "sha512-xdhm1bYnh46b7pEOmIsptQcPAJmq9MT31cUsn3WzOr6IPtiRLz5XIHIusFFsJYpyjiFB99b1n8SabRR7j6H1AA==", + "version": "2.601.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.601.0.tgz", + "integrity": "sha512-i8ND3Hn0zjuwyau47io8Uyvbeb6dnOYbC6k34u3DvqH3I/kFDgDAme6L58LUzSHAPDWhUDjNXpScmMsGZVDWrw==", "requires": { "buffer": "4.9.1", "events": "1.1.1", diff --git a/package.json b/package.json index 9d649dd13a..85a5df33c7 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "amplitude": "^3.5.0", "apidoc": "^0.17.5", "apn": "^2.2.0", - "aws-sdk": "^2.597.0", + "aws-sdk": "^2.601.0", "bcrypt": "^3.0.7", "body-parser": "^1.18.3", "compression": "^1.7.4", From a3bbf6a1490caaf21e75a55bbb071291cd9e45ca Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:19:09 +0000 Subject: [PATCH 81/98] build(deps): bump mongoose from 5.8.4 to 5.8.7 Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.8.4 to 5.8.7. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md) - [Commits](https://github.com/Automattic/mongoose/compare/5.8.4...5.8.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..75d8ac49fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8970,9 +8970,9 @@ } }, "mongoose": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.4.tgz", - "integrity": "sha512-jQjLckUILEQUqBuG+ihjtA9OLmrqcIG5n+vaeHpR++TG8/ug5yy5ogkDnybTSq8Ql5OORud3+OCOc2Uw96q32w==", + "version": "5.8.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.7.tgz", + "integrity": "sha512-PCCuTrdxpUmO86L1geXWE+9AvJRFuneIrMUT2hB/LXZ+5HIGOIfE6OSMU7cd8wFU7JRINP9V73zZ9YsmAbt+Iw==", "requires": { "bson": "~1.1.1", "kareem": "2.3.1", diff --git a/package.json b/package.json index 9d649dd13a..355aedc7e2 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "method-override": "^3.0.0", "moment": "^2.24.0", "moment-recur": "^1.0.7", - "mongoose": "^5.8.4", + "mongoose": "^5.8.7", "morgan": "^1.7.0", "nconf": "^0.10.0", "node-gcm": "^1.0.2", From 0af4561e9537e1ffb69a2645776658e9f8757863 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:19:52 +0000 Subject: [PATCH 82/98] build(deps): bump amazon-payments from 0.2.7 to 0.2.8 Bumps [amazon-payments](https://github.com/MadisonReed/amazon-payments) from 0.2.7 to 0.2.8. - [Release notes](https://github.com/MadisonReed/amazon-payments/releases) - [Commits](https://github.com/MadisonReed/amazon-payments/commits) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..fae83d9204 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1058,11 +1058,11 @@ } }, "amazon-payments": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/amazon-payments/-/amazon-payments-0.2.7.tgz", - "integrity": "sha512-TDaE0N9IeFJGIKHSIMyDBP8iq9jMcdT/BcpVEAunwL22he1/nI4/tnaOZs4TYFNMnWj2r5pVgDJzwQXTW9wFzw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/amazon-payments/-/amazon-payments-0.2.8.tgz", + "integrity": "sha512-5EU4qf1UaICoVKwLjmSxuoGEt4nIkbdcPGCCSribKZo6X8e8mZ8M7UHO24Yk2b/vnjeW+0wHZdQcYXn4kluklg==", "requires": { - "request": "^2.85.0", + "request": "^2.88.0", "xml2js": "0.4.4" }, "dependencies": { diff --git a/package.json b/package.json index 9d649dd13a..28fab25901 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@google-cloud/trace-agent": "^4.2.4", "@slack/client": "^3.8.1", "accepts": "^1.3.5", - "amazon-payments": "^0.2.7", + "amazon-payments": "^0.2.8", "amplitude": "^3.5.0", "apidoc": "^0.17.5", "apn": "^2.2.0", From de5f4cb092222edb50d1f6de0f93c4c2ae915550 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:20:42 +0000 Subject: [PATCH 83/98] build(deps): bump cookie-session from 1.3.3 to 1.4.0 Bumps [cookie-session](https://github.com/expressjs/cookie-session) from 1.3.3 to 1.4.0. - [Release notes](https://github.com/expressjs/cookie-session/releases) - [Changelog](https://github.com/expressjs/cookie-session/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/cookie-session/compare/1.3.3...1.4.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 39 +++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..e73f4febb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3290,11 +3290,11 @@ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-session": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-1.3.3.tgz", - "integrity": "sha512-GrMdrU1YTQWtmVTo0Rj3peeZRMc2xJrBslFYtZcYTo+hrSLmrcf69OrRkDi84xTfylgCy2wgpRHyY4le6lE5+A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-1.4.0.tgz", + "integrity": "sha512-0hhwD+BUIwMXQraiZP/J7VP2YFzqo6g4WqZlWHtEHQ22t0MeZZrNBSCxC1zcaLAs8ApT3BzAKizx9gW/AP9vNA==", "requires": { - "cookies": "0.7.3", + "cookies": "0.8.0", "debug": "2.6.9", "on-headers": "~1.0.2" }, @@ -3325,12 +3325,19 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, "cookies": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.3.tgz", - "integrity": "sha512-+gixgxYSgQLTaTIilDHAdlNPZDENDQernEMiIcZpYYP14zgHsCt4Ce1FEjFtcp6GefhozebB6orvhAAWx/IS0A==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", "requires": { - "depd": "~1.1.2", - "keygrip": "~1.0.3" + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, "copy-descriptor": { @@ -8161,9 +8168,12 @@ "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, "keygrip": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz", - "integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "requires": { + "tsscmp": "1.0.6" + } }, "keyv": { "version": "3.1.0", @@ -12466,6 +12476,11 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" + }, "tunnel-agent": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", diff --git a/package.json b/package.json index 9d649dd13a..84aa4e05c0 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "bcrypt": "^3.0.7", "body-parser": "^1.18.3", "compression": "^1.7.4", - "cookie-session": "^1.3.3", + "cookie-session": "^1.4.0", "coupon-code": "^0.4.5", "csv-stringify": "^5.3.6", "cwait": "^1.1.1", From 4035b148d20d6e58d4d34f12ee922394e1bb27d5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:21:18 +0000 Subject: [PATCH 84/98] build(deps): bump superagent from 5.1.3 to 5.2.1 Bumps [superagent](https://github.com/visionmedia/superagent) from 5.1.3 to 5.2.1. - [Release notes](https://github.com/visionmedia/superagent/releases) - [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md) - [Commits](https://github.com/visionmedia/superagent/compare/v5.1.3...v5.2.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..1de5d7e519 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12038,9 +12038,9 @@ "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "superagent": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.1.3.tgz", - "integrity": "sha512-2bno1Nb4uvZPECTJ7NDYlae6Q8LLQoZZZ9Vumd346jU1UGVkNC/lQI42jHwtrqVoepyt0QxNKFty01IRKgD4CA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.1.tgz", + "integrity": "sha512-46b4Lkwnlz7Ebdv2FBbfuqb3kVkG1jV/SK3EW6NnwL9a3T4h5hHtegNEQfbXvTFbDoUZXId4W3dMgap2f6ic1g==", "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", diff --git a/package.json b/package.json index 9d649dd13a..385dc054aa 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "rimraf": "^3.0.0", "short-uuid": "^3.0.0", "stripe": "^7.15.0", - "superagent": "^5.1.3", + "superagent": "^5.2.1", "universal-analytics": "^0.4.17", "useragent": "^2.1.9", "uuid": "^3.3.3", From 14c1bddca28fd6172d20513eff5e9203967bc0a9 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:45:44 +0000 Subject: [PATCH 85/98] build(deps): bump axios from 0.19.0 to 0.19.1 in /website/client Bumps [axios](https://github.com/axios/axios) from 0.19.0 to 0.19.1. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.19.0...0.19.1) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 14 ++++---------- website/client/package.json | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 4eac1b85a4..48fb8278f4 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -4088,12 +4088,11 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.1.tgz", + "integrity": "sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "follow-redirects": "1.5.10" }, "dependencies": { "debug": { @@ -4112,11 +4111,6 @@ "debug": "=3.1.0" } }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/website/client/package.json b/website/client/package.json index 3a1fb83d73..f1f268603f 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -25,7 +25,7 @@ "@storybook/vue": "^5.2.5", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^5.8.0", - "axios": "^0.19.0", + "axios": "^0.19.1", "axios-progress-bar": "^1.2.0", "babel-eslint": "^10.0.1", "bootstrap": "^4.4.1", From c8db6a35f9d8c638203ab5c5479e5b69aba66e0b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:46:21 +0000 Subject: [PATCH 86/98] build(deps): bump @storybook/addon-actions in /website/client Bumps [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/addons/actions) from 5.2.8 to 5.3.1. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v5.3.1/addons/actions) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 762 ++++++++++++++++++++++++++++++- website/client/package.json | 2 +- 2 files changed, 749 insertions(+), 15 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 3cbbe72fb3..ac823d1386 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -1726,6 +1726,230 @@ "to-fast-properties": "^2.0.0" } }, + "@chromaui/localtunnel": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@chromaui/localtunnel/-/localtunnel-1.10.1.tgz", + "integrity": "sha512-LXhAogVc9SOQ45+mtk2mhcQxW4bE8aadfx9WbDzuDlBXcDgDMFBaxOmd5VYsPxQYA+cLFkKeuKOpROzsZSEySA==", + "requires": { + "axios": "0.19.0", + "debug": "^3.0.1", + "openurl": "1.1.1", + "yargs": "6.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, "@emotion/cache": { "version": "10.0.19", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.19.tgz", @@ -1993,24 +2217,264 @@ } }, "@storybook/addon-actions": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.2.8.tgz", - "integrity": "sha512-hadk+UaU6upOW0g447RfLRrnXRgE2rjRVk5sT8mVxBMj032NnwUd7ie/BZwy1yg5B8oFtpkgQYwqhPtoO2xBaQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.3.1.tgz", + "integrity": "sha512-QYEnYwhynGicQXyQxe5vVvrf/chk4k5c5qh2SNTs+33yNSyjvvPsdqYBQYOCkcRv1Uo14IXRRWKrgUN+2OwFUg==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8", + "@storybook/addons": "5.3.1", + "@storybook/api": "5.3.1", + "@storybook/client-api": "5.3.1", + "@storybook/components": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/theming": "5.3.1", "core-js": "^3.0.1", "fast-deep-equal": "^2.0.1", "global": "^4.3.2", "polished": "^3.3.1", "prop-types": "^15.7.2", "react": "^16.8.3", - "react-inspector": "^3.0.2", + "react-inspector": "^4.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channel-postmessage": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.1.tgz", + "integrity": "sha512-oGwjAgpj/1wTYlfRnVLSPfHu7iptWSIHiWmjqlOTwNWFQpbDt+RI1LmZW2HpkyBKnU4+TMfue+ISlc+n90DD3A==", + "requires": { + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "telejson": "^3.2.0" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.3.1.tgz", + "integrity": "sha512-j9dHHttx5K8XFX4LVWFivFBSD/XRrbEytsUzhRVDRDAlvPHQQhnQyFUxH8o4gdbJqnhC+q6K5AF79Et3OyymKw==", + "requires": { + "@storybook/addons": "5.3.1", + "@storybook/channel-postmessage": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "core-js": "^3.0.1", + "eventemitter3": "^4.0.0", + "global": "^4.3.2", + "is-plain-object": "^3.0.0", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "stable": "^0.1.8", + "ts-dedent": "^1.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/components": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.1.tgz", + "integrity": "sha512-Ywr4EYk49boBgse07H6emzLWNa5N0v/57XvSlhiTm/BRcwwNztKSIFWcX+77CIdfcCZMie+77Ce/c8R6XPDIhw==", + "requires": { + "@storybook/client-logger": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/react-syntax-highlighter": "11.0.2", + "@types/react-textarea-autosize": "^4.3.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "markdown-to-jsx": "^6.9.1", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "popper.js": "^1.14.7", + "prop-types": "^15.7.2", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^2.1.0", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^11.0.2", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6", + "ts-dedent": "^1.1.0" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-iMNcixH8330f2dq0RY+VOXCP8JFehgmOhLOtnO85Ty+qu0fHXJNEqWx5VuFv8v0aEq0U/N9d/k1yvA+c6PEmPw==", + "requires": { + "@types/react": "*" + } + }, + "highlight.js": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" + }, + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" + }, + "lowlight": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", + "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", + "requires": { + "fault": "^1.0.2", + "highlight.js": "~9.13.0" + } + }, + "qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "react-focus-lock": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.2.1.tgz", + "integrity": "sha512-47g0xYcCTZccdzKRGufepY8oZ3W1Qg+2hn6u9SHZ0zUB6uz/4K4xJe7yYFNZ1qT6m+2JDm82F6QgKeBTbjW4PQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.6.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.2", + "use-callback-ref": "^1.2.1", + "use-sidecar": "^1.0.1" + } + }, + "react-syntax-highlighter": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww==", + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "~9.13.0", + "lowlight": "~1.11.0", + "prismjs": "^1.8.4", + "refractor": "^2.4.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@storybook/addon-knobs": { @@ -4246,6 +4710,14 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, + "async-retry": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", + "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", + "requires": { + "retry": "0.12.0" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -6758,6 +7230,11 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -7116,6 +7593,15 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" }, + "env-ci": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-2.6.0.tgz", + "integrity": "sha512-tnOi9qgtDxY3mvf69coXLHbSZtFMNGAJ1s/huirAhJZTx9rs/1qgFjl+6Z5ULQCfpDmlsf34L7wm+eJGwMazYg==", + "requires": { + "execa": "^1.0.0", + "java-properties": "^0.2.9" + } + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -7818,6 +8304,11 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fake-tag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-tag/-/fake-tag-1.0.1.tgz", + "integrity": "sha512-qmewZoBpa71mM+y6oxXYW/d1xOYQmeIvnEXAt1oCmdP0sqcogWYLepR87QL1jQVLSVMVYDq2cjY6ec/Wu8/4pg==" + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -7836,6 +8327,11 @@ "micromatch": "^3.1.10" } }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -7846,6 +8342,11 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fast-safe-stringify": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz", + "integrity": "sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw==" + }, "fastq": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", @@ -8082,6 +8583,11 @@ } } }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -10211,6 +10717,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, "is-window": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", @@ -10266,6 +10777,11 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "java-properties": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-0.2.10.tgz", + "integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==" + }, "javascript-stringify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", @@ -10511,6 +11027,11 @@ "invert-kv": "^2.0.0" } }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -11645,6 +12166,11 @@ "lower-case": "^1.1.1" } }, + "node-ask": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-ask/-/node-ask-1.0.1.tgz", + "integrity": "sha1-yqoQdsxY4DZCZ6CQPj6t+sFYOWs=" + }, "node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", @@ -11711,6 +12237,16 @@ } } }, + "node-loggly-bulk": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-2.2.4.tgz", + "integrity": "sha512-DfhtsDfkSBU6Dp1zvK+H1MgHRcA2yb4z07ctyA6uo+bNwKtv1exhohN910zcWNkdSYq1TImCq+O+3bOTuYHvmQ==", + "requires": { + "json-stringify-safe": "5.0.x", + "moment": "^2.18.1", + "request": ">=2.76.0 <3.0.0" + } + }, "node-releases": { "version": "1.1.35", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.35.tgz", @@ -11973,6 +12509,11 @@ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=" + }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -12311,6 +12852,31 @@ "pinkie": "^2.0.0" } }, + "pino": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-4.10.2.tgz", + "integrity": "sha512-hNNDgOju2UvK4iKqXR3ZwEutoOujBRN9jfQgty/X4B3q1QOqpWqvmVn+GT/a20o8Jw5Wd7VkGJAdgFQg55a+mw==", + "requires": { + "chalk": "^2.3.0", + "fast-json-parse": "^1.0.0", + "fast-safe-stringify": "^1.2.1", + "flatstr": "^1.0.4", + "pump": "^1.0.3", + "quick-format-unescaped": "^1.1.1", + "split2": "^2.2.0" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -12942,6 +13508,15 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "progress-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", + "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", + "requires": { + "speedometer": "~1.0.0", + "through2": "~2.0.3" + } + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -13099,6 +13674,14 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" }, + "quick-format-unescaped": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz", + "integrity": "sha1-DKWB3jF0vs7yWsPC6JVjQjgdtpg=", + "requires": { + "fast-safe-stringify": "^1.0.8" + } + }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", @@ -13417,13 +14000,14 @@ } }, "react-inspector": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-3.0.2.tgz", - "integrity": "sha512-PSR8xDoGFN8R3LKmq1NT+hBBwhxjd9Qwz8yKY+5NXY/CHpxXHm01CVabxzI7zFwFav/M3JoC/Z0Ro2kSX6Ef2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-4.0.0.tgz", + "integrity": "sha512-heh4THBeJg0HLYO/3VBAOaFPkdEHoTZq9VFgP4rOzGw/jyqdVd5spfXSl3LNB1fwrwaWef75Q1hCuwlY4GaKjQ==", "requires": { "babel-runtime": "^6.26.0", "is-dom": "^1.0.9", - "prop-types": "^15.6.1" + "prop-types": "^15.6.1", + "storybook-chromatic": "^2.2.2" } }, "react-is": { @@ -14683,6 +15267,11 @@ } } }, + "speedometer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", + "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -14691,6 +15280,14 @@ "extend-shallow": "^3.0.0" } }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "requires": { + "through2": "^2.0.2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -14764,6 +15361,133 @@ "resolved": "https://registry.npmjs.org/store2/-/store2-2.10.0.tgz", "integrity": "sha512-tWEpK0snS2RPUq1i3R6OahfJNjWCQYNxq0+by1amCSuw0mXtymJpzmZIeYpA1UAa+7B0grCpNYIbDcd7AgTbFg==" }, + "storybook-chromatic": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/storybook-chromatic/-/storybook-chromatic-2.2.2.tgz", + "integrity": "sha512-n79eX0MQEHzDCnXqgOjvDOQ1xfBOTyQHy1RNxEMQvZolfAle8YVS0NnRpcW0xh/Ye621Iote3dwFI3uQmlcqPw==", + "requires": { + "@babel/runtime": "^7.3.1", + "@chromaui/localtunnel": "1.10.1", + "async-retry": "^1.1.4", + "commander": "^2.9.0", + "debug": "^3.0.1", + "denodeify": "^1.2.1", + "env-ci": "^2.1.0", + "fake-tag": "^1.0.0", + "jsdom": "^11.5.1", + "jsonfile": "^4.0.0", + "minimatch": "^3.0.4", + "node-ask": "^1.0.1", + "node-fetch": "^2.6.0", + "node-loggly-bulk": "^2.2.4", + "param-case": "^2.1.1", + "pino": "4.10.2", + "progress": "^2.0.3", + "progress-stream": "^2.0.0", + "semver": "^6.2.0", + "strip-color": "^0.1.0", + "tmp": "^0.1.0", + "tree-kill": "^1.1.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "requires": { + "cssom": "0.3.x" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "requires": { + "rimraf": "^2.6.3" + } + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -14899,6 +15623,11 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, + "strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=" + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -15444,6 +16173,11 @@ "punycode": "^2.1.0" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", diff --git a/website/client/package.json b/website/client/package.json index 652204f703..0e6996ef08 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -18,7 +18,7 @@ "@vue/cli-plugin-router": "^4.1.2", "@vue/cli-plugin-unit-mocha": "^4.1.2", "@vue/cli-service": "^4.1.2", - "@storybook/addon-actions": "^5.0.0", + "@storybook/addon-actions": "^5.3.1", "@storybook/addon-knobs": "^5.3.1", "@storybook/addon-links": "^5.0.0", "@storybook/addon-notes": "^5.3.1", From 78306fe33d430d69638fbac8446ec1a24ab5b4f5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:47:30 +0000 Subject: [PATCH 87/98] build(deps): bump sass-loader from 8.0.0 to 8.0.1 in /website/client Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v8.0.0...v8.0.1) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 22 +++++++++++----------- website/client/package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 63404ba0a8..5215cfac29 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -14019,30 +14019,30 @@ } }, "sass-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz", - "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.1.tgz", + "integrity": "sha512-ANR2JHuoxzCI+OPDA0hJBv1Y16A2021hucu0S3DOGgpukKzq9W+4vX9jhIqs4qibT5E7RIRsHMMrN0kdF5nUig==", "requires": { "clone-deep": "^4.0.1", "loader-utils": "^1.2.3", "neo-async": "^2.6.1", - "schema-utils": "^2.1.0", - "semver": "^6.3.0" + "schema-utils": "^2.6.1", + "semver": "^7.1.1" }, "dependencies": { "schema-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", - "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", "requires": { "ajv": "^6.10.2", "ajv-keywords": "^3.4.1" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==" } } }, diff --git a/website/client/package.json b/website/client/package.json index acb9fa6c88..5203caa81e 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -45,7 +45,7 @@ "moment": "^2.24.0", "nconf": "^0.10.0", "sass": "^1.24.4", - "sass-loader": "^8.0.0", + "sass-loader": "^8.0.1", "smartbanner.js": "^1.15.0", "svg-inline-loader": "^0.8.0", "svg-url-loader": "^3.0.3", From 376a0efa67472bc1fa99c8d43127f794f581fc3a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:49:03 +0000 Subject: [PATCH 88/98] build(deps): bump @storybook/vue from 5.2.8 to 5.3.1 in /website/client Bumps [@storybook/vue](https://github.com/storybookjs/storybook/tree/HEAD/app/vue) from 5.2.8 to 5.3.1. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v5.3.1/app/vue) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 2623 +++++++++++++++++++++++++----- website/client/package.json | 2 +- 2 files changed, 2256 insertions(+), 369 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 461ba18d88..e003304559 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -1526,12 +1526,37 @@ } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.7.4.tgz", - "integrity": "sha512-U6XkHZ8RnmeEb8jBUOpeo6oFka5RhLgxAVvK4/fBbwoYlsHQYLb8I37ymTPDVsrWjqb94+hueuWQA/1OAA4rAQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.8.0.tgz", + "integrity": "sha512-Rv1xUzuQK1tC66/4FxaG750bDr/Nv5AiSBmIwAK4bhksGUsl8XHPznASFchvsM7JMjI50gZvXMKmDJiKbyAfLw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", + "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", + "requires": { + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", + "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + }, + "@babel/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-regenerator": { @@ -3022,15 +3047,33 @@ } }, "@storybook/channel-postmessage": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.2.8.tgz", - "integrity": "sha512-RS3iDW1kpfODN+kBq3youn+KtLqHslZ4m7mTlOL80BUHKb4YkrA1lVkzpy1kVMWBU523pyDVQUVXr+M8y3iVug==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.1.tgz", + "integrity": "sha512-oGwjAgpj/1wTYlfRnVLSPfHu7iptWSIHiWmjqlOTwNWFQpbDt+RI1LmZW2HpkyBKnU4+TMfue+ISlc+n90DD3A==", "requires": { - "@storybook/channels": "5.2.8", - "@storybook/client-logger": "5.2.8", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", "core-js": "^3.0.1", "global": "^4.3.2", - "telejson": "^3.0.2" + "telejson": "^3.2.0" + }, + "dependencies": { + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + } } }, "@storybook/channels": { @@ -3042,17 +3085,16 @@ } }, "@storybook/client-api": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.2.8.tgz", - "integrity": "sha512-OCKhZ+2sS3ot0ZV48nD79BWVzvvdMjUFYl0073ps5q+1+TLic1AlNmH0Sb5/9NrYXNV86v3VrM2jUbGsKe1qyw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.3.1.tgz", + "integrity": "sha512-j9dHHttx5K8XFX4LVWFivFBSD/XRrbEytsUzhRVDRDAlvPHQQhnQyFUxH8o4gdbJqnhC+q6K5AF79Et3OyymKw==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/channel-postmessage": "5.2.8", - "@storybook/channels": "5.2.8", - "@storybook/client-logger": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "common-tags": "^1.8.0", + "@storybook/addons": "5.3.1", + "@storybook/channel-postmessage": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", "core-js": "^3.0.1", "eventemitter3": "^4.0.0", "global": "^4.3.2", @@ -3061,9 +3103,110 @@ "memoizerific": "^1.11.3", "qs": "^6.6.0", "stable": "^0.1.8", + "ts-dedent": "^1.1.0", "util-deprecate": "^1.0.2" }, "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, "is-plain-object": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", @@ -3081,6 +3224,16 @@ "version": "6.9.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -3093,16 +3246,17 @@ } }, "@storybook/components": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.2.8.tgz", - "integrity": "sha512-h9l/LAMaj+emUCOyY/+ETy/S3P0npwQU280J88uL4O9XJALJ72EKfyttBCvMLvpM50E+fAPeDzuYn0t5qzGGxg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.1.tgz", + "integrity": "sha512-Ywr4EYk49boBgse07H6emzLWNa5N0v/57XvSlhiTm/BRcwwNztKSIFWcX+77CIdfcCZMie+77Ce/c8R6XPDIhw==", "requires": { - "@storybook/client-logger": "5.2.8", - "@storybook/theming": "5.2.8", - "@types/react-syntax-highlighter": "10.1.0", + "@storybook/client-logger": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/react-syntax-highlighter": "11.0.2", "@types/react-textarea-autosize": "^4.3.3", "core-js": "^3.0.1", "global": "^4.3.2", + "lodash": "^4.17.15", "markdown-to-jsx": "^6.9.1", "memoizerific": "^1.11.3", "polished": "^3.3.1", @@ -3110,115 +3264,285 @@ "prop-types": "^15.7.2", "react": "^16.8.3", "react-dom": "^16.8.3", - "react-focus-lock": "^1.18.3", + "react-focus-lock": "^2.1.0", "react-helmet-async": "^1.0.2", "react-popper-tooltip": "^2.8.3", - "react-syntax-highlighter": "^8.0.1", + "react-syntax-highlighter": "^11.0.2", "react-textarea-autosize": "^7.1.0", - "simplebar-react": "^1.0.0-alpha.6" + "simplebar-react": "^1.0.0-alpha.6", + "ts-dedent": "^1.1.0" + }, + "dependencies": { + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } } }, "@storybook/core": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.2.8.tgz", - "integrity": "sha512-P1Xx4setLBESPgS5KgL7Jskf5Q6fRa3ApwPt+ocjDoSDGCvsV7cUEpAp09U65u+89e5K4nQxvaZouhknFQBc1A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.3.1.tgz", + "integrity": "sha512-8XpRGot3auXIuPenvCXYVEd4JiYMbuflkfaJKo3zr0qH/qA3nnOBIZESZzQYf3gwcRhH42sbom8H5qc3IZYB6w==", "requires": { "@babel/plugin-proposal-class-properties": "^7.7.0", "@babel/plugin-proposal-object-rest-spread": "^7.6.2", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-transform-react-constant-elements": "^7.6.3", - "@babel/preset-env": "^7.7.1", - "@storybook/addons": "5.2.8", - "@storybook/channel-postmessage": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/client-logger": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/node-logger": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", - "@storybook/ui": "5.2.8", - "airbnb-js-shims": "^1 || ^2", + "@babel/plugin-transform-react-constant-elements": "^7.2.0", + "@babel/preset-env": "^7.4.5", + "@storybook/addons": "5.3.1", + "@storybook/channel-postmessage": "5.3.1", + "@storybook/client-api": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/node-logger": "5.3.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@storybook/ui": "5.3.1", + "airbnb-js-shims": "^2.2.1", "ansi-to-html": "^0.6.11", - "autoprefixer": "^9.4.9", + "autoprefixer": "^9.7.2", "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-emotion": "^10.0.14", - "babel-plugin-macros": "^2.4.5", + "babel-plugin-emotion": "^10.0.20", + "babel-plugin-macros": "^2.7.0", "babel-preset-minify": "^0.5.0 || 0.6.0-alpha.5", - "boxen": "^3.0.0", + "boxen": "^4.1.0", "case-sensitive-paths-webpack-plugin": "^2.2.0", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cli-table3": "0.5.1", - "commander": "^2.19.0", - "common-tags": "^1.8.0", + "commander": "^4.0.1", "core-js": "^3.0.1", "corejs-upgrade-webpack-plugin": "^2.2.0", "css-loader": "^3.0.0", "detect-port": "^1.3.0", "dotenv-webpack": "^1.7.0", - "ejs": "^2.6.1", + "ejs": "^2.7.4", "express": "^4.17.0", - "file-loader": "^3.0.1", + "file-loader": "^4.2.0", "file-system-cache": "^1.0.5", "find-cache-dir": "^3.0.0", + "find-up": "^4.1.0", "fs-extra": "^8.0.1", + "glob-base": "^0.3.0", "global": "^4.3.2", "html-webpack-plugin": "^4.0.0-beta.2", - "inquirer": "^6.2.0", - "interpret": "^1.2.0", + "inquirer": "^7.0.0", + "interpret": "^2.0.0", "ip": "^1.1.5", - "json5": "^2.1.0", + "json5": "^2.1.1", "lazy-universal-dotenv": "^3.0.1", + "micromatch": "^4.0.2", "node-fetch": "^2.6.0", - "open": "^6.1.0", - "pnp-webpack-plugin": "1.4.3", + "open": "^7.0.0", + "pnp-webpack-plugin": "1.5.0", "postcss-flexbugs-fixes": "^4.1.0", "postcss-loader": "^3.0.0", "pretty-hrtime": "^1.0.3", "qs": "^6.6.0", - "raw-loader": "^2.0.0", + "raw-loader": "^3.1.0", "react-dev-utils": "^9.0.0", - "regenerator-runtime": "^0.12.1", + "regenerator-runtime": "^0.13.3", "resolve": "^1.11.0", "resolve-from": "^5.0.0", "semver": "^6.0.0", "serve-favicon": "^2.5.0", "shelljs": "^0.8.3", - "style-loader": "^0.23.1", - "terser-webpack-plugin": "^1.2.4", + "style-loader": "^1.0.0", + "terser-webpack-plugin": "^2.1.2", + "ts-dedent": "^1.1.0", "unfetch": "^4.1.0", "url-loader": "^2.0.1", "util-deprecate": "^1.0.2", "webpack": "^4.33.0", "webpack-dev-middleware": "^3.7.0", - "webpack-hot-middleware": "^2.25.0" + "webpack-hot-middleware": "^2.25.0", + "webpack-virtual-modules": "^0.2.0" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", "requires": { - "escape-string-regexp": "^1.0.5" + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" } }, - "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", + "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, "find-cache-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.1.0.tgz", - "integrity": "sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.0", @@ -3244,6 +3568,11 @@ "universalify": "^0.1.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "html-webpack-plugin": { "version": "4.0.0-beta.11", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", @@ -3257,25 +3586,20 @@ "util.promisify": "1.0.0" } }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } + "interpret": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.0.0.tgz", + "integrity": "sha512-e0/LknJ8wpMMhTiWcjivB+ESwIuvHnBSlBbmP/pSb8CQJldoj1p2qv7xGZ/+BtbTziYRFSz8OsvdbiX45LtYQA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==" }, "locate-path": { "version": "5.0.0", @@ -3293,15 +3617,27 @@ "semver": "^6.0.0" } }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "open": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.0.tgz", + "integrity": "sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ==", + "requires": { + "is-wsl": "^2.1.0" + } }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } @@ -3337,11 +3673,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3351,6 +3682,22 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -3371,21 +3718,60 @@ } }, "@storybook/node-logger": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.2.8.tgz", - "integrity": "sha512-3TK5mx6VWbfJO+WUrqwPhTbTQ4qESTnwJY/02xPzOhvuC6tIG1QOxzi+Rq6rFlwxTpUuWh6iyDYnGIqFFQywkA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.3.1.tgz", + "integrity": "sha512-z9nLh4za0aIa6/8qsb5t9mmUAA9agUUwU7ahxMU8TCSCtZV+CM5fYOn99gQMA4IQtryQd5a1l+QRaYd7oQ9d6Q==", "requires": { - "chalk": "^2.4.2", + "chalk": "^3.0.0", "core-js": "^3.0.1", "npmlog": "^4.1.2", "pretty-hrtime": "^1.0.3", - "regenerator-runtime": "^0.12.1" + "regenerator-runtime": "^0.13.3" }, "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -3437,24 +3823,25 @@ } }, "@storybook/ui": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.2.8.tgz", - "integrity": "sha512-7t1ARBfylhEsLmGsZBUCj1Wf1oAgCDDrf7fi+Fhdg5Rr16CMoBbe24Gv/mPYv01/pUDhGodxzltKGX5x0Hto2w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.3.1.tgz", + "integrity": "sha512-FldNbDAFwIUDR2+Y/xpQAgcG5AwhRCLbon5kcOMBENR9ABONoHMpbvEJZ7BaO2krfzf4DhZV3I3xrNVblTpFRQ==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/channels": "5.2.8", - "@storybook/client-logger": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", + "@emotion/core": "^10.0.20", + "@storybook/addons": "5.3.1", + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/components": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", "copy-to-clipboard": "^3.0.8", "core-js": "^3.0.1", "core-js-pure": "^3.0.1", - "emotion-theming": "^10.0.14", + "emotion-theming": "^10.0.19", "fast-deep-equal": "^2.0.1", - "fuse.js": "^3.4.4", + "fuse.js": "^3.4.6", "global": "^4.3.2", "lodash": "^4.17.15", "markdown-to-jsx": "^6.9.3", @@ -3466,16 +3853,116 @@ "react-dom": "^16.8.3", "react-draggable": "^4.0.3", "react-helmet-async": "^1.0.2", - "react-hotkeys": "2.0.0-pre4", + "react-hotkeys": "2.0.0", "react-sizeme": "^2.6.7", "regenerator-runtime": "^0.13.2", "resolve-from": "^5.0.0", "semver": "^6.0.0", "store2": "^2.7.1", - "telejson": "^3.0.2", + "telejson": "^3.2.0", "util-deprecate": "^1.0.2" }, "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, "qs": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", @@ -3494,24 +3981,134 @@ } }, "@storybook/vue": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/vue/-/vue-5.2.8.tgz", - "integrity": "sha512-d/Xzu5sNEvWHKml3Lorpue0s3yd7JdrHySsAia4QBwPum0/GiVbTRUnWtJC9Gi/iWXBkqfB/sejs8NIh/QHHZA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/vue/-/vue-5.3.1.tgz", + "integrity": "sha512-gLMH1ShyJOJLBWfBNxowwVK9wiTDlBL0U+49ETtM35bkUSTGN+KLj6ApATtCHM3LeMO8UqRXewwXpqnDoianOQ==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/core": "5.2.8", + "@storybook/addons": "5.3.1", + "@storybook/core": "5.3.1", "@types/webpack-env": "^1.13.9", - "common-tags": "^1.8.0", "core-js": "^3.0.1", "global": "^4.3.2", - "regenerator-runtime": "^0.12.1", + "regenerator-runtime": "^0.13.3", + "ts-dedent": "^1.1.0", "webpack": "^4.33.0" }, "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, + "qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -3602,9 +4199,9 @@ } }, "@types/react-syntax-highlighter": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-10.1.0.tgz", - "integrity": "sha512-dF49hC4FZp1dIKyzacOrHvqMUe8U2IXyQCQXOcT1e6n64gLBp+xM6qGtPsThIT9XjiIHSg2W5Jc2V5IqekBfnA==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-iMNcixH8330f2dq0RY+VOXCP8JFehgmOhLOtnO85Ty+qu0fHXJNEqWx5VuFv8v0aEq0U/N9d/k1yvA+c6PEmPw==", "requires": { "@types/react": "*" } @@ -3618,9 +4215,9 @@ } }, "@types/webpack-env": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.1.tgz", - "integrity": "sha512-0Ki9jAAhKDSuLDXOIMADg54Hu60SuBTEsWaJGGy5cV+SSUQ63J2a+RrYYGrErzz39fXzTibhKrAQJAb8M7PNcA==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.15.0.tgz", + "integrity": "sha512-TfcyNecCz8Z9/s90gBOBniyzZrTru8u2Vp0VZODq4KEBaQu8bfXvu7o/KUOecMpzjbFPUA7aqgSq628Iue5BQg==" }, "@vue/babel-helper-vue-jsx-merge-props": { "version": "1.0.0", @@ -4604,23 +5201,246 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flat": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", - "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "array.prototype.flatmap": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.2.tgz", - "integrity": "sha512-ZZtPLE74KNE+0XcPv/vQmcivxN+8FhwOLvt2udHauO0aDEpsXDQrmd5HuJGpgPVyaV8HvkDPWnJ2iaem0oCKtA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "arrify": { @@ -5423,34 +6243,101 @@ } }, "boxen": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", - "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "requires": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cli-boxes": "^2.2.0", - "string-width": "^3.0.0", - "term-size": "^1.2.0", - "type-fest": "^0.3.0", - "widest-line": "^2.0.0" + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" } }, "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, @@ -6618,9 +7505,9 @@ } }, "core-js-pure": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.4.7.tgz", - "integrity": "sha512-Am3uRS8WCdTFA3lP7LtKR0PxgqYzjAMGKXaZKSNSC/8sqU0Wfq8R/YzoRs2rqtOVEunfgH+0q3O0BKOg0AvjPw==" + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.3.tgz", + "integrity": "sha512-4LhJ4fw0sC4/8X5krM9hI5oQ3cgYHYojWwwWnQKjC6k6vf/qIVS9d0r3+Bdn+FUADgRpD0xzPFQ9P7cOeuIwlA==" }, "core-util-is": { "version": "1.0.2", @@ -7427,9 +8314,9 @@ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, "dotenv-defaults": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz", - "integrity": "sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.0.3.tgz", + "integrity": "sha512-EHeXF8VZA/XhkGJCtRpJCTHC8GkoisPXjdvJMzxgFrlN6lTEW/eksRNsVKnW0BxR1pGZH8IEBO/D0mDkIrC6fA==", "requires": { "dotenv": "^6.2.0" }, @@ -7505,9 +8392,9 @@ "integrity": "sha1-Zi9B+ajTuMpFh8HdtCe30nr4i8k=" }, "element-resize-detector": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.1.15.tgz", - "integrity": "sha512-16/5avDegXlUxytGgaumhjyQoM6hpp5j3+L79sYq5hlXfTNRy5WMMuTVWkZU3egp/CokCmTmvf18P3KeB57Iog==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.1.16.tgz", + "integrity": "sha512-8fcz6qaMEycYYERmihrPO5p7BS2DejlThf5oSglCQL/kBAX6qSQ5HGr0ctBZQnzW3Tu3mov2juEV0GyZlEBXmg==", "requires": { "batch-processor": "^1.0.0" } @@ -7643,6 +8530,101 @@ "string.prototype.trimright": "^2.1.0" } }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.0.2.tgz", + "integrity": "sha512-ZHb4fuNK3HKHEOvDGyHPKf5cSWh/OvAMskeM/+21NMnTuvqFvz8uHatolu+7Kf6b6oK9C+3Uo1T37pSGPWv0MA==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.0", + "is-set": "^2.0.0", + "is-string": "^1.0.4", + "isarray": "^2.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } + } + }, "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", @@ -9284,14 +10266,84 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", - "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", + "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1", - "functions-have-names": "^1.1.1", - "is-callable": "^1.1.4" + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "functional-red-black-tree": { @@ -9401,6 +10453,38 @@ "path-is-absolute": "^1.0.0" } }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -9458,13 +10542,11 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globalthis": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.0.tgz", - "integrity": "sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "object-keys": "^1.0.12" + "define-properties": "^1.1.3" } }, "globby": { @@ -9824,9 +10906,9 @@ }, "dependencies": { "commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", + "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==" } } }, @@ -10376,6 +11458,87 @@ } } }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } + } + }, "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", @@ -10606,6 +11769,11 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==" }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -10691,11 +11859,21 @@ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", @@ -10777,6 +11955,14 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "iterate-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.1.tgz", + "integrity": "sha512-xc6jTbwPOWEdD26y41BpJBqh/w3kuEcsQxTypXD+xYQA2+OZIfemmkm725cnRbm1cHj4SMLUO1+7oIA97e88gg==", + "requires": { + "es-get-iterator": "^1.0.1" + } + }, "java-properties": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-0.2.10.tgz", @@ -11237,18 +12423,18 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, "lowlight": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.9.2.tgz", - "integrity": "sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", + "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", "requires": { "fault": "^1.0.2", - "highlight.js": "~9.12.0" + "highlight.js": "~9.13.0" }, "dependencies": { "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" } } }, @@ -12424,14 +13610,85 @@ } }, "object.fromentries": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", - "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "object.getownpropertydescriptors": { @@ -12939,9 +14196,9 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-ExrNwuFH3DudHwWY2uRMqyiCOBEDdhQYHIAsqW/CM6hIZlSgXC/ma/p08FoNOUhVyh9hl1NGnMpR94T5i3SHaQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", "requires": { "ts-pnp": "^1.1.2" } @@ -13531,23 +14788,167 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "promise.allsettled": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.1.tgz", - "integrity": "sha512-3ST7RS7TY3TYLOIe+OACZFvcWVe1osbgz2x07nTb446pa3t4GUZWidMDzQ4zf9jC2l6mRa1/3X81icFYbi+D/g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", "requires": { + "array.prototype.map": "^1.0.1", "define-properties": "^1.1.3", - "es-abstract": "^1.13.0", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "promise.prototype.finally": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz", - "integrity": "sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz", + "integrity": "sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.13.0", + "es-abstract": "^1.17.0-next.0", "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "prop-types": { @@ -13721,12 +15122,23 @@ } }, "raw-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-2.0.0.tgz", - "integrity": "sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz", + "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==", "requires": { "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "react": { @@ -13898,9 +15310,9 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } @@ -13942,9 +15354,9 @@ } }, "react-draggable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.1.0.tgz", - "integrity": "sha512-Or/qe70cfymshqoC8Lsp0ukTzijJObehb7Vfl7tb5JRxoV+b6PDkOGoqYaWBzZ59k9dH/bwraLGsnlW78/3vrA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.2.0.tgz", + "integrity": "sha512-5wFq//gEoeTYprnd4ze8GrFc+Rbnx+9RkOMR3vk4EbWxj02U6L6T3yrlKeiw4X5CtjD2ma2+b3WujghcXNRzkw==", "requires": { "classnames": "^2.2.5", "prop-types": "^15.6.0" @@ -13961,14 +15373,16 @@ "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, "react-focus-lock": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-1.19.1.tgz", - "integrity": "sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.2.1.tgz", + "integrity": "sha512-47g0xYcCTZccdzKRGufepY8oZ3W1Qg+2hn6u9SHZ0zUB6uz/4K4xJe7yYFNZ1qT6m+2JDm82F6QgKeBTbjW4PQ==", "requires": { "@babel/runtime": "^7.0.0", - "focus-lock": "^0.6.3", + "focus-lock": "^0.6.6", "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.0" + "react-clientside-effect": "^1.2.2", + "use-callback-ref": "^1.2.1", + "use-sidecar": "^1.0.1" } }, "react-helmet-async": { @@ -13984,9 +15398,9 @@ } }, "react-hotkeys": { - "version": "2.0.0-pre4", - "resolved": "https://registry.npmjs.org/react-hotkeys/-/react-hotkeys-2.0.0-pre4.tgz", - "integrity": "sha512-oa+UncSWyOwMK3GExt+oELXaR7T3ItgcMolsupQFdKvwkEhVAluJd5rYczsRSQpQlVkdNoHG46De2NUeuS+88Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-hotkeys/-/react-hotkeys-2.0.0.tgz", + "integrity": "sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q==", "requires": { "prop-types": "^15.6.1" } @@ -14088,21 +15502,21 @@ } }, "react-syntax-highlighter": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz", - "integrity": "sha512-G2bkZxmF3VOa4atEdXIDSfwwCqjw6ZQX5znfTaHcErA1WqHIS0o6DaSCDKFPVaOMXQEB9Hf1UySYQvuJmV8CXg==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", + "integrity": "sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww==", "requires": { - "babel-runtime": "^6.18.0", - "highlight.js": "~9.12.0", - "lowlight": "~1.9.1", + "@babel/runtime": "^7.3.1", + "highlight.js": "~9.13.0", + "lowlight": "~1.11.0", "prismjs": "^1.8.4", "refractor": "^2.4.1" }, "dependencies": { "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" } } }, @@ -14744,9 +16158,9 @@ } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" }, "serve-favicon": { "version": "2.5.0", @@ -14924,6 +16338,86 @@ "rechoir": "^0.6.2" } }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -15553,35 +17047,256 @@ } }, "string.prototype.matchall": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.0.tgz", - "integrity": "sha512-/cSuf1qsUaPicdvXcVZJ98fM9FmvkXvw7PKSM5pTtlj4R9VLQc7B51fOZBMsGfv9UXhUhdpxSrEsGe2ObsR2cw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "regexp.prototype.flags": "^1.2.0" + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz", + "integrity": "sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "string.prototype.trimleft": { @@ -15649,12 +17364,23 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.2.tgz", + "integrity": "sha512-0Mpq1ZHFDCNq1F+6avNBgv+7q8V+mWRuzehxyJT+aKgzyN/yfKTwjYqaYwBgx+11UpQxL21zNQfzzlz+JcGURw==", "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "stylehacks": { @@ -15789,36 +17515,30 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "symbol.prototype.description": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.1.tgz", - "integrity": "sha512-smeS1BCkN6lcz1XveFK+cfvfBmNJ6dcPi6lgOnLUU8Po8SmV+rtmYGObbNOisW9RHWMyUfsgMA+eTQg+b3v9Vg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.2.tgz", + "integrity": "sha512-2CW5SU4/Ki1cYOOHcL2cXK4rxSg5hCU1TwZ7X4euKhV9VnfqKslh7T6/UyKkubA8cq2tOmsOv7m3ZUmQslBRuw==", "requires": { - "es-abstract": "^1.16.0", - "has-symbols": "^1.0.0" + "es-abstract": "^1.17.0-next.1", + "has-symbols": "^1.0.1" }, "dependencies": { "es-abstract": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", - "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - } + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -15831,10 +17551,46 @@ "is-symbol": "^1.0.2" } }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } } } }, @@ -15902,57 +17658,9 @@ } }, "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.1.1.tgz", + "integrity": "sha512-UqvQSch04R+69g4RDhrslmGvGL3ucDRX/U+snYW0Mab4uCAyKSndUksaoqlJ81QKSpRnIsuOYQCbC2ZWx2896A==" }, "terser": { "version": "4.3.9", @@ -15972,25 +17680,151 @@ } }, "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz", + "integrity": "sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA==", "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "cacache": "^13.0.1", + "find-cache-dir": "^3.2.0", + "jest-worker": "^24.9.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "terser": "^4.4.3", + "webpack-sources": "^1.4.3" }, "dependencies": { + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + } + }, + "find-cache-dir": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "terser": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.2.tgz", + "integrity": "sha512-6FUjJdY2i3WZAtYBtnV06OOcOfzl+4hSKYE9wgac8rkLRBToPDDrBB2AcHwQD/OKDxbnvhVy2YgOPWO2SsKWqg==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } } } }, @@ -17136,6 +18970,24 @@ } } }, + "webpack-virtual-modules": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.1.tgz", + "integrity": "sha512-0PWBlxyt4uGDofooIEanWhhyBOHdd+lr7QpYNDLC7/yc5lqJT8zlc04MTIBnKj+c2BlQNNuwE5er/Tg4wowHzA==", + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, "websocket-driver": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", @@ -17201,11 +19053,46 @@ } }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "window-size": { diff --git a/website/client/package.json b/website/client/package.json index ae90665240..e3651ac188 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -22,7 +22,7 @@ "@storybook/addon-knobs": "^5.3.1", "@storybook/addon-links": "^5.0.0", "@storybook/addon-notes": "^5.3.1", - "@storybook/vue": "^5.2.5", + "@storybook/vue": "^5.3.1", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^5.8.0", "axios": "^0.19.0", From 3a172a9b8fecbf41673f5bb2e6351d7750a5ffcf Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:49:09 +0000 Subject: [PATCH 89/98] build(deps): bump @google-cloud/trace-agent from 4.2.4 to 4.2.5 Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 4.2.4 to 4.2.5. - [Release notes](https://github.com/googleapis/cloud-trace-nodejs/releases) - [Changelog](https://github.com/googleapis/cloud-trace-nodejs/blob/master/CHANGELOG.md) - [Commits](https://github.com/googleapis/cloud-trace-nodejs/compare/v4.2.4...v4.2.5) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 151 ++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 92 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8044a5352d..90fcc1debd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -788,9 +788,9 @@ "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==" }, "@google-cloud/trace-agent": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-4.2.4.tgz", - "integrity": "sha512-XCiEQ2D241RvYmMyeX/Q4My6NGAnSNjZZ/ff82MTGLc12iBxvYD3zMU/Yx6XtcByHIaSFqmCexK1hZzkALHjyQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-4.2.5.tgz", + "integrity": "sha512-gVx+7NC5bwVtIZ/Z7jUbnvytwFS1RhF3iWiMyPRKWDohmy5Ixs/QK0fJNgr4Ugs12nstrILG7VfC09q8FOsK4g==", "requires": { "@google-cloud/common": "^2.0.0", "@opencensus/propagation-stackdriver": "0.0.19", @@ -803,16 +803,16 @@ "is": "^3.2.0", "methods": "^1.1.1", "require-in-the-middle": "^5.0.0", - "semver": "^6.0.0", + "semver": "^7.0.0", "shimmer": "^1.2.0", "source-map-support": "^0.5.16", "uuid": "^3.0.1" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==" } } }, @@ -6068,21 +6068,21 @@ } }, "gaxios": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.2.0.tgz", - "integrity": "sha512-54Y7s3yvtEO9CZ0yBVQHI5fzS7TzkjlnuLdDEkeyL1SNYMv877VofvA56E/C3dvj3rS7GFiyMWl833Qrr+nrkg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.2.2.tgz", + "integrity": "sha512-fzttYsjvZxCaN+bQK7FtAMgoIlPtHkMwlz7vHD+aNRcU7I7gHgnp6hvGJksoo+dO1TDxaog+dSBycbYhHIStaA==", "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", - "https-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", "is-stream": "^2.0.0", "node-fetch": "^2.3.0" } }, "gcp-metadata": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.2.tgz", - "integrity": "sha512-vR7kcJMCYJG/mYWp/a1OszdOqnLB/XW1GorWW1hc1lWVNL26L497zypWb9cG0CYDQ4Bl1Wk0+fSZFFjwJlTQgQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.3.0.tgz", + "integrity": "sha512-uO3P/aByOQmoDu5bOYBODHmD1oDCZw7/R8SYY0MdmMQSZVEmeTSxmiM1vwde+YHYSpkaQnAAMAIZuOqLvgfp/Q==", "requires": { "gaxios": "^2.1.0", "json-bigint": "^0.3.0" @@ -6386,24 +6386,45 @@ } }, "google-auth-library": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.6.1.tgz", - "integrity": "sha512-qPbg/KxZao9DxPcvP9QmKFjHJGdqsJb4PTcbPl8QcHtbzukXhSKNAt+ErfizAn80MuzReBPihsrMQhgfGqirdw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.8.0.tgz", + "integrity": "sha512-aXVUAUAhyof66F1STizYRQwO8nAqp7DDhF0tvfyXyZof8LxXaYtOk7CJeZ+o7G+o1EfqJZi9AAlK3FhZVzYWuQ==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "fast-text-encoding": "^1.0.0", "gaxios": "^2.1.0", - "gcp-metadata": "^3.2.0", + "gcp-metadata": "^3.3.0", "gtoken": "^4.1.0", - "jws": "^3.1.5", + "jws": "^4.0.0", "lru-cache": "^5.0.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + } } }, "google-p12-pem": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.3.tgz", - "integrity": "sha512-Tq2kBCANxYYPxaBpTgCpRfdoPs9+/lNzc/Iaee4kuMVW5ascD+HwhpBsTLwH85C9Ev4qfB8KKHmpPQYyD2vg2w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.4.tgz", + "integrity": "sha512-S4blHBQWZRnEW44OcR7TL9WR+QCqByRvhNDZ/uuQfpxywfupikf/miba8js1jZi6ZOGv5slgSuoshCWh6EMDzg==", "requires": { "node-forge": "^0.9.0" } @@ -6444,14 +6465,35 @@ "dev": true }, "gtoken": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.3.tgz", - "integrity": "sha512-ofW+FiXjswyKdkjMcDbe6E4K7cDDdE82dGDhZIc++kUECqaE7MSErf6arJPAjcnYn1qxE1/Ti06qQuqgVusovQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", + "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", "requires": { "gaxios": "^2.1.0", "google-p12-pem": "^2.0.0", - "jws": "^3.1.5", + "jws": "^4.0.0", "mime": "^2.2.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + } } }, "gulp": { @@ -6951,26 +6993,18 @@ } }, "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz", + "integrity": "sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==", "requires": { - "agent-base": "4", - "debug": "3.1.0" + "agent-base": "5", + "debug": "4" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" } } }, @@ -6989,21 +7023,18 @@ "integrity": "sha512-ad4u4I88X9AcUgxCRW3RLnbh7xHWQ1f5HbrXa7gEy2x4Xgq+rq+auGx5I+nUDE2YYuqteGIlbxrwQXkIaYTfnQ==" }, "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "agent-base": "5", + "debug": "4" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" } } }, @@ -12219,12 +12250,12 @@ } }, "teeny-request": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.2.tgz", - "integrity": "sha512-5cse2cocD8Drq0uYN7NPcQ/6qbrxH6Kp0TlNLP+Y5f0twEkGtIg0ti8HoYF2LCC2TO5IkK/I9/Xs38/rDvs5UA==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.3.tgz", + "integrity": "sha512-t5RRd5xK9ku05x6U5kclFHNpy/cLSNdClcZ2USKQZYcDz4hWux7+2N1eRmuZ+hWNtnkp2RTf9zl8urlSGR5Smg==", "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", + "http-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", "node-fetch": "^2.2.0", "stream-events": "^1.0.5", "uuid": "^3.3.2" diff --git a/package.json b/package.json index 9c8462033f..ab7aef5fc7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@babel/core": "^7.7.7", "@babel/preset-env": "^7.7.7", "@babel/register": "^7.7.7", - "@google-cloud/trace-agent": "^4.2.4", + "@google-cloud/trace-agent": "^4.2.5", "@slack/client": "^3.8.1", "accepts": "^1.3.5", "amazon-payments": "^0.2.8", From 188c63cb43a89c9b9d478a35638d58780b16f3cc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:49:13 +0000 Subject: [PATCH 90/98] build(deps-dev): bump axios from 0.19.0 to 0.19.1 Bumps [axios](https://github.com/axios/axios) from 0.19.0 to 0.19.1. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.19.0...0.19.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 17 ++++------------- package.json | 2 +- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8044a5352d..459ff805c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1775,21 +1775,12 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.1.tgz", + "integrity": "sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==", "dev": true, "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } + "follow-redirects": "1.5.10" } }, "babel-code-frame": { diff --git a/package.json b/package.json index 9c8462033f..12084cef70 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "apidoc": "gulp apidoc" }, "devDependencies": { - "axios": "^0.19.0", + "axios": "^0.19.1", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "chalk": "^2.4.1", From 0bfa0cc068eddada0fcd8931c9a9789fec8ebd7f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:49:24 +0000 Subject: [PATCH 91/98] build(deps): bump @storybook/addon-links in /website/client Bumps [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/addons/links) from 5.2.8 to 5.3.1. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v5.3.1/addons/links) Signed-off-by: dependabot-preview[bot] --- website/client/package-lock.json | 128 +++++++++++++++++++++++++++++-- website/client/package.json | 2 +- 2 files changed, 121 insertions(+), 9 deletions(-) diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 461ba18d88..a0162117c8 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -2743,24 +2743,136 @@ } }, "@storybook/addon-links": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-5.2.8.tgz", - "integrity": "sha512-egSBHjUOdAEd2IIoIB1kRmdaDc44IfpPg+kJ7h822MhwzpWo9E+4sU5WTemcFBqPt+g3jIYrO3JHlXNRZ7PBuw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-5.3.1.tgz", + "integrity": "sha512-1UQGev7SG4R3830zvN/Vw4WkZ+WMxwHvLaGFFf2P9cZ36TRf994T6TwApJRzN3DMAwGMFAxqG8NSaDuR+UbRvA==", "requires": { - "@storybook/addons": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "common-tags": "^1.8.0", + "@storybook/addons": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", "core-js": "^3.0.1", "global": "^4.3.2", "prop-types": "^15.7.2", - "qs": "^6.6.0" + "qs": "^6.6.0", + "ts-dedent": "^1.1.0" }, "dependencies": { + "@storybook/addons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.1.tgz", + "integrity": "sha512-nQ935Xip8RESY07qgkmPGdpOA0oSTmfqaFvtueHXZAQ3bekth5FJveef4dbi1A3QyZyf3gCy73aQqOkAhKn0MA==", + "requires": { + "@storybook/api": "5.3.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "core-js": "^3.0.1", + "global": "^4.3.2", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/api": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.1.tgz", + "integrity": "sha512-PKfEH6ZlH8X7+SyJ6kch+ZkMRXhSsz9BdVUeXie7shSjnwN+4hSvNuSxoxZflcp89KsdzLdybZJOE6EFQ3ppSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/channels": "5.3.1", + "@storybook/client-logger": "5.3.1", + "@storybook/core-events": "5.3.1", + "@storybook/csf": "0.0.1", + "@storybook/router": "5.3.1", + "@storybook/theming": "5.3.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "fast-deep-equal": "^2.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "react": "^16.8.3", + "semver": "^6.0.0", + "shallow-equal": "^1.1.0", + "store2": "^2.7.1", + "telejson": "^3.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.1.tgz", + "integrity": "sha512-kftIZsMHhn/BVflzH/Q1c4mgQYVc7jEstmy9hYWuphn9Mf3LdpArtTDtU3ebrNgjO52CHM+Rh4NpByXhpR6HvA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/client-logger": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.1.tgz", + "integrity": "sha512-9CaUdzItrjMU8B0G4stBrbU0CytcQY2NMom7A1YLRBuov+XFBrKv1td+bO9SfBGFCSP5Kw2sKpY6t0vJSdfEow==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/core-events": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.1.tgz", + "integrity": "sha512-ewR8jSeBvCBJJifEN2rvGN9ji2PKEM+AFna2zS/lNuX7WlAN1HdLIDeNEqhaZBqsgOx9w7p6CEPhnnoC7CmZjA==", + "requires": { + "core-js": "^3.0.1" + } + }, + "@storybook/router": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.1.tgz", + "integrity": "sha512-rjPH9QSIwIw2pJNADnTVTck2Y0kdGqdvowHtU98vug5Vryf6aNCZO+VOiMJC6wH4mYBjPzKU9O5mNjSttVxJSA==", + "requires": { + "@reach/router": "^1.2.1", + "@storybook/csf": "0.0.1", + "@types/reach__router": "^1.2.3", + "core-js": "^3.0.1", + "global": "^4.3.2", + "lodash": "^4.17.15", + "memoizerific": "^1.11.3", + "qs": "^6.6.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.1.tgz", + "integrity": "sha512-eh2QTn1BJ+1U6t3idIXMT/gdlXhqWgyxWxLvjNlLnIGWyOJ9v/G7Ycu7R9RN5BHn237I842iq9gkxdA6r9CCxA==", + "requires": { + "@emotion/core": "^10.0.20", + "@emotion/styled": "^10.0.17", + "@storybook/client-logger": "5.3.1", + "core-js": "^3.0.1", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.19", + "global": "^4.3.2", + "memoizerific": "^1.11.3", + "polished": "^3.3.1", + "prop-types": "^15.7.2", + "resolve-from": "^5.0.0", + "ts-dedent": "^1.1.0" + } + }, "qs": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, diff --git a/website/client/package.json b/website/client/package.json index ae90665240..642e9c4cb5 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -20,7 +20,7 @@ "@vue/cli-service": "^4.1.2", "@storybook/addon-actions": "^5.3.1", "@storybook/addon-knobs": "^5.3.1", - "@storybook/addon-links": "^5.0.0", + "@storybook/addon-links": "^5.3.1", "@storybook/addon-notes": "^5.3.1", "@storybook/vue": "^5.2.5", "@vue/test-utils": "1.0.0-beta.29", From 011a462d39568b183d70795dca59f035bd12ec2f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:50:13 +0000 Subject: [PATCH 92/98] build(deps): bump @babel/preset-env from 7.7.7 to 7.8.2 Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.7.7 to 7.8.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.7...v7.8.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 911 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 512 insertions(+), 401 deletions(-) diff --git a/package-lock.json b/package-lock.json index e411c21030..9e5f2d9c4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,16 @@ "@babel/highlight": "^7.0.0" } }, + "@babel/compat-data": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", + "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", + "requires": { + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, "@babel/core": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.0.tgz", @@ -141,196 +151,208 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", - "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", + "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", - "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.0.tgz", + "integrity": "sha512-KbBloNiBHM3ZyHg1ViDRs4QcnAunwMJ+rLpAEA8l3cWb3Z1xof7ag1iHvX16EwhUfaTG3+YSvTRPv4xHIrseUQ==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-explode-assignable-expression": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-call-delegate": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", - "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.0.tgz", + "integrity": "sha512-Vi8K1LScr8ZgLicfuCNSE7JWUPG/H/9Bw9zn+3vQyy4vA54FEGTCuUTOXCFwmBM93OD6jHfjrQ6ZnivM5U+bHg==", "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-hoist-variables": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.1.tgz", + "integrity": "sha512-Fsrljg8DHSdnKSzC0YFopX7lseRpVfWMYuC1Dnvf7tw972E2KDjZ4XEaqjO9aJL0sLcG4KNRXxowDxHYIcZ+Cw==", + "requires": { + "@babel/compat-data": "^7.8.1", + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "levenary": "^1.1.0", + "semver": "^5.5.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", - "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.0.tgz", + "integrity": "sha512-vJj2hPbxxLUWJEV86iZiac5curAnC3ZVc+rFmFeWZigUOcuCPpbF+KxoEmxrkmuCGylHFF9t4lkpcDUcxnhQ5g==", "requires": { - "@babel/helper-regex": "^7.4.4", + "@babel/helper-regex": "^7.8.0", "regexpu-core": "^4.6.0" } }, "@babel/helper-define-map": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", - "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.0.tgz", + "integrity": "sha512-Go06lUlZ4YImNEmdyAH5iO38yh5mbpOPSwA2PtV1vyczFhTZfX0OtzkiIL2pACo6AOYf89pLh42nhhDrqgzC3A==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-function-name": "^7.8.0", + "@babel/types": "^7.8.0", "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", - "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.0.tgz", + "integrity": "sha512-w4mRQqKAh4M7BSLwvDMm8jYFroEzpqMCtXDhFHP+kNjMIQWpbC6b0Q/RUQsJNSf54rIx6XMdci1Stf60DWw+og==", "requires": { - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-hoist-variables": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", - "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz", + "integrity": "sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", - "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.0.tgz", + "integrity": "sha512-0m1QabGrdXuoxX/g+KOAGndoHwskC70WweqHRQyCsaO67KOEELYh4ECcGw6ZGKjDKa5Y7SW4Qbhw6ly4Fah/jQ==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", + "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-module-transforms": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", - "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", + "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-simple-access": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-simple-access": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0", "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", - "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.0.tgz", + "integrity": "sha512-aiJt1m+K57y0n10fTw+QXcCXzmpkG+o+NoQmAZqlZPstkTE0PZT+Z27QSd/6Gf00nuXJQO4NiJ0/YagSW5kC2A==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", + "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" }, "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.0.tgz", + "integrity": "sha512-haD8fRsPtyFZkbtxBIaGBBHRtbn0YsyecdYrxNgO0Bl6SlGokJPQX9M2tDuVbeQBYHZVLUPMSwGQn4obHevsMQ==", "requires": { "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", - "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.0.tgz", + "integrity": "sha512-+aKyBd4oHAaIZgOLq/uLjkUz7ExZ0ppdNBc8Qr72BmtKNAy3A6EJa/ifjj0//CIzQtUDPs3E6HjKM2cV6bnXsQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-wrap-function": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-wrap-function": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-replace-supers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", - "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.0.tgz", + "integrity": "sha512-R2CyorW4tcO3YzdkClLpt6MS84G+tPkOi0MmiCn1bvYVnmDpdl9R15XOi3NQW2mhOAEeBnuQ4g1Bh7pT2sX8fg==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-member-expression-to-functions": "^7.8.0", + "@babel/helper-optimise-call-expression": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-simple-access": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", - "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", + "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", "requires": { - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-wrap-function": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", - "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.0.tgz", + "integrity": "sha512-2j6idN2jt8Y+8nJ4UPN/6AZa53DAkcETMVmroJQh50qZc59PuQKVjgOIIqmrLoQf6Ia9bs90MHRcID1OW5tfag==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-function-name": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helpers": { @@ -452,443 +474,484 @@ } }, "@babel/parser": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.4.tgz", - "integrity": "sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==" + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", - "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.0.tgz", + "integrity": "sha512-8vIQf8JYced7gCeKDsGETNGKE+zdD/JmP1LBlRn+w3UXc1aSpZv2Y330bB/fnOEbUgPbuFv+IEi+gopg+Fu0kQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-remap-async-to-generator": "^7.8.0", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", - "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.0.tgz", + "integrity": "sha512-YzMq0AqeTR4Mh2pz3GrCWqhcEV38HgUMMR/56/YR5GPc4Y2p1KJ4Le6j92vMnW8TJqVj+qJz/KDNglpMeww9Yg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", - "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.0.tgz", + "integrity": "sha512-pSpuhwn926vtNeUH2FHx1OzIXaUMgklG0MzlFZJVEg37fB904gOxN572NgBae+KDwFyZDpkLMyEkVA011lBJrQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.0.tgz", + "integrity": "sha512-cQMI+RQdcK2IyMm13NKKFCYfOSBUtFxEeRBOdFCi2Pubv/CpkrCubc/ikdeKMT6Lu+uQ+lNSDEJvDCOQZkUy0g==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", - "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.0.tgz", + "integrity": "sha512-SjJ2ZXCylpWC+5DTES0/pbpNmw/FnjU/3dF068xF0DU9aN+oOKah+3MCSFcb4pnZ9IwmxfOy4KnbGJSQR+hAZA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.0.tgz", + "integrity": "sha512-tHP3eez6TrpPJYttBZ/6uItRbIuXUIDpQ9xwvzKwR+RboWGMJ7WzFC5dDJ3vjLuCx0/DG1tM0MVkmgcBybth9w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.0.tgz", + "integrity": "sha512-PNBHxPHE91m+LLOdGwlvyGicWfrMgiVwng5WdB3CMjd61+vn3vPw0GbgECIAUCZnyi7Jqs5htUIZRztGuV8/5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", - "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.0.tgz", + "integrity": "sha512-3oK0Qt5w4arb+es3rWBribDbtc0TYJP7dFZ1dXcYul3cXderqfIOoSx9YUC1oD208nJwJO/++fvrgLmkYSbe8A==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", - "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.0.tgz", + "integrity": "sha512-a8w8k7pK8nYhem07rXdAq03T+DlTX8LFojUptrh9JEx80AgLqGiuoFIyQOGTWif39kFnDOQqbzl1s6KQqrfV+A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", - "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.0.tgz", + "integrity": "sha512-Mx2RzpCHJaBfmFdA2abXDKRHVJdzJ6R0Wqwb6TxCgM7NRR5wcC4cyiAsRL7Ga+lwG8GG1cKvb+4ENjic8y15jA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", - "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.0.tgz", + "integrity": "sha512-LPykaAbH86L5NnDfCRSpNxtEHZk+6GaFzXfWEFU/6R4v69EXQr6GOp7hwH+Uw0QlYVN++s6TukTJ3flFcspahA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz", + "integrity": "sha512-Rv2hnBToN6rbA9hO2a4vtwXZLzNa+TWkoSIMMvUezFz5+D9NPeX7SFrArwtFzzbwndmWiqboTr5rNpzAz0MPpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz", + "integrity": "sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.0.tgz", + "integrity": "sha512-EIgJVy+u1RvR2gJfX4ReLwAupO/twllUue1wPrRxhu18+eC3bGTEcOSXLQdaE9ya9NG1rE0eQs0GSiloUGFEwg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.0.tgz", + "integrity": "sha512-LV1c+TTAO8Vawe3t+WXBHYWbS7endP8MSlqKPKEZOyWPEJX2akl3jfvFG828/OE7RpyoC3JXfLJDFj/jN7A8hg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", - "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.0.tgz", + "integrity": "sha512-iXR/Cw32fMfWlD1sK2zD/nXtuLStkalRv+xee6VrX84CFrn2LKwb/EOs/4UaDNUpUsws8YZYKeQjPagacFquug==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", - "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.0.tgz", + "integrity": "sha512-9KfteDp9d8cF388dxFMOh3Dum41qpOVUPVjQhXGd1kPyQBE05FJgYndiAriML2yhMIbZ2bjgweh2nnvBXDH2MQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", - "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.0.tgz", + "integrity": "sha512-9dvBvJnEdsDWYMrykoMyLNVRPGoub6SFlARtsYgSQ1riTjnyBjhctihSME4XsSku86F59PDeFpC9PCU+9I154w==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4" + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-remap-async-to-generator": "^7.8.0" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", - "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.0.tgz", + "integrity": "sha512-bim6gUfHq2kPN+aQst33ZEMeglpaUXAo6PWTZvOA8BOnWpNKgZcUzBvpZhh2ofL6YhZgzGoRwVVfzwynDEf47g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", - "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.0.tgz", + "integrity": "sha512-FKTK4hzg7W950Yu9iqMl12WBixCmusMc5HBt3/ErvpFLnvr3/6mu/EBTZoCEJ0mw/lQUDfU01vTcZY9oEahlMg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-plugin-utils": "^7.8.0", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", - "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.0.tgz", + "integrity": "sha512-18RLDwKtGXCLLbf5V03GojebPH7dKYCmIBqQGhgfZDoYsyEzR9kMZ6IxlJP72K5ROC9ADa4KPI6ywuh7NfQOgQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-define-map": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-define-map": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-optimise-call-expression": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-replace-supers": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", - "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.0.tgz", + "integrity": "sha512-FaODHuQRdnWFVwxLPlTN85Lk/aitfvQBHTXahf58FnatCynfhkeNUO8ID+AqAxY4IJsZjeH6OnKDzcGfgKJcVw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", - "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.0.tgz", + "integrity": "sha512-D+69HT//cE86aBTLULzSBFLC5A7HcPQzJPiny6P4SLHkDF750MylRKO3iWvdgvb+OSp5dOrOxwXajvaxk1ZfYA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", - "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.0.tgz", + "integrity": "sha512-pq/XLkDB4MPvTe9ktHJInfWksalXogrIGRZJUG7RiDXhEfdNrlducoMPbACZQuCFtelVgVpD0VyreiY0l38G7g==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", - "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.0.tgz", + "integrity": "sha512-REtYWvpP4TDw4oVeP01vQJcAeewjgk8/i7tPFP11vUjvarUGGyxJLeq79WEnIdnKPQJirZaoDRT4kEWEdSWkDw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", - "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.0.tgz", + "integrity": "sha512-vaDgF3gPLzVcoe3UZqnra6FA7O797sZc+UCHPd9eQTI34cPtpCA270LzopIXS3Fhc3UmFrijLmre9mHTmUKVgg==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", - "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.0.tgz", + "integrity": "sha512-9j9g0qViCAo8E5qCBSaQdghymn7A9bRXSfS9jU7oLpYccYFZg9A+1KO8X+HV7fhJYH6mZ+e7MRg4p3sLo+RG6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", - "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.0.tgz", + "integrity": "sha512-YL8Ol54UKeIyY1uUGfry+B9ppXAB3aVBB1gG9gxqhg/OBCPpV2QUNswmjvfmyXEdaWv8qODssBgX7on792h44w==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", - "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.0.tgz", + "integrity": "sha512-7UDPKG+uVltsZt98Hw+rMbLg772r8fQC6YJ2fNDckcpAXgIWqQbMCmCpfYo0hBNhdhqocM73auk4P/zziQshQw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", - "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.0.tgz", + "integrity": "sha512-lJSdaWR56wmrosCiyqKFRVnLrFYoVAk2mtZAyegt7akeJky/gguv0Rukx9GV3XwHGuM1ZPE06cZMjNlcLp8LrQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", - "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.0.tgz", + "integrity": "sha512-mFr1O3TaDL4XozM3AzNPz9AsxzzjTxwn4aOShYP5TlO+4rufvjagV2KKDTPMZTQm1ZA/C/PxJDsDekEnnUGz5A==", "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", - "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.0.tgz", + "integrity": "sha512-w2g8tmL7NgBYt6alc8YawMcmPiYqnVvvI0kLB++VOUOssqdJMAkfQOMGV+2M8H5uhJYDaAghAVMUYps3s+jMrw==", "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-simple-access": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", - "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.0.tgz", + "integrity": "sha512-tKF9KLiIsiKyWTVU0yo+NcNAylGn7euggYwXw63/tMxGtDTPsB9Y7Ecqv4EoXEwtoJOJ0Lewf17oaWQtindxIA==", "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-hoist-variables": "^7.8.0", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", - "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.0.tgz", + "integrity": "sha512-lAwNfXwmfTy7fl2XOyoVpMXnLkJANgH0vdSYNFcS4RuJPBtHfunGA+Y0L7wsHmfPzyVYt8sUglLjaWtdZMNJNg==", "requires": { - "@babel/helper-module-transforms": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", - "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.0.tgz", + "integrity": "sha512-kq1rxQ1HviCP13SMGZ4WjBBpdogTGK7yn/g/+p+g1AQledgHOWKVeMY1DwKYGlGJ/grDGTOqpJLF1v3Sb7ghKA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4" + "@babel/helper-create-regexp-features-plugin": "^7.8.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", - "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.0.tgz", + "integrity": "sha512-hH1Afz9Xy/wkcxhoI0vYw48kTBJqYUhMmhp3SLI1p817iByM6ItH4LS8tZatDAIKmAQAXj8d3Ups1BgVJECDrA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-object-super": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", - "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.0.tgz", + "integrity": "sha512-2DYqQ811nRlFVlni6iqfxBVVGqkBgfvEv/lcvmdNu2CaG+EA7zSP1hqYUsqamR+uCdDbsrV7uY6/0rkXbJo5YQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-replace-supers": "^7.8.0" } }, "@babel/plugin-transform-parameters": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", - "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.0.tgz", + "integrity": "sha512-9R2yykk7H92rntETO0fq52vJ4OFaTcDA49K9s8bQPyoD4o3/SkWEklukArCsQC6fowEuraPkH/umopr9uO539g==", "requires": { - "@babel/helper-call-delegate": "^7.7.4", - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-call-delegate": "^7.8.0", + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-property-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", - "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.0.tgz", + "integrity": "sha512-vjZaQlojnZIahu5ofEW+hPJfDI5A6r2Sbi5C0RuCaAOFj7viDIR5kOR7ul3Fz5US8V1sVk5Zd2yuPaz7iBeysg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", - "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.0.tgz", + "integrity": "sha512-n88GT8PZuOHWxqxCJORW3g1QaYzQhHu5sEslxYeQkHVoewfnfuWN37t7YGaRLaNUdaZUlRPXhDcLGT7zBa/u0g==", "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", - "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.0.tgz", + "integrity": "sha512-DnshRyDTXZhmAgO2c1QKZI4CfZjoP2t3fSwRsnbCP9P/FSBpf9I7ovnAELswklw5OeY+/D/JIiaGLoUt2II3LA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", - "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.0.tgz", + "integrity": "sha512-sExhzq63Gl2PMbl7ETpN7Z1A38rLD6GeCT6EEEIIKjTVt9u6dRqJ6nHhaquL7QgR3egj/8fcvq23UvzfPqGAYA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", - "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.0.tgz", + "integrity": "sha512-6Zjl0pv6x10YmFVRI0VhwJ/rE++geVHNJ9xwd+UIt3ON2VMRO7qI2lPsyLnzidR5HYNd/JXj47kdU9Rrn4YcnQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", - "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.0.tgz", + "integrity": "sha512-uksok0Bqox8YeIRFhr6RRtlBXeGpN1ogiEVjEd7A7rVLPZBXKGbL7kODpE7MQ+avjDLv5EEKtDCeYuWZK7FF7g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-regex": "^7.8.0" } }, "@babel/plugin-transform-template-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", - "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.0.tgz", + "integrity": "sha512-EF7Q7LEgeMpogHcvmHMNXBWdLWG1tpA1ErXH3i8zTu3+UEKo6aBn+FldPAJ16UbbbOwSCUCiDP6oZxvVRPhwnQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", - "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.0.tgz", + "integrity": "sha512-rEUBEFzsA9mCS2r7EtXFlM/6GqtzgLdC4WVYM9fIgJX+HcSJ8oMmj8LinfKhbo0ipRauvUM2teE2iNDNqDwO1g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", - "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.0.tgz", + "integrity": "sha512-qDg8wsnE47B/Sj8ZtOndPHrGBxJMssZJ71SzXrItum9n++iVFN7kYuJO+OHhjom7+/or0zzYqvJNzCkUjyNKqg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/preset-env": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", - "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.2.tgz", + "integrity": "sha512-AF2YUl2bGsLWTtFL68upTTB7nDo05aEcKjHmXJE+aXRvsx5K+9yRsHQP3MjnTrLOWe/eFyUr93dfILROsKC4eg==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.4", - "@babel/plugin-proposal-dynamic-import": "^7.7.4", - "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", - "@babel/plugin-syntax-async-generators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-json-strings": "^7.7.4", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", - "@babel/plugin-syntax-top-level-await": "^7.7.4", - "@babel/plugin-transform-arrow-functions": "^7.7.4", - "@babel/plugin-transform-async-to-generator": "^7.7.4", - "@babel/plugin-transform-block-scoped-functions": "^7.7.4", - "@babel/plugin-transform-block-scoping": "^7.7.4", - "@babel/plugin-transform-classes": "^7.7.4", - "@babel/plugin-transform-computed-properties": "^7.7.4", - "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.7", - "@babel/plugin-transform-duplicate-keys": "^7.7.4", - "@babel/plugin-transform-exponentiation-operator": "^7.7.4", - "@babel/plugin-transform-for-of": "^7.7.4", - "@babel/plugin-transform-function-name": "^7.7.4", - "@babel/plugin-transform-literals": "^7.7.4", - "@babel/plugin-transform-member-expression-literals": "^7.7.4", - "@babel/plugin-transform-modules-amd": "^7.7.5", - "@babel/plugin-transform-modules-commonjs": "^7.7.5", - "@babel/plugin-transform-modules-systemjs": "^7.7.4", - "@babel/plugin-transform-modules-umd": "^7.7.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", - "@babel/plugin-transform-new-target": "^7.7.4", - "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.7", - "@babel/plugin-transform-property-literals": "^7.7.4", - "@babel/plugin-transform-regenerator": "^7.7.5", - "@babel/plugin-transform-reserved-words": "^7.7.4", - "@babel/plugin-transform-shorthand-properties": "^7.7.4", - "@babel/plugin-transform-spread": "^7.7.4", - "@babel/plugin-transform-sticky-regex": "^7.7.4", - "@babel/plugin-transform-template-literals": "^7.7.4", - "@babel/plugin-transform-typeof-symbol": "^7.7.4", - "@babel/plugin-transform-unicode-regex": "^7.7.4", - "@babel/types": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.6.0", + "@babel/compat-data": "^7.8.0", + "@babel/helper-compilation-targets": "^7.8.0", + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-proposal-async-generator-functions": "^7.8.0", + "@babel/plugin-proposal-dynamic-import": "^7.8.0", + "@babel/plugin-proposal-json-strings": "^7.8.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-proposal-object-rest-spread": "^7.8.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.0", + "@babel/plugin-proposal-optional-chaining": "^7.8.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.0", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.0", + "@babel/plugin-transform-arrow-functions": "^7.8.0", + "@babel/plugin-transform-async-to-generator": "^7.8.0", + "@babel/plugin-transform-block-scoped-functions": "^7.8.0", + "@babel/plugin-transform-block-scoping": "^7.8.0", + "@babel/plugin-transform-classes": "^7.8.0", + "@babel/plugin-transform-computed-properties": "^7.8.0", + "@babel/plugin-transform-destructuring": "^7.8.0", + "@babel/plugin-transform-dotall-regex": "^7.8.0", + "@babel/plugin-transform-duplicate-keys": "^7.8.0", + "@babel/plugin-transform-exponentiation-operator": "^7.8.0", + "@babel/plugin-transform-for-of": "^7.8.0", + "@babel/plugin-transform-function-name": "^7.8.0", + "@babel/plugin-transform-literals": "^7.8.0", + "@babel/plugin-transform-member-expression-literals": "^7.8.0", + "@babel/plugin-transform-modules-amd": "^7.8.0", + "@babel/plugin-transform-modules-commonjs": "^7.8.0", + "@babel/plugin-transform-modules-systemjs": "^7.8.0", + "@babel/plugin-transform-modules-umd": "^7.8.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.0", + "@babel/plugin-transform-new-target": "^7.8.0", + "@babel/plugin-transform-object-super": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.8.0", + "@babel/plugin-transform-property-literals": "^7.8.0", + "@babel/plugin-transform-regenerator": "^7.8.0", + "@babel/plugin-transform-reserved-words": "^7.8.0", + "@babel/plugin-transform-shorthand-properties": "^7.8.0", + "@babel/plugin-transform-spread": "^7.8.0", + "@babel/plugin-transform-sticky-regex": "^7.8.0", + "@babel/plugin-transform-template-literals": "^7.8.0", + "@babel/plugin-transform-typeof-symbol": "^7.8.0", + "@babel/plugin-transform-unicode-regex": "^7.8.0", + "@babel/types": "^7.8.0", + "browserslist": "^4.8.2", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "levenary": "^1.1.0", "semver": "^5.5.0" } }, @@ -905,35 +968,75 @@ } }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "requires": { + "@babel/highlight": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + } } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "requires": { + "@babel/highlight": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + } } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", @@ -2702,13 +2805,13 @@ "dev": true }, "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "requires": { - "caniuse-lite": "^1.0.30001015", + "caniuse-lite": "^1.0.30001017", "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "node-releases": "^1.1.44" } }, "bson": { @@ -2855,9 +2958,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001016", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", - "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==" + "version": "1.0.30001020", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", + "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==" }, "capture-stack-trace": { "version": "1.0.1", @@ -3540,11 +3643,11 @@ "dev": true }, "core-js-compat": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.0.tgz", - "integrity": "sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.3.tgz", + "integrity": "sha512-Y3YNGU3bU1yrnzVodop23ghArbKv4IqkZg9MMOWv/h7KT6NRk1/SzHhWDDlubg2+tlcUzAqgj1/GyeJ9fUKMeg==", "requires": { - "browserslist": "^4.8.2", + "browserslist": "^4.8.3", "semver": "7.0.0" }, "dependencies": { @@ -4309,9 +4412,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==" + "version": "1.3.332", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz", + "integrity": "sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==" }, "emitter-listener": { "version": "1.1.2", @@ -8175,11 +8278,6 @@ "logalot": "^2.0.0" } }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8437,6 +8535,19 @@ "flush-write-stream": "^1.0.2" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levenary": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", + "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", + "requires": { + "leven": "^3.1.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -9681,9 +9792,9 @@ } }, "node-releases": { - "version": "1.1.43", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", - "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", "requires": { "semver": "^6.3.0" }, diff --git a/package.json b/package.json index d45c13789a..0fd4467dd7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.8.0", - "@babel/preset-env": "^7.7.7", + "@babel/preset-env": "^7.8.2", "@babel/register": "^7.7.7", "@google-cloud/trace-agent": "^4.2.4", "@slack/client": "^3.8.1", From 35e5a6ed358eb48762c2663c6b7e5fdfd90108e7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 11:52:41 +0000 Subject: [PATCH 93/98] build(deps): bump @babel/register from 7.7.7 to 7.8.0 Bumps [@babel/register](https://github.com/babel/babel) from 7.7.7 to 7.8.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.7...v7.8.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index a39c0fc19b..0a27e1a280 100644 --- a/package-lock.json +++ b/package-lock.json @@ -956,9 +956,9 @@ } }, "@babel/register": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.7.tgz", - "integrity": "sha512-S2mv9a5dc2pcpg/ConlKZx/6wXaEwHeqfo7x/QbXsdCAZm+WJC1ekVvL1TVxNsedTs5y/gG63MhJTEsmwmjtiA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.0.tgz", + "integrity": "sha512-i7CPQBzb/uALrZZozm6jXpSoieZvcTSOqonKA9UX4OLEvAYc4Y2VqgW67ZkSz6xfaNP6m1g1oBy0/zMA7YcdJA==", "requires": { "find-cache-dir": "^2.0.0", "lodash": "^4.17.13", @@ -10270,9 +10270,9 @@ "optional": true }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } diff --git a/package.json b/package.json index 23cf8d3158..1d1d803ce2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dependencies": { "@babel/core": "^7.8.0", "@babel/preset-env": "^7.8.2", - "@babel/register": "^7.7.7", + "@babel/register": "^7.8.0", "@google-cloud/trace-agent": "^4.2.5", "@slack/client": "^3.8.1", "accepts": "^1.3.5", From e15fdbbe054c0143c5b667e8c3cbff6f7af5d7f3 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Tue, 14 Jan 2020 14:59:28 -0600 Subject: [PATCH 94/98] fix(nye): no more hats --- website/server/models/user/hooks.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index d8b71984f7..4c43b91d69 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -131,8 +131,6 @@ function _setUpNewUser (user) { user.items.quests.dustbunnies = 1; user.purchased.background.violet = true; user.preferences.background = 'violet'; - user.items.gear.owned.head_special_nye = true; - user.items.gear.equipped.head = 'head_special_nye'; user.markModified('items'); From 6dc1011409160e9793cf75dffd90e4cefaa0cd5d Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Tue, 14 Jan 2020 14:59:37 -0600 Subject: [PATCH 95/98] 4.129.3 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c328237de..209a874843 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.129.2", + "version": "4.129.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 9d649dd13a..d1e8ba5ccc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.129.2", + "version": "4.129.3", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.7.7", From de4e4f3c4c94bf1cb5d73c07f4f42c1423a40fc4 Mon Sep 17 00:00:00 2001 From: Melior Date: Tue, 14 Jan 2020 22:09:48 +0100 Subject: [PATCH 96/98] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (229 of 229 strings) Translation: Habitica/Subscriber Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (57 of 57 strings) Translation: Habitica/Spells Translate-URL: https://translate.habitica.com/projects/habitica/spells/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (28 of 28 strings) Translation: Habitica/Rebirth Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/zh_Hant/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (8 of 8 strings) Translation: Habitica/Overview Translate-URL: https://translate.habitica.com/projects/habitica/overview/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (174 of 174 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (174 of 174 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2027 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2027 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (2027 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hant/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (328 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/ Translated using Weblate (Japanese) Currently translated at 100.0% (328 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (328 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (56 of 56 strings) Translation: Habitica/Faq Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (63 of 63 strings) Translation: Habitica/Defaulttasks Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/en_GB/ Translated using Weblate (Danish) Currently translated at 41.2% (26 of 63 strings) Translation: Habitica/Defaulttasks Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/da/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (677 of 677 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hant/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (677 of 677 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (677 of 677 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (126 of 126 strings) Translation: Habitica/Communityguidelines Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (355 of 355 strings) Translation: Habitica/Content Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/ Translated using Weblate (Japanese) Currently translated at 100.0% (355 of 355 strings) Translation: Habitica/Content Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (70 of 70 strings) Translation: Habitica/Contrib Translate-URL: https://translate.habitica.com/projects/habitica/contrib/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (230 of 230 strings) Translation: Habitica/Character Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hant/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (494 of 494 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (494 of 494 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/ Translated using Weblate (Japanese) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/ Translated using Weblate (Danish) Currently translated at 98.4% (64 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/da/ Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (211 of 211 strings) Translation: Habitica/Settings Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hant/ Translated using Weblate (Danish) Currently translated at 96.2% (203 of 211 strings) Translation: Habitica/Settings Translate-URL: https://translate.habitica.com/projects/habitica/settings/da/ Translated using Weblate (Chinese (Traditional)) Currently translated at 80.0% (52 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/ Translated using Weblate (Korean) Currently translated at 8.8% (29 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/ko/ Translated using Weblate (Vietnamese) Currently translated at 94.9% (131 of 138 strings) Translation: Habitica/Quests Translate-URL: https://translate.habitica.com/projects/habitica/quests/vi/ Translated using Weblate (Latin) Currently translated at 84.6% (55 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/ Translated using Weblate (Korean) Currently translated at 100.0% (126 of 126 strings) Translation: Habitica/Communityguidelines Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ko/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (229 of 229 strings) Translation: Habitica/Subscriber Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (28 of 28 strings) Translation: Habitica/Rebirth Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (138 of 138 strings) Translation: Habitica/Quests Translate-URL: https://translate.habitica.com/projects/habitica/quests/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (147 of 147 strings) Translation: Habitica/Pets Translate-URL: https://translate.habitica.com/projects/habitica/pets/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (171 of 171 strings) Translation: Habitica/Npc Translate-URL: https://translate.habitica.com/projects/habitica/npc/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (66 of 66 strings) Translation: Habitica/Messages Translate-URL: https://translate.habitica.com/projects/habitica/messages/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (174 of 174 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (483 of 483 strings) Translation: Habitica/Groups Translate-URL: https://translate.habitica.com/projects/habitica/groups/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 87.0% (1765 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/ Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2027 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (2027 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (328 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (63 of 63 strings) Translation: Habitica/Defaulttasks Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (677 of 677 strings) Translation: Habitica/Questscontent Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (126 of 126 strings) Translation: Habitica/Communityguidelines Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (355 of 355 strings) Translation: Habitica/Content Translate-URL: https://translate.habitica.com/projects/habitica/content/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (230 of 230 strings) Translation: Habitica/Character Translate-URL: https://translate.habitica.com/projects/habitica/character/en_GB/ Translated using Weblate (Turkish) Currently translated at 89.4% (442 of 494 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/tr/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (494 of 494 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en_GB/ Translated using Weblate (Chinese (Traditional)) Currently translated at 61.5% (40 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/ Translated using Weblate (Turkish) Currently translated at 23.0% (15 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/tr/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (65 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en_GB/ Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (211 of 211 strings) Translation: Habitica/Settings Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/ Translated using Weblate (Vietnamese) Currently translated at 7.4% (11 of 147 strings) Translation: Habitica/Pets Translate-URL: https://translate.habitica.com/projects/habitica/pets/vi/ Translated using Weblate (Korean) Currently translated at 7.9% (26 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/ko/ Translated using Weblate (Korean) Currently translated at 47.6% (31 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ko/ Translated using Weblate (Korean) Currently translated at 87.3% (310 of 355 strings) Translation: Habitica/Content Translate-URL: https://translate.habitica.com/projects/habitica/content/ko/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (211 of 211 strings) Translation: Habitica/Tasks Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/ Translated using Weblate (Spanish) Currently translated at 100.0% (174 of 174 strings) Translation: Habitica/Limited Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (483 of 483 strings) Translation: Habitica/Groups Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/ Translated using Weblate (Portuguese) Currently translated at 96.2% (465 of 483 strings) Translation: Habitica/Groups Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt/ Translated using Weblate (Spanish) Currently translated at 91.7% (1859 of 2027 strings) Translation: Habitica/Gear Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (298 of 298 strings) Translation: Habitica/Generic Translate-URL: https://translate.habitica.com/projects/habitica/generic/pt_BR/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (328 of 328 strings) Translation: Habitica/Front Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (56 of 56 strings) Translation: Habitica/Faq Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (211 of 211 strings) Translation: Habitica/Settings Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/ Translated using Weblate (Latin) Currently translated at 75.3% (49 of 65 strings) Translation: Habitica/Achievements Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/ Translated using Weblate (Swedish) Currently translated at 100.0% (494 of 494 strings) Translation: Habitica/Backgrounds Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/sv/ --- website/common/locales/da/achievements.json | 73 +- website/common/locales/da/defaulttasks.json | 12 +- website/common/locales/da/settings.json | 64 +- .../common/locales/en_GB/achievements.json | 47 +- website/common/locales/en_GB/backgrounds.json | 72 +- website/common/locales/en_GB/character.json | 8 +- .../locales/en_GB/communityguidelines.json | 22 +- website/common/locales/en_GB/content.json | 18 +- website/common/locales/en_GB/contrib.json | 4 +- .../common/locales/en_GB/defaulttasks.json | 41 +- website/common/locales/en_GB/faq.json | 4 +- website/common/locales/en_GB/front.json | 15 +- website/common/locales/en_GB/gear.json | 323 +++- website/common/locales/en_GB/generic.json | 13 +- website/common/locales/en_GB/groups.json | 26 +- website/common/locales/en_GB/limited.json | 23 +- website/common/locales/en_GB/messages.json | 2 +- website/common/locales/en_GB/npc.json | 12 +- website/common/locales/en_GB/overview.json | 20 +- website/common/locales/en_GB/pets.json | 3 +- website/common/locales/en_GB/quests.json | 13 +- .../common/locales/en_GB/questscontent.json | 181 +- website/common/locales/en_GB/rebirth.json | 7 +- website/common/locales/en_GB/settings.json | 18 +- website/common/locales/en_GB/spells.json | 2 +- website/common/locales/en_GB/subscriber.json | 16 +- website/common/locales/es/gear.json | 39 +- website/common/locales/es/limited.json | 7 +- website/common/locales/ja/achievements.json | 25 +- website/common/locales/ja/content.json | 3 +- website/common/locales/ja/front.json | 3 +- website/common/locales/ko/achievements.json | 10 +- .../locales/ko/communityguidelines.json | 8 +- website/common/locales/ko/content.json | 8 +- website/common/locales/ko/front.json | 32 +- website/common/locales/la/achievements.json | 14 +- website/common/locales/pt/groups.json | 4 +- website/common/locales/pt_BR/faq.json | 6 +- website/common/locales/pt_BR/front.json | 2 +- website/common/locales/pt_BR/generic.json | 2 +- website/common/locales/pt_BR/groups.json | 4 +- website/common/locales/pt_BR/settings.json | 10 +- website/common/locales/pt_BR/tasks.json | 2 +- website/common/locales/sv/backgrounds.json | 9 +- website/common/locales/tr/achievements.json | 8 +- website/common/locales/tr/backgrounds.json | 4 +- website/common/locales/vi/pets.json | 7 +- website/common/locales/vi/quests.json | 10 +- website/common/locales/zh/gear.json | 294 ++-- website/common/locales/zh/limited.json | 124 +- website/common/locales/zh/questscontent.json | 36 +- .../common/locales/zh_TW/achievements.json | 57 +- website/common/locales/zh_TW/backgrounds.json | 60 +- website/common/locales/zh_TW/character.json | 2 +- website/common/locales/zh_TW/content.json | 4 +- website/common/locales/zh_TW/front.json | 3 +- website/common/locales/zh_TW/gear.json | 1512 ++++++++++------- website/common/locales/zh_TW/generic.json | 6 +- website/common/locales/zh_TW/limited.json | 124 +- website/common/locales/zh_TW/npc.json | 5 +- .../common/locales/zh_TW/questscontent.json | 662 ++++---- website/common/locales/zh_TW/rebirth.json | 2 +- website/common/locales/zh_TW/settings.json | 6 +- website/common/locales/zh_TW/subscriber.json | 5 +- 64 files changed, 2632 insertions(+), 1526 deletions(-) diff --git a/website/common/locales/da/achievements.json b/website/common/locales/da/achievements.json index e7a6e5f14c..84469a4c93 100644 --- a/website/common/locales/da/achievements.json +++ b/website/common/locales/da/achievements.json @@ -2,29 +2,66 @@ "achievement": "Præstation", "share": "Del", "onwards": "Fremad!", - "levelup": "Ved at opnå dine mål fra den virkelige verden er du steget i level, og er nu fuldt helet igen!", - "reachedLevel": "Du har nået level <%= level %>", - "achievementLostMasterclasser": "Quest færdiggører: Mesterklasse-rækken", - "achievementLostMasterclasserText": "Færdiggjorde alle 16 quests i Mesterklasse quest-rækken og løste alle mysterier fra \"the Lost Masterclasser\"!", - "achievementLostMasterclasserModalText": "Du har klaret alle seksten quests i Mesterklasser-serien og løst mysteriet om den forsvundne Mesterklasser!", + "levelup": "Ved at opnå dine mål fra den virkelige verden er du steget i niveau, og er nu fuldt helet igen!", + "reachedLevel": "Du har nået niveau <%= level %>", + "achievementLostMasterclasser": "Quest-knuser: Mesterklasse-serien", + "achievementLostMasterclasserText": "Færdiggjorde alle 16 quests i Mesterklasse-questrækken, og løste mysteriet om den Forsvundne Mesterklasser!", + "achievementLostMasterclasserModalText": "Du har klaret alle seksten quests i Mesterklasse-serien og løst mysteriet om den Forsvundne Mesterklasser!", "achievementMindOverMatterText": "Har fuldført sten-, slim- og garn-kæledyrsquests.", "achievementMindOverMatterModalText": "Du har klaret sten-, slim-, og garn-kæledyrsquestene!", "achievementJustAddWater": "Tilføj kun vand", "achievementJustAddWaterText": "Har klaret blæksprutte-, søheste-, tiarmet blæksprutte-, hval-, skildpadde-, nøgensnegle-, søslange- og delfin-kæledyrsquestene.", "achievementJustAddWaterModalText": "Du har klaret blæksprutte-, søheste-, tiarmet blæksprutte-, hval-, skildpadde-, nøgensnegle-, søslange- og delfin-kæledyrsquestene!", "achievementBackToBasics": "Almindeligt udbredt", - "achievementBackToBasicsText": "Har samlet alle Almindelige kæledyr.", - "achievementBackToBasicsModalText": "Du har samlet alle Almindelige kæledyr!", + "achievementBackToBasicsText": "Har samlet alle almindelige kæledyr.", + "achievementBackToBasicsModalText": "Du har samlet alle almindelige kæledyr!", "achievementAllYourBase": "Alle almindelige", - "achievementAllYourBaseText": "Har tæmmet alle Almindelige ridedyr.", - "achievementAllYourBaseModalText": "Du har tæmmet alle Almindelige ridedyr!", - "achievementMonsterMagusModalText": "Du har samlet all zombie dyr!", - "achievementMonsterMagusText": "Har samlet all zombie dyr.", - "achievementPartyOn": "Dit hold vokset til 4 medlemmer!", - "achievementAridAuthorityModalText": "Du har tæmmet all ørken dyr!", - "achievementAridAuthorityText": "Har tæmmet all ørken dyr.", - "achievementDustDevilModalText": "Du har samlet alle ørken dyr!", - "achievementDustDevilText": "Har samlet alle ørken dyr.", - "achievementDustDevil": "Støv djævel", - "achievementMindOverMatter": "Hvor der er vilje..." + "achievementAllYourBaseText": "Har tæmmet alle almindelige ridedyr.", + "achievementAllYourBaseModalText": "Du har tæmmet alle almindelige ridedyr!", + "achievementMonsterMagusModalText": "Du har samlet all zombiekæledyr!", + "achievementMonsterMagusText": "Har samlet all zombiekæledyr.", + "achievementPartyOn": "Dit hold voksede til 4 medlemmer!", + "achievementAridAuthorityModalText": "Du har tæmmet all ørkenridedyr!", + "achievementAridAuthorityText": "Har tæmmet all ørkenridedyr.", + "achievementDustDevilModalText": "Du har samlet alle ørkenkæledyr!", + "achievementDustDevilText": "Har samlet alle ørkenkæledyr.", + "achievementDustDevil": "Støvdjævel", + "achievementMindOverMatter": "Stof til eftertanke", + "achievementPearlyProModalText": "Du har tæmmet alle de hvide ridedyr!", + "achievementPearlyProText": "Har tæmmet alle hvide ridedyr.", + "achievementPearlyPro": "Perleskinnende prof", + "achievementPrimedForPaintingModalText": "Du har samlet alle de hvide kæledyr!", + "achievementPrimedForPaintingText": "Har samlet all hvide kæledyr.", + "achievementPrimedForPainting": "Grundmalet gruppe", + "achievementPurchasedEquipmentModalText": "Udstyr er en måde at tilpasse din avatar og forbedre dine egenskaber", + "achievementPurchasedEquipmentText": "Købte deres første stykke udstyr.", + "achievementPurchasedEquipment": "Køb udstyr", + "achievementFedPetModalText": "Der er mange forskellige slags mad, men kæledyr kan være kræsne", + "achievementFedPetText": "Fodrede deres første kæledyr.", + "achievementFedPet": "Giv et kæledyr mad", + "achievementHatchedPetModalText": "Kig i dit inventar, og prøv at kombinere en udrugningseliksir og et æg", + "achievementHatchedPetText": "Udklækkede deres første kæledyr.", + "achievementHatchedPet": "Udklæk et kæledyr", + "achievementCompletedTaskModalText": "Marker enhver af dine opgaver som færdig for at få belønninger", + "achievementCompletedTaskText": "Udførte deres første opgave.", + "achievementCompletedTask": "Udfør en opgave", + "achievementCreatedTaskModalText": "Tilføj en opgave for noget, du gerne vil gøre i denne uge", + "achievementCreatedTaskText": "Oprettede deres første opgave.", + "achievementCreatedTask": "Opret en opgave", + "achievementUndeadUndertakerModalText": "Du har tæmmet alle zombieridedyr!", + "achievementUndeadUndertakerText": "Har tæmmet alle zombieridedyr.", + "achievementUndeadUndertaker": "Udød yndling", + "achievementMonsterMagus": "Monstrøs magiker", + "achievementKickstarter2019Text": "Sponsorerede Kickstarterprojektet for badges i 2019", + "achievementKickstarter2019": "Pin Kickstarter sponsor", + "achievementAridAuthority": "Knastør ekspert", + "achievementPartyUp": "Du dannede hold med en anden bruger!", + "hideAchievements": "Skjul <%= category %>", + "showAllAchievements": "Vis alle <%= category %>", + "onboardingCompleteDesc": "Du opnåede 5 præstationer og 100 guld for at færdiggøre listen.", + "earnedAchievement": "Du opnåede en præstation!", + "viewAchievements": "Se præstationer", + "letsGetStarted": "Lad os komme i gang!", + "onboardingProgress": "<%= percentage %>% fremskridt", + "gettingStartedDesc": "Lad os lave en opgave, udføre den, og så se på din belønning. You vil få 5 præstationer og 100 guld, når du er færdig!" } diff --git a/website/common/locales/da/defaulttasks.json b/website/common/locales/da/defaulttasks.json index a772da9c9a..fc84996fdb 100644 --- a/website/common/locales/da/defaulttasks.json +++ b/website/common/locales/da/defaulttasks.json @@ -1,13 +1,13 @@ { "defaultHabit1Text": "Produktivt arbejde (Klik på blyanten for at redigere)", - "defaultHabit1Notes": "Eksempler på Gode Vaner: +Spist en grønsag +15 minutters produktivt arbejde", + "defaultHabit1Notes": "Eksempler på gode vaner: + Spis en grønsag + 15 minutters produktivt arbejde", "defaultHabit2Text": "Spis junk food (Klik på blyanten for at redigere)", - "defaultHabit2Notes": "Eksempler på Dårlige Vaner: -Ryge -Overspringshandling", - "defaultHabit3Text": "Tag trapperne/elevator (Klik på blyanten for at redigere)", - "defaultHabit3Notes": "Eksempel på God eller Dårlig Vane: +/- Tog Trapperne/Elevatoren; +/- Drak Vand/Sodavand", + "defaultHabit2Notes": "Eksempler på dårlige vaner: - Rygning - Lav overspringshandlinger", + "defaultHabit3Text": "Tag trapperne/elevatoren (Klik på blyanten for at redigere)", + "defaultHabit3Notes": "Eksempel på en god eller dårlig vane: +/- Tog trapperne/elevatoren; +/- Drak vand/sodavand", "defaultHabit4Text": "Tilføj en opgave til Habitica", "defaultHabit4Notes": "Enten en Vane, en Daglig eller en To-Do", - "defaultHabit5Text": "Tryk her for at gøre dette til en dårlig vane du gerne vil af med", + "defaultHabit5Text": "Tryk her, for at gøre dette til en dårlig vane, du gerne vil af med", "defaultHabit5Notes": "Eller slet fra redigeringsskærmen", "defaultDaily1Text": "Brug Habitica til at holde styr på dine opgaver", "defaultTodo1Text": "Start med at spille Habitica (Markér mig som færdig!)", @@ -25,4 +25,4 @@ "defaultTag5": "Teams", "defaultTag6": "Pligter", "defaultTag7": "Kreativitet" -} \ No newline at end of file +} diff --git a/website/common/locales/da/settings.json b/website/common/locales/da/settings.json index 4a55e9d739..b0ae8b114e 100644 --- a/website/common/locales/da/settings.json +++ b/website/common/locales/da/settings.json @@ -140,59 +140,59 @@ "subscriptionRateText": "Løbende $<%= price %> USD hver <%= months %>. måned", "recurringText": "løbende", "benefits": "Fordele", - "coupon": "Kupon", - "couponPlaceholder": "Indtast Kuponkode", - "couponText": "Nogle gange har vi events og giver kuponkoder til specielt udstyr. (f.eks. til dem, der svinger forbi vores stand på Wondercon)", + "coupon": "Rabat", + "couponPlaceholder": "Indtast rabatkode", + "couponText": "Nogle gange har vi events og giver rabatkoder til specielt udstyr (f.eks. til dem, der svinger indenom vores stand på Wondercon).", "apply": "Udfør", "resubscribe": "Genabonnér", "promoCode": "Promo-kode", - "promoCodeApplied": "Promo-kode anvendt. Tjek dit inventar", - "promoPlaceholder": "Indtast Promo-kode", + "promoCodeApplied": "Promo-kode accepteret! Tjek dit inventar", + "promoPlaceholder": "Indtast promo-kode", "displayInviteToPartyWhenPartyIs1": "Vis Invitér til Hold-knap når holdet har 1 medlem.", - "saveCustomDayStart": "Gem Brugerdefineret Dagstart", + "saveCustomDayStart": "Gem brugerdefineret starttidspunkt", "registration": "Registrering", "addLocalAuth": "Tilføj login med email og kodeord", - "generateCodes": "Generér Koder", + "generateCodes": "Generér koder", "generate": "Generér", - "getCodes": "Hent Koder", + "getCodes": "Hent koder", "webhooks": "Webhooks", - "webhooksInfo": "Habitica tilbyder webhooks, så information kan blive sendt til et script på en anden hjemmeside, når der sker bestemte ting med din konto. Du kan specificere disse scripts her. Vær forsigtig med denne funktion. En forkert URL kan forårsage fejl eller gøre Habitica langsomt. Se wiki-siden Webhooks for mere information (engelsk).", + "webhooksInfo": "Habitica tilbyder webhooks, så information kan blive sendt til et script på en anden hjemmeside, når der sker bestemte ting med din konto. Du kan specificere disse scripts her. Vær forsigtig med denne funktion. En forkert URL kan forårsage fejl eller gøre Habitica langsom. Se wiki-siden Webhooks (EN) for mere information.", "enabled": "Aktiveret", "webhookURL": "Webhook URL", "invalidUrl": "ugyldig url", - "invalidEnabled": "Parametren \"aktiveret\" skal være en boolesk værdi.", - "invalidWebhookId": "Parametren \"id\" skal være et gyldigt Unikt Bruger-ID.", - "missingWebhookId": "Webhook-id påkrævet.", - "invalidWebhookType": "\"<%= type %>\" er ikke en gyldig værdi for parametren \"type\".", + "invalidEnabled": "Parametret \"aktiveret\" skal være en boolesk værdi.", + "invalidWebhookId": "Parametret \"id\" skal være et gyldigt unikt bruger-ID.", + "missingWebhookId": "Webhook-ID påkrævet.", + "invalidWebhookType": "\"<%= type %>\" er ikke en gyldig værdi for parametret \"type\".", "webhookBooleanOption": "\"<%= option %>\" skal være en boolesk værdi.", - "webhookIdAlreadyTaken": "En webhook med id'et <%= id %> findes allerede.", - "noWebhookWithId": "Der er ingen webhook med id'et <%= id %>.", - "regIdRequired": "RegId påkrævet", - "invalidPushClient": "Ugyldig klient. Kun officielle Habitica-klienter kan modtage push notifikationer.", + "webhookIdAlreadyTaken": "En webhook med ID'et <%= id %> findes allerede.", + "noWebhookWithId": "Der er ingen webhook med ID'et <%= id %>.", + "regIdRequired": "RegID påkrævet", + "invalidPushClient": "Ugyldig klient. Kun officielle Habitica-klienter kan modtage pushnotifikationer.", "pushDeviceAdded": "Push-enhed tilføjet", "pushDeviceAlreadyAdded": "Denne bruger har allerede push-enheden", "pushDeviceNotFound": "Brugeren har ingen push-enhed med dette ID.", "pushDeviceRemoved": "Push-enhed fjernet.", "buyGemsGoldCap": "Maksimum hævet til <%= amount %>", - "mysticHourglass": "<%= amount %> Mystiske Timeglas", - "mysticHourglassText": "Mystiske Timeglas giver dig adgang til at købe tidligere måneders Mystiske Gendstande-sæt.", + "mysticHourglass": "<%= amount %> mystiske timeglas", + "mysticHourglassText": "Mystiske timeglas giver dig adgang til at købe mystiske sæt fra tidligere måneder.", "purchasedPlanId": "Løbende $<%= price %> USD hver <%= months %>. måned (<%= plan %>)", "purchasedPlanExtraMonths": "Du har <%= months %> måneders overskydende abonnementkredit.", - "consecutiveSubscription": "Fortløbende Abonnement", - "consecutiveMonths": "Fortløbende Måneder:", - "gemCapExtra": "Ekstra Ædelstensmaksimum:", - "mysticHourglasses": "Mystiske Timeglas:", + "consecutiveSubscription": "Fortløbende abonnement", + "consecutiveMonths": "Fortløbende måneder:", + "gemCapExtra": "Ekstra ædelstensmaksimum:", + "mysticHourglasses": "Mystiske timeglas:", "mysticHourglassesTooltip": "Mystiske timeglas", "paypal": "PayPal", "amazonPayments": "Amazon Payments", - "amazonPaymentsRecurring": "Det er nødvendigt at sætte hak i boksen nedenunder for at oprette dit abonnement. Det vil tillade at din Amazonkonto kan bruges til gentagne betalinger for dette abonnement. Det vil ikke få til Amazonkonto til at blive brugt automatisk ved fremtidige køb.", + "amazonPaymentsRecurring": "Det er nødvendigt at sætte hak i boksen nedenunder for at oprette dit abonnement. Det vil tillade, at din Amazonkonto kan bruges til gentagne betalinger for dette abonnement. Det vil ikke forårsage, at din Amazonkonto bliver brugt automatisk ved fremtidige køb.", "timezone": "Tidszone", - "timezoneUTC": "Habitica bruger tidszonen sat på din PC, som er: <%= utc %>", - "timezoneInfo": "Hvis tidszonen er forkert, kan du først genindlæse denne side ved hjælp af din browsers knap til genindlæsning for at give Habitica de mest opdaterede informationer. Hvis den stadig er forkert, kan du justere din tidszone på din PC og derefter genindlæse siden igen.

Hvis du bruger Habitica på andre PC'er eller mobile enheder, skal tidszonen være den samme på dem alle. Hvis dine Daglige er blevet nulstellet på det forkerte tidspunkt. kan du gentage denne gennemgang på alle andre PC'er og i en browser på dine mobile enheder.", + "timezoneUTC": "Habitica bruger tidszonen fra din PC, som er: <%= utc %>", + "timezoneInfo": "Hvis tidszonen er forkert, kan du først genindlæse denne side, ved hjælp af din browsers knap til genindlæsning, for at give Habitica de mest opdaterede informationer. Hvis den stadig er forkert, kan du justere din tidszone på din PC, og derefter genindlæse siden igen.

Hvis du bruger Habitica på andre PC'er eller mobile enheder, skal tidszonen være den samme på dem alle. Hvis dine Daglige er blevet nulstillet på det forkerte tidspunkt. så gentag venligst denne gennemgang af alle PC'er og i en browser på alle mobile enheder.", "push": "Push", "about": "Om Habitica", "setUsernameNotificationTitle": "Bekræft dit brugernavn!", - "setUsernameNotificationBody": "Vi vil skifte loginnavne til unikke, offentlige brugernavne snart. Dette brugernavn vil blive brugt til invitationer, @tags i chat og beskeder.", + "setUsernameNotificationBody": "Vi ændrer snart loginnavne til unikke, offentlige brugernavne. Dette brugernavn vil blive brugt til invitationer, @tags i chat og beskeder.", "usernameIssueSlur": "Brugernavne må ikke indeholde upassende sprogbrug.", "usernameIssueForbidden": "Brugernavne må ikke indeholde blokerede ord.", "usernameIssueLength": "Brugernavne skal være mellem 1 og 20 tegn.", @@ -200,9 +200,13 @@ "currentUsername": "Nuværende brugernavn:", "displaynameIssueLength": "Displaynavne skal indeholde mellem 1 og 30 tegn.", "displaynameIssueSlur": "Displaynavne må ikke indeholde upassende sprogbrug.", - "goToSettings": "Gå til Indstillinger", + "goToSettings": "Gå til indstillinger", "usernameVerifiedConfirmation": "Dit brugernavn, <%= username %>, er blevet bekræftet!", "usernameNotVerified": "Bekræft venligst dit brugernavn.", - "changeUsernameDisclaimer": "Vi vil lave loginnavne om til unikke, offentlige brugernavne snart. Dette brugernavn vil blive brugt til invitationer, @tags i chat og beskeder.", - "verifyUsernameVeteranPet": "Et af disse Veterankæledyr venter på dig når du er færdig med at bekræfte!" + "changeUsernameDisclaimer": "Dette brugernavn vil blive brugt til invitationer, @tags i chat og beskeder.", + "verifyUsernameVeteranPet": "Et af disse veterankæledyr venter på dig, når du er færdig med at bekræfte!", + "onlyPrivateSpaces": "Kun i private rum", + "everywhere": "Alle steder", + "suggestMyUsername": "Foreslå mit brugernavn", + "mentioning": "Tagging" } diff --git a/website/common/locales/en_GB/achievements.json b/website/common/locales/en_GB/achievements.json index 130cce1c09..6860a7887c 100644 --- a/website/common/locales/en_GB/achievements.json +++ b/website/common/locales/en_GB/achievements.json @@ -18,5 +18,50 @@ "achievementJustAddWater": "Just Add Water", "achievementMindOverMatterModalText": "You completed the Rock, Slime, and Yarn pet quests!", "achievementMindOverMatterText": "Has completed Rock, Slime, and Yarn pet quests.", - "achievementMindOverMatter": "Mind Over Matter" + "achievementMindOverMatter": "Mind Over Matter", + "achievementPearlyProModalText": "You tamed all the White Mounts!", + "achievementPearlyProText": "Has tamed all White Mounts.", + "achievementPearlyPro": "Pearly Pro", + "achievementPrimedForPaintingModalText": "You collected all the White Pets!", + "achievementPrimedForPaintingText": "Has collected all White Pets.", + "achievementPrimedForPainting": "Primed for Painting", + "achievementPurchasedEquipmentModalText": "Equipment is a way to customise your avatar and improve your stats", + "achievementPurchasedEquipmentText": "Purchased their first piece of equipment.", + "achievementPurchasedEquipment": "Purchase Equipment", + "achievementFedPetModalText": "There are many different types of food, but pets can be picky", + "achievementFedPetText": "Fed their first pet.", + "achievementFedPet": "Feed a Pet", + "achievementHatchedPetModalText": "Head over to your inventory and try combining a hatching potion and an egg", + "achievementHatchedPetText": "Hatched their first pet.", + "achievementHatchedPet": "Hatch a Pet", + "achievementCompletedTaskModalText": "Check off any of your tasks to earn rewards", + "achievementCompletedTaskText": "Completed their first task.", + "achievementCompletedTask": "Complete a Task", + "achievementCreatedTaskModalText": "Add a task for something you would like to accomplish this week", + "achievementCreatedTaskText": "Created their first task.", + "achievementCreatedTask": "Create a Task", + "achievementUndeadUndertakerModalText": "You tamed all the Zombie Mounts!", + "achievementUndeadUndertakerText": "Has tamed all Zombie Mounts.", + "achievementUndeadUndertaker": "Undead Undertaker", + "achievementMonsterMagusModalText": "You collected all the Zombie Pets!", + "achievementMonsterMagusText": "Has collected all Zombie Pets.", + "achievementMonsterMagus": "Monster Magus", + "achievementPartyOn": "Your party grew to 4 members!", + "achievementKickstarter2019Text": "Backed the 2019 Pin Kickstarter Project", + "achievementKickstarter2019": "Pin Kickstarter Backer", + "achievementAridAuthorityModalText": "You tamed all the Desert Mounts!", + "achievementAridAuthorityText": "Has tamed all Desert Mounts.", + "achievementAridAuthority": "Arid Authority", + "achievementPartyUp": "You teamed up with a party member!", + "achievementDustDevilModalText": "You collected all the Desert Pets!", + "achievementDustDevilText": "Has collected all Desert Pets.", + "achievementDustDevil": "Dust Devil", + "hideAchievements": "Hide <%= category %>", + "showAllAchievements": "Show All <%= category %>", + "onboardingCompleteDesc": "You earned 5 achievements and 100 gold for completing the list.", + "earnedAchievement": "You earned an achievement!", + "viewAchievements": "View Achievements", + "letsGetStarted": "Let's get started!", + "onboardingProgress": "<%= percentage %>% progress", + "gettingStartedDesc": "Let’s create a task, complete it, then check out your rewards. You’ll earn 5 achievements and 100 gold once you’re done!" } diff --git a/website/common/locales/en_GB/backgrounds.json b/website/common/locales/en_GB/backgrounds.json index d033c63188..7270fccf4f 100644 --- a/website/common/locales/en_GB/backgrounds.json +++ b/website/common/locales/en_GB/backgrounds.json @@ -422,5 +422,75 @@ "backgroundFieldWithColoredEggsText": "Field with Coloured Eggs", "backgroundFieldWithColoredEggsNotes": "Hunt for springtime treasure in a Field with Coloured Eggs.", "backgroundFlowerMarketText": "Flower Market", - "backgroundFlowerMarketNotes": "Find the perfect colours for bouquet or garden in a Flower Market." + "backgroundFlowerMarketNotes": "Find the perfect colours for bouquet or garden in a Flower Market.", + "backgroundHolidayMarketText": "Holiday Market", + "backgroundHolidayMarketNotes": "Find the perfect gifts and decorations at a Holiday Market.", + "backgroundHolidayWreathText": "Holiday Wreath", + "backgroundHolidayWreathNotes": "Festoon your avatar with a fragrant Holiday Wreath.", + "backgroundWinterNocturneText": "Winter Nocturne", + "backgroundWinterNocturneNotes": "Bask in the starlight of a Winter Nocturne.", + "backgrounds012020": "SET 68: Released January 2020", + "backgroundBirthdayPartyText": "Birthday Party", + "backgroundBirthdayPartyNotes": "Celebrate the Birthday Party of your favourite Habitican.", + "backgroundDesertWithSnowText": "Snowy Desert", + "backgroundDesertWithSnowNotes": "Witness the rare and quiet beauty of a Snowy Desert.", + "backgroundSnowglobeText": "Snowglobe", + "backgroundSnowglobeNotes": "Shake up a Snowglobe and take your place in a microcosm of a winter landscape.", + "backgrounds122019": "SET 67: Released December 2019", + "backgroundPotionShopNotes": "Find an elixir for any ailment at a Potion Shop.", + "backgroundPotionShopText": "Potion Shop", + "backgroundFlyingInAThunderstormNotes": "Chase a Tumultuous Thunderstorm as closely as you dare.", + "backgroundFlyingInAThunderstormText": "Tumultuous Thunderstorm", + "backgroundFarmersMarketNotes": "Shop for the freshest of foods at a Farmer's Market.", + "backgroundFarmersMarketText": "Farmer's Market", + "backgrounds112019": "SET 66: Released November 2019", + "backgroundMonsterMakersWorkshopNotes": "Experiment with discredited sciences in a Monster Maker's Workshop.", + "backgroundMonsterMakersWorkshopText": "Monster Maker's Workshop", + "backgroundPumpkinCarriageNotes": "Ride in an enchanted Pumpkin Carriage before the clock strikes midnight.", + "backgroundPumpkinCarriageText": "Pumpkin Carriage", + "backgroundFoggyMoorNotes": "Watch your step traversing a Foggy Moor.", + "backgroundFoggyMoorText": "Foggy Moor", + "backgrounds102019": "SET 65: Released October 2019", + "backgroundInAClassroomNotes": "Absorb knowledge from your mentors in a Classroom.", + "backgroundInAClassroomText": "Classroom", + "backgroundInAnAncientTombNotes": "Brave the mysteries of an Ancient Tomb.", + "backgroundInAnAncientTombText": "Ancient Tomb", + "backgroundAutumnFlowerGardenNotes": "Take in the warmth of an Autumn Flower Garden.", + "backgroundAutumnFlowerGardenText": "Autumn Flower Garden", + "backgrounds092019": "SET 64: Released September 2019", + "backgroundTreehouseNotes": "Hang out in an arboreal hideaway all to yourself, in your very own Treehouse.", + "backgroundTreehouseText": "Treehouse", + "backgroundGiantDandelionsNotes": "Dally among Giant Dandelions.", + "backgroundGiantDandelionsText": "Giant Dandelions", + "backgroundAmidAncientRuinsNotes": "Stand in reverence of the mysterious past Amid Ancient Ruins.", + "backgroundAmidAncientRuinsText": "Amid Ancient Ruins", + "backgrounds082019": "SET 63: Released August 2019", + "backgroundAmongGiantAnemonesNotes": "Explore reef life, protected from predators Among Giant Anemones.", + "backgroundAmongGiantAnemonesText": "Among Giant Anemones", + "backgroundFlyingOverTropicalIslandsNotes": "Let the view take your breath away as you Fly over Tropical Islands.", + "backgroundFlyingOverTropicalIslandsText": "Flying over Tropical Islands", + "backgroundLakeWithFloatingLanternsNotes": "Stargaze from the festival atmosphere of a Lake with Floating Lanterns.", + "backgroundLakeWithFloatingLanternsText": "Lake with Floating Lanterns", + "backgrounds072019": "SET 62: Released July 2019", + "backgroundUnderwaterVentsNotes": "Take a deep dive down, down to the Underwater Vents.", + "backgroundUnderwaterVentsText": "Underwater Vents", + "backgroundSeasideCliffsNotes": "Stand on a beach with the beauty of Seaside Cliffs above.", + "backgroundSeasideCliffsText": "Seaside Cliffs", + "backgroundSchoolOfFishNotes": "Swim among a School of Fish.", + "backgroundSchoolOfFishText": "School of Fish", + "backgrounds062019": "SET 61: Released June 2019", + "backgroundRainbowMeadowNotes": "Find the pot of gold where a Rainbow ends in a Meadow.", + "backgroundRainbowMeadowText": "Rainbow Meadow", + "backgroundParkWithStatueNotes": "Follow a flower-lined path through a Park with a Statue.", + "backgroundParkWithStatueText": "Park with Statue", + "backgroundDojoNotes": "Learn new moves in a Dojo.", + "backgroundDojoText": "Dojo", + "backgrounds052019": "SET 60: Released May 2019", + "backgroundBlossomingDesertNotes": "Witness a rare superbloom in the Blossoming Desert.", + "backgroundBlossomingDesertText": "Blossoming Desert", + "backgroundHalflingsHouseNotes": "Visit a charming Halfling's House.", + "backgroundHalflingsHouseText": "Halfling's House", + "backgroundBirchForestNotes": "Dally in a peaceful Birch Forest.", + "backgroundBirchForestText": "Birch Forest", + "backgrounds042019": "SET 59: Released April 2019" } diff --git a/website/common/locales/en_GB/character.json b/website/common/locales/en_GB/character.json index 4c0b060c43..ec636f095d 100644 --- a/website/common/locales/en_GB/character.json +++ b/website/common/locales/en_GB/character.json @@ -104,7 +104,7 @@ "allocatePerPop": "Add a Point to Perception", "allocateInt": "Points allocated to Intelligence:", "allocateIntPop": "Add a Point to Intelligence", - "noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the Orb of Rebirth, now available for free in the Market.", + "noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue levelling up, or start a new adventure at level 1 by using the Orb of Rebirth!", "stats": "Stats", "achievs": "Achievements", "strength": "Strength", @@ -224,5 +224,9 @@ "mainHand": "Main-Hand", "offHand": "Off-Hand", "statPoints": "Stat Points", - "pts": "pts" + "pts": "pts", + "chatCastSpellUser": "<%= username %> casts <%= spell %> on <%= target %>.", + "chatCastSpellParty": "<%= username %> casts <%= spell %> for the party.", + "purchasePetItemConfirm": "This purchase would exceed the number of items you need to hatch all possible <%= itemText %> pets. Are you sure?", + "purchaseForGold": "Purchase for <%= cost %> Gold?" } diff --git a/website/common/locales/en_GB/communityguidelines.json b/website/common/locales/en_GB/communityguidelines.json index 140e0609fa..1d54c0a286 100644 --- a/website/common/locales/en_GB/communityguidelines.json +++ b/website/common/locales/en_GB/communityguidelines.json @@ -17,14 +17,14 @@ "commGuideList02E": "Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.", "commGuideList02F": "Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic. If you feel that someone has said something rude or hurtful, do not engage them. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it’s okay to politely let someone know that. If it is against the guidelines or the Terms of Service, you should flag it and let a mod respond. When in doubt, flag the post.", "commGuideList02G": "Comply immediately with any Mod request. This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc.", - "commGuideList02H": "Take time to reflect instead of responding in anger if someone tells you that something you said or did made them uncomfortable. There is great strength in being able to sincerely apologize to someone. If you feel that the way they responded to you was inappropriate, contact a mod rather than calling them out on it publicly.", - "commGuideList02I": "Divisive/contentious conversations should be reported to mods by flagging the messages involved or using the Moderator Contact Form. If you feel that a conversation is getting heated, overly emotional, or hurtful, cease to engage. Instead, report the posts to let us know about it. Moderators will respond as quickly as possible. It's our job to keep you safe. If you feel that more context is required, you can report the problem using the Moderator Contact Form.", + "commGuideList02H": "Take time to reflect instead of responding in anger if someone tells you that something you said or did made them uncomfortable. There is great strength in being able to sincerely apologise to someone. If you feel that the way they responded to you was inappropriate, contact a mod rather than calling them out on it publicly.", + "commGuideList02I": "Divisive/contentious conversations should be reported to mods by flagging the messages involved or using the Moderator Contact Form. If you feel that a conversation is getting heated, overly emotional, or hurtful, cease to engage. Instead, report the posts to let us know about it. Moderators will respond as quickly as possible. It's our job to keep you safe. If you feel that more context is required, you can report the problem using the Moderator Contact Form.", "commGuideList02J": "Do not spam. Spamming may include, but is not limited to: posting the same comment or query in multiple places, posting links without explanation or context, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. Asking for gems or a subscription in any of the chat spaces or via Private Message is also considered spamming. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam.

It is up to the mods to decide if something constitutes spam or might lead to spam, even if you don’t feel that you have been spamming. For example, advertising a Guild is acceptable once or twice, but multiple posts in one day would probably constitute spam, no matter how useful the Guild is!", "commGuideList02K": "Avoid posting large header text in the public chat spaces, particularly the Tavern. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.", - "commGuideList02L": "We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) filling out the Moderator Contact Form and including screenshots.", + "commGuideList02L": "We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) filling out the Moderator Contact Form and including screenshots.", "commGuidePara019": "In private spaces, users have more freedom to discuss whatever topics they would like, but they still may not violate the Terms and Conditions, including posting slurs or any discriminatory, violent, or threatening content. Note that, because Challenge names appear in the winner's public profile, ALL Challenge names must obey the public space guidelines, even if they appear in a private space.", "commGuidePara020": "Private Messages (PMs) have some additional guidelines. If someone has blocked you, do not contact them elsewhere to ask them to unblock you. Additionally, you should not send PMs to someone asking for support (since public answers to support questions are helpful to the community). Finally, do not send anyone PMs begging for a gift of gems or a subscription, as this can be considered spamming.", - "commGuidePara020A": "If you see a post that you believe is in violation of the public space guidelines outlined above, or if you see a post that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in “Infractions”). PMs cannot be flagged at this time, so if you need to report a PM, please contact the Mods via the form on the “Contact Us” page, which you can also access via the help menu by clicking “Contact the Moderation Team.” You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.", + "commGuidePara020A": "If you see a post that you believe is in violation of the public space guidelines outlined above, or if you see a post that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in “Infractions”). PMs cannot be flagged at this time, so if you need to report a PM, please contact the Mods via the form on the “Contact Us” page, which you can also access via the help menu by clicking “Contact the Moderation Team.” You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.", "commGuidePara021": "Furthermore, some public spaces in Habitica have additional guidelines.", "commGuideHeadingTavern": "The Tavern", "commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Innkeeper keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind…", @@ -35,8 +35,8 @@ "commGuidePara029": "Public Guilds are much like the Tavern, except that instead of being centered around general conversation, they have a focused theme. Public Guild chat should focus on this theme. For example, members of the Wordsmiths Guild might be cross if the conversation is suddenly focusing on gardening instead of writing, and a Dragon-Fanciers Guild might not have any interest in deciphering ancient runes. Some Guilds are more lax about this than others, but in general, try to stay on topic!", "commGuidePara031": "Some public Guilds will contain sensitive topics such as depression, religion, politics, etc. This is fine as long as the conversations therein do not violate any of the Terms and Conditions or Public Space Rules, and as long as they stay on topic.", "commGuidePara033": "Public Guilds may NOT contain 18+ content. If they plan to regularly discuss sensitive content, they should say so in the Guild description. This is to keep Habitica safe and comfortable for everyone.", - "commGuidePara035": "If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\"). These may be characterized as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. If possible, please use markdown to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion.", - "commGuidePara036": "Additionally, the sensitive material should be topical -- bringing up self-harm in a Guild focused on fighting depression may make sense, but is probably less appropriate in a music Guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please flag the posts and notify the moderators via the Moderator Contact Form.", + "commGuidePara035": "If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\"). These may be characterised as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. If possible, please use markdown to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion.", + "commGuidePara036": "Additionally, the sensitive material should be topical -- bringing up self-harm in a Guild focused on fighting depression may make sense, but is probably less appropriate in a music Guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please flag the posts and notify the moderators via the Moderator Contact Form.", "commGuidePara037": "No Guilds, Public or Private, should be created for the purpose of attacking any group or individual. Creating such a Guild is grounds for an instant ban. Fight bad habits, not your fellow adventurers!", "commGuidePara038": "All Tavern Challenges and Public Guild Challenges must comply with these rules as well.", "commGuideHeadingInfractionsEtc": "Infractions, Consequences, and Restoration", @@ -65,7 +65,7 @@ "commGuidePara056": "Minor Infractions, while discouraged, still have minor consequences. If they continue to occur, they can lead to more severe consequences over time.", "commGuidePara057": "The following are some examples of Minor Infractions. This is not a comprehensive list.", "commGuideList07A": "First-time violation of Public Space Guidelines", - "commGuideList07B": "Any statements or actions that trigger a \"Please Don't\". When a Mod has to say \"Please don't do this\" to a user, it can count as a very minor infraction for that user. An example might be \"Please don't keep arguing in favor of this feature idea after we've told you several times that it isn't feasible.\" In many cases, the Please Don't will be the minor consequence as well, but if Mods have to say \"Please Don't\" to the same user enough times, the triggering Minor Infractions will start to count as Moderate Infractions.", + "commGuideList07B": "Any statements or actions that trigger a \"Please Don't\". When a Mod has to say \"Please don't do this\" to a user, it can count as a very minor infraction for that user. An example might be \"Please don't keep arguing in favour of this feature idea after we've told you several times that it isn't feasible.\" In many cases, the Please Don't will be the minor consequence as well, but if Mods have to say \"Please Don't\" to the same user enough times, the triggering Minor Infractions will start to count as Moderate Infractions.", "commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!", "commGuideHeadingConsequences": "Consequences", "commGuidePara058": "In Habitica -- as in real life -- every action has a consequence, whether it is getting fit because you've been running, getting cavities because you've been eating too much sugar, or passing a class because you've been studying.", @@ -75,7 +75,7 @@ "commGuideList08B": "what the consequence is", "commGuideList08C": "what to do to correct the situation and restore your status, if possible.", "commGuidePara060A": "If the situation calls for it, you may receive a PM or email as well as a post in the forum in which the infraction occurred. In some cases you may not be reprimanded in public at all.", - "commGuidePara060B": "If your account is banned (a severe consequence), you will not be able to log into Habitica and will receive an error message upon attempting to log in. If you wish to apologize or make a plea for reinstatement, please email the staff at admin@habitica.com with your UUID (which will be given in the error message). It is your responsibility to reach out if you desire reconsideration or reinstatement.", + "commGuidePara060B": "If your account is banned (a severe consequence), you will not be able to log into Habitica and will receive an error message upon attempting to log in. If you wish to apologise or make a plea for reinstatement, please email the staff at admin@habitica.com with your UUID (which will be given in the error message). It is your responsibility to reach out if you desire reconsideration or reinstatement.", "commGuideHeadingSevereConsequences": "Examples of Severe Consequences", "commGuideList09A": "Account bans (see above)", "commGuideList09C": "Permanently disabling (\"freezing\") progression through Contributor Tiers", @@ -94,7 +94,7 @@ "commGuideList11E": "Edits (Mods/Staff may edit problematic content)", "commGuideHeadingRestoration": "Restoration", "commGuidePara061": "Habitica is a land devoted to self-improvement, and we believe in second chances. If you commit an infraction and receive a consequence, view it as a chance to evaluate your actions and strive to be a better member of the community.", - "commGuidePara062": "The announcement, message, and/or email that you receive explaining the consequences of your actions is a good source of information. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.", + "commGuidePara062": "The announcement, message, and/or email that you receive explaining the consequences of your actions is a good source of information. Cooperate with any restrictions which have been imposed, and endeavour to meet the requirements to have any penalties lifted.", "commGuidePara063": "If you do not understand your consequences, or the nature of your infraction, ask the Staff/Moderators for help so you can avoid committing infractions in the future. If you feel a particular decision was unfair, you can contact the staff to discuss it at admin@habitica.com.", "commGuideHeadingMeet": "Meet the Staff and Mods!", "commGuidePara006": "Habitica has some tireless knights-errant who join forces with the staff members to keep the community calm, contented, and free of trolls. Each has a specific domain, but will sometimes be called to serve in other social spheres.", @@ -111,10 +111,10 @@ "commGuidePara011c": "on Wikia", "commGuidePara011d": "on GitHub", "commGuidePara012": "If you have an issue or concern about a particular Mod, please send an email to our Staff (admin@habitica.com).", - "commGuidePara013": "In a community as big as Habitica, users come and go, and sometimes a staff member or moderator needs to lay down their noble mantle and relax. The following are Staff and Moderators Emeritus. They no longer act with the power of a Staff member or Moderator, but we would still like to honor their work!", + "commGuidePara013": "In a community as big as Habitica, users come and go, and sometimes a staff member or moderator needs to lay down their noble mantle and relax. The following are Staff and Moderators Emeritus. They no longer act with the power of a Staff member or Moderator, but we would still like to honour their work!", "commGuidePara014": "Staff and Moderators Emeritus:", "commGuideHeadingFinal": "The Final Section", - "commGuidePara067": "So there you have it, brave Habitican -- the Community Guidelines! Wipe that sweat off of your brow and give yourself some XP for reading it all. If you have any questions or concerns about these Community Guidelines, please reach out to us via the Moderator Contact Form and we will be happy to help clarify things.", + "commGuidePara067": "So there you have it, brave Habitican -- the Community Guidelines! Wipe that sweat off of your brow and give yourself some XP for reading it all. If you have any questions or concerns about these Community Guidelines, please reach out to us via the Moderator Contact Form and we will be happy to help clarify things.", "commGuidePara068": "Now go forth, brave adventurer, and slay some Dailies!", "commGuideHeadingLinks": "Useful Links", "commGuideLink01": "Habitica Help: Ask a Question: a Guild for users to ask questions!", diff --git a/website/common/locales/en_GB/content.json b/website/common/locales/en_GB/content.json index b0a957c2fb..e949dc4540 100644 --- a/website/common/locales/en_GB/content.json +++ b/website/common/locales/en_GB/content.json @@ -212,7 +212,7 @@ "hatchingPotionFrost": "Frost", "hatchingPotionIcySnow": "Icy Snow", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.", "foodMeat": "Meat", "foodMeatThe": "the Meat", "foodMeatA": "Meat", @@ -339,5 +339,19 @@ "foodPieDesertA": "a slice of Desert Dessert Pie", "foodPieRed": "Red Cherry Pie", "foodPieRedThe": "the Red Cherry Pie", - "foodPieRedA": "a slice of Red Cherry Pie" + "foodPieRedA": "a slice of Red Cherry Pie", + "premiumPotionUnlimitedNotes": "Not usable on quest pet eggs.", + "hatchingPotionAurora": "Aurora", + "hatchingPotionAmber": "Amber", + "hatchingPotionShadow": "Shadow", + "hatchingPotionSilver": "Silver", + "hatchingPotionWatery": "Watery", + "hatchingPotionBronze": "Bronze", + "hatchingPotionSunshine": "Sunshine", + "questEggRobotAdjective": "a futuristic", + "questEggRobotMountText": "Robot", + "questEggRobotText": "Robot", + "questEggDolphinAdjective": "a chipper", + "questEggDolphinMountText": "Dolphin", + "questEggDolphinText": "Dolphin" } diff --git a/website/common/locales/en_GB/contrib.json b/website/common/locales/en_GB/contrib.json index d1dc2a3400..31e91e3ffa 100644 --- a/website/common/locales/en_GB/contrib.json +++ b/website/common/locales/en_GB/contrib.json @@ -1,5 +1,5 @@ { - "playerTiersDesc": "The colored usernames you see in chat represent a person's contributor tier. The higher the tier, the more the person has contributed to habitica through art, code, the community, or more!", + "playerTiersDesc": "The coloured usernames you see in chat represent a person's contributor tier. The higher the tier, the more the person has contributed to habitica through art, code, the community, or more!", "tier1": "Tier 1 (Friend)", "tier2": "Tier 2 (Friend)", "tier3": "Tier 3 (Elite)", @@ -77,4 +77,4 @@ "blurbChallenges": "Challenges are created by your fellow players. Joining a Challenge will add its tasks to your task dashboard, and winning a Challenge will give you an achievement and often a gem prize!", "blurbHallPatrons": "This is the Hall of Patrons, where we honour the noble adventurers who backed Habitica's original Kickstarter. We thank them for helping us bring Habitica to life!", "blurbHallContributors": "This is the Hall of Contributors, where open-source contributors to Habitica are honored. Whether through code, art, music, writing, or even just helpfulness, they have earned gems, exclusive equipment, and prestigious titles. You can contribute to Habitica, too! Find out more here. " -} \ No newline at end of file +} diff --git a/website/common/locales/en_GB/defaulttasks.json b/website/common/locales/en_GB/defaulttasks.json index 99a2fbb9a7..ff59344c3a 100644 --- a/website/common/locales/en_GB/defaulttasks.json +++ b/website/common/locales/en_GB/defaulttasks.json @@ -24,5 +24,42 @@ "defaultTag4": "School", "defaultTag5": "Teams", "defaultTag6": "Chores", - "defaultTag7": "Creativity" -} \ No newline at end of file + "defaultTag7": "Creativity", + "defaultHabitNotes": "Or delete from the edit screen", + "defaultHabitText": "Click here to edit this into a bad habit you'd like to quit", + "creativityTodoNotes": "Tap to specify the name of your project", + "creativityTodoText": "Finish creative project", + "creativityDailyNotes": "Tap to specify the name of your current project + set the schedule!", + "creativityDailyText": "Work on creative project", + "creativityHabit": "Study a master of the craft >> + Practiced a new creative technique", + "choresTodoNotes": "Tap to specify the cluttered area!", + "choresTodoText": "Organise closet >> Organise clutter", + "choresDailyNotes": "Tap to choose your schedule!", + "choresDailyText": "Wash dishes", + "choresHabit": "10 minutes cleaning", + "selfCareTodoNotes": "Tap to specify what you plan to do!", + "selfCareTodoText": "Engage in a fun activity", + "selfCareDailyNotes": "Tap to choose your schedule!", + "selfCareDailyText": "5 minutes of quiet breathing", + "selfCareHabit": "Take a short break", + "schoolTodoNotes": "Tap to name the assignment and choose a due date!]", + "schoolTodoText": "Finish assignment for class", + "schoolDailyNotes": "Tap to choose your homework schedule!", + "schoolDailyText": "Finish homework", + "schoolHabit": "Study/Procrastinate", + "healthTodoNotes": "Tap to add checklists!", + "healthTodoText": "Schedule check-up >> Brainstorm a healthy change", + "healthDailyNotes": "Tap to make any changes!", + "healthDailyText": "Floss", + "healthHabit": "Eat Health/Junk Food", + "exerciseTodoNotes": "Tap to add a checklist!", + "exerciseTodoText": "Set up workout schedule", + "exerciseDailyNotes": "Tap to choose your schedule and specify exercises!", + "exerciseDailyText": "Stretching >> Daily workout routine", + "exerciseHabit": "10 min cardio >> + 10 minutes cardio", + "workTodoProjectNotes": "Tap to specify the name of your current project + set a due date!", + "workTodoProject": "Work project >> Complete work project", + "workDailyImportantTaskNotes": "Tap to specify your most important task", + "workDailyImportantTask": "Most important task >> Worked on today’s most important task", + "workHabitMail": "Process email" +} diff --git a/website/common/locales/en_GB/faq.json b/website/common/locales/en_GB/faq.json index 6b61b8fd8f..845e5566bb 100644 --- a/website/common/locales/en_GB/faq.json +++ b/website/common/locales/en_GB/faq.json @@ -27,7 +27,7 @@ "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its colour! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favourite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.fandom.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", "androidFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch with potion.\" Then choose a hatching potion to determine its colour! To equip your new Pet, go to Menu > Stable > Pets, select a species, click on the desired Pet, and select \"Use\". (Your avatar doesn't update to reflect the change.) \n\n You can also grow your Pets into Mounts by feeding them under Menu > Stable [ > Pets ]. Tap on a Pet, and then select \"Feed\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favourite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.fandom.com/wiki/Food#Food_Preferences). To equip your Mount, go to Menu > Stable > Mounts, select a species, click on the desired Mount, and select \"Use\". (Your avatar doesn't update to reflect the change.)\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored under Inventory > Items. To hatch a Pet, you'll need an egg and a hatching potion. Once you have both an egg and a potion, go to Inventory > Stable to hatch your pet by clicking on its image. Once you've hatched a pet, you can equip it by clicking on it. You can also grow your Pets into Mounts by feeding them under Inventory > Stable. Drag a piece of food from the action bar at the bottom of the screen and drop it on a pet to feed it! You'll have to feed a Pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.fandom.com/wiki/Food#Food_Preferences). Once you have a Mount, click on it to equip it to your avatar. You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored under Inventory > Items. To hatch a Pet, you'll need an egg and a hatching potion. Once you have both an egg and a potion, go to Inventory > Stable to hatch your pet by clicking on its image. Once you've hatched a pet, you can equip it by clicking on it. You can also grow your Pets into Mounts by feeding them under Inventory > Stable. Drag a piece of food from the action bar at the bottom of the screen and drop it on a pet to feed it! You'll have to feed a Pet many times before it becomes a Mount, but if you can figure out its favourite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.fandom.com/wiki/Food#Food_Preferences). Once you have a Mount, click on it to equip it to your avatar. You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", "androidFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Opt Out” and choose later under Menu > Choose Class.", @@ -55,4 +55,4 @@ "iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.fandom.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." -} \ No newline at end of file +} diff --git a/website/common/locales/en_GB/front.json b/website/common/locales/en_GB/front.json index 9ebd2c31da..5636f2c58e 100644 --- a/website/common/locales/en_GB/front.json +++ b/website/common/locales/en_GB/front.json @@ -37,7 +37,7 @@ "companyVideos": "Videos", "contribUse": "Habitica contributors use", "dragonsilverQuote": "I can't tell you how many time and task tracking systems I've tried over the decades... [Habitica] is the only thing I've used that actually helps me get things done rather than just list them.", - "dreimQuote": "When I discovered [Habitica] last summer, I had just failed about half of my exams. Thanks to the Dailies... I was able to organize and discipline myself, and I actually passed all my exams with really good grades a month ago.", + "dreimQuote": "When I discovered [Habitica] last summer, I had just failed about half of my exams. Thanks to the Dailies... I was able to organise and discipline myself, and I actually passed all my exams with really good grades a month ago.", "elmiQuote": "Every morning I'm looking forward to getting up so I can earn some gold!", "forgotPassword": "Forgot Password?", "emailNewPass": "Email a Password Reset Link", @@ -85,7 +85,7 @@ "landingend": "Not convinced yet?", "landingend2": "See a more detailed list of [our features](/static/overview). Are you looking for a more private approach? Check out our [administrative packages](/static/plans), which are perfect for families, teachers, support groups, and businesses.", "landingp1": "The problem with most productivity apps on the market is that they provide no incentive to continue using them. Habitica fixes this by making habit building fun! By rewarding you for your successes and penalising you for slip-ups, Habitica provides external motivation for completing your day-to-day activities.", - "landingp2": "Whenever you reinforce a positive habit, complete a daily task, or take care of an old to-do, Habitica immediately rewards you with Experience points and Gold. As you gain experience, you can level up, increasing your Stats and unlocking more features, like classes and pets. Gold can be spent on in-game items that change your experience or personalized rewards you've created for motivation. When even the smallest successes provide you with an immediate reward, you're less likely to procrastinate.", + "landingp2": "Whenever you reinforce a positive habit, complete a daily task, or take care of an old to-do, Habitica immediately rewards you with Experience points and Gold. As you gain experience, you can level up, increasing your Stats and unlocking more features, like classes and pets. Gold can be spent on in-game items that change your experience or personalised rewards you've created for motivation. When even the smallest successes provide you with an immediate reward, you're less likely to procrastinate.", "landingp2header": "Instant Gratification", "landingp3": "Whenever you indulge in a bad habit or fail to complete one of your daily tasks, you lose health. If your health drops too low, you lose some of the progress you've made. By providing immediate consequences, Habitica can help break bad habits and procrastination cycles before they cause real-world problems.", "landingp3header": "Consequences", @@ -112,7 +112,7 @@ "marketing2Lead3Title": "Challenge Each Other", "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", "marketing3Header": "Apps and Extensions", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realize that logging into the website to click buttons can be a drag.", + "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realise that logging into the website to click buttons can be a drag.", "marketing3Lead2Title": "Integrations", "marketing3Lead2": "Other **3rd Party Tools** tie Habitica into various aspects of your life. Our API provides easy integration for things like the [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), for which you lose points when browsing unproductive websites, and gain points when on productive ones. [See more here](http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", "marketing4Header": "Organisational Use", @@ -313,16 +313,16 @@ "trackYourGoals": "Track Your Habits and Goals", "trackYourGoalsDesc": "Stay accountable by tracking and managing your Habits, Daily goals, and To-Do list with Habitica’s easy-to-use mobile apps and web interface.", "earnRewards": "Earn Rewards for Your Goals", - "earnRewardsDesc": "Check off tasks to level up your Avatar and unlock in-game features such as battle armor, mysterious pets, magic skills, and even quests!", + "earnRewardsDesc": "Check off tasks to level up your Avatar and unlock in-game features such as battle armour, mysterious pets, magic skills, and even quests!", "battleMonsters": "Battle Monsters with Friends", - "battleMonstersDesc": "Fight monsters with other Habiticans! Use the Gold that you earn to buy in-game or custom rewards, like watching an episode of your favorite TV show.", + "battleMonstersDesc": "Fight monsters with other Habiticans! Use the Gold that you earn to buy in-game or custom rewards, like watching an episode of your favourite TV show.", "playersUseToImprove": "Players Use Habitica to Improve", "healthAndFitness": "Health and Fitness", "healthAndFitnessDesc": "Never motivated to floss? Can't seem to get to the gym? Habitica finally makes it fun to get healthy.", "schoolAndWork": "School and Work", "schoolAndWorkDesc": "Whether you're preparing a report for your teacher or your boss, it's easy to keep track of your progress as you tackle your toughest tasks.", "muchmuchMore": "And much, much more!", - "muchmuchMoreDesc": "Our fully customizable task list means that you can shape Habitica to fit your personal goals. Work on creative projects, emphasize self-care, or pursue a different dream -- it's all up to you.", + "muchmuchMoreDesc": "Our fully customizable task list means that you can shape Habitica to fit your personal goals. Work on creative projects, emphasise self-care, or pursue a different dream -- it's all up to you.", "levelUpAnywhere": "Level Up Anywhere", "levelUpAnywhereDesc": "Our mobile apps make it simple to keep track of your tasks on-the-go. Accomplish your goals with a single tap, no matter where you are.", "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", @@ -331,5 +331,6 @@ "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More", - "communityInstagram": "Instagram" + "communityInstagram": "Instagram", + "minPasswordLength": "Password must be 8 characters or more." } diff --git a/website/common/locales/en_GB/gear.json b/website/common/locales/en_GB/gear.json index ec7be61cf3..8c67213f86 100644 --- a/website/common/locales/en_GB/gear.json +++ b/website/common/locales/en_GB/gear.json @@ -109,7 +109,7 @@ "weaponSpecialNomadsScimitarText": "Nomad's Scimitar", "weaponSpecialNomadsScimitarNotes": "The curved blade of this Scimitar is perfect for attacking Tasks from the back of a mount! Increases Intelligence by <%= int %>.", "weaponSpecialFencingFoilText": "Fencing Foil", - "weaponSpecialFencingFoilNotes": "Should anyone dare to impugn your honor, you'll be ready with this fine foil! Increases Strength by <%= str %>.", + "weaponSpecialFencingFoilNotes": "Should anyone dare to impugn your honour, you'll be ready with this fine foil! Increases Strength by <%= str %>.", "weaponSpecialTachiText": "Tachi", "weaponSpecialTachiNotes": "This light and curved sword will shred your tasks to ribbons! Increases Strength by <%= str %>.", "weaponSpecialAetherCrystalsText": "Aether Crystals", @@ -191,7 +191,7 @@ "weaponSpecialSpring2016WarriorText": "Cheese Mallet", "weaponSpecialSpring2016WarriorNotes": "No one has as many friends as the mouse with tender cheeses. Increases Strength by <%= str %>. Limited Edition 2016 Spring Gear.", "weaponSpecialSpring2016MageText": "Staff of Bells", - "weaponSpecialSpring2016MageNotes": "Abracadabra! So dazzling, you might mesmerize yourself! Ooh... it jingles... Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2016 Spring Gear.", + "weaponSpecialSpring2016MageNotes": "Abracadabra! So dazzling, you might mesmerise yourself! Ooh... it jingles... Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2016 Spring Gear.", "weaponSpecialSpring2016HealerText": "Spring Flower Wand", "weaponSpecialSpring2016HealerNotes": "With a wave and a wink, you bring the fields and forests into bloom! Or bop troublesome mice on the head. Increases Intelligence by <%= int %>. Limited Edition 2016 Spring Gear.", "weaponSpecialSummer2016RogueText": "Electric Rod", @@ -259,7 +259,7 @@ "weaponSpecialSpring2018HealerText": "Garnet Rod", "weaponSpecialSpring2018HealerNotes": "The stones in this staff will focus your power when you cast healing spells! Increases Intelligence by <%= int %>. Limited Edition 2018 Spring Gear.", "weaponSpecialSummer2018RogueText": "Fishing Rod", - "weaponSpecialSummer2018RogueNotes": "This lightweight, practically unbreakable rod and reel can be dual-wielded to maximize your DPS (Dragonfish Per Summer). Increases Strength by <%= str %>. Limited Edition 2018 Summer Gear.", + "weaponSpecialSummer2018RogueNotes": "This lightweight, practically unbreakable rod and reel can be dual-wielded to maximise your DPS (Dragonfish Per Summer). Increases Strength by <%= str %>. Limited Edition 2018 Summer Gear.", "weaponSpecialSummer2018WarriorText": "Betta Fish Spear", "weaponSpecialSummer2018WarriorNotes": "Mighty enough for battle, elegant enough for ceremony, this exquisitely crafted spear shows you will protect your home surf no matter what! Increases Strength by <%= str %>. Limited Edition 2018 Summer Gear.", "weaponSpecialSummer2018MageText": "Lionfish Fin Rays", @@ -279,7 +279,7 @@ "weaponSpecialWinter2019WarriorText": "Snowflake Halberd", "weaponSpecialWinter2019WarriorNotes": "This snowflake was grown, ice crystal by ice crystal, into a diamond-hard blade! Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", "weaponSpecialWinter2019MageText": "Fiery Dragon Staff", - "weaponSpecialWinter2019MageNotes": "Watch out! This explosive staff is ready to help you take on all comers. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear", + "weaponSpecialWinter2019MageNotes": "Watch out! This explosive staff is ready to help you take on all comers. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", "weaponSpecialWinter2019HealerText": "Wand of Winter", "weaponSpecialWinter2019HealerNotes": "Winter can be a time of rest and healing, and so this wand of winter magic can help to soothe the most grievous hurts. Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.", "weaponMystery201411Text": "Pitchfork of Feasting", @@ -425,7 +425,7 @@ "armorSpecial2Text": "Jean Chalard's Noble Tunic", "armorSpecial2Notes": "Makes you extra fluffy! Increases Constitution and Intelligence by <%= attrs %> each.", "armorSpecialTakeThisText": "Take This Armour", - "armorSpecialTakeThisNotes": "This armor was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "armorSpecialTakeThisNotes": "This armour was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", "armorSpecialFinnedOceanicArmorText": "Finned Oceanic Armour", "armorSpecialFinnedOceanicArmorNotes": "Although delicate, this armour makes your skin as harmful to the touch as a fire coral. Increases Strength by <%= str %>.", "armorSpecialPyromancersRobesText": "Pyromancer's Robes", @@ -451,9 +451,9 @@ "armorSpecialSamuraiArmorText": "Samurai Armour", "armorSpecialSamuraiArmorNotes": "This strong, scaled armour is held together by elegant silk cords. Increases Perception by <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Turkey Armor", - "armorSpecialTurkeyArmorBaseNotes": "Keep your drumsticks warm and cozy in this feathery armor! Confers no benefit.", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", - "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", + "armorSpecialTurkeyArmorBaseNotes": "Keep your drumsticks warm and cozy in this feathery armour! Confers no benefit.", + "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armour", + "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armour! Confers no benefit.", "armorSpecialYetiText": "Yeti-Tamer Robe", "armorSpecialYetiNotes": "Fuzzy and fierce. Increases Constitution by <%= con %>. Limited Edition 2013-2014 Winter Gear.", "armorSpecialSkiText": "Ski-sassin Parka", @@ -501,7 +501,7 @@ "armorSpecialFallHealerText": "Gauzy Gear", "armorSpecialFallHealerNotes": "Charge into battle pre-bandaged! Increases Constitution by <%= con %>. Limited Edition 2014 Autumn Gear.", "armorSpecialWinter2015RogueText": "Icicle Drake Armour", - "armorSpecialWinter2015RogueNotes": "This armour is freezing cold, but it will definitely be worth it when you uncover the untold riches at the center of the Icicle Drake hives. Not that you are looking for any such untold riches, because you are truly, definitely, absolutely a genuine Icicle Drake, okay?! Stop asking questions! Increases Perception by <%= per %>. Limited Edition 2014-2015 Winter Gear.", + "armorSpecialWinter2015RogueNotes": "This armour is freezing cold, but it will definitely be worth it when you uncover the untold riches at the centre of the Icicle Drake hives. Not that you are looking for any such untold riches, because you are truly, definitely, absolutely a genuine Icicle Drake, okay?! Stop asking questions! Increases Perception by <%= per %>. Limited Edition 2014-2015 Winter Gear.", "armorSpecialWinter2015WarriorText": "Gingerbread Armour", "armorSpecialWinter2015WarriorNotes": "Cozy and warm, straight from the oven! Increases Constitution by <%= con %>. Limited Edition 2014-2015 Winter Gear.", "armorSpecialWinter2015MageText": "Boreal Robe", @@ -591,7 +591,7 @@ "armorSpecialFall2017RogueText": "Pumpkin Patch Robes", "armorSpecialFall2017RogueNotes": "Need to hide out? Crouch among the Jack o' Lanterns and these robes will conceal you! Increases Perception by <%= per %>. Limited Edition 2017 Autumn Gear.", "armorSpecialFall2017WarriorText": "Strong and Sweet Armor", - "armorSpecialFall2017WarriorNotes": "This armor will protect you like a delicious candy shell. Increases Constitution by <%= con %>. Limited Edition 2017 Autumn Gear.", + "armorSpecialFall2017WarriorNotes": "This armour will protect you like a delicious candy shell. Increases Constitution by <%= con %>. Limited Edition 2017 Autumn Gear.", "armorSpecialFall2017MageText": "Masquerade Robes", "armorSpecialFall2017MageNotes": "What masquerade ensemble would be complete without dramatic and sweeping robes? Increases Intelligence by <%= int %>. Limited Edition 2017 Autumn Gear.", "armorSpecialFall2017HealerText": "Haunted House Armor", @@ -599,7 +599,7 @@ "armorSpecialWinter2018RogueText": "Reindeer Costume", "armorSpecialWinter2018RogueNotes": "You look so cute and fuzzy, who could suspect you are after holiday loot? Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", "armorSpecialWinter2018WarriorText": "Wrapping Paper Armor", - "armorSpecialWinter2018WarriorNotes": "Don't let the papery feel of this armor fool you. It's nearly impossible to rip! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", + "armorSpecialWinter2018WarriorNotes": "Don't let the papery feel of this armour fool you. It's nearly impossible to rip! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", "armorSpecialWinter2018MageText": "Sparkly Tuxedo", "armorSpecialWinter2018MageNotes": "The ultimate in magical formalwear. Increases Intelligence by <%= int %>. Limited Edition 2017-2018 Winter Gear.", "armorSpecialWinter2018HealerText": "Mistletoe Robes", @@ -607,17 +607,17 @@ "armorSpecialSpring2018RogueText": "Feather Suit", "armorSpecialSpring2018RogueNotes": "This fluffy yellow costume will trick your enemies into thinking you're just a harmless ducky! Increases Perception by <%= per %>. Limited Edition 2018 Spring Gear.", "armorSpecialSpring2018WarriorText": "Armor of Dawn", - "armorSpecialSpring2018WarriorNotes": "This colorful plate is forged with the sunrise's fire. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018WarriorNotes": "This colourful plate is forged with the sunrise's fire. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", "armorSpecialSpring2018MageText": "Tulip Robe", "armorSpecialSpring2018MageNotes": "Your spell casting can only improve while clad in these soft, silky petals. Increases Intelligence by <%= int %>. Limited Edition 2018 Spring Gear.", "armorSpecialSpring2018HealerText": "Garnet Armor", - "armorSpecialSpring2018HealerNotes": "Let this bright armor infuse your heart with power for healing. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018HealerNotes": "Let this bright armour infuse your heart with power for healing. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", "armorSpecialSummer2018RogueText": "Pocket Fishing Vest", "armorSpecialSummer2018RogueNotes": "Bobbers? Boxes of hooks? Spare line? Lockpicks? Smoke bombs? Whatever you need on hand for your summer fishing getaway, there's a pocket for it! Increases Perception by <%= per %>. Limited Edition 2018 Summer Gear.", "armorSpecialSummer2018WarriorText": "Betta Tail Armor", - "armorSpecialSummer2018WarriorNotes": "Dazzle onlookers with whorls of magnificent color as you spin and dart through the water. How could any opponent dare strike at this beauty? Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", + "armorSpecialSummer2018WarriorNotes": "Dazzle onlookers with whorls of magnificent colour as you spin and dart through the water. How could any opponent dare strike at this beauty? Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", "armorSpecialSummer2018MageText": "Lionfish Scale Hauberk", - "armorSpecialSummer2018MageNotes": "Venom magic has a reputation for subtlety. Not so this colorful armor, whose message is clear to beast and task alike: watch out! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", + "armorSpecialSummer2018MageNotes": "Venom magic has a reputation for subtlety. Not so this colourful armour, whose message is clear to beast and task alike: watch out! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", "armorSpecialSummer2018HealerText": "Merfolk Monarch Robes", "armorSpecialSummer2018HealerNotes": "These cerulean vestments reveal that you have land-walking feet... well. Not even a monarch can be expected to be perfect. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", "armorSpecialFall2018RogueText": "Alter Ego Frock Coat", @@ -631,7 +631,7 @@ "armorSpecialWinter2019RogueText": "Poinsettia Armor", "armorSpecialWinter2019RogueNotes": "With holiday greenery all about, no one will notice an extra shrubbery! You can move through seasonal gatherings with ease and stealth. Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", "armorSpecialWinter2019WarriorText": "Glacial Armor", - "armorSpecialWinter2019WarriorNotes": "In the heat of battle, this armor will keep you ice cool and ready for action. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.", + "armorSpecialWinter2019WarriorNotes": "In the heat of battle, this armour will keep you ice cool and ready for action. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.", "armorSpecialWinter2019MageText": "Robes of Burning Inspiration", "armorSpecialWinter2019MageNotes": "This fireproof garb will help protect you if any of your flashes of brilliance should happen to backfire! Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.", "armorSpecialWinter2019HealerText": "Midnight Robe", @@ -697,17 +697,17 @@ "armorMystery201711Text": "Carpet Rider Outfit", "armorMystery201711Notes": "This cozy sweater set will help keep you warm as you ride through the sky! Confers no benefit. November 2017 Subscriber Item.", "armorMystery201712Text": "Candlemancer Armor", - "armorMystery201712Notes": "The heat and light generated by this magic armor will warm your heart but never burn your skin! Confers no benefit. December 2017 Subscriber Item.", - "armorMystery201802Text": "Love Bug Armor", - "armorMystery201802Notes": "This shiny armor reflects your strength of heart and infuses it into any Habiticans nearby who may need encouragement! Confers no benefit. February 2018 Subscriber Item.", + "armorMystery201712Notes": "The heat and light generated by this magic armour will warm your heart but never burn your skin! Confers no benefit. December 2017 Subscriber Item.", + "armorMystery201802Text": "Love Bug Armour", + "armorMystery201802Notes": "This shiny armour reflects your strength of heart and infuses it into any Habiticans nearby who may need encouragement! Confers no benefit. February 2018 Subscriber Item.", "armorMystery201806Text": "Alluring Anglerfish Tail", "armorMystery201806Notes": "This sinuous tail features glowing spots to light your way through the deep. Confers no benefit. June 2018 Subscriber Item.", "armorMystery201807Text": "Sea Serpent Tail", "armorMystery201807Notes": "This powerful tail will propel you through the sea at incredible speeds! Confers no benefit. July 2018 Subscriber Item.", "armorMystery201808Text": "Lava Dragon Armor", - "armorMystery201808Notes": "This armor is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.", + "armorMystery201808Notes": "This armour is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.", "armorMystery201809Text": "Armor of Autumn Leaves", - "armorMystery201809Notes": "You are not only a small and fearsome leaf puff, you are sporting the most beautiful colors of the season! Confers no benefit. September 2018 Subscriber Item.", + "armorMystery201809Notes": "You are not only a small and fearsome leaf puff, you are sporting the most beautiful colours of the season! Confers no benefit. September 2018 Subscriber Item.", "armorMystery201810Text": "Dark Forest Robes", "armorMystery201810Notes": "These robes are extra warm to protect you from the ghastly cold of haunted realms. Confers no benefit. October 2018 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", @@ -777,7 +777,7 @@ "armorArmoireSwanDancerTutuText": "Swan Dancer Tutu", "armorArmoireSwanDancerTutuNotes": "You just might fly away into the air as you spin in this gorgeous feathered tutu. Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Swan Dancer Set (Item 2 of 3).", "armorArmoireAntiProcrastinationArmorText": "Anti-Procrastination Armour", - "armorArmoireAntiProcrastinationArmorNotes": "Infused with ancient productivity spells, this steel armor will give you extra strength to battle your tasks. Increases Strength by <%= str %>. Enchanted Armoire: Anti-Procrastination Set (Item 2 of 3).", + "armorArmoireAntiProcrastinationArmorNotes": "Infused with ancient productivity spells, this steel armour will give you extra strength to battle your tasks. Increases Strength by <%= str %>. Enchanted Armoire: Anti-Procrastination Set (Item 2 of 3).", "armorArmoireYellowPartyDressText": "Yellow Party Dress", "armorArmoireYellowPartyDressNotes": "You're perceptive, strong, smart, and so fashionable! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Yellow Hairbow Set (Item 2 of 2).", "armorArmoireFarrierOutfitText": "Farrier Outfit", @@ -785,7 +785,7 @@ "armorArmoireCandlestickMakerOutfitText": "Candlestick Maker Outfit", "armorArmoireCandlestickMakerOutfitNotes": "This sturdy set of clothes will protect you from hot wax spills as you ply your craft! Increases Constitution by <%= con %>. Enchanted Armoire: Candlestick Maker Set (Item 1 of 3).", "armorArmoireWovenRobesText": "Woven Robes", - "armorArmoireWovenRobesNotes": "Display your weaving work proudly by wearing this colorful robe! Increases Constitution by <%= con %> and Intelligence by <%= int %>. Enchanted Armoire: Weaver Set (Item 1 of 3).", + "armorArmoireWovenRobesNotes": "Display your weaving work proudly by wearing this colourful robe! Increases Constitution by <%= con %> and Intelligence by <%= int %>. Enchanted Armoire: Weaver Set (Item 1 of 3).", "armorArmoireLamplightersGreatcoatText": "Lamplighter's Greatcoat", "armorArmoireLamplightersGreatcoatNotes": "This heavy woolen coat can stand up to the harshest wintry night! Increases Perception by <%= per %>. Enchanted Armoire: Lamplighter's Set (Item 2 of 4).", "armorArmoireCoachDriverLiveryText": "Coach Driver's Livery", @@ -803,7 +803,7 @@ "armorArmoirePiraticalPrincessGownText": "Piratical Princess Gown", "armorArmoirePiraticalPrincessGownNotes": "This luxuriant garment has many pockets for concealing weapons and loot! Increases Perception by <%= per %>. Enchanted Armoire: Piratical Princess Set (Item 2 of 4).", "armorArmoireJeweledArcherArmorText": "Jeweled Archer Armor", - "armorArmoireJeweledArcherArmorNotes": "This finely crafted armor will protect you from projectiles or errant red Dailies! Increases Constitution by <%= con %>. Enchanted Armoire: Jeweled Archer Set (Item 2 of 3).", + "armorArmoireJeweledArcherArmorNotes": "This finely crafted armour will protect you from projectiles or errant red Dailies! Increases Constitution by <%= con %>. Enchanted Armoire: Jeweled Archer Set (Item 2 of 3).", "armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding", "armorArmoireCoverallsOfBookbindingNotes": "Everything you need in a set of coveralls, including pockets for everything. A pair of goggles, loose change, a golden ring... Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 2 of 4).", "armorArmoireRobeOfSpadesText": "Robe of Spades", @@ -811,9 +811,9 @@ "armorArmoireSoftBlueSuitText": "Soft Blue Suit", "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", "armorArmoireSoftGreenSuitText": "Soft Green Suit", - "armorArmoireSoftGreenSuitNotes": "Green is the most refreshing color! Ideal for resting those tired eyes... mmm, or even a nap... Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 2 of 3).", + "armorArmoireSoftGreenSuitNotes": "Green is the most refreshing colour! Ideal for resting those tired eyes... mmm, or even a nap... Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 2 of 3).", "armorArmoireSoftRedSuitText": "Soft Red Suit", - "armorArmoireSoftRedSuitNotes": "Red is such an invigorating color. If you need to wake up bright and early, this suit could make the perfect pajamas... Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Red Loungewear Set (Item 2 of 3).", + "armorArmoireSoftRedSuitNotes": "Red is such an invigorating colour. If you need to wake up bright and early, this suit could make the perfect pajamas... Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Red Loungewear Set (Item 2 of 3).", "armorArmoireScribesRobeText": "Scribe's Robes", "armorArmoireScribesRobeNotes": "These velvety robes are woven with inspirational and motivational magic. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Scribe Set (Item 1 of 3).", "headgear": "helm", @@ -833,7 +833,7 @@ "headRogue1Text": "Leather Hood", "headRogue1Notes": "Basic protective cowl. Increases Perception by <%= per %>.", "headRogue2Text": "Black Leather Hood", - "headRogue2Notes": "Useful for both defense and disguise. Increases Perception by <%= per %>.", + "headRogue2Notes": "Useful for both defence and disguise. Increases Perception by <%= per %>.", "headRogue3Text": "Camouflage Hood", "headRogue3Notes": "Rugged, but doesn't impede hearing. Increases Perception by <%= per %>.", "headRogue4Text": "Penumbral Hood", @@ -863,7 +863,7 @@ "headSpecial0Text": "Shade Helm", "headSpecial0Notes": "Blood and ash, lava and obsidian give this helm its imagery and power. Increases Intelligence by <%= int %>.", "headSpecial1Text": "Crystal Helm", - "headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.", + "headSpecial1Notes": "The favoured crown of those who lead by example. Increases all Stats by <%= attrs %>.", "headSpecial2Text": "Nameless Helm", "headSpecial2Notes": "A testament to those who gave of themselves while asking nothing in return. Increases Intelligence and Strength by <%= attrs %> each.", "headSpecialTakeThisText": "Take This Helm", @@ -949,7 +949,7 @@ "headSpecialSpring2015MageText": "Stage Mage Hat", "headSpecialSpring2015MageNotes": "Which came first, the bunny or the hat? Increases Perception by <%= per %>. Limited Edition 2015 Spring Gear.", "headSpecialSpring2015HealerText": "Comforting Crown", - "headSpecialSpring2015HealerNotes": "The pearl at the center of this crown calms and comforts those around it. Increases Intelligence by <%= int %>. Limited Edition 2015 Spring Gear.", + "headSpecialSpring2015HealerNotes": "The pearl at the centre of this crown calms and comforts those around it. Increases Intelligence by <%= int %>. Limited Edition 2015 Spring Gear.", "headSpecialSummer2015RogueText": "Renegade Hat", "headSpecialSummer2015RogueNotes": "This pirate hat fell overboard and has been decorated with scraps of fire coral. Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", "headSpecialSummer2015WarriorText": "Jeweled Oceanic Helm", @@ -1071,7 +1071,7 @@ "headSpecialNye2018Text": "Outlandish Party Hat", "headSpecialNye2018Notes": "You've received an Outlandish Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.", "headSpecialWinter2019RogueText": "Poinsettia Helm", - "headSpecialWinter2019RogueNotes": "This leafy helm will attain its brightest red color right around the darkest days of winter, helping you blend in with holiday decor! Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", + "headSpecialWinter2019RogueNotes": "This leafy helm will attain its brightest red colour right around the darkest days of winter, helping you blend in with holiday decor! Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", "headSpecialWinter2019WarriorText": "Glacial Helm", "headSpecialWinter2019WarriorNotes": "It's important to keep a cool head! This icy helm will protect you from any opponent's blows. Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", "headSpecialWinter2019MageText": "Flaming Fireworks", @@ -1139,7 +1139,7 @@ "headMystery201707Text": "Jellymancer Helm", "headMystery201707Notes": "Need some extra hands for your tasks? This translucent jelly helm has quite a few tentacles to lend you help! Confers no benefit. July 2017 Subscriber Item.", "headMystery201710Text": "Imperious Imp Helm", - "headMystery201710Notes": "This helm makes you look intimidating... but it won't do any favors for your depth perception! Confers no benefit. October 2017 Subscriber Item.", + "headMystery201710Notes": "This helm makes you look intimidating... but it won't do any favours for your depth perception! Confers no benefit. October 2017 Subscriber Item.", "headMystery201712Text": "Candlemancer Crown", "headMystery201712Notes": "This crown will bring light and warmth to even the darkest winter night. Confers no benefit. December 2017 Subscriber Item.", "headMystery201802Text": "Love Bug Helm", @@ -1157,7 +1157,7 @@ "headMystery201809Text": "Crown of Autumn Flowers", "headMystery201809Notes": "The last flowers of autumn's warm days are a reminder of the beauty of the season. Confers no benefit. September 2018 Subscriber Item.", "headMystery201810Text": "Dark Forest Helm", - "headMystery201810Notes": "If you find yourself traveling through a spooky place, the glowing red eyes of this helm will surely scare away any enemies in your path. Confers no benefit. October 2018 Subscriber Item.", + "headMystery201810Notes": "If you find yourself travelling through a spooky place, the glowing red eyes of this helm will surely scare away any enemies in your path. Confers no benefit. October 2018 Subscriber Item.", "headMystery201811Text": "Splendid Sorcerer's Hat", "headMystery201811Notes": "Wear this feathered hat to stand out at even the fanciest wizardly gatherings! Confers no benefit. November 2018 Subscriber Item.", "headMystery201901Text": "Polaris Helm", @@ -1181,7 +1181,7 @@ "headArmoireRancherHatText": "Rancher Hat", "headArmoireRancherHatNotes": "Round up your pets and wrangle your mounts while wearing this magical Rancher Hat! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 1 of 3).", "headArmoireBlueHairbowText": "Blue Hairbow", - "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", + "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Blue Hairbow Set (Item 1 of 2).", "headArmoireRoyalCrownText": "Royal Crown", "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", @@ -1191,7 +1191,7 @@ "headArmoireYellowHairbowText": "Yellow Hairbow", "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Yellow Hairbow Set (Item 1 of 2).", "headArmoireRedFloppyHatText": "Red Floppy Hat", - "headArmoireRedFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a radiant red color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Red Loungewear Set (Item 1 of 3).", + "headArmoireRedFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a radiant red colour. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Red Loungewear Set (Item 1 of 3).", "headArmoirePlagueDoctorHatText": "Plague Doctor Hat", "headArmoirePlagueDoctorHatNotes": "An authentic hat worn by the doctors who battle the Plague of Procrastination! Increases Strength by <%= str %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 1 of 3).", "headArmoireBlackCatText": "Black Cat Hat", @@ -1199,7 +1199,7 @@ "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireBlueFloppyHatText": "Blue Floppy Hat", - "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Blue Loungewear Set (Item 1 of 3).", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue colour. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Blue Loungewear Set (Item 1 of 3).", "headArmoireShepherdHeaddressText": "Shepherd Headdress", "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", @@ -1217,7 +1217,7 @@ "headArmoireGraduateCapText": "Mortar Board", "headArmoireGraduateCapNotes": "Congratulations! Your deep thoughts have earned you this thinking cap. Increases Intelligence by <%= int %>. Enchanted Armoire: Graduate Set (Item 3 of 3).", "headArmoireGreenFloppyHatText": "Green Floppy Hat", - "headArmoireGreenFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a gorgeous green color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 1 of 3).", + "headArmoireGreenFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a gorgeous green colour. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 1 of 3).", "headArmoireCannoneerBandannaText": "Cannoneer Bandanna", "headArmoireCannoneerBandannaNotes": "'Tis a cannoneer's life for me! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cannoneer Set (Item 3 of 3).", "headArmoireFalconerCapText": "Falconer Cap", @@ -1369,7 +1369,7 @@ "shieldSpecialSpring2016RogueText": "Fire Bolas", "shieldSpecialSpring2016RogueNotes": "You've mastered the ball, the club, and the knife. Now you advance to juggling fire! Woo! Increases Strength <%= str %>. Limited Edition 2016 Spring Gear.", "shieldSpecialSpring2016WarriorText": "Cheese Wheel", - "shieldSpecialSpring2016WarriorNotes": "You braved fiendish traps to procure this defense-boosting food. Increases Constitution by <%= con %>. Limited Edition 2016 Spring Gear.", + "shieldSpecialSpring2016WarriorNotes": "You braved fiendish traps to procure this defence-boosting food. Increases Constitution by <%= con %>. Limited Edition 2016 Spring Gear.", "shieldSpecialSpring2016HealerText": "Floral Buckler", "shieldSpecialSpring2016HealerNotes": "The April Fool claims this little shield will block Shiny Seeds. Don't believe him. Increases Constitution by <%= con %>. Limited Edition 2016 Spring Gear.", "shieldSpecialSummer2016RogueText": "Electric Rod", @@ -1763,7 +1763,7 @@ "shieldMystery201902Text": "Cryptic Confetti", "shieldMystery201902Notes": "This glittery paper forms magic hearts that slowly drift and dance in the air. Confers no benefit. February 2019 Subscriber Item", "shieldArmoireMightyPizzaText": "Mighty Pizza", - "shieldArmoireMightyPizzaNotes": "Sure, it's a pretty good shield, but we strongly suggest you eat this fine, fine pizza. Increases Perception by <%= per %>. Enchanted Armoire: Chef Set (Item 4 of 4). ", + "shieldArmoireMightyPizzaNotes": "Sure, it's a pretty good shield, but we strongly suggest you eat this fine, fine pizza. Increases Perception by <%= per %>. Enchanted Armoire: Chef Set (Item 4 of 4).", "eyewearMystery201902Text": "Cryptic Crush Mask", "eyewearMystery201902Notes": "This mysterious mask hides your identity but not your winning smile. Confers no benefit. February 2019 Subscriber Item.", "weaponSpecialSummer2019HealerText": "Bubble Wand", @@ -1780,5 +1780,250 @@ "weaponSpecialSpring2019WarriorNotes": "Bad habits cower before this verdant blade. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.", "weaponSpecialSpring2019WarriorText": "Stem Sword", "weaponSpecialSpring2019RogueNotes": "These weapons contain the power of the sky and rain. We recommend that you not use them while immersed in water. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.", - "weaponSpecialSpring2019RogueText": "Lightning Bolt" + "weaponSpecialSpring2019RogueText": "Lightning Bolt", + "shieldSpecialPiDayText": "Pi Shield", + "shieldSpecialFall2019WarriorNotes": "The dark sheen of a raven's feather made solid, this shield will frustrate all attacks. Increases Constitution by <%= con %>. Limited Edition 2019 Autumn Gear.", + "shieldSpecialFall2019HealerText": "Grotesque Grimoire", + "shieldSpecialFall2019HealerNotes": "Harness the dark side of the Healer's arts with this Grimoire! Increases Constitution by <%= con %>. Limited Edition 2019 Autumn Gear.", + "shieldSpecialWinter2020WarriorText": "Round Conifer Cone", + "shieldSpecialWinter2020WarriorNotes": "Use it as a shield until the seeds drop, and then you can put it on a wreath! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.", + "shieldSpecialWinter2020HealerText": "Giant Cinnamon Stick", + "shieldSpecialWinter2020HealerNotes": "Do you feel you are too good for this world, too pure? Only this beauty of a spice will do. Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.", + "shieldArmoireTrustyUmbrellaText": "Trusty Umbrella", + "shieldArmoireTrustyUmbrellaNotes": "Mysteries are often accompanied by inclement weather, so be prepared! Increases Intelligence by <%= int %>. Enchanted Armoire: Detective Set (Item 4 of 4).", + "shieldArmoirePolishedPocketwatchText": "Polished Pocketwatch", + "shieldArmoirePolishedPocketwatchNotes": "You've got the time. And it looks very nice on you. Increases Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", + "shieldArmoireMasteredShadowText": "Mastered Shadow", + "shieldArmoireMasteredShadowNotes": "Your powers have brought these swirling shadows to your side to do your bidding. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Shadow Master Set (Item 4 of 4).", + "shieldArmoireAlchemistsScaleText": "Alchemist's Scale", + "shieldArmoireAlchemistsScaleNotes": "Ensure that your mystical ingredients are properly measured using this fine piece of equipment. Increases Intelligence by <%= int %>. Enchanted Armoire: Alchemist Set (Item 4 of 4).", + "shieldArmoireBirthdayBannerText": "Birthday Banner", + "shieldArmoireBirthdayBannerNotes": "Celebrate your special day, the special day of someone you love, or break this out for Habitica's Birthday on January 31! Increases Strength by <%= str %>. Enchanted Armoire: Happy Birthday Set (Item 4 of 4).", + "backMystery201905Text": "Dazzling Dragon Wings", + "backMystery201905Notes": "Fly to untold realms with these iridescent wings. Confers no benefit. May 2019 Subscriber Item.", + "backMystery201912Text": "Polar Pixie Wings", + "shieldSpecialFall2019WarriorText": "Raven-Dark Shield", + "shieldSpecialSummer2019MageNotes": "Sweating in the summer sun? No! Performing a simple elemental conjuration to fill the lily pond. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.", + "shieldSpecialSummer2019MageText": "Drops of Pure Water", + "shieldSpecialSummer2019HealerNotes": "Let those who need help know you're coming with the loud blast of this shell trumpet. Limited Edition 2019 Summer Gear. Increases Constitution by 9. ", + "shieldSpecialSummer2019HealerText": "Conch Trumpet", + "shieldSpecialSummer2019WarriorNotes": "Turtle up behind this hefty round shield, etched in the pattern of your favourite reptile's back. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.", + "shieldSpecialSummer2019WarriorText": "Half-Shell Shield", + "shieldSpecialSpring2019HealerNotes": "This bright shield is actually made of candy-coated chocolate. Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.", + "shieldSpecialSpring2019HealerText": "Eggshell Shield", + "shieldSpecialSpring2019WarriorNotes": "Let the power of chlorophyll keep your enemies at bay! Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.", + "shieldSpecialKS2019Notes": "Sparkling like the shell of a gryphon egg, this magnificent shield shows you how to stand ready to help when your own burdens are light. Increases Perception by <%= per %>.", + "shieldSpecialSpring2019WarriorText": "Leafy Shield", + "shieldSpecialKS2019Text": "Mythic Gryphon Shield", + "shieldSpecialPiDayNotes": "We dare you to calculate the ratio of this shield's circumference to its deliciousness! Confers no benefit.", + "headArmoireFrostedHelmNotes": "The perfect headgear for any celebration! Increases Intelligence by <%= int %>. Enchanted Armoire: Happy Birthday Set (Item 1 of 4).", + "headArmoireFrostedHelmText": "Frosted Helm", + "headArmoireEarflapHatNotes": "If you're looking to keep your head toasty warm, this hat has you covered! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Duffle Coat Set (Item 2 of 2).", + "headArmoireEarflapHatText": "Earflap Hat", + "headArmoireAlchemistsHatNotes": "While hats are not strictly necessary for alchemical practice, looking cool certainly doesn't hurt anything! Increases Perception by <%= per %>. Enchanted Armoire: Alchemist Set (Item 2 of 4).", + "headArmoireAlchemistsHatText": "Alchemist's Hat", + "headArmoireShadowMastersHoodNotes": "This hood grants you the power to see through even the deepest darkness. It may occasionally require eyedrops, though. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Shadow Master Set (Item 2 of 4).", + "headArmoireShadowMastersHoodText": "Shadow Master's Hood", + "headArmoireDeerstalkerCapNotes": "This cap is perfect for rural excursions, but also is acceptable gear for mystery-solving! Increases Intelligence by <%= int %>. Enchanted Armoire: Detective Set (Item 1 of 4).", + "headArmoireDeerstalkerCapText": "Deerstalker Cap", + "headArmoireAstronomersHatNotes": "A perfect hat for celestial observation or a fancy wizard brunch. Increases Constitution by <%= con %>. Enchanted Armoire: Astronomer Mage Set (Item 2 of 3).", + "headArmoireAstronomersHatText": "Astronomer's Hat", + "headArmoireBoaterHatNotes": "This straw chapeau is the bee's knees! Increases Strength, Constitution, and Perception by <%= attrs %> each. Enchanted Armoire: Boating Set (Item 2 of 3).", + "headArmoireBoaterHatText": "Boater Hat", + "headArmoireNephriteHelmNotes": "The carved jade plume atop this helm is enchanted to enhance your aim. Increases Perception by <%= per %> and Intelligence by <%= int %>. Enchanted Armoire: Nephrite Archer Set (Item 2 of 3).", + "headArmoireNephriteHelmText": "Nephrite Helm", + "headArmoireTricornHatNotes": "Become a revolutionary jokester! Increases Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "headArmoireTricornHatText": "Tricorn Hat", + "headMystery202001Notes": "Your hearing will be so sharp, you'll hear the stars twinkling and the moon spinning. Confers no benefit. January 2020 Subscriber Item.", + "headMystery202001Text": "Fabled Fox Ears", + "headMystery201912Notes": "This glittering snowflake grants you resistance to the biting cold no matter how high you fly! Confers no benefit. December 2019 Subscriber Item.", + "headMystery201912Text": "Polar Pixie Crown", + "headMystery201911Notes": "Each of the crystal points attached to this hat endows you with a special power: mystic clairvoyance, arcane wisdom, and... sorcerous plate spinning? All right then. Confers no benefit. November 2019 Subscriber Item.", + "headMystery201911Text": "Charmed Crystal Hat", + "headMystery201910Text": "Cryptic Flame", + "headMystery201909Text": "Affable Acorn Hat", + "headMystery201907Notes": "Nothing says “I'm relaxing here!” like a backwards cap. Confers no benefit. July 2019 Subscriber Item.", + "headMystery201907Text": "Backwards Cap", + "headMystery201904Text": "Opulent Opal Circlet", + "headMystery201903Notes": "Some may call you an egghead, but that's OK because you know how to take a yolk. Confers no benefit. March 2019 Subscriber Item.", + "headSpecialWinter2020HealerNotes": "Please remove it from your head before attempting to brew chai or coffee with it. Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.", + "headMystery201903Text": "Sunny Side Up Helm", + "headSpecialWinter2020HealerText": "Star Anise Emblem", + "headSpecialWinter2020MageNotes": "Oh! How the bells / Sweet golden bells / All seem to say, / “Cast ‘Burst of Flames’” Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.", + "headSpecialWinter2020MageText": "Bell Crown", + "headSpecialWinter2020WarriorNotes": "A prickly feeling on your scalp is a small price to pay for seasonal magnificence. Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.", + "headSpecialWinter2020WarriorText": "Snow-Dusted Headdress", + "headSpecialWinter2020RogueNotes": "A Rogue walks down the street in that hat, people know they're not afraid of anything. Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.", + "headSpecialWinter2020RogueText": "Floofy Stocking Cap", + "headSpecialNye2019Text": "Outrageous Party Hat", + "headSpecialNye2019Notes": "You've received an Outrageous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.", + "headSpecialFall2019MageNotes": "Its single baleful eye does inhibit depth perception, but that is a small price to pay for the way it hones your focus to a single, intense point. Increases Perception by <%= per %>. Limited Edition 2019 Autumn Gear.", + "headSpecialFall2019MageText": "Cyclops Mask", + "headMystery201910Notes": "These flames reveal arcane secrets before your very eyes! Confers no benefit. October 2019 Subscriber Item.", + "headMystery201909Notes": "Every acorn needs a hat! Er, cupule, if you want to get technical about it. Confers no benefit. September 2019 Subscriber Item.", + "headSpecialFall2019WarriorText": "Obsidian Skull Helmet", + "headSpecialFall2019WarriorNotes": "The dark eye-sockets of this skull helmet will daunt the bravest of your enemies. Increases Strength by <%= str %>. Limited Edition 2019 Autumn Gear.", + "headSpecialFall2019RogueNotes": "Did you find this headpiece at an auction of possibly-cursed costume pieces, or in the attic of an eccentric grandparent? Whatever its origin, its age and wear add to your air of mystery. Increases Perception by <%= per %>. Limited Edition 2019 Autumn Gear.", + "headSpecialSummer2019HealerText": "Conch Crown", + "headSpecialFall2019RogueText": "Antique Opera Hat", + "headSpecialSummer2019MageNotes": "Contrary to popular belief, your head is not an appropriate place for frogs to perch. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.", + "headSpecialSummer2019WarriorNotes": "It won't let you pull your head down between your shoulders, but it will protect you if you bonk the bottom of a boat. Increases Strength by <%= str %>. Limited Edition 2019 Summer Gear.", + "headSpecialSummer2019MageText": "Lily Pad Hat", + "headSpecialSummer2019WarriorText": "Turtle Helm", + "headSpecialSummer2019RogueNotes": "This helm gives you a 360 degree view of surrounding waters, which is perfect for sneaking up on unsuspecting red Dailies. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.", + "headSpecialSummer2019RogueText": "Hammerhead Helm", + "headSpecialSpring2019HealerNotes": "Be ready for the first day of spring with this cute beaky helm. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.", + "headSpecialSpring2019HealerText": "Robin Helm", + "headSpecialSpring2019MageNotes": "A glowing amber gem grants this hat the power of arcane natural forces. Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.", + "headSpecialSpring2019MageText": "Amber Hat", + "headSpecialSpring2019WarriorNotes": "This helm is unbreakable and tough! Also it attracts butterflies. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.", + "headSpecialSpring2019WarriorText": "Orchid Helm", + "headSpecialSpring2019RogueNotes": "No one will notice a cloud quietly drifting toward their stash of Gold, right? Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.", + "headSpecialSpring2019RogueText": "Cloud Helm", + "headSpecialKS2019Notes": "Adorned with a gryphon's likeness and plumage, this glorious helmet symbolises the way your skills and bearing stand as an example to others. Increases Intelligence by <%= int %>.", + "headSpecialKS2019Text": "Mythic Gryphon Helm", + "headSpecialPiDayNotes": "Try to balance this slice of delicious pie on your head while walking in a circle. Or throw it at a red Daily! Or you could just eat it. Your choice! Confers no benefit.", + "headSpecialPiDayText": "Pi Hat", + "armorArmoireLayerCakeArmorNotes": "It's protective and tasty! Increases Constitution by <%= con %>. Enchanted Armoire: Happy Birthday Set (Item 2 of 4).", + "armorArmoireDuffleCoatText": "Duffle Coat", + "armorArmoireAlchemistsRobeNotes": "Any number of dangerous elixirs are involved in creating arcane metals and gems, and these heavy robes will protect you from harm and unintended side effects! Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Alchemist Set (Item 1 of 4).", + "armorArmoireAlchemistsRobeText": "Alchemist's Robe", + "armorArmoireShadowMastersRobeNotes": "The fabric of this flowy robe is woven from the darkest shadows in the deepest caves of Habitica. Increases Constitution by <%= con %>. Enchanted Armoire: Shadow Master Set (Item 1 of 4).", + "armorArmoireShadowMastersRobeText": "Shadow Master's Robe", + "armorArmoireInvernessCapeNotes": "This sturdy garment will let you search for clues in any type of weather. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Detective Set (Item 2 of 4).", + "armorArmoireInvernessCapeText": "Inverness Cape", + "armorArmoireAstronomersRobeNotes": "Turns out silk and starlight make a fabric that is not only magical, but very breathable. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Astronomer Mage Set (Item 1 of 3).", + "armorArmoireAstronomersRobeText": "Astronomer's Robe", + "armorArmoireBoatingJacketNotes": "Whether you're on a swanky yacht or in a jalopy, you'll be the cat's meow in this jacket and tie. Increases Strength, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Boating Set (Item 1 of 3).", + "armorArmoireBoatingJacketText": "Boating Jacket", + "armorMystery201909Notes": "Your tough exterior is protective, but it's still best to keep an eye out for squirrels... Confers no benefit. September 2019 Subscriber Item.", + "armorMystery201908Notes": "These legs were made for dancing! And that's just what they'll do. Confers no benefit. August 2019 Subscriber Item.", + "armorMystery201908Text": "Footloose Faun Costume", + "armorMystery201907Notes": "Stay cool and look cool on even the hottest summer day. Confers no benefit. July 2019 Subscriber Item.", + "armorMystery201907Text": "Flowery Shirt", + "armorMystery201906Notes": "We will spare you a pun about “playing koi.” Oh wait, oops. Confers no benefit. June 2019 Subscriber Item.", + "backMystery201912Notes": "Glide silently across sparkling snowfields and shimmering mountains with these icy wings. Confers no benefit. December 2019 Subscriber Item.", + "backMystery202001Text": "Five Tails of Fable", + "backMystery202001Notes": "These fluffy tails contain celestial power, and also a high level of cuteness! Confers no benefit. January 2020 Subscriber Item.", + "headAccessoryMystery201905Text": "Dazzling Dragon Horns", + "headAccessoryMystery201905Notes": "These horns are as sharp as they are shimmery. Confers no benefit. May 2019 Subscriber Item.", + "headAccessoryMystery201906Text": "Kindly Koi Ears", + "headAccessoryMystery201906Notes": "Legend has it these finny ears help merfolk hear the calls and songs of all the denizens of the deep! Confers no benefit. June 2019 Subscriber Item.", + "headAccessoryMystery201908Text": "Footloose Faun Horns", + "headAccessoryMystery201908Notes": "If wearing horns floats your goat, you're in luck! Confers no benefit. August 2019 Subscriber Item.", + "eyewearSpecialBlackHalfMoonText": "Black Half-Moon Eyeglasses", + "eyewearSpecialBlackHalfMoonNotes": "Glasses with a black frame and crescent lenses. Confers no benefit.", + "eyewearSpecialBlueHalfMoonText": "Blue Half-Moon Eyeglasses", + "eyewearSpecialBlueHalfMoonNotes": "Glasses with a blue frame and crescent lenses. Confers no benefit.", + "eyewearSpecialGreenHalfMoonText": "Green Half-Moon Eyeglasses", + "eyewearSpecialGreenHalfMoonNotes": "Glasses with a green frame and crescent lenses. Confers no benefit.", + "eyewearSpecialPinkHalfMoonText": "Pink Half-Moon Eyeglasses", + "eyewearSpecialPinkHalfMoonNotes": "Glasses with a pink frame and crescent lenses. Confers no benefit.", + "eyewearSpecialRedHalfMoonText": "Red Half-Moon Eyeglasses", + "eyewearSpecialRedHalfMoonNotes": "Glasses with a red frame and crescent lenses. Confers no benefit.", + "eyewearSpecialWhiteHalfMoonText": "White Half-Moon Eyeglasses", + "eyewearSpecialWhiteHalfMoonNotes": "Glasses with a white frame and crescent lenses. Confers no benefit.", + "eyewearSpecialYellowHalfMoonText": "Yellow Half-Moon Eyeglasses", + "eyewearSpecialYellowHalfMoonNotes": "Glasses with a yellow frame and crescent lenses. Confers no benefit.", + "eyewearSpecialKS2019Text": "Mythic Gryphon Visor", + "eyewearSpecialKS2019Notes": "Bold as a gryphon's... hmm, gryphons don't have visors. It reminds you to... oh, who are we kidding, it just looks cool! Confers no benefit.", + "eyewearSpecialFall2019RogueText": "Bone-White Half Mask", + "eyewearSpecialFall2019RogueNotes": "You'd think a full mask would protect your identity better, but people tend to be too awestruck by its stark design to take note of any identifying features left revealed. Confers no benefit. Limited Edition 2019 Autumn Gear.", + "eyewearSpecialFall2019HealerText": "Dark Visage", + "eyewearSpecialFall2019HealerNotes": "Steel yourself against the toughest foes with this inscrutable mask. Confers no benefit. Limited Edition 2019 Autumn Gear.", + "armorMystery201906Text": "Kindly Koi Tail", + "armorMystery201904Notes": "This shining garment has opals sewn into the front panel to grant you arcane powers and a fabulous look. Confers no benefit. April 2019 Subscriber Item.", + "armorMystery201904Text": "Opalescent Outfit", + "armorMystery201903Notes": "People are dye-ing to know where you got this egg-cellent outfit! Confers no benefit. March 2019 Subscriber Item.", + "armorSpecialWinter2020HealerNotes": "An opulent gown for those with festive zest! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.", + "armorSpecialWinter2020HealerText": "Orange Peel Gown", + "armorSpecialWinter2020MageNotes": "Ring in the new year warm, comfy, and buffered against excessive vibration. Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.", + "armorSpecialWinter2020MageText": "Curvy Coat", + "armorSpecialWinter2020WarriorNotes": "O mighty pine, o towering fir, lend your strength. Or rather, your Constitution! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.", + "armorSpecialWinter2020RogueNotes": "While no doubt you can brave storms with the inner warmth of your drive and devotion, it doesn't hurt to dress for the weather. Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.", + "armorSpecialWinter2020RogueText": "Poofy Parka", + "armorSpecialFall2019HealerNotes": "It's said these robes are made of pure night. Use the dark power wisely! Increases Constitution by <%= con %>. Limited Edition 2019 Autumn Gear.", + "armorSpecialFall2019HealerText": "Robes of Darkness", + "armorSpecialFall2019MageNotes": "Its namesake met a terrible fate. But you will not be so easily tricked! Garb yourself in this mantle of legend and nobody will surpass you. Increases Intelligence by <%= int %>. Limited Edition 2019 Autumn Gear.", + "armorSpecialFall2019MageText": "Smock of Polyphemus", + "armorSpecialFall2019WarriorNotes": "These feathered robes grant the power of flight, allowing you to soar over any battle. Increases Constitution by <%= con %>. Limited Edition 2019 Autumn Gear.", + "armorSpecialFall2019WarriorText": "Wings of Night", + "armorSpecialFall2019RogueNotes": "This outfit comes complete with white gloves, and is ideal for brooding in your private box above the stage or making startling entrances down grand staircases. Increases Perception by <%= per %>. Limited Edition 2019 Autumn Gear.", + "armorSpecialFall2019RogueText": "Caped Opera Coat", + "armorSpecialSummer2019HealerNotes": "Glide sleekly through warm coastal waters with this elegant tail. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.", + "armorSpecialSummer2019HealerText": "Tropical Tides Tail", + "armorSpecialSummer2019MageNotes": "The lilies will know you as one of their own, and will not fear your approach. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.", + "armorSpecialSummer2019MageText": "Floral Frock", + "armorSpecialSummer2019RogueNotes": "This sinuous tail is perfect for making tight turns during daring aquatic escapes. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.", + "armorSpecialSummer2019RogueText": "Hammerhead Tail", + "armorSpecialSpring2019HealerNotes": "Your bright feathers will let everyone know that the cold and dark of winter has passed. Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.", + "armorSpecialSpring2019HealerText": "Robin Costume", + "eyewearMystery201907Text": "Sweet Sunglasses", + "eyewearMystery201907Notes": "Look awesome while protecting your eyes from harmful UV rays! Confers no benefit. July 2019 Subscriber Item.", + "armorSpecialSpring2019MageText": "Amber Robes", + "armorSpecialSpring2019RogueNotes": "Some very tuff fluff. Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.", + "weaponArmoireHappyBannerNotes": "Is the “H” for Happy, or Habitica? Your choice! Increases Perception by <%= per %>. Enchanted Armoire: Happy Birthday Set (Item 3 of 4).", + "weaponArmoireHappyBannerText": "Happy Banner", + "weaponArmoireAlchemistsDistillerNotes": "Purify metals and other magical compounds with this shiny brass instrument. Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Alchemist Set (Item 3 of 4).", + "weaponArmoireAlchemistsDistillerText": "Alchemist's Distiller", + "weaponArmoireShadowMastersMaceNotes": "Creatures of darkness will obey your every command when you wave this glowing mace. Increases Perception by <%= per %>. Enchanted Armoire: Shadow Master Set (Item 3 of 4).", + "weaponArmoireShadowMastersMaceText": "Shadow Master's Mace", + "weaponArmoireResplendentRapierNotes": "Demonstrate your swordsmanship with this sharply pointed weapon. Increases Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireResplendentRapierText": "Resplendent Rapier", + "weaponArmoireFloridFanNotes": "This lovely silk fan folds when not in use. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.", + "weaponArmoireFloridFanText": "Florid Fan", + "weaponArmoireMagnifyingGlassNotes": "Aha! A piece of evidence! Examine it closely with this fine magnifier. Increases Perception by <%= per %>. Enchanted Armoire: Detective Set (Item 3 of 4).", + "weaponArmoireMagnifyingGlassText": "Magnifying Glass", + "weaponArmoireAstronomersTelescopeNotes": "An instrument that will allow you to observe the stars' ancient dance. Increases Perception by <%= per %>. Enchanted Armoire: Astronomer Mage Set (Item 3 of 3).", + "weaponArmoireAstronomersTelescopeText": "Astronomer's Telescope", + "weaponArmoireBambooCaneNotes": "Perfect for assisting you in a stroll, or for dancing the Charleston. Increases Intelligence, Perception, and Constitution by <%= attrs %> each. Enchanted Armoire: Boating Set (Item 3 of 3).", + "weaponArmoireBambooCaneText": "Bamboo Cane", + "weaponArmoireNephriteBowNotes": "This bow shoots special jade-tipped arrows that will take down even your most stubborn bad habits! Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Nephrite Archer Set (Item 1 of 3).", + "weaponArmoireNephriteBowText": "Nephrite Bow", + "weaponArmoireSlingshotText": "Slingshot", + "weaponArmoireSlingshotNotes": "Take aim at your red Dailies! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "weaponArmoireJugglingBallsNotes": "Habiticans are master multi-taskers, so you should have no trouble keeping all these balls in the air! Increases Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", + "weaponArmoireJugglingBallsText": "Juggling Balls", + "weaponMystery201911Notes": "The crystal ball atop this staff can show you the future, but beware! Using such dangerous knowledge can change a person in unexpected ways. Confers no benefit. November 2019 Subscriber Item.", + "weaponMystery201911Text": "Charmed Crystal Staff", + "weaponSpecialWinter2020HealerNotes": "Wave it about, and its aroma will summon your friends and helpers to begin cooking and baking! Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.", + "weaponSpecialWinter2020MageNotes": "With practice, you can project this aural magic at any desired frequency: a meditative hum, a festive chime, or a RED TASK OVERDUE ALARM. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.", + "headMystery201904Notes": "The opals in this circlet shine in every colour of the rainbow, giving it a variety of magical properties. Confers no benefit. April 2019 Subscriber Item.", + "headSpecialFall2019HealerNotes": "Don this dark mitre to harness the powers of the fearsome Lich. Increases Intelligence by <%= int %>. Limited Edition 2019 Autumn Gear.", + "headSpecialFall2019HealerText": "Dark Mitre", + "headSpecialSummer2019HealerNotes": "The spiralling structure of this shell will help you hear any cry for help across the seven seas. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.", + "armorArmoireDuffleCoatNotes": "Travel frosty realms in style with this cosy wool coat. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Duffle Coat Set (Item 1 of 2).", + "armorSpecialSummer2019WarriorNotes": "Warriors are known for their sturdy defences. Turtles are known for their thick shells. It's a perfect match! Just... try not to fall over backward, ever. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.", + "armorSpecialSpring2019MageNotes": "These robes gather power from magic resin embedded in the fibres of ancient bark that compose the cloth. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.", + "armorArmoireLayerCakeArmorText": "Layer Cake Armour", + "armorArmoireNephriteArmorNotes": "Made from strong steel rings and decorated with jade, this armour will protect you from procrastination! Increases Strength by <%= str %> and Perception by <%= per %>. Enchanted Armoire: Nephrite Archer Set (Item 3 of 3).", + "armorArmoireNephriteArmorText": "Nephrite Armour", + "armorMystery201910Notes": "This enigmatic armour will protect you from terrors seen and unseen. Confers no benefit. October 2019 Subscriber Item.", + "armorMystery201910Text": "Cryptic Armour", + "armorMystery201909Text": "Affable Acorn Armour", + "armorMystery201903Text": "Shell-ebration Armour", + "armorSpecialWinter2020WarriorText": "Bark Armour", + "armorSpecialSummer2019WarriorText": "Carapace Armour", + "armorSpecialSpring2019WarriorNotes": "Steely armour of reinforced petals protects your heart and also looks pretty snazzy. Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.", + "armorSpecialSpring2019WarriorText": "Orchid Armour", + "armorSpecialSpring2019RogueText": "Cloud Armour", + "armorSpecialKS2019Notes": "Glowing from within like a gryphon's noble heart, this resplendent armour encourages you to take pride in your accomplishments. Increases Constitution by <%= con %>.", + "armorSpecialKS2019Text": "Mythic Gryphon Armour", + "weaponSpecialWinter2020HealerText": "Clove Sceptre", + "weaponSpecialWinter2020MageText": "Rippling Sound Waves", + "weaponSpecialWinter2020WarriorNotes": "Back, squirrels! You will take no piece of this! ...But if you all want to hang out and have cocoa, that's cool. Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.", + "weaponSpecialWinter2020WarriorText": "Pointy Conifer Cone", + "weaponSpecialWinter2020RogueNotes": "Darkness is a Rogue's element. Who better, then, to light the way in the darkest time of year? Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.", + "weaponSpecialWinter2020RogueText": "Lantern Rod", + "weaponSpecialFall2019HealerNotes": "This phylactery can call on the spirits of tasks long slain and use their healing power. Increases Intelligence by <%= int %>. Limited Edition 2019 Autumn Gear.", + "weaponSpecialFall2019HealerText": "Fearsome Phylactery", + "weaponSpecialFall2019MageNotes": "Be it forging thunderbolts, raising fortifications, or simply striking terror into the hearts of mortals, this staff lends the power of giants to work wonders. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2019 Autumn Gear.", + "weaponSpecialFall2019MageText": "One-Eyed Staff", + "weaponSpecialFall2019WarriorNotes": "Prepare to rend your foes with the talons of a raven! Increases Strength by <%= str %>. Limited Edition 2019 Autumn Gear.", + "weaponSpecialFall2019WarriorText": "Talon Trident", + "weaponSpecialFall2019RogueNotes": "Whether you're conducting the orchestra or singing an aria, this helpful device keeps your hands free for dramatic gestures! Increases Strength by <%= str %>. Limited Edition 2019 Autumn Gear.", + "weaponSpecialFall2019RogueText": "Music Stand", + "weaponSpecialSummer2019HealerNotes": "The bubbles from this wand capture healing energy and ancient oceanic magic. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.", + "weaponSpecialKS2019Notes": "Curved as a gryphon's beak and talons, this ornate polearm reminds you to power through when the task ahead feels daunting. Increases Strength by <%= str %>.", + "weaponSpecialKS2019Text": "Mythic Gryphon Glaive" } diff --git a/website/common/locales/en_GB/generic.json b/website/common/locales/en_GB/generic.json index eadf3f2635..c132d8925b 100644 --- a/website/common/locales/en_GB/generic.json +++ b/website/common/locales/en_GB/generic.json @@ -61,7 +61,7 @@ "newGroupTitle": "New Group", "subscriberItem": "Mystery Item", "newSubscriberItem": "You have new Mystery Items", - "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. It becomes available at the beginning of the month. See the wiki's 'Mystery Item' page for more information.", "all": "All", "none": "None", "more": "<%= count %> more", @@ -79,7 +79,7 @@ "continue": "Continue", "accept": "Accept", "reject": "Reject", - "neverMind": "Never mind", + "neverMind": "Nevermind", "buyMoreGems": "Buy More Gems", "notEnoughGems": "Not enough Gems", "alreadyHave": "Whoops! You already have this item. No need to buy it again!", @@ -276,7 +276,7 @@ "hobbies_occupations": "Hobbies + Occupations", "location_based": "Location-based", "mental_health": "Mental Health + Self-Care", - "getting_organized": "Getting Organized", + "getting_organized": "Getting Organised", "self_improvement": "Self-Improvement", "spirituality": "Spirituality", "time_management": "Time-Management + Accountability", @@ -291,5 +291,10 @@ "howManyToBuy": "How many would you like to buy?", "habiticaHasUpdated": "There is a new Habitica update. Refresh to get the latest version!", "contactForm": "Contact the Moderation Team", - "options": "Options" + "options": "Options", + "loadEarlierMessages": "Load Earlier Messages", + "demo": "Demo", + "congratulations": "Congratulations!", + "onboardingAchievs": "Onboarding Achievements", + "finish": "Finish" } diff --git a/website/common/locales/en_GB/groups.json b/website/common/locales/en_GB/groups.json index edfefbea51..fb85eecb26 100644 --- a/website/common/locales/en_GB/groups.json +++ b/website/common/locales/en_GB/groups.json @@ -250,19 +250,19 @@ "onlyGroupLeaderCanEditTasks": "Not authorised to manage tasks!", "onlyGroupTasksCanBeAssigned": "Only group tasks can be assigned", "assignedTo": "Assigned To", - "assignedToUser": "Assigned to <%= userName %>", - "assignedToMembers": "Assigned to <%= userCount %> members", - "assignedToYouAndMembers": "Assigned to you and <%= userCount %> members", + "assignedToUser": "Assigned to <%= userName %>", + "assignedToMembers": "Assigned to <%= userCount %> members", + "assignedToYouAndMembers": "Assigned to you and <%= userCount %> members", "youAreAssigned": "You are assigned to this task", "taskIsUnassigned": "This task is unassigned", "confirmClaim": "Are you sure you want to claim this task?", "confirmUnClaim": "Are you sure you want to unclaim this task?", "confirmApproval": "Are you sure you want to approve this task?", "confirmNeedsWork": "Are you sure you want to mark this task as needing work?", - "userRequestsApproval": "<%= userName %> requests approval", - "userCountRequestsApproval": "<%= userCount %> members request approval", + "userRequestsApproval": "<%= userName %> requests approval", + "userCountRequestsApproval": "<%= userCount %> members request approval", "youAreRequestingApproval": "You are requesting approval", - "chatPrivilegesRevoked": "You cannot do that because your chat privileges have been revoked.", + "chatPrivilegesRevoked": "You cannot do this because your chat privileges have been removed. For details or to ask if your privileges can be returned, please email our Community Manager at admin@habitica.com or ask your parent or guardian to email them. Please include your @Username in the email. If a moderator has already told you that your chat ban is temporary, you do not need to send an email.", "cannotCreatePublicGuildWhenMuted": "You cannot create a public guild because your chat privileges have been revoked.", "cannotInviteWhenMuted": "You cannot invite anyone to a guild or party because your chat privileges have been revoked.", "newChatMessagePlainNotification": "New message in <%= groupName %> by <%= authorName %>. Click here to open the chat page!", @@ -277,10 +277,10 @@ "confirmRemoveTag": "Do you really want to remove \"<%= tag %>\"?", "groupHomeTitle": "Home", "assignTask": "Assign Task", - "claim": "Claim", + "claim": "Claim Task", "removeClaim": "Remove Claim", "onlyGroupLeaderCanManageSubscription": "Only the group leader can manage the group's subscription", - "yourTaskHasBeenApproved": "Your task <%= taskText %> has been approved.", + "yourTaskHasBeenApproved": "Your task <%= taskText %> has been approved.", "taskNeedsWork": "<%= managerName %> marked <%= taskText %> as needing additional work.", "userHasRequestedTaskApproval": "<%= user %> requests approval for <%= taskName %>", "approve": "Approve", @@ -341,8 +341,8 @@ "leaderCannotLeaveGroupWithActiveGroup": "A leader cannot leave a group while the group has an active plan", "youHaveGroupPlan": "You have a free subscription because you are a member of a group that has a Group Plan. This will end when you are no longer in the group that has a Group Plan. Any months of extra subscription credit you have will be applied at the end of the Group Plan.", "cancelGroupSub": "Cancel Group Plan", - "confirmCancelGroupPlan": "Are you sure you want to cancel the group plan and remove its benefits from all members, including their free subscriptions?", - "canceledGroupPlan": "Cancelled Group Plan", + "confirmCancelGroupPlan": "Are you sure you want to cancel your Group Plan? All Group members will lose their subscription and benefits.", + "canceledGroupPlan": "Group Plan Cancelled", "groupPlanCanceled": "Group Plan will become inactive on", "purchasedGroupPlanPlanExtraMonths": "You have <%= months %> months of extra group plan credit.", "addManager": "Assign Manager", @@ -480,5 +480,9 @@ "recurringCompletion": "None - Group task does not complete", "singleCompletion": "Single - Completes when any assigned user finishes", "allAssignedCompletion": "All - Completes when all assigned users finish", - "pmReported": "Thank you for reporting this message." + "pmReported": "Thank you for reporting this message.", + "groupActivityNotificationTitle": "<%= user %> posted in <%= group %>", + "suggestedGroup": "Suggested because you’re new to Habitica.", + "taskClaimed": "<%= userName %> has claimed the task <%= taskText %>.", + "youHaveBeenAssignedTask": "<%= managerName %> has assigned you the task <%= taskText %>." } diff --git a/website/common/locales/en_GB/limited.json b/website/common/locales/en_GB/limited.json index 7767e191aa..b35d966798 100644 --- a/website/common/locales/en_GB/limited.json +++ b/website/common/locales/en_GB/limited.json @@ -143,11 +143,11 @@ "dateEndAugust": "August 31", "dateEndSeptember": "September 21", "dateEndOctober": "October 31", - "dateEndNovember": "December 3", + "dateEndNovember": "November 30", "dateEndJanuary": "January 31", "dateEndFebruary": "February 28", "winterPromoGiftHeader": "GIFT A SUBSCRIPTION AND GET ONE FREE!", - "winterPromoGiftDetails1": "Until January 15th only, when you gift somebody a subscription, you get the same subscription for yourself for free!", + "winterPromoGiftDetails1": "Until January 6th only, when you gift somebody a subscription, you get the same subscription for yourself for free!", "winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3", "discountBundle": "bundle", "g1g1Announcement": "Gift a Subscription, Get a Subscription Free event going on now!", @@ -155,5 +155,22 @@ "spring2019AmberMageSet": "Amber (Mage)", "spring2019RobinHealerSet": "Robin (Healer)", "spring2019OrchidWarriorSet": "Orchid (Warrior)", - "spring2019CloudRogueSet": "Cloud (Rogue)" + "spring2019CloudRogueSet": "Cloud (Rogue)", + "september2018": "September 2018", + "september2017": "September 2017", + "decemberYYYY": "December <%= year %>", + "augustYYYY": "August <%= year %>", + "eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.", + "winter2020LanternSet": "Lantern (Rogue)", + "winter2020WinterSpiceSet": "Winter Spice (Healer)", + "winter2020CarolOfTheMageSet": "Carol of the Mage (Mage)", + "winter2020EvergreenSet": "Evergreen (Warrior)", + "fall2019RavenSet": "Raven (Warrior)", + "fall2019LichSet": "Lich (Healer)", + "fall2019CyclopsSet": "Cyclops (Mage)", + "fall2019OperaticSpecterSet": "Operatic Specter (Rogue)", + "summer2019HammerheadRogueSet": "Hammerhead (Rogue)", + "summer2019ConchHealerSet": "Conch (Healer)", + "summer2019WaterLilyMageSet": "Water Lily (Mage)", + "summer2019SeaTurtleWarriorSet": "Sea Turtle (Warrior)" } diff --git a/website/common/locales/en_GB/messages.json b/website/common/locales/en_GB/messages.json index f52d9549b1..dc3509cc11 100644 --- a/website/common/locales/en_GB/messages.json +++ b/website/common/locales/en_GB/messages.json @@ -51,7 +51,7 @@ "messageGroupChatFlagAlreadyReported": "You have already reported this message", "messageGroupChatNotFound": "Message not found!", "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", - "messageCannotFlagSystemMessages": "You cannot flag a system message. If you need to report a violation of the Community Guidelines related to this message, please email a screenshot and explanation to Lemoness at <%= communityManagerEmail %>.", + "messageCannotFlagSystemMessages": "You cannot report a system message. If you need to report a violation of the Community Guidelines related to this message, please email a screenshot and explanation to our Community Manager at <%= communityManagerEmail %>.", "messageGroupChatSpam": "Whoops, looks like you're posting too many messages! Please wait a minute and try again. The Tavern chat only holds 200 messages at a time, so Habitica encourages posting longer, more thoughtful messages and consolidating replies. Can't wait to hear what you have to say. :)", "messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.", "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", diff --git a/website/common/locales/en_GB/npc.json b/website/common/locales/en_GB/npc.json index f517483a8a..0054300eef 100644 --- a/website/common/locales/en_GB/npc.json +++ b/website/common/locales/en_GB/npc.json @@ -13,15 +13,15 @@ "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", - "randomize": "Randomize", + "randomize": "Randomise", "mattBoch": "Matt Boch", "mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!", "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you will find eggs and potions to hatch pets with. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.", "welcomeToTavern": "Welcome to The Tavern!", "sleepDescription": "Need a break? Check into Daniel's Inn to pause some of Habitica's more difficult game mechanics:", "sleepBullet1": "Missed Dailies won't damage you", - "sleepBullet2": "Tasks won't lose streaks or decay in color", - "sleepBullet3": "Bosses won't do damage for your missed Dailies", + "sleepBullet2": "Tasks won't lose streaks", + "sleepBullet3": "Bosses won't do damage for your own missed Dailies", "sleepBullet4": "Your boss damage or collection Quest items will stay pending until check-out", "pauseDailies": "Pause Damage", "unpauseDailies": "Unpause Damage", @@ -91,7 +91,7 @@ "unlocked": "Items have been unlocked", "alreadyUnlocked": "Full set already unlocked.", "alreadyUnlockedPart": "Full set already partially unlocked.", - "invalidQuantity": "Quantity to purchase must be a number.", + "invalidQuantity": "Quantity to purchase must be a positive whole number.", "USD": "(USD)", "newStuff": "New Stuff by Bailey", "newBaileyUpdate": "New Bailey Update!", @@ -168,5 +168,7 @@ "welcome5": "Now you'll customise your avatar and set up your tasks...", "imReady": "Enter Habitica", "limitedOffer": "Available until <%= date %>", - "paymentAutoRenew": "This subscription will auto-renew until it is cancelled. If you need to cancel this subscription, you can do so from your settings." + "paymentAutoRenew": "This subscription will auto-renew until it is cancelled. If you need to cancel this subscription, you can do so from your settings.", + "paymentCanceledDisputes": "We’ve sent a cancellation confirmation to your email. If you don’t see the email, please contact us to prevent future billing disputes.", + "cannotUnpinItem": "This item cannot be unpinned." } diff --git a/website/common/locales/en_GB/overview.json b/website/common/locales/en_GB/overview.json index c167837797..532b2b67af 100644 --- a/website/common/locales/en_GB/overview.json +++ b/website/common/locales/en_GB/overview.json @@ -1,14 +1,10 @@ { - "needTips": "Need some tips on how to begin? Here's a straightforward guide!", - - "step1": "Step 1: Enter Tasks", - "webStep1Text": "Habitica is nothing without real-world goals, so enter a few tasks. You can add more later as you think of them! All tasks can be added by clicking the green \"Create\" button.\n* **Set up [To-Dos](http://habitica.fandom.com/wiki/To-Dos):** Enter tasks you do once or rarely in the To-Dos column, one at a time. You can click on the tasks to edit them and add checklists, due dates, and more!\n* **Set up [Dailies](http://habitica.fandom.com/wiki/Dailies):** Enter activities you need to do daily or on a particular day of the week, month, or year in the Dailies column. Click task to edit when it will be due and/or set a start date. You can also make it due on a repeating basis, for example, every 3 days.\n* **Set up [Habits](http://habitica.fandom.com/wiki/Habits):** Enter habits you want to establish in the Habits column. You can edit the Habit to change it to just a good habit :heavy_plus_sign: or a bad habit :heavy_minus_sign:\n* **Set up [Rewards](http://habitica.fandom.com/wiki/Rewards):** In addition to the in-game Rewards offered, add activities or treats which you want to use as a motivation to the Rewards column. It's important to give yourself a break or allow some indulgence in moderation!\n* If you need inspiration for which tasks to add, you can look at the wiki's pages on [Sample Habits](http://habitica.fandom.com/wiki/Sample_Habits), [Sample Dailies](http://habitica.fandom.com/wiki/Sample_Dailies), [Sample To-Dos](http://habitica.fandom.com/wiki/Sample_To-Dos), and [Sample Rewards](http://habitica.fandom.com/wiki/Sample_Custom_Rewards).", - - "step2": "Step 2: Gain Points by Doing Things in Real Life", - "webStep2Text": "Now, start tackling your goals from the list! As you complete tasks and check them off in Habitica, you will gain [Experience](http://habitica.fandom.com/wiki/Experience_Points), which helps you level up, and [Gold](http://habitica.fandom.com/wiki/Gold_Points), which allows you to purchase Rewards. If you fall into bad habits or miss your Dailies, you will lose [Health](http://habitica.fandom.com/wiki/Health_Points). In that way, the Habitica Experience and Health bars serve as a fun indicator of your progress toward your goals. You'll start seeing your real life improve as your character advances in the game.", - - "step3": "Step 3: Customise and Explore Habitica", - "webStep3Text": "Once you're familiar with the basics, you can get even more out of Habitica with these nifty features:\n * Organize your tasks with [tags](http://habitica.fandom.com/wiki/Tags) (edit a task to add them).\n * Customize your [avatar](http://habitica.fandom.com/wiki/Avatar) by clicking the user icon in the upper-right corner.\n * Buy your [Equipment](http://habitica.fandom.com/wiki/Equipment) under Rewards or from the [Shops](<%= shopUrl %>), and change it under [Inventory > Equipment](<%= equipUrl %>).\n * Connect with other users via the [Tavern](http://habitica.fandom.com/wiki/Tavern).\n * Starting at Level 3, hatch [Pets](http://habitica.fandom.com/wiki/Pets) by collecting [eggs](http://habitica.fandom.com/wiki/Eggs) and [hatching potions](http://habitica.fandom.com/wiki/Hatching_Potions). [Feed](http://habitica.fandom.com/wiki/Food) them to create [Mounts](http://habitica.fandom.com/wiki/Mounts).\n * At level 10: Choose a particular [class](http://habitica.fandom.com/wiki/Class_System) and then use class-specific [skills](http://habitica.fandom.com/wiki/Skills) (levels 11 to 14).\n * Form a party with your friends (by clicking [Party](<%= partyUrl %>) in the navigation bar) to stay accountable and earn a Quest scroll.\n * Defeat monsters and collect objects on [quests](http://habitica.fandom.com/wiki/Quests) (you will be given a quest at level 15).", - - "overviewQuestions": "Have questions? Check out the [FAQ](<%= faqUrl %>)! If your question isn't mentioned there, you can ask for further help in the [Habitica Help guild](<%= helpGuildUrl %>).\n\nGood luck with your tasks!" + "needTips": "Need some tips on how to begin? Here's a straightforward guide!", + "step1": "Step 1: Enter Tasks", + "webStep1Text": "Habitica is nothing without real-world goals, so enter a few tasks. You can add more later as you think of them! All tasks can be added by clicking the green \"Create\" button.\n* **Set up [To-Dos](http://habitica.fandom.com/wiki/To-Dos):** Enter tasks you do once or rarely in the To-Dos column, one at a time. You can click on the tasks to edit them and add checklists, due dates, and more!\n* **Set up [Dailies](http://habitica.fandom.com/wiki/Dailies):** Enter activities you need to do daily or on a particular day of the week, month, or year in the Dailies column. Click task to edit when it will be due and/or set a start date. You can also make it due on a repeating basis, for example, every 3 days.\n* **Set up [Habits](http://habitica.fandom.com/wiki/Habits):** Enter habits you want to establish in the Habits column. You can edit the Habit to change it to just a good habit :heavy_plus_sign: or a bad habit :heavy_minus_sign:\n* **Set up [Rewards](http://habitica.fandom.com/wiki/Rewards):** In addition to the in-game Rewards offered, add activities or treats which you want to use as a motivation to the Rewards column. It's important to give yourself a break or allow some indulgence in moderation!\n* If you need inspiration for which tasks to add, you can look at the wiki's pages on [Sample Habits](http://habitica.fandom.com/wiki/Sample_Habits), [Sample Dailies](http://habitica.fandom.com/wiki/Sample_Dailies), [Sample To-Dos](http://habitica.fandom.com/wiki/Sample_To-Dos), and [Sample Rewards](http://habitica.fandom.com/wiki/Sample_Custom_Rewards).", + "step2": "Step 2: Gain Points by Doing Things in Real Life", + "webStep2Text": "Now, start tackling your goals from the list! As you complete tasks and check them off in Habitica, you will gain [Experience](http://habitica.fandom.com/wiki/Experience_Points), which helps you level up, and [Gold](http://habitica.fandom.com/wiki/Gold_Points), which allows you to purchase Rewards. If you fall into bad habits or miss your Dailies, you will lose [Health](http://habitica.fandom.com/wiki/Health_Points). In that way, the Habitica Experience and Health bars serve as a fun indicator of your progress toward your goals. You'll start seeing your real life improve as your character advances in the game.", + "step3": "Step 3: Customise and Explore Habitica", + "webStep3Text": "Once you're familiar with the basics, you can get even more out of Habitica with these nifty features:\n * Organise your tasks with [tags](http://habitica.fandom.com/wiki/Tags) (edit a task to add them).\n * Customise your [avatar](http://habitica.fandom.com/wiki/Avatar) by clicking the user icon in the upper-right corner.\n * Buy your [Equipment](http://habitica.fandom.com/wiki/Equipment) under Rewards or from the [Shops](<%= shopUrl %>), and change it under [Inventory > Equipment](<%= equipUrl %>).\n * Connect with other users via the [Tavern](http://habitica.fandom.com/wiki/Tavern).\n * Starting at Level 3, hatch [Pets](http://habitica.fandom.com/wiki/Pets) by collecting [eggs](http://habitica.fandom.com/wiki/Eggs) and [hatching potions](http://habitica.fandom.com/wiki/Hatching_Potions). [Feed](http://habitica.fandom.com/wiki/Food) them to create [Mounts](http://habitica.fandom.com/wiki/Mounts).\n * At level 10: Choose a particular [class](http://habitica.fandom.com/wiki/Class_System) and then use class-specific [skills](http://habitica.fandom.com/wiki/Skills) (levels 11 to 14).\n * Form a party with your friends (by clicking [Party](<%= partyUrl %>) in the navigation bar) to stay accountable and earn a Quest scroll.\n * Defeat monsters and collect objects on [quests](http://habitica.fandom.com/wiki/Quests) (you will be given a quest at level 15).", + "overviewQuestions": "Have questions? Check out the [FAQ](<%= faqUrl %>)! If your question isn't mentioned there, you can ask for further help in the [Habitica Help guild](<%= helpGuildUrl %>).\n\nGood luck with your tasks!" } diff --git a/website/common/locales/en_GB/pets.json b/website/common/locales/en_GB/pets.json index 222d18d549..de3027d27e 100644 --- a/website/common/locales/en_GB/pets.json +++ b/website/common/locales/en_GB/pets.json @@ -144,5 +144,6 @@ "notEnoughMounts": "You have not collected enough mounts", "notEnoughPetsMounts": "You have not collected enough pets and mounts", "wackyPets": "Wacky Pets", - "filterByWacky": "Wacky" + "filterByWacky": "Wacky", + "gryphatrice": "Gryphatrice" } diff --git a/website/common/locales/en_GB/quests.json b/website/common/locales/en_GB/quests.json index b9a19d7873..a4553684c0 100644 --- a/website/common/locales/en_GB/quests.json +++ b/website/common/locales/en_GB/quests.json @@ -126,5 +126,16 @@ "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Health", "rageAttack": "Rage Attack:", "bossRage": "<%= currentRage %> / <%= maxRage %> Rage", - "rageStrikes": "Rage Strikes" + "rageStrikes": "Rage Strikes", + "tavernBossTired": "<%= bossName %> tries to unleash <%= rageName %> but is too tired.", + "chatQuestCancelled": "<%= username %> cancelled the party quest <%= questName %>.", + "chatQuestAborted": "<%= username %> aborted the party quest <%= questName %>.", + "chatItemQuestFinish": "All items found! Party has received their rewards.", + "chatFindItems": "<%= username %> found <%= items %>.", + "chatBossDefeated": "You defeated <%= bossName %>! Questing party members receive the rewards of victory.", + "chatBossDontAttack": "<%= username %> attacks <%= bossName %> for <%= userDamage %> damage. <%= bossName %> does not attack, because it respects the fact that there are some bugs post-maintenance, and it doesn't want to hurt anyone unfairly. It will continue its rampage soon!", + "chatBossDamage": "<%= username %> attacks <%= bossName %> for <%= userDamage %> damage. <%= bossName %> attacks party for <%= bossDamage %> damage.", + "chatQuestStarted": "Your quest, <%= questName %>, has started.", + "questInvitationNotificationInfo": "You were invited to join a quest", + "hatchingPotionQuests": "Magic Hatching Potion Quests" } diff --git a/website/common/locales/en_GB/questscontent.json b/website/common/locales/en_GB/questscontent.json index 3fb32d1b53..e5cbd33795 100644 --- a/website/common/locales/en_GB/questscontent.json +++ b/website/common/locales/en_GB/questscontent.json @@ -1,11 +1,11 @@ { "questEvilSantaText": "Trapper Santa", - "questEvilSantaNotes": "You hear agonised roars deep in the ice-fields. You follow the growls - punctuated by the sound of cackling - to a clearing in the woods, where you see a fully-grown polar bear. She's caged and shackled, fighting for her life. Dancing atop the cage is a malicious little imp wearing a castaway costume. Vanquish Trapper Santa, and save the beast!", + "questEvilSantaNotes": "You hear agonised roars deep in the icefields. You follow the growls - punctuated by the sound of cackling - to a clearing in the woods, where you see a fully-grown polar bear. She's caged and shackled, fighting for her life. Dancing atop the cage is a malicious little imp wearing a castaway costume. Vanquish Trapper Santa, and save the beast!

Note: “Trapper Santa” awards a stackable quest achievement but gives a rare mount that can only be added to your stable once.", "questEvilSantaCompletion": "Trapper Santa squeals in anger, and bounces off into the night. The grateful she-bear, through roars and growls, tries to tell you something. You take her back to the stables, where Matt Boch the Beast Master listens to her tale with a gasp of horror. She has a cub! He ran off into the ice-fields when mama bear was captured.", "questEvilSantaBoss": "Trapper Santa", "questEvilSantaDropBearCubPolarMount": "Polar Bear (Mount)", "questEvilSanta2Text": "Find The Cub", - "questEvilSanta2Notes": "When Trapper Santa captured the polar bear mount, her cub ran off into the ice-fields. You hear twig-snaps and snow-crunching through the crystalline sound of the forest. Paw prints! You start racing to follow the trail. Find all the prints and broken twigs, and retrieve the cub!", + "questEvilSanta2Notes": "When Trapper Santa captured the polar bear mount, her cub ran off into the icefields. You hear twig-snaps and snow crunch through the crystalline sound of the forest. Paw prints! You start racing to follow the trail. Find all the prints and broken twigs, and retrieve the cub!

Note: “Find the Cub” awards a stackable quest achievement but gives a rare pet that can only be added to your stable once.", "questEvilSanta2Completion": "You've found the cub! It will keep you company forever.", "questEvilSanta2CollectTracks": "Tracks", "questEvilSanta2CollectBranches": "Broken Twigs", @@ -15,49 +15,49 @@ "questGryphonCompletion": "Defeated, the mighty beast ashamedly slinks back to its master. \"My word! Well done, adventurers!\" baconsaur exclaims, \"Please, have some of the gryphon's eggs. I am sure you will raise these young ones well!\"", "questGryphonBoss": "Fiery Gryphon", "questGryphonDropGryphonEgg": "Gryphon (Egg)", - "questGryphonUnlockText": "Unlocks purchasable Gryphon eggs in the Market", + "questGryphonUnlockText": "Unlocks Gryphon Eggs for purchase in the Market", "questHedgehogText": "The Hedgebeast", "questHedgehogNotes": "Hedgehogs are a funny group of animals. They are some of the most affectionate pets a Habiteer could own. But rumor has it, if you feed them milk after midnight, they grow quite irritable. And fifty times their size. And InspectorCaracal did just that. Oops.", "questHedgehogCompletion": "Your party successfully calmed down the hedgehog! After shrinking down to a normal size, she hobbles away to her eggs. She returns squeaking and nudging some of her eggs along towards your party. Hopefully, these hedgehogs like milk better!", "questHedgehogBoss": "Hedgebeast", "questHedgehogDropHedgehogEgg": "Hedgehog (Egg)", - "questHedgehogUnlockText": "Unlocks purchasable Hedgehog eggs in the Market", + "questHedgehogUnlockText": "Unlocks Hedgehog Eggs for purchase in the Market", "questGhostStagText": "The Spirit of Spring", - "questGhostStagNotes": "Ahh, Spring. The time of year when color once again begins to fill the landscape. Gone are the cold, snowy mounds of winter. Where frost once stood, vibrant plant life takes its place. Luscious green leaves fill in the trees, grass returns to its former vivid hue, a rainbow of flowers rise along the plains, and a white mystical fog covers the land! ... Wait. Mystical fog? \"Oh no,\" InspectorCaracal says apprehensively, \"It would appear that some kind of spirit is the cause of this fog. Oh, and it is charging right at you.\"", + "questGhostStagNotes": "Ahh, Spring. The time of year when colour once again begins to fill the landscape. Gone are the cold, snowy mounds of winter. Where frost once stood, vibrant plant life takes its place. Luscious green leaves fill in the trees, grass returns to its former vivid hue, a rainbow of flowers rise along the plains, and a white mystical fog covers the land! ... Wait. Mystical fog? \"Oh no,\" InspectorCaracal says apprehensively, \"It would appear that some kind of spirit is the cause of this fog. Oh, and it is charging right at you.\"", "questGhostStagCompletion": "The spirit, seemingly unwounded, lowers its nose to the ground. A calming voice envelops your party. \"I apologise for my behaviour. I have only just awoken from my slumber, and it would appear my wits have not completely returned to me. Please take these as a token of my apology.\" A cluster of eggs materialise on the grass before the spirit. Without another word, the spirit runs off into the forest with flowers falling in his wake.", "questGhostStagBoss": "Ghost Stag", "questGhostStagDropDeerEgg": "Deer (Egg)", - "questGhostStagUnlockText": "Unlocks purchasable Deer eggs in the Market", + "questGhostStagUnlockText": "Unlocks Deer Eggs for purchase in the Market", "questRatText": "The Rat King", "questRatNotes": "Rubbish! Massive piles of unchecked Dailies are lying all across Habitica. The problem has become so serious that hordes of rats are now seen everywhere. You notice @Pandah petting one of the beasts lovingly. She explains that rats are gentle creatures that feed on unchecked Dailies. The real problem is that the Dailies have fallen into the sewer, creating a dangerous pit that must be cleared. As you descend into the sewers, a massive rat, with blood red eyes and mangled yellow teeth, attacks you, defending its horde. Will you cower in fear or face the fabled Rat King?", "questRatCompletion": "Your final strike saps the gargantuan rat's strength, his eyes fading to a dull grey. The beast splits into many tiny rats, which scurry off in fright. You notice @Pandah standing behind you, looking at the once mighty creature. She explains that the citizens of Habitica have been inspired by your courage and are quickly completing all their unchecked Dailies. She warns you that we must be vigilant, for should we let down our guard, the Rat King will return. As payment, @Pandah offers you several rat eggs. Noticing your uneasy expression, she smiles, \"They make wonderful pets.\"", "questRatBoss": "Rat King", "questRatDropRatEgg": "Rat (Egg)", - "questRatUnlockText": "Unlocks purchasable Rat eggs in the Market", + "questRatUnlockText": "Unlocks Rat Eggs for purchase in the Market", "questOctopusText": "The Call of Octothulu", "questOctopusNotes": "@Urse, a wild-eyed young scribe, has asked for your help exploring a mysterious cave by the sea shore. Among the twilight tidepools stands a massive gate of stalactites and stalagmites. As you near the gate, a dark whirlpool begins to spin at its base. You stare in awe as a squid-like dragon rises through the maw. \"The sticky spawn of the stars has awakened,\" roars @Urse madly. \"After vigintillions of years, the great Octothulu is loose again, and ravening for delight!\"", "questOctopusCompletion": "With a final blow, the creature slips away into the whirlpool from which it came. You cannot tell if @Urse is happy with your victory or saddened to see the beast go. Wordlessly, your companion points to three slimy, gargantuan eggs in a nearby tide-pool, set in a nest of gold coins. \"Probably just octopus eggs,\" you say nervously. As you return home, @Urse frantically scribbles in a journal and you suspect this is not the last time you will hear of the great Octothulu.", "questOctopusBoss": "Octothulu", "questOctopusDropOctopusEgg": "Octopus (Egg)", - "questOctopusUnlockText": "Unlocks purchasable Octopus eggs in the Market", + "questOctopusUnlockText": "Unlocks Octopus Eggs for purchase in the Market", "questHarpyText": "Help! Harpy!", "questHarpyNotes": "The brave adventurer @UncommonCriminal has disappeared into the forest, following the trail of a winged monster that was sighted several days ago. You are about to begin a search when a wounded parrot lands on your arm, an ugly scar marring its beautiful plumage. Attached to its leg is a scrawled note explaining that while defending the parrots, @UncommonCriminal was captured by a vicious Harpy, and desperately needs your help to escape. Will you follow the bird, defeat the Harpy, and save @UncommonCriminal?", "questHarpyCompletion": "A final blow to the Harpy brings it down, feathers flying in all directions. After a quick climb to its nest you find @UncommonCriminal, surrounded by parrot eggs. As a team, you quickly place the eggs back in the nearby nests. The scarred parrot who found you caws loudly, dropping several eggs in your arms. \"The Harpy attack has left some eggs in need of protection,\" explains @UncommonCriminal. \"It seems you have been made an honorary parrot.\"", "questHarpyBoss": "Harpy", "questHarpyDropParrotEgg": "Parrot (Egg)", - "questHarpyUnlockText": "Unlocks purchasable Parrot eggs in the Market", + "questHarpyUnlockText": "Unlocks Parrot Eggs for purchase in the Market", "questRoosterText": "Rooster Rampage", "questRoosterNotes": "For years the farmer @extrajordinary has used Roosters as an alarm clock. But now a giant Rooster has appeared, crowing louder than any before – and waking up everyone in Habitica! The sleep-deprived Habiticans struggle through their daily tasks. @Pandoro decides the time has come to put a stop to this. \"Please, is there anyone who can teach that Rooster to crow quietly?\" You volunteer, approaching the Rooster early one morning – but it turns, flapping its giant wings and showing its sharp claws, and crows a battle cry.", "questRoosterCompletion": "With finesse and strength, you have tamed the wild beast. Its ears, once filled with feathers and half-remembered tasks, are now clear as day. It crows at you quietly, snuggling its beak into your shoulder. The next day you’re set to take your leave, but @EmeraldOx runs up to you with a covered basket. “Wait! When I went into the farmhouse this morning, the Rooster had pushed these against the door where you slept. I think he wants you to have them.” You uncover the basket to see three delicate eggs.", "questRoosterBoss": "Rooster", "questRoosterDropRoosterEgg": "Rooster (Egg)", - "questRoosterUnlockText": "Unlocks purchasable Rooster eggs in the Market", + "questRoosterUnlockText": "Unlocks Rooster Eggs for purchase in the Market", "questSpiderText": "The Icy Arachnid", "questSpiderNotes": "As the weather starts cooling down, delicate frost begins appearing on Habiticans' windowpanes in lacy webs... except for @Arcosine, whose windows are frozen completely shut by the Frost Spider currently taking up residence in his home. Oh dear.", "questSpiderCompletion": "The Frost Spider collapses, leaving behind a small pile of frost and a few of her enchanted egg sacs. @Arcosine rather hurriedly offers them to you as a reward--perhaps you could raise some non-threatening spiders as pets of your own?", "questSpiderBoss": "Spider", "questSpiderDropSpiderEgg": "Spider (Egg)", - "questSpiderUnlockText": "Unlocks purchasable Spider eggs in the Market", + "questSpiderUnlockText": "Unlocks Spider Eggs for purchase in the Market", "questGroupVice": "Vice the Shadow Wyrm", "questVice1Text": "Vice, Part 1: Free Yourself of the Dragon's Influence", "questVice1Notes": "

They say there lies a terrible evil in the caverns of Mt. Habitica. A monster whose presence twists the wills of the strong heroes of the land, turning them towards bad habits and laziness! The beast is a grand dragon of immense power and comprised of the shadows themselves: Vice, the treacherous Shadow Wyrm. Brave Habiteers, stand up and defeat this foul beast once and for all, but only if you believe you can stand against its immense power.

Vice Part 1:

How can you expect to fight the beast if it already has control over you? Don't fall victim to laziness and vice! Work hard to fight against the dragon's dark influence and dispel its hold on you!

", @@ -102,7 +102,7 @@ "questGoldenknight2Text": "The Golden Knight, Part 2: Gold Knight", "questGoldenknight2Notes": "Armed with dozens of Habiticans' testimonies, you finally confront the Golden Knight. You begin to recite the Habitcans' complaints to her, one by one. \"And @Pfeffernusse says that your constant bragging-\" The knight raises her hand to silence you and scoffs, \"Please, these people are merely jealous of my success. Instead of complaining, they should simply work as hard as I! Perhaps I shall show you the power you can attain through diligence such as mine!\" She raises her morningstar and prepares to attack you!", "questGoldenknight2Boss": "Gold Knight", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologise for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defence… but perhaps I can still apologise?”", "questGoldenknight2DropGoldenknight3Quest": "The Golden Knight Part 3: The Iron Knight (Scroll)", "questGoldenknight3Text": "The Golden Knight, Part 3: The Iron Knight", "questGoldenknight3Notes": "@Jon Arinbjorn cries out to you to get your attention. In the aftermath of your battle, a new figure has appeared. A knight coated in stained-black iron slowly approaches you with sword in hand. The Golden Knight shouts to the figure, \"Father, no!\" but the knight shows no signs of stopping. She turns to you and says, \"I am sorry. I have been a fool, with a head too big to see how cruel I have been. But my father is crueler than I could ever be. If he isn't stopped he'll destroy us all. Here, use my morningstar and halt the Iron Knight!\"", @@ -133,11 +133,11 @@ "questDilatoryBossRageMarket": "`Dread Drag'on Casts NEGLECT STRIKE!`\n\nAhhh!! Alex the Merchant just had his shop smashed to smithereens by the Drag'on's Neglect Strike! But it seems like we're really wearing this beast down. I doubt it has enough energy for another strike.\n\nSo do not waver, Habitica! Let's drive this beast away from our shores!", "questDilatoryCompletion": "`The Defeat Of The Dread Drag'On Of Dilatory`\n\nWe've done it! With a final last roar, the Dread Drag'on collapses and swims far, far away. Crowds of cheering Habiticans line the shores! We've helped Matt, Daniel, and Alex rebuild their buildings. But what's this?\n\n`The Citizens Return!`\n\nNow that the Drag'on has fled, thousands of sparkling colours are ascending through the sea. It is a rainbow swarm of Mantis Shrimp... and among them, hundreds of merpeople!\n\n\"We are the lost citizens of Dilatory!\" explains their leader, Manta. \"When Dilatory sank, the Mantis Shrimp that lived in these waters used a spell to transform us into merpeople so that we could survive. But in its rage, the Dread Drag'on trapped us all in the dark crevasse. We have been imprisoned there for hundreds of years - but now at last we are free to rebuild our city!\"\n\n\"As a thank you,\" says his friend @Ottl, \"Please accept this Mantis Shrimp pet and Mantis Shrimp mount, as well as XP, gold, and our eternal gratitude.\"\n\n`Rewards`\n * Mantis Shrimp Pet\n * Mantis Shrimp Mount\n * Chocolate, Blue Candyfloss, Pink Candyfloss, Fish, Honey, Meat, Milk, Potato, Rotten Meat, Strawberry", "questSeahorseText": "The Dilatory Derby", - "questSeahorseNotes": "It's Derby Day, and Habiticans from all over the continent have traveled to Dilatory to race their pet seahorses! Suddenly, a great splashing and snarling breaks out at the racetrack, and you hear Seahorse Keeper @Kiwibot shouting above the roar of the waves. \"The gathering of seahorses has attracted a fierce Sea Stallion!\" she cries. \"He's smashing through the stables and destroying the ancient track! Can anyone calm him down?\"", + "questSeahorseNotes": "It's Derby Day, and Habiticans from all over the continent have travelled to Dilatory to race their pet seahorses! Suddenly, a great splashing and snarling breaks out at the racetrack, and you hear Seahorse Keeper @Kiwibot shouting above the roar of the waves. \"The gathering of seahorses has attracted a fierce Sea Stallion!\" she cries. \"He's smashing through the stables and destroying the ancient track! Can anyone calm him down?\"", "questSeahorseCompletion": "The now-tame Sea Stallion swims docilely to your side. \"Oh, look!\" Kiwibot says. \"He wants us to take care of his children.\" She gives you three eggs. \"Raise them well,\" she says. \"You're welcome at the Dilatory Derby any day!\"", "questSeahorseBoss": "Sea Stallion", "questSeahorseDropSeahorseEgg": "Seahorse (Egg)", - "questSeahorseUnlockText": "Unlocks purchasable Seahorse eggs in the Market", + "questSeahorseUnlockText": "Unlocks Seahorse Eggs for purchase in the Market", "questGroupAtom": "Attack of the Mundane", "questAtom1Text": "Attack of the Mundane, Part 1: Dish Disaster!", "questAtom1Notes": "You reach the shores of Washed-Up Lake for some well-earned relaxation... But the lake is polluted with unwashed dishes! How did this happen? Well, you simply cannot allow the lake to be in this state. There is only one thing you can do: clean the dishes and save your vacation spot! Better find some soap to clean up this mess. A lot of soap...", @@ -159,13 +159,13 @@ "questOwlCompletion": "The Night-Owl fades before the dawn,
But even so, you feel a yawn.
Perhaps it's time to get some rest?
Then on your bed, you see a nest!
A Night-Owl knows it can be great
To finish work and stay up late,
But your new pets will softly peep
To tell you when it's time to sleep.", "questOwlBoss": "The Night-Owl", "questOwlDropOwlEgg": "Owl (Egg)", - "questOwlUnlockText": "Unlocks purchasable Owl eggs in the Market", + "questOwlUnlockText": "Unlocks Owl Eggs for purchase in the Market", "questPenguinText": "The Fowl Frost", "questPenguinNotes": "Although it's a hot summer day in the southernmost tip of Habitica, an unnatural chill has fallen upon Lively Lake. Strong, frigid winds rush around as the shore begins to freeze over. Ice spikes jut up from the ground, pushing grass and dirt away. @Melynnrose and @Breadstrings run up to you.

\"Help!\" says @Melynnrose. \"We brought a giant penguin in to freeze the lake so we could all go ice skating, but we ran out of fish to feed him!\"

\"He got angry and is using his freeze breath on everything he sees!\" says @Breadstrings. \"Please, you have to subdue him before all of us are covered in ice!\" Looks like you need this penguin to... cool down.", "questPenguinCompletion": "Upon the penguin's defeat, the ice melts away. The giant penguin settles down in the sunshine, slurping up an extra bucket of fish you found. He skates off across the lake, blowing gently downwards to create smooth, sparkling ice. What an odd bird! \"It appears he left behind a few eggs, as well,\" says @Painter de Cluster.

@Rattify laughs. \"Maybe these penguins will be a little more... chill?\"", "questPenguinBoss": "Frost Penguin", "questPenguinDropPenguinEgg": "Penguin (Egg)", - "questPenguinUnlockText": "Unlocks purchasable Penguin eggs in the Market", + "questPenguinUnlockText": "Unlocks Penguin Eggs for purchase in the Market", "questStressbeastText": "The Abominable Stressbeast of the Stoïkalm Steppes", "questStressbeastNotes": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Stress Strike Bar. When the Stress Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts who are not resting in the inn will have their incomplete Dailies tallied.

~*~

The first thing we hear are the footsteps, slower and more thundering than the stampede. One by one, Habiticans look outside their doors, and words fail us.

We've all seen Stressbeasts before, of course - tiny vicious creatures that attack during difficult times. But this? This towers taller than the buildings, with paws that could crush a dragon with ease. Frost swings from its stinking fur, and as it roars, the icy blast rips the roofs off our houses. A monster of this magnitude has never been mentioned outside of distant legend.

\"Beware, Habiticans!\" SabreCat cries. \"Barricade yourselves indoors - this is the Abominable Stressbeast itself!\"

\"That thing must be made of centuries of stress!\" Kiwibot says, locking the Tavern door tightly and shuttering the windows.

\"The Stoïkalm Steppes,\" Lemoness says, face grim. \"All this time, we thought they were placid and untroubled, but they must have been secretly hiding their stress somewhere. Over generations, it grew into this, and now it's broken free and attacked them - and us!\"

There's only one way to drive away a Stressbeast, Abominable or otherwise, and that's to attack it with completed Dailies and To-Dos! Let's all band together and fight off this fearsome foe - but be sure not to slack on your tasks, or our undone Dailies may enrage it so much that it lashes out...", "questStressbeastBoss": "The Abominable Stressbeast", @@ -176,9 +176,9 @@ "questStressbeastBossRageStables": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and their dark-red colour has infuriated the Abominable Stressbeast and caused it to regain some of its health! The horrible creature lunges for the Stables, but Matt the Beast Master heroically leaps into the fray to protect the pets and mounts. The Stressbeast has seized Matt in its vicious grip, but at least it's distracted for the moment. Hurry! Let's keep our Dailies in check and defeat this monster before it attacks again!", "questStressbeastBossRageBailey": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nAhh!!! Our incomplete Dailies caused the Abominable Stressbeast to become madder than ever and regain some of its health! Bailey the Town Crier was shouting for citizens to get to safety, and now it has seized her in its other hand! Look at her, valiantly reporting on the news as the Stressbeast swings her around viciously... Let's be worthy of her bravery by being as productive as we can to save our NPCs!", "questStressbeastBossRageGuide": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nLook out! Justin the Guide is trying to distract the Stressbeast by running around its ankles, yelling productivity tips! The Abominable Stressbeast is stomping madly, but it seems like we're really wearing this beast down. I doubt it has enough energy for another strike. Don't give up... we're so close to finishing it off!", - "questStressbeastDesperation": "`Abominable Stressbeast reaches 500K health! Abominable Stressbeast uses Desperate Defense!`\n\nWe're almost there, Habiticans! With diligence and Dailies, we've whittled the Stressbeast's health down to only 500K! The creature roars and flails in desperation, rage building faster than ever. Bailey and Matt yell in terror as it begins to swing them around at a terrifying pace, raising a blinding snowstorm that makes it harder to hit.\n\nWe'll have to redouble our efforts, but take heart - this is a sign that the Stressbeast knows it is about to be defeated. Don't give up now!", + "questStressbeastDesperation": "`Abominable Stressbeast reaches 500K health! Abominable Stressbeast uses Desperate Defence!`\n\nWe're almost there, Habiticans! With diligence and Dailies, we've whittled the Stressbeast's health down to only 500K! The creature roars and flails in desperation, rage building faster than ever. Bailey and Matt yell in terror as it begins to swing them around at a terrifying pace, raising a blinding snowstorm that makes it harder to hit.\n\nWe'll have to redouble our efforts, but take heart - this is a sign that the Stressbeast knows it is about to be defeated. Don't give up now!", "questStressbeastCompletion": "The Abominable Stressbeast is DEFEATED!

We've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!

Stoïkalm is Saved!

SabreCat speaks gently to a small sabertooth. \"Please find the citizens of the Stoïkalm Steppes and bring them to us,\" he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognise the head rider as Lady Glaciate, the leader of Stoïkalm.

\"Mighty Habiticans,\" she says, \"My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals.\" Her sad gaze follows the falling snow. \"We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you.\"

She turns to where @Baconsaur is snuggling with some of the baby mammoths. \"We have brought your animals an offering of food to apologise for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them.\"", - "questStressbeastCompletionChat": "`The Abominable Stressbeast is DEFEATED!`\n\nWe've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!\n\n`Stoïkalm is Saved!`\n\nSabreCat speaks gently to a small sabertooth. \"Please find the citizens of the Stoïkalm Steppes and bring them to us,\" he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognize the head rider as Lady Glaciate, the leader of Stoïkalm.\n\n\"Mighty Habiticans,\" she says, \"My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals.\" Her sad gaze follows the falling snow. \"We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you.\"\n\nShe turns to where @Baconsaur is snuggling with some of the baby mammoths. \"We have brought your animals an offering of food to apologise for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them.\"", + "questStressbeastCompletionChat": "`The Abominable Stressbeast is DEFEATED!`\n\nWe've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!\n\n`Stoïkalm is Saved!`\n\nSabreCat speaks gently to a small sabertooth. \"Please find the citizens of the Stoïkalm Steppes and bring them to us,\" he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognise the head rider as Lady Glaciate, the leader of Stoïkalm.\n\n\"Mighty Habiticans,\" she says, \"My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals.\" Her sad gaze follows the falling snow. \"We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you.\"\n\nShe turns to where @Baconsaur is snuggling with some of the baby mammoths. \"We have brought your animals an offering of food to apologise for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them.\"", "questTRexText": "King of the Dinosaurs", "questTRexNotes": "Now that ancient creatures from the Stoïkalm Steppes are roaming throughout all of Habitica, @Urse has decided to adopt a full-grown Tyrannosaur. What could go wrong?

Everything.", "questTRexCompletion": "The wild dinosaur finally stops its rampage and settles down to make friends with the giant roosters. @Urse beams down at it. \"They're not such terrible pets, after all! They just need a little discipline. Here, take some Tyrannosaur eggs for yourself.\"", @@ -191,43 +191,43 @@ "questTRexUndeadRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Skeletal Tyrannosaur will heal 30% of its remaining health!", "questTRexUndeadRageEffect": "`Skeletal Tyrannosaur uses SKELETON HEALING!`\n\nThe monster lets forth an unearthly roar, and some of its damaged bones knit back together!", "questTRexDropTRexEgg": "Tyrannosaur (Egg)", - "questTRexUnlockText": "Unlocks purchasable Tyrannosaur eggs in the Market", + "questTRexUnlockText": "Unlocks Tyrannosaur Eggs for purchase in the Market", "questRockText": "Escape the Cave Creature", "questRockNotes": "Crossing Habitica's Meandering Mountains with some friends, you make camp one night in a beautiful cave laced with shining minerals. But when you wake up the next morning, the entrance has disappeared and the floor of the cave is shifting underneath you.

\"The mountain's alive!\" shouts your companion @pfeffernusse. \"These aren't crystals—these are teeth!\"

@Painter de Cluster grabs your hand. \"We'll have to find another way out—stay with me and don't get distracted, or we could be trapped in here forever!\"", "questRockBoss": "Crystal Colossus", "questRockCompletion": "Your diligence has allowed you to find a safe path through the living mountain. Standing in the sunshine, your friend @intune notices something glinting on the ground by the cave's exit. You stoop to pick it up, and see that it's a small rock with a vein of gold running through it. Beside it are a number of other rocks with rather peculiar shapes. They almost look like... eggs?", "questRockDropRockEgg": "Rock (Egg)", - "questRockUnlockText": "Unlocks purchasable Rock eggs in the Market", + "questRockUnlockText": "Unlocks Rock Eggs for purchase in the Market", "questBunnyText": "The Killer Bunny", "questBunnyNotes": "After many difficult days, you reach the peak of Mount Procrastination and stand before the imposing doors of the Fortress of Neglect. You read the inscription in the stone. \"Inside resides the creature that embodies your greatest fears, the reason for your inaction. Knock and face your demon!\" You tremble, imagining the horror within and feel the urge to flee as you have done so many times before. @Draayder holds you back. \"Steady, my friend! The time has come at last. You must do this!\"

You knock and the doors swing inward. From within the gloom you hear a deafening roar, and you draw your weapon.", "questBunnyBoss": "Killer Bunny", "questBunnyCompletion": "With one final blow the killer rabbit sinks to the ground. A sparkly mist rises from her body as she shrinks down into a tiny bunny... nothing like the cruel beast you faced a moment before. Her nose twitches adorably and she hops away, leaving some eggs behind. @Gully laughs. \"Mount Procrastination has a way of making even the smallest challenges seem insurmountable. Let's gather these eggs and head for home.\"", "questBunnyDropBunnyEgg": "Bunny (Egg)", - "questBunnyUnlockText": "Unlocks purchasable Bunny eggs in the Market", + "questBunnyUnlockText": "Unlocks Bunny Eggs for purchase in the Market", "questSlimeText": "The Jam Regent", "questSlimeNotes": "As you work on your tasks, you notice you are moving slower and slower. \"It's like walking through molasses,\" @Leephon grumbles. \"No, like walking through jam!\" @starsystemic says. \"That slimy Jelly Regent has slathered his stuff all over Habitica. It's gumming up the works. Everybody is slowing down.\" You look around. The streets are slowly filling with clear, colourful ooze, and Habiticans are struggling to get anything done. As others flee the area, you grab a mop and prepare for battle!", "questSlimeBoss": "Jam Regent", "questSlimeCompletion": "With a final jab, you trap the Jam Regent in an over-sized doughnut, rushed in by @Overomega, @LordDarkly, and @Shaner, the quick-thinking leaders of the pastry club. As everyone is patting you on the back, you feel someone slip something into your pocket. It’s the reward for your sweet success: three Marshmallow Slime eggs.", "questSlimeDropSlimeEgg": "Marshmallow Slime (Egg)", - "questSlimeUnlockText": "Unlocks purchasable Slime eggs in the Market", + "questSlimeUnlockText": "Unlocks Marshmallow Slime Eggs for purchase in the Market", "questSheepText": "The Thunder Ram", "questSheepNotes": "As you wander the rural Taskan countryside with friends, taking a \"quick break\" from your obligations, you find a cosy yarn shop. You are so absorbed in your procrastination that you hardly notice the ominous clouds creep over the horizon. \"I've got a ba-a-a-ad feeling about this weather,\" mutters @Misceo, and you look up. The stormy clouds are swirling together, and they look a lot like a... \"We don't have time for cloud-gazing!\" @starsystemic shouts. \"It's attacking!\" The Thunder Ram hurtles forward, slinging bolts of lightning right at you!", "questSheepBoss": "Thunder Ram", "questSheepCompletion": "Impressed by your diligence, the Thunder Ram is drained of its fury. It launches three huge hailstones in your direction, and then fades away with a low rumble. Upon closer inspection, you discover that the hailstones are actually three fluffy eggs. You gather them up, and then stroll home under a blue sky.", "questSheepDropSheepEgg": "Sheep (Egg)", - "questSheepUnlockText": "Unlocks purchasable Sheep eggs in the Market", + "questSheepUnlockText": "Unlocks Sheep Eggs for purchase in the Market", "questKrakenText": "The Kraken of Inkomplete", "questKrakenNotes": "It's a warm, sunny day as you sail across the Inkomplete Bay, but your thoughts are clouded with worries about everything that you still need to do. It seems that as soon as you finish one task, another crops up, and then another...

Suddenly, the boat gives a horrible jolt, and slimy tentacles burst out of the water on all sides! \"We're being attacked by the Kraken of Inkomplete!\" Wolvenhalo cries.

\"Quickly!\" Lemoness calls to you. \"Strike down as many tentacles and tasks as you can, before new ones can rise up to take their place!\"", "questKrakenBoss": "The Kraken of Inkomplete", "questKrakenCompletion": "As the Kraken flees, several eggs float to the surface of the water. Lemoness examines them, and her suspicion turns to delight. \"Cuttlefish eggs!\" she says. \"Here, take them as a reward for everything you've completed.\"", "questKrakenDropCuttlefishEgg": "Cuttlefish (Egg)", - "questKrakenUnlockText": "Unlocks purchasable Cuttlefish eggs in the Market", + "questKrakenUnlockText": "Unlocks Cuttlefish Eggs for purchase in the Market", "questWhaleText": "Wail of the Whale", "questWhaleNotes": "You arrive at the Diligent Docks, hoping to take a submarine to watch the Dilatory Derby. Suddenly, a deafening bellow forces you to stop and cover your ears. \"Thar she blows!\" cries Captain @krazjega, pointing to a huge, wailing whale. \"It's not safe to send out the submarines while she's thrashing around!\"

\"Quick,\" calls @UncommonCriminal. \"Help me calm the poor creature so we can figure out why she's making all this noise!\"", "questWhaleBoss": "Wailing Whale", "questWhaleCompletion": "After much hard work, the whale finally ceases her thunderous cry. \"Looks like she was drowning in waves of negative habits,\" @zoebeagle explains. \"Thanks to your consistent effort, we were able to turn the tides!\" As you step into the submarine, several whale eggs bob towards you, and you scoop them up.", "questWhaleDropWhaleEgg": "Whale (Egg)", - "questWhaleUnlockText": "Unlocks purchasable Whale eggs in the Market", + "questWhaleUnlockText": "Unlocks Whale Eggs for purchase in the Market", "questGroupDilatoryDistress": "Dilatory Distress", "questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle", "questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.", @@ -257,13 +257,13 @@ "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", "questCheetahBoss": "Cheetah", "questCheetahDropCheetahEgg": "Cheetah (Egg)", - "questCheetahUnlockText": "Unlocks purchasable Cheetah eggs in the Market", + "questCheetahUnlockText": "Unlocks Cheetah Eggs for purchase in the Market", "questHorseText": "Ride the Night-Mare", "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", "questHorseBoss": "Night-Mare", "questHorseDropHorseEgg": "Horse (Egg)", - "questHorseUnlockText": "Unlocks purchasable Horse eggs in the Market", + "questHorseUnlockText": "Unlocks Horse Eggs for purchase in the Market", "questBurnoutText": "Burnout and the Exhaust Spirits", "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", @@ -281,41 +281,41 @@ "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", "questFrogBoss": "Clutter Frog", "questFrogDropFrogEgg": "Frog (Egg)", - "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questFrogUnlockText": "Unlocks Frog Eggs for purchase in the Market", "questSnakeText": "The Serpent of Distraction", - "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveller astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", "questSnakeBoss": "Serpent of Distraction", "questSnakeDropSnakeEgg": "Snake (Egg)", - "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market", + "questSnakeUnlockText": "Unlocks Snake Eggs for purchase in the Market", "questUnicornText": "Convincing the Unicorn Queen", "questUnicornNotes": "Conquest Creek has become muddied, destroying Habit City's fresh water supply! Luckily, @Lukreja knows an old legend that claims that a unicorn's horn can purify the foulest of waters. Together with your intrepid guide @UncommonCriminal, you hike through the frozen peaks of the Meandering Mountains. Finally, at the icy summit of Mount Habitica itself, you find the Unicorn Queen amid the glittering snows. \"Your pleas are compelling,\" she tells you. \"But first you must prove that you are worthy of my aid!\"", "questUnicornCompletion": "Impressed by your diligence and strength, the Unicorn Queen at last agrees that your cause is worthy. She allows you to ride on her back as she soars to the source of Conquest Creek. As she lowers her golden horn to the befouled waters, a brilliant blue light rises from the water’s surface. It is so blinding that you are forced to close your eyes. When you open them a moment later, the unicorn is gone. However, @rosiesully lets out a cry of delight: the water is now clear, and three shining eggs rest at the creek’s edge.", "questUnicornBoss": "The Unicorn Queen", "questUnicornDropUnicornEgg": "Unicorn (Egg)", - "questUnicornUnlockText": "Unlocks purchasable Unicorn eggs in the Market", + "questUnicornUnlockText": "Unlocks Unicorn Eggs for purchase in the Market", "questSabretoothText": "The Sabre Cat", "questSabretoothNotes": "A roaring monster is terrorizing Habitica! The creature stalks through the wilds and woods, then bursts forth to attack before vanishing again. It's been hunting innocent pandas and frightening the flying pigs into fleeing their pens to roost in the trees. @InspectorCaracal and @icefelis explain that the Zombie Sabre Cat was set free while they were excavating in the ancient, untouched ice-fields of the Stoïkalm Steppes. \"It was perfectly friendly at first – I don't know what happened. Please, you have to help us recapture it! Only a champion of Habitica can subdue this prehistoric beast!\"", "questSabretoothCompletion": "After a long and tiring battle, you wrestle the Zombie Sabre Cat to the ground. As you are finally able to approach, you notice a nasty cavity in one of its sabre teeth. Realising the true cause of the cat's wrath, you're able to get the cavity filled by @Fandekasp, and advise everyone to avoid feeding their friend sweets in future. The Sabre Cat flourishes, and in gratitude, its tamers send you a generous reward – a clutch of sabretooth eggs!", "questSabretoothBoss": "Zombie Sabre Cat", "questSabretoothDropSabretoothEgg": "Sabretooth (Egg)", - "questSabretoothUnlockText": "Unlocks purchasable Sabretooth eggs in the Market", + "questSabretoothUnlockText": "Unlocks Sabretooth Eggs for purchase in the Market", "questMonkeyText": "Monstrous Mandrill and the Mischief Monkeys", "questMonkeyNotes": "The Sloensteadi Savannah is being torn apart by the Monstrous Mandrill and his Mischief Monkeys! They shriek loudly enough to drown out the sound of approaching deadlines, encouraging everyone to avoid their duties and keep monkeying around. Alas, plenty of people ape this bad behavior. If no one stops these primates, soon everyone's tasks will be as red as the Monstrous Mandrill's face!

\"It will take a dedicated adventurer to resist them,\" says @yamato.

\"Quick, let's get this monkey off everyone's backs!\" @Oneironaut yells, and you charge into battle.", "questMonkeyCompletion": "You did it! No bananas for those fiends today. Overwhelmed by your diligence, the monkeys flee in panic. \"Look,\" says @Misceo. \"They left a few eggs behind.\"

@Leephon grins. \"Maybe a well-trained pet monkey can help you as much as the wild ones hinder you!\"", "questMonkeyBoss": "Monstrous Mandrill", "questMonkeyDropMonkeyEgg": "Monkey (Egg)", - "questMonkeyUnlockText": "Unlocks purchasable Monkey eggs in the Market", + "questMonkeyUnlockText": "Unlocks Monkey Eggs for purchase in the Market", "questSnailText": "The Snail of Drudgery Sludge", "questSnailNotes": "You're excited to begin questing in the abandoned Dungeons of Drudgery, but as soon as you enter, you feel the ground under your feet start to suck at your boots. You look up to the path ahead and see Habiticans mired in slime. @Overomega yells, \"They have too many unimportant tasks and dailies, and they're getting stuck on things that don't matter! Pull them out!\"

\"You need to find the source of the ooze,\" @Pfeffernusse agrees, \"or the tasks that they cannot accomplish will drag them down forever!\"

Pulling out your weapon, you wade through the gooey mud.... and encounter the fearsome Snail of Drudgery Sludge.", "questSnailCompletion": "You bring your weapon down on the great Snail's shell, cracking it in two, releasing a flood of water. The slime is washed away, and the Habiticans around you rejoice. \"Look!\" says @Misceo. \"There's a small group of snail eggs in the remnants of the muck.\"", "questSnailBoss": "Snail of Drudgery Sludge", "questSnailDropSnailEgg": "Snail (Egg)", - "questSnailUnlockText": "Unlocks purchasable Snail eggs in the Market", + "questSnailUnlockText": "Unlocks Snail Eggs for purchase in the Market", "questBewilderText": "The Be-Wilder", "questBewilderNotes": "The party begins like any other.

The appetisers are excellent, the music is swinging, and even the dancing elephants have become routine. Habiticans laugh and frolic amid the overflowing floral centrepieces, happy to have a distraction from their least-favourite tasks, and the April Fool whirls among them, eagerly providing an amusing trick here and a witty twist there.

As the Mistiflying clock tower strikes midnight, the April Fool leaps onto the stage to give a speech.

“Friends! Enemies! Tolerant acquaintances! Lend me your ears.” The crowd chuckles as animal ears sprout from their heads, and they pose with their new accessories.

“As you know,” the Fool continues, “my confusing illusions usually only last a single day. But I’m pleased to announce that I’ve discovered a shortcut that will guarantee us non-stop fun, without having to deal with the pesky weight of our responsibilities. Charming Habiticans, meet my magical new friend... the Be-Wilder!”

Lemoness pales suddenly, dropping her hors d'oeuvres. “Wait! Don’t trust--”

But suddenly mists are pouring into the room, glittering and thick, and they swirl around the April Fool, coalescing into cloudy feathers and a stretching neck. The crowd is speechless as an monstrous bird unfolds before them, its wings shimmering with illusions. It lets out a horrible screeching laugh.

“Oh, it has been ages since a Habitican has been foolish enough to summon me! How wonderful it feels, to have a tangible form at last.”

Buzzing in terror, the magic bees of Mistiflying flee the floating city, which sags from the sky. One by one, the brilliant spring flowers wither up and wisp away.

“My dearest friends, why so alarmed?” crows the Be-Wilder, beating its wings. “There’s no need to toil for your rewards any more. I’ll just give you all the things that you desire!”

A rain of coins pours from the sky, hammering into the ground with brutal force, and the crowd screams and flees for cover. “Is this a joke?” Baconsaur shouts, as the gold smashes through windows and shatters roof shingles.

PainterProphet ducks as lightning bolts crackle overhead, and fog blots out the sun. “No! This time, I don’t think it is!”

Quickly, Habiticans, don’t let this World Boss distract us from our goals! Stay focused on the tasks that you need to complete so we can rescue Mistiflying -- and hopefully, ourselves.", - "questBewilderCompletion": "The Be-Wilder is DEFEATED!

We've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.

Mistiflying is saved!

The April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”

The crowd mutters. Sodden flowers wash up on pavements. Somewhere in the distance, a roof collapses with a spectacular splash.

“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”

Redphoenix coughs meaningfully.

“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”

Encouraged, the marching band starts up.

It isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.

As Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honour.”", - "questBewilderCompletionChat": "`The Be-Wilder is DEFEATED!`\n\nWe've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.\n\n`Mistiflying is saved!`\n\nThe April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”\n\nThe crowd mutters. Sodden flowers wash up on pavements. Somewhere in the distance, a roof collapses with a spectacular splash.\n\n“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”\n\nRedphoenix coughs meaningfully.\n\n“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”\n\nEncouraged, the marching band starts up.\n\nIt isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.\n\nAs Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honour.”", + "questBewilderCompletion": "The Be-Wilder is DEFEATED!

We've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.

Mistiflying is saved!

The April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”

The crowd mutters. Sodden flowers wash up on pavements. Somewhere in the distance, a roof collapses with a spectacular splash.

“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”

Redphoenix coughs meaningfully.

“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”

Encouraged, the marching band starts up.

It isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.

As Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolises the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honour.”", + "questBewilderCompletionChat": "`The Be-Wilder is DEFEATED!`\n\nWe've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.\n\n`Mistiflying is saved!`\n\nThe April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”\n\nThe crowd mutters. Sodden flowers wash up on pavements. Somewhere in the distance, a roof collapses with a spectacular splash.\n\n“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”\n\nRedphoenix coughs meaningfully.\n\n“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”\n\nEncouraged, the marching band starts up.\n\nIt isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.\n\nAs Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolises the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honour.”", "questBewilderBossRageTitle": "Beguilement Strike", "questBewilderBossRageDescription": "When this gauge fills, The Be-Wilder will unleash its Beguilement Strike on Habitica!", "questBewilderDropBumblebeePet": "Magical Bee (Pet)", @@ -328,19 +328,19 @@ "questFalconCompletion": "Having finally triumphed over the Birds of Preycrastination, you settle down to enjoy the view and your well-earned rest.

\"Wow!\" says @Trogdorina. \"You won!\"

@Squish adds, \"Here, take these eggs I found as a reward.\"", "questFalconBoss": "Birds of Preycrastination", "questFalconDropFalconEgg": "Falcon (Egg)", - "questFalconUnlockText": "Unlocks purchasable Falcon eggs in the Market", + "questFalconUnlockText": "Unlocks Falcon Eggs for purchase in the Market", "questTreelingText": "The Tangle Tree", "questTreelingNotes": "It's the annual Garden Competition, and everyone is talking about the mysterious project which @aurakami has promised to unveil. You join the crowd on the day of the big announcement, and marvel at the introduction of a moving tree. @fuzzytrees explains that the tree will help with garden maintenance, showing how it can mow the lawn, trim the hedge and prune the roses all at the same time – until the tree suddenly goes wild, turning its secateurs on its creator! The crowd panics as everyone tries to flee, but you aren't afraid – you leap forward, ready to do battle.", "questTreelingCompletion": "You dust yourself off as the last few leaves drift to the floor. In spite of the upset, the Garden Competition is now safe – although the tree you just reduced to a heap of wood chips won't be winning any prizes! \"Still a few kinks to work out there,\" @PainterProphet says. \"Perhaps someone else would do a better job of training the saplings. Do you fancy a go?\"", "questTreelingBoss": "Tangle Tree", "questTreelingDropTreelingEgg": "Treeling (Egg)", - "questTreelingUnlockText": "Unlocks purchasable Treeling eggs in the Market", + "questTreelingUnlockText": "Unlocks Treeling Eggs for purchase in the Market", "questAxolotlText": "The Magical Axolotl", "questAxolotlNotes": "From the depths of Washed-Up Lake you see rising bubbles and... fire? A little axolotl rises from the murky water spewing streaks of colours. Suddenly it begins to open its mouth and @streak yells, \"Look out!\" as the Magical Axolotl starts to gulp up your willpower!

The Magical Axolotl swells with spells, taunting you. \"Have you heard of my powers of regeneration? You'll tire before I do!\"

\"We can defeat you with the good habits we've built!\" @PainterProphet defiantly shouts. You steel yourself to be productive to defeat the Magical Axolotl and regain your stolen willpower!", "questAxolotlCompletion": "After defeating the Magical Axolotl, you realise that you regained your willpower all on your own.

\"The willpower? The regeneration? It was all just an illusion?\" @Kiwibot asks.

\"Most magic is,\" the Magical Axolotl replies. \"I'm sorry for tricking you. Please take these eggs as an apology. I trust you to raise them to use their magic for good habits and not evil!\"

You and @hazel40 clutch your new eggs in one hand and wave goodbye with the other as the Magical Axolotl returns to the lake.", "questAxolotlBoss": "Magical Axolotl", "questAxolotlDropAxolotlEgg": "Axolotl (Egg)", - "questAxolotlUnlockText": "Unlocks purchasable Axolotl eggs in the Market", + "questAxolotlUnlockText": "Unlocks Axolotl Eggs for purchase in the Market", "questAxolotlRageTitle": "Axolotl Regeneration", "questAxolotlRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Magical Axolotl will heal 30% of its remaining health!", "questAxolotlRageEffect": "`Magical Axolotl uses AXOLOTL REGENERATION!`\n\n`A curtain of colourful bubbles obscures the monster for a moment, and when it clears, some of its wounds have vanished!`", @@ -349,25 +349,25 @@ "questTurtleCompletion": "Your valiant work has cleared the waters for our sea turtle to find her beach. You, @Bambin, and @JaizakAripaik watch as she buries her brood of eggs deep in the sand so they can grow and hatch into hundreds of little sea turtles. Ever the lady, she gives you three eggs each, asking that you feed and nurture them so one day they become big sea turtles themselves.", "questTurtleBoss": "Task Flotsam", "questTurtleDropTurtleEgg": "Turtle (Egg)", - "questTurtleUnlockText": "Unlocks purchasable Turtle eggs in the Market", + "questTurtleUnlockText": "Unlocks Turtle Eggs for purchase in the Market", "questArmadilloText": "The Indulgent Armadillo", "questArmadilloNotes": "It's time to get outside and start your day. You swing open your door only to be met with what looks like a sheet of rock. \"I'm just giving you the day off!\" says a muffled voice through the blocked door. \"Don't be such a bummer, just relax today!\"

Suddenly, @Beffymaroo and @PainterProphet knock on your window. \"Looks like the Indulgent Armadillo has taken a liking to you! C'mon, we'll help you get her out of your way!\"", "questArmadilloCompletion": "Finally, after a long morning of convincing the Indulgent Armadillo that you do, in fact, want to work, she caves. \"I'm sorry!\" She apologises. \"I just wanted to help. I thought everyone liked lazy days!\"

You smile, and let her know that next time you've earned a day off you'll invite her over. She grins back at you. Passers-by @Tipsy and @krajzega congratulate you on the good work as she rolls away, leaving a few eggs as an apology.", "questArmadilloBoss": "Indulgent Armadillo", "questArmadilloDropArmadilloEgg": "Armadillo (Egg)", - "questArmadilloUnlockText": "Unlocks purchasable Armadillo eggs in the Market", + "questArmadilloUnlockText": "Unlocks Armadillo Eggs for purchase in the Market", "questCowText": "The Mootant Cow", "questCowNotes": "It’s been a long, hot day at Sparring Farms, and there is nothing more you want than a long sip of water and some sleep. You're standing there daydreaming when @Soloana suddenly screams, \"Everyone run! The prize cow has mootated!\"

@eevachu gulps. \"It must be our bad habits that infected it.\"

\"Quick!\" @Feralem Tau says. \"Let’s do something before the udder cows mootate, too.\"

You’ve herd enough. No more daydreaming -- it's time to get those bad habits under control!", "questCowCompletion": "You milk your good habits for all they are worth until the cow reverts to its original form. The cow looks over at you with her pretty brown eyes and nudges over three eggs.

@fuzzytrees laughs and hands you the eggs, \"Maybe it still is mootated if there are baby cows in these eggs. But I trust you to stick to your good habits when you raise them!\"", "questCowBoss": "Mootant Cow", "questCowDropCowEgg": "Cow (Egg)", - "questCowUnlockText": "Unlocks purchasable Cow eggs in the Market", + "questCowUnlockText": "Unlocks Cow Eggs for purchase in the Market", "questBeetleText": "The CRITICAL BUG", "questBeetleNotes": "Something in the domain of Habitica has gone awry. The Blacksmiths' forges have extinguished, and strange errors are appearing everywhere. With an ominous tremor, an insidious foe worms from the earth... a CRITICAL BUG! You brace yourself as it infects the land, and glitches begin to overtake the Habiticans around you. @starsystemic yells, \"We need to help the Blacksmiths get this Bug under control!\" It looks like you'll have to make this programmer's pest your top priority.", "questBeetleCompletion": "With a final attack, you crush the CRITICAL BUG. @starsystemic and the Blacksmiths rush up to you, overjoyed. \"I can't thank you enough for smashing that bug! Here, take these.\" You are presented with three shiny beetle eggs. Hopefully these little bugs will grow up to help Habitica, not hurt it.", "questBeetleBoss": "CRITICAL BUG", "questBeetleDropBeetleEgg": "Beetle (Egg)", - "questBeetleUnlockText": "Unlocks purchasable Beetle eggs in the Market", + "questBeetleUnlockText": "Unlocks Beetle Eggs for purchase in the Market", "questGroupTaskwoodsTerror": "Terror in the Taskwoods", "questTaskwoodsTerror1Text": "Terror in the Taskwoods, Part 1: The Blaze in the Taskwoods", "questTaskwoodsTerror1Notes": "You have never seen the Joyful Reaper so agitated. The ruler of the Flourishing Fields lands her skeleton gryphon mount right in the middle of Productivity Plaza and shouts without dismounting. \"Lovely Habiticans, we need your help! Something is starting fires in the Taskwoods, and we still haven't fully recovered from our battle against Burnout. If it's not halted, the flames could engulf all of our wild orchards and berry bushes!\"

You quickly volunteer, and hasten to the Taskwoods. As you creep into Habitica’s biggest fruit-bearing forest, you suddenly hear clanking and cracking voices from far ahead, and catch the faint smell of smoke. Soon enough, a horde of cackling, flaming skull-creatures flies by you, biting off branches and setting the treetops on fire!", @@ -397,7 +397,7 @@ "questFerretCompletion": "You defeat the soft-furred swindler and @UncommonCriminal gives the crowd their refunds. There's even a little gold left over for you. Plus, it looks like the Nefarious Ferret dropped some eggs in his hurry to get away!", "questFerretBoss": "Nefarious Ferret", "questFerretDropFerretEgg": "Ferret (Egg)", - "questFerretUnlockText": "Unlocks purchasable Ferret eggs in the Market", + "questFerretUnlockText": "Unlocks Ferret Eggs for purchase in the Market", "questDustBunniesText": "The Feral Dust Bunnies", "questDustBunniesNotes": "It's been a while since you've done any dusting in here, but you're not too worried—a little dust never hurt anyone, right? It's not until you stick your hand into one of the dustiest corners and feel something bite that you remember @InspectorCaracal's warning: leaving harmless dust sit too long causes it to turn into vicious dust bunnies! You'd better defeat them before they cover all of Habitica in fine particles of dirt!", "questDustBunniesCompletion": "The dust bunnies vanish into a puff of... well, dust. As it clears, you look around. You'd forgotten how nice this place looks when it's clean. You spy a small pile of gold where the dust used to be. Huh, you'd been wondering where that was!", @@ -419,17 +419,17 @@ "questMoon3Boss": "Monstrous Moon", "questMoon3DropWeapon": "Lunar Scythe (Two-Handed Weapon)", "questSlothText": "The Somnolent Sloth", - "questSlothNotes": "As you and your party venture through the Somnolent Snowforest, you're relieved to see a glimmering of green among the white snowdrifts... until an enormous sloth emerges from the frosty trees! Green emeralds shimmer hypnotically on its back.

\"Hello, adventurers... why don't you take it slow? You've been walking for a while... so why not... stop? Just lie down, and rest...\"

You feel your eyelids grow heavy, and you realize: It's the Somnolent Sloth! According to @JaizakAripaik, it got its name from the emeralds on its back which are rumored to... send people to... sleep...

You shake yourself awake, fighting drowsiness. In the nick of time, @awakebyjava and @PainterProphet begin to shout spells, forcing your party awake. \"Now's our chance!\" @Kiwibot yells.", + "questSlothNotes": "As you and your party venture through the Somnolent Snowforest, you're relieved to see a glimmering of green among the white snowdrifts... until an enormous sloth emerges from the frosty trees! Green emeralds shimmer hypnotically on its back.

\"Hello, adventurers... why don't you take it slow? You've been walking for a while... so why not... stop? Just lie down, and rest...\"

You feel your eyelids grow heavy, and you realise: It's the Somnolent Sloth! According to @JaizakAripaik, it got its name from the emeralds on its back which are rumored to... send people to... sleep...

You shake yourself awake, fighting drowsiness. In the nick of time, @awakebyjava and @PainterProphet begin to shout spells, forcing your party awake. \"Now's our chance!\" @Kiwibot yells.", "questSlothCompletion": "You did it! As you defeat the Somnolent Sloth, its emeralds break off. \"Thank you for freeing me of my curse,\" says the sloth. \"I can finally sleep well, without those heavy emeralds on my back. Have these eggs as thanks, and you can have the emeralds too.\" The sloth gives you three sloth eggs and heads off for warmer climates.", "questSlothBoss": "Somnolent Sloth", "questSlothDropSlothEgg": "Sloth (Egg)", - "questSlothUnlockText": "Unlocks purchasable Sloth eggs in the Market", + "questSlothUnlockText": "Unlocks Sloth Eggs for purchase in the Market", "questTriceratopsText": "The Trampling Triceratops", "questTriceratopsNotes": "The snow-capped Stoïkalm Volcanoes are always bustling with hikers and sight-seers. One tourist, @plumilla, calls over a crowd. \"Look! I enchanted the ground to glow so that we can play field games on it for our outdoor activity Dailies!\" Sure enough, the ground is swirling with glowing red patterns. Even some of the prehistoric pets from the area come over to play.

Suddenly, there's a loud snap -- a curious Triceratops has stepped on @plumilla's wand! It's engulfed in a burst of magic energy, and the ground starts shaking and growing hot. The Triceratops' eyes shine red, and it roars and begins to stampede!

\"That's not good,\" calls @McCoyly, pointing in the distance. Each magic-fueled stomp is causing the volcanoes to erupt, and the glowing ground is turning to lava beneath the dinosaur's feet! Quickly, you must hold off the Trampling Triceratops until someone can reverse the spell!", "questTriceratopsCompletion": "With quick thinking, you herd the creature towards the soothing Stoïkalm Steppes so that @*~Seraphina~* and @PainterProphet can reverse the lava spell without distraction. The calming aura of the Steppes takes effect, and the Triceratops curls up as the volcanoes go dormant once more. @PainterProphet passes you some eggs that were rescued from the lava. \"Without you, we wouldn't have been able to concentrate to stop the eruptions. Give these pets a good home.\"", "questTriceratopsBoss": "Trampling Triceratops", "questTriceratopsDropTriceratopsEgg": "Triceratops (Egg)", - "questTriceratopsUnlockText": "Unlocks purchasable Triceratops eggs in the Market", + "questTriceratopsUnlockText": "Unlocks Triceratops Eggs for purchase in the Market", "questGroupStoikalmCalamity": "Stoïkalm Calamity", "questStoikalmCalamity1Text": "Stoïkalm Calamity, Part 1: Earthen Enemies", "questStoikalmCalamity1Notes": "A terse missive arrives from @Kiwibot, and the frost-crusted scroll chills your heart as well as your fingertips. \"Visiting Stoïkalm Steppes -- monsters bursting from earth -- send help!\" You gather your party and ride north, but as soon as you venture down from the mountains, the snow beneath your feet explodes and gruesomely grinning skulls surround you!

Suddenly, a spear sails past, burying itself in a skull that was burrowing through the snow in an attempt to catch you unawares. A tall woman in finely-crafted armour gallops into the fray on the back of a mastodon, her long braid swinging as she yanks the spear unceremoniously from the crushed beast. It's time to fight off these foes with the help of Lady Glaciate, the leader of the Mammoth Riders!", @@ -458,19 +458,19 @@ "questGuineaPigCompletion": "\"We submit!\" The Guinea Pig Gang Boss waves his paws at you, fluffy head hanging in shame. From underneath his hat falls a list, and @snazzyorange quickly swipes it for evidence. \"Wait a minute,\" you say. \"It's no wonder you've been getting hurt! You've got way too many Dailies. You don't need health potions -- you just need help organising.\"

\"Really?\" squeaks the Guinea Pig Gang Boss. \"We've robbed so many people because of this! Please take our eggs as an apology for our crooked ways.\"", "questGuineaPigBoss": "Guinea Pig Gang", "questGuineaPigDropGuineaPigEgg": "Guinea Pig (Egg)", - "questGuineaPigUnlockText": "Unlocks purchasable Guinea Pig eggs in the Market", + "questGuineaPigUnlockText": "Unlocks Guinea Pig Eggs for purchase in the Market", "questPeacockText": "The Push-and-Pull Peacock", "questPeacockNotes": "You trek through the Taskwoods, wondering which of the enticing new goals you should pick. As you go deeper into the forest, you realise that you're not alone in your indecision. \"I could learn a new language, or go to the gym...\" @Cecily Perez mutters. \"I could sleep more,\" muses @Lilith of Alfheim, \"or spend time with my friends...\" It looks like @PainterProphet, @Pfeffernusse, and @Draayder are equally paralysed by the overwhelming options.

You realise that these ever-more-demanding feelings aren't really your own... you've stumbled straight into the trap of the pernicious Push-and-Pull Peacock! Before you can run, it leaps from the bushes. With each head pulling you in conflicting directions, you start to feel burnout overcoming you. You can't defeat both foes at once, so you only have one option -- concentrate on the nearest task to fight back!", "questPeacockCompletion": "The Push-and-Pull Peacock is caught off guard by your sudden conviction. Defeated by your single-minded drive, its heads merge back into one, revealing the most beautiful creature you've ever seen. \"Thank you,\" the peacock says. \"I’ve spent so long pulling myself in different directions that I lost sight of what I truly wanted. Please accept these eggs as a token of my gratitude.\"", "questPeacockBoss": "Push-and-Pull Peacock", "questPeacockDropPeacockEgg": "Peacock (Egg)", - "questPeacockUnlockText": "Unlocks purchasable Peacock eggs in the Market", + "questPeacockUnlockText": "Unlocks Peacock Eggs for purchase in the Market", "questButterflyText": "Bye, Bye, Butterfry", "questButterflyNotes": "Your gardener friend @Megan sends you an invitation: “These warm days are the perfect time to visit Habitica’s butterfly garden in the Taskan countryside. Come see the butterflies migrate!” When you arrive, however, the garden is in shambles -- little more than scorched grass and dried-out weeds. It’s been so hot that the Habiticans haven’t come out to water the flowers, and the dark-red Dailies have turned it into a dry, sun-baked, fire-hazard. There's only one butterfly there, and there's something odd about it...

“Oh no! This is the perfect hatching ground for the Flaming Butterfry,” cries @Leephon.

“If we don’t catch it, it’ll destroy everything!” gasps @Eevachu.

Time to say bye, bye to Butterfry!", "questButterflyCompletion": "After a blazing battle, the Flaming Butterfry is captured. “Great job catching the that would-be arsonist,” says @Megan with a sigh of relief. “Still, it’s hard to vilify even the vilest butterfly. We’d better free this Butterfry someplace safe…like the desert.”

One of the other gardeners, @Beffymaroo, comes up to you, singed but smiling. “Will you help raise these foundling chrysalises we found? Perhaps next year we’ll have a greener garden for them.”", "questButterflyBoss": "Flaming Butterfry", "questButterflyDropButterflyEgg": "Caterpillar (Egg)", - "questButterflyUnlockText": "Unlocks purchasable Caterpillar eggs in the Market", + "questButterflyUnlockText": "Unlocks Caterpillar Eggs for purchase in the Market", "questGroupMayhemMistiflying": "Mayhem in Mistiflying", "questMayhemMistiflying1Text": "Mayhem in Mistiflying, Part 1: In Which Mistiflying Experiences a Dreadful Bother", "questMayhemMistiflying1Notes": "Although local soothsayers predicted pleasant weather, the afternoon is extremely breezy, so you gratefully follow your friend @Kiwibot into their house to escape the blustery day.

Neither of you expects to find the April Fool lounging at the kitchen table.

“Oh, hello,” he says. “Fancy seeing you here. Please, let me offer you some of this delicious tea.”

“That’s…” @Kiwibot begins. “That’s MY—“

“Yes, yes, of course,” says the April Fool, helping himself to some cookies. “Just thought I’d pop indoors and get a nice reprieve from all the tornado-summoning skulls.” He takes a casual sip from his teacup. “Incidentally, the city of Mistiflying is under attack.”

Horrified, you and your friends race to the Stables and saddle your fastest winged mounts. As you soar towards the floating city, you see that a swarm of chattering, flying skulls are laying siege to the city… and several turn their attentions towards you!", @@ -490,7 +490,7 @@ "questMayhemMistiflying2CollectGreenMistiflies": "Green Mistiflies", "questMayhemMistiflying2DropHeadgear": "Roguish Rainbow Messenger Hood (Headgear)", "questMayhemMistiflying3Text": "Mayhem in Mistiflying, Part 3: In Which a Mailman is Extremely Rude", - "questMayhemMistiflying3Notes": "The Mistiflies are whirling so thickly through the tornado that it’s hard to see. Squinting, you spot a many-winged silhouette floating at the center of the tremendous storm.

“Oh, dear,” the April Fool sighs, nearly drowned out by the howl of the weather. “Looks like Winny went and got himself possessed. Very relatable problem, that. Could happen to anybody.”

“The Wind-Worker!” @Beffymaroo hollers at you. “He’s Mistiflying’s most talented messenger-mage, since he’s so skilled with weather magic. Normally he’s a very polite mailman!”

As if to counteract this statement, the Wind-Worker lets out a scream of fury, and even with your magic robes, the storm nearly rips you from your mount.

“That gaudy mask is new,” the April Fool remarks. “Perhaps you should relieve him of it?”

It’s a good idea… but the enraged mage isn’t going to give it up without a fight.", + "questMayhemMistiflying3Notes": "The Mistiflies are whirling so thickly through the tornado that it’s hard to see. Squinting, you spot a many-winged silhouette floating at the centre of the tremendous storm.

“Oh, dear,” the April Fool sighs, nearly drowned out by the howl of the weather. “Looks like Winny went and got himself possessed. Very relatable problem, that. Could happen to anybody.”

“The Wind-Worker!” @Beffymaroo hollers at you. “He’s Mistiflying’s most talented messenger-mage, since he’s so skilled with weather magic. Normally he’s a very polite mailman!”

As if to counteract this statement, the Wind-Worker lets out a scream of fury, and even with your magic robes, the storm nearly rips you from your mount.

“That gaudy mask is new,” the April Fool remarks. “Perhaps you should relieve him of it?”

It’s a good idea… but the enraged mage isn’t going to give it up without a fight.", "questMayhemMistiflying3Completion": "Just as you think you can’t withstand the wind any longer, you manage to snatch the mask from the Wind-Worker’s face. Instantly, the tornado is sucked away, leaving only balmy breezes and sunshine. The Wind-Worker looks around in bemusement. “Where did she go?”

“Who?” your friend @khdarkwolf asks.

“That sweet woman who offered to deliver a package for me. Tzina.” As he takes in the wind-swept city below him, his expression darkens. “Then again, maybe she wasn’t so sweet…”

The April Fool pats him on the back, then hands you two shimmering envelopes. “Here. Why don’t you let this distressed fellow rest, and take charge of the mail for a bit? I hear the magic in those envelopes will make them worth your while.”", "questMayhemMistiflying3Boss": "The Wind-Worker", "questMayhemMistiflying3DropPinkCottonCandy": "Pink Cotton Candy (Food)", @@ -498,12 +498,12 @@ "questMayhemMistiflying3DropWeapon": "Roguish Rainbow Message (Main-Hand Item)", "featheredFriendsText": "Feathered Friends Quest Bundle", "featheredFriendsNotes": "Contains 'Help! Harpy!,' 'The Night-Owl,' and 'The Birds of Preycrastination.' Available until May 31.", - "questNudibranchText": "Infestation of the NowDo Nudibranches", - "questNudibranchNotes": "You finally get around to checking your To-dos on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colours make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy...

The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranches have been stinging you all over! You need to take a break!”

Shocked, you see that your skin is as bright red as your To-Do list was. \"Being productive is one thing,\" @beffymaroo says, \"but you've also got to take care of yourself. Hurry, let's get rid of them!\"", - "questNudibranchCompletion": "You see the last of the NowDo Nudibranches sliding off of a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.", + "questNudibranchText": "Infestation of the NowDo Nudibranchs", + "questNudibranchNotes": "You finally get around to checking your To-dos on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colours make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy...

The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranchs have been stinging you all over! You need to take a break!”

Shocked, you see that your skin is as bright red as your To-Do list was. \"Being productive is one thing,\" @beffymaroo says, \"but you've also got to take care of yourself. Hurry, let's get rid of them!\"", + "questNudibranchCompletion": "You see the last of the NowDo Nudibranchs sliding off of a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.", "questNudibranchBoss": "NowDo Nudibranch", "questNudibranchDropNudibranchEgg": "Nudibranch (Egg)", - "questNudibranchUnlockText": "Unlocks purchasable Nudibranch eggs in the Market", + "questNudibranchUnlockText": "Unlocks Nudibranch Eggs for purchase in the Market", "splashyPalsText": "Splashy Pals Quest Bundle", "splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until July 31.", "questHippoText": "What a Hippo-Crite", @@ -511,9 +511,9 @@ "questHippoCompletion": "The hippo bows in surrender. “I underestimated you. It seems you weren’t being lazy. My apologies. Truth be told, I may have been projecting a bit. Perhaps I should get some work done myself. Here, take these eggs as a sign of my gratitude.” Grabbing them, you settle down by the water, ready to relax at last.", "questHippoBoss": "The Hippo-Crite", "questHippoDropHippoEgg": "Hippo (Egg)", - "questHippoUnlockText": "Unlocks purchasable Hippo eggs in the Market", + "questHippoUnlockText": "Unlocks Hippo Eggs for purchase in the Market", "farmFriendsText": "Farm Friends Quest Bundle", - "farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until September 30.", + "farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until August 31.", "witchyFamiliarsText": "Witchy Familiars Quest Bundle", "witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'. Available until October 31.", "questGroupLostMasterclasser": "Mystery of the Masterclassers", @@ -557,25 +557,25 @@ "questYarnCompletion": "With a feeble swipe of a pin-riddled appendage and a weak roar, the Dread Yarnghetti finally unravels into a pile of yarn balls.

\"Take care of this yarn,\" shopkeeper @JinjooHat says, handing them to you. \"If you feed them and care for them properly, they'll grow into new and exciting projects that just might make your heart take flight…\"", "questYarnBoss": "The Dread Yarnghetti", "questYarnDropYarnEgg": "Yarn (Egg)", - "questYarnUnlockText": "Unlocks purchasable Yarn eggs in the Market", + "questYarnUnlockText": "Unlocks Yarn Eggs for purchase in the Market", "winterQuestsText": "Winter Quest Bundle", - "winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Available until December 31.", + "winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Available until January 31. Note that Trapper Santa and Find the Cub have stackable quest achievements but give a rare pet and mount that can only be added to your stable once.", "questPterodactylText": "The Pterror-dactyl", "questPterodactylNotes": "You're taking a stroll along the peaceful Stoïkalm Cliffs when an evil screech rends the air. You turn to find a hideous creature flying towards you and are overcome by a powerful terror. As you turn to flee, @Lilith of Alfheim grabs you. \"Don't panic! It's just a Pterror-dactyl.\"

@Procyon P nods. \"They nest nearby, but they're attracted to the scent of negative Habits and undone Dailies.\"

\"Don't worry,\" @Katy133 says. \"We just need to be extra productive to defeat it!\" You are filled with a renewed sense of purpose and turn to face your foe.", "questPterodactylCompletion": "With one last screech the Pterror-dactyl plummets over the side of the cliff. You run forward to watch it soar away over the distant steppes. \"Phew, I'm glad that's over,\" you say. \"Me too,\" replies @GeraldThePixel. \"But look! It's left some eggs behind for us.\" @Edge passes you three eggs, and you vow to raise them in tranquility, surrounded by positive Habits and blue Dailies.", "questPterodactylBoss": "Pterror-dactyl", "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", - "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", + "questPterodactylUnlockText": "Unlocks Pterodactyl Eggs for purchase in the Market", "questBadgerText": "Stop Badgering Me!", "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", "questBadgerBoss": "The Badgering Bother", "questBadgerDropBadgerEgg": "Badger (Egg)", - "questBadgerUnlockText": "Unlocks purchasable Badger eggs in the Market", + "questBadgerUnlockText": "Unlocks Badger Eggs for purchase in the Market", "questDysheartenerText": "The Dysheartener", "questDysheartenerNotes": "The sun is rising on Valentine’s Day when a shocking crash splinters the air. A blaze of sickly pink light lances through all the buildings, and bricks crumble as a deep crack rips through Habit City’s main street. An unearthly shrieking rises through the air, shattering windows as a hulking form slithers forth from the gaping earth.

Mandibles snap and a carapace glitters; legs upon legs unfurl in the air. The crowd begins to scream as the insectoid creature rears up, revealing itself to be none other than that cruelest of creatures: the fearsome Dysheartener itself. It howls in anticipation and lunges forward, hungering to gnaw on the hopes of hard-working Habiticans. With each rasping scrape of its spiny forelegs, you feel a vise of despair tightening in your chest.

“Take heart, everyone!” Lemoness shouts. “It probably thinks that we’re easy targets because so many of us have daunting New Year’s Resolutions, but it’s about to discover that Habiticans know how to stick to their goals!”

AnnDeLune raises her staff. “Let’s tackle our tasks and take this monster down!”", - "questDysheartenerCompletion": "The Dysheartener is DEFEATED!

Together, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”

Glowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigor and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.

The crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.

Our newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.

Beffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”

Crooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", - "questDysheartenerCompletionChat": "`The Dysheartener is DEFEATED!`\n\nTogether, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”\n\nGlowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigor and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.\n\nThe crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.\n\nOur newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.\n\nBeffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”\n\nCrooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", + "questDysheartenerCompletion": "The Dysheartener is DEFEATED!

Together, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”

Glowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigour and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.

The crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.

Our newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.

Beffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”

Crooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", + "questDysheartenerCompletionChat": "`The Dysheartener is DEFEATED!`\n\nTogether, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”\n\nGlowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigour and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.\n\nThe crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.\n\nOur newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.\n\nBeffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”\n\nCrooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", "questDysheartenerBossRageTitle": "Shattering Heartbreak", "questDysheartenerBossRageDescription": "The Rage Attack gauge fills when Habiticans miss their Dailies. If it fills up, the Dysheartener will unleash its Shattering Heartbreak attack on one of Habitica's shopkeepers, so be sure to do your tasks!", "questDysheartenerBossRageSeasonal": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nOh, no! After feasting on our undone Dailies, the Dysheartener has gained the strength to unleash its Shattering Heartbreak attack. With a shrill shriek, it brings its spiny forelegs down upon the pavilion that houses the Seasonal Shop! The concussive blast of magic shreds the wood, and the Seasonal Sorceress is overcome by sorrow at the sight.\n\nQuickly, let's keep doing our Dailies so that the beast won't strike again!", @@ -596,11 +596,11 @@ "hugabugText": "Hug a Bug Quest Bundle", "hugabugNotes": "Contains 'The CRITICAL BUG,' 'The Snail of Drudgery Sludge,' and 'Bye, Bye, Butterfry.' Available until March 31.", "questSquirrelText": "The Sneaky Squirrel", - "questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?

When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”

@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”

Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defense of a prodigious pile of seeds.

“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!", + "questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?

When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”

@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”

Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defence of a prodigious pile of seeds.

“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!", "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "questSquirrelUnlockText": "Unlocks Squirrel Eggs for purchase in the Market", "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.", "aquaticAmigosText": "Aquatic Amigos Quest Bundle", @@ -610,13 +610,13 @@ "questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.", "questSeaSerpentBoss": "The Mighty Sea Serpent", "questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)", - "questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market", + "questSeaSerpentUnlockText": "Unlocks Sea Serpent Eggs for purchase in the Market", "questKangarooText": "Kangaroo Catastrophe", "questKangarooNotes": "Maybe you should have finished that last task… you know, the one you keep avoiding, even though it always comes back around? But @Mewrose and @LilithofAlfheim invited you and @stefalupagus to see a rare kangaroo troop hopping through the Sloensteadi Savannah; how could you say no?! As the troop comes into view, something hits you on the back of the head with a mighty whack!

Shaking the stars from your vision, you pick up the responsible object--a dark red boomerang, with the very task you continually push back etched into its surface. A quick glance around confirms the rest of your party met a similar fate. One larger kangaroo looks at you with a smug grin, like she’s daring you to face her and that dreaded task once and for all!", "questKangarooCompletion": "“NOW!” You signal your party to throw the boomerangs back at the kangaroo. The beast hops further away with each hit until she flees, leaving nothing more than a dark red cloud of dust, a few eggs, and some gold coins.

@Mewrose walks forward to where the kangaroo once stood. “Hey, where did the boomerangs go?”

“They probably dissolved into dust, making that dark red cloud, when we finished our respective tasks,” @stefalupagus speculates.

@LilithofAlfheim squints at the horizon. “Is that another kangaroo troop heading our way?”

You all break into a run back to Habit City. Better to face your difficult tasks than take another lump to the back of the head!", "questKangarooBoss": "Catastrophic Kangaroo", "questKangarooDropKangarooEgg": "Kangaroo (Egg)", - "questKangarooUnlockText": "Unlocks purchasable Kangaroo eggs in the Market", + "questKangarooUnlockText": "Unlocks Kangaroo Eggs for purchase in the Market", "forestFriendsText": "Forest Friends Quest Bundle", "forestFriendsNotes": "Contains 'The Spirit of Spring', 'The Hedgebeast', and 'The Tangle Tree'. Available until September 30.", "questAlligatorText": "The Insta-Gator", @@ -624,9 +624,9 @@ "questAlligatorCompletion": "With your attention focused on what’s important and not the Insta-Gator’s distractions, the Insta-Gator flees. Victory! “Are those eggs? They look like gator eggs to me,” asks @mfonda. “If we care for them correctly, they’ll be loyal pets or faithful steeds,” answers @UncommonCriminal, handing you three to care for. Let’s hope so, or else the Insta-Gator might make a return…", "questAlligatorBoss": "Insta-Gator", "questAlligatorDropAlligatorEgg": "Alligator (Egg)", - "questAlligatorUnlockText": "Unlocks purchasable Alligator eggs in the Market", + "questAlligatorUnlockText": "Unlocks Alligator Eggs for purchase in the Market", "oddballsText": "Oddballs Quest Bundle", - "oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until December 3.", + "oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until June 30.", "birdBuddiesText": "Bird Buddies Quest Bundle", "birdBuddiesNotes": "Contains 'The Fowl Frost,' 'Rooster Rampage,' and 'The Push-and-Pull Peacock.' Available until December 31.", "questVelociraptorText": "The Veloci-Rapper", @@ -634,7 +634,46 @@ "questVelociraptorCompletion": "You burst through the grass, confronting the Veloci-Rapper.

See here, rapper, you’re no quitter,
You’re Bad Habits' hardest hitter!
Check off your To-Dos like a boss,
Don’t mourn over one day’s loss!


Filled with renewed confidence, it bounds off to freestyle another day, leaving behind three eggs where it sat.", "questVelociraptorBoss": "Veloci-Rapper", "questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)", - "questVelociraptorUnlockText": "Unlocks purchasable Velociraptor eggs in the Market", + "questVelociraptorUnlockText": "Unlocks Velociraptor Eggs for purchase in the Market", "mythicalMarvelsText": "Mythical Marvels Quest Bundle", - "mythicalMarvelsNotes": "Contains 'Convincing the Unicorn Queen,' 'The Fiery Gryphon,' and 'Danger in the Depths: Sea Serpent Strike!' Available until February 28." + "mythicalMarvelsNotes": "Contains 'Convincing the Unicorn Queen,' 'The Fiery Gryphon,' and 'Danger in the Depths: Sea Serpent Strike!' Available until February 28.", + "questSilverDropSilverPotion": "Silver Hatching Potion", + "questSilverCollectSilverIngots": "Silver Ingots", + "rockingReptilesText": "Rocking Reptiles Quest Bundle", + "questRobotUnlockText": "Unlocks purchasable Robot Eggs in the Market", + "questRobotDropRobotEgg": "Robot (Egg)", + "questRobotCollectSprings": "Springs", + "questRobotCollectGears": "Gears", + "questRobotCollectBolts": "Bolts", + "questRobotCompletion": "As @Rev and the Accountability Buddy place the last bolt in place, the time machine buzzes to life. @FolleMente and @McCoyly jump aboard. “Thanks for the assist! We’ll see you in the future! By the way, these should help you with your next invention!” With that, the time travellers disappear, but left behind in the wreckage of the old Productivity Stabiliser are three clockwork eggs. Perhaps these will be the crucial components for a new production line of Accountability Buddies!", + "questRobotNotes": "At Max Capacity labs, @Rev is putting the finishing touches on their newest invention, a robotic Accountability Buddy, when a strange metal vehicle suddenly appears in a plume of smoke, inches from the robot’s Fluctuation Detector! Its occupants, two strange figures dressed in silver, emerge and remove their space helmets, revealing themselves as @FolleMente and @McCoyly.

“I hypothesise that there was an anomaly in our productivity implementation,” @FolleMente says sheepishly.

@McCoyly crosses her arms. “That means they neglected to complete their Dailies, which I postulate led to the disintegration of our Productivity Stabiliser. It’s an essential component to time travel that needs consistency to work properly. Our accomplishments power our movement through time and space! I don’t have time to explain further, @Rev. You’ll discover it in 37 years, or perhaps your allies the Mysterious Time Travellers can fill you in. For now, can you help us fix our time machine?”", + "questRobotText": "Mysterious Mechanical Marvels!", + "questSilverUnlockText": "Unlocks Silver Hatching Potions for purchase in the Market", + "questSilverCollectMoonRunes": "Moon Runes", + "questSilverCollectCancerRunes": "Cancer Zodiac Runes", + "questSilverCompletion": "You've delved. You've dredged. You've scavenged. At last you emerge from the Dungeons, laden with runes and bars of silver, covered in sludge but exhilarated with success. You journey back to Habit City and set to work in an alchemy lab. You and @starsystemic follow the formulas @QuartzFox found, under the careful supervision of @Edge. Finally, in a great puff of glitter and smoke, your concoction settles into the familiar viscosity of a Hatching Potion!

@Edge scoops the mixture into vials and grins. “Let's give it a try, shall we? Anyone got any Eggs?”

You rush to the Stables, wondering what shining secrets may yet remain undiscovered...", + "questSilverNotes": "The recent discovery of Bronze Hatching Potions has all of Habitica talking. Could potions of even brighter metals be possible? You head to Habit City's central Public Library, accompanied by @QuartzFox and @starsystemic, and gather up great armloads of books on alchemy to study.

After hours of eye-straining labour, @QuartzFox lets out a not-quite-library-appropriate shout of triumph. “Aha! I've found it!” You hurry over to see. “A Silver Hatching Potion can be made with runes of the zodiac sign Cancer, dissolved in pure silver melted over flame infused with the power of Moon runes.”

“We'll need a lot of those ingredients,” muses @starsystemic. “In case an attempt goes wrong.”

“There's only one place to find huge quantities of such random crafting materials,” says @Edge, standing in the shadow of the stacks with arms crossed. Have they been there the whole time? “The Dungeons of Drudgery. Let's get going.”", + "questSilverText": "The Silver Solution", + "questDolphinUnlockText": "Unlocks Dolphin Eggs for purchase in the Market", + "questDolphinDropDolphinEgg": "Dolphin (Egg)", + "questDolphinCompletion": "Your battle of wills with the dolphin has left you tired but victorious. With your determination and encouragement, @mewrose, @khdarkwolf, and @confusedcicada pick themselves up and shake off the dolphin’s insidious telepathy. The four of you shield yourselves with a sense of accomplishment in your consistent Dailies, strong Habits, and completed To-Dos until it closes its glowing eyes in silent acknowledgment of your successes. With that, it tumbles back into the bay. As you trade high-fives and congratulations, you notice three eggs wash ashore.

“Hm, I wonder what we can do with those,” @khdarkwolf muses.", + "questDolphinBoss": "Dolphin of Doubt", + "questDolphinNotes": "You walk upon the shores of Inkomplete Bay, pondering the daunting work ahead of you. A splash in the water catches your eye. A magnificent dolphin arcs over the waves. Sunlight glimmers off its fins and tail. But wait...that’s not sunlight, and the dolphin doesn’t dip back into the sea. It fixes its gaze on @khdarkwolf.

“I’ll never finish all these Dailies,” said @khdarkwolf.

“I’m not good enough to reach my goals,” said @confusedcicada as the dolphin turned its glare on them.

“Why did I even bother trying?” asked @mewrose, withering under the stare of the beast.

Its eyes meet yours, and feel your mind begin to sink under the rising tide of doubt. You steel yourself; someone has to defeat this creature, and it’s going to be you!", + "questDolphinText": "The Dolphin of Doubt", + "questBronzeUnlockText": "Unlocks Bronze Hatching Potions for purchase in the Market", + "questBronzeDropBronzePotion": "Bronze Hatching Potion", + "questBronzeBoss": "Brazen Beetle", + "questBronzeCompletion": "“Well met, warrior!” says the beetle as she settles to the ground. Is she smiling? It's hard to tell from those mandibles. “You've truly earned these potions!”“Oh wow, we’ve never gotten a reward like this for winning a battle before!” says @UncommonCriminal, turning a shimmering bottle in their hand. “Let's go hatch our new pets!”", + "questBronzeNotes": "On a refreshing break between tasks, you and some friends take a stroll through the forest trails of the Taskwoods. You come upon a large hollow log and a sparkle from inside catches your attention.

Why, it's a cache of Magic Hatching Potions! The shimmering bronze liquid swirls gently in the bottles, and @Hachiseiko reaches to pick one up to examine it.

“Halt!” hisses a voice from behind you. It's a gigantic beetle with a carapace of gleaming bronze, raising her clawed feet in a fighting stance. “Those are my potions, and if you wish to earn them, you must prove yourself in a gentlefolks' duel!”", + "questBronzeText": "Brazen Beetle Battle", + "evilSantaAddlNotes": "Note that Trapper Santa and Find the Cub have stackable quest achievements but give a rare pet and mount that can only be added to your stable once.", + "rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.' Available until September 30.", + "delightfulDinosText": "Delightful Dinos Quest Bundle", + "delightfulDinosNotes": "Contains 'The Pterror-dactyl,' 'The Trampling Triceratops,' and 'The Dinosaur Unearthed.' Available until November 30.", + "questAmberText": "The Amber Alliance", + "questAmberNotes": "You’re sitting in the Tavern with @beffymaroo and @-Tyr- when @Vikte bursts through the door and excitedly tells you about the rumors of another type of Magic Hatching Potion hidden in the Taskwoods. Having completed your Dailies, the three of you immediately agree to help @Vikte on their search. After all, what’s the harm in a little adventure?

After walking through the Taskwoods for hours, you’re beginning to regret joining such a wild chase. You’re about to head home, when you hear a surprised yelp and turn to see a huge lizard with shiny amber scales coiled around a tree, clutching @Vikte in her claws. @beffymaroo reaches for her sword.

“Wait!” cries @-Tyr-. “It’s the Trerezin! She’s not dangerous, just dangerously clingy!”", + "questAmberCompletion": "“Trerezin?” @-Tyr- says calmly. “Could you let @Vikte go? I don’t think they’re enjoying being so high up.”

The Trerezin’s amber skin blushes crimson and she gently lowers @Vikte to the ground. “My apologies! It’s been so long since I’ve had any guests that I’ve forgotten my manners!” She slithers forward to greet you properly before disappearing into her treehouse, and returning with an armful of Amber Hatching Potions as thank-you gifts!

“Magic Potions!” @Vikte gasps.

“Oh, these old things?” The Trerezin's tongue flickers as she thinks. “How about this? I’ll give you this whole stack if you promise to visit me every so often...”

And so you leave the Taskwoods, excited to tell everyone about the new potions--and your new friend!", + "questAmberBoss": "Trerezin", + "questAmberDropAmberPotion": "Amber Hatching Potion", + "questAmberUnlockText": "Unlocks Amber Hatching Potions for purchase in the Market" } diff --git a/website/common/locales/en_GB/rebirth.json b/website/common/locales/en_GB/rebirth.json index 82fcf7b2ca..dbc73ba2ef 100644 --- a/website/common/locales/en_GB/rebirth.json +++ b/website/common/locales/en_GB/rebirth.json @@ -21,9 +21,10 @@ "rebirthOrb": "Used an Orb of Rebirth to start over after attaining Level <%= level %>.", "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher.", "rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.", - "rebirthPop": "Instantly restart your character as a Level 1 Warrior, while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed, except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's Orb of Rebirth page.", + "rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from tasks belonging to active Challenges and Group Plans. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's Orb of Rebirth page.", "rebirthName": "Orb of Rebirth", "reborn": "Reborn, max level <%= reLevel %>", "confirmReborn": "Are you sure?", - "rebirthComplete": "You have been reborn!" -} \ No newline at end of file + "rebirthComplete": "You have been reborn!", + "nextFreeRebirth": "<%= days %> days until FREE Orb of Rebirth" +} diff --git a/website/common/locales/en_GB/settings.json b/website/common/locales/en_GB/settings.json index 8ff4b2916b..1f8f9c9536 100644 --- a/website/common/locales/en_GB/settings.json +++ b/website/common/locales/en_GB/settings.json @@ -119,8 +119,8 @@ "giftedSubscriptionInfo": "<%= name %> gifted you a <%= months %> month subscription", "giftedSubscriptionFull": "Hello <%= username %>, <%= sender %> has sent you <%= monthCount %> months of subscription!", "giftedSubscriptionWinterPromo": "Hello <%= username %>, you received <%= monthCount %> months of subscription as part of our holiday gift-giving promotion!", - "invitedParty": "Invited To Party", - "invitedGuild": "Invited To Guild", + "invitedParty": "You were invited to a Party", + "invitedGuild": "You were invited to a Guild", "importantAnnouncements": "Reminders to check in to complete tasks and receive prizes", "weeklyRecaps": "Summaries of your account activity in the past week (Note: this is currently disabled due to performance issues, but we hope to have this back up and sending e-mails again soon!)", "onboarding": "Guidance with setting up your Habitica account", @@ -203,6 +203,14 @@ "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", - "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" -} \ No newline at end of file + "changeUsernameDisclaimer": "This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!", + "everywhere": "Everywhere", + "onlyPrivateSpaces": "Only in private spaces", + "suggestMyUsername": "Suggest my username", + "mentioning": "Mentioning", + "subscriptionReminders": "Subscriptions Reminders", + "newPMNotificationTitle": "New Message from <%= name %>", + "chatExtensionDesc": "The Chat Extension for Habitica adds an intuitive chat box to all of habitica.com. It allows users to chat in the Tavern, their party, and any guilds they are in.", + "chatExtension": "Chrome Chat Extension and Firefox Chat Extension" +} diff --git a/website/common/locales/en_GB/spells.json b/website/common/locales/en_GB/spells.json index 3101607d96..0f7ceb4cea 100644 --- a/website/common/locales/en_GB/spells.json +++ b/website/common/locales/en_GB/spells.json @@ -23,7 +23,7 @@ "spellRogueToolsOfTradeText": "Tools of the Trade", "spellRogueToolsOfTradeNotes": "Your tricky talents buff your whole Party's Perception! (Based on: Unbuffed PER)", "spellRogueStealthText": "Stealth", - "spellRogueStealthNotes": "With each cast, a few of your undone Dailies won't cause damage tonight. Their streaks and colors won't change. (Based on: PER)", + "spellRogueStealthNotes": "With each cast, a few of your undone Dailies won't cause damage tonight. Their streaks and colours won't change. (Based on: PER)", "spellRogueStealthDaliesAvoided": "<%= originalText %> Number of dailies avoided: <%= number %>.", "spellRogueStealthMaxedOut": " You have already avoided all your dailies; there's no need to cast this again.", "spellHealerHealText": "Healing Light", diff --git a/website/common/locales/en_GB/subscriber.json b/website/common/locales/en_GB/subscriber.json index 1743a64687..8c67fd1902 100644 --- a/website/common/locales/en_GB/subscriber.json +++ b/website/common/locales/en_GB/subscriber.json @@ -215,5 +215,19 @@ "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems", - "mysterySet201902": "Cryptic Crush Set" + "mysterySet201902": "Cryptic Crush Set", + "mysterySet201908": "Footloose Faun Set", + "mysterySet201907": "Beach Buddy Set", + "mysterySet201906": "Kindly Koi Set", + "mysterySet201905": "Dazzling Dragon Set", + "mysterySet201904": "Opulent Opal Set", + "mysterySet201903": "Egg-squisite Set", + "subWillBecomeInactive": "Will become inactive", + "confirmCancelSub": "Are you sure you want to cancel your subscription? You will lose all of your subscription benefits.", + "mysterySet201909": "Affable Acorn Set", + "mysterySet201910": "Cryptic Flame Set", + "mysterySet201911": "Crystal Charmer Set", + "mysterySet201912": "Polar Pixie Set", + "mysterySet202001": "Fabled Fox Set", + "subCanceledTitle": "Subscription Cancelled" } diff --git a/website/common/locales/es/gear.json b/website/common/locales/es/gear.json index db2dda80ae..8aff96f824 100644 --- a/website/common/locales/es/gear.json +++ b/website/common/locales/es/gear.json @@ -1820,5 +1820,42 @@ "weaponArmoireFloridFanNotes": "Te encariñan los pliegues de seda cuando no están en uso. Incrementa la Constitución en <%= con %>. Armario Encantado: Objeto Independiente.", "weaponArmoireFloridFanText": "Abanico Florido", "eyewearMystery201907Notes": "¡Luce asombroso mientras proteges tus ojos de los dañinos rayos UV! No confiere beneficios. Equipamiento de suscripción de julio del 2019.", - "weaponSpecialWinter2020WarriorNotes": "¡Atrás, ardillas! ¡No os llevaréis ni un poco de esto! ... Pero si todas vosotras queréis pasar el rato y tomar chocolate caliente, está guay. Aumenta la fuerza en <%= str %>. Edición limitada del invierno 2019-2020." + "weaponSpecialWinter2020WarriorNotes": "¡Atrás, ardillas! ¡No os llevaréis ni un poco de esto! ... Pero si todas vosotras queréis pasar el rato y tomar chocolate caliente, está guay. Aumenta la fuerza en <%= str %>. Edición limitada del invierno 2019-2020.", + "weaponSpecialWinter2020RogueText": "Varilla de Linterna", + "shieldSpecialPiDayText": "Escudo Pi", + "headArmoireFrostedHelmText": "Casco Congelado", + "headArmoireAlchemistsHatText": "Sombrero de Alquemista", + "headArmoireAstronomersHatText": "Sombrero de Astrónomo", + "headMystery201911Text": "Sombrero Encantado de Cristal", + "headSpecialWinter2020MageText": "Corona de Campana", + "headSpecialFall2019MageText": "Máscara de Cíclope", + "headSpecialFall2019WarriorText": "Casco de Obsidiana", + "headSpecialFall2019RogueText": "Sombrero Antiguo de Ópera", + "headSpecialSummer2019WarriorText": "Casco de Tortuga", + "headSpecialSummer2019RogueText": "Casco de Martillo", + "headSpecialSpring2019MageText": "Casco de Ámbar", + "headSpecialSpring2019WarriorText": "Casco de Orquídea", + "headSpecialSpring2019RogueText": "Casco de Nube", + "headSpecialPiDayText": "Sombrero Pi", + "armorArmoireLayerCakeArmorText": "Armadura de Tarta", + "armorArmoireAlchemistsRobeText": "Bata de Alquemista", + "armorArmoireAstronomersRobeText": "Bata de Astrónomo", + "armorMystery201910Text": "Armadura Críptica", + "armorMystery201907Text": "Camiseta de Flores", + "armorMystery201904Text": "Traje Opalescente", + "armorSpecialWinter2020MageText": "Abrigo con Curvas", + "armorSpecialWinter2020WarriorText": "Armadura de Corteza", + "armorSpecialFall2019WarriorText": "Alas de la Noche", + "armorSpecialSummer2019WarriorText": "Armadura de Caparazón", + "armorSpecialSpring2019WarriorText": "Armadura de Orquídea", + "armorSpecialSpring2019RogueText": "Armadura de Nube", + "weaponArmoireShadowMastersMaceText": "Maza del Maestro de las Sombras", + "weaponArmoireResplendentRapierNotes": "Demuestra tu habilidad en el manejo de la espada con este arma bien afilada. Aumenta la Percepción por <%= per %>. Armario Encantado: Ítem Independiente.", + "weaponArmoireResplendentRapierText": "Espada Resplandeciente", + "weaponSpecialWinter2020HealerNotes": "Sacúdelo y su aroma reunirá a tus amigos y ayudantes para que empiecen a cocinar y hornear. Aumenta la Inteligencia por <%= int %>. Edición Limitada Equipamiento de Invierno 2019-2020.", + "weaponSpecialWinter2020HealerText": "Cetro de Clavo", + "weaponSpecialWinter2020MageNotes": "Con práctica, puedes proyecta tu aura mágica con la frecuencia que quieras: un mantra meditativo, una campanada festiva or una ALARMA DE TAREA SIN FINALIZAR. Aumenta la Inteligencia por <%= int %> y la Percepción por by <%= per %>. Edición Limitada Equipamiento de Invierno 2019-2020.", + "weaponSpecialWinter2020MageText": "Ondas de Sonido", + "weaponSpecialWinter2020WarriorText": "Cono de Conífera Puntiagudo", + "weaponSpecialWinter2020RogueNotes": "La oscuridad es el elemento del Pícaro. ¿Quién mejor que él para iluminar la época más oscura del año? Aumenta la Fuerza por <%= str %>. Edición Limitada. Equipamiento de Invierno 2019-2020." } diff --git a/website/common/locales/es/limited.json b/website/common/locales/es/limited.json index ea6588b328..0d77b24ebe 100644 --- a/website/common/locales/es/limited.json +++ b/website/common/locales/es/limited.json @@ -168,5 +168,10 @@ "summer2019ConchHealerSet": "Caracola (Sanador)", "summer2019WaterLilyMageSet": "Nenúfar (Mago)", "summer2019SeaTurtleWarriorSet": "Tortuga Marina (Guerrero)", - "augustYYYY": "Agosto del <%= year %>" + "augustYYYY": "Agosto del <%= year %>", + "decemberYYYY": "Diciembre <%= year %>", + "winter2020LanternSet": "Linterna (Pícaro)", + "winter2020WinterSpiceSet": "Especia de Invierno (Sanador)", + "winter2020CarolOfTheMageSet": "Villancico del Mago", + "winter2020EvergreenSet": "Siempre Joven (Guerrero)" } diff --git a/website/common/locales/ja/achievements.json b/website/common/locales/ja/achievements.json index 51c6c595be..c43caeee0a 100644 --- a/website/common/locales/ja/achievements.json +++ b/website/common/locales/ja/achievements.json @@ -40,5 +40,28 @@ "letsGetStarted": "はじめましょう!", "onboardingProgress": "<%= percentage %>% 進捗", "gettingStartedDesc": "タスクを作成して、完了して、ごほうびをチェックしましょう。 一度やると5つの実績100ゴールドを獲得できます!", - "earnedAchievement": "実績を獲得しました!" + "earnedAchievement": "実績を獲得しました!", + "achievementPrimedForPainting": "下塗り完了", + "achievementPearlyPro": "真珠色の玄人", + "achievementPearlyProModalText": "白い乗騎をすべて手なずけました!", + "achievementPearlyProText": "白い乗騎をすべて手なずけました。", + "achievementPrimedForPaintingModalText": "白いペットをすべて集めました!", + "achievementPrimedForPaintingText": "白いペットをすべて集めました。", + "achievementPurchasedEquipmentModalText": "装備はアバターをカスタマイズして、能力値を上げる手段です", + "achievementPurchasedEquipmentText": "最初の装備の1つを買いました。", + "achievementPurchasedEquipment": "装備を買う", + "achievementFedPetModalText": "たくさんの異なるえさがあり、ペットには好き嫌いがあります", + "achievementFedPetText": "最初のペットにえさをやりました。", + "achievementFedPet": "ペットにえさをやる", + "achievementHatchedPetModalText": "所持品のページへ行って、たまごがえしの薬とたまごを組み合わせることに挑戦しました", + "achievementHatchedPetText": "最初のペットをかえしました。", + "achievementHatchedPet": "ペットをかえす", + "achievementCompletedTaskModalText": "ごほうびをもらうためにいずれかのタスクをチェックしました", + "achievementCompletedTaskText": "最初のタスクを完了しました。", + "achievementCompletedTask": "タスクを完了する", + "achievementCreatedTaskModalText": "今週に達成したいことをタスクとして追加しました", + "achievementCreatedTaskText": "最初のタスクを作成しました。", + "achievementCreatedTask": "タスクを作成する", + "hideAchievements": "<%= category %>をたたむ", + "showAllAchievements": "すべての<%= category %>を表示する" } diff --git a/website/common/locales/ja/content.json b/website/common/locales/ja/content.json index 06a4fff6d3..876170a8b5 100644 --- a/website/common/locales/ja/content.json +++ b/website/common/locales/ja/content.json @@ -352,5 +352,6 @@ "questEggRobotAdjective": "未来的な", "questEggRobotMountText": "ロボット", "questEggRobotText": "ロボット", - "hatchingPotionAmber": "琥珀の" + "hatchingPotionAmber": "琥珀の", + "hatchingPotionAurora": "オーロラの" } diff --git a/website/common/locales/ja/front.json b/website/common/locales/ja/front.json index 84cd5e6b4f..e9f6c75a37 100644 --- a/website/common/locales/ja/front.json +++ b/website/common/locales/ja/front.json @@ -331,5 +331,6 @@ "getStarted": "はじめましょう!", "mobileApps": "モバイルアプリ", "learnMore": "もっと詳しく知る", - "communityInstagram": "Instagram" + "communityInstagram": "Instagram", + "minPasswordLength": "パスワードは8文字以上にする必要があります。" } diff --git a/website/common/locales/ko/achievements.json b/website/common/locales/ko/achievements.json index 4c2a87f06a..7423a13710 100755 --- a/website/common/locales/ko/achievements.json +++ b/website/common/locales/ko/achievements.json @@ -1,7 +1,7 @@ { "achievement": "업적", "share": "공유하기", - "onwards": "앞으로!", + "onwards": "야호!", "levelup": "당신의 실제 삶의 목표들을 달성함으로써 레벨 업 했고 이제 완전히 회복되었어요!", "reachedLevel": "레벨<%= level %>에 도달했습니다.", "achievementLostMasterclasser": "퀘스트 완료자: 마스터클래서 시리즈", @@ -26,5 +26,11 @@ "achievementUndeadUndertaker": "좀비 장의사", "achievementKickstarter2019": "Pin Kickstarter 후원자", "achievementAridAuthority": "권세", - "achievementMindOverMatter": "의지의 문제" + "achievementMindOverMatter": "의지의 문제", + "gettingStartedDesc": "할 일을 등록하고, 실행한 후, 보상을 가져가세요", + "achievementMindOverMatterModalText": "돌멩이, 슬라임, 털실 펫 퀘스트를 완료했습니다!", + "hideAchievements": "<%= category %> 숨기기", + "earnedAchievement": "업적을 획득했습니다!", + "viewAchievements": "업적 보기", + "letsGetStarted": "시작합시다!" } diff --git a/website/common/locales/ko/communityguidelines.json b/website/common/locales/ko/communityguidelines.json index 45b4af7b54..ea52279ebb 100755 --- a/website/common/locales/ko/communityguidelines.json +++ b/website/common/locales/ko/communityguidelines.json @@ -1,10 +1,10 @@ { "iAcceptCommunityGuidelines": "커뮤니티 가이드라인에 따를 것을 동의합니다", "tavernCommunityGuidelinesPlaceholder": "잠시 알려드립니다: 이곳은 전연령 채팅창이니, 사용하시는 언어와 내용을 주의해주세요! 궁금하신 점이 있다면 사이드바의 커뮤니티 가이드라인을 참고해주세요.", - "lastUpdated": "Last updated:", + "lastUpdated": "최종 업데이트:", "commGuideHeadingWelcome": "Habitica에 오신것을 환영합니다!", - "commGuidePara001": "Greetings, adventurer! Welcome to Habitica, the land of productivity, healthy living, and the occasional rampaging gryphon. We have a cheerful community full of helpful people supporting each other on their way to self-improvement. To fit in, all it takes is a positive attitude, a respectful manner, and the understanding that everyone has different skills and limitations -- including you! Habiticans are patient with one another and try to help whenever they can.", - "commGuidePara002": "To help keep everyone safe, happy, and productive in the community, we do have some guidelines. We have carefully crafted them to make them as friendly and easy-to-read as possible. Please take the time to read them before you start chatting.", + "commGuidePara001": "반갑습니다, 모험자님! 생산성, 건강한 생활, 그리고 가끔은 미친 그리핀이 있는 땅, Habitica에 오신 것을 환영합니다. 이 곳엔 스스로의 발전을 위해 각자의 방법으로 도움을 주고자 하는 지원자로 가득한 활발한 커뮤니티가 있습니다. 이 곳에서 함께하기 위해, 모든 사람들은 긍정적인 태도와 서로를 존중하는 예의를 지니며, 모두가 다른 능력과 규칙을 갖고 있다는 사실을 알고 있어야 합니다- 물론 당신도요! Habitican은 항상 상대방에게 인내하고 할 수 있는 일이라면 언제든지 도우려 노력합니다.", + "commGuidePara002": "모두가 안전하고 행복하게 하며, 커뮤니티 활동이 활발히 이뤄지도록, 저희는 몇 가지 가이드라인을 가지고 있습니다. 친숙하고 가능한 읽기 쉽게 하는 데 주의를 기울여 만들었으니, 시간이 걸리더라도 채팅을 시작하기 전에 꼭 읽어주세요.", "commGuidePara003": "이곳의 규칙은 Trello, GitHub, Transifex와 Wikia(위키)를 포함한 (그러나 여기에만 한정되지 않은) 모든 커뮤니티 소통 공간에 적용됩니다. 때때로 가이드라인에 언급이 되지 않은 종류의 충돌이 벌어지거나 사악한 네크로맨서가 나타나는 등 예측하지 못한 상황이 벌어지기도 합니다. 그럴 때면 커뮤니티를 새로운 위협에서 안전하게 보호하기 위해 관리자들이 가이드라인을 변경해야 할 수도 있습니다. 하지만 안심하세요: 가이드라인이 변경된다면 베일리가 여러분에게 소식을 알려드릴 것입니다.", "commGuidePara004": "그럼 필기할 깃펜과 두루마리를 준비하시고 바로 시작해봅시다!", "commGuideHeadingInteractions": "Interactions in Habitica", @@ -125,4 +125,4 @@ "commGuideLink06": "The Art Trello: for submitting pixel art.", "commGuideLink07": "The Quest Trello: for submitting quest writing.", "commGuidePara069": "본문의 일러스트는 아래의 재능있는 아티스트들의 도움을 받았습니다:" -} \ No newline at end of file +} diff --git a/website/common/locales/ko/content.json b/website/common/locales/ko/content.json index c50d9b025e..b07136c76f 100755 --- a/website/common/locales/ko/content.json +++ b/website/common/locales/ko/content.json @@ -3,7 +3,7 @@ "potionNotes": "체력 15 회복 (일회용)", "armoireText": "마법의 장롱", "armoireNotesFull": "랜덤으로 특별한 장비, 경험치 혹은 펫 먹이를 받으려면 장롱문을 열어주세요! 아직 못찾은 특별장비:", - "armoireLastItem": "마법의 장롱에서 마지막 남은 희귀 장비를 찾으셨습니다!", + "armoireLastItem": "마법의 장롱에서 마지막 남은 레어 장비를 찾았습니다!", "armoireNotesEmpty": "매달 첫주마다 새로운 장비가 구비될 것입니다. 그 때까지는 경험치와 먹이를 받으러 클릭하세요!", "dropEggWolfText": "늑대", "dropEggWolfMountText": "늑대", @@ -306,5 +306,7 @@ "foodSaddleText": "안장", "foodSaddleNotes": "즉시 펫 한마리를 탑승펫으로 성장시킵니다.", "foodSaddleSellWarningNote": "Hey! This is a pretty useful item! Are you familiar with how to use a Saddle with your Pets?", - "foodNotes": "이것을 펫에게 먹이면 튼튼한 탑승펫으로 성장시킬 수 있습니다." -} \ No newline at end of file + "foodNotes": "이것을 펫에게 먹이면 튼튼한 탑승펫으로 성장시킬 수 있습니다.", + "questEggRobotText": "로봇", + "questEggDolphinText": "돌고래" +} diff --git a/website/common/locales/ko/front.json b/website/common/locales/ko/front.json index d2c64a5684..c99681f550 100644 --- a/website/common/locales/ko/front.json +++ b/website/common/locales/ko/front.json @@ -1,5 +1,33 @@ { - "termsAndAgreement": "아래에 있는 버튼을 클릭함으로써, 당신은 당신이 서비스 약관 개인정보 정책 을 읽었고 이에 동의했음을 나타냅니다.", + "termsAndAgreement": "아래에 있는 버튼을 클릭함으로써, 당신은 당신이 서비스 약관 개인정보 정책 을 읽었고 이에 동의했음을 나타냅니다.", "FAQ": "FAQ", - "althaireQuote": "정기적으로 퀘스트를 하는건 내가 나의 모든 일일과제를 하도록 동기를 부여해주고 해야 할 일에도 동기를 부여해줘요. 저의 가장 큰 동기부여는 제 파티를 내려놓지 않는 것입니다." + "althaireQuote": "정기적으로 퀘스트를 하는건 내가 모든 일일과제와 해야 할 일을 하도록 동기를 부여해줘요. 저의 가장 큰 동기부여는 제 파티의 기대를 저버리지 않도록 하는 것입니다.", + "sendLink": "링크 보내기", + "forgotPasswordSteps": "Habitica 계정으로 등록할 메일 주소를 입력하세요.", + "emailNewPass": "메일로 비밀번호 재설정 링크 보내기", + "forgotPassword": "비밀번호를 잊으셨습니까?", + "elmiQuote": "매일 아침 저는 일어나면서 골드를 벌 수 있기를 기대해요!", + "dreimQuote": "지난 여름 제가 [Habitica]를 발견했을 즈음이, 전체 시험 과목의 반 정도를 불합격했던 때였어요. 일일 과제 덕분에… 저는 스스로 준비하고 단련할 수 있었고, 실제로 몇 달 전 좋은 성적으로 모든 시험을 통과했어요.", + "dragonsilverQuote": "얼마나 긴 시간이라 말하긴 어렵지만 저는 수십 년 동안 과제를 정리하는 여러 방법을 시도해 왔어요… [Habitica]는 실제로 제가 과제를 단순히 리스트로 만들었을 때보다 정확히 완료하도록 도운 유일한 방법입니다.", + "companyVideos": "동영상", + "companyPrivacy": "사생활", + "companyDonate": "기부하기", + "companyContribute": "기여하기", + "companyBlog": "블로그", + "companyAbout": "작동하는 원리", + "choreSample1": " 빨래바구니에 빨랫감 넣기", + "communityInstagram": "인스타그램", + "communityFacebook": "페이스북", + "chores": "집안일", + "choreSample5": "빨랫감 세탁하고 널기", + "choreSample4": "방 정리정돈하기", + "businessText": "업무 관리에 Habitica를 활용하세요", + "businessSample5": "고객과 전화하기/끊기", + "businessSample3": "편지함 정렬 및 처리하기", + "businessSample1": "인벤토리 1쪽 보기", + "alexandraQuote": "제가 마드리드에서 연설하는 동안 절대 [Habitica]에 대해 말하면 안 돼요. 아직 보스가 필요한 프리랜서들을 위해 도구를 지니세요.", + "footerCompany": "회사", + "featurePetHeading": "펫과 탑승펫", + "featurePetByline": "알과 아이템은 과제를 완료했을 때 얻을 수 있습니다. 생산적인 일을 많이 할수록 펫과 탑승펫을 많이 모을 수 있습니다!", + "featureEquipHeading": "장비와 여분" } diff --git a/website/common/locales/la/achievements.json b/website/common/locales/la/achievements.json index cf42945a98..b76cf63772 100755 --- a/website/common/locales/la/achievements.json +++ b/website/common/locales/la/achievements.json @@ -41,5 +41,17 @@ "achievementDustDevilModalText": "Omnia animalia coloris deserti collegisti!", "achievementDustDevilText": "Omnia animalia coloris deserti collegit.", "achievementLostMasterclasserModalText": "Sedecim investigationes ad Investigationum Masterclasser Thesaurum pertinentes perfecisti et arcanum Magistrae Ordinum Oblitae solvisti!", - "gettingStartedDesc": "Munus crea, quod perficias; tum praemia observa. Merebis 5 Persecuta et 100 Auri cum primum finivisti." + "gettingStartedDesc": "Munus crea, quod perficias; tum praemia observa. Merebis 5 res perfectas et 100 nummi auri cum primum finivisti.", + "showAllAchievements": "Praebe omnia <%=category %>", + "onboardingCompleteDesc": "Album perficiens 5 res perfectas et 100 nummos auri meruisti.", + "earnedAchievement": "Rem perfectam meruisti!", + "viewAchievements": "Res perfectas inspice", + "letsGetStarted": "Proficiamus!", + "onboardingProgress": "<%=percentage %>% progressionis", + "achievementCompletedTaskText": "Primum munus perfecit.", + "achievementCompletedTask": "Munus perfice", + "achievementCreatedTaskModalText": "Munus unius rei adde, quam hac hebdomade perficere vis.", + "achievementCreatedTaskText": "Munus primum creavit.", + "achievementCreatedTask": "Munus crea", + "hideAchievements": "Cela genus <%= category %>" } diff --git a/website/common/locales/pt/groups.json b/website/common/locales/pt/groups.json index eb440008d3..f355345f55 100644 --- a/website/common/locales/pt/groups.json +++ b/website/common/locales/pt/groups.json @@ -23,8 +23,8 @@ "glossary": "Glossário", "wiki": "Wiki", "wikiLink": "Wiki", - "reportAP": "Reportar um Problema", - "requestAF": "Solicitar uma Funcionalidade", + "reportAP": "Reportar um problema", + "requestAF": "Solicitar uma funcionalidade", "community": "Fórum da Comunidade", "dataTool": "Ferramenta de Exibição de Dados", "resources": "Recursos", diff --git a/website/common/locales/pt_BR/faq.json b/website/common/locales/pt_BR/faq.json index 6302b45b31..05386a3b0c 100644 --- a/website/common/locales/pt_BR/faq.json +++ b/website/common/locales/pt_BR/faq.json @@ -45,9 +45,9 @@ "androidFaqAnswer10": "Gemas são compradas com dinheiro real ao clicar no ícone de Gema no cabeçalho. Ao comprar gemas, as pessoas ajudam a manter o site funcionando. Ficamos muito felizes com seu apoio!\n\nAlém de comprar Gemas diretamente, existem outras três maneiras em que jogadores podem adquirir Gemas:\n\n* Ganhe um Desafio que tenha sido feito por outro jogador. Vá em Social > Desafios para entrar em alguns.\n* Assine e desboquei a habilidade de comprar uma certa quantidade de Gemas por mês.\n* Contribua pro Habitica com suas habilidades. Veja a página da Wiki [Contribuindo para o Habitica](https://habitica.fandom.com/pt-br/wiki/Contributing_to_Habitica).\n\nLembre-se que itens que são comprados com Gemas não oferecem nenhuma vantagem estatística, de forma que os jogadores ainda poderão usar o app sem elas!", "webFaqAnswer10": "Gemas são [compradas com dinheiro real](https://habitica.com/#/options/settings/subscription), apesar de que [assinantes](https://habitica.com/#/options/settings/subscription) podem comprá-las usando Ouro. Quando alguém assina o site ou compra Gemas, esta pessoa está nos ajudando a manter o site funcionando. Ficamos muito agradecidos com esse suporte!Além de comprar Gemas diretamente ou se tornar assinante, existem outras duas maneiras de se conseguir Gemas:\n* Vença um Desafio feito por outro jogador em Desafios > Descubra.\n* Contribua com seus talentos para o projeto do Habitica. Veja essa página da wiki para mais detalhes: [Contribuindo com o Habitica](https://habitica.fandom.com/pt-br/wiki/Contributing_to_Habitica). Tenha em mente que itens comprados com Gemas não oferecem nenhuma vantagem de atributos então todos podem utilizar o site sem elas!", "faqQuestion11": "Como eu relato um bug ou solicito uma funcionalidade?", - "iosFaqAnswer11": "Você pode relatar um bug, solicitar uma funcionalidade ou enviar sua opinião através do Menu > Sobre > Reportar um Problema e Menu > Sobre > Enviar Opinião! Vamos fazer tudo que pudermos para te ajudar.", - "androidFaqAnswer11": "Você pode reportar um bug, pedir uma funcionalidade ou enviar sua opinião pelo menu Ajuda > Reportar um Problema e Ajuda > Enviar Opinião. Faremos todo o possível para ajudá-lo(a).", - "webFaqAnswer11": "Para reportar um bug, vá para [Ajuda > Reportar um Problema](https://habitica.com/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac) e leia os pontos acima da caixa de chat. Se você não conseguir logar no Habitica, envie suas informações de login (não a sua senha!) para [<%= techAssistanceEmail %>](<%= wikiTechAssistanceEmail %>). Não se preocupe, nós corrigiremos isso para você rapidamente!

Pedidos de funcionalidades são pegos nos fóruns do Trello. Vá para [Ajuda > Solicitar funcionalidade](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) e siga as instruções. Tcharammmm!", + "iosFaqAnswer11": "Você pode relatar um bug, solicitar uma funcionalidade ou enviar sua opinião através do Menu > Sobre > Reportar um problema e Menu > Sobre > Enviar Opinião! Vamos fazer tudo que pudermos para te ajudar.", + "androidFaqAnswer11": "Você pode reportar um bug, pedir uma funcionalidade ou enviar sua opinião pelo menu Ajuda > Reportar um problema e Ajuda > Enviar Opinião. Faremos todo o possível para ajudá-lo(a).", + "webFaqAnswer11": "Para reportar um bug, vá para [Ajuda > Reportar um problema](https://habitica.com/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac) e leia os pontos acima da caixa de bate-papo. Se você não conseguir logar no Habitica, envie suas informações de login (não a sua senha!) para [<%= techAssistanceEmail %>](<%= wikiTechAssistanceEmail %>). Não se preocupe, nós corrigiremos isso para você rapidamente!

Pedidos de funcionalidades são pegos nos fóruns do Trello. Vá para [Ajuda > Solicitar funcionalidade](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) e siga as instruções. Tcharammmm!", "faqQuestion12": "Como luto contra um Chefão Global?", "iosFaqAnswer12": "Chefões Globais são monstros especiais que aparecem na Taverna. Todos os usuários ativos o enfrentam automaticamente e suas tarefas e habilidades causarão dano no Chefão como de costume.\n\nVocê pode estar em uma Missão normal ao mesmo tempo. Suas tarefas e Habilidades contarão para ambos Chefão Global e missões de Chefão/Coleta do seu grupo.\n\nUm Chefão Global nunca irá machucar você ou sua conta de qualquer maneira. Ao invés disso, ele tem uma Barra de Fúria que encherá quando usuários não fizerem as Diárias. Se a Barra de Fúria encher, ele atacará um dos NPC do site e a imagem dele mudará.\n\nVocê pode ler mais sobre [Chefões Globais anteriores](https://habitica.fandom.com/pt-br/wiki/World_Bosses) na wiki.", "androidFaqAnswer12": "Chefões Globais são monstros especiais que aparecem na Taverna. Todos os usuários ativos o enfrentam automaticamente e suas tarefas e habilidades causarão dano no Chefão como de costume.\n\nVocê pode estar em uma Missão normal ao mesmo tempo. Suas tarefas e Habilidades contarão para ambos Chefão Global e missões de Chefão/Coleta do seu grupo.\n\nUm Chefão Global nunca irá machucar você ou sua conta de qualquer maneira. Ao invés disso, ele tem uma Barra de Fúria que encherá quando usuários não fizerem as Diárias. Se a Barra de Fúria encher, ele atacará um dos NPC do site e a imagem dele mudará.\n\nVocê pode ler mais sobre [Chefões Globais anteriores](https://habitica.fandom.com/pt-br/wiki/World_Bosses) na wiki.", diff --git a/website/common/locales/pt_BR/front.json b/website/common/locales/pt_BR/front.json index 5f6f5e17f7..b0258624cf 100644 --- a/website/common/locales/pt_BR/front.json +++ b/website/common/locales/pt_BR/front.json @@ -27,7 +27,7 @@ "communityForum": "Fórum", "communityKickstarter": "Kickstarter", "communityReddit": "Reddit", - "companyAbout": "Como Funciona", + "companyAbout": "Como funciona", "companyBlog": "Blog", "devBlog": "Blog do Desenvolvedor", "companyContribute": "Contribua", diff --git a/website/common/locales/pt_BR/generic.json b/website/common/locales/pt_BR/generic.json index 7d5c334f7c..e39694058b 100644 --- a/website/common/locales/pt_BR/generic.json +++ b/website/common/locales/pt_BR/generic.json @@ -145,7 +145,7 @@ "audioTheme_pizildenTheme": "Tema do Pizilden", "audioTheme_farvoidTheme": "Tema Farvoid", "askQuestion": "Fazer uma Pergunta", - "reportBug": "Reportar um Problema", + "reportBug": "Reportar um problema", "HabiticaWiki": "A Wiki do Habitica", "HabiticaWikiFrontPage": "http://habitica.fandom.com/pt-br/wiki/Habitica_Wiki", "contributeToHRPG": "Contribuir com o Habitica", diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index a8c7a2d3c7..f702b69fb4 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -23,7 +23,7 @@ "glossary": "Glossário", "wiki": "Wiki", "wikiLink": "Wiki", - "reportAP": "Reportar um Problema", + "reportAP": "Reportar um problema", "requestAF": "Solicitar funcionalidade", "community": "Fórum da comunidade", "dataTool": "Ferramenta de Exibição de Dados", @@ -377,7 +377,7 @@ "memberCount": "Quantidade de Membros", "recentActivity": "Atividade Recente", "myGuilds": "Minhas Guildas", - "guildsDiscovery": "Encontre Guildas", + "guildsDiscovery": "Encontrar Guildas", "role": "Cargo", "guildOrPartyLeader": "Líder", "guildLeader": "Líder da Guilda", diff --git a/website/common/locales/pt_BR/settings.json b/website/common/locales/pt_BR/settings.json index 0c35d867c7..67a0f8e891 100644 --- a/website/common/locales/pt_BR/settings.json +++ b/website/common/locales/pt_BR/settings.json @@ -28,7 +28,7 @@ "enableClass": "Habilitar Sistema de Classe", "enableClassPop": "Você optou por não usar o sistema de classes inicialmente? Deseja habilitar agora?", "classTourPop": "Mostra o tutorial de como usar o sistema de classes.", - "resetAccount": "Reiniciar Conta", + "resetAccount": "Reiniciar conta", "resetAccPop": "Comece de novo removendo todos os níveis, ouro, equipamentos, histórico e tarefas.", "deleteAccount": "Excluir Conta", "deleteAccPop": "Cancela e remove sua conta do Habitica.", @@ -50,7 +50,7 @@ "sureChangeCustomDayStart": "Você tem certeza que quer mudar o início de dia personalizado?", "customDayStartHasChanged": "Seu início de dia personalizado foi modificado.", "nextCron": "As suas Diárias serão reiniciadas ao utilizar o Habitica depois de <%= time %>. Certifique-se de completar suas Diárias antes deste horário!", - "customDayStartInfo1": "Por padrão, o Habitica verifica e reinicia as suas Diárias à meia-noite de seu fuso horário todos os dias. Você pode personalizar esse horário aqui.", + "customDayStartInfo1": "Por padrão, o Habitica verifica e reinicia as suas Diárias à meia-noite de seu fuso horário, diariamente. Você pode personalizar esse horário aqui.", "misc": "Variados", "showHeader": "Mostrar Cabeçalho", "changePass": "Alterar Senha", @@ -145,9 +145,9 @@ "couponText": "Às vezes temos eventos e distribuímos códigos promocionais para equipamentos especiais (por exemplo: para aqueles que passam nos nossos estandes da Wondercon)", "apply": "Aplicar", "resubscribe": "Reassinar", - "promoCode": "Código Promocional", - "promoCodeApplied": "Código Promocional Aplicado! Verifique seu inventário", - "promoPlaceholder": "Insira um Código Promocional", + "promoCode": "Código promocional", + "promoCodeApplied": "Código promocional aplicado! Verifique seu inventário", + "promoPlaceholder": "Insira um código promocional", "displayInviteToPartyWhenPartyIs1": "Mostrar o botão 'Convidar para o Grupo' quando o grupo tiver 1 membro.", "saveCustomDayStart": "Salvar personalização do início de dia", "registration": "Registro", diff --git a/website/common/locales/pt_BR/tasks.json b/website/common/locales/pt_BR/tasks.json index 1896eb8831..0e013bf171 100644 --- a/website/common/locales/pt_BR/tasks.json +++ b/website/common/locales/pt_BR/tasks.json @@ -11,7 +11,7 @@ "editATask": "Editar <%= type %>", "createTask": "Criar <%= type %>", "addTaskToUser": "Adicionar Tarefa", - "scheduled": "Com Data", + "scheduled": "Com data", "theseAreYourTasks": "<%= taskType %> ficam aqui", "habit": "Hábito", "habits": "Hábitos", diff --git a/website/common/locales/sv/backgrounds.json b/website/common/locales/sv/backgrounds.json index c48f1dc480..3f2b2ad6c5 100644 --- a/website/common/locales/sv/backgrounds.json +++ b/website/common/locales/sv/backgrounds.json @@ -485,5 +485,12 @@ "backgroundHolidayWreathText": "Högtidlig Krans", "backgroundHolidayMarketNotes": "Hitta de perfekta presenterna och dekorationerna på den Högtidiliga Marknaden.", "backgroundHolidayMarketText": "Högtidlig Marknad", - "backgrounds122019": "SET 67: Släpptes December 2019" + "backgrounds122019": "SET 67: Släpptes December 2019", + "backgroundSnowglobeNotes": "Skaka en Snöglob och ta din plats i ett miniatyrland av ett vinterlandskap.", + "backgroundSnowglobeText": "Snöglob", + "backgroundDesertWithSnowNotes": "Skåda den ovanliga och tysta skönheten av en Snötäckt Öken.", + "backgroundDesertWithSnowText": "Snötäckt Öken", + "backgroundBirthdayPartyNotes": "Fira din favorit Habiticans Födelsedagsfest.", + "backgroundBirthdayPartyText": "Födelsedagsfest", + "backgrounds012020": "SET 68: Släpptes Januari 2020" } diff --git a/website/common/locales/tr/achievements.json b/website/common/locales/tr/achievements.json index aefb3ff63c..801a991347 100644 --- a/website/common/locales/tr/achievements.json +++ b/website/common/locales/tr/achievements.json @@ -7,5 +7,11 @@ "achievementLostMasterclasser": "Görev Tamamlayıcısı: Büyük Usta Serisi", "achievementLostMasterclasserText": "Büyük Usta görev serisindeki on altı görevin hepsini tamamladı ve kayıp Büyük Usta'nın gizemini çözdü!", "achievementJustAddWaterText": "Ahtapot, Denizatı, Mürekkep Balığı, Balina, Kaplumbağa, Deniz Tavşanı, Deniz Yılanı ve Yunus evcil hayvan görevlerini tamamladı.", - "achievementJustAddWater": "Yalnızca Su Ekle" + "achievementJustAddWater": "Yalnızca Su Ekle", + "achievementMindOverMatterModalText": "Kaya,Balçık ve İplik evcil hayvan görevlerini bitirdin!", + "achievementMindOverMatterText": "Kaya,Balçık ve İplik evcil hayvan görevlerini bitirdi.", + "achievementMindOverMatter": "Zihin Maddeden Üstündür", + "earnedAchievement": "Bir başarı kazandın!", + "viewAchievements": "Başarılarını Görüntüle", + "letsGetStarted": "Hadi başlayalım!" } diff --git a/website/common/locales/tr/backgrounds.json b/website/common/locales/tr/backgrounds.json index 6571d92382..cef4ae7dc1 100644 --- a/website/common/locales/tr/backgrounds.json +++ b/website/common/locales/tr/backgrounds.json @@ -438,5 +438,7 @@ "backgroundRainbowMeadowText": "Gökkuşağı Çayırı", "backgroundRainbowMeadowNotes": "Gökkuşağının bir çayırda bittiği yerde altın saksısını bulun.", "backgrounds062019": "SET 61: Haziran 2019'da yayınladı", - "backgroundSchoolOfFishText": "Balık Okulu" + "backgroundSchoolOfFishText": "Balık Sürüsü", + "backgroundSchoolOfFishNotes": "Balık Sürüsü arasında yüz.", + "backgroundSeasideCliffsText": "Sahil Kayalıkları" } diff --git a/website/common/locales/vi/pets.json b/website/common/locales/vi/pets.json index bdd8af36cd..51ac2cdf77 100644 --- a/website/common/locales/vi/pets.json +++ b/website/common/locales/vi/pets.json @@ -4,5 +4,10 @@ "noActivePet": "Không có Thú cưng Hiện tại", "activePet": "Thú cưng Hiện tại", "pets": "Thú cưng", - "stable": "Chuồng thú" + "stable": "Chuồng thú", + "magicMounts": "Thú cưỡi Ma thuật", + "questMounts": "Thú cưỡi Nhiệm vụ", + "mounts": "Thú cưỡi", + "magicPets": "Thú cưng Ma thuật", + "petsFound": "Thú cưng Đã có" } diff --git a/website/common/locales/vi/quests.json b/website/common/locales/vi/quests.json index 6c25644acd..1ca46ba146 100755 --- a/website/common/locales/vi/quests.json +++ b/website/common/locales/vi/quests.json @@ -125,6 +125,10 @@ "pendingDamageLabel": "pending damage", "bossHealth": "<%= currentHealth %> / <%= maxHealth %> Health", "rageAttack": "Rage Attack:", - "bossRage": "<%= currentRage %> / <%= maxRage %> Rage", - "rageStrikes": "Rage Strikes" -} \ No newline at end of file + "bossRage": "<%= currentRage %> / <%= maxRage %> Cuồng nộ", + "rageStrikes": "Rage Strikes", + "chatBossDamage": "<%= username %> tấn công <%= bossName %> với <%= userDamage %> sát thương. <%= bossName %> tấn công tổ đội với <%= bossDamage %> sát thương.", + "chatQuestStarted": "Nhiệm vụ của bạn, <%= questName %>, đã bắt đầu.", + "questInvitationNotificationInfo": "Bạn đã được mời tham gia một Nhiệm vụ", + "hatchingPotionQuests": "Nhiệm vụ Lọ thuốc Ấp trứng Ma thuật" +} diff --git a/website/common/locales/zh/gear.json b/website/common/locales/zh/gear.json index 8efe5d72ff..06e450a6b1 100644 --- a/website/common/locales/zh/gear.json +++ b/website/common/locales/zh/gear.json @@ -259,7 +259,7 @@ "weaponSpecialSpring2018HealerText": "石榴石杆", "weaponSpecialSpring2018HealerNotes": "当你默念治疗咒语时,这杆里的石头能汇聚你的力量!增加<%= int %>点智力。2018年春季限量版装备。", "weaponSpecialSummer2018RogueText": "钓鱼竿", - "weaponSpecialSummer2018RogueNotes": "这柄轻巧坚固的钓竿和卷筒可以双重使用,使你的DPS(每个夏天钓到的深海龙鱼)最大化。增加<%= str %>点力量。2018年夏季限量版装备。", + "weaponSpecialSummer2018RogueNotes": "这柄轻巧坚固的钓竿和卷筒可以双重使用,使你的DPS(Dragonfish Per Summer,每个夏天钓到的深海龙鱼)最大化。增加<%= str %>点力量。2018年夏季限量版装备。", "weaponSpecialSummer2018WarriorText": "斗鱼矛", "weaponSpecialSummer2018WarriorNotes": "强大有力能用于战斗,优美雅致可上典礼。这把工艺精美的矛能在任何情况下保护你的家园!增加<%= str %>点力量。2018年夏季限量版装备。", "weaponSpecialSummer2018MageText": "狮鱼鳍射线", @@ -283,21 +283,21 @@ "weaponSpecialWinter2019HealerText": "冬日魔杖", "weaponSpecialWinter2019HealerNotes": "冬季是个可以好好休息和疗伤的好时候,所以這根冬日魔杖的魔力可以帮助缓解最剧烈的伤痛。增加<%= int %>点智力。 2018-2019 冬季限定版装备。", "weaponMystery201411Text": "盛宴之叉", - "weaponMystery201411Notes": "刺伤你的仇敌或是插进你最爱的食物——这把多才多艺的叉子可是无所不能!没有属性加成。2014年11月捐助者物品。", + "weaponMystery201411Notes": "刺伤你的仇敌或是插进你最爱的食物——这把多才多艺的叉子可是无所不能!没有属性加成。2014年11月订阅者物品。", "weaponMystery201502Text": "爱与真理之微光翅膀法杖", - "weaponMystery201502Notes": "为了翅膀!为了爱!也为了真理!没有属性加成。2015年2月捐赠者物品。", + "weaponMystery201502Notes": "为了翅膀!为了爱!也为了真理!没有属性加成。2015年2月订阅者物品。", "weaponMystery201505Text": "绿色骑士长矛", "weaponMystery201505Notes": "这柄银绿相间的长枪已经将许多强敌打落马下。没有属性加成。2015年5月网站订阅者物品。", "weaponMystery201611Text": "多产的丰饶角", - "weaponMystery201611Notes": "各种美味又健康的食物会从这个角溢出。享受盛宴吧!没有属性加成。2016年11月捐助者礼物。", + "weaponMystery201611Notes": "各种美味又健康的食物会从这个角溢出。享受盛宴吧!没有属性加成。2016年11月订阅者物品。", "weaponMystery201708Text": "熔岩剑", - "weaponMystery201708Notes": "这把剑的炽热光辉会使即使是深红色的任务也能被迅速完成!没有属性加成。2017年8月捐赠者物品。", + "weaponMystery201708Notes": "这把剑的炽热光辉会使即使是深红色的任务也能被迅速完成!没有属性加成。2017年8月订阅者物品。", "weaponMystery201811Text": "璀璨巫师法杖", - "weaponMystery201811Notes": "强大程度配得上优雅外表的法杖。没有属性加成。2018年9月会员礼品。", + "weaponMystery201811Notes": "强大程度配得上优雅外表的法杖。没有属性加成。2018年9月订阅者物品。", "weaponMystery301404Text": "蒸汽朋克手杖", "weaponMystery301404Notes": "特别适合在城里散步。3015年3月订阅者物品。没有属性加成。", "weaponArmoireBasicCrossbowText": "基本款弩", - "weaponArmoireBasicCrossbowNotes": "这副十字弓可以在很远的距离刺穿一个任务的盔甲!增加<%= str %>点力量,<%= per %>点感知和<%= con %>点体质。", + "weaponArmoireBasicCrossbowNotes": "这副十字弓可以在很远的距离刺穿一个任务的盔甲!增加<%= str %>点力量,<%= per %>点感知和<%= con %>点体质。魔法衣橱:独立装备。", "weaponArmoireLunarSceptreText": "圆月弯镰", "weaponArmoireLunarSceptreNotes": "这把魔杖的治愈之力时隐时现。增加<%= con %>点体质和<%= int %>点智力。魔法衣橱:治愈之月套装(3件中的第3件)。", "weaponArmoireRancherLassoText": "牧场用套索", @@ -645,7 +645,7 @@ "armorMystery201406Text": "章魚长袍", "armorMystery201406Notes": "这件溜滑的法袍给予他的穿戴者穿过哪怕是最小的裂缝的能力。没有属性加成。2014年6月订阅者物品。", "armorMystery201407Text": "海底探险服装", - "armorMystery201407Notes": "要么被说“太厚了”,要么被说“讲真的,有点累赘哦”,这套衣服是每一位无畏的海底探险者最好的朋友。没有属性加成。2014年7月捐赠者物品。", + "armorMystery201407Notes": "要么被说“太厚了”,要么被说“讲真的,有点累赘哦”,这套衣服是每一位无畏的海底探险者最好的朋友。没有属性加成。2014年7月订阅者物品。", "armorMystery201408Text": "太阳长袍", "armorMystery201408Notes": "这些法袍又阳光和黄金编织而成。没有属性加成。2014年8月订阅者物品。", "armorMystery201409Text": "战斗背心", @@ -659,63 +659,63 @@ "armorMystery201503Text": "海蓝护甲", "armorMystery201503Notes": "海蓝矿石是幸运,快乐和永久的生产力的象征。没有属性加成。2015年3月订阅者物品。", "armorMystery201504Text": "忙碌的蜜蜂长袍", - "armorMystery201504Notes": "你会成为生产力作为一个忙碌的蜜蜂在此取长袍!没有属性加成。 2015年4月认购项目。", + "armorMystery201504Notes": "你会成为生产力作为一个忙碌的蜜蜂在此取长袍!没有属性加成。 2015年4月订阅者物品。", "armorMystery201506Text": "潜水衣", - "armorMystery201506Notes": "一件由色彩鲜艳的珊瑚礁构成的潜水衣!没有属性加成。2015年6越捐赠者物品。", + "armorMystery201506Notes": "一件由色彩鲜艳的珊瑚礁构成的潜水衣!没有属性加成。2015年6月订阅者物品。", "armorMystery201508Text": "猎豹服装", "armorMystery201508Notes": "穿着蓬松的猎豹服装快速奔跑!没有属性加成。2015年8月订阅者物品。", "armorMystery201509Text": "狼人服装", - "armorMystery201509Notes": "这真的是一件衣服么?没有属性加成。2015年9月捐赠者物品。", + "armorMystery201509Notes": "这真的是一件衣服么?没有属性加成。2015年9月订阅者物品。", "armorMystery201511Text": "木制铠甲", - "armorMystery201511Notes": "这件铠甲是直接用魔法木材雕刻的,令人惊讶的舒适。没有属性加成。2015年11月捐助者物品。", + "armorMystery201511Notes": "这件铠甲是直接用魔法木材雕刻的,令人惊讶的舒适。没有属性加成。2015年11月订阅者物品。", "armorMystery201512Text": "冷之焰盔甲", "armorMystery201512Notes": "召唤冰冷的冬之焰!没有属性加成。2015年12月订阅者物品。", "armorMystery201603Text": "幸运衣", - "armorMystery201603Notes": "这件衣服是成千上万的四叶草缝成的!没有属性加成。2016年3月捐赠者物品。", + "armorMystery201603Notes": "这件衣服是成千上万的四叶草缝成的!没有属性加成。2016年3月订阅者物品。", "armorMystery201604Text": "叶子护甲", - "armorMystery201604Notes": "你的身周喷发着许多小但是可怕的叶子。没有属性加成。2016年4月捐赠者物品。", + "armorMystery201604Notes": "你的身周喷发着许多小但是可怕的叶子。没有属性加成。2016年4月订阅者物品。", "armorMystery201605Text": "吟游诗人制服", - "armorMystery201605Notes": "不像传统的吟游诗人参加冒险派对,参加Habitic村民游行乐队的吟游诗人因宏大的游行而不是因地牢突击被众所周知。没有属性加成。2016年5月捐赠者物品。", + "armorMystery201605Notes": "不像传统的吟游诗人参加冒险派对,参加Habitic村民游行乐队的吟游诗人因宏大的游行而不是因地牢突击被众所周知。没有属性加成。2016年5月订阅者物品。", "armorMystery201606Text": "海豹的尾巴", - "armorMystery201606Notes": "这条有力的尾巴闪闪发光,就像大海的泡沫撞碎在岸上。没有属性加成。2016年6月捐赠者物品。", + "armorMystery201606Notes": "这条有力的尾巴闪闪发光,就像大海的泡沫撞碎在岸上。没有属性加成。2016年6月订阅者物品。", "armorMystery201607Text": "海底盗贼护甲", - "armorMystery201607Notes": "用这套隐身盔甲融入海底。没有属性加成。 2016年7月捐赠者物品。", + "armorMystery201607Notes": "用这套隐身盔甲融入海底。没有属性加成。 2016年7月订阅者物品。", "armorMystery201609Text": "奶牛护甲", - "armorMystery201609Notes": "穿上这套舒适的护甲和牛群一起休憩吧!没有属性加成。 2016年9月捐赠者物品。", + "armorMystery201609Notes": "穿上这套舒适的护甲和牛群一起休憩吧!没有属性加成。 2016年9月订阅者物品。", "armorMystery201610Text": "幽灵护甲", - "armorMystery201610Notes": "能使你像幽灵一样漂浮的神秘护甲。没有属性加成。2016年10月捐赠者物品。", + "armorMystery201610Notes": "能使你像幽灵一样漂浮的神秘护甲。没有属性加成。2016年10月订阅者物品。", "armorMystery201612Text": "胡桃夹子护甲", - "armorMystery201612Notes": "在这个盛大的节日里用这样有型的方式开坚果,小心不要夹到你的手指!没有属性加成。2016年12月份捐赠者套装。", + "armorMystery201612Notes": "在这个盛大的节日里用这样有型的方式开坚果,小心不要夹到你的手指!没有属性加成。2016年12月订阅者物品。", "armorMystery201703Text": "微光护甲", - "armorMystery201703Notes": "虽然这件护甲的颜色让人想起春天的花瓣,但它却是比钢铁还要坚硬!没有属性加成。2017年3月捐赠者礼品。", + "armorMystery201703Notes": "虽然这件护甲的颜色让人想起春天的花瓣,但它却是比钢铁还要坚硬!没有属性加成。2017年3月订阅者物品。", "armorMystery201704Text": "童话护甲", - "armorMystery201704Notes": "妖精们从晨露中精心制作了这一铠甲,用来捕捉清晨的第一抹阳光。没有属性加成。2017年4月捐赠者物品。", + "armorMystery201704Notes": "妖精们从晨露中精心制作了这一铠甲,用来捕捉清晨的第一抹阳光。没有属性加成。2017年4月订阅者物品。", "armorMystery201707Text": "Jellymancer的护甲", - "armorMystery201707Notes": "当你进行海底任务和冒险时,这种盔甲将帮助你悄无声息的混入海洋生物中。(。ò ∀ ó。)没有属性加成。2017年7月捐赠者物品。", + "armorMystery201707Notes": "当你进行海底任务和冒险时,这种盔甲将帮助你悄无声息的混入海洋生物中。(。ò ∀ ó。)没有属性加成。2017年7月订阅者物品。", "armorMystery201710Text": "傲慢小鬼着装", "armorMystery201710Notes": "有鳞片的,有光泽的,坚固的!没有属性加成。2017年10月订阅者物品。", "armorMystery201711Text": "飞毯驾驶员的装备", - "armorMystery201711Notes": "这件舒服的毛衣会让你穿梭在天空时保持温暖!没有属性加成。2017年11月订阅者专享。", + "armorMystery201711Notes": "这件舒服的毛衣会让你穿梭在天空时保持温暖!没有属性加成。2017年11月订阅者物品。", "armorMystery201712Text": "蜡烛术士护甲", - "armorMystery201712Notes": "這個魔法护甲产生的光和熱力會在不燒傷你的皮膚的條件下為你的心保持温暖。没有属性加成。2017年十二月捐赠者物品。", + "armorMystery201712Notes": "這個魔法护甲产生的光和熱力會在不燒傷你的皮膚的條件下為你的心保持温暖。没有属性加成。2017年12月订阅者物品。", "armorMystery201802Text": "爱虫护甲", - "armorMystery201802Notes": "这闪亮的护甲反射出你心灵的力量并将之注入附近每一个需要鼓励的Habitican的心中。没有属性加成。2018年二月订阅者物品。", + "armorMystery201802Notes": "这闪亮的护甲反射出你心灵的力量并将之注入附近每一个需要鼓励的Habitican的心中。没有属性加成。2018年2月订阅者物品。", "armorMystery201806Text": "安康鱼尾", - "armorMystery201806Notes": "这条弯曲的尾巴上有发光点,可以照亮您穿过深渊的路。 没有属性加成。 2018年6月捐赠者物品。", + "armorMystery201806Notes": "这条弯曲的尾巴上有发光点,可以照亮您穿过深渊的路。 没有属性加成。 2018年6月订阅者物品。", "armorMystery201807Text": "海蛇尾巴", - "armorMystery201807Notes": "这条有力的尾巴产生的推力足以使你以不可思议的速度穿梭深海。没有属性加成,2018年7月会员赠品。", + "armorMystery201807Notes": "这条有力的尾巴产生的推力足以使你以不可思议的速度穿梭深海。没有属性加成。2018年7月订阅者物品。", "armorMystery201808Text": "熔岩巨龙铠甲", - "armorMystery201808Notes": "由神龙不见首尾的熔岩巨龙掉落的鳞片制成,特别暖和。没有属性加成,2018年8月会员赠品。", + "armorMystery201808Notes": "由神龙不见首尾的熔岩巨龙掉落的鳞片制成,特别暖和。没有属性加成。2018年8月订阅者物品。", "armorMystery201809Text": "秋叶铠甲", - "armorMystery201809Notes": "你不仅是一阵小小的而又令人心生物哀的秋风落叶,而且也把这个季节最绮丽的色彩穿在了身上!没有属性加成,2018年9月会员赠品。", + "armorMystery201809Notes": "你不仅是一阵小小的而又令人心生物哀的秋风落叶,而且也把这个季节最绮丽的色彩穿在了身上!没有属性加成。2018年9月订阅者物品。", "armorMystery201810Text": "黑暗森林长袍", - "armorMystery201810Notes": "行走于幽冥国度的阴寒中,这件长袍的将以格外的温暖加护于你。没有属性加成。2018年10月会员赠品。", + "armorMystery201810Notes": "行走于幽冥国度的阴寒中,这件长袍的将以格外的温暖加护于你。没有属性加成。2018年10月订阅者物品。", "armorMystery301404Text": "蒸汽朋克套装", "armorMystery301404Notes": "整洁又精神,真聪明!没有属性加成。3015年2月订阅者物品。", "armorMystery301703Text": "蒸汽朋克孔雀装礼服", - "armorMystery301703Notes": "这件优雅礼服极其适合最奢华的节庆!没有属性加成。3017年3月捐赠者礼品。", + "armorMystery301703Notes": "这件优雅礼服极其适合最奢华的节庆!没有属性加成。3017年3月订阅者物品。", "armorMystery301704Text": "朋克鸡仔礼服", - "armorMystery301704Notes": "这个出色的装备非常适合节庆夜晚和在小工具工作间的一天!没有属性加成。3017年4月捐赠者礼品。", + "armorMystery301704Notes": "这个出色的装备非常适合节庆夜晚和在小工具工作间的一天!没有属性加成。3017年4月订阅者物品。", "armorArmoireLunarArmorText": "静月护甲", "armorArmoireLunarArmorNotes": "月光使你更加强壮和聪慧。增加力量<%= str %>点和智力<%= int %>点。魔法衣橱:静月套装(3件中的第2件)。", "armorArmoireGladiatorArmorText": "角斗士盔甲", @@ -785,7 +785,7 @@ "armorArmoireCandlestickMakerOutfitText": "烛台制造者套装", "armorArmoireCandlestickMakerOutfitNotes": "这一套结实的衣服可以保护你不受热蜡的影响。增加<%= con %>点的体质。魔法衣橱:烛台制造者(3件中的第1件)。", "armorArmoireWovenRobesText": "编织的长袍", - "armorArmoireWovenRobesNotes": "穿着这件多彩的长袍,骄傲地展示你的编织作品吧!增加<%= con %>点体质和<%= int %>点智力。附魔衣橱:编织者套装(3件中的第1件)。", + "armorArmoireWovenRobesNotes": "穿着这件多彩的长袍,骄傲地展示你的编织作品吧!增加<%= con %>点体质和<%= int %>点智力。魔法衣橱:编织者套装(3件中的第1件)。", "armorArmoireLamplightersGreatcoatText": "点灯者的厚大衣", "armorArmoireLamplightersGreatcoatNotes": "这件羊毛大衣能抵抗最严寒的冬夜!增加<%= per %>点感知。魔法衣橱:点灯者套装(4件中的第2件)。", "armorArmoireCoachDriverLiveryText": "马车夫制服", @@ -898,8 +898,8 @@ "headSpecialTurkeyHelmBaseNotes": "当你带上这顶鸟嘴头盔你的火鸡造型才算完整!没有属性加成。", "headSpecialTurkeyHelmGildedText": "镀金火鸡头盔", "headSpecialTurkeyHelmGildedNotes": "咕咕咕!Bling Bling!没有属性加成。", - "headSpecialNyeText": "可笑的派对帽子", - "headSpecialNyeNotes": "你收到了一顶可笑的派对帽子!当新年钟声响起时,自豪地戴上这顶帽子吧!没有属性加成。", + "headSpecialNyeText": "滑稽的派对帽子", + "headSpecialNyeNotes": "你收到了一顶滑稽的派对帽子!当新年钟声响起时,自豪地戴上这顶帽子吧!没有属性加成。", "headSpecialYetiText": "雪人驯化头盔", "headSpecialYetiNotes": "一顶可爱又可怕的帽子。增加<%= str %>点力量。2013-2014冬季限量版装备。", "headSpecialSkiText": "滑雪刺客头盔", @@ -966,8 +966,8 @@ "headSpecialFall2015MageNotes": "每一个针脚都闪耀魔咒的光辉。增加<%= per %>点感知。2015年秋季限量版装备。", "headSpecialFall2015HealerText": "青蛙帽子", "headSpecialFall2015HealerNotes": "这是一顶巨大的帽子只有最出色的药剂师才配得上它。增加<%= int %>点智力。2015秋季限量款装备。", - "headSpecialNye2015Text": "可笑的派对帽子", - "headSpecialNye2015Notes": "你收到了一顶可笑的派对帽子!当新年钟声响起时,自豪地戴上这顶帽子吧!没有属性加成。", + "headSpecialNye2015Text": "荒谬的派对帽子", + "headSpecialNye2015Notes": "你收到了一顶荒谬的派对帽子!当新年钟声响起时,自豪地戴上这顶帽子吧!没有属性加成。", "headSpecialWinter2016RogueText": "可可头盔", "headSpecialWinter2016RogueNotes": "在这个舒适的头盔上还有一条可以保护你的围巾,可以拿掉它来小口喝冬季饮品哦!增加<%= per %>点感知。2015-2016冬季限量版装备。", "headSpecialWinter2016WarriorText": "雪人帽", @@ -1081,95 +1081,95 @@ "headSpecialGaymerxText": "彩虹战士头盔", "headSpecialGaymerxNotes": "GaymerX是一个所有人都能参加的声援LGBTQIA人群的游戏集会,为了庆祝GaymerX大会的胜利举行,现推出这顶特别的彩虹头盔!", "headMystery201402Text": "翼盔", - "headMystery201402Notes": "这顶带翅膀的饰环使佩戴者风驰电掣!没有属性加成。2014年2月捐赠者物品。", + "headMystery201402Notes": "这顶带翅膀的饰环使佩戴者风驰电掣!没有属性加成。2014年2月订阅者物品。", "headMystery201405Text": "精神之焰", - "headMystery201405Notes": "烧掉拖延症!没有属性加成。2014年5月捐赠者物品。", + "headMystery201405Notes": "烧掉拖延症!没有属性加成。2014年5月订阅者物品。", "headMystery201406Text": "触手王冠", - "headMystery201406Notes": "这顶头盔的触手能从水中聚集魔力。没有属性加成。2014年6月捐赠者物品。", + "headMystery201406Notes": "这顶头盔的触手能从水中聚集魔力。没有属性加成。2014年6月订阅者物品。", "headMystery201407Text": "海底探险家头盔", - "headMystery201407Notes": "这顶头盔让探索海地变得易如反掌!同时它也让你看起来有点像瞪大了眼睛的鱼。非常复古哦!没有属性加成。2014年7月捐赠者物品。", + "headMystery201407Notes": "这顶头盔让探索海地变得易如反掌!同时它也让你看起来有点像瞪大了眼睛的鱼。非常复古哦!没有属性加成。2014年7月订阅者物品。", "headMystery201408Text": "太阳王冠", - "headMystery201408Notes": "这顶闪耀的王冠给它的佩戴者带来强大的意志力。没有属性加成。2014年8月捐赠者物品。", + "headMystery201408Notes": "这顶闪耀的王冠给它的佩戴者带来强大的意志力。没有属性加成。2014年8月订阅者物品。", "headMystery201411Text": "运动铁盔", - "headMystery201411Notes": "这顶传统帽子是在备受欢迎的Habitican运动的平衡球项目中佩戴的,这个项目的内容包括全副武装的你承诺保持工作和生活之间的平衡……在被角鹰兽追逐的时候!没有属性加成。2014年11月捐赠者物品。", + "headMystery201411Notes": "这顶传统帽子是在备受欢迎的Habitican运动的平衡球项目中佩戴的,这个项目的内容包括全副武装的你承诺保持工作和生活之间的平衡……在被角鹰兽追逐的时候!没有属性加成。2014年11月订阅者物品。", "headMystery201412Text": "企鹅帽子", "headMystery201412Notes": "谁是企鹅?没有属性加成。2014年12月订阅者物品。", "headMystery201501Text": "繁星头盔", - "headMystery201501Notes": "头盔上闪烁摇曳的星座指引着佩戴者的思绪向目标前进。没有属性加成。2015年1月捐赠者物品。", + "headMystery201501Notes": "头盔上闪烁摇曳的星座指引着佩戴者的思绪向目标前进。没有属性加成。2015年1月订阅者物品。", "headMystery201505Text": "绿色骑士头盔", "headMystery201505Notes": "铁盔上的羽饰骄傲地飘动着。没有属性加成。2015年5月网站订阅者物品。", "headMystery201508Text": "猎豹款帽子", - "headMystery201508Notes": "这个舒适的猎豹帽子看起来毛茸茸的!没有属性加成。2015年8月捐赠者专属物品。", + "headMystery201508Notes": "这个舒适的猎豹帽子看起来毛茸茸的!没有属性加成。2015年8月订阅者物品。", "headMystery201509Text": "狼人面具", - "headMystery201509Notes": "这是个面具吧?没有属性加成。2015年9月捐赠者的物品。", + "headMystery201509Notes": "这是个面具吧?没有属性加成。2015年9月订阅者物品。", "headMystery201511Text": "树木王冠", - "headMystery201511Notes": "数数这顶王冠上有多少个年轮。没有属性加成。2015年11月捐助者物品。", + "headMystery201511Notes": "数数这顶王冠上有多少个年轮。没有属性加成。2015年11月订阅者物品。", "headMystery201512Text": "冬季火焰", "headMystery201512Notes": "冰冷的火焰中透出最直白的智慧。没有属性加成。2015年12月订阅者物品。", "headMystery201601Text": "决心之头盔", "headMystery201601Notes": "保持坚定,勇敢的冠军!没有属性加成。2016年1月订阅者物品。", "headMystery201602Text": "负心人头巾", - "headMystery201602Notes": "对所有你的爱慕者隐藏你的身份。没有属性加成。2016年2月捐赠者物品。", + "headMystery201602Notes": "对所有你的爱慕者隐藏你的身份。没有属性加成。2016年2月订阅者物品。", "headMystery201603Text": "幸运帽", - "headMystery201603Notes": "这顶大礼帽有着神奇的好运魔力。没有属性加成。2016年3月捐赠者物品。", + "headMystery201603Notes": "这顶大礼帽有着神奇的好运魔力。没有属性加成。2016年3月订阅者物品。", "headMystery201604Text": "鲜花王冠", - "headMystery201604Notes": "这些编织的鲜花造就了惊人强大的头盔!没有属性加成。2016年4月捐赠者物品。", + "headMystery201604Notes": "这些编织的鲜花造就了惊人强大的头盔!没有属性加成。2016年4月订阅者物品。", "headMystery201605Text": "吟游诗人帽子", - "headMystery201605Notes": "七十六只龙领头大游行,一百一十只狮鹫近在眼前!没有属性加成。2016年5月捐赠者物品。", + "headMystery201605Notes": "七十六只龙领头大游行,一百一十只狮鹫近在眼前!没有属性加成。2016年5月订阅者物品。", "headMystery201606Text": "海豹帽", - "headMystery201606Notes": "当你融入嬉戏的海豹中,哼着海洋的曲调!没有属性加成。2016年6月捐赠者物品。", + "headMystery201606Notes": "当你融入嬉戏的海豹中,哼着海洋的曲调!没有属性加成。2016年6月订阅者物品。", "headMystery201607Text": "海底盗贼头盔", - "headMystery201607Notes": "从这个头盔中生长的海带有助于进行伪装。没有属性加成。2016年7月捐献者物品。", + "headMystery201607Notes": "从这个头盔中生长的海带有助于进行伪装。没有属性加成。2016年7月订阅者物品。", "headMystery201608Text": "闪电头盔", - "headMystery201608Notes": "这个噼啪作响的头盔导电!没有属性加成。2016年8月捐赠者物品。", + "headMystery201608Notes": "这个噼啪作响的头盔导电!没有属性加成。2016年8月订阅者物品。", "headMystery201609Text": "奶牛帽", - "headMystery201609Notes": "你再也不会想摘下这顶奶牛帽了。没有属性加成。2016年9月捐赠者物品。", + "headMystery201609Notes": "你再也不会想摘下这顶奶牛帽了。没有属性加成。2016年9月订阅者物品。", "headMystery201610Text": "幽灵火焰", - "headMystery201610Notes": "这些火焰将唤醒你灵魂的力量。没有属性加成。2016年10月捐赠者物品。", + "headMystery201610Notes": "这些火焰将唤醒你灵魂的力量。没有属性加成。2016年10月订阅者物品。", "headMystery201611Text": "豪华盛宴帽", - "headMystery201611Notes": "有了这顶羽毛装饰的帽子,你绝对是这次盛宴上最美之人。没有属性加成。2016年11月捐赠者物品。", + "headMystery201611Notes": "有了这顶羽毛装饰的帽子,你绝对是这次盛宴上最美之人。没有属性加成。2016年11月订阅者物品。", "headMystery201612Text": "胡桃夹子头盔", - "headMystery201612Notes": "这个即高又辉煌的头盔增加了魔法元素到你的假日服装!!没有属性加成。2016年12月捐赠者物品。", + "headMystery201612Notes": "这个即高又辉煌的头盔增加了魔法元素到你的假日服装!!没有属性加成。2016年12月订阅者物品。", "headMystery201702Text": "负心人头巾", - "headMystery201702Notes": "尽管这个面具会隐藏你的脸,但是这只会增加你的魅力!。没有属性加成。2017年2月捐赠者物品。", + "headMystery201702Notes": "尽管这个面具会隐藏你的脸,但是这只会增加你的魅力!。没有属性加成。2017年2月订阅者物品。", "headMystery201703Text": "微光头盔", - "headMystery201703Notes": "从角状头盔上反射来的柔和微光,能使最暴怒的敌人平静下来。没有属性加成。2017年3月捐赠者礼品。", + "headMystery201703Notes": "从角状头盔上反射来的柔和微光,能使最暴怒的敌人平静下来。没有属性加成。2017年3月订阅者物品。", "headMystery201705Text": "羽毛斗士头盔", - "headMystery201705Notes": "Habitica因为其威猛、生产力强的狮鹫战士而闻名天下!戴上这顶羽毛头盔,加入到这个受人尊敬的行列之中吧。没有属性加成。2017年5月捐赠者物品。", + "headMystery201705Notes": "Habitica因为其威猛、生产力强的狮鹫战士而闻名天下!戴上这顶羽毛头盔,加入到这个受人尊敬的行列之中吧。没有属性加成。2017年5月订阅者物品。", "headMystery201707Text": "水母曼瑟头盔", - "headMystery201707Notes": "对于任务,你需要额外的援助之手吗?这顶半透明水母头盔所带的触手恰好可以帮你一把!没有属性加成。2017年7月捐赠者物品。", + "headMystery201707Notes": "对于任务,你需要额外的援助之手吗?这顶半透明水母头盔所带的触手恰好可以帮你一把!没有属性加成。2017年7月订阅者物品。", "headMystery201710Text": "英雄无敌头盔", - "headMystery201710Notes": "这个头盔让你看起来很吓人。。。但他不会对你的深度感知有任何加成! 没有属性加成。2017年十月订阅者专享。", + "headMystery201710Notes": "这个头盔让你看起来很吓人。。。但他不会对你的深度感知有任何加成! 没有属性加成。2017年10月订阅者物品。", "headMystery201712Text": "蜡烛术士王冠", - "headMystery201712Notes": "這個王冠能夠為最黑的寒冬夜晚帶來光明和溫暖。没有属性加成。2017年十二月捐赠者物品。", + "headMystery201712Notes": "這個王冠能夠為最黑的寒冬夜晚帶來光明和溫暖。没有属性加成。2017年12月订阅者物品。", "headMystery201802Text": "爱虫头盔", - "headMystery201802Notes": "这顶头盔上的触须作为可爱的探测杆,探测附近的爱和支持的感受。没有属性加成。 2018年2月捐赠者物品。", + "headMystery201802Notes": "这顶头盔上的触须作为可爱的探测杆,探测附近的爱和支持的感受。没有属性加成。 2018年2月订阅者物品。", "headMystery201803Text": "勇敢蜻蜓头饰", - "headMystery201803Notes": "虽然它的外观非常具有装饰性,但你可以把翅膀放在这个头饰上以获得额外的升力!没有属性加成。2018年3月捐赠者物品。", + "headMystery201803Notes": "虽然它的外观非常具有装饰性,但你可以把翅膀放在这个头饰上以获得额外的升力!没有属性加成。2018年3月订阅者物品。", "headMystery201805Text": "华丽孔雀头盔", - "headMystery201805Notes": "这顶头盔将让你成为镇上最自豪最漂亮的(也可能是最吵闹的)的鸟。没有属性加成。 2018年5月捐赠者物品。", + "headMystery201805Notes": "这顶头盔将让你成为镇上最自豪最漂亮的(也可能是最吵闹的)的鸟。没有属性加成。 2018年5月订阅者物品。", "headMystery201806Text": "安康鱼盔", - "headMystery201806Notes": "盔顶上的小灯有催眠作用,能让所有海洋生物围绕在你身边。我们强烈呼吁你以善良的方式使用发光吸引生物的能力!没有属性加成。2018年6月会员赠品。", + "headMystery201806Notes": "盔顶上的小灯有催眠作用,能让所有海洋生物围绕在你身边。我们强烈呼吁你以善良的方式使用发光吸引生物的能力!没有属性加成。2018年6月订阅者物品。", "headMystery201807Text": "大海蛇头盔", - "headMystery201807Notes": "这顶头盔上坚韧的鱼鳞能保护您免于受到任何海洋中敌人的攻击。没有属性加成。 2018年7月订阅者专属装备。", + "headMystery201807Notes": "这顶头盔上坚韧的鱼鳞能保护您免于受到任何海洋中敌人的攻击。没有属性加成。 2018年7月订阅者物品。", "headMystery201808Text": "熔岩巨龙披风", - "headMystery201808Notes": "披风上那闪闪发亮的龙角能够在地底的洞穴中照亮您的路。没有属性加成。 2018年8月订阅者专属装备。", + "headMystery201808Notes": "披风上那闪闪发亮的龙角能够在地底的洞穴中照亮您的路。没有属性加成。 2018年8月订阅者物品。", "headMystery201809Text": "秋季花朵皇冠", - "headMystery201809Notes": "来自秋季温暖日子中的最后一朵花正是纪念此季节中的美丽事物之最佳信物。没有属性加成。 2018年9月订阅者专属装备。", + "headMystery201809Notes": "来自秋季温暖日子中的最后一朵花正是纪念此季节中的美丽事物之最佳信物。没有属性加成。 2018年9月订阅者物品。", "headMystery201810Text": "黑暗森林头盔", - "headMystery201810Notes": "如果您正在穿越一个幽灵般的地方,这顶头盔上发红光的眼睛一定能吓跑沿路中的敌人。没有属性加成。 2018年10月订阅者专属装备。", + "headMystery201810Notes": "如果您正在穿越一个幽灵般的地方,这顶头盔上发红光的眼睛一定能吓跑沿路中的敌人。没有属性加成。 2018年10月订阅者物品。", "headMystery201811Text": "璀璨法师帽子", - "headMystery201811Notes": "戴上这顶有羽毛的帽子后就算是在最华丽的巫师聚会中也能脱颖而出! 没有属性加成。 2018年11月订阅者专属装备。", + "headMystery201811Notes": "戴上这顶有羽毛的帽子后就算是在最华丽的巫师聚会中也能脱颖而出! 没有属性加成。 2018年11月订阅者物品。", "headMystery201901Text": "北极星头盔", - "headMystery201901Notes": "这头盔上闪闪发亮的钻石拥有从冬季极光中捕获到的神奇光线。没有属性加成。 2019年1月订阅者专属装备。", + "headMystery201901Notes": "这头盔上闪闪发亮的钻石拥有从冬季极光中捕获到的神奇光线。没有属性加成。 2019年1月订阅者物品。", "headMystery301404Text": "华丽礼帽", - "headMystery301404Notes": "上流社会佼佼者的华丽礼帽!3015年1月捐赠者物品。没有属性加成。", + "headMystery301404Notes": "上流社会佼佼者的华丽礼帽!3015年1月订阅者物品。没有属性加成。", "headMystery301405Text": "基础礼帽", - "headMystery301405Notes": "一顶基础礼帽,渴望能与华丽的头饰搭配。没有属性加成。3015年5月捐赠者物品。", + "headMystery301405Notes": "一顶基础礼帽,渴望能与华丽的头饰搭配。没有属性加成。3015年5月订阅者物品。", "headMystery301703Text": "豪华盛宴帽", - "headMystery301703Notes": "这顶帽子的羽毛是由普理女士精修学校为花式孔雀捐赠的。骄傲地带着它们吧!没有属性加成。3017年三月捐赠者礼品。", + "headMystery301703Notes": "这顶帽子的羽毛是由普理女士精修学校为花式孔雀捐赠的。骄傲地带着它们吧!没有属性加成。3017年3月订阅者物品。", "headMystery301704Text": "鸡仔羽帽", - "headMystery301704Notes": "有什么能比获得一跟鸡仔羽毛更让人开心的呢?没有属性加成。3017年4月捐赠者礼品。", + "headMystery301704Notes": "有什么能比获得一跟鸡仔羽毛更让人开心的呢?没有属性加成。3017年4月订阅者物品。", "headArmoireLunarCrownText": "静月王冠", "headArmoireLunarCrownNotes": "这个王冠会增强你的生命力和感知能力,在满月时效果尤其明显。增加<%= con %>点体质和<%= per %>点感知。魔法衣橱:治愈之月套装(3件中的第1件)。", "headArmoireRedHairbowText": "红色的蝴蝶结头饰", @@ -1435,17 +1435,17 @@ "shieldMystery201601Text": "决心屠戮者", "shieldMystery201601Notes": "这把剑能挡开所有的干扰。没有属性加成。2016年1月订阅者物品。", "shieldMystery201701Text": "冻结时间之盾", - "shieldMystery201701Notes": "把时间冻结在它应有的轨迹上,征服你的任务吧!没有属性加成。2017年1月捐赠者物品。", + "shieldMystery201701Notes": "把时间冻结在它应有的轨迹上,征服你的任务吧!没有属性加成。2017年1月订阅者物品。", "shieldMystery201708Text": "熔岩护盾", - "shieldMystery201708Notes": "这顶坚固的熔岩护盾可以保护你不受坏习惯的伤害,抵挡伤害的时候甚至不会让你的手受到冲击。没有属性加成。2017年8月捐赠者物品。", + "shieldMystery201708Notes": "这顶坚固的熔岩护盾可以保护你不受坏习惯的伤害,抵挡伤害的时候甚至不会让你的手受到冲击。没有属性加成。2017年8月订阅者物品。", "shieldMystery201709Text": "《魔法入门手册》", - "shieldMystery201709Notes": "这本书将引导你初次接触魔法的奥秘。没有属性加成。2017年9月捐赠者物品。", + "shieldMystery201709Notes": "这本书将引导你初次接触魔法的奥秘。没有属性加成。2017年9月订阅者物品。", "shieldMystery201802Text": "我爱bug护盾", - "shieldMystery201802Notes": "这面护盾虽然看起来很像是颗易碎的糖果,但它甚至可以抵挡能让人犯心脏病的心碎一击!没有属性加成。2018年2月订阅者专属装备。", + "shieldMystery201802Notes": "这面护盾虽然看起来很像是颗易碎的糖果,但它甚至可以抵挡能让人犯心脏病的心碎一击!没有属性加成。2018年2月订阅者物品。", "shieldMystery301405Text": "时钟之盾", - "shieldMystery301405Notes": "拥有这块高耸的时钟之盾,时间与你同在!没有属性加成。3015年6月捐赠者物品。", + "shieldMystery301405Notes": "拥有这块高耸的时钟之盾,时间与你同在!没有属性加成。3015年6月订阅者物品。", "shieldMystery301704Text": "轻柔扇子", - "shieldMystery301704Notes": "这把精致的扇子会让你感到凉爽,并且看起来非常美丽!没有属性加成。3017年四月捐赠者礼品。", + "shieldMystery301704Notes": "这把精致的扇子会让你感到凉爽,并且看起来非常美丽!没有属性加成。3017年4月订阅者物品。", "shieldArmoireGladiatorShieldText": "角斗士之盾", "shieldArmoireGladiatorShieldNotes": "作为一名角斗士,你必须……呃,管他了,就用你的盾砸他们就好了。增加<%= con %>点体质和<%= str %>点力量。魔法衣橱:角斗士套装(3件中的第3件)。", "shieldArmoireMidnightShieldText": "午夜之盾", @@ -1510,39 +1510,39 @@ "backBase0Notes": "没有背部挂件。", "animalTails": "动物尾巴", "backMystery201402Text": "黄金之翼", - "backMystery201402Notes": "这双耀眼的翅膀上的羽毛在阳光下闪闪发光!没有属性加成。2014年2月捐赠者物品。", + "backMystery201402Notes": "这双耀眼的翅膀上的羽毛在阳光下闪闪发光!没有属性加成。2014年2月订阅者物品。", "backMystery201404Text": "薄暮蝶翼", - "backMystery201404Notes": "化蝶,翩飞!没有属性加成。2014年4月捐赠者物品。", + "backMystery201404Notes": "化蝶,翩飞!没有属性加成。2014年4月订阅者物品。", "backMystery201410Text": "地精之翼", - "backMystery201410Notes": "夜晚,以这双强壮的翅膀俯冲。没有属性加成。2014年10月捐赠者物品。", + "backMystery201410Notes": "夜晚,以这双强壮的翅膀俯冲。没有属性加成。2014年10月订阅者物品。", "backMystery201504Text": "忙碌的蜜蜂翅膀", - "backMystery201504Notes": "嗡嗡嗡嗡嗡嗡声!从掠过任务任务。没有属性加成。 2015年4月认购项目。", + "backMystery201504Notes": "嗡嗡嗡嗡嗡嗡声!从掠过任务任务。没有属性加成。 2015年4月订阅者物品。", "backMystery201507Text": "超爽冲浪板", - "backMystery201507Notes": "在未完成之湾优雅穿行于雅致的岩石,踏浪飞驰!没有属性加成。2015年7月捐赠者物品。", + "backMystery201507Notes": "在未完成之湾优雅穿行于雅致的岩石,踏浪飞驰!没有属性加成。2015年7月订阅者物品。", "backMystery201510Text": "地精尾巴", "backMystery201510Notes": "绕来抓去,强而有力!没有属性加成。2015年10月订阅者物品。", "backMystery201602Text": "负心人披肩", - "backMystery201602Notes": "扬起斗篷嗖的一声,你的敌人落在了你的后面!没有属性加成。2016年2月捐赠者物品。", + "backMystery201602Notes": "扬起斗篷嗖的一声,你的敌人落在了你的后面!没有属性加成。2016年2月订阅者物品。", "backMystery201608Text": "雷电斗篷", - "backMystery201608Notes": "用这个翻卷的斗篷飞跃暴风雨!没有属性加成。2016年8月捐赠者物品。", + "backMystery201608Notes": "用这个翻卷的斗篷飞跃暴风雨!没有属性加成。2016年8月订阅者物品。", "backMystery201702Text": "负心人披肩", - "backMystery201702Notes": "这个斗篷的旋风让你的魅力横扫全场!没有属性加成。2017年2月捐赠者物品。", + "backMystery201702Notes": "这个斗篷的旋风让你的魅力横扫全场!没有属性加成。2017年2月订阅者物品。", "backMystery201704Text": "天使的翅膀", - "backMystery201704Notes": "这双闪亮的翅膀将带你到任何地方,甚至是由魔法生物所统治的隐蔽王国。\n没有属性加成。2017年4月捐赠者物品。", + "backMystery201704Notes": "这双闪亮的翅膀将带你到任何地方,甚至是由魔法生物所统治的隐蔽王国。没有属性加成。2017年4月订阅者物品。", "backMystery201706Text": "破烂的海盗的旗帜", - "backMystery201706Notes": "这面印着“快乐”的快乐旗帜能让所有的待办事项恐惧无比!没有属性加成。2017年6月捐赠者物品。", + "backMystery201706Notes": "这面印着“快乐”的快乐旗帜能让所有的待办事项恐惧无比!没有属性加成。2017年6月订阅者物品。", "backMystery201709Text": "一摞魔法书籍", - "backMystery201709Notes": "学习魔法需要大量的阅读,但你的确很享受这个学习过程!没有属性加成。2017年9月捐赠者物品。", + "backMystery201709Notes": "学习魔法需要大量的阅读,但你的确很享受这个学习过程!没有属性加成。2017年9月订阅者物品。", "backMystery201801Text": "冰霜精灵之翼", - "backMystery201801Notes": "这双附魔翅膀或许看起来就像雪片那样脆弱,但它可以带您到任何您想去的地方!没有属性加成。2018年1月订阅者专属装备。", + "backMystery201801Notes": "这双附魔翅膀或许看起来就像雪片那样脆弱,但它可以带您到任何您想去的地方!没有属性加成。2018年1月订阅者物品。", "backMystery201803Text": "勇猛蜻蜓之翼", - "backMystery201803Notes": "这双亮丽的翅膀将带您穿过柔和的春风,并越过一洼又一洼的睡莲池。没有属性加成。 2018年3月订阅者专属装备。", + "backMystery201803Notes": "这双亮丽的翅膀将带您穿过柔和的春风,并越过一洼又一洼的睡莲池。没有属性加成。 2018年3月订阅者物品。", "backMystery201804Text": "松鼠尾巴", - "backMystery201804Notes": "的确,它能帮助您在树枝间跳跃时保持平衡,但更重要的是那蓬松的绒毛。没有属性加成。 2018年4月订阅者专属装备。", + "backMystery201804Notes": "的确,它能帮助您在树枝间跳跃时保持平衡,但更重要的是那蓬松的绒毛。没有属性加成。 2018年4月订阅者物品。", "backMystery201812Text": "北极狐狸尾", - "backMystery201812Notes": "您这奢华稀有的尾巴就像冰柱一样闪闪发光。当您轻轻地座在雪堆上时,它就会愉悦地摆动。没有属性加成。 2018年12月订阅者专属装备。", + "backMystery201812Notes": "您这奢华稀有的尾巴就像冰柱一样闪闪发光。当您轻轻地座在雪堆上时,它就会愉悦地摆动。没有属性加成。 2018年12月订阅者物品。", "backMystery201805Text": "华丽孔雀尾巴", - "backMystery201805Notes": "这款华丽的羽毛尾巴非常适合在美丽的花园小径上奔跑! 没有属性加成。 2018年5月捐赠者物品。", + "backMystery201805Notes": "这款华丽的羽毛尾巴非常适合在美丽的花园小径上奔跑! 没有属性加成。 2018年5月订阅者物品。", "backSpecialWonderconRedText": "威武斗篷", "backSpecialWonderconRedNotes": "力量与美貌在刷刷作响。没有属性加成。特别版参与者物品。", "backSpecialWonderconBlackText": "潜行斗篷", @@ -1602,13 +1602,13 @@ "bodySpecialNamingDay2018Text": "紫御狮鹫披风", "bodySpecialNamingDay2018Notes": "命名节快乐! 快戴上这件典雅又柔软的披风一同前来为 Habitica 欢庆吧!没有属性加成。", "bodyMystery201705Text": "斗士的折叠翅膀", - "bodyMystery201705Notes": "这些折叠的翅膀不只是看起来时髦:它们会给你一个狮鹫的速度和敏捷性!没有属性加成。2017年5月捐赠者物品。", + "bodyMystery201705Notes": "这些折叠的翅膀不只是看起来时髦:它们会给你一个狮鹫的速度和敏捷性!没有属性加成。2017年5月订阅者物品。", "bodyMystery201706Text": "衣衫褴褛的海盗船的斗篷", - "bodyMystery201706Notes": "这件斗篷有秘密的口袋,可以把你从任务中掠夺的金子藏起来。没有属性加成。2017年6月捐赠者物品。", + "bodyMystery201706Notes": "这件斗篷有秘密的口袋,可以把你从任务中掠夺的金子藏起来。没有属性加成。2017年6月订阅者物品。", "bodyMystery201711Text": "飞毯驾驶员的围巾", - "bodyMystery201711Notes": "这个柔软的针织围巾在风中看起来相当雄伟。没有属性加成。2017年11月订阅者专享。", + "bodyMystery201711Notes": "这个柔软的针织围巾在风中看起来相当雄伟。没有属性加成。2017年11月订阅者物品。", "bodyMystery201901Text": "北极星护肩", - "bodyMystery201901Notes": "这套闪闪发光的护肩非常坚固,但却可以像一缕缕跳舞的光束一样轻盈地靠在您的肩膀上。没有属性加成。 2019年1月订阅者专属装备。", + "bodyMystery201901Notes": "这套闪闪发光的护肩非常坚固,但却可以像一缕缕跳舞的光束一样轻盈地靠在您的肩膀上。没有属性加成。 2019年1月订阅者物品。", "bodyArmoireCozyScarfText": "舒適溫暖的領巾", "bodyArmoireCozyScarfNotes": "这条上等的围巾能让您在寒冷环境下工作时,还能保持温暖。增加体质和感知各<%= attrs %>点。魔法衣橱:点灯人套装(4件中的第4件)。", "headAccessory": "头部配件", @@ -1680,23 +1680,23 @@ "headAccessoryYellowHeadbandText": "黄色发带", "headAccessoryYellowHeadbandNotes": "一个款式简单的黄色发带。没有属性加成。", "headAccessoryMystery201403Text": "森林行者鹿角", - "headAccessoryMystery201403Notes": "这对鹿角上的苔藓和地衣闪烁着微光。没有属性加成。2014年3月捐赠者物品。", + "headAccessoryMystery201403Notes": "这对鹿角上的苔藓和地衣闪烁着微光。没有属性加成。2014年3月订阅者物品。", "headAccessoryMystery201404Text": "薄暮蝴蝶的触角", - "headAccessoryMystery201404Notes": "这对触角能帮助佩戴者察觉到危险的干扰!没有属性加成。2014年4月捐赠者物品。", + "headAccessoryMystery201404Notes": "这对触角能帮助佩戴者察觉到危险的干扰!没有属性加成。2014年4月订阅者物品。", "headAccessoryMystery201409Text": "秋季鹿角", - "headAccessoryMystery201409Notes": "这对强大的鹿角会随着树叶一起改变颜色。没有属性加成。2014年9月捐赠者物品。", + "headAccessoryMystery201409Notes": "这对强大的鹿角会随着树叶一起改变颜色。没有属性加成。2014年9月订阅者物品。", "headAccessoryMystery201502Text": "思绪之翼", - "headAccessoryMystery201502Notes": "放飞你的想象力!没有属性加成。2015年2月捐赠者物品。", + "headAccessoryMystery201502Notes": "放飞你的想象力!没有属性加成。2015年2月订阅者物品。", "headAccessoryMystery201510Text": "地精角", - "headAccessoryMystery201510Notes": "这些吓人的角滑溜溜的。没有属性加成。2015年10月捐赠者物品。", + "headAccessoryMystery201510Notes": "这些吓人的角滑溜溜的。没有属性加成。2015年10月订阅者物品。", "headAccessoryMystery201801Text": "冰霜精灵之角", - "headAccessoryMystery201801Notes": "这对冰晶鹿角随着冬季极光的闪烁而闪闪发光。没有属性加成。 2018年1月订阅者专属装备。", + "headAccessoryMystery201801Notes": "这对冰晶鹿角随着冬季极光的闪烁而闪闪发光。没有属性加成。 2018年1月订阅者物品。", "headAccessoryMystery201804Text": "松鼠耳", - "headAccessoryMystery201804Notes": "这对毛茸茸的声音捕捉器能确保您永远不会错过叶子的沙沙声或橡子的掉落声!没有属性加成。 2018年4月订阅者专属装备。", + "headAccessoryMystery201804Notes": "这对毛茸茸的声音捕捉器能确保您永远不会错过叶子的沙沙声或橡子的掉落声!没有属性加成。 2018年4月订阅者物品。", "headAccessoryMystery201812Text": "北极狐狸耳", - "headAccessoryMystery201812Notes": "您将可以听到雪花飘落在景观上微妙的声音。没有属性加成。 2018年12月订阅者专属装备。", + "headAccessoryMystery201812Notes": "您将可以听到雪花飘落在景观上微妙的声音。没有属性加成。 2018年12月订阅者物品。", "headAccessoryMystery301405Text": "头戴护目镜", - "headAccessoryMystery301405Notes": "“护目镜是戴在眼睛上的,”人们说。“没有人会想要一副只能戴在头上的护目镜。”人们说。哈!你果然让他们长见识了!没有属性加成。3015年8月捐赠者物品。", + "headAccessoryMystery301405Notes": "“护目镜是戴在眼睛上的,”人们说。“没有人会想要一副只能戴在头上的护目镜。”人们说。哈!你果然让他们长见识了!没有属性加成。3015年8月订阅者物品。", "headAccessoryArmoireComicalArrowText": "滑稽的箭", "headAccessoryArmoireComicalArrowNotes": "这个异想天开的东西一定能引人发笑!增加<%= str %>点力量。魔法衣橱:独立装备。", "headAccessoryArmoireGogglesOfBookbindingText": "装订工的眼镜", @@ -1730,19 +1730,19 @@ "eyewearSpecialWonderconBlackText": "潜行面罩", "eyewearSpecialWonderconBlackNotes": "你的动机绝对合法。没有属性加成。特别版参与者物品。", "eyewearMystery201503Text": "海蓝护目镜", - "eyewearMystery201503Notes": "别被这些璀璨的宝石闪瞎了!没有属性加成。2015年三月捐赠者物品。", + "eyewearMystery201503Notes": "别被这些璀璨的宝石闪瞎了!没有属性加成。2015年3月订阅者物品。", "eyewearMystery201506Text": "霓虹潜水镜", - "eyewearMystery201506Notes": "这件霓虹的潜水镜能让佩戴者看清楚水下的状况,没有属性加成。2015年6越捐赠者物品。", + "eyewearMystery201506Notes": "这件霓虹的潜水镜能让佩戴者看清楚水下的状况,没有属性加成。2015年6月订阅者物品。", "eyewearMystery201507Text": "酷的太阳镜", - "eyewearMystery201507Notes": "天气热的时候,这副太阳镜能帮你保持冷静。 没有属性加成。2015年7月捐赠者物品。", + "eyewearMystery201507Notes": "天气热的时候,这副太阳镜能帮你保持冷静。 没有属性加成。2015年7月订阅者物品。", "eyewearMystery201701Text": "永恒的阴影", - "eyewearMystery201701Notes": "这副太阳镜会从有害的射线中保护你的眼睛,并且让你不管什么时候看起来都很时髦。没有属性加成。2017年1月捐赠者物品。", + "eyewearMystery201701Notes": "这副太阳镜会从有害的射线中保护你的眼睛,并且让你不管什么时候看起来都很时髦。没有属性加成。2017年1月订阅者物品。", "eyewearMystery301404Text": "眼戴护目镜", - "eyewearMystery301404Notes": "没有什么小饰品能比一副护目镜更炫了——可能,除了单片眼镜。没有属性加成。3015年3月捐赠者物品。", + "eyewearMystery301404Notes": "没有什么小饰品能比一副护目镜更炫了——可能,除了单片眼镜。没有属性加成。3015年3月订阅者物品。", "eyewearMystery301405Text": "单片眼镜", "eyewearMystery301405Notes": "没有什么饰品能比单片眼镜更炫——可能,除了护目镜。没有属性加成。3015年7月订阅者物品。", "eyewearMystery301703Text": "孔雀化妆舞会面具", - "eyewearMystery301703Notes": "完美适配美妙的化妆舞会,或者静悄悄地穿过那些特别讲究穿着的人群。没有属性加成。3017年三月捐赠者礼品。", + "eyewearMystery301703Notes": "完美适配美妙的化妆舞会,或者静悄悄地穿过那些特别讲究穿着的人群。没有属性加成。3017年3月订阅者物品。", "eyewearArmoirePlagueDoctorMaskText": "瘟疫医生面具", "eyewearArmoirePlagueDoctorMaskNotes": "一个可靠的面具,医生们戴着它对抗拖延症瘟疫。增加体质和智力各<%= attrs %>点。魔法衣橱:瘟疫医生系列(3件中的第2件)。", "eyewearArmoireGoofyGlassesText": "滑稽的眼镜", @@ -1761,11 +1761,11 @@ "headArmoireVernalHenninText": "春之尖顶高帽", "headArmoireVernalHenninNotes": "这个锥形的帽子不但相当好看,而且还能塞进一张卷起来的待办事项清单。增加<%= per %>点感知。魔法衣橱:春之祭司(3件中的第1件)。", "shieldMystery201902Text": "神秘的五彩纸屑", - "shieldMystery201902Notes": "这张来自魔法之心的闪光纸片悬在空中缓慢地舞蹈着。没有属性加成。2019年2月会员赠品。", + "shieldMystery201902Notes": "这张来自魔法之心的闪光纸片悬在空中缓慢地舞蹈着。没有属性加成。2019年2月订阅者物品。", "shieldArmoireMightyPizzaText": "巨无霸披萨", "shieldArmoireMightyPizzaNotes": "当然,这可以是一个相当不错的盾牌,但我们还是强烈建议你吃掉这个非常、非常好的披萨。增加<%= per %>点感知。魔法衣橱:厨师套装(4件中的第4件)。", "eyewearMystery201902Text": "神秘芳心纵火犯", - "eyewearMystery201902Notes": "这个神秘面具让人认不出你,大家只能看到属于胜者的微笑。没有属性加成。2019年2月订阅者奖励物品。", + "eyewearMystery201902Notes": "这个神秘面具让人认不出你,大家只能看到属于胜者的微笑。没有属性加成。2019年2月订阅者物品。", "weaponSpecialSpring2019WarriorNotes": "翠绿的刀刃前,坏习惯退隐。增加<%= str %>点力量。2019春季限定版。", "weaponSpecialSpring2019RogueNotes": "这些武器有着天和雨的力量。我们不推荐你在水中的时候用它们。增加<%= str %>点力量。2019春季限定装备。", "weaponSpecialSpring2019WarriorText": "树茎剑", @@ -1785,7 +1785,7 @@ "weaponSpecialSpring2019HealerText": "春日赞歌", "weaponSpecialSpring2019MageNotes": "法杖末端的琥珀里包裹了一只蚊子!不知道有没有恐龙基因。增加<%= int %>点智力和<%= per %>点感知。2019年春季限定装备。", "weaponSpecialSpring2019MageText": "琥珀法杖", - "eyewearMystery201907Notes": "看起来很棒,同时保护您的眼睛免受有害紫外线的伤害!没有属性加成。 2019年7月订阅赠品。", + "eyewearMystery201907Notes": "看起来很棒,同时保护您的眼睛免受有害紫外线的伤害!没有属性加成。 2019年7月订阅者物品。", "eyewearMystery201907Text": "甜美太阳镜", "weaponArmoireAstronomersTelescopeNotes": "一种可以让你观察星星古老舞蹈的乐器。增加<%= per%>点感知。魔法衣橱:天文学家法师套装(3件中的第3件)。", "weaponArmoireAstronomersTelescopeText": "天文学家的望远镜", @@ -1797,9 +1797,9 @@ "backMystery201905Text": "悦目龙翅膀", "weaponArmoireMagnifyingGlassText": "放大镜", "armorMystery201906Text": "和蔼可亲的锦鲤尾巴", - "armorMystery201904Notes": "这件闪亮的衣服正前面缝着蛋白石,赋予你神秘的力量和神奇的外观。没有属性加成。2019年4月订阅赠品。", + "armorMystery201904Notes": "这件闪亮的衣服正前面缝着蛋白石,赋予你神秘的力量和神奇的外观。没有属性加成。2019年4月订阅者物品。", "armorMystery201904Text": "乳白色服装", - "armorMystery201903Notes": "人们非常想知道你在哪里买到这种鸡蛋装!没有属性加成。2019年3月订阅赠品。", + "armorMystery201903Notes": "人们非常想知道你在哪里买到这种鸡蛋装!没有属性加成。2019年3月订阅者物品。", "armorMystery201903Text": "贝壳铠甲", "armorSpecialSpring2019HealerNotes": "你明亮的羽毛会让每个人都知道冬天的寒冷和黑暗已经过去了。增加<%= con%>点体质。2019年春季限量版装备。", "armorSpecialSpring2019HealerText": "罗宾装扮", @@ -1823,15 +1823,15 @@ "weaponArmoireFloridFanText": "炫彩扇子", "weaponArmoireMagnifyingGlassNotes": "啊哈!一个证据!用这个精细的放大镜仔细检查它。增加<%= per%>点感知。魔法衣橱:侦探套装(4件中的第3件)。", "armorArmoireAstronomersRobeText": "天文学家的长袍", - "armorArmoireBoatingJacketNotes": "无论你是在一艘时髦的游艇上,还是在一辆破车上,穿着这件夹克、戴着领带的你都将惹人注目。增加力量、智力和感知各<%= attrs %>点。魔法衣柜:划船套装(3件中的第1件)。", + "armorArmoireBoatingJacketNotes": "无论你是在一艘时髦的游艇上,还是在一辆破车上,穿着这件夹克、戴着领带的你都将惹人注目。增加力量、智力和感知各<%= attrs %>点。魔法衣橱:划船套装(3件中的第1件)。", "armorArmoireBoatingJacketText": "划船夹克", - "armorArmoireNephriteArmorNotes": "这款盔甲由坚固的钢环制成,饰有玉石,可保护您免受拖延!增加<%= str %>点力量和<%= per %>点感知。魔法衣柜:软玉射手套装(3件中的第3件)。", + "armorArmoireNephriteArmorNotes": "这款盔甲由坚固的钢环制成,饰有玉石,可保护您免受拖延!增加<%= str %>点力量和<%= per %>点感知。魔法衣橱:软玉射手套装(3件中的第3件)。", "armorArmoireNephriteArmorText": "软玉盔甲", - "armorMystery201908Notes": "这些腿是用来跳舞的!而这正是他们要做的。没有属性加成。2019年8月订阅赠品。", + "armorMystery201908Notes": "这些腿是用来跳舞的!而这正是他们要做的。没有属性加成。2019年8月订阅者物品。", "armorMystery201908Text": "自由自在的牧神装扮", - "armorMystery201907Notes": "即使在最热的夏天,也保持酷,看起来酷。没有属性加成。2019 年 7 月订阅赠品。", + "armorMystery201907Notes": "即使在最热的夏天,也保持酷,看起来酷。没有属性加成。2019 年 7 月订阅者物品。", "armorMystery201907Text": "花花衬衫", - "armorMystery201906Notes": "我们这次就饶了你,不讲“鱼蠢”这种谐音梗了。哦,等等,哎呀。没有属性加成。2019年6月订阅赠品。", + "armorMystery201906Notes": "我们这次就饶了你,不讲“鱼蠢”这种谐音梗了。哦,等等,哎呀。没有属性加成。2019年6月订阅者物品。", "headSpecialSummer2019HealerNotes": "这个贝壳的螺旋结构将帮助你听到七个海域的任何呼救声。增加<%= int%>点智力。2019夏季限量版装备。", "headSpecialSummer2019HealerText": "海螺王冠", "headSpecialSummer2019MageNotes": "与流行的看法相反,你的头不适合青蛙栖息。增加<%= per%>点感知。2019年夏季限量版装备。", @@ -1873,30 +1873,30 @@ "headArmoireNephriteHelmText": "绿玉帽子", "headArmoireTricornHatNotes": "成为一个革命性的开玩笑者! 增加<%= per %>点感知。魔法衣橱:独立物品。", "headArmoireTricornHatText": "三角帽", - "headMystery201907Notes": "没有什么说“我在这里放松!”就像一个向后的帽子。 没有属性加成。 2019年7月订户项目。", + "headMystery201907Notes": "没有什么说“我在这里放松!”就像一个向后的帽子。 没有属性加成。 2019年7月订阅者物品。", "headMystery201907Text": "向后箭", - "headMystery201904Notes": "这个圆圈中的蛋白石闪耀着彩虹的每一种颜色,赋予它各种神奇的属性。没有属性加成。 2019年4月订户项目。", + "headMystery201904Notes": "这个圆圈中的蛋白石闪耀着彩虹的每一种颜色,赋予它各种神奇的属性。没有属性加成。 2019年4月订阅者物品。", "headMystery201904Text": "华丽的蛋白石圆环", "headMystery201903Text": "头盔上金灿灿的部分", "headAccessoryMystery201905Text": "耀眼的龙角", - "backMystery201905Notes": "凭借这些彩虹色的翅膀飞向未知领域。没有属性加成。 2019年5月订阅赠品。", + "backMystery201905Notes": "凭借这些彩虹色的翅膀飞向未知领域。没有属性加成。 2019年5月订阅者物品。", "shieldArmoirePolishedPocketwatchNotes": "你获得了时间。而且你戴着它很好看。增加<%= int %>点智力。魔法衣橱:独立物品。", "shieldArmoirePolishedPocketwatchText": "抛光怀表", "shieldArmoireTrustyUmbrellaNotes": "神秘事故往往伴随着恶劣的天气,所以要做好准备!增加<%= int %>点智力。魔法衣橱:侦探集(4件中的第4件)。", "shieldArmoireTrustyUmbrellaText": "值得信赖的雨伞", "shieldSpecialSummer2019MageNotes": "在夏日的阳光下出汗?没有!进行简单的元素召唤以填充百合池塘。增加<%= per %>点感知。2019夏季限量版装备。", "shieldSpecialSummer2019MageText": "纯净水滴", - "headMystery201903Notes": "有些人可能会称你为蛋头,但这没关系,因为你知道如何服用蛋黄。没有属性加成。 2019年3月订阅赠品。", + "headMystery201903Notes": "有些人可能会称你为蛋头,但这没关系,因为你知道如何服用蛋黄。没有属性加成。 2019年3月订阅者物品。", "eyewearSpecialGreenHalfMoonText": "绿色半月形眼镜", "eyewearSpecialBlueHalfMoonNotes": "带有蓝色镜框和月牙形镜片的眼镜。没有属性加成。", "eyewearSpecialBlueHalfMoonText": "蓝色半月形眼镜", "eyewearSpecialBlackHalfMoonNotes": "黑色镜框和月牙形镜片的眼镜。没有属性加成。", "eyewearSpecialBlackHalfMoonText": "黑色半月形眼镜", - "headAccessoryMystery201908Notes": "如果戴牛角使您的山羊飘浮,那您真幸运!没有属性加成。 2019年8月订阅赠品。", + "headAccessoryMystery201908Notes": "如果戴牛角使您的山羊飘浮,那您真幸运!没有属性加成。 2019年8月订阅者物品。", "headAccessoryMystery201908Text": "自由牧神角", - "headAccessoryMystery201906Notes": "传说,这些细腻的耳朵可以帮助人鱼听到深海所有居民的呼唤和歌曲!没有属性加成。 2019年6月的订阅赠品。", + "headAccessoryMystery201906Notes": "传说,这些细腻的耳朵可以帮助人鱼听到深海所有居民的呼唤和歌曲!没有属性加成。 2019年6月订阅者物品。", "headAccessoryMystery201906Text": "和蔼可亲的锦鲤耳朵", - "headAccessoryMystery201905Notes": "这些角像闪闪发光一样尖锐。没有属性加成。 2019年5月的订阅赠品。", + "headAccessoryMystery201905Notes": "这些角像闪闪发光一样尖锐。没有属性加成。 2019年5月订阅者物品。", "eyewearSpecialYellowHalfMoonNotes": "黄色镜框和月牙形镜片的眼镜。没有属性加成。", "eyewearSpecialYellowHalfMoonText": "黄色半月形眼镜", "eyewearSpecialWhiteHalfMoonNotes": "带有白色镜架和月牙形镜片的眼镜。没有属性加成。", @@ -1928,11 +1928,11 @@ "weaponArmoireShadowMastersMaceText": "暗影大师的权杖", "armorSpecialFall2019MageText": "波吕斐摩斯的罩衫", "armorMystery201910Text": "隐秘的护甲", - "armorMystery201909Notes": "你的强硬的外壳会保护你,可是你还应该留意松鼠... 没有属性加成。2019 年 9 月订阅赠品。", + "armorMystery201909Notes": "你的强硬的外壳会保护你,可是你还应该留意松鼠... 没有属性加成。2019 年 9 月订阅者物品。", "armorMystery201909Text": "友好的橡子护甲", "armorSpecialFall2019MageNotes": "它的同名遇到一个悲惨的结果。但是,你不会这么容易被骗!带了这个传奇的罩衫,没人会超过你。增加<%= int %>点体质。2019年秋季限定装备。", "eyewearSpecialKS2019Text": "神话狮鹫面罩", - "armorMystery201910Notes": "这个隐秘的护甲上刀山下火海,无所不能地保护你。没有属性加成。2019 年 10 月订阅赠品。", + "armorMystery201910Notes": "这个隐秘的护甲上刀山下火海,无所不能地保护你。没有属性加成。2019 年 10 月订阅者物品。", "armorSpecialFall2019RogueNotes": "这套衣服配有白手套,非常适合在剧院私人套间中沉思,或在宏伟的楼梯出现时让人诧异。增加<%= per %>点感知。2019年秋季限定装备。", "armorSpecialFall2019RogueText": "歌剧外套", "weaponArmoireAlchemistsDistillerNotes": "用这个光亮铜管仪器净化铁和别的神奇化合物。增加<%= str %>点力量和<%= int %>点智力。魔法衣橱:炼金术士套装(4件中的第3件)。", @@ -1940,7 +1940,7 @@ "headArmoireAlchemistsHatText": "炼金术士的帽子", "armorArmoireAlchemistsRobeText": "炼金术士的披肩", "weaponArmoireAlchemistsDistillerText": "炼金术士的蒸馏器", - "weaponMystery201911Notes": "这个法杖的水晶球可以让你看到前程,但你必须小心!用这么危险的知识会出乎意料地改变一个人。没有属性加成。2019年11月捐赠者物品。", + "weaponMystery201911Notes": "这个法杖的水晶球可以让你看到前程,但你必须小心!用这么危险的知识会出乎意料地改变一个人。没有属性加成。2019年11月订阅者物品。", "weaponMystery201911Text": "神奇水晶法杖", "shieldArmoireMasteredShadowNotes": "你的法力已将这些漩涡状的暗影带到你的身边进行投标。增加感知和体质各<%= attrs %>点。魔法衣橱:暗影大师套装(4件中的第4件)。", "headArmoireShadowMastersHoodNotes": "这个头罩让你在最暗的地方看得清。但是,你可能需要眼药水。增加感知和体质各<%= attrs %>点。魔法衣橱:暗影大师套装(4件中的第2件)。", @@ -1956,7 +1956,7 @@ "armorArmoireAlchemistsRobeNotes": "做神奇的铁或者砖石需要强烈的药水、可能有意料之外的副作用。这个披肩会保护你。增加<%= con %>点体质和<%= per %>点感知。魔法衣橱:炼金术士套装(4件中的第1件)。", "eyewearSpecialFall2019HealerNotes": "用这个难以辨认的面具坚决抵抗最艰难的敌人。没有属性加成。2019年秋季限量版装备。", "eyewearSpecialFall2019HealerText": "暗面具", - "backMystery201912Notes": "用这双冰冷的翅膀默默地飞过闪闪发光的雪原和雪山。没有属性加成。 2019年12月订阅赠品。", + "backMystery201912Notes": "用这双冰冷的翅膀默默地飞过闪闪发光的雪原和雪山。没有属性加成。 2019年12月订阅者物品。", "backMystery201912Text": "极地精灵翅膀", "shieldArmoireAlchemistsScaleNotes": "确保使用正确地仪器和精密地测量此神秘成分。增加<%= int %>点智力。魔法衣橱:炼金术士套装(4件中的第4件)。", "shieldArmoireMasteredShadowText": "掌握到的暗影", @@ -1967,13 +1967,13 @@ "headArmoireEarflapHatText": "耳罩帽", "headArmoireEarflapHatNotes": "如果你想保持头部的温暖,可以戴上这顶帽子!增加智力和力量各<%= attrs %>点。魔法衣橱:风衣套装(2件中的第2件)。", "headArmoireAlchemistsHatNotes": "虽然帽子并不是炼金术中必不可少的元素,但酷的装扮的确不会伤害任何东西!增加<%= per %>点感知。 魔法衣橱:炼金术士套装(4件中的第2件)。", - "headMystery201912Notes": "无论你飞得多高,这片闪闪发光的雪花都能使您抵抗刺骨的寒冷!没有属性加成。2019年12月订户项目。", + "headMystery201912Notes": "无论你飞得多高,这片闪闪发光的雪花都能使您抵抗刺骨的寒冷!没有属性加成。2019年12月订阅者物品。", "headMystery201912Text": "极地精灵冠", - "headMystery201911Notes": "这顶帽子上的每个水晶点都赋予你一种特殊的能力:神秘的千里眼,神奇的智慧和... 板极的旋转? 那好吧。没有属性加成。2019年11月订户项目。", + "headMystery201911Notes": "这顶帽子上的每个水晶点都赋予你一种特殊的能力:神秘的千里眼,神奇的智慧和... 板极的旋转? 那好吧。没有属性加成。2019年11月订阅者物品。", "headMystery201911Text": "神奇水晶帽子", - "headMystery201910Notes": "这些火焰在你眼前揭示了奥秘的秘密!没有属性加成。 2019年10月订户项目。", + "headMystery201910Notes": "这些火焰在你眼前揭示了奥秘的秘密!没有属性加成。 2019年10月订阅者物品。", "headMystery201910Text": "隐秘火焰", - "headMystery201909Notes": "每个橡子需要戴帽子!呃,吸盘,如果你想了解它的技术。没有属性加成。 2019年9月订户项目。", + "headMystery201909Notes": "每个橡子需要戴帽子!呃,吸盘,如果你想了解它的技术。没有属性加成。 2019年9月订阅者物品。", "headSpecialFall2019HealerNotes": "戴这个黑暗礼冠利用可怕的巫妖的力量。增加<%= int %>点智力。2019秋季限量版装备。", "headMystery201909Text": "可爱的橡子帽", "headSpecialFall2019HealerText": "黑暗礼冠", @@ -2012,9 +2012,9 @@ "weaponSpecialWinter2020WarriorText": "尖尖的针叶树锥", "weaponSpecialWinter2020RogueNotes": "黑暗是盗贼的元素。那么,谁能更好地在一年中最黑暗的时间点亮路呢?增加<%= str %>点力量。2019-2020冬季限量版装备。", "weaponSpecialWinter2020RogueText": "灯笼杆", - "backMystery202001Notes": "这些蓬松的尾巴有天体的力量,还有很高的可爱度!没有属性加成。2020年1月订阅赠品。", + "backMystery202001Notes": "这些蓬松的尾巴有天体的力量,还有很高的可爱度!没有属性加成。2020年1月订阅者物品。", "backMystery202001Text": "寓言的五个尾巴", - "headMystery202001Notes": "你的听力会听力会这么敏锐,你会听到星星的闪烁和月亮的旋转。没有属性加成。2020年1月订户项目。", + "headMystery202001Notes": "你的听力会听力会这么敏锐,你会听到星星的闪烁和月亮的旋转。没有属性加成。2020年1月订阅者物品。", "headMystery202001Text": "寓言的狐狸耳朵", "headSpecialNye2019Text": "古怪的派对帽子", "headSpecialNye2019Notes": "你收到了一顶古怪的派对帽子!当新年钟声响起时,自豪地戴上这顶帽子吧!没有属性加成。", diff --git a/website/common/locales/zh/limited.json b/website/common/locales/zh/limited.json index 8fe65f211a..9cc04f1608 100644 --- a/website/common/locales/zh/limited.json +++ b/website/common/locales/zh/limited.json @@ -60,80 +60,80 @@ "nye1": "新年快乐! 愿你收获很多的奖励。", "nye2": "新年快乐! 愿你拥有很多完美日。", "nye3": "新年快乐! 愿你的待办列表永远简短而甜蜜。", - "nye4": "新年快乐! 但愿你别被暴怒的河马狮鹫攻击。", - "holidayCard": "收到一封节日贺卡!", - "mightyBunnySet": "强力兔(战士)", - "magicMouseSet": "魔力鼠(法师)", - "lovingPupSet": "可爱犬(医师)", - "stealthyKittySet": "偷盗猫(盗贼)", - "daringSwashbucklerSet": "无畏侠盗(战士)", - "emeraldMermageSet": "绿宝石人鱼法师(法师)", - "reefSeahealerSet": "暗礁海洋医师(医师)", - "roguishPirateSet": "流浪海盗(盗贼)", - "monsterOfScienceSet": "科学怪人(战士)", - "witchyWizardSet": "怪异巫师(法师)", - "mummyMedicSet": "木乃伊医师(医师)", - "vampireSmiterSet": "吸血重击者(盗贼)", - "bewareDogSet": "警惕犬(战士)", - "magicianBunnySet": "魔术师的兔子(法师)", - "comfortingKittySet": "抚慰小猫(医者)", - "sneakySqueakerSet": "霹雳鼠(盗贼)", - "sunfishWarriorSet": "翻车鱼战士(战士)", - "shipSoothsayerSet": "船上预言者(法师)", - "strappingSailorSet": "魁梧的水手(医师)", - "reefRenegadeSet": "珊瑚礁的叛徒(盗贼)", - "scarecrowWarriorSet": "稻草人战士(战士)", - "stitchWitchSet": "缝纫巫师(法师)", - "potionerSet": "制药医者(医师)", - "battleRogueSet": "战-斗 盗贼 (盗贼)", - "springingBunnySet": "春之兔(医师)", + "nye4": "新年快乐!但愿你别被暴怒的河马狮鹫攻击。", + "holidayCard": "收到一封节日贺卡!", + "mightyBunnySet": "强力兔(战士)", + "magicMouseSet": "魔力鼠(法师)", + "lovingPupSet": "可爱犬(医师)", + "stealthyKittySet": "偷盗猫(盗贼)", + "daringSwashbucklerSet": "无畏侠盗(战士)", + "emeraldMermageSet": "绿宝石人鱼法师(法师)", + "reefSeahealerSet": "暗礁海洋医师(医师)", + "roguishPirateSet": "流浪海盗(盗贼)", + "monsterOfScienceSet": "科学怪人(战士)", + "witchyWizardSet": "怪异巫师(法师)", + "mummyMedicSet": "木乃伊医师(医师)", + "vampireSmiterSet": "吸血重击者(盗贼)", + "bewareDogSet": "警惕犬(战士)", + "magicianBunnySet": "魔术师的兔子(法师)", + "comfortingKittySet": "抚慰小猫(医者)", + "sneakySqueakerSet": "霹雳鼠(盗贼)", + "sunfishWarriorSet": "翻车鱼战士(战士)", + "shipSoothsayerSet": "船上预言者(法师)", + "strappingSailorSet": "魁梧的水手(医师)", + "reefRenegadeSet": "珊瑚礁的叛徒(盗贼)", + "scarecrowWarriorSet": "稻草人战士(战士)", + "stitchWitchSet": "缝纫巫师(法师)", + "potionerSet": "制药医者(医师)", + "battleRogueSet": "战-斗盗贼(盗贼)", + "springingBunnySet": "春之兔(医师)", "grandMalkinSet": "豪华的猫(法师)", - "cleverDogSet": "灵巧的狗 (盗贼)", - "braveMouseSet": "勇敢的鼠(战士)", + "cleverDogSet": "灵巧的狗(盗贼)", + "braveMouseSet": "勇敢的鼠(战士)", "summer2016SharkWarriorSet": "鲨鱼战士(战士)", - "summer2016DolphinMageSet": "海豚法师(法师)", + "summer2016DolphinMageSet": "海豚法师(法师)", "summer2016SeahorseHealerSet": "海马医师(医师)", "summer2016EelSet": "鳗鱼盗贼(盗贼)", - "fall2016SwampThingSet": "沼泽怪物(战士)", - "fall2016WickedSorcererSet": "邪恶巫师(法师)", - "fall2016GorgonHealerSet": "蛇发女妖医师(医师)", - "fall2016BlackWidowSet": "黑寡妇盗贼(盗贼)", - "winter2017IceHockeySet": "冰上曲棍(战士)", - "winter2017WinterWolfSet": "冬狼(法师)", - "winter2017SugarPlumSet": "糖果医师(医师)", - "winter2017FrostyRogueSet": "严霜盗贼(盗贼)", - "spring2017FelineWarriorSet": "猫武士(战士)", - "spring2017CanineConjurorSet": "狗狗魔术师(法师)", - "spring2017FloralMouseSet": "花老鼠(医师)", - "spring2017SneakyBunnySet": "鬼祟兔(盗贼)", + "fall2016SwampThingSet": "沼泽怪物(战士)", + "fall2016WickedSorcererSet": "邪恶巫师(法师)", + "fall2016GorgonHealerSet": "蛇发女妖医师(医师)", + "fall2016BlackWidowSet": "黑寡妇盗贼(盗贼)", + "winter2017IceHockeySet": "冰上曲棍(战士)", + "winter2017WinterWolfSet": "冬狼(法师)", + "winter2017SugarPlumSet": "糖果医师(医师)", + "winter2017FrostyRogueSet": "严霜盗贼(盗贼)", + "spring2017FelineWarriorSet": "猫武士(战士)", + "spring2017CanineConjurorSet": "狗狗魔术师(法师)", + "spring2017FloralMouseSet": "花老鼠(医师)", + "spring2017SneakyBunnySet": "鬼祟兔(盗贼)", "summer2017SandcastleWarriorSet": "沙堡战士(战士)", "summer2017WhirlpoolMageSet": "漩涡法师(法师)", "summer2017SeashellSeahealerSet": "贝壳海洋医师(医师)", "summer2017SeaDragonSet": "海龙(盗贼)", - "fall2017HabitoweenSet": "万圣兔勇士(战士)", - "fall2017MasqueradeSet": "假面舞会法师(法师)", - "fall2017HauntedHouseSet": "鬼屋医师(医师)", - "fall2017TrickOrTreatSet": "捣蛋盗贼(盗贼)", - "winter2018ConfettiSet": "五彩纸屑法师 (法师)", - "winter2018GiftWrappedSet": "被包裝紙包住的战士 (战士)", - "winter2018MistletoeSet": "槲寄生医师 (医师)", - "winter2018ReindeerSet": "驯鹿盗贼 (盗贼)", - "spring2018SunriseWarriorSet": "晨曦战士(战士)", - "spring2018TulipMageSet": "郁金香法师(法师)", - "spring2018GarnetHealerSet": "石榴石医师(医师)", - "spring2018DucklingRogueSet": "小鸭盗贼(盗贼)", + "fall2017HabitoweenSet": "万圣兔勇士(战士)", + "fall2017MasqueradeSet": "假面舞会法师(法师)", + "fall2017HauntedHouseSet": "鬼屋医师(医师)", + "fall2017TrickOrTreatSet": "捣蛋盗贼(盗贼)", + "winter2018ConfettiSet": "五彩纸屑法师(法师)", + "winter2018GiftWrappedSet": "被包裝紙包住的战士(战士)", + "winter2018MistletoeSet": "槲寄生医师(医师)", + "winter2018ReindeerSet": "驯鹿盗贼(盗贼)", + "spring2018SunriseWarriorSet": "晨曦战士(战士)", + "spring2018TulipMageSet": "郁金香法师(法师)", + "spring2018GarnetHealerSet": "石榴石医师(医师)", + "spring2018DucklingRogueSet": "小鸭盗贼(盗贼)", "summer2018BettaFishWarriorSet": "斗鱼战士(战士)", "summer2018LionfishMageSet": "狮子鱼法师(法师)", "summer2018MerfolkMonarchSet": "人鱼王(医师)", "summer2018FisherRogueSet": "渔夫盗贼(盗贼)", - "fall2018MinotaurWarriorSet": "牛头怪(战士)", - "fall2018CandymancerMageSet": "糖果巫师(法师)", - "fall2018CarnivorousPlantSet": "食人花(医师)", - "fall2018AlterEgoSet": "双面人(盗贼)", - "winter2019BlizzardSet": "寒冰战士(战士)", - "winter2019PyrotechnicSet": "烟火法师(法师)", - "winter2019WinterStarSet": "冬夜闪耀(医师)", - "winter2019PoinsettiaSet": "热情似火的圣诞花(盗贼)", + "fall2018MinotaurWarriorSet": "牛头怪(战士)", + "fall2018CandymancerMageSet": "糖果巫师(法师)", + "fall2018CarnivorousPlantSet": "食人花(医师)", + "fall2018AlterEgoSet": "双面人(盗贼)", + "winter2019BlizzardSet": "寒冰战士(战士)", + "winter2019PyrotechnicSet": "烟火法师(法师)", + "winter2019WinterStarSet": "冬夜闪耀(医师)", + "winter2019PoinsettiaSet": "热情似火的圣诞花(盗贼)", "eventAvailability": "在<%= date(locale) %>前可购买。", "dateEndMarch": "4月30日", "dateEndApril": "4月19日", diff --git a/website/common/locales/zh/questscontent.json b/website/common/locales/zh/questscontent.json index c192f67288..d52d9f3a90 100644 --- a/website/common/locales/zh/questscontent.json +++ b/website/common/locales/zh/questscontent.json @@ -289,7 +289,7 @@ "questSnakeDropSnakeEgg": "蛇(宠物蛋)", "questSnakeUnlockText": "在市场中解锁蛇蛋以购买", "questUnicornText": "说服独角兽女王", - "questUnicornNotes": "征服溪流变浑浊了,Habit市的供水系统受到了巨大威胁!幸运的是,@Lukreja 知道一个古老的传说,用一只独角兽的角,再污浊的水也能被净化。你和英勇无畏的向导@UncommonCriminal 一起翻过蜿蜒山脉的冰封山尖,终于白雪皑皑的Habitica山顶找到了站在雪里的独角兽女王。“你的请求让人无法拒绝,“她说,”但是首先,你需要证明你值得我帮助!“", + "questUnicornNotes": "征服溪流变浑浊了,Habit市的供水系统受到了巨大威胁!幸运的是,@Lukreja 知道一个古老的传说,用一只独角兽的角,再污浊的水也能被净化。你和英勇无畏的向导@UncommonCriminal 一起翻过蜿蜒山脉的冰封山尖,终于白雪皑皑的Habitica山顶找到了站在雪里的独角兽女王。“你的请求让人无法拒绝,“她说,”但是首先,你需要证明你值得我帮助!”", "questUnicornCompletion": "独角兽女王被你的优雅和力量打动了,她最终承认了你的要求值得帮助。她让你骑在她背上,驰向征服溪流的源头。在她低下头,将她金色的额独角伸向被污染的溪水时,水面泛起一层耀眼的蓝光,那么明亮,你不得不闭上眼睛,过了一会,当你再睁开双眼,独角兽女王已经不见了,不过,@rosiesully 发出了一声快乐的呼喊:水又变得干净了,还有三只闪亮的蛋静静躺在小溪边。", "questUnicornBoss": "独角兽女王", "questUnicornDropUnicornEgg": "独角兽(宠物蛋)", @@ -378,7 +378,7 @@ "questTaskwoodsTerror1RageEffect": "`火骷髅群使用了骨群重生!`\n\n受到胜利的激励,更多的骸骨从火焰中冲了出来,壮大队伍!", "questTaskwoodsTerror1DropSkeletonPotion": "骷髅孵化药水", "questTaskwoodsTerror1DropRedPotion": "红色孵化药水", - "questTaskwoodsTerror1DropHeadgear": "烈焰术士头巾(头饰)", + "questTaskwoodsTerror1DropHeadgear": "烈焰术士头巾(头饰)", "questTaskwoodsTerror2Text": "恐怖的任务森林,第2部:找到丰收精灵", "questTaskwoodsTerror2Notes": "在与火骷髅群的战斗之后,你在森林的边缘遇到了一大群逃难的农民。“他们的村庄被叛变的秋天精灵烧毁了,”一个熟悉的声音说道,是@Kiwibot,传奇的追踪者!“我已经把难民们都聚集到了这里,但是却没有找到帮助森林里的野生水果生长的丰收精灵的踪迹,你得帮我救救他们!”", "questTaskwoodsTerror2Completion": "你尝试着定位最后的树妖并且引导她远离怪物。当你回到逃难的农夫那里时,你被充满感激的妖精们迎接,他们用闪光魔法和丝绸为你编织了一件长袍。突然,一阵隆隆的回声从树中传出,震动地表。“那一定是叛变的精灵,”快乐的收获者说。“快!”", @@ -391,7 +391,7 @@ "questTaskwoodsTerror3Completion": "一番争斗之后,你看准时机打落了Jacko携带的那个灯笼!里面的晶体被砸碎了!Jacko突然恢复了理智,流下发光的泪水。“哦,我美丽的森林!我做了什么?!”他痛哭着。他的眼泪熄灭了余火,救下了苹果树和野生浆果。

在你让他平静下来之后,他解释说:“我遇见了一个很有魅力的女士,叫Tzina,她给了我这个发光的晶体,作为礼物。在她的催促下,我把它放进我的灯笼……这是我能回忆起的最后一件事。”他金黄色的脑袋转向你微笑着说:“也许在我帮助野生果园重建的时候,你可以保管着它。”", "questTaskwoodsTerror3Boss": "杰克南瓜灯", "questTaskwoodsTerror3DropStrawberry": "草莓(食物)", - "questTaskwoodsTerror3DropWeapon": "任务森林的灯笼(双手武器)", + "questTaskwoodsTerror3DropWeapon": "任务森林的灯笼(双手武器)", "questFerretText": "那恶毒的雪貂", "questFerretNotes": "你正走过习惯城市,突然看到一群不开心的人围着一只穿红色长袍的雪貂。

“你卖给我的生产力药水没用!” @Beffymaroo控诉。”我昨晚看了三小时的电视,而不是做家务!”

“是的!”@Pandah大叫。“而且今天我花了一个小时整理我的书,而不是读它们!”

那恶毒的雪貂无辜地摊开手。”那你们看电视和整理书的时间比平常多了呀~不是吗?”

人群中爆发出了愤怒。

“不!退!钱!”恶毒的雪貂洋洋得意地大叫着。他发射了一束魔法到人群中,准备在烟雾中逃离。

“拜托了!Habitican!”@Faye抓住你的胳膊说。”打败那只雪貂!让他把不诚实的收益还回来!”", "questFerretCompletion": "你击败了软毛的骗子,并且@UncommonCriminal 给了你丰厚的报酬,甚至还有你的一小堆黄金。另外,看起来邪恶的雪貂匆忙逃走时落下了一些蛋!", @@ -407,12 +407,12 @@ "questMoon1Notes": "Habitica居民被一些奇怪的事情分心了:扭曲的石头碎片出现在地面。出于担心,@Starsystemic 先知召唤你去她的塔。她说,“我一直在研读有关这些碎片的预警征兆,这些碎片已经使大地被破坏,使努力的habitica居民分心。我可以追查它们的源头,但首先我需要研究那些碎片。你能给我捡些碎片来吗?”", "questMoon1Completion": "@Starsystemic 进入她的塔楼研究你得到的碎片。“这也许比我们担心的更复杂” @Beffymaroo,她信任的助手说。“找到原因还需要一些时间,继续完成你的每日任务,我们了解更多后会寄给你下一个副本卷轴。”", "questMoon1CollectShards": "月之碎片", - "questMoon1DropHeadgear": "月亮战士头盔(头部装备)", + "questMoon1DropHeadgear": "月亮战士头盔(头部装备)", "questMoon2Text": "月亮战争,第2部:驱逐遮天蔽日的压力", "questMoon2Notes": "研究了这些碎片后,@Starsystemic 先知有一些坏消息。“一只远古时的怪物正在接近Habitica,它正在让公民心中产生“压力”的阴影。我可以把人们心中的阴影拖出来,放到塔中,但你得尽快打败它,避免它再次逃脱。”你点点头,于是先知开始咏唱……舞动的影子充满房间,被推着挤在一起。冷风打着旋,黑暗渐深。遮天蔽日的压力从地面上升起,笑得仿佛噩梦成真……它开始攻击了!", "questMoon2Completion": "阴影在一团黑气中爆炸了,房间变得明亮,你也稍稍可以放松了。覆盖着Habitica的压力减少了,你终于可以大松一口气。但看向天空时,你知道一切并没有结束:那个怪物知道有人摧毁了它的阴影。“我们会继续小心观察几周,”@Starsystemic 说,“等怪物再有动静,会继续给你副本卷轴的。”", "questMoon2Boss": "遮天蔽日的压力", - "questMoon2DropArmor": "月亮战士护甲(护甲)", + "questMoon2DropArmor": "月亮战士护甲(护甲)", "questMoon3Text": "月亮战争,第3部:巨大的月亮", "questMoon3Notes": "在午夜钟声敲响的时候,你得到@Starsystemic 的紧急卷轴,于是飞奔到她的塔。“怪物正试图利用满月跨越到我们的地带,”她说。“如果成功了,压力的冲击波将势不可挡!”

你正焦急时,看到怪物事实上是利用月亮来显化的。一个发光的眼睛在岩石表面打开,一条长长的舌头从一个张开的布满尖牙的口里卷着出来。你绝对不能让它完全显形!", "questMoon3Completion": "新兴的怪物匆匆躲回阴影,月亮变成银色昭示着危险已经过去。龙群再次开始吟唱,星星闪烁柔和的光。@Starsystemic 先知弯腰捡起一片月球碎片。它闪耀着银光在她的手中变成华丽的水晶镰。", @@ -445,14 +445,14 @@ "questStoikalmCalamity2Notes": "庄严的猛犸骑士厅是座一丝不苟的建筑杰作,但它现在却完全是空荡荡的。这里没有家具,看不到武器,甚至柱子里镶嵌的装饰也不见了。

“那些骷髅强盗洗劫了这里,”冰川夫人开口,语气中仿佛酝酿着暴雪。“太丢人了!谁都不许把这事告诉愚者,否则我不会对他善罢甘休的。”

“不可思议!”@Beffymaroo 也说着。“不过它们在哪儿——”

“灞波儿奔的大洞穴里。”冰川夫人指着厅外的雪地,一些闪烁着的硬币还没完全被雪掩埋。“麻痹大意。”

“但灞波儿奔们不是很注重他们的名声吗?而且他们有自己的宝库啊!”@Beffymaroo 还有疑问。“他们怎么可能——”

“精神控制,”冰川夫人打断了他的话,“或者其它差不多的耸人听闻的麻烦东西。”她开始大步离开大厅。“杵在那愣着干嘛?”

快,跟上那些冰凌硬币!", "questStoikalmCalamity2Completion": "冰凌硬币直接把你带到了一个被巧妙隐藏的地下洞穴入口。虽然外面的天气平静而可爱,阳光照在茫茫的雪地上,这里却仍有一股严冬的风在呼啸。冰川夫人面露厌恶,并给了你一个巨大的骑士头盔。“戴上这个,”她说,“你需要它。”", "questStoikalmCalamity2CollectIcicleCoins": "寒冰硬币", - "questStoikalmCalamity2DropHeadgear": "猛犸骑士盔(头部装备)", + "questStoikalmCalamity2DropHeadgear": "猛犸骑士盔(头部装备)", "questStoikalmCalamity3Text": "Stoïkalm灾难,第3部:灞波儿奔地震", "questStoikalmCalamity3Notes": "灞波儿奔洞里,弯曲交错的隧道闪烁着冰霜的微光……和无法描述的金银珠宝的光芒。你目瞪口呆,但冰川夫人大步走过,吝予一瞥。“过于浮华。”她说,“不管是从可敬的受雇打工还是从谨慎的银行投资得到这些,都是令人钦佩的。但你再往前看看。”你眯起眼睛,看到了阴暗角落里堆成塔的赃物。

当你靠近时,一个嘶嘶的声音响起。“我美味的宝藏!你们不能把它从我这里偷回去!”一个盘曲的身体从那堆财宝上滑下:是灞波儿奔女王本人!在她发出震动你周身地面的巨吼之前,你只来得及看到她手腕上闪烁的奇怪手镯,和眼里的野蛮凶光。", "questStoikalmCalamity3Completion": "你制住了灞波儿奔女王,使冰川夫人来得及将那发光的手镯打碎。那位女王在明显的羞愧下不自在起来,然后马上换上了一副傲慢的姿态。“尽管把这些不相干的东西带走吧,”她说。“我想它们实在是不适合我们这里的布置。”

“喂,那是你偷来的,”@Beffymaroo 步步紧逼,“你从大地中召唤来了怪物。”

灞波儿奔女王看起来恼羞成怒了:“那得算在卖给我这垃圾手镯的女售货员头上,Tzina才是你要找的人。我跟她完全不是一伙的。”

冰川夫人拍了拍你的肩膀说:“干得不错。”她从那堆东西里拿了一把长矛和一只角给你:“感到自豪吧。”", "questStoikalmCalamity3Boss": "灞波儿奔女王", - "questStoikalmCalamity3DropBlueCottonCandy": "蓝色棉花糖(食物)", - "questStoikalmCalamity3DropShield": "猛犸骑士角(副手装备)", - "questStoikalmCalamity3DropWeapon": "猛犸骑士矛(武器装备)", + "questStoikalmCalamity3DropBlueCottonCandy": "蓝色棉花糖(食物)", + "questStoikalmCalamity3DropShield": "猛犸骑士角(副手装备)", + "questStoikalmCalamity3DropWeapon": "猛犸骑士矛(武器装备)", "questGuineaPigText": "豚鼠团伙", "questGuineaPigNotes": "当 @Pandah 挥手叫你的时候,你正在 Habit 城里有名的市场中漫步 。“嘿,看看这些东西!”他们举起你从未见过的棕色和米色的蛋。

商人亚历山大对此皱起了眉头。“我不记得我拿出了它们。我想知道这些是从哪里——”一只小爪子打断了他的话。

“交出你所有的金币,商人!”吱吱叫的充满了邪恶的声音响起。

“噢不,这些蛋裂开了!”@mewrose 惊呼道。“这是顽固的,贪婪的豚鼠团伙!它们从来不做每日任务,所以他们时不时的窃取金币来购买治疗药水。”

“抢劫市场?”@emmavig 问道。“不要呆在我们的手表上!”不远处呼喊道,你急忙飞跑过去帮助亚历山大。", "questGuineaPigCompletion": "\"我们认输啦!\"豚鼠头目向你挥舞着爪子,毛茸茸的脑袋羞愧低垂。从豚鼠头目的帽子掉落了一份清单,@snazzyorange迅速扒走做为证据。\"等一下,\"你说。\"难怪你已经受伤了!你的每日任务太多了。你不需要治疗药水──你只需要帮忙组织整理。\"

\"真的吗?\"豚鼠头目吱吱道。\"我们就为了这个抢了那麽多人! 作为我们不当行径的道歉,请拿些我们的蛋吧。\"", @@ -481,21 +481,21 @@ "questMayhemMistiflying1RageEffect": "空中骷髅群使用了骨群重生!\n\n受到胜利的激励,更多的骷髅回旋于天空!", "questMayhemMistiflying1DropSkeletonPotion": "骷髅孵化药水", "questMayhemMistiflying1DropWhitePotion": "白色孵化药水", - "questMayhemMistiflying1DropArmor": "俏皮彩虹信使长袍(护甲)", + "questMayhemMistiflying1DropArmor": "俏皮彩虹信使长袍(护甲)", "questMayhemMistiflying2Text": "Misti飞城的混乱,第2部:疾风更盛", "questMayhemMistiflying2Notes": "Misti飞城起伏翻滚着,因为令这座城漂浮着的魔法蜜蜂们被暴风疯狂地拍打。在一通不顾一切地寻找之后,你发现愚者在一间小屋里,漫不经心地和一只被五花大绑的、气愤的骷髅头打牌。

@Katy133 高声盖过狂风的呼啸大喊着问:“怎么回事?我们打败了骷髅,但是更糟糕了!”

“那可麻烦了,”愚者赞同道,“拜托你们当个好人,别跟冰川夫人提这事。她总是威胁要不喜欢我了,因为我是个‘灾难性地不负责任’的家伙,现在这状况我怕她误会。”他一边洗牌,一边回答:“也许你们可以跟着Misti蝴蝶?它们是无实体的,所以狂风吹不走它们,而且它们趋于一窝蜂涌向威胁。”他向窗外点点头,这座城的一些守护神在那边正飞向东方。“现在我要认真打牌了——我的对手可顶着张扑克脸在玩牌呐。”", "questMayhemMistiflying2Completion": "你跟着Misti蝴蝶进来到了风暴眼,可是风太大了,你无法冲进去。

“这个有用,”一个声音在你耳中响起,你差点从坐骑上摔下来。愚者不知怎么的坐在你背后的一截马鞍上。“我听说信使兜帽会放射光环,在恶劣天气下提供保护——非常有用,能避免飞来飞去的时候弄丢信件。来试试?”", "questMayhemMistiflying2CollectRedMistiflies": "红色Misti蝴蝶", "questMayhemMistiflying2CollectBlueMistiflies": "蓝色Misti蝴蝶", "questMayhemMistiflying2CollectGreenMistiflies": "绿色Misti蝴蝶", - "questMayhemMistiflying2DropHeadgear": "俏皮彩虹信使兜帽(头盔)", + "questMayhemMistiflying2DropHeadgear": "俏皮彩虹信使兜帽(头盔)", "questMayhemMistiflying3Text": "Misti飞城的混乱,第3部:粗鲁的邮递员", "questMayhemMistiflying3Notes": "Misti蝴蝶群在龙卷风密密麻麻地飞速旋转,难以看清。你眯着眼睛,发现一个多翼的影子漂浮在这巨大风暴的中心。

“噢,天哪,”愚者叹息着,声音几乎被暴风的呼啸淹没了。“看来是小风在那,并且陷入了疯狂。这是个很像回事的问题,可能发生在任何人身上。”

“乘风者!”@Beffymaroo 朝你喊道,“他是 Misti飞城最有天赋的信使法师,他对天气魔法非常熟练。平常他是个很有礼貌的邮递员!”

好象为了反对这个评价,乘风者发出了一声愤怒的尖叫,即使你穿着魔法袍,风暴也几乎把你从坐骑上刮下来。”

“那个花哨的面具是新的,”愚者说道,“也许你应该把它摘下来?”

这是个好主意……但是不来一场战斗的话,这位愤怒的法师不会取下它的。", "questMayhemMistiflying3Completion": "就在你认为你再也经受不住风的时候,你设法从乘风者的脸上摘下了面具。顿时,龙卷风被吸走,只留下温和的微风和阳光。乘风者困惑地四处张望。“她去哪儿了?”

“谁?”你的朋友@khdarkwolf 问道。

“那个可爱的女人Tzina,她主动说要帮我送一个包裹。”当他看到下方被风横扫过的城市时,他的表情变得黯然。“那么,也许她不那么可爱……”

愚者拍了拍他的背,然后递给你两个闪闪发光的信封。“嘿。你为什么不让这个苦恼的家伙休息一下,你来负责送一点邮件呢?我听说这些信封里的魔法会值得你这么做的。”", "questMayhemMistiflying3Boss": "乘风者", - "questMayhemMistiflying3DropPinkCottonCandy": "粉色棉花糖(食物)", - "questMayhemMistiflying3DropShield": "俏皮彩虹信使的信件(副手装备)", - "questMayhemMistiflying3DropWeapon": "俏皮彩虹信使的信件(主要装备)", + "questMayhemMistiflying3DropPinkCottonCandy": "粉色棉花糖(食物)", + "questMayhemMistiflying3DropShield": "俏皮彩虹信使的信件(副手装备)", + "questMayhemMistiflying3DropWeapon": "俏皮彩虹信使的信件(主要装备)", "featheredFriendsText": "“生有羽翼”副本集", "featheredFriendsNotes": "包括‘救命!哈耳庇厄!’,‘暗夜猫头鹰’,‘掠食明天之鸟’,5月31日之前可购买。", "questNudibranchText": "NowDo海兔的侵袭", @@ -528,7 +528,7 @@ "questLostMasterclasser2Notes": "快乐收割者用她细瘦的手指敲着你借来的书。“哦,亲爱的,”这位医者大师说。“考虑到这些骚乱中都有苏生的骷髅在进行攻击,我猜是某种邪恶的生命本质作祟。”她的助手@tricksy.fox 搬来一个箱子,你看到@beffymaroo 拿出的东西后吃了一惊:竟然和神秘的Tzina用来对人下恶咒的东西一模一样。

“我要放个共鸣治愈术让这家伙显形,”快乐收割者说,你才想起他“骨子”里是个天马行空的医者。“你得把一会儿显现的信息快速读取出来,以免它们散佚掉。”

当她集中注意力,开始从书中抽取蜿蜒的迷雾萦绕在法器周围。很快,你翻阅着书页,试着阅读一行行新写入眼前的文字。你只跟上了几个片段:“浪费时间之沙”——“巨大灾难”——“分裂成4部分”——“永远被侵蚀”——然后你的视线被一个名字吸引了:Zinnya。

突然,书页扭动着从你的指尖挣脱而且撕碎了它们自己,形成了一个膨胀着、咆哮着的生物,聚集在这些被附灵的物品上。

“这是逃避者!”快乐收割者大喊道,甩出一道守护咒。“它们是混乱无明的古老生物。如果Tzina能控制它,她肯定对生命魔法有吓人的掌控力。快点,在它钻进书本逃掉之前打败它!”", "questLostMasterclasser2Completion": "逃避者最终溃散了,你把读到的片段告诉大家。

“就算是我这么老的人,对你提到的事情也没有一件听起来耳熟,”快乐收割者说,“除了……浪费时间是一个地处Habitica环境最恶劣的边缘地带的遥远沙漠。传送阵在那附近总是失效,但迅捷的坐骑能让你飞快到达。冰川夫人会乐意帮忙的。”她调皮地上扬了语调:“也就是说那位被迷倒了的盗贼大师毫无疑问也会跟去的。”她递给你一副闪光的面具。“也许你该循着这些物品上残留的魔法痕迹去追溯源头。我去为你的旅途收割点食粮。”", "questLostMasterclasser2Boss": "逃避者", - "questLostMasterclasser2DropEyewear": "以太面具(眼镜)", + "questLostMasterclasser2DropEyewear": "以太面具(眼镜)", "questLostMasterclasser3Text": "大师鉴别者的秘密,第3部:黄沙掩埋的城市", "questLostMasterclasser3Notes": "当夜幕降临于灼热的浪费时间沙漠上时,你的向导@AnnDeLune、@Kiwibot 和@Katy133 引你前行。几座褪色的石柱伫立在阴影中的沙丘上,随着你接近它们,一阵奇怪的滑行声回响在这片似乎废弃多时的广场上。

“隐形生物!”愚者毫不掩饰他虎视眈眈的样子,“哦嚯!想象一下这种可能性:这肯定是个鬼鬼祟祟的盗贼所为。”

“一个有可能盯着咱们的盗贼,”冰川夫人跳下坐骑,扬起长矛,“如果要正面打一架的话,尽量别激怒敌人。我可不想重蹈火山那时候的覆辙。”

愚者冲她粲然一笑,说:“但那是你最辉煌的营救行动之一。”

听到这句恭维,冰川夫人颊上竟然泛起些许绯红,你为此小小的惊讶了一下。她匆忙噔噔地跑去检查这片遗迹。

“看上去像古城的残骸,”@AnnDeLune 说,“我想知道……”

她还来不及说完话,一个传送阵咆哮着出现在天空中。这片地方不是说魔法在这不灵的吗?隐形动物蹄声雷动,四散奔逃,你却在铺天盖地的嘶叫着的骷髅潮涌面前稳住了身形。", "questLostMasterclasser3Completion": "愚者用喷沙大法给最后一个骷髅来了个惊喜,那骷髅朝后一躲正撞上冰川夫人的长矛,立刻被搅得粉碎。你喘了口气,仰望天空,看到某人的轮廓在徐徐关闭的传送阵彼端一闪而过。心念电转,你从那一箱被恶灵附过的东西里夺过护身符,并且非常确定,它指引向那个看不清的家伙。无视了冰川夫人和愚者的大喊和警告,你蹭在传送阵关闭前跳了过去,坠入漆黑无物的狭间。", @@ -544,13 +544,13 @@ "questLostMasterclasser3DropZombiePotion": "僵尸孵化药水", "questLostMasterclasser4Text": "大师鉴别者的秘密,第4部:迷失的大师鉴别者", "questLostMasterclasser4Notes": "你浮出传送阵的表面,但你仍然悬浮在一个奇怪的、变幻莫测的幽冥空间中。“好大的胆子,”一个冷酷的声音响起,“我得承认,我的计划里此前没有当面对峙这项。”一个女人从翻腾的漩涡中升起。“欢迎来到虚空领域。”

你拼命忍住一阵反胃呕吐的感觉。“你就是Zinnya?”你问她。

“一个年轻的理想主义者的曾用名,”她答道,撇了撇嘴,世界在你们下方痛苦地扭曲着,“我并不是。如果非得扯上点关系的话,你应该叫现在的我Zinnya的反对者,Anti’zinnya(Tzina),鉴于我的所作所为和还没来及做的一切。”

传送阵突然在你身后重新开启,并且把4位大师鉴别者在你面前甩了出来。Anti’zinnya的双眼闪着仇恨的光芒。“我看到我那些可怜的替代品们竟然跟着你来了。”

你盯着她问道:“替代品?”

“作为大师级的以太术士,我曾是第一位大师鉴别者——也是唯一的大师鉴别者。这4个人充其量算拙劣的模仿者,他们每个人只有我曾拥有的力量的一点零碎!我能够调遣一切咒语,也学过任何一种技能。你们因我心血来潮的创世造物而存在,直到力量背叛了我,以太因无法承受我的才华,以及我完美而合理的愿景之重而崩溃。我在此间被困千年,制造虚空,逐渐康复。想象一下当我知道我遗落世间的才学被玷污时那恶心的心情吧。”她疯狂地大笑,笑声在这诡异的空间中回响。“我的计划是在毁灭他们之前先毁灭他们的领地,但现在我觉得顺序也无关紧要了。”迸发出不可思议之力的同时,她冲上前来,整个虚空领域爆裂成一片混乱。", - "questLostMasterclasser4Completion": "在你的猛攻之下,迷失的大师鉴别者发出了充满挫败感的哀嚎,她的身形摇曳闪烁着变成了半透明状。像鞭子一样猛烈抽打着一切的虚空仍然环绕在跌落的她周围,然而刹那之后,她的存在发生了变化。她变成了更年轻、冷静、脸上浮现出平静表情的样子……然后,一切都悄无声息地消散了,你又一次跪倒在沙漠的沙地上。

“看来咱们对自己的历史有很多要去了解的啊。”魟鱼国王凝视着残破的废墟,“在以太术士大师被自己的能力压垮而失去控制之后,倾盆而出的空虚肯定让整片大陆生灵涂炭了。可能一切都变成了像这样的沙漠。”

“难怪建立Habitica的祖先们一再强调要保持生产力和健康的平衡,”快乐收割者低声说,“想想重建世界那么重的任务足以使人望而却步了,但他们也曾想避免这种天灾人祸再次发生。”

“哦嚯,看看这些恶灵附过的东西!”愚者说。显然,在你让Anti’zinnya的亡灵得以安息时,这些装备沾最后一阵以太爆发的光,变成了影影绰绰的半透明质,闪着苍白的光芒。“真是令人眼花缭乱的效果,我得把这些记录下来。”

“也许此地的动物能隐形也是因为残存的以太凝聚在这里。”冰川夫人把手伸向耳后,抓了一把空气。你感觉到有个看不见的毛茸茸的小脑袋在蹭你的手,这下等回头到家,你得跟马厩里的其他坐骑好好解释一通了。你最后再看了一眼这片废墟,发现史上第一的那位大师鉴别者最终唯一留下来的东西:她那件明灭闪烁的斗篷。你将它披在肩上,回头向Habit城走去,回味着你刚刚经历的一切。", + "questLostMasterclasser4Completion": "在你的猛攻之下,迷失的大师鉴别者发出了充满挫败感的哀嚎,她的身形摇曳闪烁着变成了半透明状。像鞭子一样猛烈抽打着一切的虚空仍然环绕在跌落的她周围,然而刹那之后,她的存在发生了变化。她变成了更年轻、冷静、脸上浮现出平静表情的样子……然后,一切都悄无声息地消散了,你又一次跪倒在沙漠的沙地上。

“看来咱们对自己的历史有很多要去了解的啊。”魟鱼国王凝视着残破的废墟,“在以太术士大师被自己的能力压垮而失去控制之后,倾盆而出的空虚肯定让整片大陆生灵涂炭了。可能一切都变成了像这样的沙漠。”

“难怪建立Habitica的祖先们一再强调要保持生产力和健康的平衡,”快乐收割者低声说,“想想重建世界那么重的任务足以使人望而却步了,但他们也曾想避免这种天灾人祸再次发生。”

“哦嚯,看看这些恶灵附过的东西!”愚者说。显然,在你让Anti’zinnya的亡灵得以安息时,这些装备沾最后一阵以太爆发的光,变成了影影绰绰的半透明质,闪着苍白的光芒。“真是令人眼花缭乱的效果,我得把这些记录下来。”

“也许此地的动物能隐形也是因为残存的以太凝聚在这里。”冰川夫人把手伸向耳后,抓了一把空气。你感觉到有个看不见的毛茸茸的小脑袋在蹭你的手,这下等回头到家,你得跟马厩里的其他坐骑好好解释一通了。你最后再看了一眼这片废墟,发现史上第一的那位大师鉴别者最终唯一留下来的东西:她那件明灭闪烁的斗篷。你将它披在肩上,回头向Habit城走去,回味着你刚刚经历的一切。

", "questLostMasterclasser4Boss": "Anti'zinnya", "questLostMasterclasser4RageTitle": "虚空抽取", "questLostMasterclasser4RageDescription": "虚空抽取:当你没完成每日任务时,Boss的怒气值会增加。当怒气槽满时,Anti'zinnya将会抽空全队的魔法值!", "questLostMasterclasser4RageEffect": "`Anti'zinnya 使用了 虚 空 抽 取!`在一阵澎湃灵泉的反向咒术中,你感到魔法被无尽的黑暗抽干了!", - "questLostMasterclasser4DropBackAccessory": "以太斗篷 (背部挂件)", - "questLostMasterclasser4DropWeapon": "以太水晶 (双手武器)", + "questLostMasterclasser4DropBackAccessory": "以太斗篷(背部挂件)", + "questLostMasterclasser4DropWeapon": "以太水晶(双手武器)", "questLostMasterclasser4DropMount": "隐形以太坐骑", "questYarnText": "一条缠绕的毛线", "questYarnNotes": "今天天气真好,适合去任务汗国的郊外散步。你路过一家有名的毛线商店时,一声惨叫刺破长空,惊飞了鸟儿,吓跑了蝴蝶。你向声源跑去,看见@Arcosine 迎面向你跑来。一团巨大的毛线,上面插着大大小小的毛衣针、大头针,叮咣作响地撵在他屁股后面穷追不舍。

毛线店的店主也追了出来,@stefalupagus 一把抓住了你的胳膊,上气不接下气地说:“看看这一堆没完成的计划吧,呼……哈……它们让毛线商店里的线团变形了,嘶……呼……成了这么一大团缠绕的毛线!”

“有时候,生活当中会出现一些困难,计划执行不下去了,结果事情就变得很让人纠结和迷茫,”@khdarkwolf 说,“这种迷茫甚至可能会影响其他方面的工作,最后就成了疲于应付一大堆半途而废的工作,没有一件是好好做完的!”

必须当机立断:完成你陷入停滞的计划……或者重新梳理一下,重定计划。不管你选哪个,你都得赶紧提高效率了,赶在这一大团缠绕的毛线把迷茫和矛盾心态传播到Habitica的其他地方之前解决掉它!", diff --git a/website/common/locales/zh_TW/achievements.json b/website/common/locales/zh_TW/achievements.json index a448195027..cba2fd61d3 100644 --- a/website/common/locales/zh_TW/achievements.json +++ b/website/common/locales/zh_TW/achievements.json @@ -8,5 +8,60 @@ "achievementLostMasterclasserText": "已完成大師鑑別者副本系列的 6 個副本,並解開了失傳的大師鑑別者的神秘面紗!", "achievementJustAddWater": "只需加水", "achievementLostMasterclasserModalText": "你完成了所有大師級任務系列的十六個任務,並解開了失傳的大師的奧秘!", - "achievementMindOverMatter": "精神高於物質" + "achievementMindOverMatter": "精神高於物質", + "achievementPearlyProText": "馴服了所有白色坐騎。", + "achievementPearlyProModalText": "你馴服了所有白色坐騎!", + "achievementPartyOn": "你的隊伍達到了4人!", + "achievementKickstarter2019Text": "參與了2019年Kickstarter的眾籌活動", + "achievementKickstarter2019": "Kickstarter徽章出資人", + "achievementAridAuthorityModalText": "你馴服了所有的沙漠坐騎!", + "achievementAridAuthorityText": "已經馴服了所有的沙漠坐騎。", + "achievementAridAuthority": "乾旱管理局", + "achievementPartyUp": "你和一名隊友合作愉快!", + "achievementDustDevilModalText": "你集齊了所有沙漠寵物!", + "achievementDustDevilText": "已經集齊所有的沙漠寵物。", + "achievementDustDevil": "沙塵惡魔", + "achievementAllYourBaseModalText": "你馴服了所有基礎坐騎!", + "achievementAllYourBaseText": "已經馴服了所有基礎坐騎。", + "achievementAllYourBase": "你所有的基礎坐騎", + "achievementBackToBasicsModalText": "你集齊了所有基礎寵物!", + "achievementBackToBasicsText": "已經集齊所有基礎寵物。", + "achievementBackToBasics": "返璞歸真", + "achievementJustAddWaterModalText": "你完成了章魚、海馬、墨魚、鯨魚、海龜、海兔、海蛇和海豚的寵物任務!", + "achievementJustAddWaterText": "已完成章魚、海馬、墨魚、鯨魚、海龜、海兔、海蛇和海豚的寵物任務。", + "achievementMindOverMatterModalText": "你完成了岩石,萊姆和毛線寵物任務!", + "achievementMindOverMatterText": "已完成岩石,萊姆和毛線寵物任務。", + "hideAchievements": "隱藏<%= category %>", + "showAllAchievements": "列出所有<%= category %>", + "onboardingCompleteDesc": "完成了任務單以後,你得到了五個成就一百金幣。", + "earnedAchievement": "你得到了一個成就!", + "viewAchievements": "看成就", + "letsGetStarted": "我們開始吧!", + "onboardingProgress": "<%= percentage %>% 完成", + "gettingStartedDesc": "我們一起製作一個任務,做完它,然後看你的獎勵。你會得到五個成就一百金幣!", + "achievementHatchedPetText": "孵化了他們頭一隻寵物。", + "achievementHatchedPetModalText": "去你的物品欄來合併及孵化藥水和一粒蛋", + "achievementFedPet": "餵一隻寵物", + "achievementFedPetText": "餵了他們頭一隻寵物。", + "achievementFedPetModalText": "有各種各樣的食物,但是寵物可能會挑剔", + "achievementPurchasedEquipment": "買了裝備", + "achievementPurchasedEquipmentText": "買了他們頭一個裝備。", + "achievementPurchasedEquipmentModalText": "你可以用裝備特別製造你的形象和增值你的屬性", + "achievementPrimedForPainting": "上塗底漆", + "achievementPrimedForPaintingText": "集齊了所有白色寵物。", + "achievementPrimedForPaintingModalText": "你集齊了所有白色寵物!", + "achievementPearlyPro": "珍珠形專業人士", + "achievementMonsterMagus": "怪物術士", + "achievementMonsterMagusText": "集齊所有殭屍寵物。", + "achievementMonsterMagusModalText": "你集齊了所有殭屍寵物!", + "achievementUndeadUndertaker": "不死葬儀師", + "achievementUndeadUndertakerText": "馴服了所有殭屍坐騎。", + "achievementUndeadUndertakerModalText": "你馴服了所有殭屍坐騎!", + "achievementCreatedTask": "製造一個任務", + "achievementCreatedTaskText": "製造了他們頭一回任務。", + "achievementCreatedTaskModalText": "把這個星期你想完成的任務加在這裡", + "achievementCompletedTask": "完成一個任務", + "achievementCompletedTaskText": "完成了他們頭一回任務。", + "achievementCompletedTaskModalText": "你可以清點任務已得到獎勵", + "achievementHatchedPet": "孵化一隻寵物" } diff --git a/website/common/locales/zh_TW/backgrounds.json b/website/common/locales/zh_TW/backgrounds.json index d682d9e273..891e45ccb6 100644 --- a/website/common/locales/zh_TW/backgrounds.json +++ b/website/common/locales/zh_TW/backgrounds.json @@ -172,14 +172,14 @@ "backgroundGazeboNotes": "與涼亭搏鬥。", "backgroundTreeRootsText": "樹之根", "backgroundTreeRootsNotes": "樹根中的探險。", - "backgrounds062016": "第25組:2016年6月推出", + "backgrounds062016": "第 25 組:2016 年 6 月推出", "backgroundLighthouseShoreText": "燈塔的岸邊", "backgroundLighthouseShoreNotes": "漫步於燈塔的岸邊。", "backgroundLilypadText": "荷葉", "backgroundLilypadNotes": "跳上荷葉。", "backgroundWaterfallRockText": "瀑布中的石頭", "backgroundWaterfallRockNotes": "濺到瀑布的石頭。", - "backgrounds072016": "第26組:2016年7月推出", + "backgrounds072016": "第 26 組:2016 年 7 月推出", "backgroundAquariumText": "水族館", "backgroundAquariumNotes": "在水族箱中漂遊。", "backgroundDeepSeaText": "深海", @@ -227,7 +227,7 @@ "backgroundRedNotes": "一個特殊的紅色背景。", "backgroundYellowText": "黃色", "backgroundYellowNotes": "一個美味的黃色背景。", - "backgrounds122016": "第 31 組:2016年12月推出", + "backgrounds122016": "第 31 組:2016 年 12 月推出", "backgroundShimmeringIcePrismText": "螢光冰晶簇", "backgroundShimmeringIcePrismNotes": "舞過螢光冰晶簇。", "backgroundWinterFireworksText": "冬季煙火", @@ -241,63 +241,63 @@ "backgroundSparklingSnowflakeNotes": "在閃閃發亮的雪花上滑行。", "backgroundStoikalmVolcanoesText": "Stoïkalm火山", "backgroundStoikalmVolcanoesNotes": "探索Stoïkalm火山。", - "backgrounds022017": "第33組:2017 年 2 月推出", + "backgrounds022017": "第 33 組:2017 年 2 月推出", "backgroundBellTowerText": "鐘樓", "backgroundBellTowerNotes": "爬到鐘塔的頂端。", "backgroundTreasureRoomText": "藏寶庫", "backgroundTreasureRoomNotes": "在藏寶庫中閃閃發光。", "backgroundWeddingArchText": "鮮花拱門", "backgroundWeddingArchNotes": "在鮮花拱門下擺個 Pose。", - "backgrounds032017": "第34組: 2017 年 3 月推出", + "backgrounds032017": "第 34 組:2017 年 3 月推出", "backgroundMagicBeanstalkText": "魔法豌豆樹", "backgroundMagicBeanstalkNotes": "爬上巨大的魔法豌豆樹。", "backgroundMeanderingCaveText": "蜿蜒洞窟", "backgroundMeanderingCaveNotes": "在蜿蜒洞窟中探險。", "backgroundMistiflyingCircusText": "神秘馬戲團", "backgroundMistiflyingCircusNotes": "在神秘馬戲團中盡情玩耍。", - "backgrounds042017": "第 35 組: 2017 年 4 月推出", + "backgrounds042017": "第 35 組:2017 年 4 月推出", "backgroundBugCoveredLogText": "爬滿蟲子的原木", "backgroundBugCoveredLogNotes": "調查爬滿蟲子的原木。", "backgroundGiantBirdhouseText": "巨大的鳥屋", "backgroundGiantBirdhouseNotes": "棲息在巨大的鳥屋。", "backgroundMistShroudedMountainText": "雲霧繚繞的山鋒", "backgroundMistShroudedMountainNotes": "雲霧繚繞的山鋒頂端。", - "backgrounds052017": "第 36 組: 2017 年 5 月推出", + "backgrounds052017": "第 36 組:2017 年 5 月推出", "backgroundGuardianStatuesText": "護衛石像", "backgroundGuardianStatuesNotes": "在護衛石像前守夜。", "backgroundHabitCityStreetsText": "習慣城市的街道", "backgroundHabitCityStreetsNotes": "探索習慣城市的街道。", "backgroundOnATreeBranchText": "在樹的分支上", "backgroundOnATreeBranchNotes": "棲息在樹枝上。", - "backgrounds062017": "第 37 組: 2017 年 6 月推出", + "backgrounds062017": "第 37 組:2017 年 6 月推出", "backgroundBuriedTreasureText": "埋藏的珍寶", "backgroundBuriedTreasureNotes": "挖掘被埋藏的珍寶。", "backgroundOceanSunriseText": "海洋日出", "backgroundOceanSunriseNotes": "欣賞海洋日出。", "backgroundSandcastleText": "沙堡", "backgroundSandcastleNotes": "統治一座沙堡。", - "backgrounds072017": "第 38 組: 2017 年 7 月推出", + "backgrounds072017": "第 38 組:2017 年 7 月推出", "backgroundGiantSeashellText": "巨大的貝殼", "backgroundGiantSeashellNotes": "在巨大的貝殼裡面閒逛。", "backgroundKelpForestText": "海草森林", "backgroundKelpForestNotes": "在海草森林之間悠遊。", "backgroundMidnightLakeText": "午夜湖畔", "backgroundMidnightLakeNotes": "在午夜湖畔旁小憩。", - "backgrounds082017": "第 39 組: 2017 年 8 月推出", + "backgrounds082017": "第 39 組:2017 年 8 月推出", "backgroundBackOfGiantBeastText": "巨獸背脊", "backgroundBackOfGiantBeastNotes": "騎乘在巨獸背脊上。", "backgroundDesertDunesText": "沙漠之丘", "backgroundDesertDunesNotes": "在沙漠之丘無畏探索。", "backgroundSummerFireworksText": "夏季煙火", "backgroundSummerFireworksNotes": "利用夏日煙火來歡慶 Habitica 命名節!", - "backgrounds092017": "第 40 組: 2017 年 9 月推出", + "backgrounds092017": "第 40 組:2017 年 9 月推出", "backgroundBesideWellText": "在古井邊", "backgroundBesideWellNotes": "在古井邊散步。", "backgroundGardenShedText": "園藝小棚", "backgroundGardenShedNotes": "在園藝小棚內工作。", "backgroundPixelistsWorkshopText": "畫作工作室", "backgroundPixelistsWorkshopNotes": "在畫作工作室裡創造曠世巨作。", - "backgrounds102017": "第 41 組: 2017 年 10 月推出", + "backgrounds102017": "第 41 組:2017 年 10 月推出", "backgroundMagicalCandlesText": "神秘蠟燭", "backgroundMagicalCandlesNotes": "在一閃一閃的神祕蠟燭中取暖。", "backgroundSpookyHotelText": "驚魂旅社", @@ -367,14 +367,14 @@ "backgroundDilatoryCityNotes": "漫步在海底中的慢吞吞城市。", "backgroundTidePoolText": "潮汐池", "backgroundTidePoolNotes": "在潮汐池邊發現了許許多多的海洋生物。", - "backgrounds082018": "第 51 組: 2018 年 8 月推出", + "backgrounds082018": "第 51 組:2018 年 8 月推出", "backgroundTrainingGroundsText": "訓練廣場", "backgroundTrainingGroundsNotes": "訓練廣場上的鬥爭。", "backgroundFlyingOverRockyCanyonText": "巨石峽谷", "backgroundFlyingOverRockyCanyonNotes": "當您飛越巨石峽谷,別忘了低頭看那令人屏息的美景。", "backgroundBridgeText": "橋樑", "backgroundBridgeNotes": "穿過一座美麗的小橋。", - "backgrounds092018": "第 52 組: 2018 年 9 月推出", + "backgrounds092018": "第 52 組:2018 年 9 月推出", "backgroundApplePickingText": "採集蘋果", "backgroundApplePickingNotes": "採集蘋果並抱走一大箱蘋果回家。", "backgroundGiantBookText": "巨大書籍", @@ -388,7 +388,7 @@ "backgroundCreepyCastleNotes": "勇敢地進入毛骨悚然的城堡。", "backgroundDungeonText": "地牢", "backgroundDungeonNotes": "在幽靈地牢中協助囚犯越獄。", - "backgrounds112018": "第 54 組: 2018 年 11月推出", + "backgrounds112018": "第 54 組:2018 年 11月推出", "backgroundBackAlleyText": "陋巷", "backgroundBackAlleyNotes": "暗影再陋巷中陰魂不散。", "backgroundGlowingMushroomCaveText": "發光蘑菇洞穴", @@ -464,5 +464,33 @@ "backgroundGiantDandelionsText": "巨型蒲公英", "backgroundAmidAncientRuinsNotes": "懷著敬畏之心地站在神秘古代遺跡之中。", "backgroundAmidAncientRuinsText": "古代遺跡", - "backgrounds082019": "第 63 組:2019 年 8 月推出" + "backgrounds082019": "第 63 組:2019 年 8 月推出", + "backgroundBirthdayPartyNotes": "慶祝你最喜歡的Habitica居民的生日派對。", + "backgroundDesertWithSnowText": "白雪皚皚的沙漠", + "backgroundDesertWithSnowNotes": "觀看白雪皚皚的沙漠的稀有與寧靜之美。", + "backgroundSnowglobeText": "雪球", + "backgroundSnowglobeNotes": "搖一搖雪球,在冬季風景的縮影中佔據一席之地。", + "backgroundBirthdayPartyText": "生日派對", + "backgroundWinterNocturneNotes": "沐浴在冬季夜景畫的星光下。", + "backgroundWinterNocturneText": "冬季夜景畫", + "backgroundHolidayWreathNotes": "用芬芳的節日花環裝飾你的角色形象。", + "backgroundHolidayWreathText": "節日花環", + "backgroundHolidayMarketNotes": "在節日市場上找完美的禮物和裝飾品。", + "backgroundHolidayMarketText": "節場", + "backgroundPotionShopNotes": "在藥水店找靈藥解任何病。", + "backgroundPotionShopText": "藥水店", + "backgroundFlyingInAThunderstormNotes": "如果你有膽,緊緊的追逐雷雨。", + "backgroundFlyingInAThunderstormText": "陣陣雷雨", + "backgroundFarmersMarketNotes": "在農貿集市買最新鮮的食物。", + "backgroundFarmersMarketText": "農貿集市", + "backgroundMonsterMakersWorkshopNotes": "在魔鬼製造者的工作室,用非主流的科學進行實驗。", + "backgroundMonsterMakersWorkshopText": "魔鬼製造者的工作室", + "backgroundPumpkinCarriageNotes": "半夜之前騎南瓜轎子。", + "backgroundPumpkinCarriageText": "南瓜轎子", + "backgroundFoggyMoorNotes": "在霧泊中小心行走。", + "backgroundFoggyMoorText": "霧泊", + "backgrounds012020": "第 68 組:2020 年 1 月推出", + "backgrounds122019": "第 67 組:2019 年 12 月推出", + "backgrounds112019": "第 66 組:2019 年 11 月推出", + "backgrounds102019": "第 65 組:2019 年 10 月推出" } diff --git a/website/common/locales/zh_TW/character.json b/website/common/locales/zh_TW/character.json index 5b6b211f54..8e5adacf83 100644 --- a/website/common/locales/zh_TW/character.json +++ b/website/common/locales/zh_TW/character.json @@ -104,7 +104,7 @@ "allocatePerPop": "增加一點至感知屬性", "allocateInt": "分配給智力的屬性點:", "allocateIntPop": "增加一點至智力屬性", - "noMoreAllocate": "現在您已達到 100 等,您將不會再得到任何的屬性點。您可以繼續升級,或者使用重生球回到 1 等並開始另一個新的旅程。現在您可以到市場裡免費購買重生球。", + "noMoreAllocate": "現在您已達到 100 等,您將不會再得到任何的屬性點。您可以繼續升級,或者使用重生球回到 1 等並開始另一個新的旅程!", "stats": "統計", "achievs": "成就", "strength": "力量", diff --git a/website/common/locales/zh_TW/content.json b/website/common/locales/zh_TW/content.json index 5fac124f0c..22dfeb9cc9 100644 --- a/website/common/locales/zh_TW/content.json +++ b/website/common/locales/zh_TW/content.json @@ -351,5 +351,7 @@ "questEggRobotMountText": "機器人", "questEggRobotText": "機器人", "hatchingPotionShadow": "陰影", - "premiumPotionUnlimitedNotes": "無法用於副本寵物蛋。" + "premiumPotionUnlimitedNotes": "無法用於副本寵物蛋。", + "hatchingPotionAurora": "極光", + "hatchingPotionAmber": "琥珀" } diff --git a/website/common/locales/zh_TW/front.json b/website/common/locales/zh_TW/front.json index 5afa5d2eea..549a7cf404 100644 --- a/website/common/locales/zh_TW/front.json +++ b/website/common/locales/zh_TW/front.json @@ -331,5 +331,6 @@ "getStarted": "現在就加入我們!", "mobileApps": "行動版 APP", "learnMore": "了解更多", - "communityInstagram": "Instagram" + "communityInstagram": "Instagram", + "minPasswordLength": "密碼至少需要8個字符。" } diff --git a/website/common/locales/zh_TW/gear.json b/website/common/locales/zh_TW/gear.json index eb89d6daf8..7ab9a2d4e8 100644 --- a/website/common/locales/zh_TW/gear.json +++ b/website/common/locales/zh_TW/gear.json @@ -83,9 +83,9 @@ "weaponSpecial1Text": "水晶利刃", "weaponSpecial1Notes": "閃耀的晶面宛如正訴說著一位英雄的傳說。增加所有屬性各 <%= attrs %> 點。", "weaponSpecial2Text": "史蒂芬‧韋伯的巨龍長矛", - "weaponSpecial2Notes": "(Stephen Weber's Shaft of the Dragon) 內部散發著龍的洶湧之力!增加力量、感知各 <%= attrs %> 點。", + "weaponSpecial2Notes": "內部散發著龍的洶湧之力!增加力量、感知各 <%= attrs %> 點。", "weaponSpecial3Text": "馬斯泰恩的碎石流星錘", - "weaponSpecial3Notes": "(Mustaine's Milestone Mashing Morning Star) 看到怪物統統搗爛!增加力量、智力、體質各 <%= attrs %> 點。", + "weaponSpecial3Notes": "看到怪物統統搗爛!增加力量、智力、體質各 <%= attrs %> 點。", "weaponSpecialCriticalText": "碾蟲大師強力戰鎚", "weaponSpecialCriticalNotes": "這位勇者殺死了一個讓無數戰士殞落的 Gitthub敵人。這把戰鎚由臭蟲的骨頭打造,能給敵人帶來強大的致命一擊。增加力量、感知各 <%= attrs %>點。", "weaponSpecialTakeThisText": "Take This 劍", @@ -115,93 +115,93 @@ "weaponSpecialAetherCrystalsText": "以太紫水晶護碗", "weaponSpecialAetherCrystalsNotes": "這雙水晶護碗曾屬於迷失的職業統治大師(Lost Masterclasser)。增加所有屬性各 <%= attrs %> 點。", "weaponSpecialYetiText": "雪怪馴化師長矛", - "weaponSpecialYetiNotes": "這把長矛賜予使用者指揮雪怪的權力。增加 <%= str %> 點力量。 2013-2014冬季限定版裝備", + "weaponSpecialYetiNotes": "這把長矛賜予使用者指揮雪怪的權力。增加 <%= str %> 點力量。 2013-2014冬季限定版裝備。", "weaponSpecialSkiText": "滑雪刺客手杖", - "weaponSpecialSkiNotes": "一把能消滅大群敵人的武器!同時,它還能幫助玩家很華麗地進行併腿轉向。增加 <%= str %> 點力量。 2013-2014冬季限定版裝備", + "weaponSpecialSkiNotes": "一把能消滅大群敵人的武器!同時,它還能幫助玩家很華麗地進行併腿轉向。增加 <%= str %> 點力量。 2013-2014冬季限量版裝備。", "weaponSpecialCandycaneText": "糖果手法杖", - "weaponSpecialCandycaneNotes": "一個非常強大的魔導士法杖。我的意思是 非! 常! 美! 味! 增加 <%= int %> 點智力和 <%= per %> 點感知。 2013-2014冬季限定版裝備", + "weaponSpecialCandycaneNotes": "一個非常強大的魔導士法杖。我的意思是 非! 常! 美! 味! 增加 <%= int %> 點智力和 <%= per %> 點感知。 2013-2014冬季限定版裝備。", "weaponSpecialSnowflakeText": "雪花魔杖", - "weaponSpecialSnowflakeNotes": "這把魔杖閃耀著無限的治療之力。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備", + "weaponSpecialSnowflakeNotes": "這把魔杖閃耀著無限的治療之力。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備。", "weaponSpecialSpringRogueText": "鉤爪", - "weaponSpecialSpringRogueNotes": "非常適合用來攀爬高樓,當然也可以用來抓爛地毯。增加 <%= str %> 點力量。 2014年春季限定版裝備", + "weaponSpecialSpringRogueNotes": "非常適合用來攀爬高樓,當然也可以用來抓爛地毯。增加 <%= str %> 點力量。 2014年春季限定版裝備。", "weaponSpecialSpringWarriorText": "胡蘿蔔寶劍", - "weaponSpecialSpringWarriorNotes": "這把威武的寶劍可以不費吹灰之力把敵人切成碎片!要是在戰場上餓了,還能把它當作零食吃掉。增加 <%= str %> 點力量。 2014年春季限定版裝備", + "weaponSpecialSpringWarriorNotes": "這把威武的寶劍可以不費吹灰之力把敵人切成碎片!要是在戰場上餓了,還能把它當作零食吃掉。增加 <%= str %> 點力量。 2014年春季限定版裝備。", "weaponSpecialSpringMageText": "瑞士乳酪法杖", - "weaponSpecialSpringMageNotes": "只有最強大的囓齒動物才能夠戰勝他們的渴望,控制這個而有力的法杖。增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年春季限定版裝備", + "weaponSpecialSpringMageNotes": "只有最強大的囓齒動物才能夠戰勝他們的渴望,控制這個而有力的法杖。增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年春季限定版裝備。", "weaponSpecialSpringHealerText": "可愛的骨頭", - "weaponSpecialSpringHealerNotes": "給我拿來!增加 <%= int %> 點智力。2014年春季限定版裝備", + "weaponSpecialSpringHealerNotes": "給我拿來!增加 <%= int %> 點智力。2014年春季限定版裝備。", "weaponSpecialSummerRogueText": "海盜彎刀", - "weaponSpecialSummerRogueNotes": "停!!您這樣子會讓那些每日任務走上跳板一去不復返!增加 <%= str %> 點力量。 2014年夏季限定版裝備", + "weaponSpecialSummerRogueNotes": "停!!您這樣子會讓那些每日任務走上跳板一去不復返!增加 <%= str %> 點力量。 2014年夏季限定版裝備。", "weaponSpecialSummerWarriorText": "航海切片刀", - "weaponSpecialSummerWarriorNotes": "沒有任何待辦事項中的任務願意與這把粗糙的刀糾纏在一起!增加 <%= str %> 點力量。 2014年夏季限定版裝備", + "weaponSpecialSummerWarriorNotes": "沒有任何待辦事項中的任務願意與這把粗糙的刀糾纏在一起!增加 <%= str %> 點力量。 2014年夏季限定版裝備。", "weaponSpecialSummerMageText": "海帶捕捉器", - "weaponSpecialSummerMageNotes": "這把三叉戟能有效地戳起海帶,還能有額外的收穫!增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年夏季限定版裝備", + "weaponSpecialSummerMageNotes": "這把三叉戟能有效地戳起海帶,還能有額外的收穫!增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年夏季限定版裝備。", "weaponSpecialSummerHealerText": "淺灘魔杖", - "weaponSpecialSummerHealerNotes": "這把魔杖由海藍寶石和活珊瑚製成,它對魚群非常有吸引力。增加 <%= int %> 點智力。 2014年夏季限定版裝備", + "weaponSpecialSummerHealerNotes": "這把魔杖由海藍寶石和活珊瑚製成,它對魚群非常有吸引力。增加 <%= int %> 點智力。 2014年夏季限定版裝備。", "weaponSpecialFallRogueText": "銀製鐵樁", - "weaponSpecialFallRogueNotes": "可以驅走亡靈,同時也能有效抵禦狼人,因為您應謹記凡事小心為上。增加 <%= str %> 點力量。 2014年秋季限定版裝備", + "weaponSpecialFallRogueNotes": "可以驅走亡靈,同時也能有效抵禦狼人,因為您應謹記凡事小心為上。增加 <%= str %> 點力量。 2014年秋季限定版裝備。", "weaponSpecialFallWarriorText": "科學利鉗", - "weaponSpecialFallWarriorNotes": "這把咬得很緊的鉗子代表著現代科技的尖端。增加 <%= str %> 點力量。 2014年秋季限定版裝備", + "weaponSpecialFallWarriorNotes": "這把咬得很緊的鉗子代表著現代科技的尖端。增加 <%= str %> 點力量。 2014年秋季限定版裝備。", "weaponSpecialFallMageText": "魔法掃帚", - "weaponSpecialFallMageNotes": "這隻附魔的掃帚飛得比龍還要快!增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年秋季限定版裝備", + "weaponSpecialFallMageNotes": "這隻附魔的掃帚飛得比龍還要快!增加 <%= int %> 點智力和 <%= per %> 點感知。 2014年秋季限定版裝備。", "weaponSpecialFallHealerText": "金龜蟲魔杖", - "weaponSpecialFallHealerNotes": "魔杖上的金龜蟲能保護並治療使用者。增加 <%= int %> 點智力。 2014年秋季限定版裝備", + "weaponSpecialFallHealerNotes": "魔杖上的金龜蟲能保護並治療使用者。增加 <%= int %> 點智力。 2014年秋季限定版裝備。", "weaponSpecialWinter2015RogueText": "冰柱尖釘", - "weaponSpecialWinter2015RogueNotes": "這真的是,完全是,絕對是剛從地上撿起來的。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備", + "weaponSpecialWinter2015RogueNotes": "這真的是,完全是,絕對是剛從地上撿起來的。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備。", "weaponSpecialWinter2015WarriorText": "果凍糖劍", - "weaponSpecialWinter2015WarriorNotes": "這美味的劍大概會引來怪物... 但您已經準備好面對挑戰了!增加 <%= str %> 點力量。 2014-2015冬季限定版裝備", + "weaponSpecialWinter2015WarriorNotes": "這美味的劍大概會引來怪物... 但您已經準備好面對挑戰了!增加 <%= str %> 點力量。 2014-2015冬季限定版裝備。", "weaponSpecialWinter2015MageText": "冬日聖光法杖", - "weaponSpecialWinter2015MageNotes": "法杖上的水晶發出光芒,讓您心中充滿歡愉。增加 <%= int %> 點智力和 <%= per %> 點感知。 2014-2015冬季限定版裝備", + "weaponSpecialWinter2015MageNotes": "法杖上的水晶發出光芒,讓您心中充滿歡愉。增加 <%= int %> 點智力和 <%= per %> 點感知。 2014-2015冬季限定版裝備。", "weaponSpecialWinter2015HealerText": "鎮靜權杖", - "weaponSpecialWinter2015HealerNotes": "這權杖能緩和肌肉酸痛、舒緩壓力。增加 <%= int %> 點智力。 2014-2015冬季限定版裝備", + "weaponSpecialWinter2015HealerNotes": "這權杖能緩和肌肉酸痛、舒緩壓力。增加 <%= int %> 點智力。 2014-2015冬季限定版裝備。", "weaponSpecialSpring2015RogueText": "霹靂爆破管", - "weaponSpecialSpring2015RogueNotes": "別被它軟弱的聲音給搞糊塗了——這爆炸威力可不得了。增加 <%= str %> 點力量。 2015年春季限定版裝備", + "weaponSpecialSpring2015RogueNotes": "別被它軟弱的聲音給搞糊塗了——這爆炸威力可不得了。增加 <%= str %> 點力量。 2015年春季限定版裝備。", "weaponSpecialSpring2015WarriorText": "骨棒", - "weaponSpecialSpring2015WarriorNotes": "這是為真正兇猛的狗狗們準備的真正的骨棒,絕對不是那種季節魔女給你的咀嚼玩具!乖狗狗是誰?誰~~~是乖狗狗呀??就是您呀!!您是隻乖狗狗唷!!!增加 <%= str %> 點力量。 2015年春季限定版裝備", + "weaponSpecialSpring2015WarriorNotes": "這是為真正兇猛的狗狗們準備的真正的骨棒,絕對不是那種季節魔女給你的咀嚼玩具!乖狗狗是誰?誰~~~是乖狗狗呀??就是您呀!!您是隻乖狗狗唷!!!增加 <%= str %> 點力量。 2015年春季限定版裝備。", "weaponSpecialSpring2015MageText": "魔法師魔杖", - "weaponSpecialSpring2015MageNotes": "有了這根神奇的魔杖,您就能變出屬於自己的胡蘿蔔囉!增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年春季限定版裝備", + "weaponSpecialSpring2015MageNotes": "有了這根神奇的魔杖,您就能變出屬於自己的胡蘿蔔囉!增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年春季限定版裝備。", "weaponSpecialSpring2015HealerText": "貓咪沙鼓", - "weaponSpecialSpring2015HealerNotes": "當您搖動這個沙鈴,它會發出悅耳的叮噹聲,讓所有人保持愉悅好幾小時。增加 <%= int %> 點智力。 2015年春季限定版裝備", + "weaponSpecialSpring2015HealerNotes": "當您搖動這個沙鈴,它會發出悅耳的叮噹聲,讓所有人保持愉悅好幾小時。增加 <%= int %> 點智力。 2015年春季限定版裝備。", "weaponSpecialSummer2015RogueText": "火焰珊瑚", - "weaponSpecialSummer2015RogueNotes": "這種火珊瑚具有一種能力,可以在水裡散播毒液。增加 <%= str %> 點力量。 2015年夏季限定版裝備", + "weaponSpecialSummer2015RogueNotes": "這種火珊瑚具有一種能力,可以在水裡散播毒液。增加 <%= str %> 點力量。 2015年夏季限定版裝備。", "weaponSpecialSummer2015WarriorText": "太陽旗魚劍", - "weaponSpecialSummer2015WarriorNotes": "這支太陽旗魚劍是一種很恐怖的武器,如果能先讓它不再扭來扭去的話。增加 <%= str %> 點力量。 2015年夏季限定版裝備", + "weaponSpecialSummer2015WarriorNotes": "這支太陽旗魚劍是一種很恐怖的武器,如果能先讓它不再扭來扭去的話。增加 <%= str %> 點力量。 2015年夏季限定版裝備。", "weaponSpecialSummer2015MageText": "預言家法杖", - "weaponSpecialSummer2015MageNotes": "嵌入在法杖內的寶石中隱隱可見有不明力量正閃閃發光著。增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年夏季限定版裝備", + "weaponSpecialSummer2015MageNotes": "嵌入在法杖內的寶石中隱隱可見有不明力量正閃閃發光著。增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年夏季限定版裝備。", "weaponSpecialSummer2015HealerText": "潮汐權杖", - "weaponSpecialSummer2015HealerNotes": "出門必備良品,專治暈車暈船!增加 <%= int %> 點智力。 2015年夏季限定版裝備", + "weaponSpecialSummer2015HealerNotes": "出門必備良品,專治暈車暈船!增加 <%= int %> 點智力。 2015年夏季限定版裝備。", "weaponSpecialFall2015RogueText": "戰蝠巨斧", - "weaponSpecialFall2015RogueNotes": "那些令人生畏的待辦事項都在這把神斧的揮砍之下瑟瑟發抖。增加 <%= str %> 點力量。 2015年秋季限定版裝備", + "weaponSpecialFall2015RogueNotes": "那些令人生畏的待辦事項都在這把神斧的揮砍之下瑟瑟發抖。增加 <%= str %> 點力量。 2015年秋季限定版裝備。", "weaponSpecialFall2015WarriorText": "原木片", - "weaponSpecialFall2015WarriorNotes": "萬中選一的武器!如果你是要在玉米田工作或是揍小屁孩的話啦。增加 <%= str %> 點力量。 2015年秋季限定版裝備", + "weaponSpecialFall2015WarriorNotes": "萬中選一的武器!如果你是要在玉米田工作或是揍小屁孩的話啦。增加 <%= str %> 點力量。 2015年秋季限定版裝備。", "weaponSpecialFall2015MageText": "附魔棉線", - "weaponSpecialFall2015MageNotes": "一個真正有能力的縫紉巫師根本不用碰到它就能夠輕易地操控它!增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年秋季限定版裝備", + "weaponSpecialFall2015MageNotes": "一個真正有能力的縫紉巫師根本不用碰到它就能夠輕易地操控它!增加 <%= int %> 點智力和 <%= per %> 點感知。 2015年秋季限定版裝備。", "weaponSpecialFall2015HealerText": "沼澤史萊姆藥水", - "weaponSpecialFall2015HealerNotes": "完美調配!現在,您只需要說服自己將它給喝下去。增加 <%= int %> 點智力。 2015年秋季限定版裝備", + "weaponSpecialFall2015HealerNotes": "完美調配!現在,您只需要說服自己將它給喝下去。增加 <%= int %> 點智力。 2015年秋季限定版裝備。", "weaponSpecialWinter2016RogueText": "可可豆馬克杯", - "weaponSpecialWinter2016RogueNotes": "這是一杯熱可可,還是炙手可熱的投擲物呢?由您決定!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備", + "weaponSpecialWinter2016RogueNotes": "這是一杯熱可可,還是炙手可熱的投擲物呢?由您決定!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備。", "weaponSpecialWinter2016WarriorText": "堅固的鏟子", - "weaponSpecialWinter2016WarriorNotes": "用力剷除即將到期的任務!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備", + "weaponSpecialWinter2016WarriorNotes": "用力剷除即將到期的任務!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備。", "weaponSpecialWinter2016MageText": "妖術滑雪板", - "weaponSpecialWinter2016MageNotes": "您的行動如此遲緩,試試這台妖術滑雪板吧!增加 <%= int %> 點智力及 <%= per %> 點感知。 2015-2016冬季限定版裝備", + "weaponSpecialWinter2016MageNotes": "您的行動如此遲緩,試試這台妖術滑雪板吧!增加 <%= int %> 點智力及 <%= per %> 點感知。 2015-2016冬季限定版裝備。", "weaponSpecialWinter2016HealerText": "彩紙大炮", - "weaponSpecialWinter2016HealerNotes": "爽喲!!!夢幻之地迎來快樂的冬天!!!增加 <%= int %> 點智力。 2015-2016冬季限定版裝備", + "weaponSpecialWinter2016HealerNotes": "爽喲!!!夢幻之地迎來快樂的冬天!!!增加 <%= int %> 點智力。 2015-2016冬季限定版裝備。", "weaponSpecialSpring2016RogueText": "烈焰流星錘", - "weaponSpecialSpring2016RogueNotes": "您精通了錘球、棍棒和小刀,現在更要駕馭火焰了!哇!增加 <%= str %> 點力量。 2016年春季限定版裝備", + "weaponSpecialSpring2016RogueNotes": "您精通了錘球、棍棒和小刀,現在更要駕馭火焰了!哇!增加 <%= str %> 點力量。 2016年春季限定版裝備。", "weaponSpecialSpring2016WarriorText": "起司大頭錘", - "weaponSpecialSpring2016WarriorNotes": "擁有香嫩起司的老鼠就會擁有最多的朋友。增加 <%= str %> 點力量。 2016年春季限定版裝備", + "weaponSpecialSpring2016WarriorNotes": "擁有香嫩起司的老鼠就會擁有最多的朋友。增加 <%= str %> 點力量。 2016年春季限定版裝備。", "weaponSpecialSpring2016MageText": "鈴鐺法杖", - "weaponSpecialSpring2016MageNotes": "阿布拉卡特阿布拉!多麼炫目啊,您可能不知不覺中對自己施放了催眠術!喔... 他開始叮噹叮噹地響了。增加 <%= int %> 點智力和 <%= per %> 點感知。 2016年春季限定版裝備", + "weaponSpecialSpring2016MageNotes": "阿布拉卡特阿布拉!多麼炫目啊,您可能不知不覺中對自己施放了催眠術!喔... 他開始叮噹叮噹地響了。增加 <%= int %> 點智力和 <%= per %> 點感知。 2016年春季限定版裝備。", "weaponSpecialSpring2016HealerText": "春花魔杖", - "weaponSpecialSpring2016HealerNotes": "只要一個揮舞並施法,您就可以讓整座森林與田野上花朵盛開!討厭的老鼠也都被驅趕走了。增加 <%= int %> 點智力。 2016年春季限定版裝備", + "weaponSpecialSpring2016HealerNotes": "只要一個揮舞並施法,您就可以讓整座森林與田野上花朵盛開!討厭的老鼠也都被驅趕走了。增加 <%= int %> 點智力。 2016年春季限定版裝備。", "weaponSpecialSummer2016RogueText": "電流導桿", - "weaponSpecialSummer2016RogueNotes": "那些跟您戰鬥的人都將體驗到一次震驚的驚喜... 增加 <%= str %> 點力量。 2016年夏季限定版裝備", + "weaponSpecialSummer2016RogueNotes": "那些跟您戰鬥的人都將體驗到一次震驚的驚喜... 增加 <%= str %> 點力量。 2016年夏季限定版裝備。", "weaponSpecialSummer2016WarriorText": "金柄彎刀", - "weaponSpecialSummer2016WarriorNotes": "用這把彎刀撕裂那些艱難的任務吧! 增加 <%= str %> 點力量。 2016年夏季限定版裝備", + "weaponSpecialSummer2016WarriorNotes": "用這把彎刀撕裂那些艱難的任務吧! 增加 <%= str %> 點力量。 2016年夏季限定版裝備。", "weaponSpecialSummer2016MageText": "浪花法杖", - "weaponSpecialSummer2016MageNotes": "這把法杖過濾了所有海洋的力量。增加 <%= int %> 點智力和 <%= per %> 點感知。 2016年夏季限定版裝備", + "weaponSpecialSummer2016MageNotes": "這把法杖過濾了所有海洋的力量。增加 <%= int %> 點智力和 <%= per %> 點感知。 2016年夏季限定版裝備。", "weaponSpecialSummer2016HealerText": "治癒三叉戟", - "weaponSpecialSummer2016HealerNotes": "一個叉負責傷害,其餘兩個能夠給予治療。增加 <%= int %> 點智力。 2016年夏季限定版裝備", + "weaponSpecialSummer2016HealerNotes": "一個叉負責傷害,其餘兩個能夠給予治療。增加 <%= int %> 點智力。 2016年夏季限定版裝備。", "weaponSpecialFall2016RogueText": "蛛咬匕首", "weaponSpecialFall2016RogueNotes": "讓敵人感受一下蜘蛛咬傷的刺痛爽感! 增加 <%= str %> 點力量。 2016年秋季限定版裝備。", "weaponSpecialFall2016WarriorText": "攻擊用樹根", @@ -233,9 +233,9 @@ "weaponSpecialSummer2017MageText": "漩渦藤鞭", "weaponSpecialSummer2017MageNotes": "用旋渦藤鞭來引出沸騰的水來燙燒您的任務吧! 增加 <%= int %> 點智力和 <%= per %> 點感知。 2017年夏季限定版裝備。", "weaponSpecialSummer2017HealerText": "珍珠魔杖", - "weaponSpecialSummer2017HealerNotes": "只要碰一下這把珍珠魔杖就能夠治癒所有的傷口。增加 <%= int %> 點智力。 2017年夏季限定版裝備。", + "weaponSpecialSummer2017HealerNotes": "只要碰一下這把珍珠魔杖就能夠治癒所有的傷口。增加 <%= int %> 點智力。2017年夏季限定版裝備。", "weaponSpecialFall2017RogueText": "蘋果糖葫蘆權杖", - "weaponSpecialFall2017RogueNotes": "用甜蜜蜜香死您的敵人吧! 增加 <%= str %> 點力量。 2017年限定版秋季裝備。", + "weaponSpecialFall2017RogueNotes": "用甜蜜蜜香死您的敵人吧! 增加 <%= str %> 點力量。2017年限定版秋季裝備。", "weaponSpecialFall2017WarriorText": "玉米糖漿長刃", "weaponSpecialFall2017WarriorNotes": "在這看起來很可口多滋的長矛面前,所以的敵人都將畏縮不感前進。不論他們是幽靈、妖怪、還是泛紅的代辦事項。增加 <%= str %> 點力量。 2017年秋季限定裝備。", "weaponSpecialFall2017MageText": "惡靈法杖", @@ -269,111 +269,111 @@ "weaponSpecialFall2018RogueText": "清晰藥水瓶", "weaponSpecialFall2018RogueNotes": "當您想要停止做傻事、或是需要一點提神來作一個正確的選擇。可以深呼吸並啜一小口。萬事都變得OK! 增加 <%= str %> 點力量。 2018年秋季限定版裝備.", "weaponSpecialFall2018WarriorText": "米諾斯藤條", - "weaponSpecialFall2018WarriorNotes": "(Whip of Minos) 。不夠長到能夠讓您能夠脫離迷宮。甚至是在像這樣那麼小的迷宮裡。增加 <%= str %> 點力量。 2018年秋季限定版裝備", + "weaponSpecialFall2018WarriorNotes": "你想把它抻直放在身後的來路上,用以在迷宮裡保持方向,但長度好像並不太夠。呃,也許是個很小的迷宮。增加<%= str %>點力量。 2018年秋季限定裝備。", "weaponSpecialFall2018MageText": "甜蜜蜜法杖", "weaponSpecialFall2018MageNotes": "這可不是一般的棒棒糖! 在這法杖上閃閃發光之魔法糖果擁有能讓好習慣黏在您身旁的能力。增加 <%= int %> 點智力和 <%= per %> 點感知。 2018年秋季限定版裝備。", "weaponSpecialFall2018HealerText": "飢餓法杖", - "weaponSpecialFall2018HealerNotes": "要時常餵食這根法杖,這樣它就會帶來賜福。一旦忘記餵食,就要記得將它放在手勾不到的地方。增加 <%= int %> 點智力。 2018年秋季限定版裝備", + "weaponSpecialFall2018HealerNotes": "要時常餵食這根法杖,這樣它就會帶來賜福。一旦忘記餵食,就要記得將它放在手勾不到的地方。增加 <%= int %> 點智力。 2018年秋季限定版裝備。", "weaponSpecialWinter2019RogueText": "一品紅聖誕花束", - "weaponSpecialWinter2019RogueNotes": "利用這些節慶花束可以進一步偽裝自己,或者也可以慷慨地將它贈送給您的好友並照亮他們的每一天! 增加 <%= str %> 點力量。 2018-2019冬季限定版裝備", + "weaponSpecialWinter2019RogueNotes": "利用這些節慶花束可以進一步偽裝自己,或者也可以慷慨地將它贈送給您的好友並照亮他們的每一天! 增加 <%= str %> 點力量。 2018-2019冬季限定版裝備。", "weaponSpecialWinter2019WarriorText": "雪花戟", - "weaponSpecialWinter2019WarriorNotes": "這些鑽石般堅硬的刀刃是由冰晶一塊一塊雕製成! 增加 <%= str %> 點力量。 2018-2019限定版冬季裝備", + "weaponSpecialWinter2019WarriorNotes": "這些鑽石般堅硬的刀刃是由冰晶一塊一塊雕製成! 增加 <%= str %> 點力量。 2018-2019限定版冬季裝備。", "weaponSpecialWinter2019MageText": "炙熱龍法杖", - "weaponSpecialWinter2019MageNotes": "小心! 這團有爆炸性可能的法杖已經準備好隨時幫助任何需要幫忙的人。增加 <%= int %> 點智力和 <%= per %> 點感知。 2018-2019冬季限定版裝備", + "weaponSpecialWinter2019MageNotes": "小心! 這團有爆炸性可能的法杖已經準備好隨時幫助任何需要幫忙的人。增加 <%= int %> 點智力和 <%= per %> 點感知。 2018-2019冬季限定版裝備。", "weaponSpecialWinter2019HealerText": "冬日魔杖", - "weaponSpecialWinter2019HealerNotes": "冬季是個可以好好休養和治療的日子,所以這根冬日魔杖的魔力可以幫助緩解任何受到傷害的傷口。增加 <%= int %> 點智力。 2018-2019 冬季限定版裝備", + "weaponSpecialWinter2019HealerNotes": "冬季是個可以好好休養和治療的日子,所以這根冬日魔杖的魔力可以幫助緩解任何受到傷害的傷口。增加 <%= int %> 點智力。 2018-2019 冬季限定版裝備。", "weaponMystery201411Text": "盛宴草叉", - "weaponMystery201411Notes": "刺擊您的敵人或是插入您最愛的食物——這把多才多藝的叉子可是無所不能!無屬性加成。 2014年11月訂閱者專屬裝備", + "weaponMystery201411Notes": "刺擊您的敵人或是插入您最愛的食物——這把多才多藝的叉子可是無所不能!無屬性加成。 2014年11月訂閱者專屬裝備。", "weaponMystery201502Text": "愛與真理之微光翅膀法杖", - "weaponMystery201502Notes": "為了翅膀!為了愛!也為了真理!無屬性加成。 2015年2月訂閱者專屬裝備", + "weaponMystery201502Notes": "為了翅膀!為了愛!也為了真理!無屬性加成。 2015年2月訂閱者專屬裝備。", "weaponMystery201505Text": "綠騎士長矛", - "weaponMystery201505Notes": "光榮的騎士們不知已經用這根銀綠相間的長矛將多少強敵通通打落馬下。無屬性加成。 2015年5月訂閱者專屬裝備", + "weaponMystery201505Notes": "光榮的騎士們不知已經用這根銀綠相間的長矛將多少強敵通通打落馬下。無屬性加成。 2015年5月訂閱者專屬裝備。", "weaponMystery201611Text": "富產的豐饒羊角", - "weaponMystery201611Notes": "(Copious Cornucopia) 各種美味又健康的食物從各個號角中溢出。享受這場盛宴吧! 沒無屬性加成。 2016年11月訂閱者專屬裝備", + "weaponMystery201611Notes": "(Copious Cornucopia) 各種美味又健康的食物從各個號角中溢出。享受這場盛宴吧! 沒無屬性加成。 2016年11月訂閱者專屬裝備。", "weaponMystery201708Text": "熔岩長刃", - "weaponMystery201708Notes": "在這熾熱光輝的庇護之下,即使是碰到深紅色的任務也能迅速斬除! 無屬性加成。 2017年8月訂閱者專屬裝備", + "weaponMystery201708Notes": "在這熾熱光輝的庇護之下,即使是碰到深紅色的任務也能迅速斬除! 無屬性加成。 2017年8月訂閱者專屬裝備。", "weaponMystery201811Text": "璀璨巫師法杖", "weaponMystery201811Notes": "這根充滿魔力的法杖與它的高雅一樣強而有力。無屬性加成。 2018年11月訂閱者專屬裝備。", "weaponMystery301404Text": "蒸氣龐克風手杖", - "weaponMystery301404Notes": "特別適合用於城裡散步。無屬性加成。 3015年3月訂閱者專屬裝備", + "weaponMystery301404Notes": "特別適合用於城裡散步。無屬性加成。 3015年3月訂閱者專屬裝備。", "weaponArmoireBasicCrossbowText": "基礎級十字弩", - "weaponArmoireBasicCrossbowNotes": "不管從多遠,都能夠用這把十字弩射出的弓箭刺穿任何任務的鎧甲!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= con %> 點體質。 來自神祕寶箱: 獨立裝備", + "weaponArmoireBasicCrossbowNotes": "不管從多遠,都能夠用這把十字弩射出的弓箭刺穿任何任務的鎧甲!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備。", "weaponArmoireLunarSceptreText": "治癒之月權杖", - "weaponArmoireLunarSceptreNotes": "從這把魔杖所帶來的治癒能量,會隨著月亮盈缺而增減。提高 <%= con %> 點體質和 <%= int %> 點智力。 來自神祕寶箱: 治癒之月套裝(3/3)。", + "weaponArmoireLunarSceptreNotes": "從這把魔杖所帶來的治癒能量,會隨著月亮盈缺而增減。提高 <%= con %> 點體質和 <%= int %> 點智力。 來自神秘寶箱: 治癒之月套裝(3/3)。", "weaponArmoireRancherLassoText": "牛仔套索", - "weaponArmoireRancherLassoNotes": "套索:專為圍捕和牽繩設計的理想工具。增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。 來自神祕寶箱: 牛仔套裝(3/3)", + "weaponArmoireRancherLassoNotes": "套索:專為圍捕和牽繩設計的理想工具。增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。 來自神秘寶箱: 牛仔套裝(3/3)。", "weaponArmoireMythmakerSwordText": "神話英雄寶劍", - "weaponArmoireMythmakerSwordNotes": "重劍無鋒大巧不工,這把寶劍已經造就了許多神話英雄。增加感知、力量各 <%= attrs %> 點。 來自神祕寶箱: 黃金托加長袍套裝(3/3)", + "weaponArmoireMythmakerSwordNotes": "重劍無鋒大巧不工,這把寶劍已經造就了許多神話英雄。增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 黃金托加長袍套裝(3/3)。", "weaponArmoireIronCrookText": "鋼鐵彎杖", - "weaponArmoireIronCrookNotes": "純鋼打造,力透杖柄。這鋼鐵彎杖用來放牧效果極好。增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 鐵角套裝(3/3)", + "weaponArmoireIronCrookNotes": "純鋼打造,力透杖柄。這鋼鐵彎杖用來放牧效果極好。增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 鐵角套裝(3/3)。", "weaponArmoireGoldWingStaffText": "金翅法杖", - "weaponArmoireGoldWingStaffNotes": "法杖上的金翅振翅高飛,永垂不朽。增加所有屬性各 <%= attrs %> 點。 來自神秘寶箱: 獨立裝備", + "weaponArmoireGoldWingStaffNotes": "法杖上的金翅振翅高飛,永垂不朽。增加所有屬性各 <%= attrs %> 點。 來自神秘寶箱: 獨立裝備。", "weaponArmoireBatWandText": "蝙蝠魔杖", - "weaponArmoireBatWandNotes": "這把魔杖可以把任何任務轉變成一隻小蝙蝠!揮一揮,讓牠們飛得遠遠的。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神祕寶箱: 獨立裝備", + "weaponArmoireBatWandNotes": "這把魔杖可以把任何任務轉變成一隻小蝙蝠!揮一揮,讓牠們飛得遠遠的。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神秘寶箱: 獨立裝備。", "weaponArmoireShepherdsCrookText": "牧羊人手杖", - "weaponArmoireShepherdsCrookNotes": "想要放牧獅鷲的話,選這把牧羊人手杖就對了。增加 <%= con %> 點感知。 來自神秘寶箱: 牧羊人套裝(1/3)", + "weaponArmoireShepherdsCrookNotes": "想要放牧獅鷲的話,選這把牧羊人手杖就對了。增加 <%= con %> 點體質。 來自神秘寶箱: 牧羊人套裝(1/3)。", "weaponArmoireCrystalCrescentStaffText": "弦月水晶法杖", - "weaponArmoireCrystalCrescentStaffNotes": "以法仗的魔力召喚弦月的降臨!增加智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 弦月水晶套裝(3/3)", + "weaponArmoireCrystalCrescentStaffNotes": "以法仗的魔力召喚弦月的降臨!增加智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 弦月水晶套裝(3/3)。", "weaponArmoireBlueLongbowText": "青藍長弓", - "weaponArmoireBlueLongbowNotes": "準備...瞄準...發射! 這把弓的射程非常遠。增加 <%= per %> 點感知、 <%= con %> 點體質及 <%= str %> 點力量。 來自神祕寶箱: 鋼鐵弓箭手套裝(3/3)", + "weaponArmoireBlueLongbowNotes": "準備...瞄準...發射! 這把弓的射程非常遠。增加 <%= per %> 點感知、 <%= con %> 點體質及 <%= str %> 點力量。來自神秘寶箱: 鋼鐵弓箭手套裝(3/3)。", "weaponArmoireGlowingSpearText": "炙光長矛", - "weaponArmoireGlowingSpearNotes": "這支長矛能把任務通通催眠,以便您展開攻擊。增加 <%= str %> 點力量。 來自神祕寶箱: 獨立裝備", + "weaponArmoireGlowingSpearNotes": "這支長矛能把任務通通催眠,以便您展開攻擊。增加 <%= str %> 點力量。來自神秘寶箱: 獨立裝備。", "weaponArmoireBarristerGavelText": "大律師木槌", - "weaponArmoireBarristerGavelNotes": "通通給我肅靜! 增加力量、體質各 <%= attrs %> 點。 來自神秘寶箱: 大律師套裝(3/3)", + "weaponArmoireBarristerGavelNotes": "通通給我肅靜! 增加力量、體質各 <%= attrs %> 點。 來自神秘寶箱: 大律師套裝(3/3)。", "weaponArmoireJesterBatonText": "小丑旗桿", - "weaponArmoireJesterBatonNotes": "揮動旗桿,妙語連珠,讓最複雜的任務都變得一目了然。增加智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 小丑套裝(3/3)", + "weaponArmoireJesterBatonNotes": "揮動旗桿,妙語連珠,讓最複雜的任務都變得一目了然。增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 小丑套裝(3/3)。", "weaponArmoireMiningPickaxText": "挖礦十字鎬", - "weaponArmoireMiningPickaxNotes": "從您的任務山堆中挖出最大量的金幣! 增加 <%= per %> 點感知。 來自神祕寶箱: 挖礦大師套裝(3/3)", + "weaponArmoireMiningPickaxNotes": "從您的任務山堆中挖出最大量的金幣! 增加 <%= per %> 點感知。來自神秘寶箱: 挖礦大師套裝(3/3)。", "weaponArmoireBasicLongbowText": "基礎級長弓", - "weaponArmoireBasicLongbowNotes": "一把被前人傳承下來、仍可使用的弓。增加 <%= str %> 點力量。 來自神祕寶箱: 基礎射手套裝(1/3)", + "weaponArmoireBasicLongbowNotes": "一把被前人傳承下來、仍可使用的弓。增加 <%= str %> 點力量。 來自神秘寶箱: 基礎射手套裝(1/3)。", "weaponArmoireHabiticanDiplomaText": "Habitica 鄉民證書", - "weaponArmoireHabiticanDiplomaNotes": "一個重大成就的認證證書。幹得好喔! 增加 <%= int %> 點智力。 來自神祕寶箱: 畢業生套裝(1/3)", + "weaponArmoireHabiticanDiplomaNotes": "一個重大成就的認證證書。幹得好喔! 增加 <%= int %> 點智力。 來自神秘寶箱: 畢業生套裝(1/3)。", "weaponArmoireSandySpadeText": "黃金沙鏟", - "weaponArmoireSandySpadeNotes": "既能挖掘,亦能裝滿沙子瞄準敵方眼睛的攻擊武器。增加 <%= str %> 點力量。 來自神秘寶箱: 海濱套裝(1/3)", + "weaponArmoireSandySpadeNotes": "既能挖掘,亦能裝滿沙子瞄準敵方眼睛的攻擊武器。增加 <%= str %> 點力量。 來自神秘寶箱: 海濱套裝(1/3)。", "weaponArmoireCannonText": "毀滅大砲", - "weaponArmoireCannonNotes": "用您的精準分析瞄準方位! BANG! 增加 <%= str %> 點力量。 來自神秘寶箱: 炮手套裝(1/3)", + "weaponArmoireCannonNotes": "用您的精準分析瞄準方位! BANG! 增加 <%= str %> 點力量。 來自神秘寶箱: 炮手套裝(1/3)。", "weaponArmoireVermilionArcherBowText": "朱紅射手長弓", - "weaponArmoireVermilionArcherBowNotes": "透過這把耀眼的朱紅長弓,您發射的箭就會像流星一樣閃亮地飛出! 增加 <%= str %> 點力量。 來自神秘寶箱: 朱紅射手套裝(1/3)", + "weaponArmoireVermilionArcherBowNotes": "透過這把耀眼的朱紅長弓,您發射的箭就會像流星一樣閃亮地飛出! 增加 <%= str %> 點力量。 來自神秘寶箱: 朱紅射手套裝(1/3)。", "weaponArmoireOgreClubText": "食人魔狼牙棒", - "weaponArmoireOgreClubNotes": "這根狼牙棒是從食人魔的巢穴裡搶奪到的。增加 <%= str %> 點力量。 來自神秘寶箱: 食人魔套裝(2/3)", + "weaponArmoireOgreClubNotes": "這根狼牙棒是從食人魔的巢穴裡搶奪到的。增加 <%= str %> 點力量。 來自神秘寶箱: 食人魔套裝(2/3)。", "weaponArmoireWoodElfStaffText": "木精靈法杖", - "weaponArmoireWoodElfStaffNotes": "利用古老妖樹掉落的樹枝精製而成的。這根法杖能使您能夠與妖精森林裡的原住民們交流,不分高低貴賤。 增加 <%= int %> 點智力。 來自神秘寶箱: 森林妖精套裝(3/3)", + "weaponArmoireWoodElfStaffNotes": "利用古老妖樹掉落的樹枝精製而成的。這根法杖能使您能夠與妖精森林裡的原住民們交流,不分高低貴賤。 增加 <%= int %> 點智力。 來自神秘寶箱: 森林妖精套裝(3/3)。", "weaponArmoireWandOfHeartsText": "愛心魔杖", - "weaponArmoireWandOfHeartsNotes": "這把魔杖閃耀著溫暖的紅光。它將會賜予您智慧。增加 <%= int %> 點智力。 來自神秘寶箱: 心皇后套裝(3/3)", + "weaponArmoireWandOfHeartsNotes": "這把魔杖閃耀著溫暖的紅光。它將會賜予您智慧。增加 <%= int %> 點智力。 來自神秘寶箱: 心皇后套裝(3/3)。", "weaponArmoireForestFungusStaffText": "真菌林法杖", - "weaponArmoireForestFungusStaffNotes": "利用這根粗糙的法杖去施展真菌魔法吧! 增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神祕寶箱: 獨立裝備", + "weaponArmoireForestFungusStaffNotes": "利用這根粗糙的法杖去施展真菌魔法吧! 增加 <%= int %> 點智力和 <%= per %> 點感知。來自神秘寶箱: 獨立裝備。", "weaponArmoireFestivalFirecrackerText": "慶典爆竹", - "weaponArmoireFestivalFirecrackerNotes": "盡情享受這令人賞心悅目的煙火吧。增加 <%= per %> 點感知。 來自神秘寶箱: 節日慶典套裝(3/3)", + "weaponArmoireFestivalFirecrackerNotes": "盡情享受這令人賞心悅目的煙火吧。增加 <%= per %> 點感知。 來自神秘寶箱: 節日慶典套裝(3/3)。", "weaponArmoireMerchantsDisplayTrayText": "展示托盤", - "weaponArmoireMerchantsDisplayTrayNotes": "用這個閃亮亮的托盤來展示您要出售的精美商品。增加 <%= int %> 點智力。 來自神秘寶箱: 商業大亨套裝(3/3)", + "weaponArmoireMerchantsDisplayTrayNotes": "用這個閃亮亮的托盤來展示您要出售的精美商品。增加 <%= int %> 點智力。 來自神秘寶箱: 商業大亨套裝(3/3)。", "weaponArmoireBattleAxeText": "古老戰斧", - "weaponArmoireBattleAxeNotes": "這把精製鍛造的鐵斧非常適合與您一同對抗最凶猛的敵人以及最艱困的任務。增加 <%= int %> 點智力和 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備", + "weaponArmoireBattleAxeNotes": "這把精製鍛造的鐵斧非常適合與您一同對抗最凶猛的敵人以及最艱困的任務。增加 <%= int %> 點智力和 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備。", "weaponArmoireHoofClippersText": "腳蹄老虎鉗", - "weaponArmoireHoofClippersNotes": "修剪陪您身經百戰的坐騎們的腳蹄,讓牠們在冒險途中保持安全! 增加力量、智力、體質各 <%= attrs %> 點。 來自神秘寶箱: 蹄鐵工套裝(1/3)", + "weaponArmoireHoofClippersNotes": "修剪陪您身經百戰的坐騎們的腳蹄,讓牠們在冒險途中保持安全! 增加力量、智力、體質各 <%= attrs %> 點。 來自神秘寶箱: 蹄鐵工套裝(1/3)。", "weaponArmoireWeaversCombText": "織女的簪釵", - "weaponArmoireWeaversCombNotes": "用這個簪釵將您的織紗捆在一起,作成一塊緊密編織的布料。增加感知 <%= per %> 點和 <%= str %> 點力量。 來自神秘寶箱: 織布工套裝(2/3)", + "weaponArmoireWeaversCombNotes": "用這個簪釵將您的織紗捆在一起,作成一塊緊密編織的布料。增加感知 <%= per %> 點和 <%= str %> 點力量。 來自神秘寶箱: 織布工套裝(2/3)。", "weaponArmoireLamplighterText": "點燈器", - "weaponArmoireLamplighterNotes": "在這長竿上的一端有一根用於點燈的燈芯,另一端則有用於熄滅它們的鐵鉤。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 點燈伕套裝(1/4)", + "weaponArmoireLamplighterNotes": "在這長竿上的一端有一根用於點燈的燈芯,另一端則有用於熄滅它們的鐵鉤。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 點燈伕套裝(1/4)。", "weaponArmoireCoachDriversWhipText": "馬車伕鞭條", - "weaponArmoireCoachDriversWhipNotes": "您的坐騎其實都知道牠們要怎麼做,所以這條鞭子只是裝飾品而已啦 (忽然傳出鞭條的拍打啪噠聲!)。增加 <%= int %> 點智力和 <%= str %> 點力量。 來自神秘寶箱: 馬車伕套裝(3/3)", + "weaponArmoireCoachDriversWhipNotes": "您的坐騎其實都知道牠們要怎麼做,所以這條鞭子只是裝飾品而已啦 (忽然傳出鞭條的拍打啪噠聲!)。增加 <%= int %> 點智力和 <%= str %> 點力量。 來自神秘寶箱: 馬車伕套裝(3/3)。", "weaponArmoireScepterOfDiamondsText": "鑲鑽權杖", - "weaponArmoireScepterOfDiamondsNotes": "這支權杖閃爍著溫暖的紅光,他會提高您的戰鬥意志力。增加 <%= str %> 點力量。 來自神秘寶箱: 鑽石之王套裝(3/4)", + "weaponArmoireScepterOfDiamondsNotes": "這支權杖閃爍著溫暖的紅光,他會提高您的戰鬥意志力。增加 <%= str %> 點力量。 來自神秘寶箱: 鑽石之王套裝(3/4)。", "weaponArmoireFlutteryArmyText": "翩翩飛舞軍團", - "weaponArmoireFlutteryArmyNotes": "這群好鬥的飛蛾已經磨刀霍霍地準備大顯身手,棒強您最泛紅的任務了! 增加體質、智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(3/4)", + "weaponArmoireFlutteryArmyNotes": "這群好鬥的飛蛾已經磨刀霍霍地準備大顯身手,棒強您最泛紅的任務了! 增加體質、智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(3/4)。", "weaponArmoireCobblersHammerText": "鞋匠鐵鎚", - "weaponArmoireCobblersHammerNotes": "這支是專門用於製造皮革的鐵鎚。但它可以在緊要關頭之時給泛紅的每日任務一擊重拳。增加體質、力量各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(2/3)", + "weaponArmoireCobblersHammerNotes": "這支是專門用於製造皮革的鐵鎚。但它可以在緊要關頭之時給泛紅的每日任務一擊重拳。增加體質、力量各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(2/3)。", "weaponArmoireGlassblowersBlowpipeText": "玻璃吹製工的吹管", - "weaponArmoireGlassblowersBlowpipeNotes": "用這根管子將熔化的玻璃吹製成漂亮的花瓶、裝飾品、或是其他酷炫的作品。增加 <%= str %> 點力量。 來自神秘寶箱: 玻璃吹製工套裝(1/4)", + "weaponArmoireGlassblowersBlowpipeNotes": "用這根管子將熔化的玻璃吹製成漂亮的花瓶、裝飾品、或是其他酷炫的作品。增加 <%= str %> 點力量。 來自神秘寶箱: 玻璃吹製工套裝(1/4)。", "weaponArmoirePoisonedGobletText": "劇毒潔淨高腳杯", - "weaponArmoirePoisonedGobletNotes": "用這高腳杯來盛裝劇毒的粉末以及其他危險的藥水。這個杯子會自動消毒轉變成乾淨可口的飲料。增加 <%= int %> 點智力。 來自神秘寶箱: 海盜公主套裝(3/4)", + "weaponArmoirePoisonedGobletNotes": "用這高腳杯來盛裝劇毒的粉末以及其他危險的藥水。這個杯子會自動消毒轉變成乾淨可口的飲料。增加 <%= int %> 點智力。 來自神秘寶箱: 海盜公主套裝(3/4)。", "weaponArmoireJeweledArcherBowText": "射手寶石弓箭", - "weaponArmoireJeweledArcherBowNotes": "這套由黃金與鑽石打造的弓箭能讓您射出的箭以光一般的速度擊落目標。增加 <%= int %> 點智力。 來自神祕寶箱: 射手寶石套裝(3/3)", + "weaponArmoireJeweledArcherBowNotes": "這套由黃金與鑽石打造的弓箭能讓您射出的箭以光一般的速度擊落目標。增加 <%= int %> 點智力。來自神秘寶箱: 射手寶石套裝(3/3)。", "weaponArmoireNeedleOfBookbindingText": "裝訂針", - "weaponArmoireNeedleOfBookbindingNotes": "您將會非常驚訝這書竟然能夠變得這樣堅固。這根裝訂針能刺穿您所有雜務事們的心臟。增加 <%= str %> 點力量。 來自神秘寶箱: 圖書裝訂工套裝(3/4)", + "weaponArmoireNeedleOfBookbindingNotes": "您將會非常驚訝這書竟然能夠變得這樣堅固。這根裝訂針能刺穿您所有雜務事們的心臟。增加 <%= str %> 點力量。 來自神秘寶箱: 圖書裝訂工套裝(3/4)。", "weaponArmoireSpearOfSpadesText": "黑桃長矛", - "weaponArmoireSpearOfSpadesNotes": "這根騎士長矛非常適合用來攻擊您最深紅色的習慣或每日任務。增加 <%= con %> 點體質。 來自神祕寶箱: 黑桃長矛套裝(3/3)", + "weaponArmoireSpearOfSpadesNotes": "這根騎士長矛非常適合用來攻擊您最深紅色的習慣或每日任務。增加 <%= con %> 點體質。 來自神秘寶箱: 黑桃長矛套裝(3/3)。", "weaponArmoireArcaneScrollText": "奧術捲軸", - "weaponArmoireArcaneScrollNotes": "這捲古老的待辦事項清單中到處充滿著源於早已失傳的的奇怪符號和法術。增加 <%= int %> 點智力。 來自神祕寶箱: 抄寫員套裝(3/3)", + "weaponArmoireArcaneScrollNotes": "這捲古老的待辦事項清單中到處充滿著源於早已失傳的的奇怪符號和法術。增加 <%= int %> 點智力。來自神秘寶箱: 抄寫員套裝(3/3)。", "armor": "鎧甲", "armorCapitalized": "鎧甲", "armorBase0Text": "便衣", @@ -455,13 +455,13 @@ "armorSpecialTurkeyArmorGildedText": "鍍金火雞鎧甲", "armorSpecialTurkeyArmorGildedNotes": "將您的東西通通塞進這件歡慶的閃亮亮鎧甲! 無屬性加成。", "armorSpecialYetiText": "雪怪馴化師長袍", - "armorSpecialYetiNotes": "毛茸茸而且非常地兇猛! 增加 <%= con %> 點體質。2013-2014冬季限定版裝備", + "armorSpecialYetiNotes": "毛茸茸而且非常地兇猛! 增加 <%= con %> 點體質。2013-2014冬季限定版裝備。", "armorSpecialSkiText": "滑雪刺客毛皮外套", - "armorSpecialSkiNotes": "口袋裡裝了滿滿的匕首和滑雪道地圖。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備", + "armorSpecialSkiNotes": "口袋裡裝了滿滿的匕首和滑雪道地圖。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備。", "armorSpecialCandycaneText": "糖果手杖長袍", - "armorSpecialCandycaneNotes": "由糖漿和絲綢編織而成。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備", + "armorSpecialCandycaneNotes": "由糖漿和絲綢編織而成。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備。", "armorSpecialSnowflakeText": "雪花長袍", - "armorSpecialSnowflakeNotes": "即使在暴風雪中,這件長袍也能讓您感到保暖。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備", + "armorSpecialSnowflakeNotes": "即使在暴風雪中,這件長袍也能讓您感到保暖。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備。", "armorSpecialBirthdayText": "滑稽派對長袍", "armorSpecialBirthdayNotes": "生日快樂,Habitica!快穿上這些滑稽的派對長袍一同慶祝這美好的一天。無屬性加成。", "armorSpecialBirthday2015Text": "傻氣派對長袍", @@ -477,349 +477,349 @@ "armorSpecialGaymerxText": "彩虹戰士鎧甲", "armorSpecialGaymerxNotes": "為了慶祝GaymerX大會,這件特別的鎧甲飾有炫目多彩、光芒四射的彩虹圖案! GaymerX是一個向所有人開放且支持LGTBQ的遊戲展覽會。無屬性加成。", "armorSpecialSpringRogueText": "時髦紫貓禮服", - "armorSpecialSpringRogueNotes": "無可挑剔的整潔。增加 <%= per %> 點感知。 2014年春季限定版裝備", + "armorSpecialSpringRogueNotes": "無可挑剔的整潔。增加 <%= per %> 點感知。 2014年春季限定版裝備。", "armorSpecialSpringWarriorText": "三葉草鋼鎧甲", - "armorSpecialSpringWarriorNotes": "柔軟如三葉草,堅硬如鋼鐵!增加 <%= con %> 點體質。 2014年春季限定版裝備", + "armorSpecialSpringWarriorNotes": "柔軟如三葉草,堅硬如鋼鐵!增加 <%= con %> 點體質。 2014年春季限定版裝備。", "armorSpecialSpringMageText": "囓齒鼠長袍", - "armorSpecialSpringMageNotes": "老鼠「難波ONE」!增加 <%= int %> 點智力。 2014年春季限定版裝備", + "armorSpecialSpringMageNotes": "老鼠「難波ONE」!增加 <%= int %> 點智力。 2014年春季限定版裝備。", "armorSpecialSpringHealerText": "絨毛小狗長袍", - "armorSpecialSpringHealerNotes": "溫暖又舒適,還能保護您免受傷害。增加 <%= con %> 點體質。 2014年春季限定版裝備", + "armorSpecialSpringHealerNotes": "溫暖又舒適,還能保護您免受傷害。增加 <%= con %> 點體質。 2014年春季限定版裝備。", "armorSpecialSummerRogueText": "海盜長袍", - "armorSpecialSummerRogueNotes": "這些長袍穿起來多麼舒適啊。唷呼!增加 <%= per %> 點感知。 2014年夏季限定版裝備", + "armorSpecialSummerRogueNotes": "這些長袍穿起來多麼舒適啊。唷呼!增加 <%= per %> 點感知。 2014年夏季限定版裝備。", "armorSpecialSummerWarriorText": "流氓長袍", - "armorSpecialSummerWarriorNotes": "虛張聲勢再加上釦子打造而成的長袍。增加 <%= con %> 點體質。 2014年夏季限定版裝備", + "armorSpecialSummerWarriorNotes": "虛張聲勢再加上釦子打造而成的長袍。增加 <%= con %> 點體質。 2014年夏季限定版裝備。", "armorSpecialSummerMageText": "綠寶石燕尾服", - "armorSpecialSummerMageNotes": "(Shimmery Winged Staff of Love and Also Truth) 這件滿是閃亮鱗片的衣服可以將它的穿戴者變成一位法師美人魚!增加<%= int %> 點智力。 2014年夏季限定版裝備", + "armorSpecialSummerMageNotes": "(Shimmery Winged Staff of Love and Also Truth) 這件滿是閃亮鱗片的衣服可以將它的穿戴者變成一位法師美人魚!增加<%= int %> 點智力。 2014年夏季限定版裝備。", "armorSpecialSummerHealerText": "海洋補師燕尾服", - "armorSpecialSummerHealerNotes": "這件滿是閃亮鱗片的衣服可以將它的穿戴者變成一位海洋補師!增加 <%= con %> 點體質。 2014年夏季限定版裝備", + "armorSpecialSummerHealerNotes": "這件滿是閃亮鱗片的衣服可以將它的穿戴者變成一位海洋補師!增加 <%= con %> 點體質。 2014年夏季限定版裝備。", "armorSpecialFallRogueText": "血紅長袍", - "armorSpecialFallRogueNotes": "鮮豔、柔軟、變成吸血鬼! 增加 <%= per %> 點感知。 2014年秋季限定版裝備", + "armorSpecialFallRogueNotes": "鮮豔、柔軟、變成吸血鬼! 增加 <%= per %> 點感知。 2014年秋季限定版裝備。", "armorSpecialFallWarriorText": "科學實驗服", - "armorSpecialFallWarriorNotes": "保護您免於被神秘藥水波濺之苦。增加 <%= con %> 點體質。 2014年秋季限定版裝備", + "armorSpecialFallWarriorNotes": "保護您免於被神秘藥水波濺之苦。增加 <%= con %> 點體質。 2014年秋季限定版裝備。", "armorSpecialFallMageText": "精靈女巫長袍", - "armorSpecialFallMageNotes": "這件長袍有非常多的口袋,能夠裝下大量的蠑螈眼睛和青蛙舌頭。增加 <%= int %> 點智力。 2014年秋季限定版裝備", + "armorSpecialFallMageNotes": "這件長袍有非常多的口袋,能夠裝下大量的蠑螈眼睛和青蛙舌頭。增加 <%= int %> 點智力。 2014年秋季限定版裝備。", "armorSpecialFallHealerText": "紗布薄衣", - "armorSpecialFallHealerNotes": "滿身捆著繃帶進攻!增加 <%= con %> 點感知。 2014年秋季限定版裝備", + "armorSpecialFallHealerNotes": "滿身捆著繃帶進攻!增加 <%= con %> 點感知。 2014年秋季限定版裝備。", "armorSpecialWinter2015RogueText": "冰錐龍獸鎧甲", - "armorSpecialWinter2015RogueNotes": "(Icicle Drake) 這件鎧甲極為刺骨寒冷。然而,當您在冰椎龍獸的聚集地中心發現了無盡的財寶時,一切都值得了。不能說您正在尋找那些數不清的財寶,因為您千真、萬卻、絕對就是那隻傳說中的冰椎龍獸好嗎?別再問問題了!增加 <%= per %> 點感知。 2014-2015冬季限定版裝備", + "armorSpecialWinter2015RogueNotes": "這件鎧甲極為刺骨寒冷。然而,當您在冰椎龍獸的聚集地中心發現了無盡的財寶時,一切都值得了。不能說您正在尋找那些數不清的財寶,因為您千真、萬卻、絕對就是那隻傳說中的冰椎龍獸好嗎?別再問問題了!增加 <%= per %> 點感知。 2014-2015冬季限定版裝備。", "armorSpecialWinter2015WarriorText": "薑餅鎧甲", - "armorSpecialWinter2015WarriorNotes": "窩心又溫暖,直接從火爐裡拿出來的喔!增加 <%= con %> 點體質。 2014-2015冬季限定版裝備", + "armorSpecialWinter2015WarriorNotes": "窩心又溫暖,直接從火爐裡拿出來的喔!增加 <%= con %> 點體質。 2014-2015冬季限定版裝備。", "armorSpecialWinter2015MageText": "北部長袍", - "armorSpecialWinter2015MageNotes": "您可以從這件長袍上看到北方閃閃發亮的光芒。增加 <%= int %> 點智力。 2014-2015 冬季限定版裝備", + "armorSpecialWinter2015MageNotes": "您可以從這件長袍上看到北方閃閃發亮的光芒。增加 <%= int %> 點智力。 2014-2015 冬季限定版裝備。", "armorSpecialWinter2015HealerText": "溜冰套裝", - "armorSpecialWinter2015HealerNotes": "溜冰可是很放鬆的,但若沒有這件衣服來保護您,可就別輕易嘗試喔,小心冰椎龍獸的攻擊!增加 <%= con %> 點體質。 2014-2015冬季限定版裝備", + "armorSpecialWinter2015HealerNotes": "溜冰可是很放鬆的,但若沒有這件衣服來保護您,可就別輕易嘗試喔,小心冰椎龍獸的攻擊!增加 <%= con %> 點體質。 2014-2015冬季限定版裝備。", "armorSpecialSpring2015RogueText": "霹靂長袍", - "armorSpecialSpring2015RogueNotes": "毛茸茸,軟綿綿,而且絕對不會燒起來。增加<%= per %> 點感知。 2015春季限定版裝備", + "armorSpecialSpring2015RogueNotes": "毛茸茸,軟綿綿,而且絕對不會燒起來。增加<%= per %> 點感知。 2015春季限定版裝備。", "armorSpecialSpring2015WarriorText": "警惕鎧甲", - "armorSpecialSpring2015WarriorNotes": "只有最兇猛的狗才有資格這麼毛茸茸。增加<%= con %> 點體質。2015春季限定版裝備", + "armorSpecialSpring2015WarriorNotes": "只有最兇猛的狗才有資格這麼毛茸茸。增加<%= con %> 點體質。2015春季限定版裝備。", "armorSpecialSpring2015MageText": "魔術師的兔子西裝", - "armorSpecialSpring2015MageNotes": "這件燕尾服的燕尾巴跟您的棉尾兔很搭哦!增加<%= int %> 點智力。 2015春季限定版裝備", + "armorSpecialSpring2015MageNotes": "這件燕尾服的燕尾巴跟您的棉尾兔很搭哦!增加<%= int %> 點智力。 2015春季限定版裝備。", "armorSpecialSpring2015HealerText": "欣慰連衣褲", - "armorSpecialSpring2015HealerNotes": "這件柔軟的連衣褲穿起來非常舒適,就像薄荷茶一樣撫慰人心。增加 <%= con %> 點體質。 2015春季限定版裝備", + "armorSpecialSpring2015HealerNotes": "這件柔軟的連衣褲穿起來非常舒適,就像薄荷茶一樣撫慰人心。增加 <%= con %> 點體質。 2015春季限定版裝備。", "armorSpecialSummer2015RogueText": "寶紅燕尾服", - "armorSpecialSummer2015RogueNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一位真正的珊瑚礁叛變者!增加 <%= per %> 點感知。 2015年夏季限定版裝備", + "armorSpecialSummer2015RogueNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一位真正的珊瑚礁叛變者!增加 <%= per %> 點感知。 2015年夏季限定版裝備。", "armorSpecialSummer2015WarriorText": "黃金燕尾服", - "armorSpecialSummer2015WarriorNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一位真正的太陽魚戰士!增加 <%= con %> 點體質。 2015年夏季限定版裝備", + "armorSpecialSummer2015WarriorNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一位真正的太陽魚戰士!增加 <%= con %> 點體質。 2015年夏季限定版裝備。", "armorSpecialSummer2015MageText": "預言家長袍", - "armorSpecialSummer2015MageNotes": "隱藏的力量從於袖口裡陣陣撲出。增加 <%= int %> 點智力。 2015年夏季限定版裝備", + "armorSpecialSummer2015MageNotes": "隱藏的力量從於袖口裡陣陣撲出。增加 <%= int %> 點智力。 2015年夏季限定版裝備。", "armorSpecialSummer2015HealerText": "水手鎧甲", - "armorSpecialSummer2015HealerNotes": "穿上這件鎧甲,大家都會知道您是位誠實的商人水手,永遠不與流氓同流合汙。增加 <%= con %> 點體質。 2015年夏季限定版裝備", + "armorSpecialSummer2015HealerNotes": "穿上這件鎧甲,大家都會知道您是位誠實的商人水手,永遠不與流氓同流合汙。增加 <%= con %> 點體質。 2015年夏季限定版裝備。", "armorSpecialFall2015RogueText": "戰蝠鎧甲", - "armorSpecialFall2015RogueNotes": "飛向戰鬥,蝙蝠無垠!增加 <%= per %> 點感知。 2015年秋季限定版裝備", + "armorSpecialFall2015RogueNotes": "飛向戰鬥,蝙蝠無垠!增加 <%= per %> 點感知。 2015年秋季限定版裝備。", "armorSpecialFall2015WarriorText": "稻草人鎧甲", - "armorSpecialFall2015WarriorNotes": "儘管被塞滿了稻草,這件鎧甲仍是非常沉重的!增加 <%= con %> 點體質。 2015年秋季限定版裝備", + "armorSpecialFall2015WarriorNotes": "儘管被塞滿了稻草,這件鎧甲仍是非常沉重的!增加 <%= con %> 點體質。 2015年秋季限定版裝備。", "armorSpecialFall2015MageText": "穿針引線長袍", - "armorSpecialFall2015MageNotes": "這件鎧甲上的每一針每一線都閃耀著魔法的光輝。增加 <%= int %> 點智力。 2015年秋季限定版裝備", + "armorSpecialFall2015MageNotes": "這件鎧甲上的每一針每一線都閃耀著魔法的光輝。增加 <%= int %> 點智力。 2015年秋季限定版裝備。", "armorSpecialFall2015HealerText": "魔藥師長袍", - "armorSpecialFall2015HealerNotes": "什麼?這當然只是一瓶增加體質屬性點的藥水啊。不會啦,您絕不會變成一隻青蛙!別傻啦。增加 <%= con %> 點體質。 2015年秋季限定版裝備", + "armorSpecialFall2015HealerNotes": "什麼?這當然只是一瓶增加體質屬性點的藥水啊。不會啦,您絕不會變成一隻青蛙!別傻啦。增加 <%= con %> 點體質。 2015年秋季限定版裝備。", "armorSpecialWinter2016RogueText": "可可豆皮甲", - "armorSpecialWinter2016RogueNotes": "這件皮甲讓您變得宜人又暖呼呼。這真的是從可可豆烘焙而成的嗎? 您是絕對不會知道的。增加 <%= per %> 點感知。 2015-2016冬季限定版裝備", + "armorSpecialWinter2016RogueNotes": "這件皮甲讓您變得宜人又暖呼呼。這真的是從可可豆烘焙而成的嗎? 您是絕對不會知道的。增加 <%= per %> 點感知。 2015-2016冬季限定版裝備。", "armorSpecialWinter2016WarriorText": "雪人禮服", - "armorSpecialWinter2016WarriorNotes": "哇! 這件塞滿雪的鎧甲果然非常強大... 在它溶化之前。增加 <%= con %> 點體質。 2015-2016冬季限定版裝備", + "armorSpecialWinter2016WarriorNotes": "哇! 這件塞滿雪的鎧甲果然非常強大... 在它溶化之前。增加 <%= con %> 點體質。 2015-2016冬季限定版裝備。", "armorSpecialWinter2016MageText": "滑雪家毛皮外套", - "armorSpecialWinter2016MageNotes": "最明智的巫師會在寒風直直吹的冬日裡把自己裹得好好的。增加 <%= int %> 點智力。 2015-2016冬季限定版裝備", + "armorSpecialWinter2016MageNotes": "最明智的巫師會在寒風直直吹的冬日裡把自己裹得好好的。增加 <%= int %> 點智力。 2015-2016冬季限定版裝備。", "armorSpecialWinter2016HealerText": "慶典仙女披風", - "armorSpecialWinter2016HealerNotes": "慶典仙女們會將兩側的翅膀把包起來以保護自己。因為祂們將以時速100公里的速度飛越整塊Habitica大陸,並為每個人帶來禮物,並拋撒彩色紙屑。多麼地滑稽啊! 增加 <%= con %> 點體質。 2015-2016冬季限定版裝備", + "armorSpecialWinter2016HealerNotes": "慶典仙女們會將兩側的翅膀把包起來以保護自己。因為祂們將以時速100公里的速度飛越整塊Habitica大陸,並為每個人帶來禮物,並拋撒彩色紙屑。多麼地滑稽啊! 增加 <%= con %> 點體質。 2015-2016冬季限定版裝備。", "armorSpecialSpring2016RogueText": "迷彩犬裝", - "armorSpecialSpring2016RogueNotes": "聰明的小狗都知道在滿是綠色及鮮豔的環境下,選擇明亮的外觀來偽裝自己是聰明的選擇。增加 <%= per %> 點感知。2016年春季限定版裝備", + "armorSpecialSpring2016RogueNotes": "聰明的小狗都知道在滿是綠色及鮮豔的環境下,選擇明亮的外觀來偽裝自己是聰明的選擇。增加 <%= per %> 點感知。2016年春季限定版裝備。", "armorSpecialSpring2016WarriorText": "威武鎖鍊護甲", - "armorSpecialSpring2016WarriorNotes": "儘管您是多麼地渺小,但您非常地勇猛! 增加 <%= con %> 點體質。 2016年春季限定版裝備", + "armorSpecialSpring2016WarriorNotes": "儘管您是多麼地渺小,但您非常地勇猛! 增加 <%= con %> 點體質。 2016年春季限定版裝備。", "armorSpecialSpring2016MageText": "豪華金貓長袍", - "armorSpecialSpring2016MageNotes": "(Grand Malkin Robes) 它色彩斑斕,所以您不會被誤認為是一隻亡靈鼠法師。增加 <%= int %> 點智力。 2016年春季限定版裝備", + "armorSpecialSpring2016MageNotes": "(Grand Malkin Robes) 它色彩斑斕,所以您不會被誤認為是一隻亡靈鼠法師。增加 <%= int %> 點智力。 2016年春季限定版裝備。", "armorSpecialSpring2016HealerText": "毛茸茸野兔馬褲", - "armorSpecialSpring2016HealerNotes": "蹦蹦跳跳跳! 從一座山頭跳到另一座山頭,治療需要的人。增加 <%= con %> 點體質。 2016年春季限定版裝備", + "armorSpecialSpring2016HealerNotes": "蹦蹦跳跳跳! 從一座山頭跳到另一座山頭,治療需要的人。增加 <%= con %> 點體質。 2016年春季限定版裝備。", "armorSpecialSummer2016RogueText": "鰻魚燕尾服", - "armorSpecialSummer2016RogueNotes": "這件帶電的衣服可以將它的穿戴者變成一位真正的鰻魚盜賊! 增加 <%= per %> 點感知。 2016年夏季限定版裝備", + "armorSpecialSummer2016RogueNotes": "這件帶電的衣服可以將它的穿戴者變成一位真正的鰻魚盜賊! 增加 <%= per %> 點感知。 2016年夏季限定版裝備。", "armorSpecialSummer2016WarriorText": "鯊魚燕尾服", - "armorSpecialSummer2016WarriorNotes": "這件摸起來很粗糙的衣服可以將它的穿戴者變成一位真正的鯊魚戰士! 增加 <%= con %> 點體質。 2016年夏季限定版裝備", + "armorSpecialSummer2016WarriorNotes": "這件摸起來很粗糙的衣服可以將它的穿戴者變成一位真正的鯊魚戰士! 增加 <%= con %> 點體質。 2016年夏季限定版裝備。", "armorSpecialSummer2016MageText": "海豚燕尾服", - "armorSpecialSummer2016MageNotes": "這件滑溜溜的衣服可以將它的穿戴者變成一位真正的海豚法師! 增加 <%= int %> 點智力。 2016年夏季限定版裝備", + "armorSpecialSummer2016MageNotes": "這件滑溜溜的衣服可以將它的穿戴者變成一位真正的海豚法師! 增加 <%= int %> 點智力。 2016年夏季限定版裝備。", "armorSpecialSummer2016HealerText": "海馬燕尾服", - "armorSpecialSummer2016HealerNotes": "這件尖尖的衣服可以將它的穿戴者變成一位真正的海馬補師! 增加 <%= con %> 點體質。 2016年夏季限定版裝備", + "armorSpecialSummer2016HealerNotes": "這件尖尖的衣服可以將它的穿戴者變成一位真正的海馬補師! 增加 <%= con %> 點體質。 2016年夏季限定版裝備。", "armorSpecialFall2016RogueText": "黑寡婦鎧甲", - "armorSpecialFall2016RogueNotes": "這件鎧甲上的眼睛正不停地眨眼。增加 <%= per %> 點感知。 2016年秋季限定版裝備", + "armorSpecialFall2016RogueNotes": "這件鎧甲上的眼睛正不停地眨眼。增加 <%= per %> 點感知。 2016年秋季限定版裝備。", "armorSpecialFall2016WarriorText": "史萊姆斑紋鎧甲", - "armorSpecialFall2016WarriorNotes": "怪異地長滿潮濕的苔癬! 增加 <%= con %> 點體質。 2016年秋季限定版裝備", + "armorSpecialFall2016WarriorNotes": "怪異地長滿潮濕的苔癬! 增加 <%= con %> 點體質。 2016年秋季限定版裝備。", "armorSpecialFall2016MageText": "罪惡披風", - "armorSpecialFall2016MageNotes": "當您的斗篷陣陣拍動,您將聽到邪惡的咯咯笑聲。增加 <%= int %> 點智力。 2016年秋季限定版裝備", + "armorSpecialFall2016MageNotes": "當您的斗篷陣陣拍動,您將聽到邪惡的咯咯笑聲。增加 <%= int %> 點智力。 2016年秋季限定版裝備。", "armorSpecialFall2016HealerText": "蛇髮女妖長袍", - "armorSpecialFall2016HealerNotes": "(Gorgon) 這件長袍實際上是由石頭變成的。但為甚麼它穿起來如此的舒適? 增加 <%= con %> 點體質。 2016年秋季限定版裝備", + "armorSpecialFall2016HealerNotes": "(Gorgon) 這件長袍實際上是由石頭變成的。但為甚麼它穿起來如此的舒適? 增加 <%= con %> 點體質。 2016年秋季限定版裝備。", "armorSpecialWinter2017RogueText": "冰霜鎧甲", - "armorSpecialWinter2017RogueNotes": "這件隱密的服裝能夠折射出閃瞎所有任務的光,然後您就可以盡情奪取它們身上的獎品。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備", + "armorSpecialWinter2017RogueNotes": "這件隱密的服裝能夠折射出閃瞎所有任務的光,然後您就可以盡情奪取它們身上的獎品。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備。", "armorSpecialWinter2017WarriorText": "冰棍球鎧甲", - "armorSpecialWinter2017WarriorNotes": "用這件溫暖加棉的鎧甲來展現你們隊伍的精神和力量吧。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備", + "armorSpecialWinter2017WarriorNotes": "用這件溫暖加棉的鎧甲來展現你們隊伍的精神和力量吧。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備。", "armorSpecialWinter2017MageText": "戰狼鎧甲", - "armorSpecialWinter2017MageNotes": "以冬季裡最保暖的羊毛和神祕的冬季戰狼施法編織而成。這樣的長袍可有效隔絕寒風並讓您的大腦隨時保持警醒! 增加 <%= int %> 點智力。 2016-2017冬季限定版裝備", + "armorSpecialWinter2017MageNotes": "以冬季裡最保暖的羊毛和神祕的冬季戰狼施法編織而成。這樣的長袍可有效隔絕寒風並讓您的大腦隨時保持警醒! 增加 <%= int %> 點智力。 2016-2017冬季限定版裝備。", "armorSpecialWinter2017HealerText": "閃爍花瓣鎧甲", - "armorSpecialWinter2017HealerNotes": "雖然很柔軟,但這件花瓣護甲擁有上等的保護能力。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備", + "armorSpecialWinter2017HealerNotes": "雖然很柔軟,但這件花瓣護甲擁有上等的保護能力。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備。", "armorSpecialSpring2017RogueText": "鬼祟野兔禮服", "armorSpecialSpring2017RogueNotes": "這件服裝既柔軟又堅硬,還能夠幫助您在花園中偷偷摸摸地移動。增加 <%= per %> 點感知。 2017年春季限定版裝備。", "armorSpecialSpring2017WarriorText": "可愛利爪鎧甲", - "armorSpecialSpring2017WarriorNotes": "這件花俏的鎧甲就像您精心打扮的夾克一樣閃亮,同時還能提供額外的防禦力。增加 <%= con %> 點體質。 2017年春季限定版裝備", + "armorSpecialSpring2017WarriorNotes": "這件花俏的鎧甲就像您精心打扮的夾克一樣閃亮,同時還能提供額外的防禦力。增加 <%= con %> 點體質。 2017年春季限定版裝備。", "armorSpecialSpring2017MageText": "魔術小犬長袍", - "armorSpecialSpring2017MageNotes": "魔幻的設計,精心挑選的蓬鬆感。增加<%= int %> 點智力。 2017年春季限定版裝備", + "armorSpecialSpring2017MageNotes": "魔幻的設計,精心挑選的蓬鬆感。增加<%= int %> 點智力。 2017年春季限定版裝備。", "armorSpecialSpring2017HealerText": "安詳長袍", - "armorSpecialSpring2017HealerNotes": "這件長袍鬆軟的觸感,不但仍安撫您自己,還可以安撫需要治療的人! 增加 <%= con %> 點體質。 2017年春季限定版裝備", + "armorSpecialSpring2017HealerNotes": "這件長袍鬆軟的觸感,不但仍安撫您自己,還可以安撫需要治療的人! 增加 <%= con %> 點體質。 2017年春季限定版裝備。", "armorSpecialSummer2017RogueText": "海龍燕尾服", - "armorSpecialSummer2017RogueNotes": "這件色彩鮮艷的衣服能讓它的穿戴者變成一隻真正的海龍! 增加 <%= per %> 點感知。 2017年夏季限定版裝備", + "armorSpecialSummer2017RogueNotes": "這件色彩鮮艷的衣服能讓它的穿戴者變成一隻真正的海龍! 增加 <%= per %> 點感知。 2017年夏季限定版裝備。", "armorSpecialSummer2017WarriorText": "沙沙鎧甲", - "armorSpecialSummer2017WarriorNotes": "別被它易碎的外表所騙了,這件鎧甲實際上比鋼鐵還硬。增加 <%= con %> 點體質。 2017年夏季限定版裝備", + "armorSpecialSummer2017WarriorNotes": "別被它易碎的外表所騙了,這件鎧甲實際上比鋼鐵還硬。增加 <%= con %> 點體質。 2017年夏季限定版裝備。", "armorSpecialSummer2017MageText": "漩渦長袍", - "armorSpecialSummer2017MageNotes": "小心别被這件由附魔海水所織成的長袍給濺濕了! 增加 <%= int %> 點智力。 2017年夏季限定版裝備", + "armorSpecialSummer2017MageNotes": "小心别被這件由附魔海水所織成的長袍給濺濕了! 增加 <%= int %> 點智力。 2017年夏季限定版裝備。", "armorSpecialSummer2017HealerText": "銀海燕尾服", - "armorSpecialSummer2017HealerNotes": "這件覆滿銀色鱗片的衣服能讓它的穿戴者變成一位真正的海中補師! 增加 <%= con %> 點體質。 2017年夏季限定版裝備", + "armorSpecialSummer2017HealerNotes": "這件覆滿銀色鱗片的衣服能讓它的穿戴者變成一位真正的海中補師! 增加 <%= con %> 點體質。 2017年夏季限定版裝備。", "armorSpecialFall2017RogueText": "南瓜補丁長袍", - "armorSpecialFall2017RogueNotes": "想玩躲貓貓嗎? 快蹲在傑克南瓜燈的旁邊,這些長袍將能讓您變隱形! 增加 <%= per %> 點感知。 2017年秋季限定版裝備", + "armorSpecialFall2017RogueNotes": "想玩躲貓貓嗎? 快蹲在傑克南瓜燈的旁邊,這些長袍將能讓您變隱形! 增加 <%= per %> 點感知。 2017年秋季限定版裝備。", "armorSpecialFall2017WarriorText": "堅硬美味鎧甲", - "armorSpecialFall2017WarriorNotes": "這件鎧甲會像甜美的糖果硬殼一樣保護您。增加 <%= con %> 點體質。 2017年秋季限定版裝備", + "armorSpecialFall2017WarriorNotes": "這件鎧甲會像甜美的糖果硬殼一樣保護您。增加 <%= con %> 點體質。 2017年秋季限定版裝備。", "armorSpecialFall2017MageText": "假面舞會長袍", - "armorSpecialFall2017MageNotes": "如果不搭配件這件效果十足的寬長長袍,化妝舞會怎麼能說辦得非常成功呢? 增加 <%= int %> 點智力。 2017年秋季限定版裝備", + "armorSpecialFall2017MageNotes": "如果不搭配件這件效果十足的寬長長袍,化妝舞會怎麼能說辦得非常成功呢? 增加 <%= int %> 點智力。 2017年秋季限定版裝備。", "armorSpecialFall2017HealerText": "鬼屋鎧甲", - "armorSpecialFall2017HealerNotes": "您的心宛如一扇敞開的們,您的肩膀宛如一片片能遮風擋雨的屋瓦! 增加 <%= con %> 點體質。 2017年秋季限定版裝備", + "armorSpecialFall2017HealerNotes": "您的心宛如一扇敞開的們,您的肩膀宛如一片片能遮風擋雨的屋瓦! 增加 <%= con %> 點體質。 2017年秋季限定版裝備。", "armorSpecialWinter2018RogueText": "馴鹿服飾", - "armorSpecialWinter2018RogueNotes": "您看起來毛茸茸的,好可愛! 誰不認為您就是慶典後的獎品呢? 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備", + "armorSpecialWinter2018RogueNotes": "您看起來毛茸茸的,好可愛! 誰不認為您就是慶典後的獎品呢? 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備。", "armorSpecialWinter2018WarriorText": "包裝紙鎧甲", - "armorSpecialWinter2018WarriorNotes": "別被這摸起來像紙一樣的感覺所騙了。您絕對不可能撕爛它的啦! 增加 <%= con %> 點體質。 2017-2018冬季限定版裝備", + "armorSpecialWinter2018WarriorNotes": "別被這摸起來像紙一樣的感覺所騙了。您絕對不可能撕爛它的啦! 增加 <%= con %> 點體質。 2017-2018冬季限定版裝備。", "armorSpecialWinter2018MageText": "閃亮亮晚禮服", - "armorSpecialWinter2018MageNotes": "這是一件終極的魔法禮服。增加 <%= int %> 點智力。 2017-2018冬季限定版裝備", + "armorSpecialWinter2018MageNotes": "這是一件終極的魔法禮服。增加 <%= int %> 點智力。 2017-2018冬季限定版裝備。", "armorSpecialWinter2018HealerText": "槲寄生長袍", - "armorSpecialWinter2018HealerNotes": "這些長袍是利用榭寄生和特別的咒語編織而成,能夠讓您在聖誕佳節期間更加快樂。增加 <%= con %> 點體質。 2017-2018冬季限定版裝備", + "armorSpecialWinter2018HealerNotes": "這些長袍是利用榭寄生和特別的咒語編織而成,能夠讓您在聖誕佳節期間更加快樂。增加 <%= con %> 點體質。 2017-2018冬季限定版裝備。", "armorSpecialSpring2018RogueText": "羽毛禮服", - "armorSpecialSpring2018RogueNotes": "這件毛茸茸的黃色服裝能讓敵人誤以為您只是隻無害的鴨子! 增加 <%= per %> 點感知。 2018年春季限定版裝備", + "armorSpecialSpring2018RogueNotes": "這件毛茸茸的黃色服裝能讓敵人誤以為您只是隻無害的鴨子! 增加 <%= per %> 點感知。 2018年春季限定版裝備。", "armorSpecialSpring2018WarriorText": "黎明鎧甲", - "armorSpecialSpring2018WarriorNotes": "這件色彩繽紛的鎧甲適用日出知火鍛造而成。增加 <%= con %> 點體質。 2018年春季限定版裝備", + "armorSpecialSpring2018WarriorNotes": "這件色彩繽紛的鎧甲適用日出知火鍛造而成。增加 <%= con %> 點體質。 2018年春季限定版裝備。", "armorSpecialSpring2018MageText": "鬱金香長袍", - "armorSpecialSpring2018MageNotes": "唯有被這些如絲綢般柔軟的花瓣覆蓋時,您施放的咒語才會能力提升。增加 <%= int %> 點智力。 2018年春季限定版裝備", + "armorSpecialSpring2018MageNotes": "唯有被這些如絲綢般柔軟的花瓣覆蓋時,您施放的咒語才會能力提升。增加 <%= int %> 點智力。 2018年春季限定版裝備。", "armorSpecialSpring2018HealerText": "石榴石鎧甲", - "armorSpecialSpring2018HealerNotes": "讓這耀眼奪目的鎧甲為您的心靈注入治癒之力吧。增加 <%= con %> 點體質。 2018年春季限定版裝備", + "armorSpecialSpring2018HealerNotes": "讓這耀眼奪目的鎧甲為您的心靈注入治癒之力吧。增加 <%= con %> 點體質。 2018年春季限定版裝備。", "armorSpecialSummer2018RogueText": "釣魚者口袋背心", - "armorSpecialSummer2018RogueNotes": "浮標?盒裝釣鉤?備用釣魚線?開鎖器?煙霧彈?無論您的夏日釣魚之旅需要隨身攜帶什麼,這裡就有一個口袋能夠裝它!增加 <%= per %> 點感知。 2018年夏季限量版裝備", + "armorSpecialSummer2018RogueNotes": "浮標?盒裝釣鉤?備用釣魚線?開鎖器?煙霧彈?無論您的夏日釣魚之旅需要隨身攜帶什麼,這裡就有一個口袋能夠裝它!增加 <%= per %> 點感知。 2018年夏季限量版裝備。", "armorSpecialSummer2018WarriorText": "鬥魚尾鎧甲", - "armorSpecialSummer2018WarriorNotes": "用您在水中旋轉與飛舞形成的美麗色彩之漩渦迷倒圍觀者吧! 怎麼會有任何敵手敢攻擊這幅美景?增加 <%= con %> 點體質。 2018年夏季限量版裝備", + "armorSpecialSummer2018WarriorNotes": "用您在水中旋轉與飛舞形成的美麗色彩之漩渦迷倒圍觀者吧! 怎麼會有任何敵手敢攻擊這幅美景?增加 <%= con %> 點體質。 2018年夏季限量版裝備。", "armorSpecialSummer2018MageText": "獅子魚鱗鎖鏈鎧甲", - "armorSpecialSummer2018MageNotes": "惡毒魔法以其隱密而聞名。所以絕對不是指這件鮮艷的鎧甲,因為它傳達給野獸和任務的訊息太明顯了: 你給我注意點! 增加 <%= int %> 點智力。 2018年夏季限量版裝備", + "armorSpecialSummer2018MageNotes": "惡毒魔法以其隱密而聞名。所以絕對不是指這件鮮艷的鎧甲,因為它傳達給野獸和任務的訊息太明顯了: 你給我注意點! 增加 <%= int %> 點智力。 2018年夏季限量版裝備。", "armorSpecialSummer2018HealerText": "人魚帝王長袍", - "armorSpecialSummer2018HealerNotes": "這件蔚藍色的聖袍能顯露出您能在陸地行走的雙腳……好吧,即使是帝王也不能期望他們是完美的。增加 <%= con %> 點體質。 2018年夏季限量版裝備", + "armorSpecialSummer2018HealerNotes": "這件蔚藍色的聖袍能顯露出您能在陸地行走的雙腳……好吧,即使是帝王也不能期望他們是完美的。增加 <%= con %> 點體質。 2018年夏季限量版裝備。", "armorSpecialFall2018RogueText": "「另我」教士服", - "armorSpecialFall2018RogueNotes": "在早上看起來很時髦,在晚上卻又非常舒適且具有保護性。增加 <%= per %> 點感知。 2018年秋季限定版裝備", + "armorSpecialFall2018RogueNotes": "在早上看起來很時髦,在晚上卻又非常舒適且具有保護性。增加 <%= per %> 點感知。 2018年秋季限定版裝備。", "armorSpecialFall2018WarriorText": "彌諾陶洛斯板鏈甲", - "armorSpecialFall2018WarriorNotes": "(Minotaur Platemail) 當您走向冥想迷宮時,快用蹄子敲打舒緩的節奏。增加 <%= con %> 點體質。 2018年秋季限定版裝備", + "armorSpecialFall2018WarriorNotes": "當您走向冥想迷宮時,快用蹄子敲打舒緩的節奏。增加 <%= con %> 點體質。 2018年秋季限定版裝備。", "armorSpecialFall2018MageText": "糖果法師長袍", - "armorSpecialFall2018MageNotes": "這長袍的布料是由魔法糖果所編織而成的!但是,我們建議您不要嘗試吃它們。增加 <%= int %> 點智力。 2018年秋季限定版裝備", + "armorSpecialFall2018MageNotes": "這長袍的布料是由魔法糖果所編織而成的!但是,我們建議您不要嘗試吃它們。增加 <%= int %> 點智力。 2018年秋季限定版裝備。", "armorSpecialFall2018HealerText": "肉食植物長袍", - "armorSpecialFall2018HealerNotes": "它是由植物所製成,但這不代表它是素食主義者。壞習慣們都非常討厭太靠近這件長袍。增加 <%= con %> 點體質。 2018年秋季限定版裝備", + "armorSpecialFall2018HealerNotes": "它是由植物所製成,但這不代表它是素食主義者。壞習慣們都非常討厭太靠近這件長袍。增加 <%= con %> 點體質。 2018年秋季限定版裝備。", "armorSpecialWinter2019RogueText": "一品紅聖誕鎧甲", - "armorSpecialWinter2019RogueNotes": "隨著節慶的到來,到處都可看到綠油油的裝飾,所以沒有人會注意到這裡多出一團灌木叢! 您可以輕易地隱秘進行季節性聚會。增加 <%= per %> 點感知。 2018-2019冬季限定版裝備", + "armorSpecialWinter2019RogueNotes": "隨著節慶的到來,到處都可看到綠油油的裝飾,所以沒有人會注意到這裡多出一團灌木叢! 您可以輕易地隱秘進行季節性聚會。增加 <%= per %> 點感知。 2018-2019冬季限定版裝備。", "armorSpecialWinter2019WarriorText": "酷寒鎧甲", - "armorSpecialWinter2019WarriorNotes": "在激烈的戰鬥中,這件盔甲將能讓您保持涼爽並準備好贏得勝利。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備", + "armorSpecialWinter2019WarriorNotes": "在激烈的戰鬥中,這件盔甲將能讓您保持涼爽並準備好贏得勝利。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備。", "armorSpecialWinter2019MageText": "火焰靈魂長袍", - "armorSpecialWinter2019MageNotes": "這件防火的長袍能在任何的閃光及煙火引起火災時保護您! 增加 <%= int %> 點智力。 2018-2019冬季限定版裝備", + "armorSpecialWinter2019MageNotes": "這件防火的長袍能在任何的閃光及煙火引起火災時保護您! 增加 <%= int %> 點智力。 2018-2019冬季限定版裝備。", "armorSpecialWinter2019HealerText": "午夜長袍", - "armorSpecialWinter2019HealerNotes": "沒有黑暗,就沒有任何光明。 這些深色的長袍將有助於帶來和平與休養,並加速癒合的速度。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備", + "armorSpecialWinter2019HealerNotes": "沒有黑暗,就沒有任何光明。 這些深色的長袍將有助於帶來和平與休養,並加速癒合的速度。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備。", "armorMystery201402Text": "信使長袍", - "armorMystery201402Notes": "閃閃發光又非常耐用,這件長袍上有許多能攜帶信件的口袋。無屬性加成。 2014年2月訂閱者專屬裝備", + "armorMystery201402Notes": "閃閃發光又非常耐用,這件長袍上有許多能攜帶信件的口袋。無屬性加成。 2014年2月訂閱者專屬裝備。", "armorMystery201403Text": "森林步行者板甲", - "armorMystery201403Notes": "這件佈滿青苔的木製板甲會隨著您的動作而彎曲。無屬性加成。 2014年3月訂閱者專屬裝備", + "armorMystery201403Notes": "這件佈滿青苔的木製板甲會隨著您的動作而彎曲。無屬性加成。 2014年3月訂閱者專屬裝備。", "armorMystery201405Text": "愛心火焰", - "armorMystery201405Notes": "當您被火焰纏繞後,沒有任何東西可以傷害您!無屬性加成。 2014年5月訂閱者專屬裝備", + "armorMystery201405Notes": "當您被火焰纏繞後,沒有任何東西可以傷害您!無屬性加成。 2014年5月訂閱者專屬裝備。", "armorMystery201406Text": "章魚長袍", - "armorMystery201406Notes": "這件滑溜溜的長袍能使他的穿戴者能穿越所有物品,即使是最小的裂縫也能輕鬆通過。無屬性加成。 2014年6月訂閱者專屬裝備", + "armorMystery201406Notes": "這件滑溜溜的長袍能使他的穿戴者能穿越所有物品,即使是最小的裂縫也能輕鬆通過。無屬性加成。 2014年6月訂閱者專屬裝備。", "armorMystery201407Text": "海底探險服裝", - "armorMystery201407Notes": "被形容為「太厚啦」或是「老實講,這有點過於笨重」之類的話。但這套服裝仍是任何勇敢的海底探險家最好的朋友。無屬性加成。 2014年7月訂閱者專屬裝備", + "armorMystery201407Notes": "被形容為「太厚啦」或是「老實講,這有點過於笨重」之類的話。但這套服裝仍是任何勇敢的海底探險家最好的朋友。無屬性加成。 2014年7月訂閱者專屬裝備。", "armorMystery201408Text": "太陽長袍", - "armorMystery201408Notes": "這些長袍是由陽光和黃金編織而成。無屬性加成。 2014年8月訂閱者專屬裝備", + "armorMystery201408Notes": "這些長袍是由陽光和黃金編織而成。無屬性加成。 2014年8月訂閱者專屬裝備。", "armorMystery201409Text": "戰鬥者背心", - "armorMystery201409Notes": "一件被枯葉覆蓋住的背心。可以幫助穿戴者偽裝。無屬性加成。 2014年9月訂閱者專屬裝備", + "armorMystery201409Notes": "一件被枯葉覆蓋住的背心。可以幫助穿戴者偽裝。無屬性加成。 2014年9月訂閱者專屬裝備。", "armorMystery201410Text": "哥布林套裝", - "armorMystery201410Notes": "粗糙的觸感、黏黏的外表、非常堅硬的外殼!無屬性加成。 2014年10月訂閱者專屬裝備", + "armorMystery201410Notes": "粗糙的觸感、黏黏的外表、非常堅硬的外殼!無屬性加成。 2014年10月訂閱者專屬裝備。", "armorMystery201412Text": "企鵝套裝", - "armorMystery201412Notes": "您是企鵝!無屬性加成。 2014年12月訂閱者專屬裝備", + "armorMystery201412Notes": "您是企鵝!無屬性加成。 2014年12月訂閱者專屬裝備。", "armorMystery201501Text": "眾星拱月鎧甲", - "armorMystery201501Notes": "銀河的光芒蘊育在這件鎧甲的金屬塊中,可以增強穿戴者的決心。無屬性加成。 2015年1月訂閱者專屬裝備", + "armorMystery201501Notes": "銀河的光芒蘊育在這件鎧甲的金屬塊中,可以增強穿戴者的決心。無屬性加成。 2015年1月訂閱者專屬裝備。", "armorMystery201503Text": "藍寶石鎧甲", - "armorMystery201503Notes": "這種藍色的礦物象徵著吉祥、幸福和永恆的生產力。無屬性加成。 2015年3月訂閱者專屬裝備", + "armorMystery201503Notes": "這種藍色的礦物象徵著吉祥、幸福和永恆的生產力。無屬性加成。 2015年3月訂閱者專屬裝備。", "armorMystery201504Text": "忙碌蜜蜂長袍", - "armorMystery201504Notes": "穿上這件長袍能讓您的生產力像蜜蜂一樣勤快!無屬性加成。 2015年5月訂閱者專屬裝備", + "armorMystery201504Notes": "穿上這件長袍能讓您的生產力像蜜蜂一樣勤快!無屬性加成。 2015年5月訂閱者專屬裝備。", "armorMystery201506Text": "浮潛套裝", - "armorMystery201506Notes": "穿上這件色澤鮮豔的泳裝在珊瑚礁潛水吧! 無屬性加成。 2015年6月訂閱者專屬裝備", + "armorMystery201506Notes": "穿上這件色澤鮮豔的泳裝在珊瑚礁潛水吧! 無屬性加成。 2015年6月訂閱者專屬裝備。", "armorMystery201508Text": "獵豹服飾", - "armorMystery201508Notes": "穿上這件毛茸茸的獵豹服飾就能讓您跑得跟閃光一樣快! 咻! 無屬性加成。 2015年8月訂閱者專屬裝備", + "armorMystery201508Notes": "穿上這件毛茸茸的獵豹服飾就能讓您跑得跟閃光一樣快! 咻! 無屬性加成。 2015年8月訂閱者專屬裝備。", "armorMystery201509Text": "狼人服飾", - "armorMystery201509Notes": "這真的「是」打扮而已,對吧? 無屬性加成。 2015年9月訂閱者專屬裝備", + "armorMystery201509Notes": "這真的「是」打扮而已,對吧? 無屬性加成。 2015年9月訂閱者專屬裝備。", "armorMystery201511Text": "木製鎧甲", - "armorMystery201511Notes": "考慮到這件鎧甲是由魔法木材直接雕刻而成的,這穿起來還真的是意外地舒適。無屬性加成。 2015年11月訂閱者專屬裝備", + "armorMystery201511Notes": "考慮到這件鎧甲是由魔法木材直接雕刻而成的,這穿起來還真的是意外地舒適。無屬性加成。 2015年11月訂閱者專屬裝備。", "armorMystery201512Text": "冷焰鎧甲", - "armorMystery201512Notes": "召喚寒冬冷焰! 無屬性加成。 2015年12月訂閱者專屬裝備", + "armorMystery201512Notes": "召喚寒冬冷焰! 無屬性加成。 2015年12月訂閱者專屬裝備。", "armorMystery201603Text": "幸運禮服", - "armorMystery201603Notes": "這套禮服是由成千上萬個四葉幸運草縫製而成的! 無屬性加成。 2016年3月訂閱者專屬裝備", + "armorMystery201603Notes": "這套禮服是由成千上萬個四葉幸運草縫製而成的! 無屬性加成。 2016年3月訂閱者專屬裝備。", "armorMystery201604Text": "葉片鎧甲", - "armorMystery201604Notes": "您的身邊噴發著許多雖然微小卻非常駭人的葉片。無屬性加成。 2016年4月訂閱者專屬裝備", + "armorMystery201604Notes": "您的身邊噴發著許多雖然微小卻非常駭人的葉片。無屬性加成。 2016年4月訂閱者專屬裝備。", "armorMystery201605Text": "吟遊詩人行軍制服", - "armorMystery201605Notes": "不像傳統參加冒險派對的吟遊詩人因到在地牢到處掠奪而聞名,所有參加Habitica遊行樂隊的吟遊詩人皆是因為舉辦盛大的遊行而聞名。無屬性加成。 2016年5月訂閱者專屬裝備", + "armorMystery201605Notes": "不像傳統參加冒險派對的吟遊詩人因到在地牢到處掠奪而聞名,所有參加Habitica遊行樂隊的吟遊詩人皆是因為舉辦盛大的遊行而聞名。無屬性加成。 2016年5月訂閱者專屬裝備。", "armorMystery201606Text": "海豹人燕尾服", - "armorMystery201606Notes": "(Selkie Tail) 這套禮服閃閃發光,就像海水與河岸激起的泡沫一樣。無屬性加成。 2016年6月訂閱者專屬裝備", + "armorMystery201606Notes": "(Selkie Tail) 這套禮服閃閃發光,就像海水與河岸激起的泡沫一樣。無屬性加成。 2016年6月訂閱者專屬裝備。", "armorMystery201607Text": "海底盜賊鎧甲", - "armorMystery201607Notes": "快用這套能與海底融合為一的潛行鎧甲吧。無屬性加成。 2016年7月訂閱者專屬裝備", + "armorMystery201607Notes": "快用這套能與海底融合為一的潛行鎧甲吧。無屬性加成。 2016年7月訂閱者專屬裝備。", "armorMystery201609Text": "乳牛鎧甲", - "armorMystery201609Notes": "穿上這套舒適的鎧甲與牛群一同休憩吧! 無屬性加成。 2016年9月訂閱者專屬裝備", + "armorMystery201609Notes": "穿上這套舒適的鎧甲與牛群一同休憩吧! 無屬性加成。 2016年9月訂閱者專屬裝備。", "armorMystery201610Text": "妖精鎧甲", - "armorMystery201610Notes": "能讓您像幽靈一樣輕飄飄的神祕鎧甲。無屬性加成。 2016年10月訂閱者專屬裝備", + "armorMystery201610Notes": "能讓您像幽靈一樣輕飄飄的神祕鎧甲。無屬性加成。 2016年10月訂閱者專屬裝備。", "armorMystery201612Text": "胡桃鉗鎧甲", - "armorMystery201612Notes": "穿上這套盛大慶典禮服,就可以以時髦地方式撥開堅果。但小心千萬不要夾到您的手指頭! 無屬性加成。 2016年12月訂閱者專屬裝備", + "armorMystery201612Notes": "穿上這套盛大慶典禮服,就可以以時髦地方式撥開堅果。但小心千萬不要夾到您的手指頭! 無屬性加成。 2016年12月訂閱者專屬裝備。", "armorMystery201703Text": "一閃一閃亮鎧甲", - "armorMystery201703Notes": "雖然這件鎧甲的顏色會讓人想起春天的花瓣,但他卻比鋼鐵還堅硬! 無屬性加成。 2017年3月訂閱者專屬裝備", + "armorMystery201703Notes": "雖然這件鎧甲的顏色會讓人想起春天的花瓣,但他卻比鋼鐵還堅硬! 無屬性加成。 2017年3月訂閱者專屬裝備。", "armorMystery201704Text": "童話鎧甲", - "armorMystery201704Notes": "仙女們用晨露製作了這件鎧甲,可用來捕捉輕晨的第一道曙光的顏色。無屬性加成。 2017年4月訂閱者專屬裝備", + "armorMystery201704Notes": "仙女們用晨露製作了這件鎧甲,可用來捕捉輕晨的第一道曙光的顏色。無屬性加成。 2017年4月訂閱者專屬裝備。", "armorMystery201707Text": "水母法師鎧甲", - "armorMystery201707Notes": "當您正進行海底任務和冒險時,這件鎧甲能幫助您巧聲無息地融入海洋生物之中。無屬性加成。 2017年7月訂閱者專屬裝備", + "armorMystery201707Notes": "當您正進行海底任務和冒險時,這件鎧甲能幫助您巧聲無息地融入海洋生物之中。無屬性加成。 2017年7月訂閱者專屬裝備。", "armorMystery201710Text": "傲慢惡鬼服飾", - "armorMystery201710Notes": "粗糙的觸感、閃亮的外表、非常堅硬的外殼! 無屬性加成。 2017年10月訂閱者專屬裝備", + "armorMystery201710Notes": "粗糙的觸感、閃亮的外表、非常堅硬的外殼! 無屬性加成。 2017年10月訂閱者專屬裝備。", "armorMystery201711Text": "飛毯駕駛員服飾", - "armorMystery201711Notes": "這件舒適的毛衣能讓您穿梭於天空時還能保持溫暖! 無屬性加成。 2017年11月訂閱者專屬裝備", + "armorMystery201711Notes": "這件舒適的毛衣能讓您穿梭於天空時還能保持溫暖! 無屬性加成。 2017年11月訂閱者專屬裝備。", "armorMystery201712Text": "蠟燭法師鎧甲", - "armorMystery201712Notes": "這件魔法鎧甲照射出的光和熱會能溫暖您的心,但卻不會同時燒傷您! 無屬性加成。 2017年12月訂閱者專屬裝備", + "armorMystery201712Notes": "這件魔法鎧甲照射出的光和熱會能溫暖您的心,但卻不會同時燒傷您! 無屬性加成。 2017年12月訂閱者專屬裝備。", "armorMystery201802Text": "蟲粉鎧甲", - "armorMystery201802Notes": "這件閃亮亮的鎧甲將反射出您心中的力量,並注入給附近每一位需要鼓勵的Habitica鄉民。無屬性加成。 2018年2月訂閱者專屬裝備", + "armorMystery201802Notes": "這件閃亮亮的鎧甲將反射出您心中的力量,並注入給附近每一位需要鼓勵的Habitica鄉民。無屬性加成。 2018年2月訂閱者專屬裝備。", "armorMystery201806Text": "驚艷琵琶魚燕尾服", - "armorMystery201806Notes": "這件彎彎曲曲的燕尾服以能夠在深海中照亮前路為特色。無屬性加成。 2018年6月訂閱者專屬裝備", + "armorMystery201806Notes": "這件彎彎曲曲的燕尾服以能夠在深海中照亮前路為特色。無屬性加成。 2018年6月訂閱者專屬裝備。", "armorMystery201807Text": "大海蛇燕尾服", - "armorMystery201807Notes": "這件強大的燕尾服能驅使您快速漫遊於深海裡! 無屬性加成。 2018年7月訂閱者專屬裝備", + "armorMystery201807Notes": "這件強大的燕尾服能驅使您快速漫遊於深海裡! 無屬性加成。 2018年7月訂閱者專屬裝備。", "armorMystery201808Text": "熔岩巨龍鎧甲", - "armorMystery201808Notes": "這副鎧甲是以難以捉摸(而且非常燙)的熔岩巨龍身上的蛻皮製作而成。無屬性加成。 2018年8月訂閱者專屬裝備", + "armorMystery201808Notes": "這副鎧甲是以難以捉摸(而且非常燙)的熔岩巨龍身上的蛻皮製作而成。無屬性加成。 2018年8月訂閱者專屬裝備。", "armorMystery201809Text": "秋葉鎧甲", - "armorMystery201809Notes": "您不僅是一片既微小又令人恐懼的葉片,您也正在炫耀這個季節裡最美麗的顏色。無屬性加成。 2018年9月訂閱者專屬裝備", + "armorMystery201809Notes": "您不僅是一片既微小又令人恐懼的葉片,您也正在炫耀這個季節裡最美麗的顏色。無屬性加成。 2018年9月訂閱者專屬裝備。", "armorMystery201810Text": "黑暗森林長袍", - "armorMystery201810Notes": "這件長袍穿起來非常溫暖,能抵擋來自幽靈王國傳來的陰森森寒冷氣息。無屬性加成。 2018年10月訂閱者專屬裝備", + "armorMystery201810Notes": "這件長袍穿起來非常溫暖,能抵擋來自幽靈王國傳來的陰森森寒冷氣息。無屬性加成。 2018年10月訂閱者專屬裝備。", "armorMystery301404Text": "蒸汽龐克風套裝", - "armorMystery301404Notes": "精巧又瀟灑,哇嗚! 無屬性加成。 3015年2月訂閱者專屬裝備", + "armorMystery301404Notes": "精巧又瀟灑,哇嗚! 無屬性加成。 3015年2月訂閱者專屬裝備。", "armorMystery301703Text": "蒸汽龐克風孔雀禮服", - "armorMystery301703Notes": "這件優雅的禮服極其適合於最奢華的慶典中穿上! 無屬性加成。 3017年3月訂閱者專屬裝備", + "armorMystery301703Notes": "這件優雅的禮服極其適合於最奢華的慶典中穿上! 無屬性加成。 3017年3月訂閱者專屬裝備。", "armorMystery301704Text": "蒸汽龐克風野雉洋裝", - "armorMystery301704Notes": "這件高雅的服飾最適合在夜晚外出或於白天在工作室裡工作時穿上! 無屬性加成。 3017年4月訂閱者專屬裝備", + "armorMystery301704Notes": "這件高雅的服飾最適合在夜晚外出或於白天在工作室裡工作時穿上! 無屬性加成。 3017年4月訂閱者專屬裝備。", "armorArmoireLunarArmorText": "治癒之月鎧甲", - "armorArmoireLunarArmorNotes": "月光會使您變得更堅強與聰明。增加 <%= str %> 點力量和 <%= int %> 點智力。 來自神祕寶箱: 治癒之月套裝(2/3)", + "armorArmoireLunarArmorNotes": "月光會使您變得更堅強與聰明。增加 <%= str %> 點力量和 <%= int %> 點智力。來自神秘寶箱: 治癒之月套裝(2/3)。", "armorArmoireGladiatorArmorText": "角鬥士鎧甲", - "armorArmoireGladiatorArmorNotes": "想成為一名夠格的角鬥士,您不僅要夠狡猾⋯⋯還要強到破表。增加 <%= per %> 點感知和 <%= str %> 點力量。 來自神祕寶箱: 角鬥士套裝(2/3)", + "armorArmoireGladiatorArmorNotes": "想成為一名夠格的角鬥士,您不僅要夠狡猾⋯⋯還要強到破表。增加 <%= per %> 點感知和 <%= str %> 點力量。來自神秘寶箱: 角鬥士套裝(2/3)。", "armorArmoireRancherRobesText": "牛仔長袍", - "armorArmoireRancherRobesNotes": "穿著這件奇妙的牛仔長袍,圈住您的坐騎,套上您的寵物!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。 來自神祕寶箱: 牛仔套裝(2/3)", + "armorArmoireRancherRobesNotes": "穿著這件奇妙的牛仔長袍,圈住您的坐騎,套上您的寵物!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。來自神秘寶箱: 牛仔套裝(2/3)。", "armorArmoireGoldenTogaText": "黃金托加長袍", - "armorArmoireGoldenTogaNotes": "這件閃閃發光的托加長袍只有真英雄才夠格穿戴。增加力量、體質各 <%= attrs %> 點。 來自神祕寶箱: 黃金托加長袍套裝(1/3)", + "armorArmoireGoldenTogaNotes": "這件閃閃發光的托加長袍只有真英雄才夠格穿戴。增加力量、體質各 <%= attrs %> 點。來自神秘寶箱: 黃金托加長袍套裝(1/3)。", "armorArmoireHornedIronArmorText": "鐵角鎧甲", - "armorArmoireHornedIronArmorNotes": "純鋼打造,無懈可擊!增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神祕寶箱: 鐵角套裝(2/3)", + "armorArmoireHornedIronArmorNotes": "純鋼打造,無懈可擊!增加 <%= con %> 點體質和 <%= per %> 點感知。來自神秘寶箱: 鐵角套裝(2/3)。", "armorArmoirePlagueDoctorOvercoatText": "瘟疫醫師大衣", - "armorArmoirePlagueDoctorOvercoatNotes": "怠惰瘟疫主治醫生專用的正式大衣。增加 <%= int %> 點智力、 <%= str %> 點力量和 <%= con %> 點體質。 來自神祕寶箱: 瘟疫醫師套裝(3/3)", + "armorArmoirePlagueDoctorOvercoatNotes": "怠惰瘟疫主治醫生專用的正式大衣。增加 <%= int %> 點智力、 <%= str %> 點力量和 <%= con %> 點體質。來自神秘寶箱: 瘟疫醫師套裝(3/3)。", "armorArmoireShepherdRobesText": "牧羊人長袍", - "armorArmoireShepherdRobesNotes": "布料材質涼爽、透氣,非常適合在沙漠中的大熱天放牧獅鷲。增加力量、感知各 <%= attrs %> 點。 來自神秘寶箱: 牧羊人套裝(2/3)", + "armorArmoireShepherdRobesNotes": "布料材質涼爽、透氣,非常適合在沙漠中的大熱天放牧獅鷲。增加力量、感知各 <%= attrs %> 點。 來自神秘寶箱: 牧羊人套裝(2/3)。", "armorArmoireRoyalRobesText": "皇家長袍", - "armorArmoireRoyalRobesNotes": "偉大的統治者,吾王萬歲!增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 皇家套裝(3/3)", + "armorArmoireRoyalRobesNotes": "偉大的統治者,吾王萬歲!增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 皇家套裝(3/3)。", "armorArmoireCrystalCrescentRobesText": "玄月水晶長袍", - "armorArmoireCrystalCrescentRobesNotes": "這件魔法長袍會在夜裡發出淡淡冷光。增加體質、感知各 <%= attrs %> 點。 來自神秘寶箱: 玄月水晶套裝 (2/3)", + "armorArmoireCrystalCrescentRobesNotes": "這件魔法長袍會在夜裡發出淡淡冷光。增加體質、感知各 <%= attrs %> 點。 來自神秘寶箱: 玄月水晶套裝 (2/3)。", "armorArmoireDragonTamerArmorText": "馴龍師鎧甲", - "armorArmoireDragonTamerArmorNotes": "這件堅硬的鎧甲可以抵擋熊熊烈火。增加 <%= con %> 點體質。 來自神祕寶箱: 馴龍師套裝(3/3)", + "armorArmoireDragonTamerArmorNotes": "這件堅硬的鎧甲可以抵擋熊熊烈火。增加 <%= con %> 點體質。來自神秘寶箱: 馴龍師套裝(3/3)。", "armorArmoireBarristerRobesText": "大律師長袍", - "armorArmoireBarristerRobesNotes": "嚴肅! 莊嚴! 增加 <%= con %> 點體質。 來自神祕寶箱: 大律師套裝(2/3)", + "armorArmoireBarristerRobesNotes": "嚴肅! 莊嚴! 增加 <%= con %> 點體質。來自神秘寶箱: 大律師套裝(2/3)。", "armorArmoireJesterCostumeText": "小丑服飾", - "armorArmoireJesterCostumeNotes": "噠拉噠拉! 己管這件衣服看起來很呵呵,但您絕對不是傻子。增加 <%= int %> 點智力。 來自神祕寶箱: 小丑套裝(2/3)", + "armorArmoireJesterCostumeNotes": "噠拉噠拉! 己管這件衣服看起來很呵呵,但您絕對不是傻子。增加 <%= int %> 點智力。 來自神秘寶箱: 小丑套裝(2/3)。", "armorArmoireMinerOverallsText": "礦工工作服", - "armorArmoireMinerOverallsNotes": "雖然它看起來很破爛,但因為被附魔過所以就算在塵土飛揚的環境也可以一塵不染。 增加 <%= con %> 點體質。 來自神祕寶箱: 挖礦大師套裝(2/3)", + "armorArmoireMinerOverallsNotes": "雖然它看起來很破爛,但因為被附魔過所以就算在塵土飛揚的環境也可以一塵不染。 增加 <%= con %> 點體質。 來自神秘寶箱: 挖礦大師套裝(2/3)。", "armorArmoireBasicArcherArmorText": "基礎射手鎧甲", - "armorArmoireBasicArcherArmorNotes": "這件能夠偽裝的背心能使您穿越森林時不被發現。增加 <%= per %> 點感知。 來自神祕寶箱: 基礎射手套裝(2/3)", + "armorArmoireBasicArcherArmorNotes": "這件能夠偽裝的背心能使您穿越森林時不被發現。增加 <%= per %> 點感知。 來自神秘寶箱: 基礎射手套裝(2/3)。", "armorArmoireGraduateRobeText": "畢業生長袍", - "armorArmoireGraduateRobeNotes": "恭喜恭喜! 這件沉重的長袍能承載您累積下來的大量知識。增加 <%= int %> 點智力。 來自神祕寶箱: 畢業生套裝(2/3)", + "armorArmoireGraduateRobeNotes": "恭喜恭喜! 這件沉重的長袍能承載您累積下來的大量知識。增加 <%= int %> 點智力。 來自神秘寶箱: 畢業生套裝(2/3)。", "armorArmoireStripedSwimsuitText": "紅條泳裝", - "armorArmoireStripedSwimsuitNotes": "有甚麼能比在海灘上與海洋怪獸戰鬥還有趣呢? 增加 <%= con %> 點體質。 來自神祕寶箱: 海濱套裝(2/3)", + "armorArmoireStripedSwimsuitNotes": "有甚麼能比在海灘上與海洋怪獸戰鬥還有趣呢? 增加 <%= con %> 點體質。 來自神秘寶箱: 海濱套裝(2/3)。", "armorArmoireCannoneerRagsText": "砲手破衣", - "armorArmoireCannoneerRagsNotes": "這件破舊的衣服實際上比表面上還結實許多。增加 <%= con %> 點體質。 來自神祕寶箱: 砲手套裝(2/3)", + "armorArmoireCannoneerRagsNotes": "這件破舊的衣服實際上比表面上還結實許多。增加 <%= con %> 點體質。 來自神秘寶箱: 砲手套裝(2/3)。", "armorArmoireFalconerArmorText": "獵鷹者鎧甲", - "armorArmoireFalconerArmorNotes": "用這件堅硬的鎧甲遠離鷹爪的攻擊! 增加 <%= con %> 點體質。 來自神祕寶箱: 獵鷹者套裝(1/3)", + "armorArmoireFalconerArmorNotes": "用這件堅硬的鎧甲遠離鷹爪的攻擊! 增加 <%= con %> 點體質。 來自神秘寶箱: 獵鷹者套裝(1/3)。", "armorArmoireVermilionArcherArmorText": "朱紅射手鎧甲", - "armorArmoireVermilionArcherArmorNotes": "這件鎧甲是用特別的附魔朱紅金屬製成,他將帶給您最少的拘束、最大化的保護、和天賦! 增加 <%= per %> 點感知。 來自神祕寶箱: 朱紅射手套裝(2/3)", + "armorArmoireVermilionArcherArmorNotes": "這件鎧甲是用特別的附魔朱紅金屬製成,他將帶給您最少的拘束、最大化的保護、和天賦! 增加 <%= per %> 點感知。 來自神秘寶箱: 朱紅射手套裝(2/3)。", "armorArmoireOgreArmorText": "食人魔鎧甲", - "armorArmoireOgreArmorNotes": "這件鎧甲效仿了食人魔堅硬的皮膚,但它的內襯卻是用羊毛製成的,可以任人穿得更為舒適! 增加 <%= con %> 點體質。 來自神祕寶箱: 食人魔套裝(3/3)", + "armorArmoireOgreArmorNotes": "這件鎧甲效仿了食人魔堅硬的皮膚,但它的內襯卻是用羊毛製成的,可以任人穿得更為舒適! 增加 <%= con %> 點體質。 來自神秘寶箱: 食人魔套裝(3/3)。", "armorArmoireIronBlueArcherArmorText": "弓箭手水藍鐵鎧甲", - "armorArmoireIronBlueArcherArmorNotes": "這件鎧甲能保護您在戰場中免受飛來的弓箭所帶來的傷害! 增加 <%= str %> 點力量。 來自神祕寶箱: 鋼鐵弓箭手套裝(2/3)", + "armorArmoireIronBlueArcherArmorNotes": "這件鎧甲能保護您在戰場中免受飛來的弓箭所帶來的傷害! 增加 <%= str %> 點力量。 來自神秘寶箱: 鋼鐵弓箭手套裝(2/3)。", "armorArmoireRedPartyDressText": "赤紅派對洋裝", - "armorArmoireRedPartyDressNotes": "您很強壯、堅強、聰明、又時尚! 增加力量、體質、智力各 <%= attrs %> 點。 來自神祕寶箱: 赤紅蝴蝶結套裝(2/2)", + "armorArmoireRedPartyDressNotes": "您很強壯、堅強、聰明、又時尚! 增加力量、體質、智力各 <%= attrs %> 點。 來自神秘寶箱: 赤紅蝴蝶結套裝(2/2)。", "armorArmoireWoodElfArmorText": "木精靈皮甲", - "armorArmoireWoodElfArmorNotes": "這件皮甲上的樹皮和樹葉能讓您在森林中提供持久的偽裝。增加 <%= per %> 點感知。 來自神祕寶箱: 森林妖精套裝(2/3)", + "armorArmoireWoodElfArmorNotes": "這件皮甲上的樹皮和樹葉能讓您在森林中提供持久的偽裝。增加 <%= per %> 點感知。 來自神秘寶箱: 森林妖精套裝(2/3)。", "armorArmoireRamFleeceRobesText": "牡羊毛長袍", - "armorArmoireRamFleeceRobesNotes": "這件長袍能讓您在最猛烈的暴風雪中保持溫暖不失溫。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 牡羊野蠻人套裝(2/3)", + "armorArmoireRamFleeceRobesNotes": "這件長袍能讓您在最猛烈的暴風雪中保持溫暖不失溫。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 牡羊野蠻人套裝(2/3)。", "armorArmoireGownOfHeartsText": "愛心禮服", - "armorArmoireGownOfHeartsNotes": "這套禮服處處皆有飾邊! 帶這還不是全部,他還會增加您內心的堅韌。增加 <%= con %> 點體質。 來自神祕寶箱: 心皇后套裝(2/3)", + "armorArmoireGownOfHeartsNotes": "這套禮服處處皆有飾邊! 帶這還不是全部,他還會增加您內心的堅韌。增加 <%= con %> 點體質。 來自神秘寶箱: 心皇后套裝(2/3)。", "armorArmoireMushroomDruidArmorText": "德魯伊蘑菇鎧甲", - "armorArmoireMushroomDruidArmorNotes": "Mushroom Druid Armor。 這套長著蘑菇的棕色木鎧甲能夠讓您聽見各種森林中生物的低語聲。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神祕寶箱: 德魯伊蘑菇套裝(2/3)", + "armorArmoireMushroomDruidArmorNotes": "Mushroom Druid Armor。 這套長著蘑菇的棕色木鎧甲能夠讓您聽見各種森林中生物的低語聲。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 德魯伊蘑菇套裝(2/3)。", "armorArmoireGreenFestivalYukataText": "慶典草綠浴衣", - "armorArmoireGreenFestivalYukataNotes": "這件輕盈的浴衣能讓您爽快地享受任何節日慶典。增加體質、感知各 <%= attrs %> 點。 來自神祕寶箱: 節日慶典套裝(1/3)", + "armorArmoireGreenFestivalYukataNotes": "這件輕盈的浴衣能讓您爽快地享受任何節日慶典。增加體質、感知各 <%= attrs %> 點。 來自神秘寶箱: 節日慶典套裝(1/3)。", "armorArmoireMerchantTunicText": "束腰外衣", - "armorArmoireMerchantTunicNotes": "這件束腰外衣的大袖子最適合將您賺到的錢塞在裡面! 增加 <%= per %> 點感知。 來自神祕寶箱: 商業大亨套裝(2/3)", + "armorArmoireMerchantTunicNotes": "這件束腰外衣的大袖子最適合將您賺到的錢塞在裡面! 增加 <%= per %> 點感知。 來自神秘寶箱: 商業大亨套裝(2/3)。", "armorArmoireVikingTunicText": "維京海盜束腰大衣", - "armorArmoireVikingTunicNotes": "這件溫暖的羊毛上衣藏有一件披風,即使被海洋中的強風吹拂,也會覺得格外地舒適。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 維京海盜套裝(1/3)", + "armorArmoireVikingTunicNotes": "這件溫暖的羊毛上衣藏有一件披風,即使被海洋中的強風吹拂,也會覺得格外地舒適。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 維京海盜套裝(1/3)。", "armorArmoireSwanDancerTutuText": "天鵝湖芭蕾舞裙", - "armorArmoireSwanDancerTutuNotes": "當您穿著這件華麗的芭蕾舞裙旋轉揮舞時,您也將會與風一同扶搖直上飛到九霄雲外! 增加智力、力量各 <%= attrs %> 點。 來自神祕寶箱: 天鵝湖舞者套裝(2/3)", + "armorArmoireSwanDancerTutuNotes": "當您穿著這件華麗的芭蕾舞裙旋轉揮舞時,您也將會與風一同扶搖直上飛到九霄雲外! 增加智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 天鵝湖舞者套裝(2/3)。", "armorArmoireAntiProcrastinationArmorText": "反怠惰鎧甲", - "armorArmoireAntiProcrastinationArmorNotes": "浸泡於古老的增長效率魔法之下,這件鐵製鎧甲能帶給您額外的力量來對抗您的任務。增加 <%= str %> 點力量。 來自神祕寶箱: 反怠惰套裝(2/3)", + "armorArmoireAntiProcrastinationArmorNotes": "浸泡於古老的增長效率魔法之下,這件鐵製鎧甲能帶給您額外的力量來對抗您的任務。增加 <%= str %> 點力量。 來自神秘寶箱: 反怠惰套裝(2/3)。", "armorArmoireYellowPartyDressText": "金黃派對洋裝", - "armorArmoireYellowPartyDressNotes": "您很敏銳、堅強、聰明又時尚! 增加感知、力量、智力各 <%= attrs %> 點。 來自神祕寶箱: 金黃蝴蝶結套裝(2/2)", + "armorArmoireYellowPartyDressNotes": "您很敏銳、堅強、聰明又時尚! 增加感知、力量、智力各 <%= attrs %> 點。 來自神秘寶箱: 金黃蝴蝶結套裝(2/2)。", "armorArmoireFarrierOutfitText": "蹄鐵工服飾", - "armorArmoireFarrierOutfitNotes": "這件結實的工作服能讓您忍受處於最骯髒的馬廄。增加智力、感知、體質各 <%= attrs %> 點。 來自神祕寶箱: 蹄鐵工套裝(2/3)", + "armorArmoireFarrierOutfitNotes": "這件結實的工作服能讓您忍受處於最骯髒的馬廄。增加智力、感知、體質各 <%= attrs %> 點。 來自神秘寶箱: 蹄鐵工套裝(2/3)。", "armorArmoireCandlestickMakerOutfitText": "蠟燭台製作師服飾", - "armorArmoireCandlestickMakerOutfitNotes": "這件結實的衣服可以讓您在製作蠟燭的同時不被高溫的蠟所燙傷。增加 <%= con %> 點體質。 來自神祕寶箱: 蠟燭台製作師套裝(1/3)", + "armorArmoireCandlestickMakerOutfitNotes": "這件結實的衣服可以讓您在製作蠟燭的同時不被高溫的蠟所燙傷。增加 <%= con %> 點體質。 來自神秘寶箱: 蠟燭台製作師套裝(1/3)。", "armorArmoireWovenRobesText": "梭織長袍", - "armorArmoireWovenRobesNotes": "穿上這件多彩的長袍,驕傲地秀一下您的編織作品吧! 增加 <%= con %> 點體質和 <%= int %> 點智力。 來自神祕寶箱: 織布工套裝(1/3)", + "armorArmoireWovenRobesNotes": "穿上這件多彩的長袍,驕傲地秀一下您的編織作品吧! 增加 <%= con %> 點體質和 <%= int %> 點智力。 來自神秘寶箱: 織布工套裝(1/3)。", "armorArmoireLamplightersGreatcoatText": "點燈伕長大衣", - "armorArmoireLamplightersGreatcoatNotes": "這件厚重的羊毛大衣能抵抗最嚴寒的冬夜! 增加 <%= per %> 點感知。 來自神秘寶箱: 點燈伕套裝(2/4)", + "armorArmoireLamplightersGreatcoatNotes": "這件厚重的羊毛大衣能抵抗最嚴寒的冬夜! 增加 <%= per %> 點感知。 來自神秘寶箱: 點燈伕套裝(2/4)。", "armorArmoireCoachDriverLiveryText": "馬車伕制服", - "armorArmoireCoachDriverLiveryNotes": "這件厚重的長大衣能讓您在駕車途中免受天氣的干擾。此外,它還看起來非常時髦亮麗! 增加 <%= str %> 點力量。 來自神秘寶箱: 馬車伕套裝(1/3)", + "armorArmoireCoachDriverLiveryNotes": "這件厚重的長大衣能讓您在駕車途中免受天氣的干擾。此外,它還看起來非常時髦亮麗! 增加 <%= str %> 點力量。 來自神秘寶箱: 馬車伕套裝(1/3)。", "armorArmoireRobeOfDiamondsText": "鑲鑽長袍", - "armorArmoireRobeOfDiamondsNotes": "這件皇家長袍不僅讓您看起很高尚,還能讓您看見其他人的典雅。增加 <%= per %> 點感知。 來自神秘寶箱: 鑽石王者套裝(1/4)", + "armorArmoireRobeOfDiamondsNotes": "這件皇家長袍不僅讓您看起很高尚,還能讓您看見其他人的典雅。增加 <%= per %> 點感知。 來自神秘寶箱: 鑽石王者套裝(1/4)。", "armorArmoireFlutteryFrockText": "翩翩飛舞連衣裙", - "armorArmoireFlutteryFrockNotes": "這件輕柔通風的長裙有寬大的裙襬,蝴蝶們可能會誤以為這是巨大的花朵! 增加體質、感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(1/4)", + "armorArmoireFlutteryFrockNotes": "這件輕柔通風的長裙有寬大的裙襬,蝴蝶們可能會誤以為這是巨大的花朵! 增加體質、感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(1/4)。", "armorArmoireCobblersCoverallsText": "鞋匠工作服", - "armorArmoireCobblersCoverallsNotes": "這件結實的連體工作服上有很多口袋,可以裝工具、皮革廢料和其他有用的東西! 增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(1/3)", + "armorArmoireCobblersCoverallsNotes": "這件結實的連體工作服上有很多口袋,可以裝工具、皮革廢料和其他有用的東西! 增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(1/3)。", "armorArmoireGlassblowersCoverallsText": "玻璃吹製工工作服", - "armorArmoireGlassblowersCoverallsNotes": "當您在用融化的熱玻璃製作偉大巨作時,這件工作服將能妥善地保護您。增加 <%= con %> 點體質。 來自神秘寶箱: 玻璃吹製工套裝(2/4)", + "armorArmoireGlassblowersCoverallsNotes": "當您在用融化的熱玻璃製作偉大巨作時,這件工作服將能妥善地保護您。增加 <%= con %> 點體質。 來自神秘寶箱: 玻璃吹製工套裝(2/4)。", "armorArmoireBluePartyDressText": "水藍派對洋裝", - "armorArmoireBluePartyDressNotes": "您很靈敏、堅韌、聰明又時尚! 增加感知、力量、體質各 <%= attrs %> 點。 來自神祕寶箱: 水藍蝴蝶結套裝(2/2)", + "armorArmoireBluePartyDressNotes": "您很靈敏、堅韌、聰明又時尚! 增加感知、力量、體質各 <%= attrs %> 點。 來自神秘寶箱: 水藍蝴蝶結套裝(2/2)。", "armorArmoirePiraticalPrincessGownText": "海盜公主禮服", - "armorArmoirePiraticalPrincessGownNotes": "這件高檔的禮服有很多口袋能裝許多武器和您的戰利品! 增加 <%= per %> 點感知。 來自神秘寶箱: 海盜公主套裝(2/4)", + "armorArmoirePiraticalPrincessGownNotes": "這件高檔的禮服有很多口袋能裝許多武器和您的戰利品! 增加 <%= per %> 點感知。 來自神秘寶箱: 海盜公主套裝(2/4)。", "armorArmoireJeweledArcherArmorText": "射手寶石鎧甲", - "armorArmoireJeweledArcherArmorNotes": "這件精心打造的鎧甲能讓您免於受到飛彈或是讓人誤入歧途的深紅色的每日任務所威脅! 增加 <%= con %> 點體質。 來自神祕寶箱: 射手寶石套裝(2/3)", + "armorArmoireJeweledArcherArmorNotes": "這件精心打造的鎧甲能讓您免於受到飛彈或是讓人誤入歧途的深紅色的每日任務所威脅! 增加 <%= con %> 點體質。 來自神秘寶箱: 射手寶石套裝(2/3)。", "armorArmoireCoverallsOfBookbindingText": "圖書裝訂工工作服", - "armorArmoireCoverallsOfBookbindingNotes": "您需要的所有工具都裝在這件工作服的口袋裡。護目鏡、零錢、金戒指... 樣樣齊全。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 圖書裝訂工套裝(2/4)", + "armorArmoireCoverallsOfBookbindingNotes": "您需要的所有工具都裝在這件工作服的口袋裡。護目鏡、零錢、金戒指... 樣樣齊全。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 圖書裝訂工套裝(2/4)。", "armorArmoireRobeOfSpadesText": "黑桃長袍", - "armorArmoireRobeOfSpadesNotes": "這件高貴的長袍藏有能容納所有寶藏或武器的隱藏口袋 - 一切由您決定! 增加 <%= str %> 點力量。 來自神祕寶箱: 黑桃長矛套裝(2/3)", + "armorArmoireRobeOfSpadesNotes": "這件高貴的長袍藏有能容納所有寶藏或武器的隱藏口袋 - 一切由您決定! 增加 <%= str %> 點力量。 來自神秘寶箱: 黑桃長矛套裝(2/3)。", "armorArmoireSoftBlueSuitText": "柔軟藍睡衣", - "armorArmoireSoftBlueSuitNotes": "藍色是一個能使人平靜的顏色。太過於平靜到有人甚至穿著這件柔軟的服裝去睡覺。zZz。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神祕寶箱: 淺藍睡衣套裝(2/3)", + "armorArmoireSoftBlueSuitNotes": "藍色是一個能使人平靜的顏色。太過於平靜到有人甚至穿著這件柔軟的服裝去睡覺。zZz。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神秘寶箱: 淺藍睡衣套裝(2/3)。", "armorArmoireSoftGreenSuitText": "柔軟綠睡衣", - "armorArmoireSoftGreenSuitNotes": "綠色是最能讓人感到舒爽的顏色! 最適合用來疲憊的雙眼放鬆下... 嗯,甚至是小睡一下... 增加體質、智力各 <%= attrs %> 點。 來自神祕寶箱: 淺綠睡衣套裝(2/3)", + "armorArmoireSoftGreenSuitNotes": "綠色是最能讓人感到舒爽的顏色! 最適合用來疲憊的雙眼放鬆下... 嗯,甚至是小睡一下... 增加體質、智力各 <%= attrs %> 點。 來自神秘寶箱: 淺綠睡衣套裝(2/3)。", "armorArmoireSoftRedSuitText": "柔軟紅睡衣", - "armorArmoireSoftRedSuitNotes": "紅色是一個能讓人精力充沛的顏色。如果您一大早就必須起床,這件睡衣正是您的最佳選擇... 增加智力 <%= int %> 點和力量 <%= str %> 點。 來自神祕寶箱: 淺紅睡衣套裝(2/3)", + "armorArmoireSoftRedSuitNotes": "紅色是一個能讓人精力充沛的顏色。如果您一大早就必須起床,這件睡衣正是您的最佳選擇... 增加智力 <%= int %> 點和力量 <%= str %> 點。 來自神秘寶箱: 淺紅睡衣套裝(2/3)。", "armorArmoireScribesRobeText": "抄寫員長袍", - "armorArmoireScribesRobeNotes": "這件天鵝絨般柔軟的長袍是由富含靈感和動力的魔法編織而成的。增加感知、智力各 <%= attrs %> 點。 來自神祕寶箱: 抄寫員套裝(1/3)", + "armorArmoireScribesRobeNotes": "這件天鵝絨般柔軟的長袍是由富含靈感和動力的魔法編織而成的。增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 抄寫員套裝(1/3)。", "headgear": "頭盔", "headgearCapitalized": "頭盔", "headBase0Text": "沒有頭盔", - "headBase0Notes": "沒有頭盔", + "headBase0Notes": "沒有頭盔。", "headWarrior1Text": "皮革頭盔", "headWarrior1Notes": "耐用的獸皮頭盔。增加 <%= str %> 點力量。", "headWarrior2Text": "鎖鏈頭罩", @@ -903,371 +903,371 @@ "headSpecialYetiText": "雪怪馴化師頭盔", "headSpecialYetiNotes": "一頂可愛又可怕的帽子。提高<%= str %>點力量。2013-2014冬季限量版裝備。", "headSpecialSkiText": "滑雪刺客頭盔", - "headSpecialSkiNotes": "為穿戴者的身份保密……也為穿戴者的臉部保暖。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備", + "headSpecialSkiNotes": "為穿戴者的身份保密……也為穿戴者的臉部保暖。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備。", "headSpecialCandycaneText": "糖果手杖帽子", - "headSpecialCandycaneNotes": "這是世界上最美味的帽子,並以來無影去無踪聞名於世。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備", + "headSpecialCandycaneNotes": "這是世界上最美味的帽子,並以來無影去無踪聞名於世。增加 <%= per %> 點感知。 2013-2014冬季限定版裝備。", "headSpecialSnowflakeText": "雪花皇冠", - "headSpecialSnowflakeNotes": "戴上這頂皇冠的人寒氣不侵。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備", + "headSpecialSnowflakeNotes": "戴上這頂皇冠的人寒氣不侵。增加 <%= int %> 點智力。 2013-2014冬季限定版裝備。", "headSpecialSpringRogueText": "隱形貓面罩", - "headSpecialSpringRogueNotes": "永遠不會有人猜到您是一位身手矯健的飛賊! 增加 <%= per %> 感知。 2014年春季限定版裝備", + "headSpecialSpringRogueNotes": "永遠不會有人猜到您是一位身手矯健的飛賊! 增加 <%= per %> 感知。 2014年春季限定版裝備。", "headSpecialSpringWarriorText": "三葉草鋼頭盔", - "headSpecialSpringWarriorNotes": "這頂由紅菽草焊接而成的頭盔可以抵擋最強大的打擊。 增加 <%= str %> 點力量。 2014年春季限定版裝備", + "headSpecialSpringWarriorNotes": "這頂由紅菽草焊接而成的頭盔可以抵擋最強大的打擊。 增加 <%= str %> 點力量。 2014年春季限定版裝備。", "headSpecialSpringMageText": "瑞士乳酪帽子", - "headSpecialSpringMageNotes": "這頂帽子蘊藏著強大的魔法!請不要隨意啃噬它。 增加 <%= per %> 點感知。 2014年春季限定版裝備", + "headSpecialSpringMageNotes": "這頂帽子蘊藏著強大的魔法!請不要隨意啃噬它。 增加 <%= per %> 點感知。 2014年春季限定版裝備。", "headSpecialSpringHealerText": "友誼皇冠", - "headSpecialSpringHealerNotes": "這頂皇冠象徵著忠誠與友誼。狗狗終究還是冒險者最好的朋友! 增加 <%= int %> 點智力。 2014年春季限定版裝備", + "headSpecialSpringHealerNotes": "這頂皇冠象徵著忠誠與友誼。狗狗終究還是冒險者最好的朋友! 增加 <%= int %> 點智力。 2014年春季限定版裝備。", "headSpecialSummerRogueText": "海盜帽子", - "headSpecialSummerRogueNotes": "只有最有效率的海盜能佩戴這頂好帽子。 增加 <%= per %> 點感知。 2014年夏季限定版裝備", + "headSpecialSummerRogueNotes": "只有最有效率的海盜能佩戴這頂好帽子。 增加 <%= per %> 點感知。 2014年夏季限定版裝備。", "headSpecialSummerWarriorText": "流氓頭巾", - "headSpecialSummerWarriorNotes": "這塊柔軟、充滿鹹味的布能讓穿戴者充滿力量。 增加 <%= str %> 點力量。 2014年夏季限定版裝備", + "headSpecialSummerWarriorNotes": "這塊柔軟、充滿鹹味的布能讓穿戴者充滿力量。 增加 <%= str %> 點力量。 2014年夏季限定版裝備。", "headSpecialSummerMageText": "海帶巫師帽", - "headSpecialSummerMageNotes": "有什麼能比一頂被海帶包裹住的帽子還更神奇呢?增加 <%= per %> 點感知。 2014年夏季限定版裝備", + "headSpecialSummerMageNotes": "有什麼能比一頂被海帶包裹住的帽子還更神奇呢?增加 <%= per %> 點感知。 2014年夏季限定版裝備。", "headSpecialSummerHealerText": "珊瑚皇冠", - "headSpecialSummerHealerNotes": "能使穿戴者修復受損的暗礁。增加 <%= int %> 點智力。 2014年夏季限定版裝備", + "headSpecialSummerHealerNotes": "能使穿戴者修復受損的暗礁。增加 <%= int %> 點智力。 2014年夏季限定版裝備。", "headSpecialFallRogueText": "血紅頭罩", - "headSpecialFallRogueNotes": "噬血殺人魔的身份總是需要隱藏起來不被發現。 增加 <%= per %> 點感知。 2014年秋季限定版裝備", + "headSpecialFallRogueNotes": "噬血殺人魔的身份總是需要隱藏起來不被發現。 增加 <%= per %> 點感知。 2014年秋季限定版裝備。", "headSpecialFallWarriorText": "科學妖怪頭皮", - "headSpecialFallWarriorNotes": "快將這頂頭盔移植到您的頭上吧!它只被「稍微」用過。增加 <%= str %> 點力量。 2014年秋季限定版裝備", + "headSpecialFallWarriorNotes": "快將這頂頭盔移植到您的頭上吧!它只被「稍微」用過。增加 <%= str %> 點力量。 2014年秋季限定版裝備。", "headSpecialFallMageText": "尖頂帽", - "headSpecialFallMageNotes": "這頂帽子是由魔法一針一線織成的。增加 <%= per %> 點感知。 2014年秋季限定版裝備", + "headSpecialFallMageNotes": "這頂帽子是由魔法一針一線織成的。增加 <%= per %> 點感知。 2014年秋季限定版裝備。", "headSpecialFallHealerText": "頭部繃帶", - "headSpecialFallHealerNotes": "極具衛生,又兼具時尚。增加 <%= int %> 點智力。 2014年秋季限定版裝備", + "headSpecialFallHealerNotes": "極具衛生,又兼具時尚。增加 <%= int %> 點智力。 2014年秋季限定版裝備。", "headSpecialNye2014Text": "傻氣派對帽", "headSpecialNye2014Notes": "恭喜您收到一頂傻氣的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialWinter2015RogueText": "冰錐龍獸面罩", - "headSpecialWinter2015RogueNotes": "(Icicle Drake) 您千真、萬卻、絕對就是那隻傳說中的冰錐龍獸。您不曾想過要攻佔冰錐龍獸的老巢。您對傳說中躺在寒冷隧道裡的巨額財富也毫無興趣。嗷。增加 <%= per %> 點感知。 2014-2015冬季限定版裝備", + "headSpecialWinter2015RogueNotes": "(Icicle Drake) 您千真、萬卻、絕對就是那隻傳說中的冰錐龍獸。您不曾想過要攻佔冰錐龍獸的老巢。您對傳說中躺在寒冷隧道裡的巨額財富也毫無興趣。嗷。增加 <%= per %> 點感知。 2014-2015冬季限定版裝備。", "headSpecialWinter2015WarriorText": "薑餅頭盔", - "headSpecialWinter2015WarriorNotes": "思考,思考,給我竭盡全力地思考。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備", + "headSpecialWinter2015WarriorNotes": "思考,思考,給我竭盡全力地思考。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備。", "headSpecialWinter2015MageText": "極光帽子", "headSpecialWinter2015MageNotes": "穿戴這頂帽子的人在學習時,這頂帽子上的布料會瞬息萬變並閃閃發光。增加 <%= per %> 點感知。2014-2015冬季限定版裝備。", "headSpecialWinter2015HealerText": "暖呼呼耳罩", - "headSpecialWinter2015HealerNotes": "這副溫暖的耳罩既能阻擋強襲而來的寒意,亦能阻隔使人分心的噪音。增加 <%= int %> 點智力。 2014-2015冬季限定版裝備", + "headSpecialWinter2015HealerNotes": "這副溫暖的耳罩既能阻擋強襲而來的寒意,亦能阻隔使人分心的噪音。增加 <%= int %> 點智力。 2014-2015冬季限定版裝備。", "headSpecialSpring2015RogueText": "防火頭盔", - "headSpecialSpring2015RogueNotes": "火? 這算哪根蔥?! 您能強勢穿越熊熊烈火的襲擊!增加 <%= per %> 點感知。 2015春季限定版裝備", + "headSpecialSpring2015RogueNotes": "火? 這算哪根蔥?! 您能強勢穿越熊熊烈火的襲擊!增加 <%= per %> 點感知。 2015春季限定版裝備。", "headSpecialSpring2015WarriorText": "警惕頭盔", - "headSpecialSpring2015WarriorNotes": "當心這頂頭盔!只有最兇猛的狗狗才能戴上它。不要再笑了好嗎? 增加 <%= str %> 點力量。 2015年春季限定版裝備", + "headSpecialSpring2015WarriorNotes": "當心這頂頭盔!只有最兇猛的狗狗才能戴上它。不要再笑了好嗎? 增加 <%= str %> 點力量。 2015年春季限定版裝備。", "headSpecialSpring2015MageText": "魔術師舞台帽", - "headSpecialSpring2015MageNotes": "究竟是先有兔子還是先有帽子呢? 增加 <%= per %> 點感知。 2015年春季限定版裝備", + "headSpecialSpring2015MageNotes": "究竟是先有兔子還是先有帽子呢? 增加 <%= per %> 點感知。 2015年春季限定版裝備。", "headSpecialSpring2015HealerText": "欣慰皇冠", - "headSpecialSpring2015HealerNotes": "皇冠中央上的珍珠能鎮定並安撫在其周圍的人。增加 <%= int %> 點智力。 2015年春季限定版裝備", + "headSpecialSpring2015HealerNotes": "皇冠中央上的珍珠能鎮定並安撫在其周圍的人。增加 <%= int %> 點智力。 2015年春季限定版裝備。", "headSpecialSummer2015RogueText": "叛變者帽子", - "headSpecialSummer2015RogueNotes": "這頂海盜帽是從船上掉進海裡的。帽上裝飾著火珊瑚的碎片。增加 <%= per %> 點感知。 2015年夏季限定版裝備", + "headSpecialSummer2015RogueNotes": "這頂海盜帽是從船上掉進海裡的。帽上裝飾著火珊瑚的碎片。增加 <%= per %> 點感知。 2015年夏季限定版裝備。", "headSpecialSummer2015WarriorText": "海洋寶石頭盔", - "headSpecialSummer2015WarriorNotes": "由怠慢小鎮出生的工匠從深海金屬提煉製作而成。是頂堅固又兼具美觀的頭盔。增加 <%= str %> 點力量。2015年夏季限定版裝備", + "headSpecialSummer2015WarriorNotes": "由怠慢小鎮出生的工匠從深海金屬提煉製作而成。是頂堅固又兼具美觀的頭盔。增加 <%= str %> 點力量。2015年夏季限定版裝備。", "headSpecialSummer2015MageText": "預言家圍巾", - "headSpecialSummer2015MageNotes": "神秘力量閃耀在這條圍巾的絲線中。增加 <%= per %> 點感知。 2015年夏季限定版裝備", + "headSpecialSummer2015MageNotes": "神秘力量閃耀在這條圍巾的絲線中。增加 <%= per %> 點感知。 2015年夏季限定版裝備。", "headSpecialSummer2015HealerText": "水手帽", - "headSpecialSummer2015HealerNotes": "把這頂水手帽穩穩地戴在頭上,您就可以暢行於暴風雨的海洋! 增加 <%= int %> 點智力。 2015年夏季限定版裝備", + "headSpecialSummer2015HealerNotes": "把這頂水手帽穩穩地戴在頭上,您就可以暢行於暴風雨的海洋! 增加 <%= int %> 點智力。 2015年夏季限定版裝備。", "headSpecialFall2015RogueText": "戰蝠翅膀", - "headSpecialFall2015RogueNotes": "這頂強大的頭盔能用超音波偵測敵人的位置!增加 <%= per %> 點感知。 2015年秋季限定版裝備", + "headSpecialFall2015RogueNotes": "這頂強大的頭盔能用超音波偵測敵人的位置!增加 <%= per %> 點感知。 2015年秋季限定版裝備。", "headSpecialFall2015WarriorText": "稻草人帽子", - "headSpecialFall2015WarriorNotes": "每個人都搶著要這頂帽子——如果他們只有一顆腦袋的話。增加 <%= str %> 點力量。 2015年秋季限定版裝備", + "headSpecialFall2015WarriorNotes": "每個人都搶著要這頂帽子——如果他們只有一顆腦袋的話。增加 <%= str %> 點力量。 2015年秋季限定版裝備。", "headSpecialFall2015MageText": "穿針引線帽", - "headSpecialFall2015MageNotes": "這頂帽子上的一針一線都能增強自己的力量。增加 <%= per %> 點感知。 2015年秋季限定版裝備", + "headSpecialFall2015MageNotes": "這頂帽子上的一針一線都能增強自己的力量。增加 <%= per %> 點感知。 2015年秋季限定版裝備。", "headSpecialFall2015HealerText": "青蛙帽子", - "headSpecialFall2015HealerNotes": "這是一頂非供娛樂用的帽子。只有最優秀的魔藥師能夠配戴它。增加 <%= int %> 點智力。 2015年秋季限定版裝備", + "headSpecialFall2015HealerNotes": "這是一頂非供娛樂用的帽子。只有最優秀的魔藥師能夠配戴它。增加 <%= int %> 點智力。 2015年秋季限定版裝備。", "headSpecialNye2015Text": "荒謬派對帽", "headSpecialNye2015Notes": "恭喜您收到一頂荒謬的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialWinter2016RogueText": "可可豆頭盔", - "headSpecialWinter2016RogueNotes": "在這頂舒適的頭盔裡還藏有一條能夠保護您的圍巾。您可以將他拿下來並細細品嚐裝在裡面的冬季飲品喔! 增加 <%= per %> 點感知。 2015-2016冬季限定版裝備", + "headSpecialWinter2016RogueNotes": "在這頂舒適的頭盔裡還藏有一條能夠保護您的圍巾。您可以將他拿下來並細細品嚐裝在裡面的冬季飲品喔! 增加 <%= per %> 點感知。 2015-2016冬季限定版裝備。", "headSpecialWinter2016WarriorText": "雪人帽子", - "headSpecialWinter2016WarriorNotes": "哦! 這果然是頂強大的頭盔啊! 在他融化掉......之前......! 增加 <%= str %> 點力量。 2015-2016冬季限定版裝備", + "headSpecialWinter2016WarriorNotes": "哦! 這果然是頂強大的頭盔啊! 在他融化掉......之前......! 增加 <%= str %> 點力量。 2015-2016冬季限定版裝備。", "headSpecialWinter2016MageText": "滑雪家頭罩", - "headSpecialWinter2016MageNotes": "當您在施法時,他能讓您的視線不被大雪擋住。增加 <%= per %> 點感知。 2015-2016冬季限定版裝備", + "headSpecialWinter2016MageNotes": "當您在施法時,他能讓您的視線不被大雪擋住。增加 <%= per %> 點感知。 2015-2016冬季限定版裝備。", "headSpecialWinter2016HealerText": "仙女翅膀頭盔", - "headSpecialWinter2016HealerNotes": "這些翅膀鼓動的速度快到都分不清誰是誰了! 增加 <%= int %> 點智力。 2015-2016冬季限定版裝備", + "headSpecialWinter2016HealerNotes": "這些翅膀鼓動的速度快到都分不清誰是誰了! 增加 <%= int %> 點智力。 2015-2016冬季限定版裝備。", "headSpecialSpring2016RogueText": "菁英犬面罩", - "headSpecialSpring2016RogueNotes": "啊嗚~ 這是隻多麼可愛的小狗狗! 快來我這裡,讓我摸摸你的小頭頭.... 嘿,我所有的金幣都跑到哪兒了? 增加 <%= per %> 點感知。 2016年春季限定版裝備", + "headSpecialSpring2016RogueNotes": "啊嗚~ 這是隻多麼可愛的小狗狗! 快來我這裡,讓我摸摸你的小頭頭.... 嘿,我所有的金幣都跑到哪兒了? 增加 <%= per %> 點感知。 2016年春季限定版裝備。", "headSpecialSpring2016WarriorText": "鼠小兵頭盔", - "headSpecialSpring2016WarriorNotes": "您再也不會被別人敲頭了! 快戴上它試試看! 增加 <%= str %> 點力量。 2016年春季限定版裝備", + "headSpecialSpring2016WarriorNotes": "您再也不會被別人敲頭了! 快戴上它試試看! 增加 <%= str %> 點力量。 2016年春季限定版裝備。", "headSpecialSpring2016MageText": "豪華金貓帽", - "headSpecialSpring2016MageNotes": "(Grand Malkin Hat) 穿上它能讓您超越世界上所有穿梭於巷弄小街上的法師。增加 <%= per %> 點感知。 2016年春季限定版裝備", + "headSpecialSpring2016MageNotes": "(Grand Malkin Hat) 穿上它能讓您超越世界上所有穿梭於巷弄小街上的法師。增加 <%= per %> 點感知。 2016年春季限定版裝備。", "headSpecialSpring2016HealerText": "紫花綻放王冠", - "headSpecialSpring2016HealerNotes": "它閃爍著新生命準備爆發的潛力。增加 <%= int %> 點智力。 2016年春季限定版裝備", + "headSpecialSpring2016HealerNotes": "它閃爍著新生命準備爆發的潛力。增加 <%= int %> 點智力。 2016年春季限定版裝備。", "headSpecialSummer2016RogueText": "鰻魚頭盔", - "headSpecialSummer2016RogueNotes": "當您戴上這頂能夠隱形的頭盔時,就可以從岩石的裂縫間向外偷看一瞥。增加 <%= per %> 點感知。 2016年夏季限定版裝備", + "headSpecialSummer2016RogueNotes": "當您戴上這頂能夠隱形的頭盔時,就可以從岩石的裂縫間向外偷看一瞥。增加 <%= per %> 點感知。 2016年夏季限定版裝備。", "headSpecialSummer2016WarriorText": "鯊魚頭盔", - "headSpecialSummer2016WarriorNotes": "快戴上這頂嚇人的頭盔盡情撕咬那些艱鉅的任務吧! 增加 <%= str %> 點力量。 2016年夏季限定版裝備", + "headSpecialSummer2016WarriorNotes": "快戴上這頂嚇人的頭盔盡情撕咬那些艱鉅的任務吧! 增加 <%= str %> 點力量。 2016年夏季限定版裝備。", "headSpecialSummer2016MageText": "噴射水柱帽", - "headSpecialSummer2016MageNotes": "附魔藥水正不停地從這頂帽子上噴灑出來。增加 <%= per %> 點感知。 2016年夏季限定版裝備", + "headSpecialSummer2016MageNotes": "附魔藥水正不停地從這頂帽子上噴灑出來。增加 <%= per %> 點感知。 2016年夏季限定版裝備。", "headSpecialSummer2016HealerText": "海馬頭盔", - "headSpecialSummer2016HealerNotes": "這頂頭盔彰顯著它的穿戴者是位由怠慢小鎮出生的海馬所訓練長大的。增加 <%= int %> 點智力。 2016年夏季限定版裝備", + "headSpecialSummer2016HealerNotes": "這頂頭盔彰顯著它的穿戴者是位由怠慢小鎮出生的海馬所訓練長大的。增加 <%= int %> 點智力。 2016年夏季限定版裝備。", "headSpecialFall2016RogueText": "黑寡婦頭盔", - "headSpecialFall2016RogueNotes": "頭盔上的蜘蛛腳持續不停地在抽搐。增加 <%= per %> 點感知。 2016年秋季限定版裝備", + "headSpecialFall2016RogueNotes": "頭盔上的蜘蛛腳持續不停地在抽搐。增加 <%= per %> 點感知。 2016年秋季限定版裝備。", "headSpecialFall2016WarriorText": "粗糙樹皮頭盔", - "headSpecialFall2016WarriorNotes": "這頂黏糊糊的沼澤頭盔上還沾有一些爛泥巴。增加 <%= str %> 點力量。 2016年秋季限定版裝備", + "headSpecialFall2016WarriorNotes": "這頂黏糊糊的沼澤頭盔上還沾有一些爛泥巴。增加 <%= str %> 點力量。 2016年秋季限定版裝備。", "headSpecialFall2016MageText": "惡罪頭罩", - "headSpecialFall2016MageNotes": "將您心懷不軌的陰謀藏在這晦暗的兜帽下吧。增加 <%= per %> 點感知。 2016年秋季限定版裝備", + "headSpecialFall2016MageNotes": "將您心懷不軌的陰謀藏在這晦暗的兜帽下吧。增加 <%= per %> 點感知。 2016年秋季限定版裝備。", "headSpecialFall2016HealerText": "美杜莎皇冠", - "headSpecialFall2016HealerNotes": "(Medusa's Crown) 任何看著您眼睛的人都將被賜予禍害。增加 <%= int %> 點智力。 2016年秋季限定版裝備", - "headSpecialNye2016Text": "古怪派對帽", - "headSpecialNye2016Notes": "恭喜您收到一頂古怪的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", + "headSpecialFall2016HealerNotes": "任何看著您眼睛的人都將被賜予禍害。增加 <%= int %> 點智力。 2016年秋季限定版裝備。", + "headSpecialNye2016Text": "怪誕派對帽", + "headSpecialNye2016Notes": "恭喜您收到一頂怪誕的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialWinter2017RogueText": "冰霜頭盔", - "headSpecialWinter2017RogueNotes": "這件盔甲是由冰晶塑造而成的,能幫助您無聲無息地穿過冰雪地形。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備", + "headSpecialWinter2017RogueNotes": "這件盔甲是由冰晶塑造而成的,能幫助您無聲無息地穿過冰雪地形。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備。", "headSpecialWinter2017WarriorText": "曲棍球頭盔", - "headSpecialWinter2017WarriorNotes": "這是一頂堅固耐用的頭盔。它能被用來抵禦來自暴雪的冰凍衝擊,甚至還能抵擋深紅色的每日任務! 增加 <%= str %> 點力量。 2016-2017冬季限定版裝備", + "headSpecialWinter2017WarriorNotes": "這是一頂堅固耐用的頭盔。它能被用來抵禦來自暴雪的冰凍衝擊,甚至還能抵擋深紅色的每日任務! 增加 <%= str %> 點力量。 2016-2017冬季限定版裝備。", "headSpecialWinter2017MageText": "冬季戰狼頭盔", - "headSpecialWinter2017MageNotes": "這頂頭盔是以傳說中冬季戰狼的形象為原型塑造而成。它能保持您頭部的溫暖並增強您的視力。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備", + "headSpecialWinter2017MageNotes": "這頂頭盔是以傳說中冬季戰狼的形象為原型塑造而成。它能保持您頭部的溫暖並增強您的視力。增加 <%= per %> 點感知。 2016-2017冬季限定版裝備。", "headSpecialWinter2017HealerText": "繁花閃閃头盔", - "headSpecialWinter2017HealerNotes": "這些閃閃發光的花瓣能讓您集中腦力! 增加 <%= int %> 點智力。 2016-2017年冬季限定版裝備", + "headSpecialWinter2017HealerNotes": "這些閃閃發光的花瓣能讓您集中腦力! 增加 <%= int %> 點智力。 2016-2017年冬季限定版裝備。", "headSpecialSpring2017RogueText": "鬼祟野兔頭盔", - "headSpecialSpring2017RogueNotes": "當您偷偷接近每日任務(或是三葉草)時,這副面具能保護您的討喜感不被敵人識破! 增加 <%= per %> 點感知。 2017年春季限定版裝備", + "headSpecialSpring2017RogueNotes": "當您偷偷接近每日任務(或是三葉草)時,這副面具能保護您的討喜感不被敵人識破! 增加 <%= per %> 點感知。 2017年春季限定版裝備。", "headSpecialSpring2017WarriorText": "貓科頭盔", - "headSpecialSpring2017WarriorNotes": "這頂裝飾精美的頭盔可以保護您可愛、討喜又迷糊的腦袋。增加 <%= str %> 點力量。 2017年春季限定版裝備", + "headSpecialSpring2017WarriorNotes": "這頂裝飾精美的頭盔可以保護您可愛、討喜又迷糊的腦袋。增加 <%= str %> 點力量。 2017年春季限定版裝備。", "headSpecialSpring2017MageText": "魔術小犬巫師帽", - "headSpecialSpring2017MageNotes": "這頂帽子可以幫助您釋放強大的咒語... 或者您可以只將它用來召喚出網球。 一切由您決定。增加 <%= per %> 點感知。 2017春季限定版裝備", + "headSpecialSpring2017MageNotes": "這頂帽子可以幫助您釋放強大的咒語... 或者您可以只將它用來召喚出網球。 一切由您決定。增加 <%= per %> 點感知。 2017春季限定版裝備。", "headSpecialSpring2017HealerText": "花瓣飾環", - "headSpecialSpring2017HealerNotes": "這個精緻的花冠散發著春暖花開時節那份讓人心花怒放的香氣。增加 <%= int %> 點智力。 2017年春季限定版裝備", + "headSpecialSpring2017HealerNotes": "這個精緻的花冠散發著春暖花開時節那份讓人心花怒放的香氣。增加 <%= int %> 點智力。 2017年春季限定版裝備。", "headSpecialSummer2017RogueText": "海龍頭盔", - "headSpecialSummer2017RogueNotes": "這頂頭盔可以隨意改變顏色,幫助您巧聲無息地融入四周的環境。增加 <%= per %> 點感知。 2017年夏季限定版裝備", + "headSpecialSummer2017RogueNotes": "這頂頭盔可以隨意改變顏色,幫助您巧聲無息地融入四周的環境。增加 <%= per %> 點感知。 2017年夏季限定版裝備。", "headSpecialSummer2017WarriorText": "沙堆城堡頭盔", - "headSpecialSummer2017WarriorNotes": "每個人都非常渴望能戴上這頂最優秀的頭盔。至少在海浪來襲之前。增加 <%= str %> 點力量。 2017年夏季限定版裝備", + "headSpecialSummer2017WarriorNotes": "每個人都非常渴望能戴上這頂最優秀的頭盔。至少在海浪來襲之前。增加 <%= str %> 點力量。 2017年夏季限定版裝備。", "headSpecialSummer2017MageText": "漩渦帽子", - "headSpecialSummer2017MageNotes": "這是一頂完全由捲曲、顛倒的漩渦製作出來的一頂帽子。增加 <%= per %> 點感知。 2017年夏季限定版裝備", + "headSpecialSummer2017MageNotes": "這是一頂完全由捲曲、顛倒的漩渦製作出來的一頂帽子。增加 <%= per %> 點感知。 2017年夏季限定版裝備。", "headSpecialSummer2017HealerText": "海洋生物皇冠", - "headSpecialSummer2017HealerNotes": "這頂帽子是由暫時居住在您頭上的友善海洋生物朋友們所組成的。他們能帶給您一些明智的建議。增加 <%= int %> 點智力。 2017年夏季限定版裝備", + "headSpecialSummer2017HealerNotes": "這頂帽子是由暫時居住在您頭上的友善海洋生物朋友們所組成的。他們能帶給您一些明智的建議。增加 <%= int %> 點智力。 2017年夏季限定版裝備。", "headSpecialFall2017RogueText": "杰克南瓜燈頭盔", - "headSpecialFall2017RogueNotes": "準備好不給糖就搗蛋了嗎? 是時候戴上這頂帶有節日氣息的發光頭盔了! 增加 <%= per %> 點感知。 2017年秋季限量版裝備", + "headSpecialFall2017RogueNotes": "準備好不給糖就搗蛋了嗎? 是時候戴上這頂帶有節日氣息的發光頭盔了! 增加 <%= per %> 點感知。 2017年秋季限量版裝備。", "headSpecialFall2017WarriorText": "玉米糖漿頭盔", - "headSpecialFall2017WarriorNotes": "這頂頭盔雖然看起來非常享受,但任性的任務們絕對不會覺得它是甜蜜的! 增加 <%= str %> 點力量。 2017年秋季限定版裝備", + "headSpecialFall2017WarriorNotes": "這頂頭盔雖然看起來非常享受,但任性的任務們絕對不會覺得它是甜蜜的! 增加 <%= str %> 點力量。 2017年秋季限定版裝備。", "headSpecialFall2017MageText": "假面舞會頭盔", - "headSpecialFall2017MageNotes": "當您在眾人面前戴著這頂有羽毛的帽子時,每個人都會想馬上離開並認為房間裡出現了一位神秘的陌生人! 增加 <%= per %> 點感知。 2017年秋季限定版裝備", + "headSpecialFall2017MageNotes": "當您在眾人面前戴著這頂有羽毛的帽子時,每個人都會想馬上離開並認為房間裡出現了一位神秘的陌生人! 增加 <%= per %> 點感知。 2017年秋季限定版裝備。", "headSpecialFall2017HealerText": "鬼屋頭盔", - "headSpecialFall2017HealerNotes": "快來邀請陰森可怕的靈魂和友好的生物們一同來見證您戴上這頂帽子後的強大治癒能力吧! 增加 <%= int %> 點智力。 2017年秋季限定版裝備", + "headSpecialFall2017HealerNotes": "快來邀請陰森可怕的靈魂和友好的生物們一同來見證您戴上這頂帽子後的強大治癒能力吧! 增加 <%= int %> 點智力。 2017年秋季限定版裝備。", "headSpecialNye2017Text": "夢幻派對帽", "headSpecialNye2017Notes": "恭喜您收到一頂夢幻的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialWinter2018RogueText": "馴鹿頭盔", - "headSpecialWinter2018RogueNotes": "這是一頂置有內建頭燈的絕佳慶典裝扮! 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備", + "headSpecialWinter2018RogueNotes": "這是一頂置有內建頭燈的絕佳慶典裝扮! 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備。", "headSpecialWinter2018WarriorText": "禮盒頭盔", - "headSpecialWinter2018WarriorNotes": "這頂帽子上喜氣洋洋的禮盒以及蝴蝶結不僅僅只是慶祝用,還相當的結實。增加 <%= str %> 點力量。 2017-2018冬季限定版裝備", + "headSpecialWinter2018WarriorNotes": "這頂帽子上喜氣洋洋的禮盒以及蝴蝶結不僅僅只是慶祝用,還相當的結實。增加 <%= str %> 點力量。 2017-2018冬季限定版裝備。", "headSpecialWinter2018MageText": "閃亮亮高頂禮帽", - "headSpecialWinter2018MageNotes": "想要來點附加的神秘魔法嗎? 這頂閃亮的帽子保證能增強您所有的咒語! 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備", + "headSpecialWinter2018MageNotes": "想要來點附加的神秘魔法嗎? 這頂閃亮的帽子保證能增強您所有的咒語! 增加 <%= per %> 點感知。 2017-2018冬季限定版裝備。", "headSpecialWinter2018HealerText": "槲寄生頭罩", - "headSpecialWinter2018HealerNotes": "這條別緻的頭罩能讓您感到暖呼呼,並永遠保有愉快的節日中的氣氛! 增加 <%= int %> 點智力。 2017-2018冬季限定版裝備", + "headSpecialWinter2018HealerNotes": "這條別緻的頭罩能讓您感到暖呼呼,並永遠保有愉快的節日中的氣氛! 增加 <%= int %> 點智力。 2017-2018冬季限定版裝備。", "headSpecialSpring2018RogueText": "鴨嘴頭盔", - "headSpecialSpring2018RogueNotes": "嘎嘎! 您的可愛掩蓋了您機智和狡猾的本性。增加 <%= per %> 點感知。 2018年春季限定版裝備", + "headSpecialSpring2018RogueNotes": "嘎嘎! 您的可愛掩蓋了您機智和狡猾的本性。增加 <%= per %> 點感知。 2018年春季限定版裝備。", "headSpecialSpring2018WarriorText": "光芒四射頭盔", - "headSpecialSpring2018WarriorNotes": "這頂頭盔能眩暈四周的任何敵人! 增加 <%= str %> 點力量。 2018年春季限定版裝備", + "headSpecialSpring2018WarriorNotes": "這頂頭盔能眩暈四周的任何敵人! 增加 <%= str %> 點力量。 2018年春季限定版裝備。", "headSpecialSpring2018MageText": "鬱金香頭盔", - "headSpecialSpring2018MageNotes": "這頂頭盔上俏麗的花瓣將賜予您神奇的春天魔法。增加 <%= per %> 點感知。 2018年春季限定版裝備", + "headSpecialSpring2018MageNotes": "這頂頭盔上俏麗的花瓣將賜予您神奇的春天魔法。增加 <%= per %> 點感知。 2018年春季限定版裝備。", "headSpecialSpring2018HealerText": "石榴石飾環", - "headSpecialSpring2018HealerNotes": "這副頭飾上精鍊的鑽石能增強您的精神能量。增加 <%= int %> 點智力。 2018年春季限定版裝備", + "headSpecialSpring2018HealerNotes": "這副頭飾上精鍊的鑽石能增強您的精神能量。增加 <%= int %> 點智力。 2018年春季限定版裝備。", "headSpecialSummer2018RogueText": "釣魚遮陽帽", - "headSpecialSummer2018RogueNotes": "從水裡夏日毒辣陽光的反射中提供舒適和保護。如果您覺得在陰影中保持隱密會更自在,那它就更加適合您!增加 <%= per %> 點感知。 2018年夏季限定版裝備", + "headSpecialSummer2018RogueNotes": "從水裡夏日毒辣陽光的反射中提供舒適和保護。如果您覺得在陰影中保持隱密會更自在,那它就更加適合您!增加 <%= per %> 點感知。 2018年夏季限定版裝備。", "headSpecialSummer2018WarriorText": "鬥魚戰士頭盔", - "headSpecialSummer2018WarriorNotes": "(Betta Fish Barbute) 快用這頂豔麗的戰士頭盔宣揚您正是阿爾法鬥魚!增加 <%= str %> 點力量。 2018年夏季限定版裝備", + "headSpecialSummer2018WarriorNotes": "(Betta Fish Barbute) 快用這頂豔麗的戰士頭盔宣揚您正是阿爾法鬥魚!增加 <%= str %> 點力量。 2018年夏季限定版裝備。", "headSpecialSummer2018MageText": "獅子魚冠", "headSpecialSummer2018MageNotes": "用痛苦難耐的強光照射在膽敢叫您「失智魚」的人身上。增加 <%= per %> 點感知。 2018年夏季限定版裝備。", "headSpecialSummer2018HealerText": "人魚帝王皇冠", - "headSpecialSummer2018HealerNotes": "這頂帶鰭的王冕以海藍寶石點綴,象徵著擁有人類、魚類,還有兼具兩者的生物的統治權!增加 <%= int %> 點智力。 2018年夏季限定版裝備。", + "headSpecialSummer2018HealerNotes": "這頂帶鰭的王冕以海藍寶石點綴,象徵著擁有人類、魚類,還有兼具兩者的生物的統治權!增加 <%= int %> 點智力。2018年夏季限定版裝備。", "headSpecialFall2018RogueText": "雙重人格面具", - "headSpecialFall2018RogueNotes": "絕大多數的人都會將自己內心的糾葛所隱藏。這副面具正表明了我們都經歷了各種好念頭與壞衝動的戰爭。此外,它還配有一頂甜美的帽子! 增加 <%= per %> 點感知。 2018年秋季限定版裝備", + "headSpecialFall2018RogueNotes": "絕大多數的人都會將自己內心的糾葛所隱藏。這副面具正表明了我們都經歷了各種好念頭與壞衝動的戰爭。此外,它還配有一頂甜美的帽子! 增加 <%= per %> 點感知。 2018年秋季限定版裝備。", "headSpecialFall2018WarriorText": "彌諾陶洛斯面具", - "headSpecialFall2018WarriorNotes": "(Minotaur Visage) 這副令人驚悚的面具正表明了您可以只花九牛一毛之力就完成您所有的任務! 增加 <%= str %> 點力量。 2018年秋季限定版裝備", + "headSpecialFall2018WarriorNotes": "(Minotaur Visage) 這副令人驚悚的面具正表明了您可以只花九牛一毛之力就完成您所有的任務! 增加 <%= str %> 點力量。 2018年秋季限定版裝備。", "headSpecialFall2018MageText": "糖果法師帽", - "headSpecialFall2018MageNotes": "這頂帶有尖頭的帽子充滿了強烈的甜蜜蜜咒語。小心,如果它開始融化,將會變得非常黏人! 增加 <%= per %> 點感知。 2018年秋季限定版裝備", + "headSpecialFall2018MageNotes": "這頂帶有尖頭的帽子充滿了強烈的甜蜜蜜咒語。小心,如果它開始融化,將會變得非常黏人! 增加 <%= per %> 點感知。 2018年秋季限定版裝備。", "headSpecialFall2018HealerText": "狼吞虎嚥頭盔", - "headSpecialFall2018HealerNotes": "這頂頭盔是由一種食肉植物所製成,它以能夠製造殭屍和麻煩而聞名。要小心不要讓它在您頭上咀嚼。增加 <%= int %> 點智力。 2018年秋季限定版裝備", + "headSpecialFall2018HealerNotes": "這頂頭盔是由一種食肉植物所製成,它以能夠製造殭屍和麻煩而聞名。要小心不要讓它在您頭上咀嚼。增加 <%= int %> 點智力。 2018年秋季限定版裝備。", "headSpecialNye2018Text": "怪異派對帽", "headSpecialNye2018Notes": "恭喜您收到一頂怪異的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialWinter2019RogueText": "一品紅聖誕頭盔", - "headSpecialWinter2019RogueNotes": "這頂枝繁葉茂的頭盔將在冬季最黑暗的日子裡帶來最閃亮的紅色,幫助您融入節慶的氣氛! 增加 <%= per %> 點感知。 2018-2019冬季限定版裝備", + "headSpecialWinter2019RogueNotes": "這頂枝繁葉茂的頭盔將在冬季最黑暗的日子裡帶來最閃亮的紅色,幫助您融入節慶的氣氛! 增加 <%= per %> 點感知。 2018-2019冬季限定版裝備。", "headSpecialWinter2019WarriorText": "酷寒頭盔", - "headSpecialWinter2019WarriorNotes": "保持冷靜非常重要! 這頂冰冷的頭盔可以保護您免受任何對手的打擊。增加 <%= str %> 點力量。 2018-2019冬季限定版裝備", + "headSpecialWinter2019WarriorNotes": "保持冷靜非常重要! 這頂冰冷的頭盔可以保護您免受任何對手的打擊。增加 <%= str %> 點力量。 2018-2019冬季限定版裝備。", "headSpecialWinter2019MageText": "火紅煙火", - "headSpecialWinter2019MageNotes": "請找個好位子,一同觀看火花的飛舞秀! 您的工作任務絕對無法抵擋這強勁的威力! 增加 <%= per %> 點感知。 2018-2019冬季限定版裝備", + "headSpecialWinter2019MageNotes": "請找個好位子,一同觀看火花的飛舞秀! 您的工作任務絕對無法抵擋這強勁的威力! 增加 <%= per %> 點感知。 2018-2019冬季限定版裝備。", "headSpecialWinter2019HealerText": "星光皇冠", - "headSpecialWinter2019HealerNotes": "在最黑暗、寒冷的冬夜,某一顆星星正閃耀著最明亮的亮光。這頂皇冠是由那顆星星上的稀有金屬所製成的,可幫助您變得更加閃耀! 增加 <%= int %> 點智力。 2018-2019冬季限定版裝備", + "headSpecialWinter2019HealerNotes": "在最黑暗、寒冷的冬夜,某一顆星星正閃耀著最明亮的亮光。這頂皇冠是由那顆星星上的稀有金屬所製成的,可幫助您變得更加閃耀! 增加 <%= int %> 點智力。2018-2019冬季限定版裝備。", "headSpecialGaymerxText": "彩虹戰士頭盔", "headSpecialGaymerxNotes": "為了慶祝GaymerX大會,這頂特別的頭盔飾有炫目多彩、光芒四射的彩虹圖案! GaymerX是一個向所有人開放且支持LGTBQ的遊戲展覽會。無屬性加成。", "headMystery201402Text": "翼盔", - "headMystery201402Notes": "這副帶有翅膀的頭飾能使佩戴者風馳電掣! 無屬性加成。 2014年2月訂閱者專屬裝備", + "headMystery201402Notes": "這副帶有翅膀的頭飾能使佩戴者風馳電掣! 無屬性加成。 2014年2月訂閱者專屬裝備。", "headMystery201405Text": "精神烈焰", - "headMystery201405Notes": "怠惰通通燒毀! 無屬性加成。 2014年5月訂閱者專屬裝備", + "headMystery201405Notes": "怠惰通通燒毀! 無屬性加成。 2014年5月訂閱者專屬裝備。", "headMystery201406Text": "觸角皇冠", - "headMystery201406Notes": "這頂頭盔的觸手能從水中聚集魔力。無屬性加成。 2014年6月訂閱者專屬裝備", + "headMystery201406Notes": "這頂頭盔的觸手能從水中聚集魔力。無屬性加成。 2014年6月訂閱者專屬裝備。", "headMystery201407Text": "海底探險家頭盔", - "headMystery201407Notes": "這頂頭盔能讓探索海底變得易如反掌! 同時它也能讓您變得有點像瞪大眼睛的魚。非常具有復古風!無屬性加成。 2014年7月訂閱者專屬裝備", + "headMystery201407Notes": "這頂頭盔能讓探索海底變得易如反掌! 同時它也能讓您變得有點像瞪大眼睛的魚。非常具有復古風!無屬性加成。 2014年7月訂閱者專屬裝備。", "headMystery201408Text": "太陽皇冠", - "headMystery201408Notes": "這頂閃耀的皇冠給它的佩戴者帶來強大的意志力。無屬性加成。 2014年8月訂閱者專屬裝備", + "headMystery201408Notes": "這頂閃耀的皇冠給它的佩戴者帶來強大的意志力。無屬性加成。 2014年8月訂閱者專屬裝備。", "headMystery201411Text": "運動鐵盔", - "headMystery201411Notes": "這頂帽子是一種傳說中在Habitica裡備受歡迎的體育項目所配戴的。名子就叫平衡球。內容包括將自己全身包覆在防禦裝備之下,並能致力於取得工作和生活之間的平衡... 在被獅鷲獸追趕的時候!無屬性加成。 2014年11月訂閱者專屬裝備", + "headMystery201411Notes": "這頂帽子是一種傳說中在Habitica裡備受歡迎的體育項目所配戴的。名子就叫平衡球。內容包括將自己全身包覆在防禦裝備之下,並能致力於取得工作和生活之間的平衡... 在被獅鷲獸追趕的時候!無屬性加成。 2014年11月訂閱者專屬裝備。", "headMystery201412Text": "企鵝帽子", - "headMystery201412Notes": "誰是企鵝? 無屬性加成。 2014年12月訂閱者專屬裝備", + "headMystery201412Notes": "誰是企鵝? 無屬性加成。 2014年12月訂閱者專屬裝備。", "headMystery201501Text": "繁星頭盔", - "headMystery201501Notes": "頭盔上閃爍搖曳的星座能指引佩戴者的思緒並朝向目標前進。無屬性加成。 2015年1月訂閱者專屬裝備", + "headMystery201501Notes": "頭盔上閃爍搖曳的星座能指引佩戴者的思緒並朝向目標前進。無屬性加成。 2015年1月訂閱者專屬裝備。", "headMystery201505Text": "綠騎士頭盔", - "headMystery201505Notes": "頭盔上的綠色長羽正驕傲的舞動著。無屬性加成。 2015年5月訂閱者專屬裝備", + "headMystery201505Notes": "頭盔上的綠色長羽正驕傲的舞動著。無屬性加成。 2015年5月訂閱者專屬裝備。", "headMystery201508Text": "獵豹帽", - "headMystery201508Notes": "這頂柔順的獵豹帽可真是毛茸茸啊! 無屬性加成。 2015年8月訂閱者專屬裝備", + "headMystery201508Notes": "這頂柔順的獵豹帽可真是毛茸茸啊! 無屬性加成。 2015年8月訂閱者專屬裝備。", "headMystery201509Text": "狼人面具", - "headMystery201509Notes": "這是頂面具,對吧? 無屬性加成。 2015年9月訂閱者專屬裝備", + "headMystery201509Notes": "這是頂面具,對吧? 無屬性加成。 2015年9月訂閱者專屬裝備。", "headMystery201511Text": "木材皇冠", - "headMystery201511Notes": "數數看這頂皇冠上有多少條年輪,這樣就能知道這頂皇冠的年齡有多大了。無屬性加成。 2015年11月訂閱者專屬裝備", + "headMystery201511Notes": "數數看這頂皇冠上有多少條年輪,這樣就能知道這頂皇冠的年齡有多大了。無屬性加成。 2015年11月訂閱者專屬裝備。", "headMystery201512Text": "冬日烈焰", - "headMystery201512Notes": "這團烈焰以最純粹的智慧燃燒著冰冷。無屬性加成。 2015年12月訂閱者專屬裝備", + "headMystery201512Notes": "這團烈焰以最純粹的智慧燃燒著冰冷。無屬性加成。 2015年12月訂閱者專屬裝備。", "headMystery201601Text": "真決心頭盔", - "headMystery201601Notes": "保持堅定,勇敢的鬥士! 無屬性加成。 2016年1月訂閱者專屬裝備", + "headMystery201601Notes": "保持堅定,勇敢的鬥士! 無屬性加成。 2016年1月訂閱者專屬裝備。", "headMystery201602Text": "破心者頭罩", - "headMystery201602Notes": "在所有愛慕者面前捍衛您的身分。無屬性加成。 2016年2月訂閱者專屬裝備", + "headMystery201602Notes": "在所有愛慕者面前捍衛您的身分。無屬性加成。 2016年2月訂閱者專屬裝備。", "headMystery201603Text": "幸運帽", - "headMystery201603Notes": "這頂高頂禮帽散發著神奇的好運魔力。無屬性加成。 2016年3月訂閱者專屬裝備", + "headMystery201603Notes": "這頂高頂禮帽散發著神奇的好運魔力。無屬性加成。 2016年3月訂閱者專屬裝備。", "headMystery201604Text": "鮮花皇冠", - "headMystery201604Notes": "這些被編織在一起的鮮花造就了一頂驚奇的強大頭盔! 無屬性加成。 2016年4月訂閱者專屬裝備", + "headMystery201604Notes": "這些被編織在一起的鮮花造就了一頂驚奇的強大頭盔! 無屬性加成。 2016年4月訂閱者專屬裝備。", "headMystery201605Text": "吟遊詩人行軍高帽", - "headMystery201605Notes": "76隻龍帶領著整個大遊行,另外有110隻獅鷲就在旁邊! 無屬性加成。 2016年5月訂閱者專屬裝備", + "headMystery201605Notes": "76隻龍帶領著整個大遊行,另外有110隻獅鷲就在旁邊! 無屬性加成。 2016年5月訂閱者專屬裝備。", "headMystery201606Text": "海豹人帽子", - "headMystery201606Notes": "(Selkie Cap) 一邊融入嬉戲中的海豹裡,一邊哼著海洋的曲調! 無屬性加成。 2016年6月訂閱者專屬裝備", + "headMystery201606Notes": "(Selkie Cap) 一邊融入嬉戲中的海豹裡,一邊哼著海洋的曲調! 無屬性加成。 2016年6月訂閱者專屬裝備。", "headMystery201607Text": "海底盜賊頭盔", - "headMystery201607Notes": "生長在這頂頭盔上的海帶有助於進行偽裝自己。無屬性加成。 2016年7月訂閱者專屬裝備", + "headMystery201607Notes": "生長在這頂頭盔上的海帶有助於進行偽裝自己。無屬性加成。 2016年7月訂閱者專屬裝備。", "headMystery201608Text": "閃電頭盔", - "headMystery201608Notes": "這頂霹靂啪啦作響的頭盔可以導電! 無屬性加成。 2016年8月訂閱者專屬裝備", + "headMystery201608Notes": "這頂霹靂啪啦作響的頭盔可以導電! 無屬性加成。 2016年8月訂閱者專屬裝備。", "headMystery201609Text": "乳牛帽", - "headMystery201609Notes": "您絕對不會想要哞~下這頂乳牛帽。無屬性加成。 2016年9月訂閱者專屬裝備", + "headMystery201609Notes": "您絕對不會想要哞~下這頂乳牛帽。無屬性加成。 2016年9月訂閱者專屬裝備。", "headMystery201610Text": "幽靈火焰", - "headMystery201610Notes": "這些火焰將會喚醒您的鬼魂力量。無屬性加成。 2016年10月訂閱者專屬裝備", + "headMystery201610Notes": "這些火焰將會喚醒您的鬼魂力量。無屬性加成。 2016年10月訂閱者專屬裝備。", "headMystery201611Text": "豪華盛宴帽", - "headMystery201611Notes": "有了這頂有羽毛裝飾的帽子,您絕對會是這次盛宴中最華麗的人。無屬性加成。 2016年11月訂閱者專屬裝備", + "headMystery201611Notes": "有了這頂有羽毛裝飾的帽子,您絕對會是這次盛宴中最華麗的人。無屬性加成。 2016年11月訂閱者專屬裝備。", "headMystery201612Text": "胡桃鉗頭盔", - "headMystery201612Notes": "這頂高大而壯麗的頭盔給您的慶典服裝增添了華麗的元素! 無屬性加成。 2016年12月訂閱者專屬裝備", + "headMystery201612Notes": "這頂高大而壯麗的頭盔給您的慶典服裝增添了華麗的元素! 無屬性加成。 2016年12月訂閱者專屬裝備。", "headMystery201702Text": "盜心者頭罩", - "headMystery201702Notes": "儘管這條頭罩隱藏了您的臉,但這只會增加您的魅力! 無屬性加成。 2017年2月訂閱者專屬裝備", + "headMystery201702Notes": "儘管這條頭罩隱藏了您的臉,但這只會增加您的魅力! 無屬性加成。 2017年2月訂閱者專屬裝備。", "headMystery201703Text": "一閃一閃亮頭盔", - "headMystery201703Notes": "從角狀頭盔上反射而來的柔和微光,就算是脾氣最差的敵人都能平靜下來。無屬性加成。 2017年3月訂閱者專屬裝備", + "headMystery201703Notes": "從角狀頭盔上反射而來的柔和微光,就算是脾氣最差的敵人都能平靜下來。無屬性加成。 2017年3月訂閱者專屬裝備。", "headMystery201705Text": "羽毛戰士頭盔", - "headMystery201705Notes": "Habitica 因為其兇猛、極具效率的獅鷲戰士而聞名天下! 快戴上這頂羽毛頭盔,一同加入這個受人尊敬的行列之中吧。無屬性加成。 2017年5月訂閱者專屬裝備", + "headMystery201705Notes": "Habitica 因為其兇猛、極具效率的獅鷲戰士而聞名天下! 快戴上這頂羽毛頭盔,一同加入這個受人尊敬的行列之中吧。無屬性加成。2017年5月訂閱者專屬裝備。", "headMystery201707Text": "水母法師頭盔", - "headMystery201707Notes": "對於任務,您需要額外的援助嗎? 這頂半透明的水母頭盔上有相當多的觸手願意伸出援手! 無屬性加成。 2017年7月訂閱者專屬裝備", + "headMystery201707Notes": "對於任務,您需要額外的援助嗎? 這頂半透明的水母頭盔上有相當多的觸手願意伸出援手! 無屬性加成。 2017年7月訂閱者專屬裝備。", "headMystery201710Text": "傲慢惡鬼頭盔", - "headMystery201710Notes": "這頂頭盔讓您看起來有點嚇人。但它不會對您的深度感知有任何幫助! 無屬性加成。 2017年10月訂閱者專屬裝備", + "headMystery201710Notes": "這頂頭盔讓您看起來有點嚇人。但它不會對您的深度感知有任何幫助! 無屬性加成。 2017年10月訂閱者專屬裝備。", "headMystery201712Text": "蠟燭法師皇冠", - "headMystery201712Notes": "這頂皇冠能在最黑暗的寒冬夜晚裡帶來光明和溫暖。無屬性加成。 2017年12月訂閱者專屬裝備", + "headMystery201712Notes": "這頂皇冠能在最黑暗的寒冬夜晚裡帶來光明和溫暖。無屬性加成。 2017年12月訂閱者專屬裝備。", "headMystery201802Text": "蟲粉頭盔", - "headMystery201802Notes": "這頂頭盔上的觸鬚可作為可愛的探測桿,可以探測四周愛與支持的氣氛。無屬性加成。 2018年2月訂閱者專屬裝備", + "headMystery201802Notes": "這頂頭盔上的觸鬚可作為可愛的探測桿,可以探測四周愛與支持的氣氛。無屬性加成。 2018年2月訂閱者專屬裝備。", "headMystery201803Text": "勇猛蜻蜓飾環", - "headMystery201803Notes": "雖然它的外觀非常具有裝飾性,但您可以將翅膀放在這個頭飾上以獲得額外的上升能力! 無屬性加成。 2018年3月訂閱者專屬裝備", + "headMystery201803Notes": "雖然它的外觀非常具有裝飾性,但您可以將翅膀放在這個頭飾上以獲得額外的上升能力! 無屬性加成。 2018年3月訂閱者專屬裝備。", "headMystery201805Text": "華麗孔雀頭盔", - "headMystery201805Notes": "這頂頭盔將能讓您成為城鎮裡最自豪、漂亮(也有可能是最吵鬧)的鳥類。無屬性加成。 2018年5月訂閱者專屬裝備", + "headMystery201805Notes": "這頂頭盔將能讓您成為城鎮裡最自豪、漂亮(也有可能是最吵鬧)的鳥類。無屬性加成。 2018年5月訂閱者專屬裝備。", "headMystery201806Text": "驚豔琵琶魚頭盔", - "headMystery201806Notes": "這頂頭盔上非常吸引人的光線能喚使所有海中的生物到您的身旁。我們懇請您使用這個誘人的發光能力於正面的地方! 無屬性加成。 2018年6月訂閱者專屬裝備", + "headMystery201806Notes": "這頂頭盔上非常吸引人的光線能喚使所有海中的生物到您的身旁。我們懇請您使用這個誘人的發光能力於正面的地方! 無屬性加成。 2018年6月訂閱者專屬裝備。", "headMystery201807Text": "大海蛇頭盔", - "headMystery201807Notes": "這頂頭盔上堅韌的魚鱗能保護您免於受到任何海洋中敵人的攻擊。無屬性加成。 2018年7月訂閱者專屬裝備", + "headMystery201807Notes": "這頂頭盔上堅韌的魚鱗能保護您免於受到任何海洋中敵人的攻擊。無屬性加成。 2018年7月訂閱者專屬裝備。", "headMystery201808Text": "熔岩巨龍披風", - "headMystery201808Notes": "披風上那閃閃發亮的龍角能夠在地底的洞穴中照亮您的路。無屬性加成。 2018年8月訂閱者專屬裝備", + "headMystery201808Notes": "披風上那閃閃發亮的龍角能夠在地底的洞穴中照亮您的路。無屬性加成。 2018年8月訂閱者專屬裝備。", "headMystery201809Text": "秋季花朵皇冠", - "headMystery201809Notes": "來自秋季溫暖日子中的最後一朵花正是紀念此季節中的美麗事物之最佳信物。無屬性加成。 2018年9月訂閱者專屬裝備", + "headMystery201809Notes": "來自秋季溫暖日子中的最後一朵花正是紀念此季節中的美麗事物之最佳信物。無屬性加成。 2018年9月訂閱者專屬裝備。", "headMystery201810Text": "黑暗森林頭盔", - "headMystery201810Notes": "如果您正在穿越一個幽靈般的地方,這頂頭盔上發紅光的眼睛一定能嚇跑沿路中的敵人。無屬性加成。 2018年10月訂閱者專屬裝備", + "headMystery201810Notes": "如果您正在穿越一個幽靈般的地方,這頂頭盔上發紅光的眼睛一定能嚇跑沿路中的敵人。無屬性加成。 2018年10月訂閱者專屬裝備。", "headMystery201811Text": "璀璨法師帽子", - "headMystery201811Notes": "戴上這頂有羽毛的帽子後就算是在最華麗的巫師聚會中也能脫穎而出! 無屬性加成。 2018年11月訂閱者專屬裝備", + "headMystery201811Notes": "戴上這頂有羽毛的帽子後就算是在最華麗的巫師聚會中也能脫穎而出! 無屬性加成。 2018年11月訂閱者專屬裝備。", "headMystery201901Text": "北極星頭盔", - "headMystery201901Notes": "這頭盔上閃閃發亮的鑽石擁有從冬季極光中捕獲到的神奇光線。無屬性加成。 2019年1月訂閱者專屬裝備", + "headMystery201901Notes": "這頭盔上閃閃發亮的鑽石擁有從冬季極光中捕獲到的神奇光線。無屬性加成。 2019年1月訂閱者專屬裝備。", "headMystery301404Text": "華麗高頂禮帽", - "headMystery301404Notes": "上流社會佼佼者的華麗高頂禮帽! 無屬性加成。 3015年1月訂閱者專屬裝備", + "headMystery301404Notes": "上流社會佼佼者的華麗高頂禮帽! 無屬性加成。 3015年1月訂閱者專屬裝備。", "headMystery301405Text": "基礎高頂禮帽", - "headMystery301405Notes": "一頂基礎級的高頂禮帽。一直渴望能與一些華麗的頭飾搭配。無屬性加成。 3015年5月訂閱者專屬裝備", + "headMystery301405Notes": "一頂基礎級的高頂禮帽。一直渴望能與一些華麗的頭飾搭配。無屬性加成。 3015年5月訂閱者專屬裝備。", "headMystery301703Text": "華麗羽毛帽", - "headMystery301703Notes": "這頂帽子上的羽毛是由普理女士的淑女學校(Miss Prue's Finishing School)捐贈給華麗孔雀們的。請自豪地戴上它們吧! 無屬性加成。 3017年3月訂閱者專屬裝備", + "headMystery301703Notes": "這頂帽子上的羽毛是由普理女士的淑女學校(Miss Prue's Finishing School)捐贈給華麗孔雀們的。請自豪地戴上它們吧! 無屬性加成。 3017年3月訂閱者專屬裝備。", "headMystery301704Text": "野雉羽帽", - "headMystery301704Notes": "有甚麼事情能比獲得一根野雉的羽毛還讓人更開心呢? 無屬性加成。 3017年4月訂閱者專屬裝備", + "headMystery301704Notes": "有甚麼事情能比獲得一根野雉的羽毛還讓人更開心呢? 無屬性加成。 3017年4月訂閱者專屬裝備。", "headArmoireLunarCrownText": "治癒之月皇冠", - "headArmoireLunarCrownNotes": "這頂皇冠能增強您的生命並讓您變得更敏捷,尤其是在滿月的時候。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神祕寶箱: 治癒之月套裝(1/3)", + "headArmoireLunarCrownNotes": "這頂皇冠能增強您的生命並讓您變得更敏捷,尤其是在滿月的時候。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 治癒之月套裝(1/3)。", "headArmoireRedHairbowText": "赤紅蝴蝶結頭飾", - "headArmoireRedHairbowNotes": "戴上這副赤紅色的蝴蝶結頭飾,就能讓您變得更強壯、堅韌,還會變聰明喔! 增加 <%= str %> 點力量、 <%= con %> 點體質和 <%= int %> 點智力。 來自神祕寶箱: 赤紅蝴蝶結套裝(1/2)", + "headArmoireRedHairbowNotes": "戴上這副赤紅色的蝴蝶結頭飾,就能讓您變得更強壯、堅韌,還會變聰明喔! 增加 <%= str %> 點力量、 <%= con %> 點體質和 <%= int %> 點智力。 來自神秘寶箱: 赤紅蝴蝶結套裝(1/2)。", "headArmoireVioletFloppyHatText": "羅蘭紫寬簷帽", - "headArmoireVioletFloppyHatNotes": "這頂簡易的帽子是由眾多咒語縫製而成的。最後再給它一抹令人心曠神怡的紫色。增加 <%= per %> 點感知、 <%= int %> 點智力和 <%= con %> 點體質。 來自神祕寶箱: 獨立裝備", + "headArmoireVioletFloppyHatNotes": "這頂簡易的帽子是由眾多咒語縫製而成的。最後再給它一抹令人心曠神怡的紫色。增加 <%= per %> 點感知、 <%= int %> 點智力和 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備。", "headArmoireGladiatorHelmText": "角鬥士頭盔", - "headArmoireGladiatorHelmNotes": "要成為一名鬥士,您不但必須要很強壯...還要夠狡猾。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神祕寶箱: 角鬥士套裝(1/3)", + "headArmoireGladiatorHelmNotes": "要成為一名鬥士,您不但必須要很強壯...還要夠狡猾。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神秘寶箱: 角鬥士套裝(1/3)。", "headArmoireRancherHatText": "牛仔帽", - "headArmoireRancherHatNotes": "戴上這頂神奇的牛仔帽,並拴住您的坐騎和寵物們吧!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。 來自神祕寶箱: 牛仔套裝(1/3)", + "headArmoireRancherHatNotes": "戴上這頂神奇的牛仔帽,並拴住您的坐騎和寵物們吧!增加 <%= str %> 點力量、 <%= per %> 點感知和 <%= int %> 點智力。 來自神秘寶箱: 牛仔套裝(1/3)。", "headArmoireBlueHairbowText": "水藍蝴蝶結頭飾", - "headArmoireBlueHairbowNotes": "戴上這副水藍色的蝴蝶結頭飾,就能讓您變得更敏銳、堅強,還會變聰明喔! 增加 <%= per %> 點感知、 <%= con %> 點體質和 <%= int %> 點智力。 來自神祕寶箱: 水藍蝴蝶結套裝(1/2)。", + "headArmoireBlueHairbowNotes": "戴上這副水藍色的蝴蝶結頭飾,就能讓您變得更敏銳、堅強,還會變聰明喔! 增加 <%= per %> 點感知、 <%= con %> 點體質和 <%= int %> 點智力。 來自神秘寶箱: 水藍蝴蝶結套裝(1/2)。", "headArmoireRoyalCrownText": "皇家王冠", - "headArmoireRoyalCrownNotes": "吾王萬歲萬萬歲,年年有今日歲歲有今朝!增加 <%= str %> 點力量。 來自神秘寶箱: 皇家套裝(1/3)", + "headArmoireRoyalCrownNotes": "吾王萬歲萬萬歲,年年有今日歲歲有今朝!增加 <%= str %> 點力量。 來自神秘寶箱: 皇家套裝(1/3)。", "headArmoireGoldenLaurelsText": "黃金桂冠", - "headArmoireGoldenLaurelsNotes": "這個金色桂冠是用來獎勵那些已經成功克服壞習慣的人們。增加感知、體質各 <%= attrs %> 點。 來自神祕寶箱: 黃金托加長袍套裝(2/3)", + "headArmoireGoldenLaurelsNotes": "這個金色桂冠是用來獎勵那些已經成功克服壞習慣的人們。增加感知、體質各 <%= attrs %> 點。 來自神秘寶箱: 黃金托加長袍套裝(2/3)。", "headArmoireHornedIronHelmText": "鐵角頭盔", - "headArmoireHornedIronHelmNotes": "純鋼打造,無懈可擊。這頂鐵角頭盔硬得幾乎無法被打破。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 鐵角套裝(1/3)", + "headArmoireHornedIronHelmNotes": "純鋼打造,無懈可擊。這頂鐵角頭盔硬得幾乎無法被打破。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 鐵角套裝(1/3)。", "headArmoireYellowHairbowText": "金黃蝴蝶結頭飾", - "headArmoireYellowHairbowNotes": "戴上這副金黃色的蝴蝶結頭飾,就能讓您變得更敏銳、強壯,還會變聰明喔! 增加感知、力量、智力各 <%= attrs %> 點。 來自神祕寶箱: 金黃蝴蝶結套裝(1/2)", + "headArmoireYellowHairbowNotes": "戴上這副金黃色的蝴蝶結頭飾,就能讓您變得更敏銳、強壯,還會變聰明喔! 增加感知、力量、智力各 <%= attrs %> 點。 來自神秘寶箱: 金黃蝴蝶結套裝(1/2)。", "headArmoireRedFloppyHatText": "亮紅寬簷帽", - "headArmoireRedFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出閃閃發亮的紅色。增加體質、智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 淺紅睡衣套裝(1/3)", + "headArmoireRedFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出閃閃發亮的紅色。增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 淺紅睡衣套裝(1/3)。", "headArmoirePlagueDoctorHatText": "瘟疫醫師帽", - "headArmoirePlagueDoctorHatNotes": "怠惰瘟疫主治醫生,值得一頂真實可靠的帽子!增加 <%= str %> 點力量、 <%= int %> 點智力和 <%= con %> 點體質。 來自神祕寶箱: 瘟疫醫師套裝(1/3)", + "headArmoirePlagueDoctorHatNotes": "怠惰瘟疫主治醫生,值得一頂真實可靠的帽子!增加 <%= str %> 點力量、 <%= int %> 點智力和 <%= con %> 點體質。 來自神秘寶箱: 瘟疫醫師套裝(1/3)。", "headArmoireBlackCatText": "黑貓帽", - "headArmoireBlackCatNotes": "這頂黑帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 獨立裝備", + "headArmoireBlackCatNotes": "這頂黑帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 獨立裝備。", "headArmoireOrangeCatText": "橘貓帽", - "headArmoireOrangeCatNotes": "這頂橘帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加力量、體質各 <%= attrs %> 點。 來自神祕寶箱: 獨立裝備", + "headArmoireOrangeCatNotes": "這頂橘帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加力量、體質各 <%= attrs %> 點。 來自神秘寶箱: 獨立裝備。", "headArmoireBlueFloppyHatText": "淺藍寬簷軟帽", - "headArmoireBlueFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出閃亮光輝的藍色。增加體質、智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 淺藍睡衣套裝(1/3)", + "headArmoireBlueFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出閃亮光輝的藍色。增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 淺藍睡衣套裝(1/3)。", "headArmoireShepherdHeaddressText": "牧羊人頭飾", - "headArmoireShepherdHeaddressNotes": "你戴上這頂頭飾能讓您顯得智力非凡,不過您放養的獅鷲無聊時喜歡咀嚼它。增加 <%= int %> 點智力。 來自神秘寶箱: 牧羊人套裝(3/3)", + "headArmoireShepherdHeaddressNotes": "你戴上這頂頭飾能讓您顯得智力非凡,不過您放養的獅鷲無聊時喜歡咀嚼它。增加 <%= int %> 點智力。 來自神秘寶箱: 牧羊人套裝(3/3)。", "headArmoireCrystalCrescentHatText": "弦月水晶帽", - "headArmoireCrystalCrescentHatNotes": "這頂帽子的力量會隨著月亮的陰晴圓缺而變化。增加智力、感知各 <%= attrs %> 點。神秘寶箱: 弦月水晶套裝(1/3)", + "headArmoireCrystalCrescentHatNotes": "這頂帽子的力量會隨著月亮的陰晴圓缺而變化。增加智力、感知各 <%= attrs %> 點。來自神秘寶箱: 弦月水晶套裝(1/3)。", "headArmoireDragonTamerHelmText": "馴龍師頭盔", - "headArmoireDragonTamerHelmNotes": "您看起來就像一條真正的龍。這根本是完美的偽裝。增加<%= int %> 點智力。 來自神祕寶箱: 馴龍師套裝(1/3)", + "headArmoireDragonTamerHelmNotes": "您看起來就像一條真正的龍。這根本是完美的偽裝。增加<%= int %> 點智力。 來自神秘寶箱: 馴龍師套裝(1/3)。", "headArmoireBarristerWigText": "大律師假髮", - "headArmoireBarristerWigNotes": "這頂有彈性的假髮能夠嚇跑敵人,即使它是多麼地凶猛無比。增加 <%= str %> 點力量。 來自神秘寶箱: 律師套裝(1/3)", + "headArmoireBarristerWigNotes": "這頂有彈性的假髮能夠嚇跑敵人,即使它是多麼地凶猛無比。增加 <%= str %> 點力量。 來自神秘寶箱: 律師套裝(1/3)。", "headArmoireJesterCapText": "小丑帽", - "headArmoireJesterCapNotes": "這頂帽子上的鈴鐺雖然會讓對手分心,但它卻會幫助您集中注意力。增加 <%= per %> 點感知。 來自神祕寶箱: 小丑套裝(1/3)", + "headArmoireJesterCapNotes": "這頂帽子上的鈴鐺雖然會讓對手分心,但它卻會幫助您集中注意力。增加 <%= per %> 點感知。 來自神秘寶箱: 小丑套裝(1/3)。", "headArmoireMinerHelmetText": "礦工安全帽", - "headArmoireMinerHelmetNotes": "這頂安全帽能保護您的頭部不被掉落下來的任務給砸傷! 增加 <%= int %> 點智力。 來自神祕寶箱: 挖礦大師套裝(1/3)", + "headArmoireMinerHelmetNotes": "這頂安全帽能保護您的頭部不被掉落下來的任務給砸傷! 增加 <%= int %> 點智力。 來自神秘寶箱: 挖礦大師套裝(1/3)。", "headArmoireBasicArcherCapText": "基礎射手帽子", - "headArmoireBasicArcherCapNotes": "唯有戴上這頂寬鬆的帽子,射手的裝備才算齊全! 增加 <%= per %> 點感知。 來自神祕寶箱: 基礎射手套裝(3/3)", + "headArmoireBasicArcherCapNotes": "唯有戴上這頂寬鬆的帽子,射手的裝備才算齊全! 增加 <%= per %> 點感知。 來自神秘寶箱: 基礎射手套裝(3/3)。", "headArmoireGraduateCapText": "畢業四方帽", - "headArmoireGraduateCapNotes": "恭喜恭喜! 您有遠見的思維讓自己贏得了這頂思考帽。增加 <%= int %> 點智力。 來自神祕寶箱: 畢業生套裝(3/3)", + "headArmoireGraduateCapNotes": "恭喜恭喜! 您有遠見的思維讓自己贏得了這頂思考帽。增加 <%= int %> 點智力。 來自神秘寶箱: 畢業生套裝(3/3)。", "headArmoireGreenFloppyHatText": "翠綠寬簷帽", - "headArmoireGreenFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出帶有華麗感的綠色。增加體質、智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 淺綠睡衣套裝(1/3)", + "headArmoireGreenFloppyHatNotes": "這頂帽子是由附魔過的針線縫製而成的,讓它呈現出帶有華麗感的綠色。增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 淺綠睡衣套裝(1/3)。", "headArmoireCannoneerBandannaText": "砲兵頭巾", - "headArmoireCannoneerBandannaNotes": "這頭巾就是我的生命! 增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 砲兵套裝(3/3)", + "headArmoireCannoneerBandannaNotes": "這頭巾就是我的生命! 增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 砲兵套裝(3/3)。", "headArmoireFalconerCapText": "獵鷹者便帽", - "headArmoireFalconerCapNotes": "這頂輕巧的便帽能幫助您更容易找到獵物。增加 <%= int %> 點智力。 來自神祕寶箱: 獵鷹者套裝(2/3)", + "headArmoireFalconerCapNotes": "這頂輕巧的便帽能幫助您更容易找到獵物。增加 <%= int %> 點智力。 來自神秘寶箱: 獵鷹者套裝(2/3)。", "headArmoireVermilionArcherHelmText": "朱紅射手頭盔", - "headArmoireVermilionArcherHelmNotes": "頭盔上的魔法紅石能讓您像雷射光一樣輕易地瞄準目標! 增加 <%= per %> 點感知。 來自神祕寶箱: 朱紅射手套裝(3/3)", + "headArmoireVermilionArcherHelmNotes": "頭盔上的魔法紅石能讓您像雷射光一樣輕易地瞄準目標! 增加 <%= per %> 點感知。 來自神秘寶箱: 朱紅射手套裝(3/3)。", "headArmoireOgreMaskText": "食人魔面罩", - "headArmoireOgreMaskNotes": "您的敵人一看到您就會馬上退避三舍: 夭壽,食人魔來啦! 增加體質、力量各 <%= attrs %> 點。 來自神祕寶箱: 食人魔套裝(1/3)", + "headArmoireOgreMaskNotes": "您的敵人一看到您就會馬上退避三舍: 夭壽,食人魔來啦! 增加體質、力量各 <%= attrs %> 點。 來自神秘寶箱: 食人魔套裝(1/3)。", "headArmoireIronBlueArcherHelmText": "弓箭手水藍鐵頭盔", - "headArmoireIronBlueArcherHelmNotes": "您的頭很硬? 不,您只是受到良好保護。增加 <%= con %> 點體質。 來自神祕寶箱: 鋼鐵弓箭手套裝(1/3)", + "headArmoireIronBlueArcherHelmNotes": "您的頭很硬? 不,您只是受到良好保護。增加 <%= con %> 點體質。 來自神秘寶箱: 鋼鐵弓箭手套裝(1/3)。", "headArmoireWoodElfHelmText": "木妖精頭盔", - "headArmoireWoodElfHelmNotes": "這頂由葉子製作而成的頭盔或許看起來非常脆弱,但它卻可以在惡劣天氣或是在強敵面前保護您。增加 <%= con %> 點體質。 來自神祕寶箱: 木妖精(1/3)", + "headArmoireWoodElfHelmNotes": "這頂由葉子製作而成的頭盔或許看起來非常脆弱,但它卻可以在惡劣天氣或是在強敵面前保護您。增加 <%= con %> 點體質。 來自神秘寶箱: 木妖精(1/3)。", "headArmoireRamHeaddressText": "牡羊頭飾", - "headArmoireRamHeaddressNotes": "這頂精美的頭盔被塑造成牡羊的樣式。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神祕寶箱: 牡羊野蠻人套裝(1/3)", + "headArmoireRamHeaddressNotes": "這頂精美的頭盔被塑造成牡羊的樣式。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 牡羊野蠻人套裝(1/3)。", "headArmoireCrownOfHeartsText": "愛心皇冠", - "headArmoireCrownOfHeartsNotes": "這頂玫瑰紅的皇冠不僅僅只是很搶眼。它還能在您面對艱難的任務時堅定您的心! 增加 <%= str %> 點力量。 來自神祕寶箱: 心皇后套裝(1/3)", + "headArmoireCrownOfHeartsNotes": "這頂玫瑰紅的皇冠不僅僅只是很搶眼。它還能在您面對艱難的任務時堅定您的心! 增加 <%= str %> 點力量。 來自神秘寶箱: 心皇后套裝(1/3)。", "headArmoireMushroomDruidCapText": "德魯伊蘑菇帽", - "headArmoireMushroomDruidCapNotes": "Mushroom Druid Cap。 這頂在迷霧森林深處得到的帽子能賜予穿戴者藥用植物的知識。增加 <%= int %> 點智力和 <%= str %> 點力量。 來自神祕寶箱: 德魯伊蘑菇套裝(1/3)", + "headArmoireMushroomDruidCapNotes": "Mushroom Druid Cap。 這頂在迷霧森林深處得到的帽子能賜予穿戴者藥用植物的知識。增加 <%= int %> 點智力和 <%= str %> 點力量。 來自神秘寶箱: 德魯伊蘑菇套裝(1/3)。", "headArmoireMerchantChaperonText": "中古世紀 Chaperone 頭巾", - "headArmoireMerchantChaperonNotes": "這件多功能毛製頭巾絕對會讓您成為市場上最時髦的商人! 增加感知、智力各 <%= attrs %> 點。 來自神祕寶箱: 商人套裝(1/3)", + "headArmoireMerchantChaperonNotes": "這件多功能毛製頭巾絕對會讓您成為市場上最時髦的商人! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 商人套裝(1/3)。", "headArmoireVikingHelmText": "維京海盜頭盔", - "headArmoireVikingHelmNotes": "這頂特製的頭盔上不再有犄角的裝飾。因為哪樣會讓敵人輕鬆抓住! 增加 <%= str %> 點力量和 <%= per %> 點感知。 來自神祕寶箱: 維京套裝(2/3)", + "headArmoireVikingHelmNotes": "這頂特製的頭盔上不再有犄角的裝飾。因為哪樣會讓敵人輕鬆抓住! 增加 <%= str %> 點力量和 <%= per %> 點感知。 來自神秘寶箱: 維京套裝(2/3)。", "headArmoireSwanFeatherCrownText": "天鵝羽毛皇冠", - "headArmoireSwanFeatherCrownNotes": "這頂皇冠既可愛又輕巧,彷彿就像是天鵝的羽毛! 增加 <%= int %> 點智力。 來自神祕寶箱: 天鵝湖舞者套裝(1/3)", + "headArmoireSwanFeatherCrownNotes": "這頂皇冠既可愛又輕巧,彷彿就像是天鵝的羽毛! 增加 <%= int %> 點智力。 來自神秘寶箱: 天鵝湖舞者套裝(1/3)。", "headArmoireAntiProcrastinationHelmText": "反怠惰頭盔", - "headArmoireAntiProcrastinationHelmNotes": "這頂強韌的鋼鐵頭盔能幫助您戰勝怠惰並保持健康、快樂有效率! 增加 <%= per %> 點感知。 來自神祕寶箱: 反怠惰套裝(1/3)", + "headArmoireAntiProcrastinationHelmNotes": "這頂強韌的鋼鐵頭盔能幫助您戰勝怠惰並保持健康、快樂有效率! 增加 <%= per %> 點感知。 來自神秘寶箱: 反怠惰套裝(1/3)。", "headArmoireCandlestickMakerHatText": "蠟燭台製作師帽子", - "headArmoireCandlestickMakerHatNotes": "一頂俏皮的帽子能讓工作變得更有趣,而這頂帽子也不例外! 增加感知、智力各 <%= attrs %> 點。 來自神祕寶箱: 蠟燭台製作師套裝(2/3)", + "headArmoireCandlestickMakerHatNotes": "一頂俏皮的帽子能讓工作變得更有趣,而這頂帽子也不例外! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 蠟燭台製作師套裝(2/3)。", "headArmoireLamplightersTopHatText": "點燈伕高頂禮帽", - "headArmoireLamplightersTopHatNotes": "這頂優雅的黑色帽子能幫您完成您的點燈任務! 增加 <%= con %> 點體質。 來自神祕寶箱: 點燈伕套裝(3/4)", + "headArmoireLamplightersTopHatNotes": "這頂優雅的黑色帽子能幫您完成您的點燈任務! 增加 <%= con %> 點體質。 來自神秘寶箱: 點燈伕套裝(3/4)。", "headArmoireCoachDriversHatText": "馬車伕禮帽", - "headArmoireCoachDriversHatNotes": "這頂帽子相當正式,但又不會像高頂禮帽那樣講究。請小心當您在高速駕駛時可別弄丟了帽子! 增加 <%= int %> 點智力。 來自神祕寶箱: 馬車伕套裝(2/3)", + "headArmoireCoachDriversHatNotes": "這頂帽子相當正式,但又不會像高頂禮帽那樣講究。請小心當您在高速駕駛時可別弄丟了帽子! 增加 <%= int %> 點智力。 來自神秘寶箱: 馬車伕套裝(2/3)。", "headArmoireCrownOfDiamondsText": "鑽石皇冠", - "headArmoireCrownOfDiamondsNotes": "這頂閃亮亮的皇冠不僅僅只是頂好帽子,他還能磨練您的心靈! 增加 <%= int %> 點智力。 來自神秘寶箱: 鑽石王者套裝(2/4)", + "headArmoireCrownOfDiamondsNotes": "這頂閃亮亮的皇冠不僅僅只是頂好帽子,他還能磨練您的心靈! 增加 <%= int %> 點智力。 來自神秘寶箱: 鑽石王者套裝(2/4)。", "headArmoireFlutteryWigText": "翩翩飛舞假髮", - "headArmoireFlutteryWigNotes": "這頂精美的撲粉歐式假髮裡有許許多多的空隙可以讓正聽您的吩咐而勞累的蝴蝶稍作休息、喘口氣。增加智力、感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(2/4)", + "headArmoireFlutteryWigNotes": "這頂精美的撲粉歐式假髮裡有許許多多的空隙可以讓正聽您的吩咐而勞累的蝴蝶稍作休息、喘口氣。增加智力、感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(2/4)。", "headArmoireBirdsNestText": "鳥巢", - "headArmoireBirdsNestNotes": "如果您開始感覺到頭上有些陣陣騷動且聽到不間斷吱吱喳喳的鳥聲音,這代表著這頂新帽子已經成為您的新朋友了。增加 <%= int %> 點智力。 來自神秘寶箱: 獨立裝備", + "headArmoireBirdsNestNotes": "如果您開始感覺到頭上有些陣陣騷動且聽到不間斷吱吱喳喳的鳥聲音,這代表著這頂新帽子已經成為您的新朋友了。增加 <%= int %> 點智力。 來自神秘寶箱: 獨立裝備。", "headArmoirePaperBagText": "紙袋", - "headArmoirePaperBagNotes": "這個袋子是個看起來很滑稽,戴上後卻意外地非常安全的頭盔 (別擔心,我們知道您戴上這之後看起來狀況非常好! ) 增加 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備", + "headArmoirePaperBagNotes": "這個袋子是個看起來很滑稽,戴上後卻意外地非常安全的頭盔 (別擔心,我們知道您戴上這之後看起來狀況非常好! ) 增加 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備。", "headArmoireBigWigText": "巨大假髮", - "headArmoireBigWigNotes": "撲粉假髮是為了讓人看起來更有威嚴,但這頂假髮只會讓人看了捧腹大笑而已! 增加 <%= str %> 點力量。 來自神祕寶箱: 獨立裝備。", + "headArmoireBigWigNotes": "撲粉假髮是為了讓人看起來更有威嚴,但這頂假髮只會讓人看了捧腹大笑而已! 增加 <%= str %> 點力量。 來自神秘寶箱: 獨立裝備。", "headArmoireGlassblowersHatText": "玻璃吹製工工作帽", - "headArmoireGlassblowersHatNotes": "這頂帽子與您的其他玻璃吹製工套裝穿搭在一起會看起來非常好看唷! 增加 <%= per %> 點感知。 來自神祕寶箱: 玻璃吹製工套裝(3/4)", + "headArmoireGlassblowersHatNotes": "這頂帽子與您的其他玻璃吹製工套裝穿搭在一起會看起來非常好看唷! 增加 <%= per %> 點感知。 來自神秘寶箱: 玻璃吹製工套裝(3/4)。", "headArmoirePiraticalPrincessHeaddressText": "海盜公主頭飾", - "headArmoirePiraticalPrincessHeaddressNotes": "自古以來經驗老到的海盜皆是以擁有高檔的頭飾而聞名的! 增加感知、智力各 <%= attrs %> 點。 來自神祕寶箱: 海盜公主套裝(1/4)", + "headArmoirePiraticalPrincessHeaddressNotes": "自古以來經驗老到的海盜皆是以擁有高檔的頭飾而聞名的! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 海盜公主套裝(1/4)。", "headArmoireJeweledArcherHelmText": "射手寶石頭盔", - "headArmoireJeweledArcherHelmNotes": "這頂頭盔不僅看起來非常華麗,它還格外地輕穎和堅固。增加 <%= int %> 點智力。 來自神祕寶箱: 射手寶石套裝(1/3)", + "headArmoireJeweledArcherHelmNotes": "這頂頭盔不僅看起來非常華麗,它還格外地輕穎和堅固。增加 <%= int %> 點智力。 來自神秘寶箱: 射手寶石套裝(1/3)。", "headArmoireVeilOfSpadesText": "黑桃面紗", - "headArmoireVeilOfSpadesNotes": "一件朦朧而神秘的面紗,可以增加您的潛行能力。增加 <%= per %> 點感知。 來自神祕寶箱: 黑桃長矛套裝(1/3)", + "headArmoireVeilOfSpadesNotes": "一件朦朧而神秘的面紗,可以增加您的潛行能力。增加 <%= per %> 點感知。 來自神秘寶箱: 黑桃長矛套裝(1/3)。", "offhand": "副手裝備", "offhandCapitalized": "副手裝備", "shieldBase0Text": "沒有副手裝備", @@ -1315,238 +1315,238 @@ "shieldSpecialWakizashiText": "脇差", "shieldSpecialWakizashiNotes": "(Wakizashi) 這把短刀是您正與每日任務近戰時的絕佳選擇! 增加 <%= con %> 點認知。", "shieldSpecialYetiText": "雪怪馴化師護盾", - "shieldSpecialYetiNotes": "這面護盾可映射雪光。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備", + "shieldSpecialYetiNotes": "這面護盾可映射雪光。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備。", "shieldSpecialSnowflakeText": "雪花護盾", - "shieldSpecialSnowflakeNotes": "每一面護盾都是獨一無二的。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備", + "shieldSpecialSnowflakeNotes": "每一面護盾都是獨一無二的。增加 <%= con %> 點體質。 2013-2014冬季限定版裝備。", "shieldSpecialSpringRogueText": "鉤爪", - "shieldSpecialSpringRogueNotes": "非常適合用來攀爬高樓,當然也可以用來抓爛地毯。增加 <%= str %> 點力量。 2014年春季限定版裝備", + "shieldSpecialSpringRogueNotes": "非常適合用來攀爬高樓,當然也可以用來抓爛地毯。增加 <%= str %> 點力量。 2014年春季限定版裝備。", "shieldSpecialSpringWarriorText": "蛋蛋護盾", - "shieldSpecialSpringWarriorNotes": "無論您多用力地敲這面護盾,它就是永遠不會出現裂痕!增加 <%= con %> 點體質。 2014年春季限定版裝備", + "shieldSpecialSpringWarriorNotes": "無論您多用力地敲這面護盾,它就是永遠不會出現裂痕!增加 <%= con %> 點體質。 2014年春季限定版裝備。", "shieldSpecialSpringHealerText": "終極護衛吱吱球", - "shieldSpecialSpringHealerNotes": "在戰鬥中將盡情發出令人厭惡且不間斷的吱吱聲以驅趕敵人。增加 <%= con %> 點體質。 2014年春季限定版裝備", + "shieldSpecialSpringHealerNotes": "在戰鬥中將盡情發出令人厭惡且不間斷的吱吱聲以驅趕敵人。增加 <%= con %> 點體質。 2014年春季限定版裝備。", "shieldSpecialSummerRogueText": "海盜彎刀", - "shieldSpecialSummerRogueNotes": "停!!您這樣子會讓那些每日任務走上跳板一去不復返!增加 <%= str %> 點力量。 2014年夏季限定版裝備", + "shieldSpecialSummerRogueNotes": "停!!您這樣子會讓那些每日任務走上跳板一去不復返!增加 <%= str %> 點力量。 2014年夏季限定版裝備。", "shieldSpecialSummerWarriorText": "漂流木盾", - "shieldSpecialSummerWarriorNotes": "這面盾牌是由已沉船的漂流木所製成。但就算是最艱難的每日任務也能克服。增加 <%= con %> 點體質。 2014年夏季限定版裝備", + "shieldSpecialSummerWarriorNotes": "這面盾牌是由已沉船的漂流木所製成。但就算是最艱難的每日任務也能克服。增加 <%= con %> 點體質。 2014年夏季限定版裝備。", "shieldSpecialSummerHealerText": "淺灘護盾", - "shieldSpecialSummerHealerNotes": "看到這面閃亮亮的護盾,就沒人敢再來攻擊珊瑚礁!增加 <%= con %> 點體質。 2014年夏季限定版裝備", + "shieldSpecialSummerHealerNotes": "看到這面閃亮亮的護盾,就沒人敢再來攻擊珊瑚礁!增加 <%= con %> 點體質。 2014年夏季限定版裝備。", "shieldSpecialFallRogueText": "銀製鐵樁", - "shieldSpecialFallRogueNotes": "可以驅走亡靈,同時也能有效抵禦狼人,因為您應謹記凡事小心為上。增加 <%= str %> 點力量。 2014年秋季限定版裝備", + "shieldSpecialFallRogueNotes": "可以驅走亡靈,同時也能有效抵禦狼人,因為您應謹記凡事小心為上。增加 <%= str %> 點力量。 2014年秋季限定版裝備。", "shieldSpecialFallWarriorText": "科學強效藥水", - "shieldSpecialFallWarriorNotes": "灑滿於實驗室大衣上的神祕藥水。增加 <%= con %> 點體質。 2014年秋季限定版裝備", + "shieldSpecialFallWarriorNotes": "灑滿於實驗室大衣上的神祕藥水。增加 <%= con %> 點體質。 2014年秋季限定版裝備。", "shieldSpecialFallHealerText": "寶石護盾", - "shieldSpecialFallHealerNotes": "這面閃亮亮的護盾被發掘於一座古墓。增加 <%= con %> 點體質。 2014年秋季限定版裝備", + "shieldSpecialFallHealerNotes": "這面閃亮亮的護盾被發掘於一座古墓。增加 <%= con %> 點體質。 2014年秋季限定版裝備。", "shieldSpecialWinter2015RogueText": "冰柱尖釘", - "shieldSpecialWinter2015RogueNotes": "這真的是,完全是,絕對是剛從地上撿起來的。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備", + "shieldSpecialWinter2015RogueNotes": "這真的是,完全是,絕對是剛從地上撿起來的。增加 <%= str %> 點力量。 2014-2015冬季限定版裝備。", "shieldSpecialWinter2015WarriorText": "果凍糖護盾", - "shieldSpecialWinter2015WarriorNotes": "這面看起來甜蜜蜜的護盾其實是由富有營養的植物性凝膠所製作而成的。增加 <%= con %> 點體質。 2014-2015冬季限定版裝備", + "shieldSpecialWinter2015WarriorNotes": "這面看起來甜蜜蜜的護盾其實是由富有營養的植物性凝膠所製作而成的。增加 <%= con %> 點體質。 2014-2015冬季限定版裝備。", "shieldSpecialWinter2015HealerText": "鎮靜護盾", - "shieldSpecialWinter2015HealerNotes": "這面護盾可抵擋刺骨的寒風。增加 <%= con %> 點體質。 2014-2015冬季限定版裝備", + "shieldSpecialWinter2015HealerNotes": "這面護盾可抵擋刺骨的寒風。增加 <%= con %> 點體質。 2014-2015冬季限定版裝備。", "shieldSpecialSpring2015RogueText": "霹靂爆破管", - "shieldSpecialSpring2015RogueNotes": "別被它軟弱的聲音給搞糊塗了——這爆炸威力可大得不得了。增加 <%= str %> 點力量。 2015年春季限定版裝備", + "shieldSpecialSpring2015RogueNotes": "別被它軟弱的聲音給搞糊塗了——這爆炸威力可大得不得了。增加 <%= str %> 點力量。 2015年春季限定版裝備。", "shieldSpecialSpring2015WarriorText": "盤子鐵餅", - "shieldSpecialSpring2015WarriorNotes": "向您的敵人擲去……或者也可以一直握著它,因為到了晚飯時間它就會自動裝滿美味的狗食。增加 <%= con %> 點體質。 2015年春季限定版裝備", + "shieldSpecialSpring2015WarriorNotes": "向您的敵人擲去……或者也可以一直握著它,因為到了晚飯時間它就會自動裝滿美味的狗食。增加 <%= con %> 點體質。 2015年春季限定版裝備。", "shieldSpecialSpring2015HealerText": "圖騰枕頭", - "shieldSpecialSpring2015HealerNotes": "您可以把頭靠在這塊軟綿綿的枕頭上,也可以用您可怕的爪子和它玩摔跤。嗷嗚!增加 <%= con %> 點體質。 2015年春季限定版裝備", + "shieldSpecialSpring2015HealerNotes": "您可以把頭靠在這塊軟綿綿的枕頭上,也可以用您可怕的爪子和它玩摔跤。嗷嗚!增加 <%= con %> 點體質。 2015年春季限定版裝備。", "shieldSpecialSummer2015RogueText": "火焰珊瑚", - "shieldSpecialSummer2015RogueNotes": "此火珊瑚具有能在水裡散播毒液的能力。增加 <%= str %> 點力量。 2015年夏季限定版裝備", + "shieldSpecialSummer2015RogueNotes": "此火珊瑚具有能在水裡散播毒液的能力。增加 <%= str %> 點力量。 2015年夏季限定版裝備。", "shieldSpecialSummer2015WarriorText": "太陽魚護盾", - "shieldSpecialSummer2015WarriorNotes": "由怠慢小鎮出生的工匠從深海金屬提煉製作而成。是頂堅固又兼具美觀的頭盔。增加 <%= con %> 點體質。2015年夏季限定版裝備", + "shieldSpecialSummer2015WarriorNotes": "由怠慢小鎮出生的工匠從深海金屬提煉製作而成。是頂堅固又兼具美觀的頭盔。增加 <%= con %> 點體質。2015年夏季限定版裝備。", "shieldSpecialSummer2015HealerText": "橡皮膏護盾", - "shieldSpecialSummer2015HealerNotes": "用這面盾牌擊退船艙裡的老鼠吧。增加 <%= con %> 點體質。 2015年夏季限定版裝備", + "shieldSpecialSummer2015HealerNotes": "用這面盾牌擊退船艙裡的老鼠吧。增加 <%= con %> 點體質。 2015年夏季限定版裝備。", "shieldSpecialFall2015RogueText": "戰蝠巨斧", - "shieldSpecialFall2015RogueNotes": "都在这把神斧的挥砍之下瑟瑟发抖。增加 <%= str %> 點力量。 2015年秋季限定版裝備", + "shieldSpecialFall2015RogueNotes": "都在这把神斧的挥砍之下瑟瑟发抖。增加 <%= str %> 點力量。 2015年秋季限定版裝備。", "shieldSpecialFall2015WarriorText": "鳥飼料囊包", - "shieldSpecialFall2015WarriorNotes": "沒錯,您是真的該嚇走這些烏鴉,但交些朋友也不是什麼壞事呀!增加 <%= con %> 點體質。 2015年秋季限定版裝備", + "shieldSpecialFall2015WarriorNotes": "沒錯,您是真的該嚇走這些烏鴉,但交些朋友也不是什麼壞事呀!增加 <%= con %> 點體質。 2015年秋季限定版裝備。", "shieldSpecialFall2015HealerText": "攪拌棒", - "shieldSpecialFall2015HealerNotes": "這根棒子無論攪拌任何東西都不會融化、溶解、更不會起火燃燒!您還可用它狠狠地戳向敵方的任務。增加 <%= con %> 點體質。 2015年秋季限定版裝備", + "shieldSpecialFall2015HealerNotes": "這根棒子無論攪拌任何東西都不會融化、溶解、更不會起火燃燒!您還可用它狠狠地戳向敵方的任務。增加 <%= con %> 點體質。 2015年秋季限定版裝備。", "shieldSpecialWinter2016RogueText": "可可豆馬克杯", - "shieldSpecialWinter2016RogueNotes": "這是一杯熱可可,還是炙手可熱的投擲物呢?由您決定!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備", + "shieldSpecialWinter2016RogueNotes": "這是一杯熱可可,還是炙手可熱的投擲物呢?由您決定!增加 <%= str %> 點力量。 2015-2016冬季限定版裝備。", "shieldSpecialWinter2016WarriorText": "雪橇護盾", - "shieldSpecialWinter2016WarriorNotes": "用這塊雪橇來格擋攻擊,或者乘著它華麗地進入戰場! 增加 <%= con %> 點體質。 2015-2016冬季限定版裝備", + "shieldSpecialWinter2016WarriorNotes": "用這塊雪橇來格擋攻擊,或者乘著它華麗地進入戰場! 增加 <%= con %> 點體質。 2015-2016冬季限定版裝備。", "shieldSpecialWinter2016HealerText": "小仙子禮物", - "shieldSpecialWinter2016HealerNotes": "快拆開來快拆開來快拆開來! 因為很重要,所以要說三次!!!!!! 增加 <%= con %> 點感知。 2015-2016冬季限定版裝備", + "shieldSpecialWinter2016HealerNotes": "快拆開來快拆開來快拆開來! 因為很重要,所以要說三次!!!!!! 增加 <%= con %> 點感知。 2015-2016冬季限定版裝備。", "shieldSpecialSpring2016RogueText": "鍊火球", - "shieldSpecialSpring2016RogueNotes": "您已精通了錘球、棍棒、和小刀。現在您可晉身到雜耍火球! 啊嗚! 增加 <%= str %> 點力量。 2016年春季限定版裝備", + "shieldSpecialSpring2016RogueNotes": "您已精通了錘球、棍棒、和小刀。現在您可晉身到雜耍火球! 啊嗚! 增加 <%= str %> 點力量。 2016年春季限定版裝備。", "shieldSpecialSpring2016WarriorText": "起司輪盤", - "shieldSpecialSpring2016WarriorNotes": "您勇敢地面對惡魔的陷阱並取得這份能夠提升防禦的食物。增加 <%= con %> 點體質。 2016年春季限定版裝備", + "shieldSpecialSpring2016WarriorNotes": "您勇敢地面對惡魔的陷阱並取得這份能夠提升防禦的食物。增加 <%= con %> 點體質。 2016年春季限定版裝備。", "shieldSpecialSpring2016HealerText": "花卉圓盾", - "shieldSpecialSpring2016HealerNotes": "愚人節宣稱這副小而美的護盾將能阻止閃亮種子的侵襲。千萬別相信它。增加 <%= con %> 點體質。 2016年春季限定版裝備", + "shieldSpecialSpring2016HealerNotes": "愚人節宣稱這副小而美的護盾將能阻止閃亮種子的侵襲。千萬別相信它。增加 <%= con %> 點體質。 2016年春季限定版裝備。", "shieldSpecialSummer2016RogueText": "電桿", - "shieldSpecialSummer2016RogueNotes": "所有與您戰鬥的人都將會得到一份觸目驚心的驚喜... 增加 <%= str %> 點力量。 2016年夏季限定版裝備", + "shieldSpecialSummer2016RogueNotes": "所有與您戰鬥的人都將會得到一份觸目驚心的驚喜... 增加 <%= str %> 點力量。 2016年夏季限定版裝備。", "shieldSpecialSummer2016WarriorText": "鯊魚牙齒", - "shieldSpecialSummer2016WarriorNotes": "用這副齒盾來盡情撕咬那些艱鉅的任務吧! 增加 <%= con %> 點體質。 2016年夏季限定版裝備", + "shieldSpecialSummer2016WarriorNotes": "用這副齒盾來盡情撕咬那些艱鉅的任務吧! 增加 <%= con %> 點體質。 2016年夏季限定版裝備。", "shieldSpecialSummer2016HealerText": "海星護盾", - "shieldSpecialSummer2016HealerNotes": "有時會被誤叫做星海護盾。增加 <%= con %> 點體質。 2016年夏季限定版裝備", + "shieldSpecialSummer2016HealerNotes": "有時會被誤叫做星海護盾。增加 <%= con %> 點體質。 2016年夏季限定版裝備。", "shieldSpecialFall2016RogueText": "蛛咬匕首", - "shieldSpecialFall2016RogueNotes": "感受一下被蜘蛛咬到的刺痛感吧! 增加 <%= str %> 點力量。 2016年秋季限定版裝備", + "shieldSpecialFall2016RogueNotes": "感受一下被蜘蛛咬到的刺痛感吧! 增加 <%= str %> 點力量。 2016年秋季限定版裝備。", "shieldSpecialFall2016WarriorText": "防禦樹根", - "shieldSpecialFall2016WarriorNotes": "用這條扭曲的樹根來對抗每日任務吧! 增加 <%= con %> 點體質。 2016年秋季限定版裝備", + "shieldSpecialFall2016WarriorNotes": "用這條扭曲的樹根來對抗每日任務吧! 增加 <%= con %> 點體質。 2016年秋季限定版裝備。", "shieldSpecialFall2016HealerText": "蛇髮女妖護盾", - "shieldSpecialFall2016HealerNotes": "(Gorgon) 千萬別陶醉於這面護盾映射中的自己。增加 <%= con %> 點體質。 2016年秋季限定版裝備", + "shieldSpecialFall2016HealerNotes": "(Gorgon) 千萬別陶醉於這面護盾映射中的自己。增加 <%= con %> 點體質。 2016年秋季限定版裝備。", "shieldSpecialWinter2017RogueText": "冰之巨斧", - "shieldSpecialWinter2017RogueNotes": "這根斧頭非常適合拿來攻擊、防禦、甚至是攀登冰坡! 增加 <%= str %> 點力量。 2016-2017冬季限定版裝備", + "shieldSpecialWinter2017RogueNotes": "這根斧頭非常適合拿來攻擊、防禦、甚至是攀登冰坡! 增加 <%= str %> 點力量。 2016-2017冬季限定版裝備。", "shieldSpecialWinter2017WarriorText": "冰上曲棍球護盾", - "shieldSpecialWinter2017WarriorNotes": "這面盾牌是由巨大的冰上曲棍球所製成,能夠禁得起相當大的撞擊力道。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備", + "shieldSpecialWinter2017WarriorNotes": "這面盾牌是由巨大的冰上曲棍球所製成,能夠禁得起相當大的撞擊力道。增加 <%= con %> 點體質。 2016-2017冬季限定版裝備。", "shieldSpecialWinter2017HealerText": "酸梅護盾", - "shieldSpecialWinter2017HealerNotes": "這套充滿纖維的裝備就算是碰到最酸溜溜的任務也能夠抵禦下來! 增加 <%= con %> 點體質。 2016-2017冬季限定版裝備", + "shieldSpecialWinter2017HealerNotes": "這套充滿纖維的裝備就算是碰到最酸溜溜的任務也能夠抵禦下來! 增加 <%= con %> 點體質。 2016-2017冬季限定版裝備。", "shieldSpecialSpring2017RogueText": "胡蘿蔔武士刀", - "shieldSpecialSpring2017RogueNotes": "這把利刃不但能加速完成任務,而且還非常方便於切蔬菜! Yum! 增加 <%= str %> 點力量。 2017年春季限定版裝備", + "shieldSpecialSpring2017RogueNotes": "這把利刃不但能加速完成任務,而且還非常方便於切蔬菜! Yum! 增加 <%= str %> 點力量。 2017年春季限定版裝備。", "shieldSpecialSpring2017WarriorText": "紡紗護盾", - "shieldSpecialSpring2017WarriorNotes": "這面護盾上的任何一條纖維皆由防護咒語所編織而成! 千萬不要玩(壞)它。增加 <%= con %> 點體質。 2017年春季限定版裝備", + "shieldSpecialSpring2017WarriorNotes": "這面護盾上的任何一條纖維皆由防護咒語所編織而成! 千萬不要玩(壞)它。增加 <%= con %> 點體質。 2017年春季限定版裝備。", "shieldSpecialSpring2017HealerText": "編織籃護盾", - "shieldSpecialSpring2017HealerNotes": "這面護盾不僅能夠用來防禦,對於放置您採集來的草藥和隨身裝備也非常方便。增加 <%= con %> 點體質。 2017年春季限定版裝備", + "shieldSpecialSpring2017HealerNotes": "這面護盾不僅能夠用來防禦,對於放置您採集來的草藥和隨身裝備也非常方便。增加 <%= con %> 點體質。 2017年春季限定版裝備。", "shieldSpecialSummer2017RogueText": "海龍魚鰭", - "shieldSpecialSummer2017RogueNotes": "這些鰭有著像剃刀般鋒利的邊緣。增加 <%= str %> 點力量。 2017年夏季限定版裝備", + "shieldSpecialSummer2017RogueNotes": "這些鰭有著像剃刀般鋒利的邊緣。增加 <%= str %> 點力量。 2017年夏季限定版裝備。", "shieldSpecialSummer2017WarriorText": "紫扇貝護盾", - "shieldSpecialSummer2017WarriorNotes": "您剛找到的貝殼同時兼具裝飾性和防禦性! 增加 <%= con %> 點體質。 2017年夏季限定版裝備", + "shieldSpecialSummer2017WarriorNotes": "您剛找到的貝殼同時兼具裝飾性和防禦性! 增加 <%= con %> 點體質。 2017年夏季限定版裝備。", "shieldSpecialSummer2017HealerText": "牡蠣護盾", - "shieldSpecialSummer2017HealerNotes": "這顆魔法牡蠣時時刻刻都在為您帶來珍珠和保護。增加 <%= con %> 點體質。 2017年夏季限定版裝備", + "shieldSpecialSummer2017HealerNotes": "這顆魔法牡蠣時時刻刻都在為您帶來珍珠和保護。增加 <%= con %> 點體質。 2017年夏季限定版裝備。", "shieldSpecialFall2017RogueText": "蘋果糖葫蘆權杖", - "shieldSpecialFall2017RogueNotes": "用甜蜜蜜香死您的敵人吧! 增加 <%= str %> 點力量。 2017年限定版秋季裝備", + "shieldSpecialFall2017RogueNotes": "用甜蜜蜜香死您的敵人吧! 增加 <%= str %> 點力量。 2017年限定版秋季裝備。", "shieldSpecialFall2017WarriorText": "玉米糖漿護盾", - "shieldSpecialFall2017WarriorNotes": "這面糖果護盾擁有非常強力的防禦力量,可別因為一時的嘴饞而去咬它喔! 增加 <%= con %> 點體質。 2017年秋季限定版裝備", + "shieldSpecialFall2017WarriorNotes": "這面糖果護盾擁有非常強力的防禦力量,可別因為一時的嘴饞而去咬它喔! 增加 <%= con %> 點體質。 2017年秋季限定版裝備。", "shieldSpecialFall2017HealerText": "幽靈寶珠", - "shieldSpecialFall2017HealerNotes": "這顆小球不定期會發出尖叫聲。我們深表歉意,因為我們也不知道確切的原因。但它看起來真的非常俏皮可愛! 增加 <%= con %> 點體質。 2017年秋季限定版裝備", + "shieldSpecialFall2017HealerNotes": "這顆小球不定期會發出尖叫聲。我們深表歉意,因為我們也不知道確切的原因。但它看起來真的非常俏皮可愛! 增加 <%= con %> 點體質。 2017年秋季限定版裝備。", "shieldSpecialWinter2018RogueText": "紅色貓薄荷掛鉤", - "shieldSpecialWinter2018RogueNotes": "此裝備極為適合用於攀爬圍牆或利用掛鉤上甜美多汁的糖果來分散敵人的注意力。增加 <%= str %> 點力量。 2017-2018冬季限定版裝備", + "shieldSpecialWinter2018RogueNotes": "此裝備極為適合用於攀爬圍牆或利用掛鉤上甜美多汁的糖果來分散敵人的注意力。增加 <%= str %> 點力量。 2017-2018冬季限定版裝備。", "shieldSpecialWinter2018WarriorText": "魔術禮物包", - "shieldSpecialWinter2018WarriorNotes": "任何您想要的實用物品都可以在這個麻袋裡找到。只要您能低語說出正確的通關咒語。增加 <%= con %> 點體質。 2017-2018冬季限定版裝備", + "shieldSpecialWinter2018WarriorNotes": "任何您想要的實用物品都可以在這個麻袋裡找到。只要您能低語說出正確的通關咒語。增加 <%= con %> 點體質。 2017-2018冬季限定版裝備。", "shieldSpecialWinter2018HealerText": "槲寄生鈴鐺", - "shieldSpecialWinter2018HealerNotes": "那是甚麼聲音? 就是那所有人都能聽見的暖心歡呼聲! 增加 <%= con %> 點體質。 2017-2018冬季限定版裝備", + "shieldSpecialWinter2018HealerNotes": "那是甚麼聲音? 就是那所有人都能聽見的暖心歡呼聲! 增加 <%= con %> 點體質。 2017-2018冬季限定版裝備。", "shieldSpecialSpring2018WarriorText": "早晨護盾", - "shieldSpecialSpring2018WarriorNotes": "這面堅固的護盾能與輝煌的第一道曙光一同發光發熱。增加 <%= con %> 點體質。 2018年春季限定版裝備", + "shieldSpecialSpring2018WarriorNotes": "這面堅固的護盾能與輝煌的第一道曙光一同發光發熱。增加 <%= con %> 點體質。 2018年春季限定版裝備。", "shieldSpecialSpring2018HealerText": "石榴石護盾", - "shieldSpecialSpring2018HealerNotes": "這面護盾不但擁有華麗的外表,還非常耐用呢! 增加 <%= con %> 點體質。 2018年春季限定版裝備", + "shieldSpecialSpring2018HealerNotes": "這面護盾不但擁有華麗的外表,還非常耐用呢! 增加 <%= con %> 點體質。 2018年春季限定版裝備。", "shieldSpecialSummer2018WarriorText": "鬥魚骨護盾", - "shieldSpecialSummer2018WarriorNotes": "以石頭塑成,這面嚇人的魚骨護盾能在與骸骨寵物和坐騎們齊聚一堂時,讓所有魚類敵人都深感畏懼。增加 <%= con %> 點體質。 2018年夏季限量版裝備", + "shieldSpecialSummer2018WarriorNotes": "以石頭塑成,這面嚇人的魚骨護盾能在與骸骨寵物和坐騎們齊聚一堂時,讓所有魚類敵人都深感畏懼。增加 <%= con %> 點體質。 2018年夏季限量版裝備。", "shieldSpecialSummer2018HealerText": "人魚帝王紋章", - "shieldSpecialSummer2018HealerNotes": "這面盾牌能夠製造出充滿空氣的球狀空間,以利來自陸地上的訪客拜訪您的水中王國時能夠呼吸。增加 <%= con %> 點體質。2018年夏季限量版裝備", + "shieldSpecialSummer2018HealerNotes": "這面盾牌能夠製造出充滿空氣的球狀空間,以利來自陸地上的訪客拜訪您的水中王國時能夠呼吸。增加 <%= con %> 點體質。2018年夏季限量版裝備。", "shieldSpecialFall2018RogueText": "迷惑藥水瓶", - "shieldSpecialFall2018RogueNotes": "這瓶子代表了所有讓您分心或讓您不能成為最佳自我的雜事! 請忍住! 我們為您歡呼! 增加 <%= str %> 點力量。 2018年秋季限定版裝備", + "shieldSpecialFall2018RogueNotes": "這瓶子代表了所有讓您分心或讓您不能成為最佳自我的雜事! 請忍住! 我們為您歡呼! 增加 <%= str %> 點力量。 2018年秋季限定版裝備。", "shieldSpecialFall2018WarriorText": "輝煌護盾", - "shieldSpecialFall2018WarriorNotes": "像黃金般地閃耀以阻止煩人的蛇髮女妖不再跟您玩躲貓貓! 增加 <%= con %> 點體質。 2018年秋季限定版裝備", + "shieldSpecialFall2018WarriorNotes": "像黃金般地閃耀以阻止煩人的蛇髮女妖不再跟您玩躲貓貓! 增加 <%= con %> 點體質。 2018年秋季限定版裝備。", "shieldSpecialFall2018HealerText": "飢餓護盾", - "shieldSpecialFall2018HealerNotes": "這面護盾擁有寬闊的嗦囊能夠吸收所有敵人的轟炸。增加 <%= con %> 點體質。 2018年秋季限定版裝備", + "shieldSpecialFall2018HealerNotes": "這面護盾擁有寬闊的嗦囊能夠吸收所有敵人的轟炸。增加 <%= con %> 點體質。 2018年秋季限定版裝備。", "shieldSpecialWinter2019WarriorText": "冰霜護盾", - "shieldSpecialWinter2019WarriorNotes": "這面盾牌是使用來自Stoïkalm草原中最古老的冰川的冰塊所製成的。增加體質 <%= con %> 點。 2018-2019冬季限定版裝備", + "shieldSpecialWinter2019WarriorNotes": "這面盾牌是使用來自Stoïkalm草原中最古老的冰川的冰塊所製成的。增加體質 <%= con %> 點。 2018-2019冬季限定版裝備。", "shieldSpecialWinter2019HealerText": "附魔冰晶", - "shieldSpecialWinter2019HealerNotes": "這細薄的冰可能很脆弱,但這完美的冰晶會在它掉落前自動迴避掉落。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備", + "shieldSpecialWinter2019HealerNotes": "這細薄的冰可能很脆弱,但這完美的冰晶會在它掉落前自動迴避掉落。增加 <%= con %> 點體質。 2018-2019冬季限定版裝備。", "shieldMystery201601Text": "決心屠殺者", - "shieldMystery201601Notes": "這把劍能夠斬除所有的干擾物。無屬性加成。 2016年1月訂閱者專屬裝備", + "shieldMystery201601Notes": "這把劍能夠斬除所有的干擾物。無屬性加成。 2016年1月訂閱者專屬裝備。", "shieldMystery201701Text": "時間凍結護盾", - "shieldMystery201701Notes": "時間速速凍! 快來征服您的任務吧! 無屬性加成。 2017年1月訂閱者專屬裝備", + "shieldMystery201701Notes": "時間速速凍! 快來征服您的任務吧! 無屬性加成。 2017年1月訂閱者專屬裝備。", "shieldMystery201708Text": "熔岩護盾", - "shieldMystery201708Notes": "這面崎嶇不平的熔岩護盾可以保護您不受壞習慣的傷害。使用時保證不會燙傷您的手。無屬性加成。 2017年8月訂閱者專屬裝備", + "shieldMystery201708Notes": "這面崎嶇不平的熔岩護盾可以保護您不受壞習慣的傷害。使用時保證不會燙傷您的手。無屬性加成。 2017年8月訂閱者專屬裝備。", "shieldMystery201709Text": "《魔法入門手冊》", - "shieldMystery201709Notes": "這本書將逐步引導您進入巫術世界。無屬性加成。 2017年9月訂閱者專屬裝備", + "shieldMystery201709Notes": "這本書將逐步引導您進入巫術世界。無屬性加成。 2017年9月訂閱者專屬裝備。", "shieldMystery201802Text": "蟲粉護盾", - "shieldMystery201802Notes": "這面護盾雖然看起來很像是顆易碎的糖果,但它甚至可以抵擋最強大的粉碎破心術攻擊! 無屬性加成。 2018年2月訂閱者專屬裝備", + "shieldMystery201802Notes": "這面護盾雖然看起來很像是顆易碎的糖果,但它甚至可以抵擋最強大的粉碎破心術攻擊! 無屬性加成。 2018年2月訂閱者專屬裝備。", "shieldMystery301405Text": "時鐘護盾", - "shieldMystery301405Notes": "擁有這面巨大的時鐘護盾,時間就能與您同在! 無屬性加成。 3015年6月訂閱者專屬裝備", + "shieldMystery301405Notes": "擁有這面巨大的時鐘護盾,時間就能與您同在! 無屬性加成。 3015年6月訂閱者專屬裝備。", "shieldMystery301704Text": "輕盈紙扇", - "shieldMystery301704Notes": "這把高尚的扇子能讓您感到涼爽,並且讓您看起來非常時髦! 無屬性加成。 3017年4月訂閱者專屬裝備", + "shieldMystery301704Notes": "這把高尚的扇子能讓您感到涼爽,並且讓您看起來非常時髦! 無屬性加成。 3017年4月訂閱者專屬裝備。", "shieldArmoireGladiatorShieldText": "角鬥士護盾", - "shieldArmoireGladiatorShieldNotes": "想成為一名夠格的角鬥士,您不僅要⋯⋯算了隨便啦,用盾牌打爆他們就對了。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 角鬥士套裝(3/3)", + "shieldArmoireGladiatorShieldNotes": "想成為一名夠格的角鬥士,您不僅要⋯⋯算了隨便啦,用盾牌打爆他們就對了。增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 角鬥士套裝(3/3)。", "shieldArmoireMidnightShieldText": "午夜護盾", - "shieldArmoireMidnightShieldNotes": "在午夜鐘聲響起時,這面盾牌將會展現它最大的力量! 增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 獨立裝備", + "shieldArmoireMidnightShieldNotes": "在午夜鐘聲響起時,這面盾牌將會展現它最大的力量! 增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 獨立裝備。", "shieldArmoireRoyalCaneText": "皇家手杖", - "shieldArmoireRoyalCaneNotes": "皇上萬歲!為此高唱!增加體質、智力、感知各<%= attrs %>點。 來自神秘寶箱: 皇家套裝(2/3)", + "shieldArmoireRoyalCaneNotes": "皇上萬歲!為此高唱!增加體質、智力、感知各<%= attrs %>點。 來自神秘寶箱: 皇家套裝(2/3)。", "shieldArmoireDragonTamerShieldText": "馴龍師護盾", - "shieldArmoireDragonTamerShieldNotes": "快用這面龍形護盾來轉移敵人的注意力吧! 增加 <%= per %> 點感知。 來自神秘寶箱: 馴龍師套裝(2/3)", + "shieldArmoireDragonTamerShieldNotes": "快用這面龍形護盾來轉移敵人的注意力吧! 增加 <%= per %> 點感知。 來自神秘寶箱: 馴龍師套裝(2/3)。", "shieldArmoireMysticLampText": "神秘油燈", - "shieldArmoireMysticLampNotes": "用這神秘的油燈照亮黑暗的洞穴! 增加 <%= per %> 點感知。 來自神祕寶箱: 獨立裝備", + "shieldArmoireMysticLampNotes": "用這神秘的油燈照亮黑暗的洞穴! 增加 <%= per %> 點感知。 來自神秘寶箱: 獨立裝備。", "shieldArmoireFloralBouquetText": "鮮花花束", - "shieldArmoireFloralBouquetNotes": "這對戰鬥沒啥幫助。但您不覺得它很漂亮嗎? 增加 <%= con %> 點體質。 來自神祕寶箱: 獨立裝備", + "shieldArmoireFloralBouquetNotes": "這對戰鬥沒啥幫助。但您不覺得它很漂亮嗎? 增加 <%= con %> 點體質。 來自神秘寶箱: 獨立裝備。", "shieldArmoireSandyBucketText": "沙桶", - "shieldArmoireSandyBucketNotes": "最適合用來容納您完成任務後獲得的金幣! 增加 <%= per %> 點感知。 來自神祕寶箱: 海濱套裝(3/3)", + "shieldArmoireSandyBucketNotes": "最適合用來容納您完成任務後獲得的金幣! 增加 <%= per %> 點感知。 來自神秘寶箱: 海濱套裝(3/3)。", "shieldArmoirePerchingFalconText": "棲息獵鷹", - "shieldArmoirePerchingFalconNotes": "您的獵鷹好友正棲息在您的手臂上,隨時準備撲向您的敵人。增加 <%= str %> 點力量。 來自神秘寶箱: 獵鷹者套裝(3/3)", + "shieldArmoirePerchingFalconNotes": "您的獵鷹好友正棲息在您的手臂上,隨時準備撲向您的敵人。增加 <%= str %> 點力量。 來自神秘寶箱: 獵鷹者套裝(3/3)。", "shieldArmoireRamHornShieldText": "牡羊角護盾", - "shieldArmoireRamHornShieldNotes": "用這面護盾狠狠地甩向看您不順眼的每日任務! 增加感知、力量各 <%= attrs %> 點。 來自神祕寶箱: 牡羊野蠻人套裝(3/3)", + "shieldArmoireRamHornShieldNotes": "用這面護盾狠狠地甩向看您不順眼的每日任務! 增加感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 牡羊野蠻人套裝(3/3)。", "shieldArmoireRedRoseText": "紅玫瑰", - "shieldArmoireRedRoseNotes": "這朵深紅色玫瑰聞起來相當迷人。它同時還能增強您的理解力。增加 <%= per %> 點感知。 來自神祕寶箱: 獨立裝備", + "shieldArmoireRedRoseNotes": "這朵深紅色玫瑰聞起來相當迷人。它同時還能增強您的理解力。增加 <%= per %> 點感知。 來自神秘寶箱: 獨立裝備。", "shieldArmoireMushroomDruidShieldText": "德魯伊蘑菇護盾", - "shieldArmoireMushroomDruidShieldNotes": "Mushroom Druid Shield。 雖然是用蘑菇製成的,卻堅硬無比! 增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神祕寶箱: 德魯伊蘑菇套裝(3/3)", + "shieldArmoireMushroomDruidShieldNotes": "Mushroom Druid Shield。 雖然是用蘑菇製成的,卻堅硬無比! 增加 <%= con %> 點體質和 <%= str %> 點力量。 來自神秘寶箱: 德魯伊蘑菇套裝(3/3)。", "shieldArmoireFestivalParasolText": "慶典陽傘", - "shieldArmoireFestivalParasolNotes": "這把輕穎的陽傘可以幫您抵禦強光。不論它是來自於太陽,亦或是深紅色的每日任務! 增加 <%= con %> 點體質。 來自神祕寶箱: 節日慶典套裝(2/3)", + "shieldArmoireFestivalParasolNotes": "這把輕穎的陽傘可以幫您抵禦強光。不論它是來自於太陽,亦或是深紅色的每日任務! 增加 <%= con %> 點體質。 來自神秘寶箱: 節日慶典套裝(2/3)。", "shieldArmoireVikingShieldText": "維京海盜護盾", - "shieldArmoireVikingShieldNotes": "這面由結實的木頭和獸皮製作而成的護盾能夠抵禦最令人畏懼的敵人。增加 <%= per %> 點感知和 <%= int %> 點智力。 來自神祕寶箱: 維京海盜套裝(3/3)", + "shieldArmoireVikingShieldNotes": "這面由結實的木頭和獸皮製作而成的護盾能夠抵禦最令人畏懼的敵人。增加 <%= per %> 點感知和 <%= int %> 點智力。 來自神秘寶箱: 維京海盜套裝(3/3)。", "shieldArmoireSwanFeatherFanText": "天鵝毛風扇", - "shieldArmoireSwanFeatherFanNotes": "當您在跳舞時,使用這把扇子能讓您的動作變得更優美,宛如一隻翩翩起舞的優雅天鵝。增加 <%= str %> 點力量。 來自神祕寶箱: 天鵝湖舞者套裝(3/3)", + "shieldArmoireSwanFeatherFanNotes": "當您在跳舞時,使用這把扇子能讓您的動作變得更優美,宛如一隻翩翩起舞的優雅天鵝。增加 <%= str %> 點力量。 來自神秘寶箱: 天鵝湖舞者套裝(3/3)。", "shieldArmoireGoldenBatonText": "黃金指揮棒", - "shieldArmoireGoldenBatonNotes": "當您跳進戰爭後跟著節奏揮舞這跟指揮棒,您簡直銳不可擋! 增加智力、力量各 <%= attrs %> 點。 來自神祕寶箱: 獨立裝備", + "shieldArmoireGoldenBatonNotes": "當您跳進戰爭後跟著節奏揮舞這跟指揮棒,您簡直銳不可擋! 增加智力、力量各 <%= attrs %> 點。 來自神秘寶箱: 獨立裝備。", "shieldArmoireAntiProcrastinationShieldText": "反怠惰護盾", - "shieldArmoireAntiProcrastinationShieldNotes": "這面堅固的鋼盾將能幫您擋下分心物的干擾! 增加 <%= con %> 點體質。 來自神祕寶箱: 反怠惰套裝(3/3)", + "shieldArmoireAntiProcrastinationShieldNotes": "這面堅固的鋼盾將能幫您擋下分心物的干擾! 增加 <%= con %> 點體質。 來自神秘寶箱: 反怠惰套裝(3/3)。", "shieldArmoireHorseshoeText": "馬蹄鐵", - "shieldArmoireHorseshoeNotes": "快用這塊鐵製的馬蹄保護您飼養的坐騎之腳吧。增加 體質、感知、力量各 <%= attrs %> 點。 來自神祕寶箱: 蹄鐵工套裝(3/3)", + "shieldArmoireHorseshoeNotes": "快用這塊鐵製的馬蹄保護您飼養的坐騎之腳吧。增加 體質、感知、力量各 <%= attrs %> 點。 來自神秘寶箱: 蹄鐵工套裝(3/3)。", "shieldArmoireHandmadeCandlestickText": "手工蠟燭台", - "shieldArmoireHandmadeCandlestickNotes": "您精美的蠟製品為心懷感激的 Habitica 鄉民提供光明和溫暖! 增加 <%= str %> 點力量。 來自神祕寶箱: 蠟燭台製作師套裝(3/3)", + "shieldArmoireHandmadeCandlestickNotes": "您精美的蠟製品為心懷感激的 Habitica 鄉民提供光明和溫暖! 增加 <%= str %> 點力量。 來自神秘寶箱: 蠟燭台製作師套裝(3/3)。", "shieldArmoireWeaversShuttleText": "織女的梭子", - "shieldArmoireWeaversShuttleNotes": "這個工具在您的經緯線之間來回穿梭,並製作出一塊布! 增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神秘寶箱: 織布工套裝(3/3)", + "shieldArmoireWeaversShuttleNotes": "這個工具在您的經緯線之間來回穿梭,並製作出一塊布! 增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神秘寶箱: 織布工套裝(3/3)。", "shieldArmoireShieldOfDiamondsText": "鑽石護盾", - "shieldArmoireShieldOfDiamondsNotes": "這面閃耀的護盾不但能提供保護,還能賜予您耐力! 增加 <%= con %> 點體質。 來自神秘寶箱: 鑽石王者套裝(4/4)", + "shieldArmoireShieldOfDiamondsNotes": "這面閃耀的護盾不但能提供保護,還能賜予您耐力! 增加 <%= con %> 點體質。 來自神秘寶箱: 鑽石王者套裝(4/4)。", "shieldArmoireFlutteryFanText": "翩翩飛舞紙扇", - "shieldArmoireFlutteryFanNotes": "炎炎夏日中,除了它,沒有任何東西能同時讓您看起來和感覺起來更清爽。 增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(4/4)", + "shieldArmoireFlutteryFanNotes": "炎炎夏日中,除了它,沒有任何東西能同時讓您看起來和感覺起來更清爽。 增加體質、智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 飛舞連身裙套裝(4/4)。", "shieldArmoireFancyShoeText": "高級高跟鞋", - "shieldArmoireFancyShoeNotes": "這是您正在製作中的訂製高跟鞋。它非常適合皇家成員! 增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(3/3)", + "shieldArmoireFancyShoeNotes": "這是您正在製作中的訂製高跟鞋。它非常適合皇家成員! 增加智力、感知各 <%= attrs %> 點。 來自神秘寶箱: 鞋匠套裝(3/3)。", "shieldArmoireFancyBlownGlassVaseText": "華麗吹製玻璃花瓶", - "shieldArmoireFancyBlownGlassVaseNotes": "您做出來的花瓶是多麼的高尚啊! 您會想要將甚麼東西放在這裡頭呢? 增加 <%= int %> 點智力。 來自神秘寶箱: 玻璃吹製工套裝(4/4)", + "shieldArmoireFancyBlownGlassVaseNotes": "您做出來的花瓶是多麼的高尚啊! 您會想要將甚麼東西放在這裡頭呢? 增加 <%= int %> 點智力。 來自神秘寶箱: 玻璃吹製工套裝(4/4)。", "shieldArmoirePiraticalSkullShieldText": "海盜骷髏護盾", - "shieldArmoirePiraticalSkullShieldNotes": "這面附魔過的護盾將能竊聽敵人寶藏的藏匿點。請仔細聆聽! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 海盜公主套裝(4/4)", + "shieldArmoirePiraticalSkullShieldNotes": "這面附魔過的護盾將能竊聽敵人寶藏的藏匿點。請仔細聆聽! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 海盜公主套裝(4/4)。", "shieldArmoireUnfinishedTomeText": "未完成的巨著", - "shieldArmoireUnfinishedTomeNotes": "當您持有這本書時,您完全無法怠慢! 因為這本書的裝訂需要盡快被完成,才能讓大家讀這本書! 增加 <%= int %> 點致力。 來自神秘寶箱: 圖書裝訂工套裝(4/4)", + "shieldArmoireUnfinishedTomeNotes": "當您持有這本書時,您完全無法怠慢! 因為這本書的裝訂需要盡快被完成,才能讓大家讀這本書! 增加 <%= int %> 點致力。 來自神秘寶箱: 圖書裝訂工套裝(4/4)。", "shieldArmoireSoftBluePillowText": "柔軟藍枕頭", - "shieldArmoireSoftBluePillowNotes": "明智的戰士都會在遠征時多準備一個枕頭。可以保護自己免於被鋒利的任務傷害...甚至是您正在小睡的時候。增加 <%= con %> 點體質。 來自神祕寶箱: 淺藍睡衣套裝(3/3)", + "shieldArmoireSoftBluePillowNotes": "明智的戰士都會在遠征時多準備一個枕頭。可以保護自己免於被鋒利的任務傷害...甚至是您正在小睡的時候。增加 <%= con %> 點體質。 來自神秘寶箱: 淺藍睡衣套裝(3/3)。", "shieldArmoireSoftRedPillowText": "柔軟紅枕頭", - "shieldArmoireSoftRedPillowNotes": "已做好萬全準備的戰士都會在遠征前準備一塊枕頭。這塊枕頭能保護您不受艱難的任務傷害... 甚至是在您小睡的時候。增加體質、力量各 <%= attrs %> 點。 來自神祕寶箱: 淺紅睡衣套裝(3/3)", + "shieldArmoireSoftRedPillowNotes": "已做好萬全準備的戰士都會在遠征前準備一塊枕頭。這塊枕頭能保護您不受艱難的任務傷害... 甚至是在您小睡的時候。增加體質、力量各 <%= attrs %> 點。 來自神秘寶箱: 淺紅睡衣套裝(3/3)。", "shieldArmoireSoftGreenPillowText": "柔軟綠枕頭", - "shieldArmoireSoftGreenPillowNotes": "有經驗的戰士都會在遠征前準備一塊枕頭。這塊枕頭能驅散那些討厭的雜事... 甚至是在您小睡的時候。增加體質 <%= con %> 點和智力 <%= int %> 點。 來自神祕寶箱: 淺綠睡衣套裝(3/3)", + "shieldArmoireSoftGreenPillowNotes": "有經驗的戰士都會在遠征前準備一塊枕頭。這塊枕頭能驅散那些討厭的雜事... 甚至是在您小睡的時候。增加體質 <%= con %> 點和智力 <%= int %> 點。 來自神秘寶箱: 淺綠睡衣套裝(3/3)。", "shieldArmoireMightyQuillText": "威力鵝毛筆", - "shieldArmoireMightyQuillNotes": "比劍還更有威力,他們是這樣說的! 增加 <%= per %> 點感知。 來自神祕寶箱: 抄寫員套裝(2/3)", + "shieldArmoireMightyQuillNotes": "比劍還更有威力,他們是這樣說的! 增加 <%= per %> 點感知。 來自神秘寶箱: 抄寫員套裝(2/3)。", "back": "後背配件", "backCapitalized": "後背配件", "backBase0Text": "沒有後背配件", "backBase0Notes": "沒有後背配件。", "animalTails": "動物尾巴", "backMystery201402Text": "金翅膀", - "backMystery201402Notes": "這雙耀眼的翅膀上擁有能在陽光下閃閃發光的羽毛! 無屬性加成。 2014年2月訂閱者專屬裝備", + "backMystery201402Notes": "這雙耀眼的翅膀上擁有能在陽光下閃閃發光的羽毛! 無屬性加成。 2014年2月訂閱者專屬裝備。", "backMystery201404Text": "薄暮蝶翼", - "backMystery201404Notes": "成為蝴蝶,翩翩飛舞! 無屬性加成。 2014年4月訂閱者專屬裝備", + "backMystery201404Notes": "成為蝴蝶,翩翩飛舞! 無屬性加成。 2014年4月訂閱者專屬裝備。", "backMystery201410Text": "哥布林之翼", - "backMystery201410Notes": "用這雙堅固的翅膀俯衝整個夜晚。無屬性加成。 2014年10月訂閱者專屬裝備", + "backMystery201410Notes": "用這雙堅固的翅膀俯衝整個夜晚。無屬性加成。 2014年10月訂閱者專屬裝備。", "backMystery201504Text": "忙碌蜜蜂之翼", - "backMystery201504Notes": "嗡嗡嗡!掠過一項又一項的任務。無屬性加成。 2015年5月訂閱者專屬裝備", + "backMystery201504Notes": "嗡嗡嗡!掠過一項又一項的任務。無屬性加成。 2015年5月訂閱者專屬裝備。", "backMystery201507Text": "超爽快衝浪板", - "backMystery201507Notes": "在勤奮碼頭(Diligent Docks) 裡盡情衝浪,並在怪完工海灣(Inkomplete Bay) 中乘浪前行! 無屬性加成。 2015年7月訂閱者專屬裝備", + "backMystery201507Notes": "在勤奮碼頭(Diligent Docks) 裡盡情衝浪,並在怪完工海灣(Inkomplete Bay) 中乘浪前行! 無屬性加成。 2015年7月訂閱者專屬裝備。", "backMystery201510Text": "哥布林尾巴", - "backMystery201510Notes": "易於抓握且強而有力! 無屬性加成。 2015年10月訂閱者專屬裝備", + "backMystery201510Notes": "易於抓握且強而有力! 無屬性加成。 2015年10月訂閱者專屬裝備。", "backMystery201602Text": "破心者披風", - "backMystery201602Notes": "揚起披風嗖的一聲,您的敵人就落在您面前! 無屬性加成。 2016年2月訂閱者專屬裝備", + "backMystery201602Notes": "揚起披風嗖的一聲,您的敵人就落在您面前! 無屬性加成。 2016年2月訂閱者專屬裝備。", "backMystery201608Text": "閃電披風", - "backMystery201608Notes": "用這件波濤般的披風飛越暴風雨! 無屬性加成。 2016年8月訂閱者專屬裝備", + "backMystery201608Notes": "用這件波濤般的披風飛越暴風雨! 無屬性加成。 2016年8月訂閱者專屬裝備。", "backMystery201702Text": "盜心者披風", - "backMystery201702Notes": "這件披風激起的旋風讓您的魅力橫掃全場! 無屬性加成。 2017年2月訂閱者專屬裝備", + "backMystery201702Notes": "這件披風激起的旋風讓您的魅力橫掃全場! 無屬性加成。 2017年2月訂閱者專屬裝備。", "backMystery201704Text": "童話之翼", - "backMystery201704Notes": "這雙閃亮的翅膀將帶您到任何地方,甚至是由魔法生物統治下最隱密的王國。無屬性加成。 2017年4月訂閱者專屬裝備", + "backMystery201704Notes": "這雙閃亮的翅膀將帶您到任何地方,甚至是由魔法生物統治下最隱密的王國。無屬性加成。 2017年4月訂閱者專屬裝備。", "backMystery201706Text": "殘破海盜旗", - "backMystery201706Notes": "這面印有骷髏圖騰的海盜旗(Jolly Roger) 能讓所有待辦事項或每日任務恐懼無比! 沒無屬性加成。 2017年6月訂閱者專屬裝備", + "backMystery201706Notes": "這面印有骷髏圖騰的海盜旗(Jolly Roger) 能讓所有待辦事項或每日任務恐懼無比! 沒無屬性加成。 2017年6月訂閱者專屬裝備。", "backMystery201709Text": "一疊魔法圖書", - "backMystery201709Notes": "學習魔法需要大量的閱讀,但您一定會非常享受這些閱讀時光! 無屬性加成。 2017年9月訂閱者專屬裝備", + "backMystery201709Notes": "學習魔法需要大量的閱讀,但您一定會非常享受這些閱讀時光! 無屬性加成。 2017年9月訂閱者專屬裝備。", "backMystery201801Text": "冰霜精靈之翼", "backMystery201801Notes": "這雙附魔翅膀或許看起來就像雪片那樣脆弱,但它可以帶您到任何您想去的地方! 無屬性加成。 2018年1月訂閱者專屬裝備。", "backMystery201803Text": "勇猛蜻蜓之翼", - "backMystery201803Notes": "這雙亮麗的翅膀將帶您穿過柔和的春風,並越過一窪又一窪的睡蓮池。無屬性加成。 2018年3月訂閱者專屬裝備", + "backMystery201803Notes": "這雙亮麗的翅膀將帶您穿過柔和的春風,並越過一窪又一窪的睡蓮池。無屬性加成。 2018年3月訂閱者專屬裝備。", "backMystery201804Text": "松鼠尾", - "backMystery201804Notes": "的確,它能幫助您在樹枝間跳躍時保持平衡,但更重要的是那蓬鬆的絨毛。無屬性加成。 2018年4月訂閱者專屬裝備", + "backMystery201804Notes": "的確,它能幫助您在樹枝間跳躍時保持平衡,但更重要的是那蓬鬆的絨毛。無屬性加成。 2018年4月訂閱者專屬裝備。", "backMystery201812Text": "北極狐狸尾", - "backMystery201812Notes": "您這奢華稀有的尾巴就像冰柱一樣閃閃發光。當您輕輕地座在雪堆上時,它就會愉悅地擺動。無屬性加成。 2018年12月訂閱者專屬裝備", + "backMystery201812Notes": "您這奢華稀有的尾巴就像冰柱一樣閃閃發光。當您輕輕地座在雪堆上時,它就會愉悅地擺動。無屬性加成。 2018年12月訂閱者專屬裝備。", "backMystery201805Text": "華麗孔雀尾巴", - "backMystery201805Notes": "這條華麗的羽毛尾巴非常適合在行走於花園小徑時配戴! 無屬性加成。 2018年5月訂閱者專屬裝備", + "backMystery201805Notes": "這條華麗的羽毛尾巴非常適合在行走於花園小徑時配戴! 無屬性加成。 2018年5月訂閱者專屬裝備。", "backSpecialWonderconRedText": "威武披風", - "backSpecialWonderconRedNotes": "力量與美貌在嗖嗖作響。無屬性加成。 集會參與者特別版裝備", + "backSpecialWonderconRedNotes": "力量與美貌在嗖嗖作響。無屬性加成。 集會參與者特別版裝備。", "backSpecialWonderconBlackText": "潛行披風", - "backSpecialWonderconBlackNotes": "由暗影與低語交織而成。無屬性加成。 集會參與者特別版裝備", + "backSpecialWonderconBlackNotes": "由暗影與低語交織而成。無屬性加成。 集會參與者特別版裝備。", "backSpecialTakeThisText": "Take This 翅膀", "backSpecialTakeThisNotes": "這雙翅膀只有參與過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "backSpecialSnowdriftVeilText": "雪堆面紗", @@ -1578,39 +1578,39 @@ "bodyBase0Text": "沒有身上配件", "bodyBase0Notes": "沒有身上配件。", "bodySpecialWonderconRedText": "紅寶石項圈", - "bodySpecialWonderconRedNotes": "這是一條有魅力的紅寶石項圈! 無屬性加成。 集會參與者特別版裝備", + "bodySpecialWonderconRedNotes": "這是一條有魅力的紅寶石項圈! 無屬性加成。 集會參與者特別版裝備。", "bodySpecialWonderconGoldText": "黃金項圈", - "bodySpecialWonderconGoldNotes": "這是一條有魅力的黃金項圈! 無屬性加成。 集會參與者特別版裝備", + "bodySpecialWonderconGoldNotes": "這是一條有魅力的黃金項圈! 無屬性加成。 集會參與者特別版裝備。", "bodySpecialWonderconBlackText": "黑檀木項圈", - "bodySpecialWonderconBlackNotes": "這是一條有魅力的黑檀木項圈! 無屬性加成。 集會參與者特別版裝備", + "bodySpecialWonderconBlackNotes": "這是一條有魅力的黑檀木項圈! 無屬性加成。 集會參與者特別版裝備。", "bodySpecialTakeThisText": "Take This 護肩", "bodySpecialTakeThisNotes": "這套護肩只有參與過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "bodySpecialAetherAmuletText": "以太護身符", "bodySpecialAetherAmuletNotes": "這是一個擁有神秘歷史的護身符。增加體質、力量各 <%= attrs %> 點。", "bodySpecialSummerMageText": "閃耀披風", - "bodySpecialSummerMageNotes": "無論鹹水、淡水,都無法使這件含金屬纖維的披風黯然失色。無屬性加成。 2014年夏季限定版裝備", + "bodySpecialSummerMageNotes": "無論鹹水、淡水,都無法使這件含金屬纖維的披風黯然失色。無屬性加成。 2014年夏季限定版裝備。", "bodySpecialSummerHealerText": "珊瑚項圈", - "bodySpecialSummerHealerNotes": "以活珊瑚製成的時尚項圈! 無屬性加成。 2014年夏季限定版裝備", + "bodySpecialSummerHealerNotes": "以活珊瑚製成的時尚項圈! 無屬性加成。 2014年夏季限定版裝備。", "bodySpecialSummer2015RogueText": "叛變者飾帶", - "bodySpecialSummer2015RogueNotes": "沒有氣派和... 飾帶,您就沒辦法成為一位頂天立地的叛徒。無屬性加成。 2015年夏季限定版裝備", + "bodySpecialSummer2015RogueNotes": "沒有氣派和... 飾帶,您就沒辦法成為一位頂天立地的叛徒。無屬性加成。 2015年夏季限定版裝備。", "bodySpecialSummer2015WarriorText": "海洋尖刺", - "bodySpecialSummer2015WarriorNotes": "為了保護佩戴者,這上頭的每一根刺都沾有水母毒液。無屬性加成。 2015年夏季限定版裝備", + "bodySpecialSummer2015WarriorNotes": "為了保護佩戴者,這上頭的每一根刺都沾有水母毒液。無屬性加成。 2015年夏季限定版裝備。", "bodySpecialSummer2015MageText": "黃金扣環", - "bodySpecialSummer2015MageNotes": "雖然這個扣環不能讓您變強,但它可真是閃耀啊!無屬性加成。 2015年夏季限定版裝備", + "bodySpecialSummer2015MageNotes": "雖然這個扣環不能讓您變強,但它可真是閃耀啊!無屬性加成。 2015年夏季限定版裝備。", "bodySpecialSummer2015HealerText": "水手領巾", - "bodySpecialSummer2015HealerNotes": "唷呵呵? 不,不,不~! 無屬性加成。 2015年夏季限定版裝備", + "bodySpecialSummer2015HealerNotes": "唷呵呵? 不,不,不~! 無屬性加成。 2015年夏季限定版裝備。", "bodySpecialNamingDay2018Text": "紫禦獅鷲披風", "bodySpecialNamingDay2018Notes": "命名節快樂! 快戴上這件典雅又柔軟的披風一同前來為 Habitica 歡慶吧! 無屬性加成。", "bodyMystery201705Text": "折疊式羽毛戰士之翼", - "bodyMystery201705Notes": "這雙可折疊的翅膀不只是看起來很時髦,它還能帶給您獅鷲般的速度和敏捷! 無屬性加成。 2017年5月訂閱者專屬裝備", + "bodyMystery201705Notes": "這雙可折疊的翅膀不只是看起來很時髦,它還能帶給您獅鷲般的速度和敏捷! 無屬性加成。 2017年5月訂閱者專屬裝備。", "bodyMystery201706Text": "殘破海盜披風", - "bodyMystery201706Notes": "這件披風中藏有秘密口袋,可將您從任務中獲得的金幣通通 Bang 不見! 無屬性加成。 2017年7月訂閱者專屬裝備", + "bodyMystery201706Notes": "這件披風中藏有秘密口袋,可將您從任務中獲得的金幣通通 Bang 不見! 無屬性加成。 2017年7月訂閱者專屬裝備。", "bodyMystery201711Text": "飛毯駕駛員圍巾", - "bodyMystery201711Notes": "這條柔軟的針織圍巾在風中飄逸看起來相當雄偉。無屬性加成。 2017年11月訂閱者專屬裝備", + "bodyMystery201711Notes": "這條柔軟的針織圍巾在風中飄逸看起來相當雄偉。無屬性加成。 2017年11月訂閱者專屬裝備。", "bodyMystery201901Text": "北極星護肩", - "bodyMystery201901Notes": "這套閃閃發光的護肩非常堅固,但卻可以像一縷縷跳舞的光束一樣輕盈地靠在您的肩膀上。沒有屬性加成。 2019年1月訂閱者專屬裝備", + "bodyMystery201901Notes": "這套閃閃發光的護肩非常堅固,但卻可以像一縷縷跳舞的光束一樣輕盈地靠在您的肩膀上。無屬性加成。 2019年1月訂閱者專屬裝備。", "bodyArmoireCozyScarfText": "舒適圍巾", - "bodyArmoireCozyScarfNotes": "這條上等的圍巾能讓您在寒冷環境下工作時,還能保持溫暖。增加體質、感知各 <%= attrs %> 點。 來自神祕寶箱: 點燈伕套裝(4/4)", + "bodyArmoireCozyScarfNotes": "這條上等的圍巾能讓您在寒冷環境下工作時,還能保持溫暖。增加體質、感知各 <%= attrs %> 點。 來自神秘寶箱: 點燈伕套裝(4/4)。", "headAccessory": "頭飾", "headAccessoryCapitalized": "頭飾", "accessories": "配件", @@ -1618,37 +1618,37 @@ "headAccessoryBase0Text": "沒有頭飾", "headAccessoryBase0Notes": "沒有頭飾。", "headAccessorySpecialSpringRogueText": "紫色貓耳", - "headAccessorySpecialSpringRogueNotes": "這雙貓耳能在偵測到淺在威脅時抽搐抖動。無屬性加成。 2014年春季限定版裝備", + "headAccessorySpecialSpringRogueNotes": "這雙貓耳能在偵測到淺在威脅時抽搐抖動。無屬性加成。 2014年春季限定版裝備。", "headAccessorySpecialSpringWarriorText": "綠色兔耳", - "headAccessorySpecialSpringWarriorNotes": "這雙兔耳可敏銳地偵測到胡蘿蔔的嘎吱聲。無屬性加成。 2014年春季限定版裝備", + "headAccessorySpecialSpringWarriorNotes": "這雙兔耳可敏銳地偵測到胡蘿蔔的嘎吱聲。無屬性加成。 2014年春季限定版裝備。", "headAccessorySpecialSpringMageText": "藍色鼠耳", - "headAccessorySpecialSpringMageNotes": "這雙圓圓的鼠耳如絲綢般柔軟。無屬性加成。 2014年春季限定版裝備", + "headAccessorySpecialSpringMageNotes": "這雙圓圓的鼠耳如絲綢般柔軟。無屬性加成。 2014年春季限定版裝備。", "headAccessorySpecialSpringHealerText": "黃色犬耳", - "headAccessorySpecialSpringHealerNotes": "又軟又可愛。想來玩嗎?無屬性加成。 2014年春季限定版裝備", + "headAccessorySpecialSpringHealerNotes": "又軟又可愛。想來玩嗎?無屬性加成。 2014年春季限定版裝備。", "headAccessorySpecialSpring2015RogueText": "黃色鼠耳", - "headAccessorySpecialSpring2015RogueNotes": "這雙耳朵可以防止爆炸聲的干擾。無屬性加成。 2015年春季限定版裝備", + "headAccessorySpecialSpring2015RogueNotes": "這雙耳朵可以防止爆炸聲的干擾。無屬性加成。 2015年春季限定版裝備。", "headAccessorySpecialSpring2015WarriorText": "紫色犬耳", - "headAccessorySpecialSpring2015WarriorNotes": "它們是紫色的。它們是狗耳朵。別再愚蠢地浪費您的時間了。無屬性加成。 2015年春季限定版裝備", + "headAccessorySpecialSpring2015WarriorNotes": "它們是紫色的。它們是狗耳朵。別再愚蠢地浪費您的時間了。無屬性加成。 2015年春季限定版裝備。", "headAccessorySpecialSpring2015MageText": "藍色兔耳", - "headAccessorySpecialSpring2015MageNotes": "這雙耳朵聽力過人,可聽到任何在洩密中的魔術師。無屬性加成。 2015年春季限定版裝備", + "headAccessorySpecialSpring2015MageNotes": "這雙耳朵聽力過人,可聽到任何在洩密中的魔術師。無屬性加成。 2015年春季限定版裝備。", "headAccessorySpecialSpring2015HealerText": "綠色貓耳", - "headAccessorySpecialSpring2015HealerNotes": "這雙可愛的貓耳會讓其他人嫉妒到眼睛發綠。無屬性加成。 2015年春季限定版裝備", + "headAccessorySpecialSpring2015HealerNotes": "這雙可愛的貓耳會讓其他人嫉妒到眼睛發綠。無屬性加成。 2015年春季限定版裝備。", "headAccessorySpecialSpring2016RogueText": "綠色犬耳", - "headAccessorySpecialSpring2016RogueNotes": "戴上它,您就可以跟蹤隱形的狡猾魔法師! 無屬性加成。 2016年春季限定版裝備", + "headAccessorySpecialSpring2016RogueNotes": "戴上它,您就可以跟蹤隱形的狡猾魔法師! 無屬性加成。 2016年春季限定版裝備。", "headAccessorySpecialSpring2016WarriorText": "紅色鼠耳", - "headAccessorySpecialSpring2016WarriorNotes": "它能在吵鬧的戰場中方便您聽見自己的主題曲。無屬性加成。 2016年春季限定版裝備", + "headAccessorySpecialSpring2016WarriorNotes": "它能在吵鬧的戰場中方便您聽見自己的主題曲。無屬性加成。 2016年春季限定版裝備。", "headAccessorySpecialSpring2016MageText": "黃色貓耳", - "headAccessorySpecialSpring2016MageNotes": "這雙尖銳的耳朵可以偵測到四周魔法微小的嗡嗡聲,或是盜賊無聲的腳步。無屬性加成。 2016年春季限定版裝備", + "headAccessorySpecialSpring2016MageNotes": "這雙尖銳的耳朵可以偵測到四周魔法微小的嗡嗡聲,或是盜賊無聲的腳步。無屬性加成。 2016年春季限定版裝備。", "headAccessorySpecialSpring2016HealerText": "紫色兔耳", - "headAccessorySpecialSpring2016HealerNotes": "它們立起來就像戰鬥時的旗幟,能讓四周的人知道要到哪裡取得協助。無屬性加成。 2016年春季限定版裝備", + "headAccessorySpecialSpring2016HealerNotes": "它們立起來就像戰鬥時的旗幟,能讓四周的人知道要到哪裡取得協助。無屬性加成。 2016年春季限定版裝備。", "headAccessorySpecialSpring2017RogueText": "紅色兔耳", - "headAccessorySpecialSpring2017RogueNotes": "多虧了這雙耳朵,沒有任何聲音可以躲過它。無屬性加成。 2017年春季限定版裝備", + "headAccessorySpecialSpring2017RogueNotes": "多虧了這雙耳朵,沒有任何聲音可以躲過它。無屬性加成。 2017年春季限定版裝備。", "headAccessorySpecialSpring2017WarriorText": "藍色貓耳", - "headAccessorySpecialSpring2017WarriorNotes": "即使是在喧鬧的戰場上,這雙耳朵還是能聽見袋子裡小貓的呼叫聲! 無屬性加成。 2017年春季限定版裝備", + "headAccessorySpecialSpring2017WarriorNotes": "即使是在喧鬧的戰場上,這雙耳朵還是能聽見袋子裡小貓的呼叫聲! 無屬性加成。 2017年春季限定版裝備。", "headAccessorySpecialSpring2017MageText": "藍綠犬耳", - "headAccessorySpecialSpring2017MageNotes": "您可以聽見空氣中的魔法聲! 無屬性加成。 2017年春季限定版裝備", + "headAccessorySpecialSpring2017MageNotes": "您可以聽見空氣中的魔法聲! 無屬性加成。 2017年春季限定版裝備。", "headAccessorySpecialSpring2017HealerText": "紫色鼠耳", - "headAccessorySpecialSpring2017HealerNotes": "這雙耳朵可讓您聽見治療的秘訣。無屬性加成。 2017年春季限定版裝備", + "headAccessorySpecialSpring2017HealerNotes": "這雙耳朵可讓您聽見治療的秘訣。無屬性加成。 2017年春季限定版裝備。", "headAccessoryBearEarsText": "猛熊耳朵", "headAccessoryBearEarsNotes": "這雙耳朵能讓您看起來就像是一隻英勇的熊! 無屬性加成。", "headAccessoryCactusEarsText": "仙人掌耳朵", @@ -1680,27 +1680,27 @@ "headAccessoryYellowHeadbandText": "金黃髮箍", "headAccessoryYellowHeadbandNotes": "一副簡易的黃色髮箍。無屬性加成。", "headAccessoryMystery201403Text": "森林步行者鹿角", - "headAccessoryMystery201403Notes": "這雙鹿角上的苔蘚和地衣正閃爍著微光。無屬性加成。 2014年3月訂閱者專屬裝備", + "headAccessoryMystery201403Notes": "這雙鹿角上的苔蘚和地衣正閃爍著微光。無屬性加成。 2014年3月訂閱者專屬裝備。", "headAccessoryMystery201404Text": "薄暮蝴蝶觸角", - "headAccessoryMystery201404Notes": "這雙觸角能幫助佩戴者察覺到危險的干擾! 無屬性加成。 2014年4月訂閱者專屬裝備", + "headAccessoryMystery201404Notes": "這雙觸角能幫助佩戴者察覺到危險的干擾! 無屬性加成。 2014年4月訂閱者專屬裝備。", "headAccessoryMystery201409Text": "秋季鹿角", - "headAccessoryMystery201409Notes": "這雙擁有強大力量的鹿角會隨著樹葉一同改變顏色。無屬性加成。 2014年9月訂閱者專屬裝備", + "headAccessoryMystery201409Notes": "這雙擁有強大力量的鹿角會隨著樹葉一同改變顏色。無屬性加成。 2014年9月訂閱者專屬裝備。", "headAccessoryMystery201502Text": "思緒之翼", - "headAccessoryMystery201502Notes": "讓想像力盡情翱翔吧! 無屬性加成。 2015年2月訂閱者專屬裝備", + "headAccessoryMystery201502Notes": "讓想像力盡情翱翔吧! 無屬性加成。 2015年2月訂閱者專屬裝備。", "headAccessoryMystery201510Text": "哥布林觸角", - "headAccessoryMystery201510Notes": "這對嚇人的觸角摸起來有一點黏糊糊的。無屬性加成。 2015年10月訂閱者專屬裝備", + "headAccessoryMystery201510Notes": "這對嚇人的觸角摸起來有一點黏糊糊的。無屬性加成。 2015年10月訂閱者專屬裝備。", "headAccessoryMystery201801Text": "冰霜精靈鹿角", - "headAccessoryMystery201801Notes": "這對冰晶鹿角隨著冬季極光的閃爍而閃閃發光。無屬性加成。 2018年1月訂閱者專屬裝備", + "headAccessoryMystery201801Notes": "這對冰晶鹿角隨著冬季極光的閃爍而閃閃發光。無屬性加成。 2018年1月訂閱者專屬裝備。", "headAccessoryMystery201804Text": "松鼠耳", - "headAccessoryMystery201804Notes": "這對毛茸茸的聲音捕捉器能確保您永遠不會錯過葉子的沙沙聲或橡子的掉落聲! 無屬性加成。 2018年4月訂閱者專屬裝備", + "headAccessoryMystery201804Notes": "這對毛茸茸的聲音捕捉器能確保您永遠不會錯過葉子的沙沙聲或橡子的掉落聲! 無屬性加成。 2018年4月訂閱者專屬裝備。", "headAccessoryMystery201812Text": "北極狐狸耳", - "headAccessoryMystery201812Notes": "您將可以聽到雪花飄落在景觀上微妙的聲音。無屬性加成。 2018年12月訂閱者專屬裝備", + "headAccessoryMystery201812Notes": "您將可以聽到雪花飄落在景觀上微妙的聲音。無屬性加成。 2018年12月訂閱者專屬裝備。", "headAccessoryMystery301405Text": "護目鏡頭飾", - "headAccessoryMystery301405Notes": "人們說,\"護目鏡是戴在眼睛上的\"。人們說,\"沒有人會想要一個只能戴在頭上的護目鏡\"。哈!您這次真的讓他們大開眼界了! 無屬性加成。 3015年8月訂閱者專屬裝備", + "headAccessoryMystery301405Notes": "人們說,\"護目鏡是戴在眼睛上的\"。人們說,\"沒有人會想要一個只能戴在頭上的護目鏡\"。哈!您這次真的讓他們大開眼界了! 無屬性加成。 3015年8月訂閱者專屬裝備。", "headAccessoryArmoireComicalArrowText": "可笑的箭", - "headAccessoryArmoireComicalArrowNotes": "這根奇特的東西的確會想讓人捧腹大笑! 增加 <%= str %> 點力量。 來自神祕寶箱: 獨立裝備", + "headAccessoryArmoireComicalArrowNotes": "這根奇特的東西的確會想讓人捧腹大笑! 增加 <%= str %> 點力量。 來自神秘寶箱: 獨立裝備。", "headAccessoryArmoireGogglesOfBookbindingText": "圖書裝訂護目鏡", - "headAccessoryArmoireGogglesOfBookbindingNotes": "這副護目鏡將不會為為您的任何任務帶來一丁點的幫助! 增加 <%= per %> 點感知。 圖書裝訂工套裝(1/4)", + "headAccessoryArmoireGogglesOfBookbindingNotes": "這副護目鏡將不會為為您的任何任務帶來一丁點的幫助! 增加 <%= per %> 點感知。 來自神秘寶箱: 圖書裝訂工套裝(1/4)。", "eyewear": "眼部配件", "eyewearCapitalized": "眼部配件", "eyewearBase0Text": "沒有眼部配件", @@ -1722,48 +1722,308 @@ "eyewearSpecialAetherMaskText": "以太面具", "eyewearSpecialAetherMaskNotes": "這是一個擁有神秘歷史的面具。增加 <%= int %> 點智力。", "eyewearSpecialSummerRogueText": "盜賊眼罩", - "eyewearSpecialSummerRogueNotes": "即使是無賴也能看出這個眼罩有多時髦! 無屬性加成。 2014年夏季限定版裝備", + "eyewearSpecialSummerRogueNotes": "即使是無賴也能看出這個眼罩有多時髦! 無屬性加成。 2014年夏季限定版裝備。", "eyewearSpecialSummerWarriorText": "時髦眼罩", - "eyewearSpecialSummerWarriorNotes": "即使是惡棍也能看出這個眼罩有多時髦! 無屬性加成。 2014年夏季限定版裝備", + "eyewearSpecialSummerWarriorNotes": "即使是惡棍也能看出這個眼罩有多時髦! 無屬性加成。 2014年夏季限定版裝備。", "eyewearSpecialWonderconRedText": "威武面具", - "eyewearSpecialWonderconRedNotes": "這真是個威武的臉部配件! 無屬性加成。 集會參與者特別版裝備", + "eyewearSpecialWonderconRedNotes": "這真是個威武的臉部配件! 無屬性加成。 集會參與者特別版裝備。", "eyewearSpecialWonderconBlackText": "潛行面具", - "eyewearSpecialWonderconBlackNotes": "您的動機絕對合法。無屬性加成。 集會參與者特別版裝備", + "eyewearSpecialWonderconBlackNotes": "您的動機絕對合法。無屬性加成。 集會參與者特別版裝備。", "eyewearMystery201503Text": "海藍寶石眼鏡", - "eyewearMystery201503Notes": "千萬別被這些閃閃發光的鑽石給閃瞎! 無屬性加成。 2015年3月訂閱者專屬裝備", + "eyewearMystery201503Notes": "千萬別被這些閃閃發光的鑽石給閃瞎! 無屬性加成。 2015年3月訂閱者專屬裝備。", "eyewearMystery201506Text": "霓虹浮潛罩", - "eyewearMystery201506Notes": "戴上霓虹浮潛罩就能一窺海底世界! 無屬性加成。 2015年6月訂閱者專屬裝備", + "eyewearMystery201506Notes": "戴上霓虹浮潛罩就能一窺海底世界! 無屬性加成。 2015年6月訂閱者專屬裝備。", "eyewearMystery201507Text": "超爽快太陽眼鏡", - "eyewearMystery201507Notes": "這副太陽眼鏡能讓您在大熱天依舊酷勁消暑好帥氣! 無屬性加成。 2015年7月訂閱者專屬裝備", + "eyewearMystery201507Notes": "這副太陽眼鏡能讓您在大熱天依舊酷勁消暑好帥氣! 無屬性加成。 2015年7月訂閱者專屬裝備。", "eyewearMystery201701Text": "永恆墨鏡", - "eyewearMystery201701Notes": "這副太陽眼鏡能保護您不受有害的射線給傷害,還能讓您在任何時刻都看起來非常時髦。無屬性加成。 2017年1月訂閱者專屬裝備", + "eyewearMystery201701Notes": "這副太陽眼鏡能保護您不受有害的射線給傷害,還能讓您在任何時刻都看起來非常時髦。無屬性加成。 2017年1月訂閱者專屬裝備。", "eyewearMystery301404Text": "護目鏡頭飾", - "eyewearMystery301404Notes": "沒有任何眼部配件能比這副護目鏡更潮了— 也許,除了單眼鏡以外。無屬性加成。 3015年3月訂閱者專屬裝備", + "eyewearMystery301404Notes": "沒有任何眼部配件能比這副護目鏡更潮了— 也許,除了單眼鏡以外。無屬性加成。 3015年3月訂閱者專屬裝備。", "eyewearMystery301405Text": "單眼鏡", - "eyewearMystery301405Notes": "沒有任何眼部配件能比這副護目鏡更潮了— 也許,除了護目鏡以外。無屬性加成。 3015年7月訂閱者專屬裝備", + "eyewearMystery301405Notes": "沒有任何眼部配件能比這副護目鏡更潮了— 也許,除了護目鏡以外。無屬性加成。 3015年7月訂閱者專屬裝備。", "eyewearMystery301703Text": "孔雀假面舞會面具", - "eyewearMystery301703Notes": "最適合在花俏的化裝舞會時穿戴或是想靜悄悄地穿過那群講究穿著的人群時穿戴。無屬性加成。 3017年3月訂閱者專屬裝備", + "eyewearMystery301703Notes": "最適合在花俏的化裝舞會時穿戴或是想靜悄悄地穿過那群講究穿著的人群時穿戴。無屬性加成。 3017年3月訂閱者專屬裝備。", "eyewearArmoirePlagueDoctorMaskText": "瘟疫醫師面具", - "eyewearArmoirePlagueDoctorMaskNotes": "這是一副由某位正與怠惰瘟疫抗爭的醫生穿戴過的真品面具。增加體質、智力各 <%= attrs %> 點。 來自神祕寶箱: 瘟疫醫師套裝(2/3)", + "eyewearArmoirePlagueDoctorMaskNotes": "這是一副由某位正與怠惰瘟疫抗爭的醫生穿戴過的真品面具。增加體質、智力各 <%= attrs %> 點。 來自神秘寶箱: 瘟疫醫師套裝(2/3)。", "eyewearArmoireGoofyGlassesText": "愚蠢眼鏡", - "eyewearArmoireGoofyGlassesNotes": "非常適合給想隱姓埋名或是想讓您的同伴咯咯大笑時穿戴。增加 <%= per %> 點感知。 來自神祕寶箱: 獨立裝備", + "eyewearArmoireGoofyGlassesNotes": "非常適合給想隱姓埋名或是想讓您的同伴咯咯大笑時穿戴。增加 <%= per %> 點感知。來自神秘寶箱: 獨立裝備。", "twoHandedItem": "雙持物品。", "weaponArmoireChefsSpoonText": "大廚勺子", - "weaponArmoireChefsSpoonNotes": "大喊戰鬥的口號\"杓杓杓杓杓!! 同時將它高高地舉起。同时举起它。增加 <%= int %> 點智力。 來自神祕寶箱: 大廚套裝(3/4)", + "weaponArmoireChefsSpoonNotes": "大喊戰鬥的口號\"杓杓杓杓杓!! 同時將它高高地舉起。同时举起它。增加 <%= int %> 點智力。 來自神秘寶箱: 大廚套裝(3/4)。", "weaponArmoireVernalTaperText": "春天小蠟燭", - "weaponArmoireVernalTaperNotes": "白天越來越長,但這個蠟燭台能幫助您在日出前找到自己的路。增加 <%= con %> 點體質。 來自神祕寶箱: 春季聖袍套裝(3/3)", + "weaponArmoireVernalTaperNotes": "白天越來越長,但這個蠟燭台能幫助您在日出前找到自己的路。增加 <%= con %> 點體質。 來自神秘寶箱: 春季聖袍套裝(3/3)。", "armorArmoireChefsJacketText": "大廚夾克", - "armorArmoireChefsJacketNotes": "這件厚重的夾克擁有雙排扣,可以保護您免受波濺(還具有方便的反彈功能)。增加 <%= int %> 點智力。 來自神祕寶箱: 大廚套裝(2/4)", + "armorArmoireChefsJacketNotes": "這件厚重的夾克擁有雙排扣,可以保護您免受波濺(還具有方便的反彈功能)。增加 <%= int %> 點智力。 來自神秘寶箱: 大廚套裝(2/4)", "armorArmoireVernalVestmentText": "春季聖袍", - "armorArmoireVernalVestmentNotes": "這件柔順的聖袍能以最時髦的方式享受溫和春日。增加力量、智力各 <%= per %> 點。來自神祕寶箱: 春季聖袍套裝(2/3)", + "armorArmoireVernalVestmentNotes": "這件柔順的聖袍能以最時髦的方式享受溫和春日。增加力量、智力各 <%= per %> 點。來自神秘寶箱: 春季聖袍套裝(2/3)。", "headArmoireToqueBlancheText": "廚師帽", - "headArmoireToqueBlancheNotes": "根據傳說,這頂帽子的褶皺數量就代表著您學會用不同方式煮蛋的數目! 真的還假的? 增加 <%= int %> 點感知。 來自神祕寶箱: 大廚套裝(1/4)", + "headArmoireToqueBlancheNotes": "根據傳說,這頂帽子的褶皺數量就代表著您學會用不同方式煮蛋的數目! 真的還假的? 增加 <%= int %> 點感知。 來自神秘寶箱: 大廚套裝(1/4)。", "headArmoireVernalHenninText": "春季圓錐高帽", - "headArmoireVernalHenninNotes": "這頂錐形的帽子不僅好看,同時還能塞進一張捲起來的代辦事項清單。增加 <%= per %> 點感知。來自神祕寶箱: 春季聖袍套裝(1/3)", + "headArmoireVernalHenninNotes": "這頂錐形的帽子不僅好看,同時還能塞進一張捲起來的代辦事項清單。增加 <%= per %> 點感知。來自神秘寶箱: 春季聖袍套裝(1/3)。", "shieldMystery201902Text": "神秘的五彩紙屑", - "shieldMystery201902Notes": "這些來自魔法之心的閃光紙片能飄浮在空中緩慢地舞蹈。無屬性加成。 2019年2月訂閱者專屬裝備", + "shieldMystery201902Notes": "這些來自魔法之心的閃光紙片能飄浮在空中緩慢地舞蹈。無屬性加成。 2019年2月訂閱者專屬裝備。", "shieldArmoireMightyPizzaText": "巨無霸披薩", - "shieldArmoireMightyPizzaNotes": "的確,這是面非常棒的護盾,但我們強烈建議您可以將這些美味的披薩吃掉。增加 <%= per %> 點感知。 來自神祕寶箱: 大廚套裝(4/4) ", + "shieldArmoireMightyPizzaNotes": "的確,這是面非常棒的護盾,但我們強烈建議您可以將這些美味的披薩吃掉。增加 <%= per %> 點感知。 來自神秘寶箱: 大廚套裝(4/4)。", "eyewearMystery201902Text": "神秘破碎面具", - "eyewearMystery201902Notes": "這頂神秘面具能隱藏您的身分,但卻藏不住您迷人的笑容。無屬性加乘。 2019年2月訂閱者專屬裝備" + "eyewearMystery201902Notes": "這頂神秘面具能隱藏您的身分,但卻藏不住您迷人的笑容。無屬性加成。 2019年2月訂閱者專屬裝備", + "weaponMystery201911Notes": "這個法杖的水晶球可以讓你看到前程,但你必須小心!用這麼危險的知識會出乎意料地改變一個人。無屬性加成。 2019年11月訂閱者專屬裝備。", + "headSpecialFall2019WarriorNotes": "這個骷髏頭盔的黑眼窩會嚇退最勇敢的敵人。增加<%= str %>點力量。 2019夏季限量版裝備。", + "headSpecialFall2019WarriorText": "黑曜石骷髏頭盔", + "eyewearSpecialBlueHalfMoonText": "藍色半月形眼鏡", + "eyewearSpecialBlackHalfMoonNotes": "黑色鏡框和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialBlackHalfMoonText": "黑色半月形眼鏡", + "headAccessoryMystery201908Notes": "如果戴牛角使您的山羊飄浮,那您真幸運!無屬性加成。 2019年8月訂閱者專屬裝備。", + "headAccessoryMystery201906Notes": "傳說,這些細膩的耳朵可以幫助人魚聽到深海所有居民的呼喚和歌曲!無屬性加成。 2019年6月訂閱者專屬裝備。", + "headAccessoryMystery201908Text": "自由牧神角", + "headAccessoryMystery201906Text": "和藹可親的錦鯉耳朵", + "headAccessoryMystery201905Notes": "這些角像閃閃發光一樣尖銳。無屬性加成。2019年5月訂閱者專屬裝備。", + "backMystery202001Notes": "這些蓬鬆的尾巴有天體的力量,還有很高的可愛度!無屬性加成。 2020年1月訂閱者專屬裝備。", + "headAccessoryMystery201905Text": "耀眼的龍角", + "backMystery202001Text": "寓言的五個尾巴", + "backMystery201912Notes": "用這雙冰冷的翅膀默默地飛過閃閃發光的雪原和雪山。無屬性加成。2019年12月訂閱者專屬裝備。", + "backMystery201905Notes": "憑藉這些彩虹色的翅膀飛向未知領域。無屬性加成。 2019年5月訂閱者專屬裝備。", + "backMystery201912Text": "極地精靈翅膀", + "shieldArmoireBirthdayBannerNotes": "慶祝你的特殊日子,一個你愛的人的特殊日子,或者在1月31日慶祝Habitica的生日!增加<%= str %>點力量。來自神秘寶箱:生日快樂套裝(4/4)。", + "shieldArmoireAlchemistsScaleNotes": "確保使用正確地儀器和精密地測量此神秘成分。增加<%= int %>點智力。來自神秘寶箱:煉金術士套裝(4/4)。", + "backMystery201905Text": "悅目龍翅膀", + "shieldArmoireBirthdayBannerText": "生日橫幅", + "shieldArmoireMasteredShadowNotes": "你的法力已將這些漩渦狀的暗影帶到你的身邊進行投標。增加感知和體質各<%= attrs %>點。來自神秘寶箱:暗影大師套裝(4/4)。", + "shieldArmoireAlchemistsScaleText": "煉金術士的測量規模", + "shieldArmoireMasteredShadowText": "掌握到的暗影", + "shieldArmoirePolishedPocketwatchNotes": "你獲得了時間。而且你戴著它很好看。增加<%= int %>點智力。來自神秘寶箱:獨立裝備。", + "shieldArmoirePolishedPocketwatchText": "拋光懷錶", + "shieldArmoireTrustyUmbrellaNotes": "神秘事故往往伴隨著惡劣的天氣,所以要做好準備!增加<%= int %>點智力。來自神秘寶箱:偵探集(4/4)。", + "shieldArmoireTrustyUmbrellaText": "值得信賴的雨傘", + "shieldSpecialWinter2020HealerNotes": "你是否覺得自己對這個世界來說,你太好了,太單純了?只有這種美麗的香料才能發揮作用。增加<%= con %>點體質。 2019-2020冬季限量版裝備。", + "shieldSpecialWinter2020HealerText": "巨大的肉桂棒", + "shieldSpecialWinter2020WarriorNotes": "將其用作盾,直到種子掉落,然後可以將其放在花圈上!增加<%= con %>點體質。 2019-2020冬季限量版裝備。", + "shieldSpecialWinter2020WarriorText": "圓形針葉樹錐", + "shieldSpecialFall2019HealerNotes": "用這個魔咒,抵制醫師的黑暗魔術!增加<%= con %>點體質。 2019秋季限量版裝備。", + "shieldSpecialFall2019HealerText": "怪誕的魔咒", + "shieldSpecialFall2019WarriorNotes": "用烏鴉羽毛的深色光澤結成固體,這個盾會挫敗所有攻擊。增加<%= con %>點體質。 2019秋季限量版裝備。", + "shieldSpecialFall2019WarriorText": "渡鴉暗盾", + "shieldSpecialSummer2019MageNotes": "在夏日的陽光下出汗?沒有!進行簡單的元素召喚以填充百合池塘。增加<%= per %>點感知。 2019夏季限量版裝備。", + "eyewearSpecialBlueHalfMoonNotes": "帶有藍色鏡框和月牙形鏡片的眼鏡。無屬性加成。", + "shieldSpecialSummer2019MageText": "純淨水滴", + "shieldSpecialSummer2019HealerText": "海螺小號", + "shieldSpecialSummer2019WarriorNotes": "龜縮在這個巨大的圓形盾牌後面,就像躲在你最喜歡的爬行動物的背後。增加<%= con %>點體質。 2019夏季 限量版裝備。", + "shieldSpecialSummer2019WarriorText": "半殼盾", + "shieldSpecialSpring2019HealerNotes": "這個明亮的盾牌實際上是由塗有糖果的巧克力製成的。增加<%= con%>點體質。 2019年春季 限量版裝備。", + "shieldSpecialSpring2019HealerText": "蛋殼盾", + "shieldSpecialSpring2019WarriorNotes": "葉綠素的力量讓你的敵人躲避!增加<%= con%>點體質。 2019年春季限量版裝備。", + "shieldSpecialSpring2019WarriorText": "綠葉盾", + "shieldSpecialKS2019Notes": "像獅鷲蛋一樣閃閃發光,這個宏偉的盾展示如何在你自己負擔小的時候、怎麼樣幫助別人。增加<%= per %>點感知。", + "headMystery201904Notes": "這個圓圈中的蛋白石閃耀著彩虹的每一種顏色,賦予它各種神奇的屬性。無屬性加成。 2019年4月訂閱者專屬裝備。", + "headMystery201904Text": "華麗的蛋白石圓環", + "headMystery201903Notes": "有些人可能會稱你為蛋頭,但這沒關係,因為你知道如何服用蛋黃。無屬性加成。 2019年3月訂閱者專屬裝備。", + "headMystery201903Text": "頭盔上金燦燦的部分", + "headSpecialWinter2020HealerNotes": "請把它從你的頭脫掉以後才用它煮茶或咖啡。增加<%= int %>點智力。 2019-2020冬季限量版裝備。", + "headSpecialWinter2020HealerText": "八角茴香標誌", + "headSpecialWinter2020MageNotes": "哦! 這些鈴鐺/甜美的金鈴鐺/似乎都在說,/“用‘火焰爆轟’”增加<%= per %>點感知。 2019-2020冬季限量版裝備。", + "headSpecialWinter2020MageText": "鍾冠", + "headSpecialWinter2020WarriorNotes": "頭皮上的刺感是為了季節性宏偉所付出的代價。增加<%= str %>點力量。 2019-2020冬季限量版裝備。", + "headSpecialWinter2020WarriorText": "雪塵頭飾", + "headSpecialWinter2020RogueNotes": "一個盜賊戴著那頂帽子走在街上,人們就知道他什麼都不怕。增加<%= per %>點感知。 2019-2020冬季限量版裝備。", + "headSpecialWinter2020RogueText": "蓬鬆的長襪帽", + "headSpecialNye2019Notes": "你收到了一頂古怪的派對帽子!當新年鐘聲響起時,自豪地戴上這頂帽子吧!無屬性加成。", + "headSpecialNye2019Text": "古怪的派對帽子", + "headSpecialFall2019HealerNotes": "戴這個黑暗禮冠利用可怕的巫妖的力量。增加<%= int %>點智力。 2019秋季限量版裝備。", + "headSpecialFall2019HealerText": "黑暗禮冠", + "headSpecialFall2019MageNotes": "它的獨立殘暴的眼睛會抑制深度感知,但這對於將您的注意力聚焦到一個單一的強烈點上來說是一個很小的代價。增加<%= per %>點感知。 2019夏季限量版裝備。", + "headSpecialFall2019MageText": "獨眼巨人面具", + "headSpecialFall2019RogueNotes": "你是在可能被詛咒的服裝拍賣中或者是在古怪的祖父母的閣樓中找到這個頭飾的?不管你在哪裡找它,這個頭飾的年齡和磨損都會增加你的神秘感。增加<%= per %>點智力。 2019夏季限量版裝備。", + "headSpecialFall2019RogueText": "古董歌劇帽", + "headSpecialSummer2019HealerNotes": "這個貝殼的螺旋結構將幫助你聽到七個海域的任何呼救聲。增加<%= int%>點智力。 2019夏季限量版裝備。", + "headSpecialSummer2019HealerText": "海螺王冠", + "headSpecialSummer2019MageNotes": "與流行的看法相反,你的頭不適合青蛙棲息。增加<%= per%>點感知。 2019年夏季限量版裝備。", + "headSpecialSummer2019MageText": "百合襯板帽子", + "headSpecialSummer2019WarriorNotes": "它不會讓你的頭在你的肩膀之間拉下來,但是如果你把船的底部粘在上面它會保護你。增加<%= str%>點力量。 2019年夏季限量版裝備。", + "headSpecialSummer2019WarriorText": "海龜頭盔", + "headSpecialSummer2019RogueNotes": "這個頭盔讓您可以360度全方位欣賞周圍的水域,非常適合潛入毫無防備的紅色日常任務。增加<%= per%>點感知。 2019夏季限量版裝備。", + "headSpecialSummer2019RogueText": "鎚頭頭盔", + "headSpecialSpring2019HealerNotes": "戴著這個可愛的鳥嘴頭盔,準備好迎接春天的第一天。增加<%= int%>點智力。 2019年春季限量版裝備。", + "headSpecialSpring2019HealerText": "知更鳥頭盔", + "headSpecialSpring2019MageNotes": "發光的琥珀寶石賦予這頂帽子神秘自然力量的力量。增加<%= per%>點感知。 2019年春季限量版裝備。", + "headSpecialSpring2019MageText": "琥珀帽子", + "headSpecialSpring2019WarriorNotes": "這款頭盔是堅不可摧的!它也吸引了蝴蝶。增加<%= str%>點力量。 2019年春季限量版裝備。", + "headSpecialSpring2019WarriorText": "蘭花頭盔", + "headSpecialSpring2019RogueNotes": "沒有人會注意到一片雲靜靜地飄向他們藏著的黃金,對吧?增加<%= per%>點感知。 2019年春季限量版裝備。", + "headSpecialSpring2019RogueText": "雲朵頭盔", + "headSpecialKS2019Notes": "有了獅鷲的相似和羽毛,這個輝煌的頭盔代表你的能力、可以成為模範。增加<%= int %>點智力。", + "headSpecialKS2019Text": "神話獅鷲頭盔", + "headSpecialPiDayNotes": "在走圈圈時,嘗試保持這塊兒美味的派的平衡。或者把它扔到紅色的每日任務裡!或者你可以直接吃掉它。任你選擇!無屬性加成。", + "headSpecialPiDayText": "圓周率帽子", + "armorArmoireLayerCakeArmorNotes": "它又有保護作用又好吃!增加<%= con %>點體質。來自神秘寶箱:生日快樂套裝(2/4)。", + "armorArmoireLayerCakeArmorText": "千層蛋糕盔甲", + "armorArmoireDuffleCoatNotes": "穿這個舒適時尚羊毛大衣帶你進入霜凍境界。增加體質和感知各<%= attrs %>點。來自神秘寶箱:風衣套裝(2/4)。", + "armorArmoireDuffleCoatText": "風衣", + "armorArmoireAlchemistsRobeNotes": "做神奇的鐵或者磚石需要強烈的藥水、可能有意料之外的副作用。這個披肩會保護你。增加<%= con %>點體質和<%= per %>點感知。來自神秘寶箱:煉金術士套裝(1/4)。", + "armorArmoireAlchemistsRobeText": "煉金術士的披肩", + "armorArmoireShadowMastersRobeNotes": "這個長袍的布是用Habitica的最深的洞穴中最暗的陰影做成的。增加<%= con %>點體質。來自神秘寶箱:暗影大師套裝(1/4)。", + "armorArmoireShadowMastersRobeText": "暗影大師的長袍", + "armorArmoireInvernessCapeNotes": "這款堅固的服裝可以讓你在任何類型的天氣中尋找線索。增加感知和智力各<%= attrs %>點。來自神秘寶箱:偵探套裝(2/4)。", + "armorArmoireInvernessCapeText": "斗篷披肩", + "armorArmoireAstronomersRobeNotes": "事實證明絲綢和星光織成的纖維不僅神奇,而且非常透氣。增加感知和體質各<%= attrs %>點。來自神秘寶箱:天文學家法師套裝(1/3)。", + "armorArmoireAstronomersRobeText": "天文學家的長袍", + "armorArmoireBoatingJacketNotes": "無論你是在一艘時髦的遊艇上,還是在一輛破車上,穿著這件夾克、戴著領帶的你都將惹人注目。增加力量、智力和感知各<%= attrs %>點。來自神秘寶箱:划船套裝(1/3)。", + "armorArmoireBoatingJacketText": "划船夾克", + "armorArmoireNephriteArmorNotes": "这款盔甲由坚固的钢环制成,饰有玉石,可保护您免受拖延!增加<%= str %>点力量和<%= per %>点感知。來自神秘寶箱:软玉射手套装(3/3)。", + "armorArmoireNephriteArmorText": "軟玉盔甲", + "armorMystery201910Notes": "這個隱秘的護甲上刀山下火海,無所不能地保護你。無屬性加成。 2019 年 10 月訂閱者專屬裝備。", + "armorMystery201910Text": "隱秘的護甲", + "armorMystery201909Notes": "你的強硬的外殼會保護你,可是你還應該留意松鼠... 無屬性加成。 2019 年 9 月訂閱者專屬裝備。", + "armorMystery201909Text": "友好的橡子護甲", + "armorMystery201908Notes": "這些腿是用來跳舞的!而這正是他們要做的。無屬性加成。 2019年8月訂閱者專屬裝備。", + "armorMystery201908Text": "自由自在的牧神裝扮", + "armorMystery201907Notes": "即使在最熱的夏天,也保持酷,看起來酷。無屬性加成。 2019 年 7 月訂閱者專屬裝備。", + "armorMystery201907Text": "花花襯衫", + "armorMystery201906Notes": "我們這次就饒了你,不講“魚蠢”這種諧音梗了。哦,等等,哎呀。無屬性加成。 2019年6月訂閱者專屬裝備。", + "armorMystery201906Text": "和藹可親的錦鯉尾巴", + "armorMystery201904Notes": "這件閃亮的衣服正前面縫著蛋白石,賦予你神秘的力量和神奇的外觀。無屬性加成。 2019年4月訂閱者專屬裝備。", + "armorMystery201904Text": "乳白色服裝", + "armorMystery201903Notes": "人們非常想知道你在哪裡買到這種雞蛋裝!無屬性加成。 2019年3月訂閱者專屬裝備。", + "armorMystery201903Text": "貝殼鎧甲", + "armorSpecialWinter2020HealerNotes": "喜慶者的華麗禮服!增加<%= con %>點體質。 2019-2020冬季限量版裝備。", + "armorSpecialWinter2020HealerText": "橙色果皮禮服", + "armorSpecialWinter2020MageNotes": "穿這個外套,在新的一年中,你可以溫軟地,舒服地,防止過度振動地歡迎新的一年。增加<%= int %>點智力。 2019-2020冬季限量版裝備。", + "armorSpecialWinter2020MageText": "彎曲的外套", + "armorSpecialWinter2020WarriorNotes": "威武的松樹,參天的冷杉,借我您的力量。更確切地說,借我您的體質!增加<%= con %>點體質。 2019-2020冬季限量版裝備。", + "armorSpecialWinter2020WarriorText": "樹皮護甲", + "armorSpecialWinter2020RogueNotes": "雖然你可以用自己內心的熱情和專注來抵禦暴風雨,但為天氣穿適合的衣服並沒有壞處。增加<%= per %>點感知。 2019-2020冬季限量版裝備。", + "armorSpecialWinter2020RogueText": "蓬鬆的派克大衣", + "armorSpecialFall2019HealerNotes": "據說這些長袍是由純淨的黑夜製成的。明智地使用黑暗之力!增加<%= con %>點體質。 2019年秋季限定裝備。", + "armorSpecialFall2019HealerText": "黑暗長袍", + "armorSpecialFall2019MageNotes": "它的同名遇到一個悲慘的結果。但是,你不會這麼容易被騙!帶了這個傳奇的罩衫,沒人會超過你。增加<%= int %>點體質。 2019年秋季限定裝備。", + "armorSpecialFall2019MageText": "波呂斐摩斯的罩衫", + "armorSpecialFall2019WarriorNotes": "這些羽毛長袍賦予你飛行的能力,讓你能在任何戰鬥中翱翔。增加<%= con %>點體質。 2019年秋季限定裝備。", + "armorSpecialFall2019WarriorText": "暗夜之翼", + "armorSpecialFall2019RogueNotes": "這套衣服配有白手套,非常適合在劇院私人套間中沉思,或在宏偉的樓梯出現時讓人詫異。增加<%= per %>點感知。 2019年秋季限定裝備。", + "armorSpecialFall2019RogueText": "歌劇外套", + "armorSpecialSummer2019HealerNotes": "這條優雅的尾巴在溫暖的沿海水域中滑行。增加<%= con%>點體質。 2019夏季限定裝備。", + "armorSpecialSummer2019HealerText": "熱帶潮汐之尾", + "armorSpecialSummer2019MageNotes": "百合花會知曉你是他們的其中之一,故不會害怕你的接近。增加<%= int %>點智力。 2019年夏季限定裝備。", + "armorSpecialSummer2019MageText": "碎花連衣裙", + "armorSpecialSummer2019WarriorNotes": "勇士隊以其堅固的防守而聞名。海龜因其厚厚的甲殼而聞名。這是一場完美的比賽!只是......盡量不要落後。增加<%= con%>點體質。 2019年夏季限量版裝備。", + "armorSpecialSummer2019WarriorText": "甲殼盔甲", + "armorSpecialSummer2019RogueNotes": "這條蜿蜒的尾巴非常適合在大膽的水上逃生時進行緊急轉彎。增加<%= per%>點感知。 2019年夏季限量版裝備。", + "armorSpecialSummer2019RogueText": "鎚頭尾巴", + "armorSpecialSpring2019HealerNotes": "你明亮的羽毛會讓每個人都知道冬天的寒冷和黑暗已經過去了。增加<%= con%>點體質。 2019年春季限量版裝備。", + "armorSpecialSpring2019HealerText": "羅賓裝扮", + "armorSpecialSpring2019MageNotes": "這些長袍從嵌入構成布料的古代樹皮纖維中的魔法樹脂中收集能量。增加<%= int %>點智力。 2019年春季限定裝備。", + "armorSpecialSpring2019MageText": "琥珀長袍", + "armorSpecialSpring2019WarriorNotes": "加固花瓣的鋼鐵盔甲保護您的心臟,看起來也很時髦。增加<%= con %>點體質。 2019年春季限定裝備。", + "armorSpecialSpring2019WarriorText": "蘭花盔甲", + "armorSpecialSpring2019RogueNotes": "一些非常凝重的絨毛。增加<%= per %>點感知。 2019年春季限定裝備。", + "armorSpecialSpring2019RogueText": "雲盔甲", + "armorSpecialKS2019Notes": "這個在內部像獅鷲高貴的內心一樣閃閃發光的護甲,鼓勵你為獲得的成就而感到自豪。增加<%= con %>點體質。", + "armorSpecialKS2019Text": "史詩獅鷲護甲", + "weaponArmoireHappyBannerNotes": "“H”代表Happy,或者Habitica?這是你的選擇!增加<%= per %>點感知。來自神秘寶箱:生日快樂套裝(3/4)。", + "weaponArmoireHappyBannerText": "Happy旗幟", + "weaponArmoireAlchemistsDistillerNotes": "用這個光亮銅管儀器淨化鐵和別的神奇化合物。增加<%= str %>點力量和<%= int %>點智力。來自神秘寶箱:煉金術士套裝(3/4)。", + "weaponArmoireAlchemistsDistillerText": "煉金術士的蒸餾器", + "weaponArmoireShadowMastersMaceNotes": "當你揮舞這個發光的權杖時,黑暗生物將服從你的每一個指令。增加<%= per %>點感知。來自神秘寶箱:暗影大師套裝(3/4)。", + "eyewearSpecialGreenHalfMoonText": "綠色半月形眼鏡", + "eyewearSpecialGreenHalfMoonNotes": "帶綠色鏡框和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialPinkHalfMoonText": "粉色半月形眼鏡", + "eyewearSpecialPinkHalfMoonNotes": "帶有粉紅色鏡架和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialRedHalfMoonNotes": "帶有紅色鏡框和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialRedHalfMoonText": "紅色半月形眼鏡", + "eyewearSpecialWhiteHalfMoonText": "白色半月形眼鏡", + "eyewearSpecialWhiteHalfMoonNotes": "帶有白色鏡架和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialYellowHalfMoonText": "黃色半月形眼鏡", + "eyewearSpecialYellowHalfMoonNotes": "黃色鏡框和月牙形鏡片的眼鏡。無屬性加成。", + "eyewearSpecialKS2019Text": "神話獅鷲面罩", + "eyewearSpecialKS2019Notes": "和獅鷲的... 嗯... 獅鷲沒有面罩。它提醒你... 哦,你在開玩笑吧?它看起來很酷!無屬性加成。", + "eyewearSpecialFall2019RogueText": "白如骨的半面罩", + "eyewearSpecialFall2019RogueNotes": "你以為一個蓋住整臉的面罩會比較能保護你的身份,可是大家會被它的特出的設計感到驚奇。他們不會注意到突出的特徵!無屬性加成。 2019年秋季限量版裝備。", + "eyewearSpecialFall2019HealerText": "暗面具", + "eyewearSpecialFall2019HealerNotes": "用這個難以辨認的面具堅決抵抗最艱難的敵人。無屬性加成。2019年秋季限量版裝備。", + "eyewearMystery201907Text": "甜美太陽鏡", + "eyewearMystery201907Notes": "看起來很棒,同時保護您的眼睛免受有害紫外線的傷害!無屬性加成。2019年7月訂閱者專屬裝備。", + "weaponArmoireShadowMastersMaceText": "暗影大師的權杖", + "weaponArmoireResplendentRapierNotes": "用這種鋒利的武器展示你的劍法。增加<%= per%>點感知。來自神秘寶箱:獨立裝備。", + "weaponArmoireResplendentRapierText": "華麗細劍", + "weaponArmoireFloridFanNotes": "這款可愛的絲綢扇可在不使用時折疊。增加<%= con%>點體質。來自神秘寶箱:獨立裝備。", + "weaponArmoireFloridFanText": "炫彩扇子", + "weaponArmoireMagnifyingGlassNotes": "啊哈!一個證據!用這個精細的放大鏡仔細檢查它。增加<%= per%>點感知。來自神秘寶箱:偵探套裝(3/4)。", + "weaponArmoireMagnifyingGlassText": "放大鏡", + "weaponArmoireAstronomersTelescopeNotes": "一種可以讓你觀察星星古老舞蹈的樂器。增加<%= per%>點感知。來自神秘寶箱:天文學家法師套裝(3/3)。", + "weaponArmoireAstronomersTelescopeText": "天文學家的望遠鏡", + "weaponArmoireBambooCaneNotes": "非常適合協助您漫步或跳查爾斯頓舞。增加智力、感知和體質各<%= attrs %>點。來自神秘寶箱:划船套裝(3/3)。", + "weaponArmoireBambooCaneText": "竹藤", + "weaponArmoireNephriteBowNotes": "這個弓射出特殊的玉石箭,即使是最頑固的壞習慣也會消失!增加<%= int%>點智力和<%= str%>點力量。來自神秘寶箱:和田玉弓箭手(1/3)。", + "weaponArmoireNephriteBowText": "和田弓", + "weaponArmoireSlingshotNotes": "瞄准你的紅色日常任務!增加<%= str%>點力量。來自神秘寶箱:獨立裝備。", + "weaponArmoireSlingshotText": "彈弓", + "weaponArmoireJugglingBallsNotes": "Habiticans是多任務處理的大師,所以你應該毫不費力地將所有這些球保持在空中!增加<%= int%>點智力。來自神秘寶箱:獨立裝備。", + "weaponArmoireJugglingBallsText": "雜耍球", + "weaponMystery201911Text": "神奇水晶法杖", + "weaponSpecialWinter2020HealerNotes": "把它揮舞一下以後,它的香氣會召喚你的朋友和助手,讓他們來烹飪和烘烤!增加<%= int %>點智力。 2019-2020冬季限量版裝備。", + "weaponSpecialWinter2020HealerText": "丁香權杖", + "weaponSpecialWinter2020MageNotes": "通過練習,你可以以任何所需的頻率投射這種音樂魔術:沉思的嗡嗡聲,喜慶的鈴聲或紅色任務過期的警報!增加<%= int %>點智力和<%= per %>點感知。 2019-2020冬季限量版裝備。", + "weaponSpecialWinter2020MageText": "蕩漾的聲波", + "weaponSpecialWinter2020WarriorNotes": "後退,松鼠!你們將一無所獲! ...但是,如果你們要去玩並喝可可,那就太酷了。增加<%= str %>點力量。 2019-2020冬季限量版裝備。", + "weaponSpecialWinter2020WarriorText": "尖尖的針葉樹錐", + "weaponSpecialWinter2020RogueNotes": "黑暗是盜賊的元素。那麼,誰能更好地在一年中最黑暗的時間點亮路呢?增加<%= str %>點力量。 2019-2020冬季限量版裝備。", + "weaponSpecialWinter2020RogueText": "燈籠桿", + "weaponSpecialFall2019HealerNotes": "這種系統可以喚起人們長期殺戮的精神,並利用其治愈能力。增加<%= int%>點智力。 2019年秋季限量版裝備。", + "weaponSpecialFall2019HealerText": "可怕的文字", + "weaponSpecialFall2019MageNotes": "無論是製造雷電,製造工事,還是只是將恐怖襲擊到凡人的心中,這只魔杖都賦予了巨人創造奇蹟的力量。增加<%= int %>點智力和<%= per %>點感知。 2019年秋季限量版裝備。", + "weaponSpecialFall2019MageText": "獨眼魔杖", + "weaponSpecialFall2019WarriorNotes": "準備用渡鴉的爪子殺死敵人!增加<%= str%>點力量。 2019年秋季限量版裝備。", + "weaponSpecialFall2019WarriorText": "三叉腳爪", + "weaponSpecialFall2019RogueNotes": "樂譜架無論您是指揮樂隊還是演唱詠嘆調,這款有用的設備都可以使您的雙手騰出來,做出生動的手勢!增加<%= str%>點力量。 2019年秋季限量版裝備。", + "weaponSpecialFall2019RogueText": "樂譜架", + "weaponSpecialSummer2019HealerNotes": "這支魔杖的氣泡捕捉到治療能量和古老的海洋魔法。增加<%= int%>點智力。 2019夏季限量版裝備。", + "weaponSpecialSummer2019HealerText": "泡泡魔棒", + "weaponSpecialSummer2019MageNotes": "首先從游泳池中拾出的這個小寶貝,賦予並激發了你的靈感,這是你工作的果實。增加<%= int%>點智力。 2019夏季限量版裝備。", + "weaponSpecialSummer2019MageText": "燦爛的綻放", + "weaponSpecialSummer2019WarriorNotes": "現在你正在與分形作鬥爭!增加<%= str%>點力量。 2019夏季限量版裝備。", + "weaponSpecialSummer2019WarriorText": "紅珊瑚", + "weaponSpecialSummer2019RogueNotes": "這種古老而強大的武器將幫助你贏得任何海底戰鬥。增加<%= str%>點力量。 2019夏季限量版裝備。", + "weaponSpecialSummer2019RogueText": "老式錨", + "weaponSpecialSpring2019HealerNotes": "你所唱的花雨之歌會撫慰所有聽到的人的精神。增加<%= int%>點智力。 2019年春季限定裝備。", + "weaponSpecialSpring2019HealerText": "春日讚歌", + "weaponSpecialSpring2019MageNotes": "法杖末端的琥珀裡包裹了一隻蚊子!不知道有沒有恐龍基因。增加<%= int %>點智力和<%= per %>點感知。 2019年春季限定裝備。", + "weaponSpecialSpring2019MageText": "琥珀法杖", + "weaponSpecialSpring2019WarriorNotes": "翠綠的刀刃前,壞習慣退隱。增加<%= str %>點力量。 2019春季限定版。", + "weaponSpecialSpring2019WarriorText": "樹莖劍", + "weaponSpecialSpring2019RogueNotes": "這些武器有著天和雨的力量。我們不推薦你在水中的時候用它們。增加<%= str %>點力量。 2019春季限定裝備。", + "weaponSpecialSpring2019RogueText": "閃電箭", + "weaponSpecialKS2019Notes": "這件長柄武器有著獅鷲的喙和爪一般的弧度,當前方的任務令人望而生畏,它能令你重振旗鼓。增加<%= str %>點力量。", + "weaponSpecialKS2019Text": "神話獅鷲彎刀", + "shieldSpecialKS2019Text": "神話獅鷲盾", + "shieldSpecialPiDayNotes": "看你敢計算這個盾牌周長與美味的比例!無屬性加成。", + "shieldSpecialPiDayText": "π盾", + "headArmoireFrostedHelmNotes": "這個完美的頭盔適合任何慶祝活動!增加<%= int %>點智力。來自神秘寶箱:生日快樂套裝(1/4)。", + "headArmoireFrostedHelmText": "糖衣頭盔", + "headArmoireEarflapHatNotes": "如果你想保持頭部的溫暖,可以戴上這頂帽子!增加智力和力量各<%= attrs %>點。來自神秘寶箱:風衣套裝(2/4)。", + "headArmoireEarflapHatText": "耳罩帽", + "headArmoireAlchemistsHatNotes": "雖然帽子並不是煉金術中必不可少的元素,但酷的裝扮的確不會傷害任何東西!增加<%= per %>點感知。來自神秘寶箱:煉金術士套裝(2/4)。", + "headArmoireAlchemistsHatText": "煉金術士的帽子", + "headArmoireShadowMastersHoodNotes": "這個頭罩讓你在最暗的地方看得清。但是,你可能需要眼藥水。增加感知和體質各<%= attrs %>點。來自神秘寶箱:暗影大師套裝(2/4)。", + "headArmoireShadowMastersHoodText": "暗影大師的頭罩", + "headArmoireDeerstalkerCapNotes": "這個帽子非常適合鄉村遊覽,但也可以用於解決謎題!增加<%= int %>點智力。來自神秘寶箱:偵探集(1/4)。", + "headArmoireAstronomersHatNotes": "一個完美的帽子,用於天體觀察或花式精靈早午餐。增加<%= con%>點體質。來自神秘寶箱:天文學家法師套裝(2/3)。", + "headArmoireDeerstalkerCapText": "獵鹿帽", + "headArmoireBoaterHatNotes": "這個稻草帽是最棒的!增加力量、體質和感知各<%= attrs %>點。來自神秘寶箱:划船套裝(2/3)。", + "headArmoireNephriteHelmNotes": "在這個頭盔上雕刻的魔法玉石羽毛可以提高您的目標。增加<%= int%>感知和<%= per%>智力。來自神秘寶箱:玉弓箭手(2/3)。", + "headArmoireNephriteHelmText": "綠玉帽子", + "headArmoireBoaterHatText": "船帽", + "headArmoireAstronomersHatText": "天文學家帽", + "headArmoireTricornHatNotes": "成為一個革命性的開玩笑者!增加<%= per %>點感知。來自神秘寶箱:獨立裝備。", + "headArmoireTricornHatText": "三角帽", + "headMystery202001Notes": "你的聽力會聽力會這麼敏銳,你會聽到星星的閃爍和月亮的旋轉。無屬性加成。 2020年1月訂閱者專屬裝備。", + "headMystery202001Text": "寓言的狐狸耳朵", + "headMystery201912Notes": "無論你飛得多高,這片閃閃發光的雪花都能使您抵抗刺骨的寒冷!無屬性加成。 2019年12月訂閱者專屬裝備。", + "headMystery201912Text": "極地精靈冠", + "headMystery201911Notes": "這頂帽子上的每個水晶點都賦予你一種特殊的能力:神秘的千里眼,神奇的智慧和... 板極的旋轉?那好吧。無屬性加成。 2019年11月訂閱者專屬裝備。", + "headMystery201911Text": "神奇水晶帽子", + "headMystery201910Notes": "這些火焰在你眼前揭示了奧秘的秘密!無屬性加成。 2019年10月訂閱者專屬裝備。", + "headMystery201910Text": "隱秘火焰", + "headMystery201909Notes": "每個橡子需要戴帽子!呃,吸盤,如果你想了解它的技術。無屬性加成。 2019年9月訂閱者專屬裝備。", + "headMystery201909Text": "可愛的橡子帽", + "headMystery201907Notes": "沒有什麼說“我在這裡放鬆!”就像一個向後的帽子。無屬性加成。 2019年7月訂閱者專屬裝備。", + "headMystery201907Text": "向後箭", + "shieldSpecialSummer2019HealerNotes": "貝殼小號的大噪音讓那些需要幫助的人知道你來了。 2019夏季限量版裝備。增加9體質。 " } diff --git a/website/common/locales/zh_TW/generic.json b/website/common/locales/zh_TW/generic.json index e0e0440144..ca28e49996 100644 --- a/website/common/locales/zh_TW/generic.json +++ b/website/common/locales/zh_TW/generic.json @@ -61,7 +61,7 @@ "newGroupTitle": "新群組", "subscriberItem": "神秘裝備", "newSubscriberItem": "您有新的神秘裝備", - "subscriberItemText": "每個月,訂閱者將會收到一份神秘禮物。依照慣例將於月底前一個星期公佈。詳情請看 wiki 中的「神秘裝備」頁面。", + "subscriberItemText": "每月,定期捐款者會收到一個神秘物品。這件物品一般是在月頭推出。查看Wiki裡的“神秘物品”頁面以獲得更多信息。", "all": "全部", "none": "無", "more": "<%= count %>更多", @@ -294,5 +294,7 @@ "options": "選項", "loadEarlierMessages": "載入先前訊息", "demo": "演示", - "finish": "完成" + "finish": "完成", + "congratulations": "恭喜你!", + "onboardingAchievs": "到職成就" } diff --git a/website/common/locales/zh_TW/limited.json b/website/common/locales/zh_TW/limited.json index 0a227bc164..a0aa7b50c1 100644 --- a/website/common/locales/zh_TW/limited.json +++ b/website/common/locales/zh_TW/limited.json @@ -84,56 +84,56 @@ "reefRenegadeSet": "珊瑚礁叛徒 (盜賊)", "scarecrowWarriorSet": "稻草人戰士 (戰士)", "stitchWitchSet": "縫紉術女巫 (法師)", - "potionerSet": "Potioner (Healer)", - "battleRogueSet": "Bat-tle Rogue (Rogue)", - "springingBunnySet": "Springing Bunny (Healer)", - "grandMalkinSet": "Grand Malkin (Mage)", - "cleverDogSet": "Clever Dog (Rogue)", - "braveMouseSet": "Brave Mouse (Warrior)", - "summer2016SharkWarriorSet": "Shark Warrior (Warrior)", - "summer2016DolphinMageSet": "Dolphin Mage (Mage)", - "summer2016SeahorseHealerSet": "Seahorse Healer (Healer)", - "summer2016EelSet": "Eel Rogue (Rogue)", - "fall2016SwampThingSet": "Swamp Thing (Warrior)", - "fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)", - "fall2016GorgonHealerSet": "Gorgon Healer (Healer)", - "fall2016BlackWidowSet": "Black Widow Rogue (Rogue)", - "winter2017IceHockeySet": "Ice Hockey (Warrior)", - "winter2017WinterWolfSet": "Winter Wolf (Mage)", - "winter2017SugarPlumSet": "Sugar Plum Healer (Healer)", - "winter2017FrostyRogueSet": "Frosty Rogue (Rogue)", - "spring2017FelineWarriorSet": "Feline Warrior (Warrior)", - "spring2017CanineConjurorSet": "Canine Conjuror (Mage)", - "spring2017FloralMouseSet": "Floral Mouse (Healer)", - "spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)", - "summer2017SandcastleWarriorSet": "Sandcastle Warrior (Warrior)", - "summer2017WhirlpoolMageSet": "Whirlpool Mage (Mage)", - "summer2017SeashellSeahealerSet": "Seashell Seahealer (Healer)", - "summer2017SeaDragonSet": "Sea Dragon (Rogue)", - "fall2017HabitoweenSet": "Habitoween Warrior (Warrior)", - "fall2017MasqueradeSet": "Masquerade Mage (Mage)", - "fall2017HauntedHouseSet": "Haunted House Healer (Healer)", - "fall2017TrickOrTreatSet": "Trick or Treat Rogue (Rogue)", - "winter2018ConfettiSet": "Confetti Mage (Mage)", - "winter2018GiftWrappedSet": "Gift-Wrapped Warrior (Warrior)", - "winter2018MistletoeSet": "Mistletoe Healer (Healer)", - "winter2018ReindeerSet": "Reindeer Rogue (Rogue)", - "spring2018SunriseWarriorSet": "Sunrise Warrior (Warrior)", - "spring2018TulipMageSet": "Tulip Mage (Mage)", - "spring2018GarnetHealerSet": "Garnet Healer (Healer)", - "spring2018DucklingRogueSet": "Duckling Rogue (Rogue)", + "potionerSet": "製藥醫者(補師)", + "battleRogueSet": "戰-鬥盜賊(盜賊)", + "springingBunnySet": "春之兔(補師)", + "grandMalkinSet": "豪華的貓(法師)", + "cleverDogSet": "靈巧的狗(盜賊)", + "braveMouseSet": "勇敢的鼠(戰士)", + "summer2016SharkWarriorSet": "鯊魚戰士(戰士)", + "summer2016DolphinMageSet": "海豚法師(法師)", + "summer2016SeahorseHealerSet": "海馬醫師(補師)", + "summer2016EelSet": "鰻魚盜賊(盜賊)", + "fall2016SwampThingSet": "沼澤怪物(戰士)", + "fall2016WickedSorcererSet": "邪惡巫師(法師)", + "fall2016GorgonHealerSet": "蛇發女妖醫師(補師)", + "fall2016BlackWidowSet": "黑寡婦盜賊(盜賊)", + "winter2017IceHockeySet": "冰上曲棍(戰士)", + "winter2017WinterWolfSet": "冬狼(法師)", + "winter2017SugarPlumSet": "糖果醫師(補師)", + "winter2017FrostyRogueSet": "嚴霜盜賊(盜賊)", + "spring2017FelineWarriorSet": "貓武士(戰士)", + "spring2017CanineConjurorSet": "狗狗魔術師(法師)", + "spring2017FloralMouseSet": "花老鼠(補師)", + "spring2017SneakyBunnySet": "鬼祟兔(盜賊)", + "summer2017SandcastleWarriorSet": "沙堡戰士(戰士)", + "summer2017WhirlpoolMageSet": "漩渦法師(法師)", + "summer2017SeashellSeahealerSet": "貝殼海洋醫師(補師)", + "summer2017SeaDragonSet": "海龍(盜賊)", + "fall2017HabitoweenSet": "萬聖兔勇士(戰士)", + "fall2017MasqueradeSet": "假面舞會法師(法師)", + "fall2017HauntedHouseSet": "鬼屋醫師(補師)", + "fall2017TrickOrTreatSet": "搗蛋盜賊(盜賊)", + "winter2018ConfettiSet": "五彩紙屑法師(法師)", + "winter2018GiftWrappedSet": "被包裝紙包住的戰士(戰士)", + "winter2018MistletoeSet": "槲寄生醫師(補師)", + "winter2018ReindeerSet": "馴鹿盜賊(盜賊)", + "spring2018SunriseWarriorSet": "晨曦戰士(戰士)", + "spring2018TulipMageSet": "鬱金香法師(法師)", + "spring2018GarnetHealerSet": "石榴石醫師(補師)", + "spring2018DucklingRogueSet": "小鴨盜賊(盜賊)", "summer2018BettaFishWarriorSet": "鬥魚戰士 (戰士)", "summer2018LionfishMageSet": "獅子魚法師 (法師)", "summer2018MerfolkMonarchSet": "人魚帝王 (補師)", "summer2018FisherRogueSet": "漁夫盜賊 (盜賊)", - "fall2018MinotaurWarriorSet": "Minotaur (Warrior)", - "fall2018CandymancerMageSet": "Candymancer (Mage)", - "fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)", - "fall2018AlterEgoSet": "Alter Ego (Rogue)", - "winter2019BlizzardSet": "Blizzard (Warrior)", - "winter2019PyrotechnicSet": "Pyrotechnic (Mage)", - "winter2019WinterStarSet": "Winter Star (Healer)", - "winter2019PoinsettiaSet": "Poinsettia (Rogue)", + "fall2018MinotaurWarriorSet": "牛頭怪(戰士)", + "fall2018CandymancerMageSet": "糖果巫師(法師)", + "fall2018CarnivorousPlantSet": "食人花(補師)", + "fall2018AlterEgoSet": "雙面人(盜賊)", + "winter2019BlizzardSet": "寒冰戰士(戰士)", + "winter2019PyrotechnicSet": "煙火法師(法師)", + "winter2019WinterStarSet": "冬夜閃耀(補師)", + "winter2019PoinsettiaSet": "熱情似火的聖誕花(盜賊)", "eventAvailability": "<%= date(locale) %>前仍可購買。", "dateEndMarch": "4 月 30 日", "dateEndApril": "4 月 19 日", @@ -143,17 +143,35 @@ "dateEndAugust": "8 月 31 日", "dateEndSeptember": "9 月 21 日", "dateEndOctober": "10 月 31 日", - "dateEndNovember": "12 月 3 日", + "dateEndNovember": "11月30日", "dateEndJanuary": "1 月 31 日", "dateEndFebruary": "2 月 28 日", "winterPromoGiftHeader": "送出訂閱資格禮物以得到免費的訂閱資格!", - "winterPromoGiftDetails1": "Until January 15th only, when you gift somebody a subscription, you get the same subscription for yourself for free!", - "winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3", - "discountBundle": "bundle", - "g1g1Announcement": "Gift a Subscription, Get a Subscription Free event going on now!", - "g1g1Details": "Gift a sub to a friend from their profile and you’ll receive the same sub for free!", + "winterPromoGiftDetails1": "本活動持續到1月6日,當你送給你的朋友一份訂閱時,你可以免費得到相同的訂閱時長!", + "winterPromoGiftDetails2": "請注意,如果您或您的禮物收件人已經有一個訂閱了,作為禮物的訂閱只會在原來的訂閱取消後或者過期後開始生效。非常感謝你的支持! (*^_^*)", + "discountBundle": "一批", + "g1g1Announcement": "贈送他人一份訂閱,免費享受一份相同訂閱,活動正在進行中!", + "g1g1Details": "點開朋友的個人資料,向TA贈送訂閱,您將免費獲得一份相同的訂閱!", "spring2019OrchidWarriorSet": "蘭花 (戰士)", "spring2019AmberMageSet": "琥珀 (法師)", "eventAvailabilityReturning": "<%= availableDate(locale) %>前仍可購買。這瓶藥水上次在<%= previousDate(locale) %>上市。", - "june2018": "2018 年 6 月" + "june2018": "2018 年 6 月", + "september2018": "2018年9月", + "september2017": "2017年9月", + "decemberYYYY": "12月<%= year %>年", + "augustYYYY": "8月<%= year %>年", + "winter2020LanternSet": "燈籠(盜賊)", + "winter2020WinterSpiceSet": "冬季香料(補師)", + "winter2020CarolOfTheMageSet": "法師的頌歌(法師)", + "winter2020EvergreenSet": "常綠(戰士)", + "fall2019RavenSet": "烏鴉(戰士)", + "fall2019LichSet": "死屍(補師)", + "fall2019CyclopsSet": "獨眼巨人(法師)", + "fall2019OperaticSpecterSet": "歌劇幽靈(盜賊)", + "summer2019HammerheadRogueSet": "鎚頭(盜賊)", + "summer2019ConchHealerSet": "海螺(補師)", + "summer2019WaterLilyMageSet": "睡蓮(法師)", + "summer2019SeaTurtleWarriorSet": "海龜(戰士)", + "spring2019CloudRogueSet": "雲朵(盜賊)", + "spring2019RobinHealerSet": "羅賓(補師)" } diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index 7b2fe03242..dd3d5c70db 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -20,7 +20,7 @@ "welcomeToTavern": "歡迎來到酒館!", "sleepDescription": "需要休息一會兒?在 Daniel 的酒館登記住宿將暫停 Habitica 一些較為艱難的遊戲機制:", "sleepBullet1": "未完成的每日任務不會對你造成傷害", - "sleepBullet2": "任務不會中斷連擊或改變顏色", + "sleepBullet2": "任務不會失去連擊數", "sleepBullet3": "Boss 不會因為你自己未完成的任務造成傷害", "sleepBullet4": "您對 Boss 造成的傷害或收集到的副本道具將維持直到退房離開", "pauseDailies": "入住酒館", @@ -169,5 +169,6 @@ "imReady": "進入 Habitica 的世界", "limitedOffer": "<%= date %> 前可購入", "paymentAutoRenew": "直至被取消前,您的訂閱將會在訂閱期滿時自動延長。如果需要,你能在設定裡將它取消。", - "paymentCanceledDisputes": "我們已發送取消訂閱的確認信到你的電子郵件信箱。若你沒看到該信,請聯絡我們以避免不必要的帳單疑慮。" + "paymentCanceledDisputes": "我們已發送取消訂閱的確認信到你的電子郵件信箱。若你沒看到該信,請聯絡我們以避免不必要的帳單疑慮。", + "cannotUnpinItem": "您不能取消這個物品的固定。" } diff --git a/website/common/locales/zh_TW/questscontent.json b/website/common/locales/zh_TW/questscontent.json index 0ce68f2fbf..9ad35a7af6 100644 --- a/website/common/locales/zh_TW/questscontent.json +++ b/website/common/locales/zh_TW/questscontent.json @@ -1,11 +1,11 @@ { "questEvilSantaText": "聖誕盜獵者", - "questEvilSantaNotes": "從冰原的深處,你聽到了一陣痛苦的嘶吼.你跟著那吠叫——從中夾帶著些許的笑聲——到了一個森林中的空地。你在那看到了一個成長完全的北極熊。在籠中的她身上被束縛著鎖鏈,為了生存而反抗著。在籠子上,有個身穿著破爛的聖誕服裝並跳著舞的惡毒小妖靈。擊敗聖誕盜獵者,拯救那被監禁的猛獸!", + "questEvilSantaNotes": "冰原深處傳來聲聲痛苦的嘶吼,其中夾雜著刺耳的咯咯笑聲。你循聲來到了一片林中空地,發現了一頭成年北極熊。它被鐐銬鎖在籠子裡,掙扎著想要逃出生天。一個妖精身穿破爛的聖誕裝,正踩在籠子頂上開心地手舞足蹈。你決定戰勝聖誕陷阱獵手,救出這頭北極熊!

注意:“聖誕陷阱獵手”獎勵可堆疊的副本成就,但會獎勵的稀有坐騎只能添加到你的馬厩一次。", "questEvilSantaCompletion": "聖誕盜獵者憤怒地嚎叫,縱身躍入夜幕之中。一隻充滿感激的母熊咆哮著似乎在訴說著什麼。你把她帶回馬廄,馴獸大師 Matt Boch 聆聽了她帶著恐懼的喘息講述的故事。她有個寶寶!當母熊被陷阱抓住的時候寶寶跑入了冰原。", "questEvilSantaBoss": "聖誕盜獵者", "questEvilSantaDropBearCubPolarMount": "北極熊 (坐騎)", "questEvilSanta2Text": "找小熊", - "questEvilSanta2Notes": "母熊的寶寶在母熊被聖誕盜獵者抓住的時候跑進了冰原。你聽到樹枝咔嚓作響,雪地嘎吱嘎吱的聲音迴盪在整個樹林。是爪印!你們開始追尋雪地上的踪跡。找到所有的爪印和破損的樹枝,找回她的寶寶!", + "questEvilSanta2Notes": "在北極熊坐騎被聖誕陷阱獵手抓住的時候,她的寶寶跑進了冰原。樹枝咔嚓折斷,踏雪嘎吱作響,清脆的聲音迴盪在森林中。這兒有爪印!你們開始追踪著這些足跡前進。只要不漏掉這些爪印和踩斷的樹枝,應該能找回北極熊的崽!

注意:“找熊崽”獎勵可堆疊的副本成就,但會獎勵的稀有寵物只能添加到你的馬厩一次。", "questEvilSanta2Completion": "恭喜你找到了小熊,它將永遠陪伴著你,讓你不再孤單。", "questEvilSanta2CollectTracks": "足跡", "questEvilSanta2CollectBranches": "折斷的樹枝", @@ -265,375 +265,415 @@ "questHorseDropHorseEgg": "馬 (蛋)", "questHorseUnlockText": "解鎖——可在市集中購買馬蛋", "questBurnoutText": "倦怠和廢氣精神", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", + "questBurnoutNotes": "紅鳳凰和隊長獼猴桃人粗暴的闖入城門的時候,早已過了午夜。空氣還是熱的讓人發悶。 “我們得清空所有的木製建築!”紅鳳凰大喊,“快啊!”

\n獼猴桃人靠著牆調整著呼吸,“它正在榨乾那些人,耗盡他們的力氣!怪不得所有事情都推遲了。怪不得我們不知道失踪的人去了哪裡。它正在偷他們的精力!”< br>
\n“它?”檸檬人問。

\n話音未落,熱氣開始成形。

\n它捲著巨大的熱浪從地面升起,翻滾著,扭動著。空氣中瀰漫著嗆人的煙味和硫磺味。火舌掠過灼熱的地表,分化出肢體,快速向上伸展著,高的嚇人。當大家可以看到它怒火熊熊的雙眼的時候,那傢伙發出了一聲低沉的爆裂聲。

\n獼猴桃人喃喃的說:

\n“火焰怪。”", + "questBurnoutCompletion": "湮滅怪被擊敗了!

伴隨著一個美妙的、柔軟的嘆息,湮滅怪慢慢地釋放了曾被它用來助長了火災的熱情能量。當怪獸靜靜地蜷縮最終化為灰燼時,其偷來的能量在空中閃閃發光,使被耗盡的精力們恢復了活力,回到了他們真實的模樣。

嵐,丹尼爾,和季節女巫與衝過去迎接他們的Habiticans一起歡慶著,所有全盛田野失踪的百姓都回來了,他們擁抱著自己的朋友和家人。最後耗盡的靈魂變為了“快樂收割者”!

“瞧!”@Baconsaur低語,灰燼開始閃爍,慢慢地,他們分解成數百閃閃發光的鳳凰!

一隻發光的小鳥棲落在了快樂收割者纖細的手臂上,她露出了潔白的牙齒笑道:“距離上一次我有幸在全盛田野看見鳳凰已經有很長世間了,”她說:“但是最近發生的這些事,我必須說,這正是恰如其分再好不過!”

她的語調平靜,雖然(自然而然)她的笑容依舊:”我們在這片土地上因為辛勤勞作而享有盛名,但是我們也曾因節日和慶祝活動而為世人所知。當我們努力去計劃一個盛大的宴會時,我想,這太諷刺了。曾經我們拒絕讓自己有任何玩樂的時間。現在,我們當然不會再一次犯同樣的錯誤!”

她拍著她的雙手:“現在——讓我們來慶祝吧!”", + "questBurnoutCompletionChat": "湮滅怪被擊敗了!\n\n隨著一個美妙的、柔軟的嘆息,湮滅怪慢慢地釋放了曾被它用來助長了火災的熱情能量。當怪獸靜靜地蜷縮最終化為灰燼時,其偷來的能量在空中閃閃發光,使被耗盡的精力們恢復了活力,回到了他們真實的模樣。\n\n嵐,丹尼爾,和季節女巫與衝過去迎接他們的Habiticans一起歡慶著,所有全盛田野失踪的百姓都回來了,他們擁抱著自己的朋友和家人。最後耗盡的靈魂變為了“快樂收割者”!\n\n“瞧!”@Baconsaur低語,灰燼開始閃爍,慢慢地,他們分解成數百閃閃發光的鳳凰!\n\n一隻發光的小鳥棲落在了快樂收割者纖細的手臂上,她露出了潔白的牙齒笑道:“距離上一次我有幸在全盛田野看見鳳凰已經有很長世間了,”她說:“但是最近發生的這些事,我必須說,這正是恰如其分再好不過!”\n\n她的語調平靜,雖然(自然而然)她的笑容依舊:”我們在這片土地上因為辛勤勞作而享有盛名,但是我們也曾因節日和慶祝活動而為世人所知。當我們努力去計劃一個盛大的宴會時,我想,這太諷刺了。曾經我們拒絕讓自己有任何玩樂的時間。現在,我們當然不會再一次犯同樣的錯誤!”\n\n她拍著她的雙手:“現在——讓我們來慶祝吧!”\n\n所有的Habiticans獲得:\n\n鳳凰寵物\n鳳凰坐騎\n成就:全盛田野的守護者\n普通糖果\n香草糖果\n砂糖果\n肉桂糖果\n巧克力糖果\n腐爛糖果\n粉色酸味糖果\n藍色酸味糖果\n蜂蜜糖果", + "questBurnoutBoss": "湮滅怪", "questBurnoutBossRageTitle": "排氣打擊", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", + "questBurnoutBossRageDescription": "當這個量槽被填滿,湮滅怪就會在Habitica釋放他的湮滅攻擊!", "questBurnoutDropPhoenixPet": "鳳凰 (寵物)", "questBurnoutDropPhoenixMount": "鳳凰 (座騎)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", - "questFrogText": "Swamp of the Clutter Frog", - "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", - "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", - "questFrogBoss": "Clutter Frog", + "questBurnoutBossRageQuests": "`倦怠使用了疲勞打擊!`\n\n噢,不!儘管我們盡了最大努力,我們仍然讓一些每日任務離開了我們,現在,倦怠充滿了能量熊熊燃燒!伴隨著劈啪的咆哮聲,它湧起幽靈之火吞噬了副本大師嵐。落下的副本捲軸燃燒著,煙霧散去,你發現嵐已經被抽光了能量,變成了漂浮著的疲勞精神體!\n\n唯有戰勝倦怠才能製止法術,才能複原我們珍愛的副本大師。讓我們保持按時完成每日任務吧,在怪物再次攻擊前戰勝它!", + "questBurnoutBossRageSeasonalShop": "`倦怠使用了疲勞打擊!`\n\n啊啊啊!我們未完成的每日任務給倦怠之火提供了能量,現在,它有足夠的能量再次攻擊了!它釋放了一團幽靈之火灼燒著季節商店。你驚駭地發現,愉快的季節女巫已經變為無力的疲勞精神體。\n\n你必須營救我們的NPC們!快,Habitic村民們,完成你的任務吧,在怪物第三次攻擊前戰勝它!", + "questBurnoutBossRageTavern": "`倦怠使用了疲勞打擊!`\n\n很多Habitic村民已經躲避倦怠進入了客棧,但是堅持不了太長時間了!伴隨著刺耳的嚎叫,倦怠用它那白熱的爪子犁過酒館。酒館的客人全跑了,Daniel 被倦怠抓住,就在你面前變成了疲勞精神體!\n\n極度恐慌已經持續了太長的時間。不要放棄...我們已經如此接近戰勝倦怠了,一勞永逸!", + "questFrogText": "蛙澤", + "questFrogNotes": "你和朋友正在拖沓沼澤艱難前行,@starsystemic 指向一個大標記。 “不要離開小路——如果能做到的話”。

“這又不難!”@RosemonkeyCT 說,“路面又寬又乾淨。”

但隨著你們繼續前行,你注意到路面開始漸漸被沼澤覆蓋,間雜著奇怪的藍色碎塊雜物,直到無法再繼續向前走。

你環顧四周,想搞明白這是怎麼一回事,@Jon Arjinborn 喊道:“小心!”一隻憤怒的青蛙從淤泥中一躍而出,身披髒衣服,還燒著藍色的火焰,你必須戰勝這只有毒的凌亂蛙才能前進!", + "questFrogCompletion": "青蛙被打敗後畏縮地回到了淤泥中。它悄悄地溜走了,藍色的粘液消失,乾淨的路面重新出現在前方。

路中間有三個蛙卵。 “你甚至可以透過外殼看見裡面的小蝌蚪!”@Breadstrings 說道。 “拿著,你應該帶他們回去。”", + "questFrogBoss": "凌亂蛙", "questFrogDropFrogEgg": "青蛙 (蛋)", "questFrogUnlockText": "解鎖——可在市集中購買青蛙蛋", - "questSnakeText": "The Serpent of Distraction", - "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", - "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeText": "分心蛇", + "questSnakeNotes": "生活在分心沙丘的人得有堅強的精神。乾旱的沙漠幾乎無法產出任何東西,閃耀的沙丘讓很多旅行者誤入歧途。然而,有什麼東西甚至嚇跑了當地人。沙子扭動著翻捲了整個村莊,村民都說有著一個龐大身軀的蛇形怪物藏在沙下。他們湊了些賞金,發出懸賞讓人幫助他們找到並阻止這個怪物。負有盛名的弄蛇人@EmeraldOx 和@PainterProphet 同意幫助你降伏野獸。你能阻止分心蛇嗎?", + "questSnakeCompletion": "在大佬們的幫助下, 你消滅掉了分心蛇。雖然你很高興你幫助了住在沙丘里的人們,但還是不禁為你倒下的對手而難過。在你凝視著眼前的一切時,@LordDarkly 向你走來。 “謝謝你!這不是什麼厚禮,但我希望能表示一下我們的感激之情。”他遞給你一些金幣和……一些蛇蛋!畢竟,你還有機會再見見那雄偉的動物。", "questSnakeBoss": "分心之蛇", "questSnakeDropSnakeEgg": "蛇 (蛋)", "questSnakeUnlockText": "解鎖——可在市集中購買蛇蛋", - "questUnicornText": "Convincing the Unicorn Queen", - "questUnicornNotes": "Conquest Creek has become muddied, destroying Habit City's fresh water supply! Luckily, @Lukreja knows an old legend that claims that a unicorn's horn can purify the foulest of waters. Together with your intrepid guide @UncommonCriminal, you hike through the frozen peaks of the Meandering Mountains. Finally, at the icy summit of Mount Habitica itself, you find the Unicorn Queen amid the glittering snows. \"Your pleas are compelling,\" she tells you. \"But first you must prove that you are worthy of my aid!\"", - "questUnicornCompletion": "Impressed by your diligence and strength, the Unicorn Queen at last agrees that your cause is worthy. She allows you to ride on her back as she soars to the source of Conquest Creek. As she lowers her golden horn to the befouled waters, a brilliant blue light rises from the water’s surface. It is so blinding that you are forced to close your eyes. When you open them a moment later, the unicorn is gone. However, @rosiesully lets out a cry of delight: the water is now clear, and three shining eggs rest at the creek’s edge.", + "questUnicornText": "說服獨角獸女王", + "questUnicornNotes": "征服溪流變渾濁了,Habit市的供水系統受到了巨大威脅!幸運的是,@Lukreja 知道一個古老的傳說,用一隻獨角獸的角,再污濁的水也能被淨化。你和英勇無畏的嚮導@UncommonCriminal 一起翻過蜿蜒山脈的冰封山尖,終於白雪皚皚的Habitica山頂找到了站在雪裡的獨角獸女王。 “你的請求讓人無法拒絕,“她說,”但是首先,你需要證明你值得我幫助!”", + "questUnicornCompletion": "獨角獸女王被你的優雅和力量打動了,她最終承認了你的要求值得幫助。她讓你騎在她背上,馳向征服溪流的源頭。在她低下頭,將她金色的額獨角伸向被污染的溪水時,水面泛起一層耀眼的藍光,那麼明亮,你不得不閉上眼睛,過了一會,當你再睜開雙眼,獨角獸女王已經不見了,不過,@rosiesully 發出了一聲快樂的呼喊:水又變得乾淨了,還有三隻閃亮的蛋靜靜躺在小溪邊。", "questUnicornBoss": "獨角獸王后", "questUnicornDropUnicornEgg": "獨角獸 (蛋)", "questUnicornUnlockText": "解鎖——可在市集中購買獨角獸蛋", "questSabretoothText": "劍齒虎", - "questSabretoothNotes": "A roaring monster is terrorizing Habitica! The creature stalks through the wilds and woods, then bursts forth to attack before vanishing again. It's been hunting innocent pandas and frightening the flying pigs into fleeing their pens to roost in the trees. @InspectorCaracal and @icefelis explain that the Zombie Sabre Cat was set free while they were excavating in the ancient, untouched ice-fields of the Stoïkalm Steppes. \"It was perfectly friendly at first – I don't know what happened. Please, you have to help us recapture it! Only a champion of Habitica can subdue this prehistoric beast!\"", - "questSabretoothCompletion": "After a long and tiring battle, you wrestle the Zombie Sabre Cat to the ground. As you are finally able to approach, you notice a nasty cavity in one of its sabre teeth. Realising the true cause of the cat's wrath, you're able to get the cavity filled by @Fandekasp, and advise everyone to avoid feeding their friend sweets in future. The Sabre Cat flourishes, and in gratitude, its tamers send you a generous reward – a clutch of sabretooth eggs!", + "questSabretoothNotes": "咆哮的怪獸讓Habitica顫抖!怪獸昂首闊步地走過荒野和森林,在再次消失前爆發出攻擊。它在狩獵無辜的熊貓,嚇得飛豬逃離它們樹上的棲息圍欄。 @InspectorCaracal 和@icefelis 交待他們在古代的Stoikalm草原的冰原挖掘的時候釋放了殭屍劍齒貓。 “最初,它非常友好,我不知道發生了什麼。請你一定要幫幫我們再次抓到它!只有Habitica的冠軍能征服這個史前野獸!”", + "questSabretoothCompletion": "長時間艱苦的戰鬥後,你和殭屍劍齒貓扭打到了地上。在你最終接近的時候,你發現它的劍齒上有一個討厭的洞。突然你意識到什麼導致了貓的憤怒,你終於能夠讓@Fandekasp 補上洞,然後建議每一個人不要在以後給他們的朋友甜食了。劍齒貓恢復了健康,出於感激,它的馴獸師送給你一份慷慨的獎賞——劍齒虎蛋!", "questSabretoothBoss": "殭屍劍齒虎", "questSabretoothDropSabretoothEgg": "劍齒虎 (蛋)", "questSabretoothUnlockText": "解鎖——可在市集中購買劍齒虎蛋", - "questMonkeyText": "Monstrous Mandrill and the Mischief Monkeys", - "questMonkeyNotes": "The Sloensteadi Savannah is being torn apart by the Monstrous Mandrill and his Mischief Monkeys! They shriek loudly enough to drown out the sound of approaching deadlines, encouraging everyone to avoid their duties and keep monkeying around. Alas, plenty of people ape this bad behavior. If no one stops these primates, soon everyone's tasks will be as red as the Monstrous Mandrill's face!

\"It will take a dedicated adventurer to resist them,\" says @yamato.

\"Quick, let's get this monkey off everyone's backs!\" @Oneironaut yells, and you charge into battle.", - "questMonkeyCompletion": "You did it! No bananas for those fiends today. Overwhelmed by your diligence, the monkeys flee in panic. \"Look,\" says @Misceo. \"They left a few eggs behind.\"

@Leephon grins. \"Maybe a well-trained pet monkey can help you as much as the wild ones hinder you!\"", + "questMonkeyText": "巨大的山魈和淘氣的猴子", + "questMonkeyNotes": "堅定稀樹草原快被巨大的山魈和頑皮的猴子撕碎了!他們大聲尖叫,壓過了截止日期快到的聲音,讓所有人容易忘掉他們的責任天天閒混。唉,大量的人們模仿這個壞行為。如果沒人阻止這些猴子,每個人的任務將會很快變的和猴屁股一樣紅!

@yamato 說:“我們需要敬業的冒險者來阻止他們。”

@Oneironaut 大叫著:“快,讓我們把猴子從每個人的背上拉下來! ” 你沖向了戰鬥。", + "questMonkeyCompletion": "你做到了!那些朋友今天沒有香蕉了。被你的勤奮嚇到,猴子驚慌的逃掉。 “看,” @Misceo 說,“他們留下了一些蛋。”

@Leephon grins 說:“野生猴子有多礙事,訓練有素的寵物猴子就能幫你多少。”", "questMonkeyBoss": "巨大的山魈", "questMonkeyDropMonkeyEgg": "猴 (蛋)", "questMonkeyUnlockText": "解鎖——可在市集中購買猴子蛋", - "questSnailText": "The Snail of Drudgery Sludge", - "questSnailNotes": "You're excited to begin questing in the abandoned Dungeons of Drudgery, but as soon as you enter, you feel the ground under your feet start to suck at your boots. You look up to the path ahead and see Habiticans mired in slime. @Overomega yells, \"They have too many unimportant tasks and dailies, and they're getting stuck on things that don't matter! Pull them out!\"

\"You need to find the source of the ooze,\" @Pfeffernusse agrees, \"or the tasks that they cannot accomplish will drag them down forever!\"

Pulling out your weapon, you wade through the gooey mud.... and encounter the fearsome Snail of Drudgery Sludge.", - "questSnailCompletion": "You bring your weapon down on the great Snail's shell, cracking it in two, releasing a flood of water. The slime is washed away, and the Habiticans around you rejoice. \"Look!\" says @Misceo. \"There's a small group of snail eggs in the remnants of the muck.\"", - "questSnailBoss": "Snail of Drudgery Sludge", + "questSnailText": "苦差事淤泥蝸牛", + "questSnailNotes": "一開始,你對於要探索苦差事地下城遺跡這事很興奮。但是當你一進去,你就感受到你腳下的地面在吸你的靴子。你看著前面的小路,看到Habitica居民陷入了淤泥。 @Overomega 大叫,“他們有太多不重要的任務和每日任務,他們正被不要緊的事情卡住!把他們拉出來!”

“你需要找到滲出的源頭,” @Pfeffernusse 贊同著說,“不然他們不能完成的任務會把他們永遠拖下去!”

拿出你的武器,你艱難地通過黏黏的泥……突然遇上了可怕的苦差事淤泥蝸牛。", + "questSnailCompletion": "你把你的武器砸在巨大的蝸牛殼上,殼裂成兩半,湧出了大量的水。粘液被沖走,Habitica居民在你身邊歡呼。 “看!” @Misceo 說,“在殘留的淤泥中,有一小群的蝸牛蛋。”", + "questSnailBoss": "苦差事淤泥蝸牛", "questSnailDropSnailEgg": "蝸牛 (蛋)", "questSnailUnlockText": "解鎖——可在市集中購買蝸牛蛋", - "questBewilderText": "The Be-Wilder", - "questBewilderNotes": "The party begins like any other.

The appetizers are excellent, the music is swinging, and even the dancing elephants have become routine. Habiticans laugh and frolic amid the overflowing floral centerpieces, happy to have a distraction from their least-favorite tasks, and the April Fool whirls among them, eagerly providing an amusing trick here and a witty twist there.

As the Mistiflying clock tower strikes midnight, the April Fool leaps onto the stage to give a speech.

“Friends! Enemies! Tolerant acquaintances! Lend me your ears.” The crowd chuckles as animal ears sprout from their heads, and they pose with their new accessories.

“As you know,” the Fool continues, “my confusing illusions usually only last a single day. But I’m pleased to announce that I’ve discovered a shortcut that will guarantee us non-stop fun, without having to deal with the pesky weight of our responsibilities. Charming Habiticans, meet my magical new friend... the Be-Wilder!”

Lemoness pales suddenly, dropping her hors d'oeuvres. “Wait! Don’t trust--”

But suddenly mists are pouring into the room, glittering and thick, and they swirl around the April Fool, coalescing into cloudy feathers and a stretching neck. The crowd is speechless as an monstrous bird unfolds before them, its wings shimmering with illusions. It lets out a horrible screeching laugh.

“Oh, it has been ages since a Habitican has been foolish enough to summon me! How wonderful it feels, to have a tangible form at last.”

Buzzing in terror, the magic bees of Mistiflying flee the floating city, which sags from the sky. One by one, the brilliant spring flowers wither up and wisp away.

“My dearest friends, why so alarmed?” crows the Be-Wilder, beating its wings. “There’s no need to toil for your rewards any more. I’ll just give you all the things that you desire!”

A rain of coins pours from the sky, hammering into the ground with brutal force, and the crowd screams and flees for cover. “Is this a joke?” Baconsaur shouts, as the gold smashes through windows and shatters roof shingles.

PainterProphet ducks as lightning bolts crackle overhead, and fog blots out the sun. “No! This time, I don’t think it is!”

Quickly, Habiticans, don’t let this World Boss distract us from our goals! Stay focused on the tasks that you need to complete so we can rescue Mistiflying -- and hopefully, ourselves.", - "questBewilderCompletion": "The Be-Wilder is DEFEATED!

We've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.

Mistiflying is saved!

The April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”

The crowd mutters. Sodden flowers wash up on sidewalks. Somewhere in the distance, a roof collapses with a spectacular splash.

“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”

Redphoenix coughs meaningfully.

“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”

Encouraged, the marching band starts up.

It isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.

As Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honor.”", - "questBewilderCompletionChat": "`The Be-Wilder is DEFEATED!`\n\nWe've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.\n\n`Mistiflying is saved!`\n\nThe April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”\n\nThe crowd mutters. Sodden flowers wash up on sidewalks. Somewhere in the distance, a roof collapses with a spectacular splash.\n\n“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”\n\nRedphoenix coughs meaningfully.\n\n“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”\n\nEncouraged, the marching band starts up.\n\nIt isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.\n\nAs Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honor.”", - "questBewilderBossRageTitle": "Beguilement Strike", - "questBewilderBossRageDescription": "When this gauge fills, The Be-Wilder will unleash its Beguilement Strike on Habitica!", + "questBewilderText": "迷失怪", + "questBewilderNotes": "派對開始的時候和任何一場沒什麼不同。

開胃菜棒極了,音樂讓人搖擺,甚至跳舞的大像都是保留節目。 Habitica居民們在中央的花海中大笑嬉鬧,不用去想最不喜歡的任務可真逍遙,愚者在他們中間迴轉,急切地到處展示著有趣的惡作劇和詼諧的動作。

隨著Misti飛城的鐘塔在午夜響起,愚者跳上舞台開始演講。

“朋友們!敵人們!心胸寬廣的老熟人們!聽我說兩句。”人們輕笑著,豎起了耳朵,用新的配飾裝扮自己,擺起了姿勢。

“如你們所知,”愚者繼續說著,“我那摸不著頭腦的幻覺僅僅持續了一天。但是,我很開心的宣布,我已經發現一個捷徑,可以保證我們的快樂不會停止,不需要去處理責任的重壓。可愛的Habitica居民們,見見我新的魔法朋友吧……“迷茫”!”

Lemoness突然臉色蒼白,丟下她的餐前甜點。 “等等!不要相信——”

但是,突然迷霧灌進了房間,閃閃發光,逐漸變濃,它們繞著愚者打著旋儿,凝聚成雲朵般的羽翼和抻長的脖子。人群說不出話來,一隻巨大的怪鳥在他們面前顯露出來,它的翅膀閃爍著幻覺。它發出恐怖刺耳的笑聲。

“噢,已經很多很多年了,一個有夠愚蠢的Habitica居民召喚了我!多麼美妙啊,終於有一個實體了。”

Misti飛城的魔法蜜蜂驚恐嗡嗡的逃離了這座浮空城,浮空城開始從天空下落。燦爛的春之花一個接一個枯萎了。

“我最親愛的朋友,為何如此驚恐?”迷茫啼叫著,扇動著它的翅膀,“沒必要再幸苦贏得獎勵了。我會給你們所有你們想要的東西! ”

金幣雨從空中傾瀉下來,猛力地敲打在地面,人們尖叫著奔跑著尋找遮蔽物。 “這是在開玩笑嗎?”Baconsaur大叫,金幣砸穿了窗戶,打破了屋頂的瓦片。

畫家Prophet閃避著,空中出現了閃電裂紋,霧遮擋了太陽。 “不!這次我想不是了!”

快,Habitica居民們,不要讓這個世界Boss使我們從目標上分心!保持注意力,關注你需要完成的任務,這樣我們才能拯救Misti飛城——還有,充滿希望的我們自己。", + "questBewilderCompletion": "“迷茫”被打!敗!了!

我們做到了!迷茫在空中扭曲,悲慟大叫,羽毛飄下來就像是雨點。漸漸地,它被捲入一團閃亮的霧中。一縷縷陽光穿透了迷霧,驅散了它,咳嗽著的不幸之幸的人們得以重見天日,其中有Bailey, Matt, Alex...和愚者自己。

Misti飛城被拯救了!

愚者看起來有點局促不安。 “噢,嗯,”他說,“我可能有點....忘乎所以了。”

人們在喃喃低語,濕漉漉的花朵被沖上人行道,在遠處還能看到坍塌的屋頂濺起的壯觀水花。

“額,好,”愚者說,“也就是說…我想說的是,很抱歉。”他長嘆道,“這畢竟可不是什麼好玩的遊戲,偶爾當心點不會有壞處的。也許我還是會帶頭開始下一年的惡作劇。”

浴火鳳凰故意咳了一聲。

“我的意思是,帶頭開始今年的春季大掃除!”愚者說,“不用擔心,我會很快將Habitica修回原樣。幸好在雙持掃把上沒人比我厲害。”

儀仗隊開始演奏,鼓舞大家。

用不了多久Habitica的一切就會回歸正軌。此外,現在迷茫已經消失了,魔法蜜蜂回到了Misti飛城開始了忙碌的工作,不久後,城市又一次淹沒在了花海中。

Habitica居民擁抱了魔法絨絨蜜蜂,愚者的眼睛瞬間亮了起來,“噢,我有了一個想法!為什麼你們都不養一些絨絨蜜蜂當寵物和坐騎呢?如果我要讓你感到無聊和有寓意的話,這是一個很好的禮物,它完美的代表了辛勤工作和甜蜜的回報的結合。”他眨了眨眼,“另外,它們沒有毒刺!愚者向你致敬。 ”", + "questBewilderCompletionChat": "`“迷茫”被打!敗!了! `\n\n我們做到了!迷茫在空中扭曲,悲慟大叫,羽毛飄下來就像是雨點。漸漸地,它被捲入一團閃亮的霧中。一縷縷陽光穿透了迷霧,驅散了它,咳嗽著的不幸之幸的人們得以重見天日,其中有Bailey, Matt, Alex...和愚者自己。\n\n`Misti飛城被拯救了! `\n\n愚者看起來有點局促不安。 “噢,嗯,”他說,“我可能有點....忘乎所以了。”\n\n人們在喃喃低語,濕漉漉的花朵被沖上人行道,在遠處還能看到坍塌的屋頂濺起的壯觀水花。\n\n“額,好,”愚者說,“也就是說…我想說的是,很抱歉。”他長嘆道,“這畢竟可不是什麼好玩的遊戲,偶爾當心點不會有壞處的。也許我還是會帶頭開始下一年的惡作劇。”\n\n浴火鳳凰故意咳了一聲。\n\n“我的意思是,帶頭開始今年的春季大掃除!”愚者說,“不用擔心,我會很快將Habitica修回原樣。幸好在雙持掃把上沒人比我厲害。”\n\n儀仗隊開始演奏,鼓舞大家。\n\n用不了多久Habitica的一切就會回歸正軌。此外,現在迷茫已經消失了,魔法蜜蜂回到了Misti飛城開始了忙碌的工作,不久後,城市又一次淹沒在了花海中。\n\nHabitica居民擁抱了魔法絨絨蜜蜂,愚者的眼睛瞬間亮了起來,“噢,我有了一個想法!為什麼你們都不養一些絨絨蜜蜂當寵物和坐騎呢?如果我要讓你感到無聊和有寓意的話,這是一個很好的禮物,它完美的代表了辛勤工作和甜蜜的回報的結合。”他眨了眨眼,“另外,它們沒有毒刺!愚者向你致敬。”", + "questBewilderBossRageTitle": "欺騙打擊", + "questBewilderBossRageDescription": "當這個量槽被填滿,迷失怪就會在Habitica釋放他的欺騙攻擊!", "questBewilderDropBumblebeePet": "奇幻蜜蜂 (寵物)", "questBewilderDropBumblebeeMount": "奇幻蜜蜂 (座騎)", - "questBewilderBossRageMarket": "`The Be-Wilder uses BEGUILEMENT STRIKE!`\n\nOh no! Despite our best efforts, we've gotten distracted by the Be-Wilder’s charming illusions and have forgotten to do some of our Dailies! With a cackling cry, the shining bird beats its wings, raising a swarm of mist around Alex the Merchant. When the fog clears, he has been possessed! “Have some free samples!” he shouts gleefully, and begins to hurl exploding eggs and potions at fleeing Habiticans. Not the most favorable of sales, to be sure.\n\nHurry! Let's stay focused on our Dailies to defeat this monster before it possesses someone else.", - "questBewilderBossRageStables": "`The Be-Wilder uses BEGUILEMENT STRIKE!`\n\nAhh!!! Once again the Be-Wilder has dazzled us into neglecting our Dailies, and now it has attacked Matt the Beast Master! With a swirl of mist, Matt transforms into a terrifying winged creature, and all the pets and mounts howl sadly in their stables. Quickly, stay focused on your tasks to defeat this dastardly distraction!", - "questBewilderBossRageBailey": "`The Be-Wilder uses BEGUILEMENT STRIKE!`\n\nLook out! In the middle of reporting the news, Bailey the Town Crier has been possessed by the Be-Wilder! She lets out an evil, uninformative screech as she rises into the air. Now how will we know what’s going on?\n\nDon't give up... we're so close to defeating this bothersome bird for once and for all!", - "questFalconText": "The Birds of Preycrastination", - "questFalconNotes": "Mt. Habitica is being overshadowed by a looming mountain of To-Dos. It used to be a place to picnic and enjoy a sense of accomplishment, until the neglected tasks grew out of control. Now it's home to fearsome Birds of Preycrastination, foul creatures which stop Habiticans from completing their tasks!

\"It's too hard!\" they caw at @JonArinbjorn and @Onheiron. \"It'll take too long to do right now! It won't make any difference if you wait until tomorrow! Why don't you do something fun instead?\"

No more, you vow. You will climb your personal mountain of To-Dos and defeat the Birds of Preycrastination!", - "questFalconCompletion": "Having finally triumphed over the Birds of Preycrastination, you settle down to enjoy the view and your well-earned rest.

\"Wow!\" says @Trogdorina. \"You won!\"

@Squish adds, \"Here, take these eggs I found as a reward.\"", - "questFalconBoss": "Birds of Preycrastination", + "questBewilderBossRageMarket": "`迷失怪運用了 欺騙打擊! `\n\n噢不!儘管我們努力了,我們迷失怪迷人的幻覺還是讓我們分心,忘掉了一些每日任務!伴隨著咯咯的叫喊聲,華麗的鳥兒扇動著翅膀,扇起了一大團薄霧圍繞著商人Alex。當霧消失,他已經著魔了! “有一些免費的樣品!”他興高采烈地喊著,開始丟出爆炸的蛋和藥水朝向逃跑的Habitica村民。誠然,不是最優惠的銷售。\n\n快!讓我們保持關注我們的每日任務在它佔據其他人之前打敗這個怪物。", + "questBewilderBossRageStables": "`迷失怪運用了 欺騙打擊! `\n \n啊! ! !迷失怪再次讓我們目眩神迷以至於忽視了我們的每日任務,現在它已經攻擊了馴獸師馬特!一陣煙霧後,馬特竟然變成了可怕的飛行怪獸,所有的寵物和坐騎都在獸欄中痛苦地嚎叫。快!專注於你的每日任務來打敗這個卑鄙的怪物!", + "questBewilderBossRageBailey": "`迷失怪運用了 欺騙打擊! `\n\n小心!在報導新聞中,公告員貝利已經被迷失怪佔據了!她放出了一個惡魔,她隨意的大叫聲升上了天空。現在我們該怎麼辦?\n\n不要放棄...我們就快要擊敗這個討厭的大鳥了,一勞永逸!", + "questFalconText": "掠食明天之鳥", + "questFalconNotes": "赫然聳現的堆成山的待辦事項令Habitica山蒙上了陰影。被忽視的任務增長失控前,它曾是野餐和享受完成的感覺的地方。現在,他變成了掠食明天之鳥的巢穴,掠食明天之鳥是一種邪惡的生物,阻止Habitica居民完成他們的任務!

“太難了!”它們朝著@JonArinbjorn 和@Onheiron 發出叫聲,“現在完成花太多的時間了!等到明天做一點關係都沒有!為什麼現在不去做一些有趣的事情呢?”

你發誓再也不這樣了。你將攀登你自己的待辦事項山脈,打敗掠食明天之鳥!", + "questFalconCompletion": "最後,你戰勝了掠食明天之鳥,安下心來享受風景和你應得的休息時間。

“哇噢!”@Trogdorina 說,“你贏了!”

@Squish 接著說道:“嘿,拿上這些我找到的蛋作為你的獎勵。”", + "questFalconBoss": "掠食明天之鳥", "questFalconDropFalconEgg": "鷹 (蛋)", "questFalconUnlockText": "解鎖——可在市集中購買鷹蛋", - "questTreelingText": "The Tangle Tree", - "questTreelingNotes": "It's the annual Garden Competition, and everyone is talking about the mysterious project which @aurakami has promised to unveil. You join the crowd on the day of the big announcement, and marvel at the introduction of a moving tree. @fuzzytrees explains that the tree will help with garden maintenance, showing how it can mow the lawn, trim the hedge and prune the roses all at the same time – until the tree suddenly goes wild, turning its secateurs on its creator! The crowd panics as everyone tries to flee, but you aren't afraid – you leap forward, ready to do battle.", - "questTreelingCompletion": "You dust yourself off as the last few leaves drift to the floor. In spite of the upset, the Garden Competition is now safe – although the tree you just reduced to a heap of wood chips won't be winning any prizes! \"Still a few kinks to work out there,\" @PainterProphet says. \"Perhaps someone else would do a better job of training the saplings. Do you fancy a go?\"", - "questTreelingBoss": "Tangle Tree", + "questTreelingText": "糾結樹", + "questTreelingNotes": "這是一年一度的花園大賽!大家都在談論 @aurakami 即將宣布的神秘項目。您在宣布當天也加入了人潮,對剛推出的移動樹木讚歎不已。 @fuzzytrees 解釋,這棵樹會對花園的維修和照顧有很大的貢獻,然後讓它演示同時割草坪、修剪矮灌木和玫瑰花。突然!它發了瘋!把手中的樹枝修剪器揮了過來!觀眾一陣驚呼後開始逃跑。但你不怕!反而跳上前,準備戰鬥。", + "questTreelingCompletion": "看著最後幾片樹葉飄落到地上,你撣了撣身上的灰塵。儘管有些失望,但花園競賽現在已經安全了——至少剛才那棵被你變成一堆木片的樹沒法再獲獎了! “不過,還有一些工作要做”,@PainterProphet 說道, “需要一些人手來更好地培育樹苗。你願意一起來做嗎?”", + "questTreelingBoss": "糾結樹", "questTreelingDropTreelingEgg": "樹精 (蛋)", "questTreelingUnlockText": "解鎖——可在市集中購買樹精蛋", - "questAxolotlText": "The Magical Axolotl", - "questAxolotlNotes": "From the depths of Washed-Up Lake you see rising bubbles and... fire? A little axolotl rises from the murky water spewing streaks of colors. Suddenly it begins to open its mouth and @streak yells, \"Look out!\" as the Magical Axolotl starts to gulp up your willpower!

The Magical Axolotl swells with spells, taunting you. \"Have you heard of my powers of regeneration? You'll tire before I do!\"

\"We can defeat you with the good habits we've built!\" @PainterProphet defiantly shouts. You steel yourself to be productive to defeat the Magical Axolotl and regain your stolen willpower!", - "questAxolotlCompletion": "After defeating the Magical Axolotl, you realize that you regained your willpower all on your own.

\"The willpower? The regeneration? It was all just an illusion?\" @Kiwibot asks.

\"Most magic is,\" the Magical Axolotl replies. \"I'm sorry for tricking you. Please take these eggs as an apology. I trust you to raise them to use their magic for good habits and not evil!\"

You and @hazel40 clutch your new eggs in one hand and wave goodbye with the other as the Magical Axolotl returns to the lake.", - "questAxolotlBoss": "Magical Axolotl", + "questAxolotlText": "魔法蠑螈", + "questAxolotlNotes": "從淨湖的深處,你看到了不斷上升的泡沫和……火?一隻小蠑螈從渾濁的水中顯現出條紋的顏色。突然它張開嘴,@streak 大叫,“當心!”魔法蠑螈開始吞噬你的意志力!

魔法蠑螈因咒語變得膨脹,它在嘲笑你。 “你聽說過我的再生能力嗎?在我再生之前你就會疲勞的!”

“我們可以打敗你的,我們已經建立了良好的習慣!”@PainterProphet 挑釁地大喊。堅強些,高效地打敗魔法蠑螈,並奪回你被偷走的意志力!", + "questAxolotlCompletion": "在打敗魔法蠑螈之後,你體會到你靠自己奪回了意志力。

@Kiwibot 問道:“意志力?再生?那些只是錯覺?”

“大部分魔法都是這樣,”魔法蠑螈回答道,“我很抱歉欺騙了你。請收下這些蛋作為我的道歉。我相信你們會提升他們的能力,讓他們使用魔法以獲得好習慣,還有別作惡!”

你和@hazel40 用一隻手抓起你們的新蛋,和其他人揮手告別,魔法蠑螈也回到湖中去了。", + "questAxolotlBoss": "魔法蠑螈", "questAxolotlDropAxolotlEgg": "蠑螈 (蛋)", "questAxolotlUnlockText": "解鎖——可在市集中購買蠑螈蛋", - "questAxolotlRageTitle": "Axolotl Regeneration", - "questAxolotlRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Magical Axolotl will heal 30% of its remaining health!", - "questAxolotlRageEffect": "`Magical Axolotl uses AXOLOTL REGENERATION!`\n\n`A curtain of colorful bubbles obscures the monster for a moment, and when it clears, some of its wounds have vanished!`", - "questTurtleText": "Guide the Turtle", - "questTurtleNotes": "Help! This giant sea turtle cannot find her way to her nesting beach. She returns there every year to lay her eggs, but this year Inkomplete Bay is filled with toxic Task Flotsam made of red dailies and unchecked to-dos. \"She's thrashing in a panic!\" @JessicaChase says.

@UncommonCriminal nods. \"It's because her guiding senses are fogged and confused.\"

@Scarabsi grabs your arm. \"Can you help clear the Task Flotsam blocking her path? It may be hazardous, but we have to help her!\"", - "questTurtleCompletion": "Your valiant work has cleared the waters for our sea turtle to find her beach. You, @Bambin, and @JaizakAripaik watch as she buries her brood of eggs deep in the sand so they can grow and hatch into hundreds of little sea turtles. Ever the lady, she gives you three eggs each, asking that you feed and nurture them so one day they become big sea turtles themselves.", - "questTurtleBoss": "Task Flotsam", + "questAxolotlRageTitle": "蠑螈再生", + "questAxolotlRageDescription": "如果你沒有完成每日任務,這個進度條的進度就會前進。當它填滿的時候魔法蠑螈會回复它剩餘生命值的30%!", + "questAxolotlRageEffect": "`魔法蠑螈使用了蠑螈再生! `\n\n`七彩泡泡遮住了怪物,當它們消失時,魔法蠑螈的傷口也癒合了! `", + "questTurtleText": "引導海龜", + "questTurtleNotes": "救命啊!這隻巨大的海龜找不到回到她造巢的海灘的路了。她每年都回到這裡下蛋,但是今年未完成海灘充滿了由紅色每日任務和未完成的待辦事項構成的有毒的任務漂浮物。 @JessicaChase 說道:“她在恐慌中瑟瑟發抖!”

@UncommonCriminal 嘟噥道:“這是因為她的方向感變得不清晰和混亂。”

@Scarabsi 鉤住了你的手臂:“你能幫忙清除這些阻擋了她路線的任務漂浮物嗎?這可能是有危險的,但是我們必須幫助她!”", + "questTurtleCompletion": "你英勇地清理了水體,海龜能找到她的海灘了。你、@Bambin 和@JaizakAripaik 看著她把一窩的蛋埋在沙中,他們會成長並孵化出成百上千個小海龜。海龜小姐,她給了你三個蛋,請求你餵養並且教育他們,直到他們自己成為大海龜的那一天。", + "questTurtleBoss": "任務漂浮物", "questTurtleDropTurtleEgg": "海龜 (蛋)", "questTurtleUnlockText": "解鎖——可在市集中購買烏龜蛋", - "questArmadilloText": "The Indulgent Armadillo", - "questArmadilloNotes": "It's time to get outside and start your day. You swing open your door only to be met with what looks like a sheet of rock. \"I'm just giving you the day off!\" says a muffled voice through the blocked door. \"Don't be such a bummer, just relax today!\"

Suddenly, @Beffymaroo and @PainterProphet knock on your window. \"Looks like the Indulgent Armadillo has taken a liking to you! C'mon, we'll help you get her out of your way!\"", - "questArmadilloCompletion": "Finally, after a long morning of convincing the Indulgent Armadillo that you do, in fact, want to work, she caves. \"I'm sorry!\" She apologizes. \"I just wanted to help. I thought everyone liked lazy days!\"

You smile, and let her know that next time you've earned a day off you'll invite her over. She grins back at you. Passers-by @Tipsy and @krajzega congratulate you on the good work as she rolls away, leaving a few eggs as an apology.", - "questArmadilloBoss": "Indulgent Armadillo", + "questArmadilloText": "放縱的犰狳", + "questArmadilloNotes": "是時候走出去開始新的一天了。你搖晃著打開門,卻看到了一個看上去像石板一樣的東西\"我只給你一天時間休假!\"被堵住的門後傳來朦朧的聲音。 \"不要成為一個大懶漢,但是今天就好好休息吧\"

突然之間,@Beffymaroo 和 @PainterProphet 敲打著你的窗戶。 \"看上去放縱的犰狳已經帶給你了一個嗜好!來吧,我們讓她擺脫你的!\"", + "questArmadilloCompletion": "最終,本想去工作的你,用了一整個早晨的時間來勸說放縱的犰狳,她最終知錯了。 “真對不起!”她說,“我本來是想幫忙的. 我以為所有人都喜歡懶散度日!”

你笑了,並告訴她如果哪天你能休息的話一定會請她過來玩。她咧開嘴笑了。路人 @Tipsy 和 @krajzega 祝賀你做了這麼棒的一件事情,這時犰狳滾動著離開了,留下了一些蛋作為賠償。", + "questArmadilloBoss": "放縱的犰狳", "questArmadilloDropArmadilloEgg": "穿山甲 (蛋)", "questArmadilloUnlockText": "解鎖——可在市集中購買犰狳蛋", - "questCowText": "The Mootant Cow", - "questCowNotes": "It’s been a long, hot day at Sparring Farms, and there is nothing more you want than a long sip of water and some sleep. You're standing there daydreaming when @Soloana suddenly screams, \"Everyone run! The prize cow has mootated!\"

@eevachu gulps. \"It must be our bad habits that infected it.\"

\"Quick!\" @Feralem Tau says. \"Let’s do something before the udder cows mootate, too.\"

You’ve herd enough. No more daydreaming -- it's time to get those bad habits under control!", - "questCowCompletion": "You milk your good habits for all they are worth until the cow reverts to its original form. The cow looks over at you with her pretty brown eyes and nudges over three eggs.

@fuzzytrees laughs and hands you the eggs, \"Maybe it still is mootated if there are baby cows in these eggs. But I trust you to stick to your good habits when you raise them!\"", - "questCowBoss": "Mootant Cow", + "questCowText": "變異奶牛", + "questCowNotes": "那是在斯巴英農場中又熱又長的一天,除了痛快地喝口水後去睡覺,你再也不想做什麼別的了。正當你呆在那裡做白日夢的時候,@Soloana突然尖叫起來,“所有人快跑!被捕獲的奶牛開始暴動了!”

@eevachu 吞了一口唾沫,“它一定是被我們的壞習慣感染了。”

“快點!”Feralem Tau喊道,“在變異奶牛來臨前行動起來!”

你對自己的放羊時間已經夠長了,不要再做白日夢了,是時候獲取那些壞習慣的控制權了!", + "questCowCompletion": "當你的好習慣奶牛一直保持有價值的時候,你從中擠出牛奶, 直到好習慣奶牛回復成它原來的樣子。奶牛用它的棕色漂亮的眼睛看著你,並產出三個蛋。

@fuzzytrees 一邊笑著將這些蛋交給你,”如果蛋裡面有牛寶寶,也許它仍然是變異的。但是我相信你撫養牠們的時候,會堅持你的好習慣!”", + "questCowBoss": "變異奶牛", "questCowDropCowEgg": "牛 (蛋)", "questCowUnlockText": "解鎖——可在市集中購買乳牛蛋", - "questBeetleText": "The CRITICAL BUG", - "questBeetleNotes": "Something in the domain of Habitica has gone awry. The Blacksmiths' forges have extinguished, and strange errors are appearing everywhere. With an ominous tremor, an insidious foe worms from the earth... a CRITICAL BUG! You brace yourself as it infects the land, and glitches begin to overtake the Habiticans around you. @starsystemic yells, \"We need to help the Blacksmiths get this Bug under control!\" It looks like you'll have to make this programmer's pest your top priority.", - "questBeetleCompletion": "With a final attack, you crush the CRITICAL BUG. @starsystemic and the Blacksmiths rush up to you, overjoyed. \"I can't thank you enough for smashing that bug! Here, take these.\" You are presented with three shiny beetle eggs. Hopefully these little bugs will grow up to help Habitica, not hurt it.", + "questBeetleText": "嚴重的BUG", + "questBeetleNotes": "Habitica域裡的好多東西出了岔子。鐵匠的熔爐熄滅了,到處都在出稀奇古怪的玄學BUG。伴隨著一場不祥的地震,一個傢伙悄無聲息地從地下蠕動了上來……一條巨大的蟲子!一個嚴重的BUG!看到它在感染這片大陸,你打起精神,發現身邊的Habitica居民們身上開始發生故障。 @starsystemic 喊道:“我們需要幫助鐵匠解決這個BUG!”看起來你必須得把對付程序員不喜歡的這個玩意作為最高優先級了。", + "questBeetleCompletion": "最後一擊,你粉碎了這個嚴重的BUG。 @starsystemic 和鐵匠歡呼雀躍著來到你面前:“我都不知道該如何感謝你消滅了這個BUG!這些給你。”他送給了你三個閃閃發光的甲殼蟲蛋。希望這些小蟲子們長大後能有益於Habitica,而不是傷害它。", "questBeetleBoss": "CRITICAL BUG", "questBeetleDropBeetleEgg": "獨角仙 (蛋)", "questBeetleUnlockText": "解鎖——可在市集中購買獨角仙蛋", - "questGroupTaskwoodsTerror": "Terror in the Taskwoods", - "questTaskwoodsTerror1Text": "Terror in the Taskwoods, Part 1: The Blaze in the Taskwoods", - "questTaskwoodsTerror1Notes": "You have never seen the Joyful Reaper so agitated. The ruler of the Flourishing Fields lands her skeleton gryphon mount right in the middle of Productivity Plaza and shouts without dismounting. \"Lovely Habiticans, we need your help! Something is starting fires in the Taskwoods, and we still haven't fully recovered from our battle against Burnout. If it's not halted, the flames could engulf all of our wild orchards and berry bushes!\"

You quickly volunteer, and hasten to the Taskwoods. As you creep into Habitica’s biggest fruit-bearing forest, you suddenly hear clanking and cracking voices from far ahead, and catch the faint smell of smoke. Soon enough, a horde of cackling, flaming skull-creatures flies by you, biting off branches and setting the treetops on fire!", - "questTaskwoodsTerror1Completion": "With the help of the Joyful Reaper and the renowned pyromancer @Beffymaroo, you manage to drive back the swarm. In a show of solidarity, Beffymaroo offers you her Pyromancer's Turban as you move deeper into the forest.", - "questTaskwoodsTerror1Boss": "Fire Skull Swarm", - "questTaskwoodsTerror1RageTitle": "Swarm Respawn", - "questTaskwoodsTerror1RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Fire Skull Swarm will heal 30% of its remaining health!", - "questTaskwoodsTerror1RageEffect": "`Fire Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls swirl around you in a gout of flame!", - "questTaskwoodsTerror1DropSkeletonPotion": "Skeleton Hatching Potion", + "questGroupTaskwoodsTerror": "恐怖的任務森林", + "questTaskwoodsTerror1Text": "恐怖的任務森林,第1部:任務樹林中的大火", + "questTaskwoodsTerror1Notes": "你從未見過快樂收割者如此不安。繁榮土地的主人乘坐她的骷髏獅鷲降落在生產力廣場中央,來不及下坐騎便開始呼喊。 “可愛的habitica居民們,我們需要你們的幫忙!有些東西正開始在任務樹林中燃燒,而我們還沒有完全從戰鬥的勞累中恢復。如果火焰不停止,它會吞噬我們所有的野生果樹和漿果!”

你馬上答應幫忙,並加速到達了任務樹林。當你進入habitica最大的果林時,突然聽到叮噹聲和破裂聲從前方的遠處傳來,還嗅到了淡淡的煙味。很快,一群咯咯叫、燃燒著的頭骨怪物飛過你,咬斷樹枝並把樹梢扔到了火焰上!", + "questTaskwoodsTerror1Completion": "在快樂收割者和著名的火佔師@Beffymaroo 的幫助下,你嘗試著擊退他們。 Beffymaroo給了你她的烈焰術士頭巾以示團結,你們進入森林的更深處。", + "questTaskwoodsTerror1Boss": "火骷髏群", + "questTaskwoodsTerror1RageTitle": "骨群重生", + "questTaskwoodsTerror1RageDescription": "骨群重生:如果你沒有完成每日任務,這個進度條的進度會前進。當它填滿的時候烈焰骸骨群會回复它剩餘生命值的30%!", + "questTaskwoodsTerror1RageEffect": "`火骷髏群使用了骨群重生! `\n\n受到勝利的激勵,更多的骸骨從火焰中衝了出來,壯大隊伍!", + "questTaskwoodsTerror1DropSkeletonPotion": "骷髏孵化藥水", "questTaskwoodsTerror1DropRedPotion": "紅色孵化藥水", - "questTaskwoodsTerror1DropHeadgear": "Pyromancer's Turban (Headgear)", - "questTaskwoodsTerror2Text": "Terror in the Taskwoods, Part 2: Finding the Flourishing Fairies", - "questTaskwoodsTerror2Notes": "Having fought through the swarm of burning skulls, you reach a large group of refugee farmers at the forest's edge. \"Their village was burnt down by a renegade autumn spirit,\" says a familiar voice. It's @Kiwibot, the legendary tracker! \"I managed to gather the survivors, but there's no sign of the Flourishing Fairies who help to grow the wild fruit of the Taskwoods. Please, you have to help me rescue them!\"", - "questTaskwoodsTerror2Completion": "You manage to locate the last dryad and lead her away from the monsters. When you return to the refugee farmers, you are greeted by the thankful faeries, who give you a robe woven of shining magic and silk. Suddenly, a deep rumbling sound echoes through the trees, shaking the very earth. \"That must be the renegade spirit,\" the Joyful Reaper says. \"Let's hurry!\"", - "questTaskwoodsTerror2CollectPixies": "Pixies", + "questTaskwoodsTerror1DropHeadgear": "烈焰術士頭巾(頭飾)", + "questTaskwoodsTerror2Text": "恐怖的任務森林,第2部:找到豐收精靈", + "questTaskwoodsTerror2Notes": "在與火骷髏群的戰鬥之後,你在森林的邊緣遇到了一大群逃難的農民。 “他們的村莊被叛變的秋天精靈燒毀了,”一個熟悉的聲音說道,是@Kiwibot,傳奇的追踪者! “我已經把難民們都聚集到了這裡,但是卻沒有找到幫助森林裡的野生水果生長的豐收精靈的踪跡,你得幫我救救他們!”", + "questTaskwoodsTerror2Completion": "你嘗試著定位最後的樹妖並且引導她遠離怪物。當你回到逃難的農夫那裡時,你被充滿感激的妖精們迎接,他們用閃光魔法和絲綢為你編織了一件長袍。突然,一陣隆隆的迴聲從樹中傳出,震動地表。 “那一定是叛變的精靈,”快樂的收穫者說。 “快!”", + "questTaskwoodsTerror2CollectPixies": "小精靈", "questTaskwoodsTerror2CollectBrownies": "布朗尼", - "questTaskwoodsTerror2CollectDryads": "Dryads", + "questTaskwoodsTerror2CollectDryads": "樹妖", "questTaskwoodsTerror2DropArmor": "火術士長袍 (盔甲)", - "questTaskwoodsTerror3Text": "Terror in the Taskwoods, Part 3: Jacko of the Lantern", - "questTaskwoodsTerror3Notes": "Ready for battle, your group marches to the heart of the forest, where the renegade spirit is trying to destroy an ancient apple tree surrounded by fruitful berry bushes. His pumpkin-like head radiates a terrible light wherever it turns, and in his left hand he holds a long rod, with a lantern hanging from its tip. Instead of fire or flame, however, the lantern contains a dark crystal that chills you to the very bone.

The Joyful Reaper raises a bony hand to her mouth. \"That's -- that's Jacko, the Lantern Spirit! But he's a helpful harvest ghost who guides our farmers. What could possibly drive the dear soul to act this way?\"

\"I don't know,\" says @bridgetteempress. \"But it looks like that 'dear soul' is about to attack us!\"", - "questTaskwoodsTerror3Completion": "After a long battle, you manage to land a well-aimed blow at the lantern that Jacko carries, and the crystal within shatters. Jacko suddenly snaps back to his senses and bursts into glowing tears. \"Oh, my beautiful forest! What have I done?!\" he wails. His tears extinguish the remaining fires, and the apple tree and wild berries are saved.

After you help him relax, he explains, \"I met this charming lady named Tzina, and she gave me this glowing crystal as a gift. At her urging, I put it in my lantern... but that's the last thing I recall.\" He turns to you with a golden smile. \"Perhaps you should take it for safekeeping while I help the wild orchards to regrow.\"", - "questTaskwoodsTerror3Boss": "Jacko of the Lantern", + "questTaskwoodsTerror3Text": "恐怖的任務森林,第3部:傑克南瓜燈", + "questTaskwoodsTerror3Notes": "你的隊伍走到森林深處,準備戰鬥。在那裡,一個叛變的精靈正試圖摧毀被肥沃漿果叢林包圍的古老蘋果樹。他的南瓜頭不管轉向哪裡都散發出一種可怕的光,左手持一根頂端掛著燈籠的長桿。然而,燈籠中的並不是火焰或者焰光,而是一種黑色晶體,令你脊背發寒。

快樂收割者用她骨瘦如柴的手摀住嘴。 “那是——那是Jacko,燈籠精靈!但他是一個對收穫有幫助的精靈,指導著我們的農民。是什麼讓這位親愛的精靈做這樣的事?”

“我不知道,”@bridgetteempress 說,“但看起來這個'親愛的精靈'要攻擊我們了!”", + "questTaskwoodsTerror3Completion": "一番爭鬥之後,你看準時機打落了Jacko攜帶的那個燈籠!裡面的晶體被砸碎了! Jacko突然恢復了理智,流下發光的淚水。 “哦,我美麗的森林!我做了什麼?!”他痛哭著。他的眼淚熄滅了余火,救下了蘋果樹和野生漿果。

在你讓他平靜下來之後,他解釋說:“我遇見了一個很有魅力的女士,叫Tzina,她給了我這個發光的晶體,作為禮物。在她的催促下,我把它放進我的燈籠……這是我能回憶起的最後一件事。”他金黃色的腦袋轉向你微笑著說:“也許在我幫助野生果園重建的時候,你可以保管著它。”", + "questTaskwoodsTerror3Boss": "傑克南瓜燈", "questTaskwoodsTerror3DropStrawberry": "草莓 (食物)", - "questTaskwoodsTerror3DropWeapon": "Taskwoods Lantern (Two-Handed Weapon)", - "questFerretText": "The Nefarious Ferret", - "questFerretNotes": "Walking through Habit City, you see an unhappy crowd surrounding a red-robed Ferret.

\"That productivity potion you sold me is useless!\" @Beffymaroo complains. \"I watched three hours of TV last night instead of doing my chores!\"

\"Yeah!\" shouts @Pandah. \"And today I spent an hour rearranging my books instead of reading them!\"

The Nefarious Ferret spreads his hands innocently. \"That's more TV watching and book organizing than you'd normally get done, isn't it?\"

The crowd erupts in anger.

\"No refunds!\" crows the Nefarious Ferret. He fires a bolt of magic into the crowd, preparing to escape in the smoke.

\"Please, Habitican!\" @Faye says, grabbing your arm. \"Defeat the ferret and make him refund his dishonest earnings!\"", - "questFerretCompletion": "You defeat the soft-furred swindler and @UncommonCriminal gives the crowd their refunds. There's even a little gold left over for you. Plus, it looks like the Nefarious Ferret dropped some eggs in his hurry to get away!", - "questFerretBoss": "Nefarious Ferret", + "questTaskwoodsTerror3DropWeapon": "任務森林的燈籠(雙手武器)", + "questFerretText": "那惡毒的雪貂", + "questFerretNotes": "你正走過習慣城市,突然看到一群不開心的人圍著一隻穿紅色長袍的雪貂。

“你賣給我的生產力藥水沒用!” @Beffymaroo控訴。 ”我昨晚看了三小時的電視,而不是做家務!”

“是的!”@Pandah大叫。 “而且今天我花了一個小時整理我的書,而不是讀它們!”

那惡毒的雪貂無辜地攤開手。 ”那你們看電視和整理書的時間比平常多了呀~不是嗎?”

人群中爆發出了憤怒。

“不!退!錢!”惡毒的雪貂洋洋得意地大叫著。他發射了一束魔法到人群中,準備在煙霧中逃離。

“拜託了!Habitican!”@Faye抓住你的胳膊說。 ”打敗那隻雪貂!讓他把不誠實的收益還回來!”", + "questFerretCompletion": "你擊敗了軟毛的騙子,並且@UncommonCriminal 給了你豐厚的報酬,甚至還有你的一小堆黃金。另外,看起來邪惡的雪貂匆忙逃走時落下了一些蛋!", + "questFerretBoss": "恶毒的雪貂", "questFerretDropFerretEgg": "雪貂 (蛋)", - "questFerretUnlockText": "Unlocks purchasable Ferret eggs in the Market", - "questDustBunniesText": "The Feral Dust Bunnies", - "questDustBunniesNotes": "It's been a while since you've done any dusting in here, but you're not too worried—a little dust never hurt anyone, right? It's not until you stick your hand into one of the dustiest corners and feel something bite that you remember @InspectorCaracal's warning: leaving harmless dust sit too long causes it to turn into vicious dust bunnies! You'd better defeat them before they cover all of Habitica in fine particles of dirt!", - "questDustBunniesCompletion": "The dust bunnies vanish into a puff of... well, dust. As it clears, you look around. You'd forgotten how nice this place looks when it's clean. You spy a small pile of gold where the dust used to be. Huh, you'd been wondering where that was!", - "questDustBunniesBoss": "Feral Dust Bunnies", - "questGroupMoon": "Lunar Battle", - "questMoon1Text": "Lunar Battle, Part 1: Find the Mysterious Shards", - "questMoon1Notes": "Habiticans have been distracted from their tasks by something strange: twisted shards of stone are appearing across the land. Worried, @Starsystemic the Seer summons you to her tower. She says, \"I've been reading alarming omens about these shards, which have been blighting the land and driving hardworking Habiticans to distraction. I can track the source, but first I'll need to examine the shards. Can you bring some to me?\"", - "questMoon1Completion": "@Starsystemic disappears into her tower to examine the shards you gathered. \"This may be more complicated than we feared,\" says @Beffymaroo, her trusted assistant. \"It will take us some time to discover the cause. Keep checking in every day, and when we know more, we'll send you the next quest scroll.\"", - "questMoon1CollectShards": "Lunar Shards", - "questMoon1DropHeadgear": "Lunar Warrior Helm (Headgear)", - "questMoon2Text": "Lunar Battle, Part 2: Stop the Overshadowing Stress", - "questMoon2Notes": "After studying the shards, @Starsystemic the Seer has some bad news. \"An ancient monster is approaching Habitica, and it is causing terrible stress to befall the citizens. I can draw the shadow out of people's hearts and into this tower, where it will take physical form, but you’ll need to defeat it before it breaks loose and spreads again.\" You nod, and she starts to chant. Dancing shadows fill the room, pressing tightly together. The cold wind swirls, the darkness deepens. The Overshadowing Stress rises from the floor, grins like a nightmare made real... and strikes!", - "questMoon2Completion": "The shadow explodes in a puff of dark air, leaving the room brighter and your hearts lighter. The stress blanketing Habitica is diminished, and you can all breathe a sigh of relief. Still, as you look up at the sky, you sense that this is not over: the monster knows someone destroyed its shadow. \"We'll keep careful watch in the coming weeks,\" says @Starsystemic, \"and I'll send you a quest scroll when it manifests.\"", - "questMoon2Boss": "Overshadowing Stress", + "questFerretUnlockText": "解鎖——可在市集中購買雪貂蛋", + "questDustBunniesText": "野生的灰塵兔子", + "questDustBunniesNotes": "距離你上次打掃這裡已經有一會兒了,但你不是很擔心——一點灰塵不會怎麼樣的,對吧?等你把手伸進其中一個灰塵最多的角落,感受到被什麼東西咬了之後,你才想起@InspectorCaracal的警告:在你家寄養的小灰塵兔子感受不到你的關愛,就會變成野生灰塵兔到處亂竄。你最好在所有灰塵兔子野化之前溫柔地再次馴養牠們!", + "questDustBunniesCompletion": "灰塵兔子們消失在……唔,灰塵中。這里幹淨了,你環顧四周。你一度遺忘這裡在乾淨的時候是多麼美好。你在之前灰塵所處的角落找到了一小堆金子。好吧,你都忘了這里之前是放金子的地方!", + "questDustBunniesBoss": "野生的灰塵兔子", + "questGroupMoon": "月亮之戰", + "questMoon1Text": "月亮戰爭,第1部:尋找神秘碎片", + "questMoon1Notes": "Habitica居民被一些奇怪的事情分心了:扭曲的石頭碎片出現在地面。出於擔心,@Starsystemic 先知召喚你去她的塔。她說,“我一直在研讀有關這些碎片的預警徵兆,這些碎片已經使大地被破壞,使努力的habitica居民分心。我可以追查它們的源頭,但首先我需要研究那些碎片。你能給我撿些碎片來嗎?”", + "questMoon1Completion": "@Starsystemic 進入她的塔樓研究你得到的碎片。 “這也許比我們擔心的更複雜” @Beffymaroo,她信任的助手說。 “找到原因還需要一些時間,繼續完成你的每日任務,我們了解更多後會寄給你下一個副本捲軸。”", + "questMoon1CollectShards": "月之碎片", + "questMoon1DropHeadgear": "月亮戰士頭盔(頭部裝備)", + "questMoon2Text": "月亮戰爭,第2部:驅逐遮天蔽日的壓力", + "questMoon2Notes": "研究了這些碎片後,@Starsystemic 先知有一些壞消息。 “一隻遠古時的怪物正在接近Habitica,它正在讓公民心中產生“壓力”的陰影。我可以把人們心中的陰影拖出來,放到塔中,但你得盡快打敗它,避免它再次逃脫。 ”你點點頭,於是先知開始詠唱……舞動的影子充滿房間,被推著擠在一起。冷風打著旋,黑暗漸深。遮天蔽日的壓力從地面上升起,笑得彷彿噩夢成真……它開始攻擊了!", + "questMoon2Completion": "陰影在一團黑氣中爆炸了,房間變得明亮,你也稍稍可以放鬆了。覆蓋著Habitica的壓力減少了,你終於可以大鬆一口氣。但看向天空時,你知道一切並沒有結束:那個怪物知道有人摧毀了它的陰影。 “我們會繼續小心觀察幾週,”@Starsystemic 說,“等怪物再有動靜,會繼續給你副本捲軸的。”", + "questMoon2Boss": "遮天蔽日的壓力", "questMoon2DropArmor": "蒼月勇士盔甲 (盔甲)", - "questMoon3Text": "Lunar Battle, Part 3: The Monstrous Moon", - "questMoon3Notes": "You get @Starsystemic's urgent scroll at the stroke of midnight and gallop to her tower. \"The monster is using the full moon to try to cross over to our realm,\" she says. \"If it succeeds, the shockwave of stress will be overwhelming!\"

To your dismay, you see that the monster is indeed using the moon to manifest. A glowing eye opens in its rocky surface, and a long tongue rolls from a gaping, fanged mouth. There's no way you'll let it fully emerge!", - "questMoon3Completion": "The emerging monster bursts into shadow, and the moon turns silver as the danger passes. The dragons start singing again, and the stars sparkle with a soothing light. @Starsystemic the Seer bends down and picks up a lunar shard. It shines silver in her hand, before changing into a magnificent crystal scythe.", + "questMoon3Text": "月亮戰爭,第3部:巨大的月亮", + "questMoon3Notes": "在午夜鐘聲敲響的時候,你得到@Starsystemic 的緊急捲軸,於是飛奔到她的塔。 “怪物正試圖利用滿月跨越到我們的地帶,”她說。 “如果成功了,壓力的衝擊波將勢不可擋!”

你正焦急時,看到怪物事實上是利用月亮來顯化的。一個發光的眼睛在岩石表面打開,一條長長的舌頭從一個張開的佈滿尖牙的口裡捲著出來。你絕對不能讓它完全顯形!", + "questMoon3Completion": "新興的怪物匆匆躲回陰影,月亮變成銀色昭示著危險已經過去。龍群再次開始吟唱,星星閃爍柔和的光。 @Starsystemic 先知彎腰撿起一片月球碎片。它閃耀著銀光在她的手中變成華麗的水晶鐮。", "questMoon3Boss": "驚懼之月", - "questMoon3DropWeapon": "Lunar Scythe (Two-Handed Weapon)", - "questSlothText": "The Somnolent Sloth", - "questSlothNotes": "As you and your party venture through the Somnolent Snowforest, you're relieved to see a glimmering of green among the white snowdrifts... until an enormous sloth emerges from the frosty trees! Green emeralds shimmer hypnotically on its back.

\"Hello, adventurers... why don't you take it slow? You've been walking for a while... so why not... stop? Just lie down, and rest...\"

You feel your eyelids grow heavy, and you realize: It's the Somnolent Sloth! According to @JaizakAripaik, it got its name from the emeralds on its back which are rumored to... send people to... sleep...

You shake yourself awake, fighting drowsiness. In the nick of time, @awakebyjava and @PainterProphet begin to shout spells, forcing your party awake. \"Now's our chance!\" @Kiwibot yells.", - "questSlothCompletion": "You did it! As you defeat the Somnolent Sloth, its emeralds break off. \"Thank you for freeing me of my curse,\" says the sloth. \"I can finally sleep well, without those heavy emeralds on my back. Have these eggs as thanks, and you can have the emeralds too.\" The sloth gives you three sloth eggs and heads off for warmer climates.", - "questSlothBoss": "Somnolent Sloth", - "questSlothDropSlothEgg": "Sloth (Egg)", - "questSlothUnlockText": "Unlocks purchasable Sloth eggs in the Market", - "questTriceratopsText": "The Trampling Triceratops", - "questTriceratopsNotes": "The snow-capped Stoïkalm Volcanoes are always bustling with hikers and sight-seers. One tourist, @plumilla, calls over a crowd. \"Look! I enchanted the ground to glow so that we can play field games on it for our outdoor activity Dailies!\" Sure enough, the ground is swirling with glowing red patterns. Even some of the prehistoric pets from the area come over to play.

Suddenly, there's a loud snap -- a curious Triceratops has stepped on @plumilla's wand! It's engulfed in a burst of magic energy, and the ground starts shaking and growing hot. The Triceratops' eyes shine red, and it roars and begins to stampede!

\"That's not good,\" calls @McCoyly, pointing in the distance. Each magic-fueled stomp is causing the volcanoes to erupt, and the glowing ground is turning to lava beneath the dinosaur's feet! Quickly, you must hold off the Trampling Triceratops until someone can reverse the spell!", - "questTriceratopsCompletion": "With quick thinking, you herd the creature towards the soothing Stoïkalm Steppes so that @*~Seraphina~* and @PainterProphet can reverse the lava spell without distraction. The calming aura of the Steppes takes effect, and the Triceratops curls up as the volcanoes go dormant once more. @PainterProphet passes you some eggs that were rescued from the lava. \"Without you, we wouldn't have been able to concentrate to stop the eruptions. Give these pets a good home.\"", - "questTriceratopsBoss": "Trampling Triceratops", + "questMoon3DropWeapon": "月鐮(雙手武器)", + "questSlothText": "昏昏欲睡的樹獺", + "questSlothNotes": "你和你的隊伍行走在昏睡雪林中,看著白色雪地中泛出的微弱綠光,你鬆了一口氣…直到一個巨大的懶惰怪突然出現在結霜的樹叢中!它背上的綠寶石閃爍著催眠的光芒。

“你們好,冒險者……為什麼你們不慢點走?你們已經走了太久了…為什麼不…停下來呢?只需要躺下,然後閉上眼睛休息…”

你感覺到你的眼皮變重了,你忽然意識到它是昏睡的懶惰怪!據@JaizakAripaik說,傳說它由於背上有散發出令人產生睡意的綠寶石得名.

你搖搖頭使自己清醒,對抗著倦意。就在這時,@awakebyjava 和@PainterProphet 開始吟唱咒語,使整個隊伍清醒過來。 “現在輪到我們了!”@Kiwibot 怒吼到。", + "questSlothCompletion": "你成功了!你擊敗了昏睡的懶惰怪,它的綠寶石掉落在地。 “謝謝你解除了我的詛咒”,懶惰怪如是說。 “我終於可以擺脫這些沉重的寶石好好的睡覺了。作為酬謝這些蛋給你,你也可以拿走那些綠寶石”。懶惰怪給你三個懶惰蛋然後轉身去尋找更溫暖的地方。", + "questSlothBoss": "昏昏欲睡的樹獺", + "questSlothDropSlothEgg": "樹獺(寵物蛋)", + "questSlothUnlockText": "解鎖——可在市集中購買樹獺蛋", + "questTriceratopsText": "那隻跺腳的三角龍", + "questTriceratopsNotes": "白雪皚皚的冷靜火山總是熙攘著旅者與觀光客。 @plumilla,一個旅行者,突然在人群中叫喊:“看啊!我使用魔法讓地面發光了,這樣我們就能在上面玩遊戲完成我們的戶外每日活動了!”果然,地面旋轉著熾熱的紅色圖案。甚至一些史前寵物也出來湊熱鬧了。

突然,喀嚓一聲——一隻好奇的三角龍正站在@plumilla 的魔杖上! !它被一股神奇的能量所吞噬,大地開始顫抖,並變得越來越熱。那隻三角龍的眼裡開始泛起紅光,它吼叫著開始蹬地。

“……這可不好,”@McCoyly 說,他指了指遠方。每一次魔法驅動的跺腳,都在引起火山的噴發,而發光的土地在恐龍足下也開始變成了熔岩!快,你必須控制住那隻在跺腳的三角龍,直到有人可以逆轉法術!", + "questTriceratopsCompletion": "快速的想了想,你把它驅趕向冷靜平原,讓@*~Seraphina~* 和 @PainterProphet 能不受干擾地逆轉那個熔岩法術。草原的平靜氣氛起了作用,三角龍繞圈跑的時候火山重新入睡。 @PainterProphet 給了你一些從熔岩中救出的蛋。 “沒有你,我們就不能專注地阻止火山爆發。給這些孩子一個好的家吧。”", + "questTriceratopsBoss": "跺腳的三角龍", "questTriceratopsDropTriceratopsEgg": "三角龍 (蛋)", - "questTriceratopsUnlockText": "Unlocks purchasable Triceratops eggs in the Market", - "questGroupStoikalmCalamity": "Stoïkalm Calamity", - "questStoikalmCalamity1Text": "Stoïkalm Calamity, Part 1: Earthen Enemies", - "questStoikalmCalamity1Notes": "A terse missive arrives from @Kiwibot, and the frost-crusted scroll chills your heart as well as your fingertips. \"Visiting Stoïkalm Steppes -- monsters bursting from earth -- send help!\" You gather your party and ride north, but as soon as you venture down from the mountains, the snow beneath your feet explodes and gruesomely grinning skulls surround you!

Suddenly, a spear sails past, burying itself in a skull that was burrowing through the snow in an attempt to catch you unawares. A tall woman in finely-crafted armor gallops into the fray on the back of a mastodon, her long braid swinging as she yanks the spear unceremoniously from the crushed beast. It's time to fight off these foes with the help of Lady Glaciate, the leader of the Mammoth Riders!", - "questStoikalmCalamity1Completion": "As you deliver a final blow to the skulls, they dissipate in a puff of magic. \"The dratted swarm may be gone,\" Lady Glaciate says, \"but we have bigger problems. Follow me.\" She tosses you a cloak to protect you from the chill air, and you ride off after her.", - "questStoikalmCalamity1Boss": "Earth Skull Swarm", - "questStoikalmCalamity1RageTitle": "Swarm Respawn", - "questStoikalmCalamity1RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Earth Skull Swarm will heal 30% of its remaining health!", - "questStoikalmCalamity1RageEffect": "`Earth Skull Swarm uses SWARM RESPAWN!`\n\nMore skulls break free from the ground, their teeth chattering in the cold!", + "questTriceratopsUnlockText": "解鎖——可在市集中購買三角龍蛋", + "questGroupStoikalmCalamity": "Stoïkalm災難", + "questStoikalmCalamity1Text": "Stoïkalm災難,第1部:地上的敵人", + "questStoikalmCalamity1Notes": "@Kiwibot 寄來了一封簡短的信件,看著結了霜的捲軸,你的心和你的指尖一樣寒冷。 “來Stoïkalm大草原——怪物爆發——救命啊!”你集合了隊伍向北騎行,但剛剛硬著頭皮從山上下衝來,腳下的雪就炸開了,可怖的骷髏群笑嘻嘻地圍住了你!

突然,一隻矛掠過,穿過令你驚慌無措的漫天白雪,刺中了一隻想要偷襲的骷髏。一名穿著精製護甲的高大女子騎著長毛象殺入戰場,她的長辮隨著揮舞長矛的動作活潑地甩動,只留下碎了一地的骷髏屍體。該反擊了,habitica居民們!跟上冰川夫人——猛獁騎士團的首領!", + "questStoikalmCalamity1Completion": "當你對骷髏進行最後一擊時,它們在一陣魔法中消散了。 “這群可惡的玩意應該是走了,”冰川夫人說,“但我們有更大的問題,跟我來。” 她扔給你一件足以抵禦寒風的斗篷,你騎上坐騎跟在她身後。", + "questStoikalmCalamity1Boss": "土骷髏群", + "questStoikalmCalamity1RageTitle": "骨群重生", + "questStoikalmCalamity1RageDescription": "骨群重生:如果你沒有完成每日任務,這個進度條的進度會前進。當它填滿的時候地表頭骨群會回复它剩餘生命值的30%!", + "questStoikalmCalamity1RageEffect": "`土骷髏群使用了骨群重生! `\n\n更多的骸骨從地底掙脫出來,他們的牙齒在寒冷中顫動!", "questStoikalmCalamity1DropSkeletonPotion": "骨骼孵化藥水", "questStoikalmCalamity1DropDesertPotion": "沙漠孵化藥水", - "questStoikalmCalamity1DropArmor": "Mammoth Rider Armor", - "questStoikalmCalamity2Text": "Stoïkalm Calamity, Part 2: Seek the Icicle Caverns", - "questStoikalmCalamity2Notes": "The stately hall of the Mammoth Riders is an austere masterpiece of architecture, but it is also entirely empty. There's no furniture, the weapons are missing, and even the columns were picked clean of their inlays.

\"Those skulls scoured the place,\" Lady Glaciate says, and there is a blizzard brewing in her tone. \"Humiliating. Not a soul is to mention this to the April Fool, or I will never hear the end of it.\"

\"How mysterious!\" says @Beffymaroo. \"But where did they--\"

\"The icicle drake caverns.\" Lady Glaciate gestures at shining coins spilled in the snow outside. \"Sloppy.\"

\"But aren't icicle drakes honorable creatures with their own treasure hoards?\" @Beffymaroo asks. \"Why would they possibly--\"

\"Mind control,\" says Lady Glaciate, utterly unfazed. \"Or something equally melodramatic and inconvenient.\" She begins to stride from the hall. \"Why are you just standing there?\"

Quickly, go follow the trail of Icicle Coins!", - "questStoikalmCalamity2Completion": "The Icicle Coins lead you straight to the buried entrance of a cleverly hidden cavern. Though the weather outside is calm and lovely, with the sunlight sparkling across the expanse of snow, there is a howling within like a fierce winter wind. Lady Glaciate grimaces and hands you a Mammoth Rider helm. \"Wear this,\" she says. \"You'll need it.\"", - "questStoikalmCalamity2CollectIcicleCoins": "Icicle Coins", - "questStoikalmCalamity2DropHeadgear": "Mammoth Rider Helm (Headgear)", - "questStoikalmCalamity3Text": "Stoïkalm Calamity, Part 3: Icicle Drake Quake", - "questStoikalmCalamity3Notes": "The twining tunnels of the icicle drake caverns shimmer with frost... and with untold riches. You gape, but Lady Glaciate strides past without a glance. \"Excessively flashy,\" she says. \"Obtained admirably, though, from respectable mercenary work and prudent banking investments. Look further.\" Squinting, you spot a towering pile of stolen items hidden in the shadows.

A sibilant voice hisses as you approach. \"My delicious hoard! You shall not steal it back from me!\" A sinuous body slides from the heap: the Icicle Drake Queen herself! You have just enough time to note the strange bracelets glittering on her wrists and the wildness glinting in her eyes before she lets out a howl that shakes the earth around you.", - "questStoikalmCalamity3Completion": "You subdue the Icicle Drake Queen, giving Lady Glaciate time to shatter the glowing bracelets. The Queen stiffens in apparent mortification, then quickly covers it with a haughty pose. \"Feel free to remove these extraneous items,\" she says. \"I'm afraid they simply don't fit our decor.\"

\"Also, you stole them,\" @Beffymaroo says. \"By summoning monsters from the earth.\"

The Icicle Drake Queen looks miffed. \"Take it up with that wretched bracelet saleswoman,\" she says. \"It's Tzina you want. I was essentially unaffiliated.\"

Lady Glaciate claps you on the arm. \"You did well today,\" she says, handing you a spear and a horn from the pile. \"Be proud.\"", - "questStoikalmCalamity3Boss": "Icicle Drake Queen", - "questStoikalmCalamity3DropBlueCottonCandy": "Blue Cotton Candy (Food)", - "questStoikalmCalamity3DropShield": "Mammoth Rider's Horn (Off-Hand Item)", - "questStoikalmCalamity3DropWeapon": "Mammoth Rider Spear (Weapon)", - "questGuineaPigText": "The Guinea Pig Gang", - "questGuineaPigNotes": "You're casually strolling through Habit City's famous Market when @Pandah waves you down. \"Hey, check these out!\" They're holding up a brown and beige egg you don't recognize.

Alexander the Merchant frowns at it. \"I don't remember putting that out. I wonder where it came--\" A small paw cuts him off.

\"Guinea all your gold, merchant!\" squeaks a tiny voice brimming with evil.

\"Oh no, the egg was a distraction!\" @mewrose exclaims. \"It's the gritty, greedy Guinea Pig Gang! They never do their Dailies, so they constantly steal gold to buy health potions.\"

\"Robbing the Market?\" says @emmavig. \"Not on our watch!\" Without further prompting, you leap to Alexander's aid.", - "questGuineaPigCompletion": "\"We submit!\" The Guinea Pig Gang Boss waves his paws at you, fluffy head hanging in shame. From underneath his hat falls a list, and @snazzyorange quickly swipes it for evidence. \"Wait a minute,\" you say. \"It's no wonder you've been getting hurt! You've got way too many Dailies. You don't need health potions -- you just need help organizing.\"

\"Really?\" squeaks the Guinea Pig Gang Boss. \"We've robbed so many people because of this! Please take our eggs as an apology for our crooked ways.\"", - "questGuineaPigBoss": "Guinea Pig Gang", + "questStoikalmCalamity1DropArmor": "猛獁騎士甲", + "questStoikalmCalamity2Text": "Stoïkalm災難,第2部:尋找冰柱洞穴", + "questStoikalmCalamity2Notes": "莊嚴的猛獁騎士廳是座一絲不苟的建築傑作,但它現在卻完全是空蕩蕩的。這裡沒有家具,看不到武器,甚至柱子裡鑲嵌的裝飾也不見了。

“那些骷髏強盜洗劫了這裡,”冰川夫人開口,語氣中彷彿醞釀著暴雪。 “太丟人了!誰都不許把這事告訴愚者,否則我不會對他善罷甘休的。”

“不可思議!”@Beffymaroo 也說著。 “不過它們在哪兒——”

“灞波兒奔的大洞穴裡。”冰川夫人指著廳外的雪地,一些閃爍著的硬幣還沒完全被雪掩埋。 “麻痺大意。”

“但灞波兒奔們不是很注重他們的名聲嗎?而且他們有自己的寶庫啊!”@Beffymaroo 還有疑問。 “他們怎麼可能——”

“精神控制,”冰川夫人打斷了他的話,“或者其它差不多的聳人聽聞的麻煩東西。”她開始大步離開大廳。 “杵在那愣著幹嘛?”

快,跟上那些冰凌硬幣!", + "questStoikalmCalamity2Completion": "冰凌硬幣直接把你帶到了一個被巧妙隱藏的地下洞穴入口。雖然外面的天氣平靜而可愛,陽光照在茫茫的雪地上,這裡卻仍有一股嚴冬的風在呼嘯。冰川夫人面露厭惡,並給了你一個巨大的騎士頭盔。 “戴上這個,”她說,“你需要它。”", + "questStoikalmCalamity2CollectIcicleCoins": "寒冰硬幣", + "questStoikalmCalamity2DropHeadgear": "猛獁騎士盔(頭部裝備)", + "questStoikalmCalamity3Text": "Stoïkalm災難,第3部:灞波兒奔地震", + "questStoikalmCalamity3Notes": "灞波兒奔洞裡,彎曲交錯的隧道閃爍著冰霜的微光……和無法描述的金銀珠寶的光芒。你目瞪口呆,但冰川夫人大步走過,吝予一瞥。 “過於浮華。”她說,“不管是從可敬的受僱打工還是從謹慎的銀行投資得到這些,都是令人欽佩的。但你再往前看看。”你瞇起眼睛,看到了陰暗角落裡堆成塔的贓物。

當你靠近時,一個嘶嘶的聲音響起。 “我美味的寶藏!你們不能把它從我這裡偷回去!”一個盤曲的身體從那堆財寶上滑下:是灞波兒奔女王本人!在她發出震動你周身地面的巨吼之前,你只來得及看到她手腕上閃爍的奇怪手鐲,和眼裡的野蠻凶光。", + "questStoikalmCalamity3Completion": "你制住了灞波兒奔女王,使冰川夫人來得及將那發光的手鐲打碎。那位女王在明顯的羞愧下不自在起來,然後馬上換上了一副傲慢的姿態。 “儘管把這些不相干的東西帶走吧,”她說。 “我想它們實在是不適合我們這裡的佈置。”

“餵,那是你偷來的,”@Beffymaroo 步步緊逼,“你從大地中召喚來了怪物。”< br>
灞波兒奔女王看起來惱羞成怒了:“那得算在賣給我這垃圾手鐲的女售貨員頭上,Tzina才是你要找的人。我跟她完全不是一伙的。 ”

冰川夫人拍了拍你的肩膀說:“幹得不錯。”她從那堆東西里拿了一把長矛和一隻角給你:“感到自豪吧。”", + "questStoikalmCalamity3Boss": "灞波兒奔女王", + "questStoikalmCalamity3DropBlueCottonCandy": "藍色棉花糖(食物)", + "questStoikalmCalamity3DropShield": "猛獁騎士角(副手裝備)", + "questStoikalmCalamity3DropWeapon": "猛獁騎士矛(武器裝備)", + "questGuineaPigText": "豚鼠團伙", + "questGuineaPigNotes": "當 @Pandah 揮手叫你的時候,你正在 Habit 城裡有名的市場中漫步 。 “嘿,看看這些東西!”他們舉起你從未見過的棕色和米色的蛋。

商人亞歷山大對此皺起了眉頭。 “我不記得我拿出了它們。我想知道這些是從哪裡——”一隻小爪子打斷了他的話。

“交出你所有的金幣,商人!”吱吱叫的充滿了邪惡的聲音響起。

“噢不,這些蛋裂開了!”@mewrose 驚呼道。 “這是頑固的,貪婪的豚鼠團伙!它們從來不做每日任務,所以他們時不時的竊取金幣來購買治療藥水。”

“搶劫市場?”@emmavig 問道。 “不要呆在我們的手錶上!”不遠處呼喊道,你急忙飛跑過去幫助亞歷山大。", + "questGuineaPigCompletion": "\"我們認輸啦!\"豚鼠頭目向你揮舞著爪子,毛茸茸的腦袋羞愧低垂。從豚鼠頭目的帽子掉落了一份清單,@snazzyorange迅速扒走做為證據。 \"等一下,\"你說。 \"難怪你已經受傷了!你的每日任務太多了。你不需要治療藥水──你只需要幫忙組織整理。\"

\"真的嗎?\"豚鼠頭目吱吱道。 \"我們就為了這個搶了那麽多人! 作為我們不當行徑的道歉,請拿些我們的蛋吧。\"", + "questGuineaPigBoss": "豚鼠團伙", "questGuineaPigDropGuineaPigEgg": "豚鼠 (蛋)", - "questGuineaPigUnlockText": "Unlocks purchasable Guinea Pig eggs in the Market", - "questPeacockText": "The Push-and-Pull Peacock", - "questPeacockNotes": "You trek through the Taskwoods, wondering which of the enticing new goals you should pick. As you go deeper into the forest, you realize that you're not alone in your indecision. \"I could learn a new language, or go to the gym...\" @Cecily Perez mutters. \"I could sleep more,\" muses @Lilith of Alfheim, \"or spend time with my friends...\" It looks like @PainterProphet, @Pfeffernusse, and @Draayder are equally paralyzed by the overwhelming options.

You realize that these ever-more-demanding feelings aren't really your own... you've stumbled straight into the trap of the pernicious Push-and-Pull Peacock! Before you can run, it leaps from the bushes. With each head pulling you in conflicting directions, you start to feel burnout overcoming you. You can't defeat both foes at once, so you only have one option -- concentrate on the nearest task to fight back!", - "questPeacockCompletion": "The Push-and-Pull Peacock is caught off guard by your sudden conviction. Defeated by your single-minded drive, its heads merge back into one, revealing the most beautiful creature you've ever seen. \"Thank you,\" the peacock says. \"I’ve spent so long pulling myself in different directions that I lost sight of what I truly wanted. Please accept these eggs as a token of my gratitude.\"", - "questPeacockBoss": "Push-and-Pull Peacock", - "questPeacockDropPeacockEgg": "Peacock (Egg)", - "questPeacockUnlockText": "Unlocks purchasable Peacock eggs in the Market", - "questButterflyText": "Bye, Bye, Butterfry", - "questButterflyNotes": "Your gardener friend @Megan sends you an invitation: “These warm days are the perfect time to visit Habitica’s butterfly garden in the Taskan countryside. Come see the butterflies migrate!” When you arrive, however, the garden is in shambles -- little more than scorched grass and dried-out weeds. It’s been so hot that the Habiticans haven’t come out to water the flowers, and the dark-red Dailies have turned it into a dry, sun-baked, fire-hazard. There's only one butterfly there, and there's something odd about it...

“Oh no! This is the perfect hatching ground for the Flaming Butterfry,” cries @Leephon.

“If we don’t catch it, it’ll destroy everything!” gasps @Eevachu.

Time to say bye, bye to Butterfry!", - "questButterflyCompletion": "After a blazing battle, the Flaming Butterfry is captured. “Great job catching the that would-be arsonist,” says @Megan with a sigh of relief. “Still, it’s hard to vilify even the vilest butterfly. We’d better free this Butterfry someplace safe…like the desert.”

One of the other gardeners, @Beffymaroo, comes up to you, singed but smiling. “Will you help raise these foundling chrysalises we found? Perhaps next year we’ll have a greener garden for them.”", - "questButterflyBoss": "Flaming Butterfry", - "questButterflyDropButterflyEgg": "Caterpillar (Egg)", - "questButterflyUnlockText": "Unlocks purchasable Caterpillar eggs in the Market", + "questGuineaPigUnlockText": "解鎖——可在市集中購買豚鼠蛋", + "questPeacockText": "拖拉孔雀", + "questPeacockNotes": "你正跋涉在任務森林中,思考著該選擇哪一個誘人的任務。在深入森林腹地後你意識到你並不是唯一一個在躊躇的人。 “我可以去學一門新語言,或者去健身房。”,@Cecily Perez咕噥著。 “我想多一些睡眠時間,但和朋友聚一聚也不錯”,@Lilith of Alfheim陷入了沉思。 @PainterProphet, @Pfeffernusse, 和@Draayder也處於選擇困難的境地之中。

你意識到這種越來越吃力的感覺並不是來自自己內心,讓你失足蹣跚的是拖拉孔雀的致命陷阱。你正要逃跑,它就從灌木叢裡魚躍而出,兩顆頭一起咬住你,要將你從中撕開。你開始感覺力不從心,無法同時招架兩顆頭的攻勢。你只有一個選擇,集中精力在最近的一個任務上,然後開始反擊!", + "questPeacockCompletion": "拖拉孔雀被你堅定的信念打了個措手不及,被你對當前任務的一心一意所擊敗。它的兩顆頭融合在一起,這是你見過的最美麗的生物。 “謝謝你”,孔雀說,“我一直把自己拖拽向不同的方向,以至於不再知道自己真正想要的是什麼。請接受這些蛋作為謝禮吧。”", + "questPeacockBoss": "拖拉孔雀", + "questPeacockDropPeacockEgg": "孔雀(寵物蛋)", + "questPeacockUnlockText": "解鎖——可在市集中購買孔雀蛋", + "questButterflyText": "再見啦,蝴蝶", + "questButterflyNotes": "你的園丁朋友@Megan 向你發來邀請:“現在這樣和煦的日子,是參觀位於任務汗國農村的Habitica蝴蝶公園的絕佳機會,來看看蝴蝶的大遷徙吧!”但當你到達後,公園內的景象卻已混亂一片——徒留了被燒焦的地坪和枯槁的雜草。環境如此炙熱以至於Habitica居民還沒來得及灑水救火,暗紅色的每日任務欄就已經把這裡變成了一個烈日灼人,火光四起的地獄!現在這兒只有一隻蝴蝶,而且看著有些不對勁。

“糟了!現在這種環境最適宜孵化火焰蝶了!”@Leephon驚呼道。

“如果我們不抓住它,那它將會摧毀一切!”@Eevachu倒吸了一口氣。

是時候說再見了,蝴蝶,再見了!", + "questButterflyCompletion": "經過熾烈的打鬥,火焰蝶被抓到了。 “幹得好,我們抓到了這個作案未遂的縱火犯,”@Megan 鬆了口氣說道,“但是它不該受到懲罰,即便它真的很可惡。我們最好將它放生到合適的地方·· ····比如沙漠!”

另一個園丁@Beffymaroo 跟了過來,雖然被輕微燒傷了,還是笑著說:“我們發現了一些被遺棄的蝶蛹,可以請你撫養牠們嗎?也許明年它們會見到更繁盛的花園。”", + "questButterflyBoss": "火蝴蝶", + "questButterflyDropButterflyEgg": "毛毛蟲(寵物蛋)", + "questButterflyUnlockText": "解鎖——可在市集中購買毛毛蟲蛋", "questGroupMayhemMistiflying": "混亂薄霧之蝶", - "questMayhemMistiflying1Text": "Mayhem in Mistiflying, Part 1: In Which Mistiflying Experiences a Dreadful Bother", - "questMayhemMistiflying1Notes": "Although local soothsayers predicted pleasant weather, the afternoon is extremely breezy, so you gratefully follow your friend @Kiwibot into their house to escape the blustery day.

Neither of you expects to find the April Fool lounging at the kitchen table.

“Oh, hello,” he says. “Fancy seeing you here. Please, let me offer you some of this delicious tea.”

“That’s…” @Kiwibot begins. “That’s MY—“

“Yes, yes, of course,” says the April Fool, helping himself to some cookies. “Just thought I’d pop indoors and get a nice reprieve from all the tornado-summoning skulls.” He takes a casual sip from his teacup. “Incidentally, the city of Mistiflying is under attack.”

Horrified, you and your friends race to the Stables and saddle your fastest winged mounts. As you soar towards the floating city, you see that a swarm of chattering, flying skulls are laying siege to the city… and several turn their attentions towards you!", - "questMayhemMistiflying1Completion": "The final skull drops from the sky, a shimmering set of rainbow robes clasped in its jaws, but the steady wind has not slackened. Something else is at play here. And where is that slacking April Fool? You pick up the robes, then swoop into the city.", - "questMayhemMistiflying1Boss": "Air Skull Swarm", - "questMayhemMistiflying1RageTitle": "Swarm Respawn", - "questMayhemMistiflying1RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Air Skull Swarm will heal 30% of its remaining health!", - "questMayhemMistiflying1RageEffect": "`Air Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls come whirling out of the clouds!", - "questMayhemMistiflying1DropSkeletonPotion": "Skeleton Hatching Potion", - "questMayhemMistiflying1DropWhitePotion": "White Hatching Potion", - "questMayhemMistiflying1DropArmor": "Roguish Rainbow Messenger Robes (Armor)", - "questMayhemMistiflying2Text": "Mayhem in Mistiflying, Part 2: In Which the Wind Worsens", - "questMayhemMistiflying2Notes": "Mistiflying dips and rocks as the magical bees keeping it afloat are buffeted by the gale. After a desperate search for the April Fool, you find him inside a cottage, blithely playing cards with an angry, trussed-up skull.

@Katy133 raises their voice over the whistling wind. “What’s causing this? We defeated the skulls, but it’s getting worse!”

“That is a pickle,” the April Fool agrees. “Please be a dear and don’t mention it to Lady Glaciate. She’s always threatening to call off our courtship on the grounds that I am ‘catastrophically irresponsible,’ and I fear that she might misread this situation.” He shuffles the deck. “Perhaps you might follow the Mistiflies? They’re immaterial, so the wind can’t blow them away, and they tend to swarm around threats.” He nods out the window, where several of the city’s patron creatures are fluttering towards the east. “Now let me concentrate — my opponent has quite the poker face.”", - "questMayhemMistiflying2Completion": "You follow the Mistiflies to the site of a tornado, too stormy for you to enter.

“This should help,” says a voice directly in your ear, and you nearly fall off of your mount. The April Fool is somehow sitting directly behind you in the saddle. “I hear these messenger hoods emit an aura that guards against inclement weather — very useful to avoid losing missives as you fly around. Perhaps give it a try?”", - "questMayhemMistiflying2CollectRedMistiflies": "Red Mistiflies", - "questMayhemMistiflying2CollectBlueMistiflies": "Blue Mistiflies", - "questMayhemMistiflying2CollectGreenMistiflies": "Green Mistiflies", - "questMayhemMistiflying2DropHeadgear": "Roguish Rainbow Messenger Hood (Headgear)", - "questMayhemMistiflying3Text": "Mayhem in Mistiflying, Part 3: In Which a Mailman is Extremely Rude", - "questMayhemMistiflying3Notes": "The Mistiflies are whirling so thickly through the tornado that it’s hard to see. Squinting, you spot a many-winged silhouette floating at the center of the tremendous storm.

“Oh, dear,” the April Fool sighs, nearly drowned out by the howl of the weather. “Looks like Winny went and got himself possessed. Very relatable problem, that. Could happen to anybody.”

“The Wind-Worker!” @Beffymaroo hollers at you. “He’s Mistiflying’s most talented messenger-mage, since he’s so skilled with weather magic. Normally he’s a very polite mailman!”

As if to counteract this statement, the Wind-Worker lets out a scream of fury, and even with your magic robes, the storm nearly rips you from your mount.

“That gaudy mask is new,” the April Fool remarks. “Perhaps you should relieve him of it?”

It’s a good idea… but the enraged mage isn’t going to give it up without a fight.", - "questMayhemMistiflying3Completion": "Just as you think you can’t withstand the wind any longer, you manage to snatch the mask from the Wind-Worker’s face. Instantly, the tornado is sucked away, leaving only balmy breezes and sunshine. The Wind-Worker looks around in bemusement. “Where did she go?”

“Who?” your friend @khdarkwolf asks.

“That sweet woman who offered to deliver a package for me. Tzina.” As he takes in the wind-swept city below him, his expression darkens. “Then again, maybe she wasn’t so sweet…”

The April Fool pats him on the back, then hands you two shimmering envelopes. “Here. Why don’t you let this distressed fellow rest, and take charge of the mail for a bit? I hear the magic in those envelopes will make them worth your while.”", - "questMayhemMistiflying3Boss": "The Wind-Worker", - "questMayhemMistiflying3DropPinkCottonCandy": "Pink Cotton Candy (Food)", - "questMayhemMistiflying3DropShield": "Roguish Rainbow Message (Off-Hand Item)", - "questMayhemMistiflying3DropWeapon": "Roguish Rainbow Message (Main-Hand Item)", - "featheredFriendsText": "Feathered Friends Quest Bundle", - "featheredFriendsNotes": "Contains 'Help! Harpy!,' 'The Night-Owl,' and 'The Birds of Preycrastination.' Available until May 31.", - "questNudibranchText": "Infestation of the NowDo Nudibranchs", - "questNudibranchNotes": "You finally get around to checking your To-dos on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colors make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy...

The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranches have been stinging you all over! You need to take a break!”

Shocked, you see that your skin is as bright red as your To-Do list was. \"Being productive is one thing,\" @beffymaroo says, \"but you've also got to take care of yourself. Hurry, let's get rid of them!\"", - "questNudibranchCompletion": "You see the last of the NowDo Nudibranches sliding off of a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.", - "questNudibranchBoss": "NowDo Nudibranch", - "questNudibranchDropNudibranchEgg": "Nudibranch (Egg)", - "questNudibranchUnlockText": "Unlocks purchasable Nudibranch eggs in the Market", - "splashyPalsText": "Splashy Pals Quest Bundle", - "splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until July 31.", - "questHippoText": "What a Hippo-Crite", - "questHippoNotes": "You and @awesomekitty collapse into the shade of a palm tree, exhausted. The sun beats down over the Sloensteadi Savannah, scorching the ground below. It’s been a productive day so far, conquering your Dailies, and this oasis looks like a nice place to take a break and refresh. Stooping near the water to get a drink, you stumble back in shock as a massive hippopotamus rises. “Resting so soon? Don’t be so lazy, get back to work.” You try and protest that you’ve been working hard and need a break, but the hippo isn’t having any of it.

@khdarkwolf whispers to you, “Notice how it’s lounging around all day but has the nerve to call you lazy? It’s the Hippo-Crite!”

Your friend @jumorales nods. “Let’s show it what hard work looks like!”", - "questHippoCompletion": "The hippo bows in surrender. “I underestimated you. It seems you weren’t being lazy. My apologies. Truth be told, I may have been projecting a bit. Perhaps I should get some work done myself. Here, take these eggs as a sign of my gratitude.” Grabbing them, you settle down by the water, ready to relax at last.", - "questHippoBoss": "The Hippo-Crite", - "questHippoDropHippoEgg": "Hippo (Egg)", - "questHippoUnlockText": "Unlocks purchasable Hippo eggs in the Market", - "farmFriendsText": "Farm Friends Quest Bundle", - "farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until September 30.", - "witchyFamiliarsText": "Witchy Familiars Quest Bundle", - "witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'. Available until October 31.", - "questGroupLostMasterclasser": "Mystery of the Masterclassers", - "questUnlockLostMasterclasser": "To unlock this quest, complete the final quests of these quest chains: 'Dilatory Distress', 'Mayhem in Mistiflying', 'Stoïkalm Calamity', and 'Terror in the Taskwoods'.", - "questLostMasterclasser1Text": "The Mystery of the Masterclassers, Part 1: Read Between the Lines", - "questLostMasterclasser1Notes": "You’re unexpectedly summoned by @beffymaroo and @Lemoness to Habit Hall, where you’re astonished to find all four of Habitica’s Masterclassers awaiting you in the wan light of dawn. Even the Joyful Reaper looks somber.

“Oho, you’re here,” says the April Fool. “Now, we would not rouse you from your rest without a truly dire—”

“Help us investigate the recent bout of possessions,” interrupts Lady Glaciate. “All the victims blamed someone named Tzina.”

The April Fool is clearly affronted by the summary. “What about my speech?” he hisses to her. “With the fog and thunderstorm effects?”

“We’re in a hurry,” she mutters back. “And my mammoths are still soggy from your incessant practicing.”

“I’m afraid that the esteemed Master of Warriors is correct,” says King Manta. “Time is of the essence. Will you aid us?”

When you nod, he waves his hands to open a portal, revealing an underwater room. “Swim down with me to Dilatory, and we will scour my library for any references that might give us a clue.” At your look of confusion, he adds, “Don’t worry, the paper was enchanted long before Dilatory sank. None of the books are the slightest bit damp!” He winks.“Unlike Lady Glaciate’s mammoths.”

“I heard that, Manta.”

As you dive into the water after the Master of Mages, your legs magically fuse into fins. Though your body is buoyant, your heart sinks when you see the thousands of bookshelves. Better start reading…", - "questLostMasterclasser1Completion": "After hours of poring through volumes, you still haven’t found any useful information.

“It seems impossible that there isn’t even the tiniest reference to anything relevant,” says head librarian @Tuqjoi, and their assistant @stefalupagus nods in frustration.

King Manta’s eyes narrow. “Not impossible…” he says. “Intentional.” For a moment, the water glows around his hands, and several of the books shudder. “Something is obscuring information,” he says. “Not just a static spell, but something with a will of its own. Something… alive.” He swims up from the table. “The Joyful Reaper needs to hear about this. Let’s pack a meal for the road.”", - "questLostMasterclasser1CollectAncientTomes": "Ancient Tomes", - "questLostMasterclasser1CollectForbiddenTomes": "Forbidden Tomes", - "questLostMasterclasser1CollectHiddenTomes": "Hidden Tomes", - "questLostMasterclasser2Text": "The Mystery of the Masterclassers, Part 2: Assembling the a'Voidant", - "questLostMasterclasser2Notes": "The Joyful Reaper drums her bony fingers on some of the books that you brought. “Oh, dear,” the Master of Healers says. “There is a malevolent life essence at work. I might have guessed, considering the attacks by reanimated skulls during each incident.” Her assistant @tricksy.fox brings in a chest, and you are startled to see the contents that @beffymaroo unloads: the very same objects once used by this mysterious Tzina to possess people.

“I’m going to use resonant healing magic to try to make this creature manifest,” the Joyful Reaper says, reminding you that the skeleton is a somewhat unconventional Healer. “You’ll need to read the revealed information quickly, in case it breaks loose.”

As she concentrates, a twisting mist begins to siphon from the books and twine around the objects. Quickly, you flip through the pages, trying to read the new lines of text that are writhing into view. You catch only a few snippets: “Sands of the Timewastes” — “the Great Disaster” —“split into four”— “permanently corrupted”— before a single name catches your eye: Zinnya.

Abruptly, the pages wrench free from your fingers and shred themselves as a howling creature explodes into being, coalescing around the possessed objects.

“It’s an a’Voidant!” the Joyful Reaper shouts, throwing up a protection spell. “They’re ancient creatures of confusion and obscurity. If this Tzina can control one, she must have a frightening command over life magic. Quickly, attack it before it escapes back into the books!”

", - "questLostMasterclasser2Completion": "The a’Voidant succumbs at last, and you share the snippets that you read.

“None of those references sound familiar, even for someone as old as I,” the Joyful Reaper says. “Except… the Timewastes are a distant desert at the most hostile edge of Habitica. Portals often fail nearby, but swift mounts could get you there in no time. Lady Glaciate will be glad to assist.” Her voice grows amused. “Which means that the enamored Master of Rogues will undoubtedly tag along.” She hands you the glimmering mask. “Perhaps you should try to track the lingering magic in these items to its source. I’ll go harvest some sustenance for your journey.”", - "questLostMasterclasser2Boss": "The a'Voidant", - "questLostMasterclasser2DropEyewear": "Aether Mask (Eyewear)", - "questLostMasterclasser3Text": "The Mystery of the Masterclassers, Part 3: City in the Sands", - "questLostMasterclasser3Notes": "As night unfurls over the scorching sands of the Timewastes, your guides @AnnDeLune, @Kiwibot, and @Katy133 lead you forward. Some bleached pillars poke from the shadowed dunes, and as you approach them, a strange skittering sound echoes across the seemingly-abandoned expanse.

“Invisible creatures!” says the April Fool, clearly covetous. “Oho! Just imagine the possibilities. This must be the work of a truly stealthy Rogue.”

“A Rogue who could be watching us,” says Lady Glaciate, dismounting and raising her spear. “If there’s a head-on attack, try not to irritate our opponent. I don’t want a repeat of the volcano incident.”

He beams at her. “But it was one of your most resplendent rescues.”

To your surprise, Lady Glaciate turns very pink at the compliment. She hastily stomps away to examine the ruins.

“Looks like the wreck of an ancient city,” says @AnnDeLune. “I wonder what…”

Before she can finish her sentence, a portal roars open in the sky. Wasn’t that magic supposed to be nearly impossible here? The hoofbeats of the invisible animals thunder as they flee in panic, and you steady yourself against the onslaught of shrieking skulls that flood the skies.", - "questLostMasterclasser3Completion": "The April Fool surprises the final skull with a spray of sand, and it blunders backwards into Lady Glaciate, who smashes it expertly. As you catch your breath and look up, you see a single flash of someone’s silhouette moving on the other side of the closing portal. Thinking quickly, you snatch up the amulet from the chest of previously-possessed items, and sure enough, it’s drawn towards the unseen person. Ignoring the shouts of alarm from Lady Glaciate and the April Fool, you leap through the portal just as it snaps shut, plummeting into an inky swath of nothingness.", - "questLostMasterclasser3Boss": "Void Skull Swarm", - "questLostMasterclasser3RageTitle": "Swarm Respawn", - "questLostMasterclasser3RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Void Skull Swarm will heal 30% of its remaining health!", - "questLostMasterclasser3RageEffect": "`Void Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls scream down from the heavens, bolstering the swarm!", - "questLostMasterclasser3DropBodyAccessory": "Aether Amulet (Body Accessory)", - "questLostMasterclasser3DropBasePotion": "Base Hatching Potion", - "questLostMasterclasser3DropGoldenPotion": "Golden Hatching Potion", - "questLostMasterclasser3DropPinkPotion": "Cotton Candy Pink Hatching Potion", - "questLostMasterclasser3DropShadePotion": "Shade Hatching Potion", - "questLostMasterclasser3DropZombiePotion": "Zombie Hatching Potion", - "questLostMasterclasser4Text": "The Mystery of the Masterclassers, Part 4: The Lost Masterclasser", - "questLostMasterclasser4Notes": "You surface from the portal, but you’re still suspended in a strange, shifting netherworld. “That was bold,” says a cold voice. “I have to admit, I hadn’t planned for a direct confrontation yet.” A woman rises from the churning whirlpool of darkness. “Welcome to the Realm of Void.”

You try to fight back your rising nausea. “Are you Zinnya?” you ask.

“That old name for a young idealist,” she says, mouth twisting, and the world writhes beneath you. “No. If anything, you should call me the Anti’zinnya now, given all that I have done and undone.”

Suddenly, the portal reopens behind you, and as the four Masterclassers burst out, bolting towards you, Anti’zinnya’s eyes flash with hatred. “I see that my pathetic replacements have managed to follow you.”

You stare. “Replacements?”

“As the Master Aethermancer, I was the first Masterclasser — the only Masterclasser. These four are a mockery, each possessing only a fragment of what I once had! I commanded every spell and learned every skill. I shaped your very world to my whim — until the traitorous aether itself collapsed under the weight of my talents and my perfectly reasonable expectations. I have been trapped for millennia in this resulting void, recuperating. Imagine my disgust when I learned how my legacy had been corrupted.” She lets out a low, echoing laugh. “My plan was to destroy their domains before destroying them, but I suppose the order is irrelevant.” With a burst of uncanny strength, she charges forward, and the Realm of Void explodes into chaos.", - "questLostMasterclasser4Completion": "Under the onslaught of your final attack, the Lost Masterclasser screams in frustration, her body flickering into translucence. The thrashing void stills around her as she slumps forward, and for a moment, she seems to change, becoming younger, calmer, with an expression of peace upon her face… but then everything melts away with scarcely a whisper, and you’re kneeling once more in the desert sand.

“It seems that we have much to learn about our own history,” King Manta says, staring at the broken ruins. “After the Master Aethermancer grew overwhelmed and lost control of her abilities, the outpouring of void must have leached the life from the entire land. Everything probably became deserts like this.”

“No wonder the ancients who founded Habitica stressed a balance of productivity and wellness,” the Joyful Reaper murmurs. “Rebuilding their world would have been a daunting task requiring considerable hard work, but they would have wanted to prevent such a catastrophe from happening again.”

“Oho, look at those formerly possessed items!” says the April Fool. Sure enough, all of them shimmer with a pale, glimmering translucence from the final burst of aether released when you laid Anti’zinnya’s spirit to rest. “What a dazzling effect. I must take notes.”

“The concentrated remnants of aether in this area probably caused these animals to go invisible, too,” says Lady Glaciate, scratching a patch of emptiness behind the ears. You feel an unseen fluffy head nudge your hand, and suspect that you’ll have to do some explaining at the Stables back home. As you look at the ruins one last time, you spot all that remains of the first Masterclasser: her shimmering cloak. Lifting it onto your shoulders, you head back to Habit City, pondering everything that you have learned.

", + "questMayhemMistiflying1Text": "Misti飛城的混亂,第1部:Misti飛城遇到可怕的麻煩", + "questMayhemMistiflying1Notes": "雖然本地的預言家預計天氣將會不錯,但這天下午卻異常風大,所以你跟隨著你的朋友@Kiwibot 去了她的家中,來躲避這場大風。

但沒有意料到的是,愚者正懶洋洋地躺在餐桌上呢。

“哦,你好,”他說,“你們怎麼來了,那麼,給我來點好茶吧。”

“但……”@Kiwibot說道,“那是我的——”

“那是,那是當然”,愚者一邊說道,一邊把曲奇餅乾往嘴邊送,“你只要想著,我突然出現在你家,只是為了緩解下這陣骷髏旋風對我的驚嚇。”他隨意了嘬了口茶,又說,“順便提一句,Misti飛城正在遭受攻擊。”

你和你的朋友有些驚慌失措,於是飛奔到馬厩,騎上了那匹速度最快的飛馬,奔向那座流動的城市。正如你所見,一大群在空中旋轉著的、發出噠噠聲響的骷髏,正包圍著整個城市……同時,一些骷髏也將注意力轉向了你們!", + "questMayhemMistiflying1Completion": "最後一顆骷髏從天上墜落下來,它銜著一件閃閃發光的彩虹長袍。但是,風依然在刮,不見鬆懈。還有什麼東西在作怪。那懶散的愚者又在哪呢?你收起長袍,沖向城市。", + "questMayhemMistiflying1Boss": "空中骷髏群", + "questMayhemMistiflying1RageTitle": "骨群重生", + "questMayhemMistiflying1RageDescription": "骨群重生:如果你沒有完成每日任務,這個進度條就會前進。當它填滿的時候旋風骸骨群會回复它剩餘生命值的30%!", + "questMayhemMistiflying1RageEffect": "空中骷髏群使用了骨群重生!\n\n受到勝利的激勵,更多的骷髏迴旋於天空!", + "questMayhemMistiflying1DropSkeletonPotion": "骷髏孵化藥水", + "questMayhemMistiflying1DropWhitePotion": "白色孵化藥水", + "questMayhemMistiflying1DropArmor": "俏皮彩虹信使長袍(護甲)", + "questMayhemMistiflying2Text": "Misti飛城的混亂,第2部:疾風更盛", + "questMayhemMistiflying2Notes": "Misti飛城起伏翻滾著,因為令這座城漂浮著的魔法蜜蜂們被暴風瘋狂地拍打。在一通不顧一切地尋找之後,你發現愚者在一間小屋裡,漫不經心地和一隻被五花大綁的、氣憤的骷髏頭打牌。

@Katy133 高聲蓋過狂風的呼嘯大喊著問:“怎麼回事?我們打敗了骷髏,但是更糟糕了!”

“那可麻煩了,”愚者贊同道,“拜託你們當個好人,別跟冰川夫人提這事。她總是威脅要不喜歡我了,因為我是個'災難性地不負責任'的傢伙,現在這狀況我怕她誤會。 ”他一邊洗牌,一邊回答:“也許你們可以跟著Misti蝴蝶?它們是無實體的,所以狂風吹不走它們,而且它們趨於一窩蜂湧向威脅。”他向窗外點點頭,這座城的一些守護神在那邊正飛向東方。 “現在我要認真打牌了——我的對手可頂著張撲克臉在玩牌吶。”", + "questMayhemMistiflying2Completion": "你跟著Misti蝴蝶進來到了風暴眼,可是風太大了,你無法衝進去。

“這個有用,”一個聲音在你耳中響起,你差點從坐騎上摔下來。愚者不知怎麼的坐在你背後的一截馬鞍上。 “我聽說信使兜帽會放射光環,在惡劣天氣下提供保護——非常有用,能避免飛來飛去的時候弄丟信件。來試試?”", + "questMayhemMistiflying2CollectRedMistiflies": "紅色Misti蝴蝶", + "questMayhemMistiflying2CollectBlueMistiflies": "藍色Misti蝴蝶", + "questMayhemMistiflying2CollectGreenMistiflies": "綠色Misti蝴蝶", + "questMayhemMistiflying2DropHeadgear": "俏皮彩虹信使兜帽(頭盔)", + "questMayhemMistiflying3Text": "Misti飛城的混亂,第3部:粗魯的郵遞員", + "questMayhemMistiflying3Notes": "Misti蝴蝶群在龍捲風密密麻麻地飛速旋轉,難以看清。你瞇著眼睛,發現一個多翼的影子漂浮在這巨大風暴的中心。

“噢,天哪,”愚者嘆息著,聲音幾乎被暴風的呼嘯淹沒了。 “看來是小風在那,並且陷入了瘋狂。這是個很像回事的問題,可能發生在任何人身上。”

“乘風者!”@Beffymaroo 朝你喊道, “他是Misti飛城最有天賦的信使法師,他對天氣魔法非常熟練。平常他是個很有禮貌的郵遞員!”

好像為了反對這個評價,乘風者發出了一聲憤怒的尖叫,即使你穿著魔法袍,風暴也幾乎把你從坐騎上刮下來。 ”

“那個花哨的面具是新的,”愚者說道,“也許你應該把它摘下來? ”

這是個好主意……但是不來一場戰鬥的話,這位憤怒的法師不會取下它的。", + "questMayhemMistiflying3Completion": "就在你認為你再也經受不住風的時候,你設法從乘風者的臉上摘下了面具。頓時,龍捲風被吸走,只留下溫和的微風和陽光。乘風者困惑地四處張望。 “她去哪兒了?”

“誰?”你的朋友@khdarkwolf 問道。

“那個可愛的女人Tzina,她主動說要幫我送一個包裹。”當他看到下方被風橫掃過的城市時,他的表情變得黯然。 “那麼,也許她不那麼可愛……”

愚者拍了拍他的背,然後遞給你兩個閃閃發光的信封。 “嘿。你為什麼不讓這個苦惱的傢伙休息一下,你來負責送一點郵件呢?我聽說這些信封裡的魔法會值得你這麼做的。”", + "questMayhemMistiflying3Boss": "乘風者", + "questMayhemMistiflying3DropPinkCottonCandy": "粉色棉花糖(食物)", + "questMayhemMistiflying3DropShield": "俏皮彩虹信使的信件(副手裝備)", + "questMayhemMistiflying3DropWeapon": "俏皮彩虹信使的信件(主要裝備)", + "featheredFriendsText": "“生有羽翼”副本集", + "featheredFriendsNotes": "包括‘救命!哈耳庇厄! ’,‘暗夜貓頭鷹’,‘掠食明天之鳥’,5月31日之前可購買。", + "questNudibranchText": "NowDo海兔的侵襲", + "questNudibranchNotes": "在Habitica度過懶散一天的你,總算是說服自己檢查一下你的待辦事項。緊挨著你那深紅的任務的,是一群明亮鮮豔的藍色海兔。你簡直入了迷!那蔚藍的顏色使你最嚇人的任務看起來也像最習以為常一樣簡單。你在一種狂熱的恍惚狀態中開始了工作,不眠不休地解決掉一個又一個任務……

直到@LilithofAlfheim 朝你潑了一桶冷水,你才醒了過來。 “NowDo海兔把你渾身上下都蜇傷了!你得休息一下!”

你驚訝地發現,自己的皮膚紅得和待辦列表一樣。 “高產是一方面,”@beffymaroo 說,“但是你也得照顧自己的身體,趕緊的,弄走這些海兔!”", + "questNudibranchCompletion": "你看見最後一隻NowDo海兔隨著@amadshade 的沖洗從一樁已完成的任務上滑走。它們留下了一個布袋,你打開之後發現裡面有一些金幣和看起來是蛋的小橢球。", + "questNudibranchBoss": "NowDo海兔", + "questNudibranchDropNudibranchEgg": "海兔(寵物蛋)", + "questNudibranchUnlockText": "解鎖——可在市集中購買海兔蛋", + "splashyPalsText": "“水花飛濺”副本集", + "splashyPalsNotes": "包含“拖拉比賽”,“引導海龜”和“鯨之哀嚎”。 7月31日前可購買。", + "questHippoText": "好一個偽君子", + "questHippoNotes": "你和@awesomekitty 筋疲力盡地倒在棕櫚樹的樹蔭下。陽光在堅定稀樹草原上灑下,炙烤著下方的地面。度過了高產的一天,征服了每日任務,這片綠洲看起來是個休息和放鬆的好地方。你在水邊彎下腰來喝些水時,一隻河馬突然爬了起來,嚇得你跌跌撞撞地退了幾步。 “這麼快就休息了?別這麼懶,快去工作。”你試著抗議說你一直在工作,現在需要休息,但河馬聽不進去。

@khdarkwolf 對你耳語道:“它可一整天都在閒逛,哪來的勇氣說你懶?可真是個偽君子!”

你的朋友@jumorales 點了點頭。 “咱們就讓他看看啥叫努力工作!”", + "questHippoCompletion": "河馬俯首投降:“是我小瞧你了。似乎你沒有在偷懶,我道歉。說句實話,我一直有在計劃當中。也許我應該自己做些工作。來,拿著這些蛋,這是我的謝禮。”接過這些蛋,你在水邊安頓下來,終於能好好休息了。", + "questHippoBoss": "河馬怪", + "questHippoDropHippoEgg": "河馬(寵物蛋)", + "questHippoUnlockText": "解鎖——可在市集中購買河馬蛋", + "farmFriendsText": "“農場好友”副本集", + "farmFriendsNotes": "包含“變異奶牛”、“駕馭噩夢”、“雷霆公羊”。 8月31日前可購買。", + "witchyFamiliarsText": "“巫師親信”副本集", + "witchyFamiliarsNotes": "包括“鼠王”、“寒霜蜘蛛”、“蛙澤”,10月31日前可購買。", + "questGroupLostMasterclasser": "大師鑑別者的秘密", + "questUnlockLostMasterclasser": "解鎖這個副本,需完成以下副本線的最終副本:“拖拉災難”,“Misti飛城的混亂”,“Stoïkalm災難”,“恐怖的任務森林”。", + "questLostMasterclasser1Text": "大師鑑別者的秘密,第1部:字裡行間", + "questLostMasterclasser1Notes": "@beffymaroo 和@Lemoness 突然把你叫到習慣大廳,你驚訝地發現Habitica的4個大師鑑別者全員居然在暗淡的晨光中等著你。即使是“快樂收割者”也掛著一副嚴峻的表情。

“哦豁,你來了,”愚者說。 “現在,要不是真的發生了這麼可怕的事情,我們也不會打擾你休息的——”

“幫我們調查一下這陣子惡靈附身的事件吧,”冰川夫人打斷了他,“所有的受害者都說是個叫Tzina的人幹的。”

很明顯,這麼簡單粗暴的總結冒犯到了愚者:“切,我還想演講一通呢。”< br>
“咱現在趕時間,”冰川夫人回懟道,“而且我的猛獁像還被你沒完沒了的小實驗澆了個濕透。”

“恐怕那位戰士大師說的是對的,”魟魚國王說道,“時間寶貴。你能幫助我們嗎?”

你點了點頭,他揮揮手便開啟了一個傳送陣,一間水下的屋子展露於眼前。 “和我一起向著拖拉城游過去,我們來找遍我的圖書館看看能不能從文獻裡得到點線索。”看到你一臉懵,他解釋說:“別擔心,早在拖拉城下沉之前,書卷就附過魔了。那些書一點都不會被水給弄糊。”他擠了擠眼:“不像冰川夫人的猛獁象。”

“魟魚,我聽見你在背後說我壞話了。”

你跟在法師大師身後潛下水底,雙腿神奇地變成了魚鰭。雖然你的身軀靈活輕快,但看到成千上萬的書架之後,你的心不由得沉了下去。趁早開工為妙……", + "questLostMasterclasser1Completion": "連續查閱了幾小時書籍後,你仍然沒有找到任何有用的信息。

“這簡直是不可能完成的任務,我們連一點相關的內容都找不到,”圖書管理員@Tuqjoi說道。 Ta的助手@stefalupagus挫敗地點了點頭。

魟魚國王瞇了瞇眼。 “不可能……”他說。 “有意為之。”他手上的水發起微光,幾本書抖動起來。 “有什麼東西在隱藏信息,”他說。 “不是靜態的咒語,而是某種有自己意願的東西。某種……活著的東西。”他從桌子上游起來。 “快樂收割者必須知道這件事。準備好路上的飯吧。”", + "questLostMasterclasser1CollectAncientTomes": "古籍", + "questLostMasterclasser1CollectForbiddenTomes": "禁書", + "questLostMasterclasser1CollectHiddenTomes": "藏書", + "questLostMasterclasser2Text": "大師鑑別者的秘密,第2部:召喚逃避者", + "questLostMasterclasser2Notes": "快樂收割者用她細瘦的手指敲著你借來的書。 “哦,親愛的,”這位醫者大師說。 “考慮到這些騷亂中都有蘇生的骷髏在進行攻擊,我猜是某種邪惡的生命本質作祟。”她的助手@tricksy.fox 搬來一個箱子,你看到@beffymaroo 拿出的東西後吃了一驚:竟然和神秘的Tzina用來對人下惡咒的東西一模一樣。

“我要放個共鳴治愈術讓這傢伙顯形,”快樂收割者說,你才想起他“骨子”裡是個天馬行空的醫者。 “你得把一會兒顯現的信息快速讀取出來,以免它們散佚掉。”

當她集中註意力,開始從書中抽取蜿蜒的迷霧縈繞在法器周圍。很快,你翻閱著書頁,試著閱讀一行行新寫入眼前的文字。你只跟上了幾個片段:“浪費時間之沙”——“巨大災難”——“分裂成4部分”——“永遠被侵蝕”——然後你的視線被一個名字吸引了:Zinnya。

突然,書頁扭動著從你的指尖掙脫而且撕碎了它們自己,形成了一個膨脹著、咆哮著的生物,聚集在這些被附靈的物品上。

“這是逃避者!”快樂收割者大喊道,甩出一道守護咒。 “它們是混亂無明的古老生物。如果Tzina能控制它,她肯定對生命魔法有嚇人的掌控力。快點,在它鑽進書本逃掉之前打敗它!”", + "questLostMasterclasser2Completion": "逃避者最終潰散了,你把讀到的片段告訴大家。

“就算是我這麼老的人,對你提到的事情也沒有一件聽起來耳熟,”快樂收割者說,“除了……浪費時間是一個地處Habitica環境最惡劣的邊緣地帶的遙遠沙漠。傳送陣在那附近總是失效,但迅捷的坐騎能讓你飛快到達。冰川夫人會樂意幫忙的。”她調皮地上揚了語調:“也就是說那位被迷倒了的盜賊大師毫無疑問也會跟去的。”她遞給你一副閃光的面具。 “也許你該循著這些物品上殘留的魔法痕跡去追溯源頭。我去為你的旅途收割點食糧。”", + "questLostMasterclasser2Boss": "逃避者", + "questLostMasterclasser2DropEyewear": "以太面具(眼鏡)", + "questLostMasterclasser3Text": "大師鑑別者的秘密,第3部:黃沙掩埋的城市", + "questLostMasterclasser3Notes": "當夜幕降臨於灼熱的浪費時間沙漠上時,你的嚮導@AnnDeLune、@Kiwibot 和@Katy133 引你前行。幾座褪色的石柱佇立在陰影中的沙丘上,隨著你接近它們,一陣奇怪的滑行聲迴響在這片似乎廢棄多時的廣場上。

“隱形生物!”愚者毫不掩飾他虎視眈眈的樣子,“哦嚯!想像一下這種可能性:這肯定是個鬼鬼祟祟的盜賊所為。”

“一個有可能盯著咱們的盜賊,”冰川夫人跳下坐騎,揚起長矛,“如果要正面打一架的話,盡量別激怒敵人。我可不想重蹈火山那時候的覆轍。”

愚者沖她粲然一笑,說:“但那是你最輝煌的營救行動之一。”

聽到這句恭維,冰川夫人頰上竟然泛起些許緋紅,你為此小小的驚訝了一下。她匆忙噔噔地跑去檢查這片遺跡。

“看上去像古城的殘骸,”@AnnDeLune 說,“我想知道……”

她還來不及說完話,一個傳送陣咆哮著出現在天空中。這片地方不是說魔法在這不靈的嗎?隱形動物蹄聲雷動,四散奔逃,你卻在鋪天蓋地的嘶叫著的骷髏潮湧面前穩住了身形。", + "questLostMasterclasser3Completion": "愚者用噴沙大法給最後一個骷髏來了個驚喜,那骷髏朝後一躲正撞上冰川夫人的長矛,立刻被攪得粉碎。你喘了口氣,仰望天空,看到某人的輪廓在徐徐關閉的傳送陣彼端一閃而過。心念電轉,你從那一箱被惡靈附過的東西里奪過護身符,並且非常確定,它指引向那個看不清的傢伙。無視了冰川夫人和愚者的大喊和警告,你蹭在傳送陣關閉前跳了過去,墜入漆黑無物的狹間。", + "questLostMasterclasser3Boss": "虛空骷髏群", + "questLostMasterclasser3RageTitle": "骨群重生", + "questLostMasterclasser3RageDescription": "骨群重生:你沒完成日常所受的傷害將會增加怒氣值。當怒氣槽攢滿時,虛空骷髏群會回复它們此刻生命值的30%!", + "questLostMasterclasser3RageEffect": "`虛空骷髏群使用了骨群重生! `\n\n受到勝利的鼓舞,更多骷髏尖叫著從天而降,加入了戰鬥的洪流!", + "questLostMasterclasser3DropBodyAccessory": "以太護符(身體配飾)", + "questLostMasterclasser3DropBasePotion": "普通孵化藥水", + "questLostMasterclasser3DropGoldenPotion": "金色孵化藥水", + "questLostMasterclasser3DropPinkPotion": "粉色棉花糖孵化藥水", + "questLostMasterclasser3DropShadePotion": "暗影孵化藥水", + "questLostMasterclasser3DropZombiePotion": "殭屍孵化藥水", + "questLostMasterclasser4Text": "大師鑑別者的秘密,第4部:迷失的大師鑑別者", + "questLostMasterclasser4Notes": "你浮出傳送陣的表面,但你仍然懸浮在一個奇怪的、變幻莫測的幽冥空間中。 “好大的膽子,”一個冷酷的聲音響起,“我得承認,我的計劃裡此前沒有當面對峙這項。”一個女人從翻騰的漩渦中升起。 “歡迎來到虛空領域。”

你拼命忍住一陣反胃嘔吐的感覺。 “你就是Zinnya?”你問她。

“一個年輕的理想主義者的曾用名,”她答道,撇了撇嘴,世界在你們下方痛苦地扭曲著,“我並不是。如果非得扯上點關係的話,你應該叫現在的我Zinnya的反對者,Anti'zinnya(Tzina),鑑於我的所作所為和還沒來及做的一切。”

傳送陣突然在你身後重新開啟,並且把4位大師鑑別者在你面前甩了出來。 Anti’zinnya的雙眼閃著仇恨的光芒。 “我看到我那些可憐的替代品們竟然跟著你來了。”

你盯著她問道:“替代品?”

“作為大師級的以太術士,我曾是第一位大師鑑別者——也是唯一的大師鑑別者。這4個人充其量算拙劣的模仿者,他們每個人只有我曾擁有的力量的一點零碎!我能夠調遣一切咒語,也學過任何一種技能。你們因我心血來潮的創世造物而存在,直到力量背叛了我,以太因無法承受我的才華,以及我完美而合理的願景之重而崩潰。我在此間被困千年,製造虛空,逐漸康復。想像一下當我知道我遺落世間的才學被玷污時那噁心的心情吧。”她瘋狂地大笑,笑聲在這詭異的空間中迴響。 “我的計劃是在毀滅他們之前先毀滅他們的領地,但現在我覺得順序也無關緊要了。”迸發出不可思議之力的同時,她衝上前來,整個虛空領域爆裂成一片混亂。", + "questLostMasterclasser4Completion": "在你的猛攻之下,迷失的大師鑑別者發出了充滿挫敗感的哀嚎,她的身形搖曳閃爍著變成了半透明狀。像鞭子一樣猛烈抽打著一切的虛空仍然環繞在跌落的她周圍,然而剎那之後,她的存在發生了變化。她變成了更年輕、冷靜、臉上浮現出平靜表情的樣子……然後,一切都悄無聲息地消散了,你又一次跪倒在沙漠的沙地上。

“看來咱們對自己的歷史有很多要去了解的啊。”魟魚國王凝視著殘破的廢墟,“在以太術士大師被自己的能力壓垮而失去控制之後,傾盆而出的空虛肯定讓整片大陸生靈塗炭了。可能一切都變成了像這樣的沙漠。”

“難怪建立Habitica的祖先們一再強調要保持生產力和健康的平衡,”快樂收割者低聲說,“想想重建世界那麼重的任務足以使人望而卻步了,但他們也曾想避免這種天災人禍再次發生。”

“哦嚯,看看這些惡靈附過的東西!”愚者說。顯然,在你讓Anti’zinnya的亡靈得以安息時,這些裝備沾最後一陣以太爆發的光,變成了影影綽綽的半透明質,閃著蒼白的光芒。 “真是令人眼花繚亂的效果,我得把這些記錄下來。”

“也許此地的動物能隱形也是因為殘存的以太凝聚在這裡。”冰川夫人把手伸向耳後,抓了一把空氣。你感覺到有個看不見的毛茸茸的小腦袋在蹭你的手,這下等回頭到家,你得跟馬厩裡的其他坐騎好好解釋一通了。你最後再看了一眼這片廢墟,發現史上第一的那位大師鑑別者最終唯一留下來的東西:她那件明滅閃爍的斗篷。你將它披在肩上,回頭向Habit城走去,回味著你剛剛經歷的一切。

", "questLostMasterclasser4Boss": "Anti'zinnya", - "questLostMasterclasser4RageTitle": "Siphoning Void", - "questLostMasterclasser4RageDescription": "Siphoning Void: This bar fills when you don't complete your Dailies. When it is full, Anti'zinnya will remove the party's Mana!", - "questLostMasterclasser4RageEffect": "`Anti'zinnya uses SIPHONING VOID!` In a twisted inversion of the Ethereal Surge spell, you feel your magic drain away into the darkness!", - "questLostMasterclasser4DropBackAccessory": "Aether Cloak (Back Accessory)", - "questLostMasterclasser4DropWeapon": "Aether Crystals (Two-Handed Weapon)", - "questLostMasterclasser4DropMount": "Invisible Aether Mount", - "questYarnText": "A Tangled Yarn", - "questYarnNotes": "It’s such a pleasant day that you decide to take a walk through the Taskan Countryside. As you pass by its famous yarn shop, a piercing scream startles the birds into flight and scatters the butterflies into hiding. You run towards the source and see @Arcosine running up the path towards you. Behind him, a horrifying creature consisting of yarn, pins, and knitting needles is clicking and clacking ever closer.

The shopkeepers race after him, and @stefalupagus grabs your arm, out of breath. \"Looks like all of his unfinished projects\" gasp gasp \"have transformed the yarn from our Yarn Shop\" gasp gasp \"into a tangled mass of Yarnghetti!\"

\"Sometimes, life gets in the way and a project is abandoned, becoming ever more tangled and confused,\" says @khdarkwolf. \"The confusion can even spread to other projects, until there are so many half-finished works running around that no one gets anything done!\"

It’s time to make a choice: complete your stalled projects… or decide to unravel them for good. Either way, you'll have to increase your productivity quickly before the Dread Yarnghetti spreads confusion and discord to the rest of Habitica!", - "questYarnCompletion": "With a feeble swipe of a pin-riddled appendage and a weak roar, the Dread Yarnghetti finally unravels into a pile of yarn balls.

\"Take care of this yarn,\" shopkeeper @JinjooHat says, handing them to you. \"If you feed them and care for them properly, they'll grow into new and exciting projects that just might make your heart take flight…\"", - "questYarnBoss": "The Dread Yarnghetti", - "questYarnDropYarnEgg": "Yarn (Egg)", - "questYarnUnlockText": "Unlocks purchasable Yarn eggs in the Market", - "winterQuestsText": "Winter Quest Bundle", - "winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Available until December 31.", - "questPterodactylText": "The Pterror-dactyl", - "questPterodactylNotes": "You're taking a stroll along the peaceful Stoïkalm Cliffs when an evil screech rends the air. You turn to find a hideous creature flying towards you and are overcome by a powerful terror. As you turn to flee, @Lilith of Alfheim grabs you. \"Don't panic! It's just a Pterror-dactyl.\"

@Procyon P nods. \"They nest nearby, but they're attracted to the scent of negative Habits and undone Dailies.\"

\"Don't worry,\" @Katy133 says. \"We just need to be extra productive to defeat it!\" You are filled with a renewed sense of purpose and turn to face your foe.", - "questPterodactylCompletion": "With one last screech the Pterror-dactyl plummets over the side of the cliff. You run forward to watch it soar away over the distant steppes. \"Phew, I'm glad that's over,\" you say. \"Me too,\" replies @GeraldThePixel. \"But look! It's left some eggs behind for us.\" @Edge passes you three eggs, and you vow to raise them in tranquility, surrounded by positive Habits and blue Dailies.", - "questPterodactylBoss": "Pterror-dactyl", - "questPterodactylDropPterodactylEgg": "Pterodactyl (Egg)", - "questPterodactylUnlockText": "Unlocks purchasable Pterodactyl eggs in the Market", - "questBadgerText": "Stop Badgering Me!", - "questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?

“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”

As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “It’s the Badgering Bother!” it’s back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!

“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwood’s harvest this year?", - "questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries’ “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.", + "questLostMasterclasser4RageTitle": "虛空抽取", + "questLostMasterclasser4RageDescription": "虛空抽取:當你沒完成每日任務時,Boss的怒氣值會增加。當怒氣槽滿時,Anti'zinnya將會抽空全隊的魔法值!", + "questLostMasterclasser4RageEffect": "`Anti'zinnya 使用了 虛 空 抽 取! `在一陣澎湃靈泉的反向咒術中,你感到魔法被無盡的黑暗抽乾了!", + "questLostMasterclasser4DropBackAccessory": "以太斗篷(背部挂件)", + "questLostMasterclasser4DropWeapon": "以太水晶(雙手武器)", + "questLostMasterclasser4DropMount": "隱形以太坐騎", + "questYarnText": "一條纏繞的毛線", + "questYarnNotes": "今天天氣真好,適合去任務汗國的郊外散步。你路過一家有名的毛線商店時,一聲慘叫刺破長空,驚飛了鳥兒,嚇跑了蝴蝶。你向聲源跑去,看見@Arcosine 迎面向你跑來。一團巨大的毛線,上面插著大大小小的毛衣針、大頭針,叮咣作響地攆在他屁股後面窮追不捨。

毛線店的店主也追了出來,@stefalupagus 一把抓住了你的胳膊,上氣不接下氣地說:“看看這一堆沒完成的計劃吧,呼… …哈……它們讓毛線商店裡的線團變形了,嘶……呼……成了這麼一大團纏繞的毛線!”

“有時候,生活當中會出現一些困難,計劃執行不下去了,結果事情就變得很讓人糾結和迷茫,”@khdarkwolf 說,“這種迷茫甚至可能會影響其他方面的工作,最後就成了疲於應付一大堆半途而廢的工作,沒有一件是好好做完的!”

必須當機立斷:完成你陷入停滯的計劃……或者重新梳理一下,重定計劃。不管你選哪個,你都得趕緊提高效率了,趕在這一大團纏繞的毛線把迷茫和矛盾心態傳播到Habitica的其他地方之前解決掉它!", + "questYarnCompletion": "大線團無力地用針線包掄了最後一下,發出虛弱的嘶吼,終於被拆成一大堆小毛線球。

“照顧好這些毛線,”毛線店店主@JinjooHat 把它們遞給了你,“如果你好好餵養照顧它們,它們會長成新意滿滿、激動人心的項目,能讓你平步青雲,一飛沖天……”", + "questYarnBoss": "可怕的大團毛線", + "questYarnDropYarnEgg": "毛線(寵物蛋)", + "questYarnUnlockText": "解鎖——可在市集中購買毛線蛋", + "winterQuestsText": "“冬天”副本集", + "winterQuestsNotes": "包括“聖誕陷阱獵手”、“找熊仔”和“冰霜禽類”。 1月31日前可購買。注意,聖誕陷阱獵手和找熊崽獎勵可堆疊的副本成就,但會獎勵的稀有寵物和坐騎只能添加到你的馬厩一次。", + "questPterodactylText": "翼龍", + "questPterodactylNotes": "你在Stoïkalm懸崖邊散步時,一聲邪惡的尖嘯劃破長空。你轉過頭來,看到一隻醜陋的生物向著你從天而降,你立刻為巨大的恐懼所支配。當你扭頭想逃跑時,@Lilith of Alfheim 一把抓住了你,說道:“別害怕!那隻是一隻翼龍。”

@Procyon P 點頭贊同道:“它們的巢在附近,翼龍會被壞習慣和完不成的每日任務的氣味吸引過來。”

“不用擔心,”@Katy133 說,“我們只要提高效率多幹活,就能戰勝它!”你重新充滿了決心,擺出了接敵的架勢。", + "questPterodactylCompletion": "伴隨著翼龍的最後一聲慘叫,它從懸崖邊上跌了下去。你跑到懸崖邊向下看去,看見翼龍展翅重新飛上天空,掠過廣袤的大草原。你鬆了口氣:“嚯,可算是完事了。”@GeraldThePixel 回了句話:“我也這麼覺得。”@Edge 遞給你3個蛋:“看!它給咱們留下了幾個蛋。 ”在好習慣和藍色的每日任務的圍繞下,你發誓要把它們平安養大。", + "questPterodactylBoss": "翼龍", + "questPterodactylDropPterodactylEgg": "翼龍(寵物蛋)", + "questPterodactylUnlockText": "解鎖——可在市集中購買翼龍蛋", + "questBadgerText": "快別纏著我了!", + "questBadgerNotes": "啊,寒冬的任務森林。柔軟的雪落下,樹枝上閃著霜華,豐收精靈……還沒有沉睡?

“他們怎麼還醒著啊?”@LilithofAlfheim 發出了一聲哀嚎,“如果他們不冬眠的話,來年播種季節的時候會無精打采的!”

你和@Willow the Witty 趕緊開展了調查,一個毛茸茸的腦袋從地裡探出頭來。在你尖叫出聲之前,@Willow the Witty 提醒你:“是糾纏不休的獾!”它搶走了精靈們“冬眠”這項待辦,丟出來了一大列討厭的任務,然後溜回它的洞穴!

@plumilla 說:“這些精靈一直被這樣打擾的話,難怪他們沒辦法休息。”你能攆走這只獾,守護任務森林的來年豐收嗎?", + "questBadgerCompletion": "你終於趕走了糾纏不休的獾,它匆忙逃回了自己的洞穴。在隧道的盡頭,你發現了一堆精靈們的“冬眠”待辦。這個巢穴看上去已經廢棄了,除了3個看起來可以孵的寵物蛋。", "questBadgerBoss": "糾纏不休的獾", "questBadgerDropBadgerEgg": "獾(寵物蛋)", "questBadgerUnlockText": "解鎖獾蛋購買功能", "questDysheartenerText": "失戀怪", - "questDysheartenerNotes": "The sun is rising on Valentine’s Day when a shocking crash splinters the air. A blaze of sickly pink light lances through all the buildings, and bricks crumble as a deep crack rips through Habit City’s main street. An unearthly shrieking rises through the air, shattering windows as a hulking form slithers forth from the gaping earth.

Mandibles snap and a carapace glitters; legs upon legs unfurl in the air. The crowd begins to scream as the insectoid creature rears up, revealing itself to be none other than that cruelest of creatures: the fearsome Dysheartener itself. It howls in anticipation and lunges forward, hungering to gnaw on the hopes of hard-working Habiticans. With each rasping scrape of its spiny forelegs, you feel a vise of despair tightening in your chest.

“Take heart, everyone!” Lemoness shouts. “It probably thinks that we’re easy targets because so many of us have daunting New Year’s Resolutions, but it’s about to discover that Habiticans know how to stick to their goals!”

AnnDeLune raises her staff. “Let’s tackle our tasks and take this monster down!”", - "questDysheartenerCompletion": "The Dysheartener is DEFEATED!

Together, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”

Glowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigor and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.

The crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.

Our newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.

Beffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”

Crooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", - "questDysheartenerCompletionChat": "`The Dysheartener is DEFEATED!`\n\nTogether, everyone in Habitica strikes a final blow to their tasks, and the Dysheartener rears back, shrieking with dismay. “What's wrong, Dysheartener?” AnnDeLune calls, eyes sparkling. “Feeling discouraged?”\n\nGlowing pink fractures crack across the Dysheartener's carapace, and it shatters in a puff of pink smoke. As a renewed sense of vigor and determination sweeps across the land, a flurry of delightful sweets rains down upon everyone.\n\nThe crowd cheers wildly, hugging each other as their pets happily chew on the belated Valentine's treats. Suddenly, a joyful chorus of song cascades through the air, and gleaming silhouettes soar across the sky.\n\nOur newly-invigorated optimism has attracted a flock of Hopeful Hippogriffs! The graceful creatures alight upon the ground, ruffling their feathers with interest and prancing about. “It looks like we've made some new friends to help keep our spirits high, even when our tasks are daunting,” Lemoness says.\n\nBeffymaroo already has her arms full with feathered fluffballs. “Maybe they'll help us rebuild the damaged areas of Habitica!”\n\nCrooning and singing, the Hippogriffs lead the way as all the Habitcans work together to restore our beloved home.", + "questDysheartenerNotes": "在情人節的早上,大家突然聽到震驚的摔聲。遍及所有建築物,都看到了令人作嘔的粉紅光。當深深的裂縫穿過Habit市的大街,磚塊崩潰了。一個怪異的尖叫升起,把窗口粉碎。從地上的裂口,一個巨大的生物向前走。

下頜骨咬合,甲殼閃閃發光;腿在空中鬆開。人群開始大叫時,這個類蟲生物起立,展現自己就是最殘酷的生物:令人恐懼的失戀怪。它期待中的叫,向前衝,想吃勤勞的Habitica居民的希望。

“大家振作起來!” Lemoness叫。 “因為很多人有艱鉅的新年決議,它可能以為我們是降服的獵物。但是,它會發現Habitica居民知道如何堅持的目標!”

AnnDeLune抬她的員工。 “我們開始做完我們的任務,殺死這個魔鬼吧!”", + "questDysheartenerCompletion": "失戀怪打敗了!

大家一起對任務產生了最後的打擊,讓失戀怪後退和沮喪地尖叫。 “怎麼了,失戀怪?” AnnDeLune叫,她的眼睛閃閃發光。 “覺得灰心嗎?”

發亮的粉紅色裂縫橫穿失戀怪的甲殼,把魔鬼在粉紅色的煙霧中破碎。當新的活力和決心席捲整個土地時,一連串甜蜜降落在每個人身上。

人群瘋狂地歡呼時,他們的寵物開心地享受遲來的情人節禮物。突然間,歡樂的歌聲在空中飛舞和亮晶晶輪廓在天空中飛。

我們剛充滿活力的樂觀情緒吸引了一群希望天馬!優雅的生物落在地上,饒有興致地揮舞著羽毛,躍躍欲試。 “我們好像交了許多新朋友,它們幫助大家保持精神振奮,甚至於在任務難的時候。”Lemoness解釋。

Beffymaroo的手臂已經滿是蓬鬆的寵物。 “它們可能會幫我們重建Habitica被破損的地方!”

唱歌的希望天馬引領著所有Habitica居民共同努力恢復心愛的家園。", + "questDysheartenerCompletionChat": "失戀怪打敗了!\n\n大家一起對任務產生了最後的打擊,讓失戀怪後退和沮喪地尖叫。 “怎麼了,失戀怪?” AnnDeLune叫,她的眼睛閃閃發光。 “覺得灰心嗎?”\n\n發亮的粉紅色裂縫橫穿失戀怪的甲殼,把魔鬼在粉紅色的煙霧中破碎。當新的活力和決心席捲整個土地時,一連串甜蜜降落在每個人身上。\n\n人群瘋狂地歡呼時,他們的寵物開心地享受遲來的情人節禮物。突然間,歡樂的歌聲在空中飛舞和亮晶晶輪廓在天空中飛。\n\n我們剛充滿活力的樂觀情緒吸引了一群希望天馬!優雅的生物落在地上,饒有興致地揮舞著羽毛,躍躍欲試。 “我們好像交了許多新朋友,它們幫助大家保持精神振奮,甚至於在任務難的時候。”Lemoness解釋。\n\nBeffymaroo的手臂已經滿是蓬鬆的寵物。 “它們可能會幫我們重建Habitica被破損的地方!”\n\n唱歌的希望天馬引領著所有Habitica居民共同努力恢復心愛的家園。", "questDysheartenerBossRageTitle": "粉碎破心術", - "questDysheartenerBossRageDescription": "The Rage Attack gauge fills when Habiticans miss their Dailies. If it fills up, the Dysheartener will unleash its Shattering Heartbreak attack on one of Habitica's shopkeepers, so be sure to do your tasks!", - "questDysheartenerBossRageSeasonal": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nOh, no! After feasting on our undone Dailies, the Dysheartener has gained the strength to unleash its Shattering Heartbreak attack. With a shrill shriek, it brings its spiny forelegs down upon the pavilion that houses the Seasonal Shop! The concussive blast of magic shreds the wood, and the Seasonal Sorceress is overcome by sorrow at the sight.\n\nQuickly, let's keep doing our Dailies so that the beast won't strike again!", - "seasonalShopRageStrikeHeader": "The Seasonal Shop was Attacked!", - "seasonalShopRageStrikeLead": "Leslie is Heartbroken!", - "seasonalShopRageStrikeRecap": "On February 21, our beloved Leslie the Seasonal Sorceress was devastated when the Dysheartener shattered the Seasonal Shop. Quickly, tackle your tasks to defeat the monster and help rebuild!", - "marketRageStrikeHeader": "The Market was Attacked!", - "marketRageStrikeLead": "Alex is Heartbroken!", - "marketRageStrikeRecap": "On February 28, our marvelous Alex the Merchant was horrified when the Dysheartener shattered the Market. Quickly, tackle your tasks to defeat the monster and help rebuild!", - "questsRageStrikeHeader": "The Quest Shop was Attacked!", - "questsRageStrikeLead": "Ian is Heartbroken!", - "questsRageStrikeRecap": "On March 6, our wonderful Ian the Quest Guide was deeply shaken when the Dysheartener shattered the ground around the Quest Shop. Quickly, tackle your tasks to defeat the monster and help rebuild!", - "questDysheartenerBossRageMarket": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nHelp! After feasting on our incomplete Dailies, the Dysheartener lets out another Shattering Heartbreak attack, smashing the walls and floor of the Market! As stone rains down, Alex the Merchant weeps at his crushed merchandise, stricken by the destruction.\n\nWe can't let this happen again! Be sure to do all our your Dailies to prevent the Dysheartener from using its final strike.", - "questDysheartenerBossRageQuests": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nAaaah! We've left our Dailies undone again, and the Dysheartener has mustered the energy for one final blow against our beloved shopkeepers. The countryside around Ian the Quest Master is ripped apart by its Shattering Heartbreak attack, and Ian is struck to the core by the horrific vision. We're so close to defeating this monster.... Hurry! Don't stop now!", - "questDysheartenerDropHippogriffPet": "Hopeful Hippogriff (Pet)", - "questDysheartenerDropHippogriffMount": "Hopeful Hippogriff (Mount)", - "dysheartenerArtCredit": "Artwork by @AnnDeLune", - "hugabugText": "Hug a Bug Quest Bundle", - "hugabugNotes": "Contains 'The CRITICAL BUG,' 'The Snail of Drudgery Sludge,' and 'Bye, Bye, Butterfry.' Available until March 31.", - "questSquirrelText": "The Sneaky Squirrel", - "questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?

When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”

@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”

Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defense of a prodigious pile of seeds.

“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!", - "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", - "questSquirrelBoss": "Sneaky Squirrel", - "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", - "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", - "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.", - "aquaticAmigosText": "Aquatic Amigos Quest Bundle", - "aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until June 30.", - "questSeaSerpentText": "Danger in the Depths: Sea Serpent Strike!", - "questSeaSerpentNotes": "Your streaks have you feeling lucky—it’s the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but you’ve barely submerged when an impact rocks the sub, sending its occupants tumbling. “What’s going on?” @AriesFaries shouts.

You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, it’s coming ‘round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. ‘Maybe if we work together and complete them,’ you think, ‘we can drive this monster away!’", - "questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.", - "questSeaSerpentBoss": "The Mighty Sea Serpent", - "questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)", - "questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market", - "questKangarooText": "Kangaroo Catastrophe", - "questKangarooNotes": "Maybe you should have finished that last task… you know, the one you keep avoiding, even though it always comes back around? But @Mewrose and @LilithofAlfheim invited you and @stefalupagus to see a rare kangaroo troop hopping through the Sloensteadi Savannah; how could you say no?! As the troop comes into view, something hits you on the back of the head with a mighty whack!

Shaking the stars from your vision, you pick up the responsible object--a dark red boomerang, with the very task you continually push back etched into its surface. A quick glance around confirms the rest of your party met a similar fate. One larger kangaroo looks at you with a smug grin, like she’s daring you to face her and that dreaded task once and for all!", - "questKangarooCompletion": "“NOW!” You signal your party to throw the boomerangs back at the kangaroo. The beast hops further away with each hit until she flees, leaving nothing more than a dark red cloud of dust, a few eggs, and some gold coins.

@Mewrose walks forward to where the kangaroo once stood. “Hey, where did the boomerangs go?”

“They probably dissolved into dust, making that dark red cloud, when we finished our respective tasks,” @stefalupagus speculates.

@LilithofAlfheim squints at the horizon. “Is that another kangaroo troop heading our way?”

You all break into a run back to Habit City. Better to face your difficult tasks than take another lump to the back of the head!", - "questKangarooBoss": "Catastrophic Kangaroo", + "questDysheartenerBossRageDescription": "當Habitica居民錯過他們的每日任務時,憤怒攻擊的測量儀數據會增加。如果它被填滿,失戀怪將隨機對一個Habitica店主釋放它的心碎攻擊技能,所以一定要完成你的任務!", + "questDysheartenerBossRageSeasonal": "`沮喪鬼用心碎攻擊! `\n\n沮喪鬼吃完我們的未完成的每日任務後,聚集力量用心碎攻擊。它尖叫,把它的多刺的前腿放到了季度商店的涼亭上!震蕩的魔力粉碎了木頭,季節魔女被眼前的悲傷所克服。\n\n快點!我們做完我們的每日任務吧,避免魔鬼又攻擊!", + "seasonalShopRageStrikeHeader": "季度商店被攻擊了!", + "seasonalShopRageStrikeLead": "Leslie 心碎了!", + "seasonalShopRageStrikeRecap": "2月21日,我們深愛著的季度商店店主 Leslie 因為失戀怪對市場的攻擊而奄奄一息。快,完成你的任務,打敗怪物,幫助災區重建!", + "marketRageStrikeHeader": "市場被攻擊了!", + "marketRageStrikeLead": "Alex 心碎了!", + "marketRageStrikeRecap": "2月28日,我們的神秘商人Alex因為失戀怪對市場的攻擊而陷入了深深的恐懼。快,完成你的任務,打敗怪物,幫助重建!", + "questsRageStrikeHeader": "副本商店被攻擊了!", + "questsRageStrikeLead": "Ian 心碎了!", + "questsRageStrikeRecap": "3月6日,我們的探索副本嚮導Ian因為失戀怪對副本商店的攻擊而受了深深的驚嚇。快,完成你的任務,打敗怪物,幫助重建!", + "questDysheartenerBossRageMarket": "`沮喪鬼用心碎攻擊! `\n\n啊!沮喪鬼吃了我們又沒有做完每日任務後,又用了心碎攻擊,把市場的牆壁和地板弄碎!石頭下落時,商人Alex看著自己被粉碎的商品哭泣。\n\n我們不能讓這種情況再次發生!做完你的每日任務,避免沮喪鬼使用其最後的打擊。", + "questDysheartenerBossRageQuests": "`沮喪鬼用心碎攻擊! `\n\n啊!我們又沒有做完每日任務,給沮喪鬼聚集力量給我們心愛店主最後一擊。 Ian周圍的農村被震驚心碎攻擊撕開,讓Ian驚嚇過度。我們幾乎擊敗這個怪物.... 快點!現在不要停止!", + "questDysheartenerDropHippogriffPet": "希望天馬(寵物)", + "questDysheartenerDropHippogriffMount": "希望天馬(坐騎)", + "dysheartenerArtCredit": "插畫作者@AnnDeLune", + "hugabugText": "“蟲蟲抱抱”副本集", + "hugabugNotes": "包括“嚴重的BUG”、“苦差事淤泥蝸牛”和“再見啦,蝴蝶”。 3月31日前可購買。", + "questSquirrelText": "狡猾的松鼠", + "questSquirrelNotes": "你迷迷糊糊地起床,發現自己睡過頭了!鬧鐘怎麼沒響? ……鬧鐘的鈴鐺怎麼被松果給卡住了?

你要做早飯,卻發現烤麵包機裡塞滿了松果。你去馬厩準備把坐騎牽出來,卻發現@Shtut 在那開不開鎖了。他往鎖孔裡一瞄:“堵鎖孔的那玩意兒是個松果吧?”

@randomdaisy 喊了起來:“哦,NO,我早知道我的寵物松鼠溜出來了,但是我沒想到它們這麼能惹禍!你能幫我趕在它們闖更多禍之前,把它們找回來嗎?”

循著這些淘氣的到處亂塞的橡果的踪跡,你抓住了這些任性的松鼠,由@Cantras 把它們安全送回家。但就在你覺得事情快搞定了時候,一個松果砸在了你的頭盔上!你抬頭看見一隻巨大的松鼠怪獸,為了守衛一大堆被它認為是自己的種子而張牙舞爪。

“我的媽呀,”@randomdaisy 輕聲說,“它一直都是保護財產的一把好手。咱們得小心行事!”你們全隊集結完畢,準備對抗這場麻煩!", + "questSquirrelCompletion": "你們用比較溫柔的方式,建議松鼠來一把交易,念了些安撫性的咒術,成功把松鼠從囤積的東西上面哄走了,將它領回馬厩,那邊@Shtut 剛好把鎖裡的堅果搞出來。他們在旁邊的工作台上放了幾個橡子。 “這幾個是松鼠蛋!也許你能養幾隻不會老是玩自己吃的的松鼠。”", + "questSquirrelBoss": "狡猾的松鼠", + "questSquirrelDropSquirrelEgg": "松鼠(寵物蛋)", + "questSquirrelUnlockText": "解鎖——可在市集中購買松鼠蛋", + "cuddleBuddiesText": "“擁抱朋友”副本集", + "cuddleBuddiesNotes": "包括“殺人兔”、“那惡毒的雪貂”和“豚鼠團伙”。 5月31日前可購買。", + "aquaticAmigosText": "“水生生物”副本集", + "aquaticAmigosNotes": "包括“魔法蠑螈”、“未完成海妖”和“章魚克蘇魯的呼喚”。 6月30日前可購買。", + "questSeaSerpentText": "深度危险:海蛇冲撞!", + "questSeaSerpentNotes": "你很庆幸自己已经完成了这么多次连击——是时候来一次旅行,去围观海马赛跑了。你在勤勉码头搭上了一班潜艇,前往拖拉城。但刚准备下潜,潜艇就被什么东西猛地撞了一下,里面的乘客们跌了个东倒西歪。@AriesFaries 叫了一声:“怎么回事啊?”

你向身旁的舷窗看去,震惊地看见一堵墙一样的巨大身躯覆盖着闪亮的鳞片,从窗外经过。“海蛇!”船长@Witticaster 的声音从对讲机里传来,“坐稳扶好,它又过来了!”你紧张地抓住了座椅的扶手,还没来得及完成的任务像走马灯一般闪过你的脑海。“也许如果我们一起努力完成它们,”你想到,“我们就能把这条海蛇引走!”", + "questSeaSerpentCompletion": "你全力地用完成的任務糊了海蛇一臉,它終於撤退了,消失在深淵當中。你終於到達了拖拉城,不由得鬆了口氣,然後就注意到@*~Seraphina~ 拿著3個半透明的蛋走了過來。 “這是你應得的,”她說,“你懂得怎麼處理海蛇!”你接過寵物蛋,對天發誓你要保持完成任務的決心,保證不會再陷入這種境地了。", + "questSeaSerpentBoss": "強大的海蛇", + "questSeaSerpentDropSeaSerpentEgg": "海蛇(寵物蛋)", + "questSeaSerpentUnlockText": "解鎖——可在市集中購買海蛇蛋", + "questKangarooText": "袋鼠大災變", + "questKangarooNotes": "好像你真的得做剩到最後的那個任務了……你也很清楚自己一直在逃避的那個任務,即使它總會在你面前晃。但是@Mewrose、@LilithofAlfheim 請你和@stefalupagus 去看個稀罕,一隊袋鼠跳過堅定稀樹草原,這誰頂得住啊? !當一隊袋鼠出現在你眼前時,你感到後腦勺上狠狠挨了一下!

甩甩腦袋從一陣眼冒金星當中緩過來,你撿起了襲擊你的凶器——一隻深紅色的迴力鏢,上面刻著你一直拖著的那個任務。你環顧四周,發現全隊都中了一樣的招數。一隻大袋鼠沖你得意地咧嘴笑著,彷彿她在嘲諷你敢不敢一鼓作氣地面對她,還有你一直害怕的那個任務!", + "questKangarooCompletion": "災變袋鼠“就是現在!”你示意全隊朝著袋鼠甩出迴力鏢。袋鼠每挨一下就後跳一步,直到她徹底逃跑,絕塵而去。只留下幾個蛋和一些金幣。

@Mewrose 朝著袋鼠逃跑的方向走去,問道:“嘿,那些迴力鏢哪去了?”

@stefalupagus 推測說:“它們可能隨著咱們完成各自的任務而化作煙塵了,難怪我看袋鼠逃跑的時候那一溜煙的煙好像有點紅。”

@LilithofAlfheim 瞇著眼睛,看向遠方的地平線:“那是……又一隊袋鼠衝著咱們過來了嗎?”

你們立刻頭也不回地往Habit市區跑。還是在挨當頭棒喝之前就乾完困難的任務比較好!", + "questKangarooBoss": "災變袋鼠", "questKangarooDropKangarooEgg": "袋鼠(寵物蛋)", - "questKangarooUnlockText": "Unlocks purchasable Kangaroo eggs in the Market", - "forestFriendsText": "Forest Friends Quest Bundle", - "forestFriendsNotes": "Contains 'The Spirit of Spring', 'The Hedgebeast', and 'The Tangle Tree'. Available until September 30.", - "questAlligatorText": "The Insta-Gator", - "questAlligatorNotes": "“Crikey!” exclaims @gully. “An Insta-Gator in its natural habitat! Careful, it distracts its prey with things that seem urgent THIS INSTANT, and it feeds on the unchecked Dailies that result.” You fall silent to avoid attracting its attention, but to no avail. The Insta-Gator spots you and charges! Distracting voices rise up from Swamps of Stagnation, grabbing for your attention: “Read this post! See this photo! Pay attention to me THIS INSTANT!” You scramble to mount a counterattack, completing your Dailies and bolstering your good Habits to fight off the dreaded Insta-Gator.", - "questAlligatorCompletion": "With your attention focused on what’s important and not the Insta-Gator’s distractions, the Insta-Gator flees. Victory! “Are those eggs? They look like gator eggs to me,” asks @mfonda. “If we care for them correctly, they’ll be loyal pets or faithful steeds,” answers @UncommonCriminal, handing you three to care for. Let’s hope so, or else the Insta-Gator might make a return…", - "questAlligatorBoss": "Insta-Gator", - "questAlligatorDropAlligatorEgg": "Alligator (Egg)", - "questAlligatorUnlockText": "Unlocks purchasable Alligator eggs in the Market", - "oddballsText": "Oddballs Quest Bundle", - "oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until December 3.", - "birdBuddiesText": "Bird Buddies Quest Bundle", - "birdBuddiesNotes": "Contains 'The Fowl Frost,' 'Rooster Rampage,' and 'The Push-and-Pull Peacock.' Available until December 31.", + "questKangarooUnlockText": "解鎖——可在市集中購買袋鼠蛋", + "forestFriendsText": "“林深時見”副本集", + "forestFriendsNotes": "包括“春之幽靈”、“巨型刺猬”和“糾結樹”。 9月30日前可購買。", + "questAlligatorText": "鱷魚的煽動:此刻更要緊的事", + "questAlligatorNotes": "“當心!”@gully 大喊道,“這裡是短吻鱷的自然棲息地,咱們附近就有一頭!小心點,它會用此時此刻似乎很要緊的事情讓它的獵物分心,然後以因此完不成的每日任務為食。”你不敢吱聲,以免吸引鱷魚的注意,但毫無用處。那頭鱷魚發現了你,朝你衝了過來!整個淤塞之沼的上空都迴響著讓你分心的聲音,吸引著你的注意力:“刷動態!那誰發的圖真有意思!群聊裡搞了個大新聞!”你努力地抵抗並反擊著,完成每日任務,加強自己的好習慣,和短吻鱷的煽動作鬥爭。", + "questAlligatorCompletion": "當你的注意力集中在真正重要的事情上,置短吻鱷的引誘於不顧的境地,那頭鱷魚就逃跑了。勝利啦! @mfonda 問:“這些是蛋嗎?我覺得看起來像鱷魚蛋。”@UncommonCriminal 答:“如果咱們好好照顧它們,它們能長成忠於我們的寵物,或者可靠的坐騎。”他遞給你3個讓你來養的蛋。但願如此吧,否則養不好的話可能又要變成煽動人分心的鱷魚了……", + "questAlligatorBoss": "即刻教唆犯", + "questAlligatorDropAlligatorEgg": "鱷魚(寵物蛋)", + "questAlligatorUnlockText": "解鎖——可在市集中購買鱷魚蛋", + "oddballsText": "“神奇小球”副本集", + "oddballsNotes": "包括“果凍攝政王”、“逃離山洞生物”和“一團纏繞的毛線”。 2月3日前可購買。", + "birdBuddiesText": "“禽鳥”副本集", + "birdBuddiesNotes": "包括“冰霜禽類”、“狂暴公雞”和“拖拉孔雀”。12月31日之前可購買。", "questVelociraptorText": "迅猛龍王", "questVelociraptorNotes": "你正在和@*~Seraphina~*、@Procyon P還有@Lilith of Alfheim在Stoïkalm Steppes的湖畔享用蜂蜜蛋糕。 突然間,一陣哀傷的聲音打斷了你們的野餐。

我的習慣給了我重擊,我完成不了我的每日任務,
全都結束了,只剩下了自我懷疑和困惑。
在我的巔峰期時,我的效率飛快。
但現在我只能讓我的期限過期。


@*~Seraphina~*從草叢裡探頭出來看。\"那是迅猛龍王。但牠看起來......很懊惱的樣子?\"

你握緊了拳頭,充滿了決心: \"現在能做的只有一件事———Rap battle time!\"", "questVelociraptorCompletion": "你從草叢跳出來,並站在迅猛龍王面前。

看這兒,迅猛龍王,你沒有時間休息,
你可是打擊壞習慣的好手阿!
別為一天的損失唉聲嘆氣了,
給我像個高手般的解決你的待辦事項!


對自己重新充滿了自信,牠邁著有力的步伐,迎向全新的一天,並在原地留下了三顆蛋做為謝禮。", "questVelociraptorBoss": "迅猛龍王", "questVelociraptorDropVelociraptorEgg": "迅猛龍 (蛋)", "questVelociraptorUnlockText": "解鎖迅猛龍蛋購買功能", - "mythicalMarvelsText": "\"神話傳說\"系列任務" + "mythicalMarvelsText": "\"神話傳說\"系列任務", + "questRobotCompletion": "@Rev和“問責好友”將最後一個螺栓固定到位時,時間機器嗡嗡作響。 @FolleMente和@McCoyly跳上船。 “感謝你的協助!我們將來會見!這些應該可以幫助你進行下一個發明!”這樣,時空穿越者消失了,但是在舊的生產力穩定器的殘骸中,他們留下了三個發條裝置蛋。也許這將是新的“問責好友”生產線的關鍵組成部分!", + "questRobotNotes": "在Max Capacity實驗室中,@Rev正在對他們的最新發明,機器人“問責好友”,進行最後的改進。突然,一輛奇怪的金屬車突然冒出一團煙霧,距離機器人的波動探測器只有幾英寸!它的乘員是兩個穿著銀色衣服的人物。他們脫下了太空頭盔,並以@FolleMente和@McCoyly的身份露面。

“我假設我們的生產力實施存在異常。”@FolleMente羞怯地說。

@McCoyly交叉雙臂。 “這意味著他們忽略了完成每日任務,讓我們的生產力穩定劑的瓦解。這是時間旅行的重要組成部分,需要一致性才能正常工作。我們的成就推動著我們穿越時空的運動!我沒有時間進一步解釋,@Rev。你將在37年後發現它,或者你的盟友神秘的時空穿越者可以滿足你的需求。現在,你可以幫助我們修復我們的時光機嗎?”", + "questRobotText": "神奇的機械奇蹟!", + "questSilverUnlockText": "解鎖——可在市集中購買銀孵化藥水", + "questRobotCollectBolts": "螺栓", + "questRobotCollectGears": "齒輪", + "questRobotCollectSprings": "彈簧", + "questRobotDropRobotEgg": "機器人(寵物蛋)", + "questRobotUnlockText": "解鎖——可在市集中購買機器人", + "rockingReptilesText": "“搖擺的爬行動物”副本集", + "rockingReptilesNotes": "包含“The Insta-Gator”,“分心蛇”,以及“The Veloci-Rapper”副本。 9月30日前有效。", + "delightfulDinosText": "“愉快的恐龍”副本集", + "delightfulDinosNotes": "包含“翼龍”,“那隻跺腳的三角龍”,以及“出土恐龍化石”副本。 11月30日前有效。", + "questAmberText": "琥珀聯盟", + "questAmberNotes": "當@Vikte衝進門,興奮地告訴你有關任務森林中隱藏的另一種魔術孵化藥水的謠言時,你正與@beffymaroo和@ -Tyr-坐在酒館。完成每日任務後,你們三個立即同意幫助@Vikte進行搜索。

畢竟,在一次小小的冒險中會有什麼害處?你任務森林走了很多小時後,你開始後悔加入這麼愚蠢的追逐。你將要回家,但是你聽到一聲驚訝叫聲。你轉身看到一隻巨大的蜥蜴,上面閃閃發光的琥珀色鱗片纏繞在樹上,用爪子抓著@Vikte。 @beffymaroo伸手去拿劍。

“等等!” @-Tyr-喊叫。 “是琥珀蜥蜴!她並不危險,只是愛纏人!”", + "questAmberCompletion": "“琥珀蜥蜴?”@-Tyr-平心靜氣的說。 “你能放手@Vikte嗎?我不認為他們喜歡高高在上。”

琥珀蜥蜴的琥珀色的皮膚變紅色。她輕輕將@Vikte降到地面。 “對不起!我很久沒有客人,我已經忘記註意我的舉止!”她滑行向前向你打招呼,然後消失在樹屋裡,並帶著幾個琥珀孵化藥水作為禮物送給你!

“孵化藥水!”@Vikte倒吸了一口氣。

“哦,這些舊東西?” 琥珀蜥蜴的舌頭如她所想的那樣顫悠。 “這個怎麼樣? 如果您答應經常拜訪我,我將為您提供全部的孵化藥水...”

因此,你離開任務森林,興奮地向所有人介紹新藥水-和你的新朋友!", + "questAmberBoss": "琥珀蜥蜴", + "questAmberDropAmberPotion": "琥珀孵化藥水", + "questAmberUnlockText": "解鎖——可在市集中購買琥珀孵化藥水", + "questSilverDropSilverPotion": "銀孵化藥水", + "questSilverCollectSilverIngots": "銀錠", + "questSilverCollectMoonRunes": "月亮盧恩", + "questSilverCollectCancerRunes": "巨蟹座盧恩", + "questSilverCompletion": "你鑽研了。你挖掘了。你清除了。你從地下城出來,滿是盧恩和銀條。雖然你的身體沾滿了污泥,但你興高采烈。你將返回Habit城,並開始在煉金術實驗室工作。你和@starsystemic在@Edge的仔細監督下,遵循@QuartzFox發現的公式。最後,在大量的油光和煙霧中,你的混合物變成了孵化藥!

@Edge一邊混合物入小瓶,一邊微笑。 “讓我們嘗試一下,好嗎?你們有蛋讓我們嘗試好嗎?”

你趕到馬厩,想知道還有什麼秘密尚未發現...", + "questSilverNotes": "青銅孵化藥水的最新發現引起了Habitica的廣泛關注。我們可以使用更亮的金屬藥水嗎?你跟@QuartzFox和@starsystemic去Habit城的公共圖書館,收集了大量有關煉金術的書籍以供學習。

經過很多小時的艱苦勞動後,@QuartzFox發出了不適合圖書館的歡呼聲。 “啊哈! 我找到了!”你急忙去看看。 “我們可以用巨蟹座盧恩製成銀孵化藥水,將其溶解在融化了火焰的純銀中,並註入月亮盧恩的力量。”

“我們將需要很多這樣的成分,” @starsystemic說。 “萬一嚐試出錯。”

“只有一個地方可以找到大量的這種隨機製作的材料,” @Edge雙臂交叉地站在堆疊的陰影下,說道。他們一直在那兒嗎? “差事地下城。 我們走吧。”", + "questSilverText": "銀溶液", + "questDolphinUnlockText": "解鎖——可在市集中購買海豚蛋", + "questDolphinDropDolphinEgg": "海豚(寵物蛋)", + "questDolphinCompletion": "你與海豚的意誌之戰使你疲倦而又勝利。在你的決心和鼓勵下,@mewrose,@khdarkwolf和@confusedcicada振作起來,擺脫了海豚的陰險心靈感應。你們四個人始終如一地堅持自己的每日任務,堅強的習慣和完成的待辦事項,以一種成就感來掩護自己,直到它默默地承認你的成功而睜開眼睛。這樣,它就滾落回到海灣。當您進行高昂的交易和祝賀時,你會注意到三個蛋被沖上岸。

“嗯,我想知道我們可以用這些蛋做什麼。” @khdarkwolf沉思。", + "questDolphinBoss": "懷疑海豚", + "questDolphinNotes": "你在未完成海灣漫步,思考著面前艱鉅的工作。水中濺起的水吸引了你的眼球。宏偉的海豚在海浪上盤旋。陽光照耀著它的鰭和尾巴。但是等等...那不是陽光,海豚也不會掉回海裡。它盯著@khdarkwolf。

“我永遠都不會完成所有這些日常工作。” @khdarkwolf說。

海豚把目光投向他們時,@confusedcicada說:“我不夠出色,無法實現自己的目標。”

“為什麼我還要又試呢?” @mewrose問,在野獸的目光下凋謝。在懷疑的眼光下,你的思想開始沉澱。你開始變得堅強; 有人必須擊敗這個生物,而這個人將是你!", + "questDolphinText": "懷疑海豚", + "questBronzeUnlockText": "解鎖——可在市集中購買青銅孵化藥水", + "questBronzeDropBronzePotion": "青銅孵化藥水", + "questBronzeBoss": "青銅甲蟲", + "questBronzeCompletion": "“好吧,戰士!”甲蟲在落地時說道。她在笑嗎?這些下頜骨很難分辨。 “你真的賺了這些魔藥!”“哦,哇,我們從未贏得過像這樣的獎勵,因為之前贏得了戰鬥!” @UncommonCriminal一邊說,一邊轉過手中的閃閃發光的瓶子。 “我們去孵化我們的新寵物吧!”", + "questBronzeNotes": "在任務之間的休息時,你和一些朋友在任務森林小徑上漫步。你遇到一個大的有空心木,裡面的發光吸引了你的注意。

哦!這是孵化藥水的儲藏!當閃閃發光的青銅液體在瓶子中輕輕旋轉,@Hachiseiko伸手拿起瓶子對它進行檢查。

“停止!” 嘶嘶聲從你身後傳來。這是一隻巨大的甲蟲,有著閃閃發光的青銅甲殼,以戰鬥的姿勢抬起爪狀的腳。 “那些是我的魔藥,如果你想賺錢,就必須在戰鬥證明自己!”", + "questBronzeText": "青銅甲蟲戰鬥", + "mythicalMarvelsNotes": "包含“說服獨角獸女王”、“火紅的獅鷲”、“深度危險:海蛇衝撞!”,有效期到2月28日。", + "evilSantaAddlNotes": "注意,聖誕陷阱獵手和找熊崽獎勵可堆疊的副本成就,但會獎勵的稀有寵物和坐騎只能添加到你的馬厩一次。" } diff --git a/website/common/locales/zh_TW/rebirth.json b/website/common/locales/zh_TW/rebirth.json index 65ea7116d3..1a5fe958fd 100644 --- a/website/common/locales/zh_TW/rebirth.json +++ b/website/common/locales/zh_TW/rebirth.json @@ -21,7 +21,7 @@ "rebirthOrb": "達到等級 <%= level %> 後即可使用重生球並開始新的冒險。", "rebirthOrb100": "使用重生球在達到 100 級或更高級別後重新開始。", "rebirthOrbNoLevel": "使用了重生球來重生。", - "rebirthPop": "立即重置您的角色回到 1 等戰士,同時保留成就、收集物品、和裝備。您的任務和歷史資訊都將被保留,但將會被重置為黃色。您的連擊紀錄將會被刪除。您擁有的金幣、經驗、魔力、和技能都將被刪除。上述內容都將立即生效。更多訊息請查看 wiki 的重生球頁面。", + "rebirthPop": "立即重置你的角色成為1級戰士,同時保留成就、物品、裝備。將保留你的任務和歷史,但重置為黃色;移除挑戰任務和團隊套餐任務之外的任務歷史;移除金幣、經驗值以及魔法值和技能。上述內容將立即生效。更多信息請查看wiki重生球頁面。", "rebirthName": "重生球", "reborn": "重生球,最高等級 <%= reLevel %>", "confirmReborn": "你確定嗎?", diff --git a/website/common/locales/zh_TW/settings.json b/website/common/locales/zh_TW/settings.json index 7508266b9b..a9115fa809 100644 --- a/website/common/locales/zh_TW/settings.json +++ b/website/common/locales/zh_TW/settings.json @@ -120,7 +120,7 @@ "giftedSubscriptionFull": "哈囉 <%= username %>,<%= sender %> 送您 <%= monthCount %> 個月的訂閱資格!", "giftedSubscriptionWinterPromo": "哈囉 <%= username %>,您收到了 <%= monthCount %> 個月的訂閱資格以作為我們的假期送禮升級活動的一部份!", "invitedParty": "您受邀加入隊伍", - "invitedGuild": "您受邀加入公會", + "invitedGuild": "您收到了加入公會的邀請", "importantAnnouncements": "提醒:登入以完成任務以及獲得獎勵", "weeklyRecaps": "您的帳號上星期的活動彙整 (注意:這個彙整目前因為伺服器效能問題而暫時關閉,但是我們會盡快修復並再一次定期發送電子郵件!)", "onboarding": "引導設定您的 Habitica 帳號", @@ -210,5 +210,7 @@ "suggestMyUsername": "建議我的使用者名稱", "mentioning": "回覆", "chatExtensionDesc": "Habitica 的聊天室擴充功能會在 habitica.com 的網頁附加聊天視窗。讓用戶在酒館、加入的隊伍或公會聊天。", - "chatExtension": "Chrome 聊天室擴充功能Firefox 聊天室附加元件" + "chatExtension": "Chrome 聊天室擴充功能Firefox 聊天室附加元件", + "onlyPrivateSpaces": "只在私人空間", + "everywhere": "每個地方" } diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index 942981193e..b0247ef5c8 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -226,5 +226,8 @@ "mysterySet201906": "親切錦鯉套裝", "mysterySet201907": "海灘夥伴套裝", "mysterySet201909": "友善橡實套裝", - "mysterySet201910": "秘匿火焰套裝" + "mysterySet201910": "秘匿火焰套裝", + "mysterySet202001": "寓言的狐狸套裝", + "mysterySet201912": "北極小精靈套裝", + "mysterySet201911": "水晶魔術師套裝" } From 04960f8ff8a81cf92d0dd98fa8fa4c93aa0ca56e Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 16 Jan 2020 16:11:40 -0600 Subject: [PATCH 97/98] chore(news): Bailey --- .../sprites/spritesmith-largeSprites-0.css | 14 ++++++--- .../sprites/spritesmith-largeSprites-0.png | Bin 94632 -> 97510 bytes .../spritesmith_large/promo_seasonal_shop.png | Bin 0 -> 7218 bytes website/server/controllers/api-v3/news.js | 27 +++++++----------- 4 files changed, 21 insertions(+), 20 deletions(-) create mode 100644 website/raw_sprites/spritesmith_large/promo_seasonal_shop.png diff --git a/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css b/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css index e738e6db35..76719532da 100644 --- a/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css +++ b/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css @@ -1,6 +1,6 @@ .promo_armoire_backgrounds_202001 { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -424px -175px; + background-position: 0px -323px; width: 423px; height: 147px; } @@ -16,6 +16,12 @@ width: 279px; height: 147px; } +.promo_seasonal_shop { + background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); + background-position: -521px -619px; + width: 162px; + height: 138px; +} .promo_snowballs { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-position: 0px 0px; @@ -30,13 +36,13 @@ } .promo_winter_potions_2020 { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: 0px -323px; + background-position: 0px -175px; width: 423px; height: 147px; } .promo_winter_quests_bundle { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: 0px -175px; + background-position: -424px -175px; width: 423px; height: 147px; } @@ -54,7 +60,7 @@ } .promo_wintery_hair { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -521px -619px; + background-position: -684px -619px; width: 152px; height: 75px; } diff --git a/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png b/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png index 1418399ac9da0c8fa5db267d9d022b88b1162191..e512b68ef32d7f78d66e208c0039e1b26049359f 100644 GIT binary patch literal 97510 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 literal 94632 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

FjmJLjyJGm7(IGD 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

npgZXuELOwgdh({%axNmD})@(-1!hG z=IkK?q+IjcD2a^OsOzC9v?c2W6(eSU5!px(Iu?@G7 z3$Kx5O$R3LAyn9-P(}jJ^xy$v;jYp8e0H;9(z&P)#NRBJxdicS9t94H{4c>Kng( z?PSB2EWpIKy5WEx8*?=5vOo1}N6e``=m)+J1$w8?6@aqpq-J#JEZ$|I;GFFE+*a?t*5bBN`*^=J) z8%zZ!Z5YY}u8$k9zA)|Ox6>OJt-_<_qgPr`xIs0M==Fa1ww8SnfFC!bR;~L2%a1V4 zC7BBix%~+)`W5&6^wj>uW1$;=y2F!qjJ#Xcrp?U4mT=B#N;$+<9&k7t=)q@RTJ`!$ z|8f|&NbU(P^?CuvjEK~`meCLGXCXQj{wozh`E#GF_j;h(Dd%+Rri_E!12o?^7cdyQ zo{K26Nw&?ea&LxDHogG9y{G6M>+SrVI;d-JZ|uH}IuAjqnHp@n^S}y1zOHC+%uaL6 zW74=%)<&7))0VfzWl>X6=DUdg-yuBS_>P4gMMzZ9EHocT0j(pQ#BRm@JEl=h$oVlRFL~OU>28_+6 zhgQCh_f-d@lPINXd$>mo4a|hn;PH-;v%w0KOka>j&p`i(pKjFx_pPwJuyM{TB50qJWqfCq2vn2J$6 z$x8Q5;u}F~hhO{u@stw3!s4TC{561HV?+IBu{A7!(*9{KfQs;)ZU5tLU^cf2uT?L} zV2|c0G@8u*-=nJ)j+|fF-~(+DKxdwT<9}MwUq|EnlA(0yg={~!g;)J6`fYrQo=8{Y z&xJ(2AR2*G-}7H06MFpDQi2rL(`gl1lP}h z0G$5k_Wt_szr1MP^yJ|-VgNtP>*2#mrx@ukw|>TU`$Qx$Zbmpb(%%~!o;;d=*dgkF E0J(XH!Tin0Qo0lbDG6cd?vO4iL3#%1j)4KBTe@319lARN2N-%t=?0~nhtKc5 zALs5r=iGbtUhA%P_6bu{k;BEJzybgOxC-*p8jmsWafD-_JwBOnW5pi>rh~kmGXQ{1 z_;;WH(lW>Z04!B2DJeBIu)T}DGuYmNMnOu7#=*(n(#pmH0PvX0)C6g1?vRLFES*X! zhWaHa+G`MF&}c|T_z}f2u+U->ybq<#MG~ubJ(rPrN;#MliW(j57fGzniW81Ci@r{q z7afov8a{Nh0?D_YZoSxq-`CBEZk3;8){LTeV&Ejn1J!x_a7rX!KK~Uk(A&SV&Mxkc zMehJ0z^E~&b-trR0bD|bh2OsJL~jS6cuZhp06LY^JKs@-JmBw2rhY{63qoue{4!G*GyyqJ0mj2-rfUE-Hh?js@8$%+FY_`Lf&wr|pe07hi3QLQ zT7*giz(RoX(GTG=0Nr;0B1^?y0l+L9;GKewr97az0nj-@fDHp+-~isKhXyeNo z<8u${{?w^+XLAJ=zP&j6)xJva&t>Q@_w@2t_s>(M0;WSCA z3Z_lEEJSPSFC3$#(;`o}3SNgv#xeK38GkTeU1q&O6D>4%3 zx^%8y0074=_Fa=q7^r^WfR$1Aha<5&xtuouKTCx;M*zS`nx0*2s77o60|1cD@n@-) zpgip&W9>wv>Uy@&g?($x8z@QN+bu~TiDm9b;$Zp0IDz`r)Z$m(Kh^~ZcFF^EBELOU0VVj8YX7mY!h8gxn9CI9qA1U=1e{1(1E=+@7Vi$B){{sV#b>de}7$$Q`S#W z{h=JSCG5;>^t=1h7ydGxn7mKjC234vO33Rf>8i}i7t>JDb3dQM%zZjPtx6`28VJ%7L zmZzYL|1oE74MP`5V5NCG7_^?b-m?x|r(CB!Ho(d>6?go0skzFeG4%O8`3AuT_Xe6p z3YUa-ewxN&ajw>Lo)~?}irjjQD)o?JLT=YI0eAq3f?`2MUg87=m=t_rRkiKX{CqL- zrAqRc&iL?-+;;Ld>Zv;pZZL7cKq!cbJe>@k3`FiuR+XYuNInrkKA`oEk8>|&D-}Q0 zUR#%?p2eFub_gr+eIi35B@2gENoir}QYp6fiT1EoOo@@EPo=CjP;;#Wb26z+yEId6 zPm@v;R3cOyQVJ@z*An{%)w>Hr)9X>{QI-0pp7Z_FT5CTIwi$Vi2P>^LZdtIaKTj{i zcR149jin{!j=Cj6q_iYgKnnOCs8geHl3*!@zLw&6nc<>>xy4kJd;$$$B06GTWu`3T zR%+t3_-I|4l$@knCSRsrCb!qdTX|5FS=c7iqIctuCo%Az@gt)gC}!kY=9VT>bFm1k zh(uXL@T`)()VhE&w?*2$!>;HsC9B=YFH6b3Xvwo}>zc}k<4)_&_PXdy4o4TQ28SMP z9%qD1xR1xtUYMF=VE&J~lwps!RDnsNN%BfyY!gB_e@Zq=7C+Le|Kl3{nr**re?9{m z11*E1@~-k>nuc;yA#{3kpQKAp;wF2Xs(wUxe=K9j!OV65+<&stwx-)Nx# zTh}ktJFIWD3(^{DZ$gFrX-BQs~^t`A^C0?a0YZ}y3{ips%eMtj(^~NmP zd}Y0Dy^jgVloZs^SJ`tI-xlxF>=Sh-f{q)4#4DrLr-nM$IuQwe5L`+d$v71A={rr@ z;Q;B55{%9Q*Xjv}nR~4=HPa{LK%}51=YW&Yh%m)3!|chT?CF&Ki-T?J?_JIu4OhIz z&oa|%(z_3e=c^8R53LSE7P5bGXESH%0iDNs2Bm(fZy?05vlHK0FPB4ArBwYvbz5{C zW*o6P6*JWh1@5I6CP$>A=b}#8Yocqyd`nzQdY^vsbv6t(46F9oXMGA0Fn{oR zKmdyT-k^X`!~7-u4W8UwdU?}!M2iW|Tb#p?2NIDvO%lWsF<&aaY;;x7f(Q4%R?uE- zrHsUmSm6b!LAR&J&`mZ?B6^@Wj6oqmI>BPm4xzdf2+m|4cf^8}^Ro1{bdvN^I*3zM zpo;B14~u9i`)A=fzGm)bv3_<-y`NLMnYs!#ic|vZES0==Htox|2PYw`nXA}q5YiNm zK|=@6+>!3npdykI_7|*zN#aVOD*Oq*B?wrGNh04I6S}{N#`5f@?gqW)K=2|$XQe)} zyi_@sXHoWw+mCJK@ucqq7O-wK1u~X=ZB@cmT1*$rB1vpGY~u`wi~Z^-SxT!M zUk};^ZCbhwmsKnOF6`XU6gp{wKPrP!Y22pc- zmP|WNlTFu5yD=~|Xjc6xikRMA^179qe}$jHEv)DH{zU7C)!fdPiFnZQXk=z$rVo_; zYQcCuuO6~xHnRK~-~OnXz-47z<{@HBs8wj><8hHQ=P^VERtxE8d?XJtN@O}J* z>Of0IOIl^qN9(3TueLgf<;4zV7T?I?X`AOCl85Q3ECG?lwi7S=i@uAqWs*gx6XV^; za0}9%@vx#*we{1f_<;mcYB6L=%;0`u_GrQPbEkXG31UI+0xc+D^gi}124Ct~Olr(< zFmCW(7Qd)~z^a(j-Og>1)TsF=Ll)_M-u-YTDG3Mka%yj81d)QsO+HSJ@38eQxZCaA zBd?n8@9uxu{=);vX>|JG=Ag@c!JYaje;HqO-J8aj=>dH8{Y-PL=q8>#KK|h;YRbv2 z8IW!M@w`c6Ca<9k0C>Ft0Q>>~fUAecxB~#Vz5@VujR63`6aawKKJHVWECBG_P(fNk z%VTao6QZS~O)}ssCQc-yE-leVs*)25{>)HVVkKJRy^+sgxJkbwUz1Q+6jkTMQ<=D_ zBuK&_$gin5P|JB7q|)BUNKS*rfR&f?I`mK673PT!$XBmM^}+}$_SMPvVQ$aiuxV>y zdBgiq6qN0}udS`ktMm5AtzZw^2S7Bo0EdcYb(9_MMJ}vwkxrrih+rxug&D}y80%byRg+GPAMyMV)e&Vk$(q?L5nbbsXmBA7hr

58kzjcX2x)_kTefCIf=~0&3ky=n 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 literal 0 HcmV?d00001 diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index d13acdd40b..26b5b4be7a 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -4,7 +4,7 @@ const api = {}; // @TODO export this const, cannot export it from here because only routes are exported from // controllers -const LAST_ANNOUNCEMENT_TITLE = 'WINTERY SKINS AND HAIR COLORS!'; +const LAST_ANNOUNCEMENT_TITLE = 'BLOG POST: SEASONAL SHOP'; const worldDmg = { // @TODO bailey: false, }; @@ -31,26 +31,21 @@ api.getNews = {

${res.t('newStuff')}

-

1/14/2020 - ${LAST_ANNOUNCEMENT_TITLE}

+

1/16/2020 - ${LAST_ANNOUNCEMENT_TITLE}


-
+

- The Seasonal Edition Wintery Hair Colors are now available for purchase! Now you can dye - your avatar's hair Snowy, Peppermint, Holly Green, Aurora, Winter Star, or Festive. + This month's featured Wiki article is about the Seasonal Shop! We hope that it + will help you get the most out of the Winter Wonderland Gala and many Galas to come. Be + sure to check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook.

-

- Plus, the Seasonal Edition Wintery Skins are available, too! You can complete your winter - avatar look with Aurora, Dapper, Festive, Holly, Polar, Sugar, or Winter Star Skins. -

-

- Both of these Seasonal Edition customization sets will only be available to purchase - until January 31st, after which they'll be gone until next year, so be sure to scoop them - up now! You can find them in User>Edit Avatar! -

-
by Lemoness and tricksy.fox
-
+
by shanaqui and the Wiki Wizards
`, }); From 1e005a8bc442e4c729721f740d0457476a85b7b2 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 16 Jan 2020 16:11:46 -0600 Subject: [PATCH 98/98] 4.129.4 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 984080f2aa..81a415147b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.129.3", + "version": "4.129.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 51c66b57ad..6455b59b56 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.129.3", + "version": "4.129.4", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.8.0",