Merge branch 'develop' into 2022-04-wacky-potion-quest

This commit is contained in:
SabreCat
2022-04-05 15:08:18 -05:00
54 changed files with 687 additions and 256 deletions

112
package-lock.json generated
View File

@@ -3605,20 +3605,22 @@
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"body-parser": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
"integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.8.1",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.9.7",
"raw-body": "2.4.3",
"type-is": "~1.6.18"
"on-finished": "2.4.1",
"qs": "6.10.3",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"dependencies": {
"debug": {
@@ -3629,6 +3631,28 @@
"ms": "2.0.0"
}
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -3642,10 +3666,26 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
},
"qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw=="
"version": "6.10.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
"integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"requires": {
"side-channel": "^1.0.4"
}
},
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
}
}
},
@@ -10386,9 +10426,9 @@
"integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
"version": "2.29.2",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
"integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg=="
},
"moment-recur": {
"version": "1.0.7",
@@ -12100,16 +12140,33 @@
"integrity": "sha512-8DVFOe89rreyut/vzwBI7vgXJynyYoYnH5XogtAKs0F/neAbCTTglXxSJ7fZeZamcFXZDvMidCBvps4KM+1srw=="
},
"raw-body": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
"integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
"bytes": "3.1.2",
"http-errors": "1.8.1",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.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=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -12117,6 +12174,11 @@
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
}
}
},
@@ -13746,9 +13808,9 @@
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ=="
},
"superagent": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz",
"integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==",
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.2.tgz",
"integrity": "sha512-o9/fP6dww7a4xmEF5a484o2rG34UUGo8ztDlv7vbCWuqPhpndMi0f7eXxdlryk5U12Kzy46nh8eNpLAJ93Alsg==",
"requires": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
@@ -13764,9 +13826,9 @@
},
"dependencies": {
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}

View File

@@ -16,7 +16,7 @@
"apidoc": "^0.51.0",
"apple-auth": "^1.0.7",
"bcrypt": "^5.0.1",
"body-parser": "^1.19.2",
"body-parser": "^1.20.0",
"bootstrap": "^4.6.0",
"compression": "^1.7.4",
"cookie-session": "^2.0.0",
@@ -47,7 +47,7 @@
"lodash": "^4.17.21",
"merge-stream": "^2.0.0",
"method-override": "^3.0.0",
"moment": "^2.29.1",
"moment": "^2.29.2",
"moment-recur": "^1.0.7",
"mongoose": "^5.13.7",
"morgan": "^1.10.0",
@@ -68,7 +68,7 @@
"rimraf": "^3.0.2",
"short-uuid": "^4.2.0",
"stripe": "^8.212.0",
"superagent": "^7.1.1",
"superagent": "^7.1.2",
"universal-analytics": "^0.5.3",
"useragent": "^2.1.9",
"uuid": "^8.3.2",

View File

@@ -128,6 +128,22 @@ describe('cron middleware', () => {
});
});
it('runs cron if previous cron was incomplete', async () => {
user.lastCron = moment(new Date()).subtract({ days: 1 });
user.auth.timestamps.loggedin = moment(new Date()).subtract({ days: 4 });
const now = new Date();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
expect(moment(now).isSame(user.lastCron, 'day'));
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
return resolve();
});
});
});
it('updates user.auth.timestamps.loggedin and lastCron', async () => {
user.lastCron = moment(new Date()).subtract({ days: 2 });
const now = new Date();
@@ -293,4 +309,33 @@ describe('cron middleware', () => {
});
});
});
it('cron should not run more than once', async () => {
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
sandbox.spy(cronLib, 'cron');
await Promise.all([new Promise((resolve, reject) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
return resolve();
});
}), new Promise((resolve, reject) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
return resolve();
});
}), new Promise((resolve, reject) => {
setTimeout(() => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
return resolve();
});
}, 400);
}),
]);
expect(cronLib.cron).to.be.calledOnce;
});
});

View File

@@ -811,6 +811,16 @@ describe('User Model', () => {
expect(daysMissed).to.eql(5);
});
it('correctly handles a cron that did not complete', () => {
const now = moment();
user.lastCron = moment(now).subtract(2, 'days');
user.auth.timestamps.loggedIn = moment(now).subtract(5, 'days');
const { daysMissed } = user.daysUserHasMissed(now);
expect(daysMissed).to.eql(5);
});
it('uses timezone from preferences to calculate days missed', () => {
const now = moment('2017-07-08 01:00:00Z');
user.lastCron = moment('2017-07-04 13:00:00Z');

View File

@@ -633,6 +633,11 @@
width: 141px;
height: 147px;
}
.background_blossoming_trees {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_blossoming_trees.png');
width: 141px;
height: 147px;
}
.background_blue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_blue.png');
width: 141px;
@@ -903,6 +908,16 @@
width: 60px;
height: 60px;
}
.background_flower_shop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flower_shop.png');
width: 141px;
height: 147px;
}
.customize-option.background_flower_shop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flower_shop.png');
width: 60px;
height: 60px;
}
.background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flowering_prairie.png');
width: 141px;
@@ -1633,6 +1648,11 @@
width: 141px;
height: 147px;
}
.background_springtime_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_springtime_lake.png');
width: 141px;
height: 147px;
}
.background_stable {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_stable.png');
width: 141px;
@@ -2103,6 +2123,11 @@
width: 68px;
height: 68px;
}
.icon_background_blossoming_trees {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_blossoming_trees.png');
width: 68px;
height: 68px;
}
.icon_background_blue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_blue.png');
width: 68px;
@@ -2378,11 +2403,21 @@
width: 60px;
height: 60px;
}
.icon_background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flowering_prairie.png');
.icon_background_flower_shop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flower_shop.png');
width: 68px;
height: 68px;
}
.customize-option.icon_background_flower_shop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flower_shop.png');
width: 60px;
height: 60px;
}
.icon_background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flowering_prairie.png');
width: 68px;
height: 68px;
}
.customize-option.icon_background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flowering_prairie.png');
width: 60px;
@@ -3108,6 +3143,11 @@
width: 68px;
height: 68px;
}
.icon_background_springtime_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_springtime_lake.png');
width: 68px;
height: 68px;
}
.icon_background_stable {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_stable.png');
width: 68px;
@@ -16963,6 +17003,11 @@
width: 114px;
height: 90px;
}
.broad_armor_armoire_strawRaincoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_strawRaincoat.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_stripedSwimsuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_stripedSwimsuit.png');
width: 90px;
@@ -17383,6 +17428,11 @@
width: 117px;
height: 120px;
}
.head_armoire_strawRainHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_strawRainHat.png');
width: 114px;
height: 90px;
}
.head_armoire_swanFeatherCrown {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_swanFeatherCrown.png');
width: 90px;
@@ -18123,6 +18173,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_strawRaincoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_strawRaincoat.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_stripedSwimsuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_stripedSwimsuit.png');
width: 68px;
@@ -18558,6 +18613,11 @@
width: 68px;
height: 68px;
}
.shop_head_armoire_strawRainHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_strawRainHat.png');
width: 68px;
height: 68px;
}
.shop_head_armoire_swanFeatherCrown {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_swanFeatherCrown.png');
width: 68px;
@@ -19708,6 +19768,11 @@
width: 114px;
height: 90px;
}
.slim_armor_armoire_strawRaincoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_strawRaincoat.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_stripedSwimsuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_stripedSwimsuit.png');
width: 90px;

View File

@@ -84,8 +84,8 @@
</li>
<li v-if="user">
<a
@click.prevent="openBugReportModal()"
target="_blank"
@click.prevent="openBugReportModal()"
>
{{ $t('reportBug') }}
</a>
@@ -224,7 +224,7 @@
</div>
<div class="row">
<div class="col-12 col-md-5 text-center text-md-left">
© 2022 Habitica. All rights reserved.
© {{ currentYear }} Habitica. All rights reserved.
<div
v-if="!IS_PRODUCTION && isUserLoaded"
class="debug float-left"
@@ -512,6 +512,10 @@ export default {
if (!this.user) return null;
return `${base}?uuid=${this.user._id}`;
},
currentYear () {
const currentDate = new Date();
return currentDate.getFullYear();
},
},
methods: {
plusTenHealth () {

View File

@@ -20,8 +20,8 @@
</div>
</div>
<div
class="form-group row text-center"
v-if="!registering"
class="form-group row text-center"
>
<div class="col-12 col-md-12">
<div
@@ -269,13 +269,13 @@
<label
v-once
for="usernameInput"
>{{ $t('email') }}</label>
>{{ $t('emailOrUsername') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
type="text"
:placeholder="$t('emailPlaceholder')"
:placeholder="$t('emailUsernamePlaceholder')"
>
</div>
<div class="text-center">

View File

@@ -12,12 +12,18 @@
{{ $t('reportBug') }}
</h2>
<div v-once class="report-bug-header-describe">
<div
v-once
class="report-bug-header-describe"
>
{{ $t('reportBugHeaderDescribe') }}
</div>
<div class="dialog-close">
<close-icon @click="close()" :purple="true"/>
<close-icon
:purple="true"
@click="close()"
/>
</div>
</div>
<div>
@@ -34,7 +40,10 @@
>
{{ $t('email') }}
</label>
<div class="mb-2 description-label" v-once>
<div
v-once
class="mb-2 description-label"
>
{{ $t('reportEmailText') }}
</div>
<input
@@ -47,7 +56,10 @@
:class="{'input-invalid': emailInvalid, 'input-valid': emailValid}"
>
<div class="error-label mt-2" v-if="emailInvalid">
<div
v-if="emailInvalid"
class="error-label mt-2"
>
{{ $t('reportEmailError') }}
</div>
</div>
@@ -55,7 +67,10 @@
<label v-once>
{{ $t('reportDescription') }}
</label>
<div class="mb-2 description-label" v-once>
<div
v-once
class="mb-2 description-label"
>
{{ $t('reportDescriptionText') }}
</div>
<textarea

View File

@@ -17,15 +17,22 @@
</div>
</div>
<div>
<span class="svg-icon check-icon"
v-html="icons.checkCircleIcon"
<span
class="svg-icon check-icon"
v-html="icons.checkCircleIcon"
></span>
<div class="title" v-once>
<div
v-once
class="title"
>
{{ $t('reportSent') }}
</div>
<div class="text mt-3 mb-4" v-once>
<div
v-once
class="text mt-3 mb-4"
>
{{ $t('reportSentDescription') }}
</div>
</div>
@@ -143,12 +150,12 @@ export default {
modalId: MODALS.BUG_REPORT_SUCCESS,
};
},
computed: {},
mounted () {},
methods: {
close () {
this.$root.$emit('bv::hide::modal', MODALS.BUG_REPORT_SUCCESS);
},
},
computed: {},
mounted () {},
};
</script>

View File

@@ -112,7 +112,7 @@ export default {
},
visualBuffs () {
return {
snowball: 'snowman',
snowball: `avatar_snowball_${this.member.stats.class}`,
spookySparkles: 'ghost',
shinySeed: `avatar_floral_${this.member.stats.class}`,
seafoam: 'seafoam_star',

View File

@@ -361,8 +361,8 @@
</li>
<li>
<a
@click.prevent="openBugReportModal()"
target="_blank"
@click.prevent="openBugReportModal()"
>
{{ $t('reportBug') }}
</a>

View File

@@ -311,8 +311,8 @@
</router-link>
<a
class="topbar-dropdown-item dropdown-item"
@click.prevent="openBugReportModal()"
target="_blank"
@click.prevent="openBugReportModal()"
>
{{ $t('reportBug') }}
</a>

View File

@@ -7,9 +7,9 @@
>
<div class="modal-body">
<br>
<strong v-if="user.auth.local.email">{{ $t('deleteLocalAccountText') }}</strong>
<strong v-if="user.auth.local.has_password">{{ $t('deleteLocalAccountText') }}</strong>
<strong
v-if="!user.auth.local.email"
v-if="!user.auth.local.has_password"
>{{ $t('deleteSocialAccountText', {magicWord: 'DELETE'}) }}</strong>
<div class="row mt-3">
<div class="col-6">

View File

@@ -291,14 +291,22 @@
</li>
</ul>
<hr>
<div v-if="!user.auth.local.email">
<p>{{ $t('addLocalAuth') }}</p>
<div v-if="!user.auth.local.has_password">
<h5 v-if="!user.auth.local.email">
{{ $t('addLocalAuth') }}
</h5>
<h5 v-if="user.auth.local.email">
{{ $t('addPasswordAuth') }}
</h5>
<div
class="form"
name="localAuth"
novalidate="novalidate"
>
<div class="form-group">
<div
v-if="!user.auth.local.email"
class="form-group"
>
<input
v-model="localAuth.email"
class="form-control"
@@ -421,7 +429,7 @@
{{ $t('saveAndConfirm') }}
</button>
</div>
<h5 v-if="user.auth.local.email">
<h5>
{{ $t('changeEmail') }}
</h5>
<div
@@ -439,7 +447,10 @@
:placeholder="$t('newEmail')"
>
</div>
<div class="form-group">
<div
v-if="user.auth.local.has_password"
class="form-group"
>
<input
v-model="emailUpdates.password"
class="form-control"
@@ -455,11 +466,11 @@
{{ $t('submit') }}
</button>
</div>
<h5 v-if="user.auth.local.email">
<h5 v-if="user.auth.local.has_password">
{{ $t('changePass') }}
</h5>
<div
v-if="user.auth.local.email"
v-if="user.auth.local.has_password"
class="form"
name="changePassword"
novalidate="novalidate"
@@ -846,7 +857,7 @@ export default {
if (network === 'apple') {
window.location.href = buildAppleAuthUrl();
} else {
const auth = await hello(network).login({ scope: 'email' });
const auth = await hello(network).login({ scope: 'email', options: { force: true } });
await this.$store.dispatch('auth:socialAuth', {
auth,
@@ -865,8 +876,12 @@ export default {
}
},
async addLocalAuth () {
if (this.localAuth.email === '') {
this.localAuth.email = this.user.auth.local.email;
}
await axios.post('/api/v4/user/auth/local/register', this.localAuth);
window.alert(this.$t('addedLocalAuth')); // eslint-disable-line no-alert
window.location.href = '/';
},
restoreEmptyUsername () {
if (this.usernameUpdates.username.length < 1) {

View File

@@ -1,12 +1,12 @@
<template>
<button
title="close dialog"
@click="$emit('click', $event)"
:style="{
'--icon-color': iconColor,
'--icon-color-hover': iconColorHover,
}"
:class="{'purple': purple}"
@click="$emit('click', $event)"
>
<div
v-once

View File

@@ -10,8 +10,8 @@
<span v-if="user">
<br>
<a
@click.prevent="openBugReportModal()"
target="_blank"
@click.prevent="openBugReportModal()"
>
{{ $t('reportBug') }}
</a>

View File

@@ -8,7 +8,7 @@
<p>
HabitRPG, Inc. (HabitRPG, we, us, or our) welcomes you. This privacy notice (the Privacy
Notice) describes how we process the information we collect about or from you through our Website
located at <a href='https://habitica.com/static/home'>https://habitica.com/static/home</a> and/or our Apps
located at <a href="https://habitica.com/static/home">https://habitica.com/static/home</a> and/or our Apps
(our Digital Platforms), from our users, subscribers, visitors and other users of our technology and
platforms (together with our Digital Platforms, the Habitica Service or the Service), and when you
otherwise interact with us. This Privacy Notice may be updated by us from time to time without notice to
@@ -65,11 +65,36 @@
policies linked to below:
</p>
<ul>
<li>For Stripe, visit: <a href='https://stripe.com/privacy' target='_blank'>https://stripe.com/privacy</a></li>
<li>For Amazon Pay, visit: <a href='https://pay.amazon.com/help/201751600' target='_blank'>https://pay.amazon.com/help/201751600</a></li>
<li>For PayPal, visit: <a href='https://www.paypal.com/us/webapps/mpp/ua/privacy-full' target='_blank'>https://www.paypal.com/us/webapps/mpp/ua/privacy-full</a></li>
<li>For Apple Pay, visit: <a href='https://www.apple.com/legal/privacy/data/en/apple-pay/' target='_blank'>https://www.apple.com/legal/privacy/data/en/apple-pay/</a></li>
<li>For Google Pay, visit: <a href='https://support.google.com/googlepay/answer/10223752?hl=en&co=GENIE.Platform%3DAndroid' target='_blank'>https://support.google.com/googlepay/answer/10223752?hl=en&co=GENIE.Platform%3DAndroid</a></li>
<li>
For Stripe, visit: <a
href="https://stripe.com/privacy"
target="_blank"
>https://stripe.com/privacy</a>
</li>
<li>
For Amazon Pay, visit: <a
href="https://pay.amazon.com/help/201751600"
target="_blank"
>https://pay.amazon.com/help/201751600</a>
</li>
<li>
For PayPal, visit: <a
href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full"
target="_blank"
>https://www.paypal.com/us/webapps/mpp/ua/privacy-full</a>
</li>
<li>
For Apple Pay, visit: <a
href="https://www.apple.com/legal/privacy/data/en/apple-pay/"
target="_blank"
>https://www.apple.com/legal/privacy/data/en/apple-pay/</a>
</li>
<li>
For Google Pay, visit: <a
href="https://support.google.com/googlepay/answer/10223752?hl=en&co=GENIE.Platform%3DAndroid"
target="_blank"
>https://support.google.com/googlepay/answer/10223752?hl=en&co=GENIE.Platform%3DAndroid</a>
</li>
</ul>
<p>
We reserve the right to change our payment vendors at any time, or to use additional payment vendors, at
@@ -95,22 +120,32 @@
see the information regarding analytics providers discussed further below.
</p>
<ul>
<li><strong>Session Cookies</strong>: We use session cookies to make it easier for you to navigate our Service. A
session ID cookie expires when you close the Service.</li>
<li><strong>Persistent Cookies</strong>: A persistent cookie remains on your device for an extended period of time or
<li>
<strong>Session Cookies</strong>: We use session cookies to make it easier for you to navigate our Service. A
session ID cookie expires when you close the Service.
</li>
<li>
<strong>Persistent Cookies</strong>: A persistent cookie remains on your device for an extended period of time or
until you delete it. Persistent cookies enable us to better understand how you interact with the Service and to
provide visitors with a better and more personalized experience by retaining information about their identity and
preferences, including but not limited to keeping them logged in even if the browser is closed.</li>
preferences, including but not limited to keeping them logged in even if the browser is closed.
</li>
</ul>
<p>
If you do not want us to place a cookie on your device, you may be able to turn that feature off on your
device. You may refuse to accept cookies from the Service at any time by activating the setting on your
browser which allows you to refuse cookies. Further information about the procedure to follow in order to
disable cookies can be found on your Internet browser providers website via your help screen. You may
wish to refer to <a href='http://www.allaboutcookies.org/manage-cookies/index.html' target='_blank'>
http://www.allaboutcookies.org/manage-cookies/index.html</a> for information on commonly used browsers.
wish to refer to <a
href="http://www.allaboutcookies.org/manage-cookies/index.html"
target="_blank"
>
http://www.allaboutcookies.org/manage-cookies/index.html</a> for information on commonly used browsers.
For more information about targeting and advertising cookies and how you can opt out, you can also visit
<a href='http://optout.aboutads.info' target='_blank'>http://optout.aboutads.info</a>. Please be aware
<a
href="http://optout.aboutads.info"
target="_blank"
>http://optout.aboutads.info</a>. Please be aware
that if cookies are disabled, not all features of the Service may operate properly or as intended.
</p>
<h3>Third-Party Analytics Providers</h3>
@@ -129,8 +164,18 @@
advised that if you opt out of any service, you may not be able to use the full functionality of the Service.
</p>
<ul>
<li>For Google Analytics, visit: <a href='https://marketingplatform.google.com/about/analytics/' target='_blank'>https://marketingplatform.google.com/about/analytics/</a></li>
<li>For Amplitude, visit: <a href='https://amplitude.com/privacy' target='_blank'>https://amplitude.com/privacy</a></li>
<li>
For Google Analytics, visit: <a
href="https://marketingplatform.google.com/about/analytics/"
target="_blank"
>https://marketingplatform.google.com/about/analytics/</a>
</li>
<li>
For Amplitude, visit: <a
href="https://amplitude.com/privacy"
target="_blank"
>https://amplitude.com/privacy</a>
</li>
</ul>
<h3>Third-Party Advertisers/Remarketers</h3>
<p>
@@ -150,7 +195,9 @@
</p>
<p>
For more information on our advertising partner Google AdMob, please visit <a
href='https://policies.google.com/privacy?hl=en' target='_blank'>https://policies.google.com/privacy?hl=en</a>.
href="https://policies.google.com/privacy?hl=en"
target="_blank"
>https://policies.google.com/privacy?hl=en</a>.
</p>
<h3>Geolocation Information</h3>
<p>
@@ -229,7 +276,7 @@
</p>
<p>
You may opt out at any time from the use of your personal information for direct marketing purposes by
emailing the instructions to <a href='mailto:admin@habitica.com'>admin@habitica.com</a> or by clicking
emailing the instructions to <a href="mailto:admin@habitica.com">admin@habitica.com</a> or by clicking
on the Unsubscribe link located on the bottom of any HabitRPG marketing email and following the
instructions found on the page to which the link takes you. Please allow us a reasonable time to process
your request. You cannot opt out of receiving transactional e-mails related to the Service.
@@ -274,7 +321,7 @@
direct marketing purposes during the preceding calendar year, including the names and addresses of those
third parties, and examples of the types of Service or products marketed by those third parties. If you wish
to submit a request pursuant to Section 1798.83, please contact HabitRPG via email at
<a href='mailto:admin@habitica.com'>admin@habitica.com</a>.
<a href="mailto:admin@habitica.com">admin@habitica.com</a>.
</p>
<h2>NEVADA PRIVACY RIGHTS</h2>
<p>
@@ -291,7 +338,7 @@
<h2>LINKS TO EXTERNAL WEBSITES</h2>
<p>
The Service may contain links to third-party websites (<span style="text-decoration: underline;">External
Sites</span>). HabitRPG has no control over the privacy practices or the content of any such External Sites.
Sites</span>). HabitRPG has no control over the privacy practices or the content of any such External Sites.
As such, we are not responsible for the content or the privacy policies of such External Sites. You should
check the applicable privacy notice or privacy policy and terms of use when visiting any such External Sites.
</p>
@@ -306,8 +353,8 @@
</p>
<h2>HOW TO CONTACT US</h2>
<p>
If you have questions about this Privacy Notice, please e-mail us at <a href='mailto:admin@habitica.com'>
admin@habitica.com</a> with Privacy Notice in the subject line.
If you have questions about this Privacy Notice, please e-mail us at <a href="mailto:admin@habitica.com">
admin@habitica.com</a> with Privacy Notice in the subject line.
</p>
<address>
<strong>HabitRPG, Inc.</strong>

View File

@@ -2,11 +2,20 @@
<!-- eslint-disable max-len -->
<div class="container-fluid">
<h1>Terms of Service</h1>
<p class="strong pagemeta">Last Updated: December 14, 2021</p>
<p class="strong pagemeta">
Last Updated: December 14, 2021
</p>
<p>Thanks for choosing Habitica!</p>
<p>Our Service is provided by HabitRPG, Inc. ("HabitRPG"). By accepting these Terms of Service and our Privacy Policy located at: <a href="https://habitica.com/static/privacy" target="_blank">https://habitica.com/static/privacy</a> (collectively, the "Agreement"), registering for the Service (as defined below), accessing or using any part of the Service, or otherwise manifesting your assent to the Agreement, you acknowledge that you have read, understood, and agree to be legally bound by the Agreement. If you do not agree to (or cannot comply with) the Agreement, you are not permitted to access or use the Service.</p>
<p>
Our Service is provided by HabitRPG, Inc. ("HabitRPG"). By accepting these Terms of Service and our Privacy Policy located at: <a
href="https://habitica.com/static/privacy"
target="_blank"
>https://habitica.com/static/privacy</a> (collectively, the "Agreement"), registering for the Service (as defined below), accessing or using any part of the Service, or otherwise manifesting your assent to the Agreement, you acknowledge that you have read, understood, and agree to be legally bound by the Agreement. If you do not agree to (or cannot comply with) the Agreement, you are not permitted to access or use the Service.
</p>
<p>By accepting or agreeing to this Agreement on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the Agreement and, in such event, "you" and "your" will refer and apply to that company or other legal entity.</p>
<p class="strong">THE SECTIONS BELOW TITLED "BINDING ARBITRATION," AND "CLASS ACTION WAIVER" CONTAIN A BINDING ARBITRATION AGREEMENT AND CLASS ACTION WAIVER. THEY AFFECT YOUR LEGAL RIGHTS. PLEASE READ THEM.</p>
<p class="strong">
THE SECTIONS BELOW TITLED "BINDING ARBITRATION," AND "CLASS ACTION WAIVER" CONTAIN A BINDING ARBITRATION AGREEMENT AND CLASS ACTION WAIVER. THEY AFFECT YOUR LEGAL RIGHTS. PLEASE READ THEM.
</p>
<h2>Changes to the Terms of Service</h2>
<p>These Terms of Service are effective as of the last updated date stated at the top of this page. We may change these Terms of Service from time to time with or without notice to you. By accessing the Service after we make any such changes to this Terms of Service, you are deemed to have accepted such changes. Please be aware that, to the extent permitted by applicable law, our use of the information collected is governed by the Terms of Service in effect at the time we collect the information. Please refer back to this Terms of Service on a regular basis.</p>
<p>Our Service allows you to upload, store, send, download, or receive content, including but not limited to information, text, graphics, artwork, or other material ("Content"). You retain ownership of any intellectual property rights that you have in your Content. You hereby grant HabitRPG a worldwide, perpetual, irrevocable, sublicenseable, transferable, assignable, non-exclusive, and royalty-free right and license to use, reproduce, distribute, adapt, modify, translate, create derivative works of, publicly perform, publicly display, digitally perform, make, have made, sell, offer for sale, and import your Content, including all intellectual property rights therein. You represent, warrant, and agree that your Content does not and will not violate any third-party intellectual property, privacy, or other rights, and that you have all right, title and interest in and to your Content required to grant us the license above. We reserve the right at all times, but have no obligation, to delete or refuse to use or distribute any Content on or through the Service, including your Content.</p>
@@ -22,9 +31,9 @@
<p>HabitRPG reserves the right, in its sole discretion, to add, modify, or remove functionalities or features from the Service, and improve, change and/or update the Service. We may also suspend or terminate the Service at any time, with or without notice to you.</p>
<p>You can choose to stop using our Service at any time. We may suspend or cease providing the Service to you at any time, including if we determine in our sole discretion, that:</p>
<ul>
<li>You have violated any part of this Agreement, the Privacy Policy, or the Community Guidelines;</li>
<li>We have stopped offering the Service in your region; or</li>
<li>Doing so would be in the best interests of our community, the Service, or the rights of a third party.</li>
<li>You have violated any part of this Agreement, the Privacy Policy, or the Community Guidelines;</li>
<li>We have stopped offering the Service in your region; or</li>
<li>Doing so would be in the best interests of our community, the Service, or the rights of a third party.</li>
</ul>
<p>If your account is terminated, you will no longer have access to it, including to any of the associated data or Content. You will not be entitled to any refunds and we will have no liability to you. We also reserve the right to terminate any other accounts you may have created, as well as access to any other HabitRPG Service (also without refunds or liability to you).</p>
<p>You understand and agree that using the Service comes with the risk that your account may be terminated or suspended at our discretion and at any time. Please keep this risk in mind and comport yourself appropriately.</p>
@@ -35,31 +44,36 @@
<p>Using our Service does not grant you ownership of any intellectual property rights in our Service or the content you may have access to. You may not use any copyrighted content in our Service unless you obtain permission from the content owner and/or are otherwise permitted by law. The Terms do not grant you the right to use any branding or logos used in our Service. Our Service may display some logos, trademarks, or branding materials that are not the property of HabitRPG. Such content is the sole responsibility of the entity that makes it available.</p>
<p>You may not abuse and/or misuse our Service, including but not limited to the following actions:</p>
<ul>
<li>Using the Service for any unlawful purposes or activities;</li>
<li>Uploading any content to the Service in violation of any applicable law, including but not limited to intellectual property laws and publicity laws;</li>
<li>Sending unsolicited promotions or advertisements;</li>
<li>Accessing or tampering with the Service's server systems;</li>
<li>Interfering with or disrupting the access of any user, host, or network;</li>
<li>Abusing or submitting excessively frequent requests to the Service via the API</li>
<li>Spamming chat, whether for personal or commercial purposes, by disrupting the flow of conversation with repeated postings;</li>
<li>Impersonating any person, business, or entity, including an employee of HabitRPG, or member of the Habitica moderation team, or communicating in any way that makes it appear that the communication originates from Habitica staff or HabitRPG;</li>
<li>Transmitting or communicating any content which, in the sole and exclusive discretion of HabitRPG, is deemed offensive, including language that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, sexually explicit, or racially, ethically, or otherwise objectionable,</li>
<li>Participating in any action which, in the sole and exclusive judgment of HabitRPG, defrauds any other user of the Game, including by scamming or social engineering; or</li>
<li>Inducing or encouraging others to violate the Community Guidelines or the Agreement.</li>
<li>Using the Service for any unlawful purposes or activities;</li>
<li>Uploading any content to the Service in violation of any applicable law, including but not limited to intellectual property laws and publicity laws;</li>
<li>Sending unsolicited promotions or advertisements;</li>
<li>Accessing or tampering with the Service's server systems;</li>
<li>Interfering with or disrupting the access of any user, host, or network;</li>
<li>Abusing or submitting excessively frequent requests to the Service via the API</li>
<li>Spamming chat, whether for personal or commercial purposes, by disrupting the flow of conversation with repeated postings;</li>
<li>Impersonating any person, business, or entity, including an employee of HabitRPG, or member of the Habitica moderation team, or communicating in any way that makes it appear that the communication originates from Habitica staff or HabitRPG;</li>
<li>Transmitting or communicating any content which, in the sole and exclusive discretion of HabitRPG, is deemed offensive, including language that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, sexually explicit, or racially, ethically, or otherwise objectionable,</li>
<li>Participating in any action which, in the sole and exclusive judgment of HabitRPG, defrauds any other user of the Game, including by scamming or social engineering; or</li>
<li>Inducing or encouraging others to violate the Community Guidelines or the Agreement.</li>
</ul>
<p>HabitRPG, in its sole discretion, will determine what constitutes abuse and/or misuse of our Service.</p>
<h2>Premium Service and Payments</h2>
<p>You may choose our free Service or paid Service ("Premium") depending on your needs. We do not guarantee when, if ever, Premium features will be available in the free Service. You may upgrade from free Service to Premium at any time by any of the following methods:</p>
<ul>
<li>Web: Selecting the user icon in the top right corner and selecting "Subscription" from the dropdown menu,</li>
<li>Web: Clicking the green gem icon in the navigation bar at the top of the screen and following instructions to Subscribe or Buy Gems,</li>
<li>Android: Tap the menu icon in the top left corner of the main screen and select "Gems & Subscription". Follow the instructions to make a purchase.</li>
<li>iOS: Tap the menu icon in the lower right and select "Gems & Subscriptions". Follow the instructions to make a purchase.</li>
<li>Web: Selecting the user icon in the top right corner and selecting "Subscription" from the dropdown menu,</li>
<li>Web: Clicking the green gem icon in the navigation bar at the top of the screen and following instructions to Subscribe or Buy Gems,</li>
<li>Android: Tap the menu icon in the top left corner of the main screen and select "Gems & Subscription". Follow the instructions to make a purchase.</li>
<li>iOS: Tap the menu icon in the lower right and select "Gems & Subscriptions". Follow the instructions to make a purchase.</li>
</ul>
<p>You will be charged the amount shown on Pricing before you can access Premium Service. All prices shown on Pricing are inclusive of any applicable sales taxes, levies, value-added taxes, or duties imposed by taxing authorities, and you are responsible for payment of all such taxes, levies, or duties. We may revise the Pricing at any time and may, from time to time, modify, amend, or supplement our fees and fee-billing methods. Such changes shall be effective upon posting on the Pricing page or elsewhere in the Service. If there is a dispute regarding payment of fees to us, we reserve the right to terminate or suspend your account at our sole discretion.</p>
<p>BY PURCHASING PREMIUM YOU EXPRESSLY UNDERSTAND AND AGREE TO OUR REFUND POLICY:</p>
<p>WITHIN THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE AS SHOWN ON YOUR PAYMENT BILL, YOU CAN REQUEST A FULL REFUND BY CONTACTING US AT ADMIN@HABITICA.COM. AFTER THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE, ANY PAYMENT REFUND IS SOLELY SUBJECT TO OUR DISCRETION. THE REFUND SHALL BE YOUR SOLE AND EXCLUSIVE REMEDY.</p>
<p>FOR ANY CUSTOMER WHO PURCHASED PREMIUM IN APPLE INC.'s APP STORE ("APP STORE"), PLEASE CONTACT APPLE INC.'s SUPPORT TEAM: <a href="http://reportaproblem.apple.com" target="_blank">http://reportaproblem.apple.com</a>. APPLE'S APP STORE DOES NOT ALLOW DEVELOPERS TO ISSUE REFUND FOR APP STORE PURCHASES MADE BY CUSTOMERS.</p>
<p>
FOR ANY CUSTOMER WHO PURCHASED PREMIUM IN APPLE INC.'s APP STORE ("APP STORE"), PLEASE CONTACT APPLE INC.'s SUPPORT TEAM: <a
href="http://reportaproblem.apple.com"
target="_blank"
>http://reportaproblem.apple.com</a>. APPLE'S APP STORE DOES NOT ALLOW DEVELOPERS TO ISSUE REFUND FOR APP STORE PURCHASES MADE BY CUSTOMERS.
</p>
<h2>Warranty Disclaimer</h2>
<p>THE SERVICE AND ANY CONTENT MADE AVAILABLE BY HABITRPG VIA THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT ANY WARRANTIES OF ANY KIND, INCLUDING, WITHOUT LIMITATION, THAT THE SERVICE OR CONTENT WILL OPERATE ERROR-FREE OR THAT THE SERVICE OR CONTENT OR ITS SERVERS ARE FREE OF COMPUTER VIRUSES OR SIMILAR CONTAMINATION OR DESTRUCTIVE FEATURES.</p>
<p>WE DISCLAIM ALL WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, MERCHANTABILITY, NON-INFRINGEMENT OF THIRD PARTIES' RIGHTS, AND FITNESS FOR PARTICULAR PURPOSE AND ANY WARRANTIES ARISING FROM A COURSE OF DEALING, COURSE OF PERFORMANCE, OR USAGE OF TRADE.</p>
@@ -71,7 +85,12 @@
<h2>Compliance with Applicable Laws</h2>
<p>The Service is based in the United States. We make no claims concerning whether the Service or posted content may be downloaded, viewed, or be appropriate for use outside of the United States. If you access the Service or such content from outside of the United States, you do so at your own risk. Whether inside or outside of the United States, you are solely responsible for ensuring compliance with the laws of your specific jurisdiction.</p>
<h2>Binding Arbitration</h2>
<p>In the event of a dispute arising under or relating to this Agreement or the Service (each, a "<u>Dispute</u>"), such dispute will be finally and exclusively resolved by binding arbitration governed by the Federal Arbitration Act ("<u>FAA</u>"). Any election to arbitrate, at any time, shall be final and binding on the other party. NEITHER PARTY SHALL HAVE THE RIGHT TO LITIGATE SUCH CLAIM IN COURT OR TO HAVE A JURY TRIAL, EXCEPT EITHER PARTY MAY BRING ITS CLAIM IN ITS LOCAL SMALL CLAIMS COURT, IF PERMITTED BY THAT SMALL CLAIMS COURT RULES AND IF WITHIN SUCH COURT'S JURISDICTION. ARBITRATION IS DIFFERENT FROM COURT, AND DISCOVERY AND APPEAL RIGHTS MAY ALSO BE LIMITED IN ARBITRATION. All disputes will be resolved before a neutral arbitrator selected jointly by the parties, whose decision will be final, except for a limited right of appeal under the FAA. The arbitration shall be commenced and conducted by JAMS pursuant to its then current Comprehensive Arbitration Rules and Procedures and in accordance with the Expedited Procedures in those rules, or, where appropriate, pursuant to JAMS' Streamlined Arbitration Rules and Procedures. All applicable JAMS' rules and procedures are available at the JAMS website <a href="https://www.jamsadr.com" target="_blank">www.jamsadr.com</a>. Each party will be responsible for paying any JAMS filing, administrative, and arbitrator fees in accordance with JAMS rules. Judgment on the arbitrator's award may be entered in any court having jurisdiction. This clause shall not preclude parties from seeking provisional remedies in aid of arbitration from a court of appropriate jurisdiction. The arbitration may be conducted in person, through the submission of documents, by phone, or online. If conducted in person, the arbitration shall take place in the United States county where you reside. The parties may litigate in court to compel arbitration, to stay a proceeding pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. The parties shall cooperate in good faith in the voluntary and informal exchange of all non-privileged documents and other information (including electronically stored information) relevant to the Dispute immediately after commencement of the arbitration. As set forth below, nothing in this Agreement will prevent us from seeking injunctive relief in any court of competent jurisdiction as necessary to protect our proprietary interests.</p>
<p>
In the event of a dispute arising under or relating to this Agreement or the Service (each, a "<u>Dispute</u>"), such dispute will be finally and exclusively resolved by binding arbitration governed by the Federal Arbitration Act ("<u>FAA</u>"). Any election to arbitrate, at any time, shall be final and binding on the other party. NEITHER PARTY SHALL HAVE THE RIGHT TO LITIGATE SUCH CLAIM IN COURT OR TO HAVE A JURY TRIAL, EXCEPT EITHER PARTY MAY BRING ITS CLAIM IN ITS LOCAL SMALL CLAIMS COURT, IF PERMITTED BY THAT SMALL CLAIMS COURT RULES AND IF WITHIN SUCH COURT'S JURISDICTION. ARBITRATION IS DIFFERENT FROM COURT, AND DISCOVERY AND APPEAL RIGHTS MAY ALSO BE LIMITED IN ARBITRATION. All disputes will be resolved before a neutral arbitrator selected jointly by the parties, whose decision will be final, except for a limited right of appeal under the FAA. The arbitration shall be commenced and conducted by JAMS pursuant to its then current Comprehensive Arbitration Rules and Procedures and in accordance with the Expedited Procedures in those rules, or, where appropriate, pursuant to JAMS' Streamlined Arbitration Rules and Procedures. All applicable JAMS' rules and procedures are available at the JAMS website <a
href="https://www.jamsadr.com"
target="_blank"
>www.jamsadr.com</a>. Each party will be responsible for paying any JAMS filing, administrative, and arbitrator fees in accordance with JAMS rules. Judgment on the arbitrator's award may be entered in any court having jurisdiction. This clause shall not preclude parties from seeking provisional remedies in aid of arbitration from a court of appropriate jurisdiction. The arbitration may be conducted in person, through the submission of documents, by phone, or online. If conducted in person, the arbitration shall take place in the United States county where you reside. The parties may litigate in court to compel arbitration, to stay a proceeding pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. The parties shall cooperate in good faith in the voluntary and informal exchange of all non-privileged documents and other information (including electronically stored information) relevant to the Dispute immediately after commencement of the arbitration. As set forth below, nothing in this Agreement will prevent us from seeking injunctive relief in any court of competent jurisdiction as necessary to protect our proprietary interests.
</p>
<p>ANY CLAIMS, ACTIONS OR PROCEEDINGS BY YOU MUST BE COMMENCED WITHIN ONE YEAR AFTER THE EVENT THAT GAVE RISE TO YOUR CLAIM OCCURS. ALL OTHER CLAIMS YOU MAY HAVE ARE PERMANENTLY BARRED.</p>
<h2>Class Action Waiver</h2>
<p>You agree that any arbitration or proceeding shall be limited to the Dispute between us and you individually. To the full extent permitted by law, (i) no arbitration or proceeding shall be joined with any other; (ii) there is no right or authority for any Dispute to be arbitrated or resolved on a class action-basis or to utilize class action procedures; and (iii) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons. YOU AGREE THAT YOU MAY BRING CLAIMS AGAINST US ONLY IN YOUR INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING.</p>

View File

@@ -128,6 +128,6 @@
"achievementZodiacZookeeperText": "Hat alle Tierkreiszeichen-Tiere ausgebrütet: Ratte, Kalb, Kaninchen, Schlange, Fohlen, Schaf, Affe, Hahn, Wolf, Tiger, Fliegendes Ferkel, und Drache!",
"achievementZodiacZookeeperModalText": "Du hast alle Tierkreiszeichen-Tiere gesammelt!",
"achievementBirdsOfAFeather": "Fliegende Freunde",
"achievementBirdsOfAFeatherText": "Hat alle fliegenden Haustiere ausgebrütet: Fliegendes Ferkel, Eule, Papagei, Pterodactylus, Greif, und Falke.",
"achievementBirdsOfAFeatherText": "Hat alle fliegenden Haustiere ausgebrütet: Fliegendes Ferkel, Eule, Papagei, Pterodactylus, Greif, Falke, Pfau, und Hahn.",
"achievementBirdsOfAFeatherModalText": "Du hast alle fliegenden Haustiere gesammelt!"
}

View File

@@ -2594,5 +2594,19 @@
"headSpecialSpring2022WarriorText": "Regenmantelkapuze",
"headSpecialSpring2022WarriorNotes": "Huch, es sieht nach Regen aus! Steh auf und zieh Dir die Kapuze über, um trocken zu bleiben. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"shieldSpecialSpring2022WarriorText": "Regenwolke",
"shieldSpecialSpring2022WarriorNotes": "Kennst Du diese Tage, an denen es sich anfühlt, als würde Dir eine Regenwolke auf Schritt und Tritt folgen? Tja, Du kannst Dich glücklich schätzen, denn schon bald werden die schönsten Blumen zu Deinen Füßen blühen! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Frühlingsausrüstung."
"shieldSpecialSpring2022WarriorNotes": "Kennst Du diese Tage, an denen es sich anfühlt, als würde Dir eine Regenwolke auf Schritt und Tritt folgen? Tja, Du kannst Dich glücklich schätzen, denn schon bald werden die schönsten Blumen zu Deinen Füßen blühen! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"weaponSpecialSpring2022MageText": "Forsythienstab",
"weaponSpecialSpring2022MageNotes": "Diese strahlend gelben Glocken sind bereit, Deine mächtige Frühlingsmagie zu lenken. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"armorSpecialSpring2022MageText": "Forsythienrobe",
"headSpecialSpring2022MageText": "Forsythienhelm",
"headSpecialSpring2022MageNotes": "Mithilfe dieses Helms aus umgedrehten Blüten bleibst Du bei jedem Frühlingsgewitter trocken. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"armorSpecialSpring2022MageNotes": "Diese mit Forsythienblüten geschmückte Robe zeigt allen, dass Du bereit bist, flink und federleicht in den Frühling zu fliegen. Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"weaponSpecialSpring2022HealerText": "Abendsmaragd-Zauberstab",
"weaponSpecialSpring2022HealerNotes": "Benutze diesen Zauberstab, um die Heilkräfte des Abendsmaragds zu entfalten mögen sie Dir Ruhe, Zufriedenheit und Güte bringen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"armorSpecialSpring2022HealerText": "Abendsmaragd-Rüstung",
"armorSpecialSpring2022HealerNotes": " Vertreibe Angst und Alpträume mit diesem grünen Edelstein-Gewand. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"headSpecialSpring2022HealerText": "Abendsmaragd-Helm",
"headSpecialSpring2022HealerNotes": "Dieser geheimnisvolle Helm bewahrt Deine Privatsphäre während Du diverse Aufgaben anpackst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Frühlingsausrüstung.",
"shieldSpecialSpring2022HealerText": "Abendsmaragd-Schild",
"shieldSpecialSpring2022HealerNotes": "Aus geschmolzenem Stein aus der Erdkruste geformt, kann dieses Schild jedem noch so harten Schlag widerstehen, der ihm in den Weg kommt. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Frühlingsausrüstung."
}

View File

@@ -218,5 +218,7 @@
"winter2022PomegranateMageSet": "Granatapfel (Magier)",
"januaryYYYY": "Januar <%= year %>",
"spring2022MagpieRogueSet": "Elster (Schurke)",
"spring2022RainstormWarriorSet": "Gewitterregen (Krieger)"
"spring2022RainstormWarriorSet": "Gewitterregen (Krieger)",
"spring2022ForsythiaMageSet": "Forsythie (Magier)",
"spring2022PeridotHealerSet": "Abendsmaragd (Heiler)"
}

View File

@@ -55,7 +55,7 @@
"newUsername": "Neuer Benutzername",
"dangerZone": "Gefahrenzone",
"resetText1": "WARNUNG! Es werden große Teile Deines Accounts zurückgesetzt. Wir raten dringend davon ab. Jedoch finden einige Spieler diese Funktion sinnvoll, um nach einem anfänglichen Testen der Seite neu beginnen zu können.",
"resetText2": "Du verlierst alle Deine Level, Gold- und Erfahrungspunkte. Alle Deine Aufgaben (außer Aufgaben aus Herausforderungen) werden permanent gelöscht, und Du verlierst alle ihre historischen Daten. Du verlierst Deine gesamte Ausrüstung außer Abonnement-Überraschungsgegenstände und gratis Erinnerungsgegenstände. Du wirst die Möglichkeit haben, alle gelöschten Gegenstände zurückzukaufen, inklusive allen Gegenständen limitierter Ausgabe (Du musst für klassenspezifische Ausrüstung der richtigen Klasse angehören, um sie zurückzukaufen). Du behältst Deine aktuelle Klasse, Deine Erfolge, und Deine Haus- und Reittiere. Möglicherweise möchtest Du lieber die Sphäre der Wiedergeburt nutzen, die eine weit sicherere Option darstellt und Deine Aufgaben und Ausrüstung beibehält.",
"resetText2": "Du verlierst alle Deine Level, Dein Gold und Deine Erfahrungspunkte. Alle Deine Aufgaben (außer Aufgaben aus Herausforderungen) werden permanent gelöscht, und Du verlierst alle ihre historischen Daten. Du verlierst Deine gesamte Ausrüstung außer Abonnement-Überraschungsgegenstände und gratis Erinnerungsgegenstände. Du wirst die Möglichkeit haben, alle gelöschten Gegenstände zurückzukaufen, inklusive allen Gegenständen limitierter Ausgabe (Du musst für klassenspezifische Ausrüstung der richtigen Klasse angehören, um sie zurückzukaufen). Du behältst Deine aktuelle Klasse, Deine Erfolge, und Deine Haus- und Reittiere. Möglicherweise möchtest Du lieber die Sphäre der Wiedergeburt nutzen, die eine weit sicherere Option darstellt und Deine Aufgaben und Ausrüstung beibehält.",
"deleteLocalAccountText": "Bist Du sicher? Dies wird Dein Konto für immer löschen und es kann nicht wiederhergestellt werden! Wenn Du Habitica wieder verwenden möchtest, musst Du ein neues Konto registrieren. Gesparte oder verbrauchte Edelsteine werden nicht ersetzt. Wenn Du absolut sicher bist, dann tippe Dein Passwort in das Textfeld unten ein.",
"deleteSocialAccountText": "Bist Du sicher? Dies wird Dein Konto für immer löschen und es kann nicht wiederhergestellt werden! Wenn Du Habitica wieder verwenden möchtest, musst Du ein neues Konto registrieren. Gesparte oder verbrauchte Edelsteine werden nicht ersetzt. Wenn Du absolut sicher bist, dann tippe \"<%= magicWord %>\" in das Textfeld unten ein.",
"API": "API",

View File

@@ -90,6 +90,7 @@
"addedLocalAuth": "Successfully added local authentication",
"data": "Δεδομένα",
"email": "Email",
"emailOrUsername": "Username or Email",
"registerWithSocial": "Register with <%= network %>",
"registeredWithSocial": "Registered with <%= network %>",
"emailNotifications": "Ειδοποιήσεις email",

View File

@@ -125,9 +125,9 @@
"achievementShadeOfItAllText": "Has tamed all Shade Mounts.",
"achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!",
"achievementZodiacZookeeper": "Zodiac Zookeeper",
"achievementZodiacZookeeperText": "Has hatched all the zodiac pets: Rat, Cow, Bunny, Snake, Horse, Sheep, Monkey, Rooster, Wolf, Tiger, Flying Pig, and Dragon!",
"achievementZodiacZookeeperText": "Has hatched all standard colors of zodiac pets: Rat, Cow, Bunny, Snake, Horse, Sheep, Monkey, Rooster, Wolf, Tiger, Flying Pig, and Dragon!",
"achievementZodiacZookeeperModalText": "You collected all the zodiac pets!",
"achievementBirdsOfAFeather": "Birds of a Feather",
"achievementBirdsOfAFeatherText": "Has hatched all the flying pets: Flying Pig, Owl, Parrot, Pterodactyl, Gryphon, Falcon, Peacock, and Rooster.",
"achievementBirdsOfAFeatherText": "Has hatched all standard colors of flying pets: Flying Pig, Owl, Parrot, Pterodactyl, Gryphon, Falcon, Peacock, and Rooster.",
"achievementBirdsOfAFeatherModalText":"You collected all the flying pets!"
}

View File

@@ -770,6 +770,14 @@
"backgroundFloweringPrairieText": "Flowering Prairie",
"backgroundFloweringPrairieNotes": "Frolic through a Flowering Prairie.",
"backgrounds042022": "SET 95: Released April 2022",
"backgroundBlossomingTreesText": "Blossoming Trees",
"backgroundBlossomingTreesNotes": "Dally beneath Blossoming Trees.",
"backgroundFlowerShopText": "Flower Shop",
"backgroundFlowerShopNotes": "Enjoy the sweet scent of a Flower Shop.",
"backgroundSpringtimeLakeText": "Springtime Lake",
"backgroundSpringtimeLakeNotes": "Take in the sights along the shores of a Springtime Lake.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",

View File

@@ -12,7 +12,7 @@
"companyDonate": "Donate",
"forgotPassword": "Forgot Password?",
"emailNewPass": "Email a Password Reset Link",
"forgotPasswordSteps": "Enter the email address you used to register your Habitica account.",
"forgotPasswordSteps": "Enter your username or the email address you used to register your Habitica account.",
"sendLink": "Send Link",
"footerDevs": "Developers",
"footerCommunity": "Community",
@@ -125,7 +125,7 @@
"passwordConfirmationMatch": "Password confirmation doesn't match password.",
"minPasswordLength": "Password must be 8 characters or more.",
"passwordResetPage": "Reset Password",
"passwordReset": "If we have your email on file, instructions for setting a new password have been sent to your email.",
"passwordReset": "If we have your email or username on file, instructions for setting a new password have been sent to your email.",
"invalidLoginCredentialsLong": "Uh-oh - your email address / username or password is incorrect.\n- Make sure they are typed correctly. Your username and password are case-sensitive.\n- You may have signed up with Facebook or Google-sign-in, not email so double-check by trying them.\n- If you forgot your password, click \"Forgot Password\".",
"invalidCredentials": "There is no account that uses those credentials.",
"accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the Community Guidelines (https://habitica.com/static/community-guidelines) or Terms of Service (https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please include your @Username in the email.",
@@ -143,7 +143,8 @@
"confirmPassword": "Confirm Password",
"usernameLimitations": "Username must be 1 to 20 characters, containing only letters a to z, numbers 0 to 9, hyphens, or underscores, and cannot include any inappropriate terms.",
"usernamePlaceholder": "e.g., HabitRabbit",
"emailPlaceholder": "e.g., rabbit@example.com",
"emailPlaceholder": "e.g., gryphon@example.com",
"emailUsernamePlaceholder": "e.g., habitrabbit or gryphon@example.com",
"passwordPlaceholder": "e.g., ******************",
"confirmPasswordPlaceholder": "Make sure it's the same password!",
"joinHabitica": "Join Habitica",

View File

@@ -431,7 +431,7 @@
"weaponSpecialSpring2022RogueText": "Giant Earring Stud",
"weaponSpecialSpring2022RogueNotes": "A shiny! Its so shiny and gleaming and pretty and nice and all yours! Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022WarriorText": "Inside-Out Umbrella",
"weaponSpecialSpring2022WarriorNotes": "Yikes! Guess that wind was a little stronger than you thought, huh? Increases Strength by <%= str %>, Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022WarriorNotes": "Yikes! Guess that wind was a little stronger than you thought, huh? Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022MageText": "Forsythia Staff",
"weaponSpecialSpring2022MageNotes": "These bright yellow bells are ready to channel your powerful springtime magic. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022HealerText": "Peridot Wand",
@@ -1042,9 +1042,9 @@
"armorSpecialSpring2022WarriorText": "Rain Slicker",
"armorSpecialSpring2022WarriorNotes": "This slicker and boots are so formidable you could sing in the rain or jump in every puddle but still be warm and dry! Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022MageText": "Forsythia Robe",
"armorSpecialSpring2022MageNotes": "Show youre ready to spring forward into the season with this robe adorned with forsythia flower petals. Intelligence by <%= int %>.Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022MageNotes": "Show youre ready to spring forward into the season with this robe adorned with forsythia flower petals. Increases Intelligence by <%= int %>. Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022HealerText": "Peridot Armor",
"armorSpecialSpring2022HealerNotes": " Drive away fears and nightmares simply by wearing this green gem garment. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022HealerNotes": "Drive away fears and nightmares simply by wearing this green gem garment. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
@@ -1326,7 +1326,9 @@
"armorArmoireSoftVioletSuitText": "Soft Violet Suit",
"armorArmoireSoftVioletSuitNotes": "Purple is a luxurious color. Relax in style after youve accomplished all your daily tasks. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Violet Loungewear Set (Item 2 of 3).",
"armorArmoireGardenersOverallsText": "Gardener's Overalls",
"armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).",
"armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).",
"armorArmoireStrawRaincoatText": "Straw Raincoat",
"armorArmoireStrawRaincoatNotes":"This woven straw cape will keep you dry and your armor from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -1737,7 +1739,7 @@
"headSpecialSpring2022WarriorText": "Rain Slicker Hood",
"headSpecialSpring2022WarriorNotes": "Tut tut, it looks like rain! Stand tall and pull up your hood to stay dry. Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022MageText": "Forsythia Helmet",
"headSpecialSpring2022MageNotes": "Stay dry during a rainstorm with this protective helmet of downturned petals.Increases Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022MageNotes": "Stay dry during a rainstorm with this protective helmet of downturned petals. Increases Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022HealerText": "Peridot Helmet",
"headSpecialSpring2022HealerNotes": "This mysterious helmet preserves your privacy as you tackle your tasks. Increases Intelligence by <%= int %>. Limited Edition 2022 Spring Gear.",
@@ -2044,7 +2046,9 @@
"headArmoireShootingStarCrownText": "Star Crown",
"headArmoireShootingStarCrownNotes": "With this brightly shining headpiece, you will literally be the star of your own adventure! Increases Perception by <%= per %>. Enchanted Armoire: Stardust Set (Item 1 of 3).",
"headArmoireGardenersSunHatText": "Gardener's Sun Hat",
"headArmoireGardenersSunHatNotes": "The bright light of the day star wont shine in your eyes when you wear this wide-brimmed hat. Increases Perception by <%= per %>. Enchanted Armoire: Gardener Set (Item 2 of 4).",
"headArmoireGardenersSunHatNotes": "The bright light of the day star wont shine in your eyes when you wear this wide-brimmed hat. Increases Perception by <%= per %>. Enchanted Armoire: Gardener Set (Item 2 of 4).",
"headArmoireStrawRainHatText": "Straw Rain Hat",
"headArmoireStrawRainHatNotes": "Youll be able to spot every obstacle in your path when you wear this water-resistant, conical hat. Increases Perception by <%= per %>. Enchanted Armoire: Straw Raincoat Set (Item 2 of 2).",
"offhand": "off-hand item",
"offHandCapitalized": "Off-Hand Item",

View File

@@ -56,7 +56,7 @@
"newUsername": "New Username",
"dangerZone": "Danger Zone",
"resetText1": "WARNING! This resets many parts of your account. This is highly discouraged, but some people find it useful in the beginning after playing with the site for a short time.",
"resetText2": "You will lose all your levels, Gold, and Experience points. All your tasks (except those from challenges) will be deleted permanently and you will lose all of their historical data. You will lose all your equipment except Subscriber Mystery Items and free commemorative items. You will be able to buy the deleted items back, including all limited edition equipment (you will need to be in the correct class to re-buy class-specific gear). You will keep your current class, achievements and your pets and mounts. You might prefer to use an Orb of Rebirth instead, which is a much safer option and which will preserve your tasks and equipment.",
"resetText2": "You will lose all your levels, Gold, and Experience points. All your tasks (except those from challenges) will be deleted permanently and you will lose all of their historical data. You will lose all your equipment except Subscriber Mystery Items and free commemorative items. You will be able to buy the deleted items back, including all limited edition equipment (you will need to be in the correct class to re-buy class-specific gear). You will keep your current class, achievements and your pets and mounts. You might prefer to use an Orb of Rebirth instead, which is a much safer option and which will preserve your tasks and equipment.",
"deleteLocalAccountText": "Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type your password into the text box below.",
"deleteSocialAccountText": "Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type \"<%= magicWord %>\" into the text box below.",
"API": "API",
@@ -134,6 +134,7 @@
"saveCustomDayStart": "Save Custom Day Start",
"registration": "Registration",
"addLocalAuth": "Add Email and Password Login",
"addPasswordAuth": "Add Password",
"generateCodes": "Generate Codes",
"generate": "Generate",
"getCodes": "Get Codes",
@@ -200,9 +201,9 @@
"transaction_create_challenge": "Created challenge",
"transaction_create_guild": "Created guild",
"transaction_change_class": "Changed class",
"transaction_rebirth": "Used orb of rebirth",
"transaction_rebirth": "Used Orb of Rebirth",
"transaction_release_pets": "Released pets",
"transaction_release_mounts": "Released mounts",
"transaction_reroll": "Used fortify potion",
"transaction_reroll": "Used Fortify Potion",
"transaction_subscription_perks": "From subscription perk"
}

View File

@@ -124,9 +124,10 @@
"achievementShadeOfItAllModalText": "¡Has domado todas las monturas sombrías!",
"achievementShadyCustomerText": "Ha conseguido todas las mascotas sombrías.",
"achievementShadyCustomer": "Cliente sombrío",
"achievementZodiacZookeeper": "Cuidador del Zodíaco",
"achievementZodiacZookeeper": "Cuidador del Zodiaco",
"achievementZodiacZookeeperText": "¡Has eclosionado todas las mascotas del zodíaco: Rata, Vaca, Conejo, Serpiente, Caballo, Oveja, Mono, Gallo, Lobo, Tigre, Cerdo Volador y Dragón!",
"achievementZodiacZookeeperModalText": "¡Has conseguido todas las mascotas del zodíaco!",
"achievementBirdsOfAFeatherText": "Has eclosionado todas las mascotas voladoras: Cerdo volador, Búho, Loro, Pterodáctilo, Grifo y Halcón.",
"achievementBirdsOfAFeatherModalText": "¡Has conseguido todas las mascotas voladoras!"
"achievementBirdsOfAFeatherText": "Has eclosionado todas las mascotas voladoras: Cerdo Volador, Búho, Loro, Pterodáctilo, Grifo, Halcón, Pavo Real y Gallo.",
"achievementBirdsOfAFeatherModalText": "¡Has conseguido todas las mascotas voladoras!",
"achievementBirdsOfAFeather": "Aves de Pluma"
}

View File

@@ -216,5 +216,9 @@
"winter2022FireworksRogueSet": "Fuegos Artificiales (Pícaro)",
"winter2022StockingWarriorSet": "Calcetín (Guerrero)",
"winter2022PomegranateMageSet": "Granada (Mago)",
"winter2022IceCrystalHealerSet": "Cristal de Hielo (Sanador)"
"winter2022IceCrystalHealerSet": "Cristal de Hielo (Sanador)",
"spring2022MagpieRogueSet": "Urraca (Pícaro)",
"spring2022RainstormWarriorSet": "Tempestad (Guerrero)",
"spring2022ForsythiaMageSet": "Forsitia (Mago)",
"spring2022PeridotHealerSet": "Peridoto (Sanador)"
}

View File

@@ -1,6 +1,6 @@
{
"unlockedReward": "Has recibido <%= reward %>",
"earnedRewardForDevotion": "Has ganado <%= reward %> por siendo committed por mejorado su vida.",
"earnedRewardForDevotion": "Has ganado <%= reward %> por haberte comprometido a mejorar tu vida.",
"nextRewardUnlocksIn": "Registros hasta tu próximo premio: <%= numberOfCheckinsLeft %>",
"awesome": "¡Genial!",
"countLeft": "Registros hasta la próxima recompensa: <%= count %>",

View File

@@ -200,9 +200,9 @@
"transaction_create_challenge": "Desafío creado",
"transaction_create_guild": "Gremio creado",
"transaction_change_class": "Clase cambiada",
"transaction_rebirth": "Orbe de renacimiento usado",
"transaction_rebirth": "Orbe de Renacimiento usado",
"transaction_release_pets": "Mascotas soltadas",
"transaction_reroll": "Poción de fortalecimiento usada",
"transaction_reroll": "Poción de Fortalecimiento usada",
"hourglassTransactions": "Transacciones de Relojes de Arena",
"transaction_gift_receive": "Recibido de",
"transaction_debug": "Depuración",

View File

@@ -1,7 +1,7 @@
{
"achievement": "Succès",
"onwards": "En avant !",
"levelup": "Pour avoir accompli vos objectifs dans la vraie vie, vous avez gagné un niveau et vous vous retrouvez complètement guéri !",
"levelup": "Pour avoir accompli vos objectifs dans la vraie vie, vous avez gagné un niveau et vous vous êtes complètement rétabli !",
"reachedLevel": "Vous avez atteint le niveau <%= level %>",
"achievementLostMasterclasser": "Achèvement de quêtes : série de la maîtresse des classes",
"achievementLostMasterclasserText": "A achevé les 16 quêtes de la série de quêtes de la maîtresse des classes, et a résolu le mystère de la maîtresse des classes oubliée !",
@@ -127,7 +127,7 @@
"achievementZodiacZookeeper": "Le Zoo-diaque",
"achievementZodiacZookeeperModalText": "Vous avez collecté tous les familiers du zodiaque !",
"achievementZodiacZookeeperText": "A collecté tous les familiers du zodiaque : Rat, Vache, Lapin, Serpent, Cheval, Mouton, Singe, Coq, Loup, Tigre, Cochon volant et Dragon !",
"achievementBirdsOfAFeatherText": "A collecté tous les familiers volants : Cochon volant, Hibou, Perroquet, Pterodactyle, Griffon, et Faucon.",
"achievementBirdsOfAFeatherText": "A collecté tous les familiers volants : Cochon volant, Hibou, Perroquet, Pterodactyle, Griffon, Faucon, Paon et Coq.",
"achievementBirdsOfAFeather": "Oiseaux à une Plume",
"achievementBirdsOfAFeatherModalText": "Vous avez collecté tous les familiers volants !"
}

View File

@@ -2580,5 +2580,39 @@
"shieldArmoireGardenersSpadeNotes": "Que vous creusiez dans le jardin, cherchant un trésor enfoui, ou fabriquant un tunnel secret, cette bêche fiable est à vos côtés. Augmente la force de <%= str %>. Armoire enchantée : ensemble de jardinage (objet 3 de 4).",
"headAccessoryMystery202203Text": "Diadème de libellule intrépide",
"backMystery202203Text": "Ailes de libellule intrépide",
"backMystery202203Notes": "Volez plus vite que toutes les autres créatures du ciel avec ces ailes scintillantes. Ne confère aucun bonus. Équipement d'abonnement de mars 2022."
"backMystery202203Notes": "Volez plus vite que toutes les autres créatures du ciel avec ces ailes scintillantes. Ne confère aucun bonus. Équipement d'abonnement de mars 2022.",
"weaponSpecialSpring2022WarriorText": "Parapluie retourné",
"weaponSpecialSpring2022WarriorNotes": "Oups ! On dirait que ce vent était un peu plus fort que vous l'auriez cru ! Augmente la force de <%= str %>. Équipement en édition limitée du printemps 2022.",
"weaponSpecialSpring2022MageText": "Bâton de forsythia",
"weaponSpecialSpring2022HealerText": "Baguette de péridot",
"armorSpecialSpring2022WarriorText": "Imperméable",
"armorSpecialSpring2022WarriorNotes": "Cet imperméable avec ses bottes est tellement formidable que vous pourriez chanter sous la pluie ou sauter dans toutes les flaques en restant au chaud et au sec ! Augmente la constitution de <%= con %>. Équipement en édition limitée du printemps 2022.",
"armorSpecialSpring2022MageText": "Robe forsythia",
"armorSpecialSpring2022HealerText": "Armure de péridot",
"headSpecialSpring2022RogueText": "Masque de pie",
"headSpecialSpring2022WarriorText": "Capuche d'imperméable",
"headSpecialSpring2022WarriorNotes": "Ouhla, on dirait qu'il pleut. Gardez le dos droit et rabaissez votre capuche pour rester au sec. Augmente la force de <%= str %>. Équipement en édition limitée du printemps 2022.",
"headSpecialSpring2022MageText": "Casque forsythia",
"headSpecialSpring2022HealerText": "Casque de péridot",
"headSpecialSpring2022HealerNotes": "Ce casque mystérieux préserve votre vie privée pendant que vous attaquez vos tâches. Augmente l'intelligence de <%= int %>. Équipement en édition limitée du printemps 2022.",
"shieldSpecialSpring2022HealerText": "Bouclier de péridot",
"shieldSpecialSpring2022HealerNotes": "Fabriqué à partir de pierre liquéfiée dans le manteau supérieur, ce bouclier peut supporter n'importe quel coup qu'il rencontre. Augmente la constitution de <%= con %>. Équipement en édition limitée du printemps 2022.",
"weaponSpecialSpring2022RogueText": "Clou d'oreille géant",
"weaponSpecialSpring2022RogueNotes": "Qu'il est brillant ! Il est si brillant et luisant et joli et agréable et tout à vous ! Augmente la force de <%= str %>. Équipement en édition limitée du printemps 2022.",
"weaponSpecialSpring2022MageNotes": "Ces cloches jaune vif sont prêtes à canaliser votre puissante magie printanière. Augmente l'intelligence de <%= int %> et la perception de <%= per %>. Équipement en édition limitée du printemps 2022.",
"weaponSpecialSpring2022HealerNotes": "Utilisez cette baguette pour profiter des propriétés régénérantes du péridot, que ce soit pour apporter du calme, de la positivité ou de la gaieté de cœur. Augmente l'intelligence de <%= int %>. Équipement en édition limitée du printemps 2022.",
"armorSpecialSpring2022RogueNotes": "Avec des taches iridescentes bleu-gris métallique et des taches plus claires sur vos plumes, vous serez le meilleur ami volant à la fête du printemps ! Augmente la perception de <%= per %>. Équipement en édition limitée du printemps 2022.",
"armorSpecialSpring2022MageNotes": "Montrez que vous vous apprêtez à sauter dans cette nouvelle saison avec cette robe ornée de pétales de forsythia. Augmente l'intelligence de <%= int %>. Équipement en édition limitée du printemps 2022.",
"armorSpecialSpring2022HealerNotes": " Faites fuir les peurs et les cauchemars en portant ces vêtement de gemme verte. Augmente la constitution de <%= con %>. Équipement en édition limitée du printemps 2022.",
"armorSpecialSpring2022RogueText": "Costume de pie",
"headSpecialSpring2022RogueNotes": "Faites preuve d'autant d'intelligence qu'une pie en portant ce masque. Peut-être serez vous également capable de siffler, de triller et d'imitée comme l'une d'elles, aussi. Augmente la perception de <%= per %>. Équipement en édition limitée du printemps 2022.",
"headSpecialSpring2022MageNotes": "Restez au sec pendant les pluies diluviennes avec ce casque protecteur avec des rebords à pétales. Augmente la perception de <%= per %>. Équipement en édition limitée du printemps 2022.",
"shieldSpecialSpring2022WarriorNotes": "Vous avez déjà eu l'impression qu'un nuage pluvieux vous suivait où que vous alliez ? Réjouissez-vous, parce que bientôt les plus jolies fleurs pousseront à vos pieds ! Augmente la constitution de <%= con %>. Équipement en édition limitée du printemps 2022.",
"shieldSpecialSpring2022WarriorText": "Nuage pluvieux",
"armorMystery202204Text": "Capsule d'aventure virtuelle",
"armorMystery202204Notes": "On dirait que vos tâches requièrent maintenant d'appuyer sur ces mystérieux boutons ! Que peuvent-ils bien faire ? Ne confère aucun bonus. Équipement d'abonnement d'avril 2022.",
"eyewearMystery202204BText": "Visage virtuel",
"eyewearMystery202204BNotes": "Quelle est votre humeur du jour ? Exprimez vous avec ces écrans amusants. Ne confère aucun bonus. Équipement d'abonnement d'avril 2022.",
"eyewearMystery202204AText": "Visage virtuel",
"eyewearMystery202204ANotes": "Quelle est votre humeur du jour ? Exprimez vous avec ces écrans amusants. Ne confère aucun bonus. Équipement d'abonnement d'avril 2022."
}

View File

@@ -216,5 +216,9 @@
"winter2022StockingWarriorSet": "Chaussette (Guerrier)",
"winter2022PomegranateMageSet": "Grenade (Mage)",
"winter2022IceCrystalHealerSet": "Cristal de glace (Guérisseur)",
"januaryYYYY": "Janvier <%= year %>"
"januaryYYYY": "Janvier <%= year %>",
"spring2022MagpieRogueSet": "Pie (Voleur)",
"spring2022RainstormWarriorSet": "Flot diluvien (Guerrier)",
"spring2022ForsythiaMageSet": "Forsythia (Mage)",
"spring2022PeridotHealerSet": "Péridot (Guérisseur)"
}

View File

@@ -202,5 +202,6 @@
"mysterySet202112": "Ensemble d'ondine antarctique",
"mysterySet202201": "Ensemble de gaieté de cœur de minuit",
"mysterySet202202": "Ensemble de queues jumelles turquoise",
"mysterySet202203": "Ensemble de libellule intrépide"
"mysterySet202203": "Ensemble de libellule intrépide",
"mysterySet202204": "Ensemble d'aventure virtuelle"
}

View File

@@ -128,6 +128,6 @@
"achievementZodiacZookeeperModalText": "十二支のペットをすべて集めました!",
"achievementZodiacZookeeperText": "ネズミ、牛、トラ、ウサギ、ドラゴン、ヘビ、馬、羊、さる、雄鶏、狼、空飛ぶ豚のペットをすべて集めました!",
"achievementBirdsOfAFeather": "同じ羽の鳥は群れを作る",
"achievementBirdsOfAFeatherText": "空飛ぶペット(空飛ぶ豚、フクロウ、オウム、翼竜、フリフォン、たか)をすべて集めました。",
"achievementBirdsOfAFeatherText": "空飛ぶペット(空飛ぶ豚、フクロウ、オウム、翼竜、フリフォン、たか、クジャク、おんどり)をすべて集めました。",
"achievementBirdsOfAFeatherModalText": "空飛ぶペットをすべて集めました!"
}

View File

@@ -2576,5 +2576,7 @@
"weaponArmoireGardenersWateringCanText": "じょうろ",
"weaponArmoireGardenersWateringCanNotes": "水なしじゃ何事も上手くいきません!この魔法の水源じょうろで無限の供給を手にしましょう。知能が<%= int %>上がります。ラッキー宝箱ガーデナーセット4個中4個目のアイテム。",
"armorArmoireGardenersOverallsText": "ガーデナーのオーバーオール",
"armorArmoireGardenersOverallsNotes": "この丈夫なオーバーオールを着ているときは土の作業を怖がらなくても大丈夫。体質が<%= con %>上がります。ラッキー宝箱ガーデナーセット4個中1個目のアイテム。"
"armorArmoireGardenersOverallsNotes": "この丈夫なオーバーオールを着ているときは土の作業を怖がらなくても大丈夫。体質が<%= con %>上がります。ラッキー宝箱ガーデナーセット4個中1個目のアイテム。",
"weaponSpecialSpring2022RogueText": "大きなボタン型ピアス",
"weaponSpecialSpring2022RogueNotes": "ぴっかぴか!輝いてて光ってて可愛くってステキでしかもあなたのもの!力が<%= str %>上がります。2022年春の限定装備。"
}

View File

@@ -216,5 +216,9 @@
"winter2022FireworksRogueSet": "花火(盗賊)",
"winter2022PomegranateMageSet": "ザクロ(魔道士)",
"winter2022IceCrystalHealerSet": "氷の結晶(治療師)",
"januaryYYYY": "<%= year %>年1月"
"januaryYYYY": "<%= year %>年1月",
"spring2022RainstormWarriorSet": "どしゃぶり(戦士)",
"spring2022ForsythiaMageSet": "レンギョウ(魔道士)",
"spring2022PeridotHealerSet": "ペリドット(治療師)",
"spring2022MagpieRogueSet": "カササギ(盗賊)"
}

View File

@@ -602,7 +602,7 @@
"questSquirrelDropSquirrelEgg": "リス ( たまご )",
"questSquirrelUnlockText": "市場でリスのたまごを買えるようになります",
"cuddleBuddiesText": "「抱っこ仲間」クエストセット",
"cuddleBuddiesNotes": "「殺し屋ウサギ」「ふとどきなフェレット」「モルモットギャング団」のセット。5月31日まで購入できます。",
"cuddleBuddiesNotes": "「殺し屋ウサギ」「ふとどきなフェレット」「モルモットギャング団」のセット。3月31日まで購入できます。",
"aquaticAmigosText": "「水棲のトモダチ」クエストセット",
"aquaticAmigosNotes": "「魔のウーパールーパー」「ミスミの大イカ」「オクトゥルフの呼び声」のセット。8月31日まで購入できます。",
"questSeaSerpentText": "深淵における危険:シーサーペント・ストライク!",

View File

@@ -200,5 +200,6 @@
"mysterySet202112": "南極のウィディーネセット",
"mysterySet202201": "夜中にはしゃぐセット",
"mysterySet202202": "ターコイズツインテールセット",
"mysterySet202203": "不屈のトンボセット"
"mysterySet202203": "不屈のトンボセット",
"mysterySet202204": "バーチャルアドベンチャーセット"
}

View File

@@ -1,6 +1,6 @@
{
"FAQ": "ЧаПи",
"termsAndAgreement": "",
"termsAndAgreement": "Натискаючи кнопку нижче, Ви підтверджуєте, що прочитали та погоджуєтеся з <a href='/static/terms'>Умовами використання</a> та <a href='/static/privacy'>Політикою конфіденційності</a>.",
"accept1Terms": "Натискаючи кнопку внизу, я приймаю",
"accept2Terms": "та",
"chores": "Робота по дому",

View File

@@ -422,8 +422,8 @@
"armorSpecial0Notes": "Screams when struck, for it feels pain in its wearer's place. Increases Constitution by <%= con %>.",
"armorSpecial1Text": "Кришталева броня",
"armorSpecial1Notes": "Its tireless power inures the wearer to mundane discomfort. Increases all Stats by <%= attrs %>.",
"armorSpecial2Text": "Благородна туніка Жана Халарда",
"armorSpecial2Notes": "Makes you extra fluffy! Increases Constitution and Intelligence by <%= attrs %> each.",
"armorSpecial2Text": "Благородна туніка Джона Чаларда",
"armorSpecial2Notes": "Робить Вас особливо пухнастим! Збільшує витривалість та інтелект на <%= attrs %> кожен.",
"armorSpecialTakeThisText": "Take This Armor",
"armorSpecialTakeThisNotes": "This armor was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
"armorSpecialFinnedOceanicArmorText": "Finned Oceanic Armor",

View File

@@ -254,7 +254,7 @@
"privateGuild": "Закрита ґільдія",
"charactersRemaining": "Залишилось <%= characters %> символів",
"guildSummary": "Про ґільдію",
"guildSummaryPlaceholder": "Напишіть короткий опис, який рекламує вашу ґільдію іншим габітіканцям. Яка головна мета вашої ґільдії і чому люди повинні до неї приєднатись? Спробуйте включити корисні ключові слова до резюме, щоб габітіканці могли легко знайти його під час пошуку!",
"guildSummaryPlaceholder": "Напишіть короткий опис, який рекламує вашу ґільдію іншим габітиканцям. Яка головна мета вашої ґільдії і чому люди повинні до неї приєднатись? Спробуйте включити корисні ключові слова до резюме, щоб габітиканці могли легко знайти його під час пошуку!",
"groupDescription": "Опис",
"guildDescriptionPlaceholder": "Використовуйте цей розділ, щоб докладніше описати все, що члени ґільдії повинні знати про неї. Корисні поради, посилання та підбадьорливі твердження все це тут!",
"markdownFormattingHelp": "[Шпаргалка з форматування](https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet)",
@@ -302,7 +302,7 @@
"worldBossDesc": "Світовий бос — це особлива подія, яка об’єднує спільноту Habitica, щоб знищити могутнього монстра за допомогою завдань! Усі користувачі Habitica отримують винагороду після поразки боса, навіть ті, хто відпочивав в готелі або не використовував Habitica протягом усього квесту.",
"worldBossLink": "Дізнайтеся більше про попередніх світових босів Habitica на Вікі.",
"worldBossBullet1": "Виконайте завдання, щоб завдати пошкодження світовому босу",
"worldBossBullet2": "Світовий бос не зашкодить Вам за пропущені щоденки, але його показник люті підвищиться. Якщо шкала заповниться, Бос нападе на одного з крамарів Габітіки!",
"worldBossBullet2": "Світовий бос не зашкодить Вам за пропущені щоденки, але його показник люті підвищиться. Якщо шкала заповниться, Бос нападе на одного з крамарів Габітики!",
"worldBossBullet3": "Ви можете продовжити боротьбу зі звичайними квестовими босами, пошкодження будуть завдані обом",
"worldBossBullet4": "Регулярно перевіряйте таверну, щоб побачити прогрес у боротьбі зі світовим босом та шкалу його люті",
"worldBoss": "Світовий бос",

View File

@@ -1,17 +1,17 @@
{
"annoyingFriends": "Набридливі друзі",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"annoyingFriendsText": "У Вас прилетіло <%= count %> сніжок від членів команди.",
"alarmingFriends": "Лякаючi друзi",
"alarmingFriendsText": "Got spooked <%= count %> times by party members.",
"alarmingFriendsText": "Вас налякали <%= count %> рази інші члени команди.",
"agriculturalFriends": "Друзі-Садівники",
"agriculturalFriendsText": "Перетворені в квітку <%= count %> разів учасниками команди.",
"aquaticFriends": "Aquatic Friends",
"aquaticFriends": "Водяні друзі",
"aquaticFriendsText": "Облиті водою <%= count %> разів учасниками команди.",
"valentineCard": "Валентинка",
"valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!",
"valentineCardNotes": "Відправити Валентинку члену гурту.",
"valentine0": "\"Roses are red\n\nMy Dailies are blue\n\nI'm happy that I'm\n\nIn a Party with you!\"",
"valentine1": "\"Roses are red\n\nViolets are nice\n\nLet's get together\n\nAnd fight against Vice!\"",
"valentine1": "\"Як умре, то поховайте\n\nВайса на могилі\n\nСеред степу широкого\n\nВ Габітиці милій!\"",
"valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"",
"valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"",
"valentineCardAchievementTitle": "Adoring Friends",
@@ -29,8 +29,8 @@
"seasonalShopClosedText": "Сезонна крамниця не працює! Вона відкрита лише під час чотирьох Великих свят Habitica.",
"seasonalShopSummerText": "Веселого літнього сплеску!! Чи хотіли б ви придбати деякі рідкісні речі? Обов’язково отримайте їх до закінчення Гали!",
"seasonalShopFallText": "Зі святом осені!! Чи хотіли б ви придбати деякі рідкісні речі? Обов’язково отримайте їх до закінчення Гали!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? Theyll only be available until January 31st!",
"seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? Theyll only be available until April 30th!",
"seasonalShopWinterText": "Веселих зимових свят! Бажаєте придбати рідкісні речі? Поспішіть придбати їх до закінчення свята!",
"seasonalShopSpringText": "Щасливої весни! Бажаєте придбати рідкісні речі? Не забудьте придбати їх до закінчення свят!",
"seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... <strong>*sigh*</strong>",
"seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!",
"seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.",
@@ -41,11 +41,11 @@
"northMageSet": "Mage of the North (Mage)",
"icicleDrakeSet": "Icicle Drake (Rogue)",
"soothingSkaterSet": "Soothing Skater (Healer)",
"gingerbreadSet": "Gingerbread Warrior (Warrior)",
"snowDaySet": "Snow Day Warrior (Warrior)",
"gingerbreadSet": "Пряник (воїн)",
"snowDaySet": "Сніговий день (воїн)",
"snowboardingSet": "Snowboarding Sorcerer (Mage)",
"festiveFairySet": "Festive Fairy (Healer)",
"cocoaSet": "Cocoa Rogue (Rogue)",
"cocoaSet": "Какао (розбійник)",
"toAndFromCard": "To: <%= toName %>, From: <%= fromName %>",
"nyeCard": "Новорічна листівка",
"nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!",
@@ -74,52 +74,52 @@
"magicianBunnySet": "Magician's Bunny (Mage)",
"comfortingKittySet": "Comforting Kitty (Healer)",
"sneakySqueakerSet": "Sneaky Squeaker (Rogue)",
"sunfishWarriorSet": "Sunfish Warrior (Warrior)",
"sunfishWarriorSet": "Риба-місяць (воїн)",
"shipSoothsayerSet": "Ship Soothsayer (Mage)",
"strappingSailorSet": "Strapping Sailor (Healer)",
"reefRenegadeSet": "Reef Renegade (Rogue)",
"scarecrowWarriorSet": "Scarecrow Warrior (Warrior)",
"scarecrowWarriorSet": "Опудало (воїн)",
"stitchWitchSet": "Stitch Witch (Mage)",
"potionerSet": "Potioner (Healer)",
"battleRogueSet": "Bat-tle Rogue (Rogue)",
"battleRogueSet": "Мишехвіст (розбійник)",
"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)",
"summer2016SharkWarriorSet": "Акула (воїн)",
"summer2016DolphinMageSet": "Дельфін (маг)",
"summer2016SeahorseHealerSet": "Морський коник (цілитель)",
"summer2016EelSet": "Вугор (розбійник)",
"fall2016SwampThingSet": "Swamp Thing (Warrior)",
"fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)",
"fall2016GorgonHealerSet": "Gorgon Healer (Healer)",
"fall2016BlackWidowSet": "Black Widow Rogue (Rogue)",
"fall2016GorgonHealerSet": "Горгона (цілитель)",
"fall2016BlackWidowSet": "Чорна вдова (розбійник)",
"winter2017IceHockeySet": "Ice Hockey (Warrior)",
"winter2017WinterWolfSet": "Winter Wolf (Mage)",
"winter2017SugarPlumSet": "Sugar Plum Healer (Healer)",
"winter2017FrostyRogueSet": "Frosty Rogue (Rogue)",
"spring2017FelineWarriorSet": "Feline Warrior (Warrior)",
"winter2017SugarPlumSet": "Цукрова слива (цілитель)",
"winter2017FrostyRogueSet": "Мороз (розбійник)",
"spring2017FelineWarriorSet": "Кіт (воїн)",
"spring2017CanineConjurorSet": "Canine Conjuror (Mage)",
"spring2017FloralMouseSet": "Floral Mouse (Healer)",
"spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)",
"summer2017SandcastleWarriorSet": "Sandcastle Warrior (Warrior)",
"summer2017WhirlpoolMageSet": "Whirlpool Mage (Mage)",
"summer2017SandcastleWarriorSet": "Піщаний замок (воїн)",
"summer2017WhirlpoolMageSet": "Водоверть (маг)",
"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)",
"summer2018BettaFishWarriorSet": "Betta Fish Warrior (Warrior)",
"summer2018LionfishMageSet": "Lionfish Mage (Mage)",
"fall2017HabitoweenSet": "Габітовін (воїн)",
"fall2017MasqueradeSet": "Маскарад (маг)",
"fall2017HauntedHouseSet": "Будинок з привидами (цілитель)",
"fall2017TrickOrTreatSet": "Цукерки або смерть (розбійник)",
"winter2018ConfettiSet": "Конфеті (маг)",
"winter2018GiftWrappedSet": "Запакований у подарунок (воїн)",
"winter2018MistletoeSet": "Омела (цілитель)",
"winter2018ReindeerSet": "Північний олень (розбійник)",
"spring2018SunriseWarriorSet": "Схід сонця (воїн)",
"spring2018TulipMageSet": "Тюльпан (маг)",
"spring2018GarnetHealerSet": "Гранат (цілитель)",
"spring2018DucklingRogueSet": "Каченя (розбійник)",
"summer2018BettaFishWarriorSet": "Бійцівська сіамська рибка (воїн)",
"summer2018LionfishMageSet": "Крилатка (маг)",
"summer2018MerfolkMonarchSet": "Merfolk Monarch (Healer)",
"summer2018FisherRogueSet": "Fisher-Rogue (Rogue)",
"fall2018MinotaurWarriorSet": "Minotaur (Warrior)",
@@ -139,16 +139,16 @@
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
"dateEndOctober": "October 31",
"dateEndNovember": "December 3",
"dateEndNovember": "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!",
"dateEndFebruary": "28 лютого",
"winterPromoGiftHeader": "ПОДАРУЙТЕ ПІДПИСКУ ТА ОТРИМАЙТЕ ЩЕ ОДНУ БЕЗКОШТОВНО!",
"winterPromoGiftDetails1": "Тільки до 6 січня, коли Ви подаруєте комусь підписку, Ви отримуєте таку ж підписку для себе безкоштовно!",
"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": "Акція <strong>\"Подаруй підписку - отримай підписку\"</strong> діє прямо зараз!",
"g1g1Details": "Gift a sub to a friend from their profile and youll receive the same sub for free!",
"g1g1Limitations": "Це обмежена подія, яка розпочнеться 17 грудня о 8:00 за європейським часом (13:00 UTC) і завершиться 7 січня о 20:00 за європейським часом (1:00 UTC). Ця акція застосовується лише тоді, коли ви даруєте іншому жителю Habitica. Якщо ви або ваш одержувач подарунка вже маєте підписку, подарована підписка додасть місяці кредиту, який буде використаний лише після скасування або закінчення терміну дії поточної підписки.",
"g1g1Details": "Подаруйте підписку другу, і Ви отримаєте таку ж підписку безкоштовно!",
"g1g1Limitations": "Це обмежена подія, яка розпочнеться 6 грудня о 8:00 за європейським часом (13:00 UTC) і завершиться 6 січня о 20:00 за європейським часом (1:00 UTC). Ця акція застосовується лише тоді, коли Ви даруєте іншому жителю Habitica. Якщо Ви або Ваш одержувач подарунка вже маєте підписку, подарована підписка додасть місяці кредиту, який буде використаний лише після скасування або закінчення терміну дії поточної підписки.",
"limitations": "Обмеження",
"g1g1HowItWorks": "Введіть ім’я користувача облікового запису, якому ви хочете подарувати. Звідти виберіть додаткову довжину, яку ви хочете подарувати, і відмітьте. Ваш рахунок автоматично буде винагороджений тим самим рівнем передплати, який ви щойно подарували.",
"howItWorks": "Як це робиться",
@@ -195,5 +195,27 @@
"spring2019AmberMageSet": "Бурштин (Маг)",
"spring2019OrchidWarriorSet": "Орхідея (Воїн)",
"royalPurpleJackolantern": "Королівський пурпуровий нічник Джека",
"summer2020OarfishMageSet": "Рибний король (Маг)"
"summer2020OarfishMageSet": "Рибний король (Маг)",
"summer2021FlyingFishWarriorSet": "Летюча риба (воїн)",
"spring2021SunstoneWarriorSet": "Янтар (воїн)",
"spring2021TwinFlowerRogueSet": "Квітка-близнюк (розбійник)",
"summer2021NautilusMageSet": "Наутилус (маг)",
"spring2022MagpieRogueSet": "Сорока (розбійник)",
"spring2022ForsythiaMageSet": "Форзиція (маг)",
"spring2022PeridotHealerSet": "Перидот (цілитель)",
"noLongerAvailable": "Цей товар більше не доступний.",
"spring2021SwanMageSet": "Лебідь (маг)",
"summer2021ParrotHealerSet": "Папуга (цілитель)",
"summer2021ClownfishRogueSet": "Риба-клоун (розбійник)",
"spring2022RainstormWarriorSet": "Дощ з вітром (воїн)",
"spring2021WillowHealerSet": "Верба (цілитель)",
"fall2021OozeRogueSet": "Слиз (розбійник)",
"fall2021HeadlessWarriorSet": "Безголовий (воїн)",
"fall2021BrainEaterMageSet": "Пожиратель мізків (маг)",
"fall2021FlameSummonerHealerSet": "Заклинач полум'я (цілитель)",
"winter2022FireworksRogueSet": "Феєрверк (розбійник)",
"winter2022StockingWarriorSet": "Панчоха (воїн)",
"winter2022PomegranateMageSet": "Гранат (маг)",
"winter2022IceCrystalHealerSet": "Крижаний кристал (цілитель)",
"januaryYYYY": "Січень <%= year %>"
}

View File

@@ -23,7 +23,7 @@
"questHedgehogDropHedgehogEgg": "Їжак (яйце)",
"questHedgehogUnlockText": "Розблоковує яйця їжака для придбання на ринку",
"questGhostStagText": "Дух весни",
"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,\" <strong>InspectorCaracal</strong> 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": "(глибокий вдих) Ах, весна. Пора року, коли колір знову починає наповнювати ландшафт. Зникли холодні засніжені горби зими. Там, де колись стояв мороз, місце займає яскраве життя рослин. Соковито зелене листя заливає дерева, трава повертається до колишнього яскравого відтінку, веселка квітів здіймається вздовж рівнини, а білий містичний туман вкриває землю! ... Зачекайте. Містичний туман? «Ні, — з побоюванням каже <strong>InspectorCaracal</strong>, — здається, що причиною цього туману є якийсь дух. О, ні. Він мчить прямо на Вас».",
"questGhostStagCompletion": "Дух, здається, був здоровий, потім він почав принюхуватися до землі. Спокійний голос огортає Ваш гурт. „Даруйте за мою неґречність. Я тільки-но прокинувся від свого сну, і ще не всі клепки повернулись на свої місця. Будь ласка, візьміть це на знак мого вибачення.“ Купка яєць з'являється на траві перед духом. Без жодного слова дух утікає далі до лісу, а у місцях, де він пробігає, оживають квіти.",
"questGhostStagBoss": "Олень-Привид",
"questGhostStagDropDeerEgg": "Олень (яйце)",
@@ -58,66 +58,66 @@
"questSpiderBoss": "Павук",
"questSpiderDropSpiderEgg": "Павук (Яйце)",
"questSpiderUnlockText": "Розблоковує купівлю павука в яйці на ринку",
"questGroupVice": "Вайс - Змій Тіней",
"questVice1Text": "Недолік, Частина 1: Звільніть себе від впливу Дракона",
"questVice1Notes": "<p>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. </p><h3>Vice Part 1: </h3><p>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 his hold on you!</p>",
"questVice1Boss": "Тінь Недоліка",
"questVice1Completion": "With Vice's influence over you dispelled, you feel a surge of strength you didn't know you had return to you. Congratulations! But a more frightening foe awaits...",
"questVice1DropVice2Quest": "Недолік, Частина 2 (сувій)",
"questVice2Text": "Недолік, Частина 2: Знайди берлогу Змія",
"questVice2Notes": "Confident in yourselves and your ability to withstand the influence of Vice the Shadow Wyrm, your Party makes its way to Mt. Habitica. You approach the entrance to the mountain's caverns and pause. Swells of shadows, almost like fog, wisp out from the opening. It is near impossible to see anything in front of you. The light from your lanterns seem to end abruptly where the shadows begin. It is said that only magical light can pierce the dragon's infernal haze. If you can find enough light crystals, you could make your way to the dragon.",
"questGroupVice": "Вайс - Звір із тіней",
"questVice1Text": "Вайс (частина 1): Звільніться від впливу дракона",
"questVice1Notes": "<p>Кажуть, що в печерах гори Габітика сховане жахливе зло. Чудовисько, присутність якого ламає волю сильних героїв цієї землі, навертаючи їх у бік шкідливих звичок та лінощів! Звір — це великий дракон неймовірної сили, що складається з самих тіней: Вайс, підступний звір тіней. Відважні мешканці, встаньте і переможете цього мерзенного звіра раз і назавжди, але тільки якщо ви вірите, що зможете протистояти його величезній силі. </p><h3>Вайс (частина 1) </h3><p>Як Ви можете розраховувати на боротьбу зі звіром, якщо він уже контролює Вас? Не ставайте жертвою ліні та пороку! Працюйте наполегливо, щоб боротися з темним впливом дракона і розвіяти його владу над вами!</p>",
"questVice1Boss": "Тінь Вайса",
"questVice1Completion": "Коли вплив Вайс на Вас розвіявся, Ви відчуваєте прилив сил, про які Ви і не знали. Вітаю! Але на Вас чекає більш страшний ворог...",
"questVice1DropVice2Quest": "Вайс (частина 2 )(сувій)",
"questVice2Text": "Вайс (частина 2): Знайди лігво звіра",
"questVice2Notes": "Впевнені в собі та своїй здатності протистояти впливу Вайса - звіра з тіней, ваша команда пробивається на гору Габітика. Підходите до входу в гірські печери і зупиняєтеся. Тіні, майже як туман, розходяться з отвору печери. Бачити щось перед собою в такій темряві майже неможливо. Здається, що світло від ваших ліхтарів закінчується там, де починаються тіні. Кажуть, що тільки чарівне світло може пробити пекельний серпанок дракона. Якщо Вам вдасться знайти достатньо світлих кристалів, Ви зможете пробратися до дракона.",
"questVice2CollectLightCrystal": "Світлові кристали",
"questVice2Completion": "As you lift the final crystal aloft, the shadows are dispelled, and your path forward is clear. With a quickening heart, you step forward into the cavern.",
"questVice2DropVice3Quest": "Недолік, Частина 3 (сувій)",
"questVice3Text": "Vice, Part 3: Vice Awakens",
"questVice3Notes": "Після значних зусиль Ваш гурт знайшов лігво Недоліка. Масивний монстр із несмаком розглядає Ваш гурт. У Вашій голові з’являється тихий голос, коли довкола кружляють тіні, Ще більше дурненьких жителів Звичанії прийшло мене зупинити? Мило. Було б мудро не з'являтися тут. Лускатий титан відхиляє голову назад, готуючись напасти. Це Ваш шанс! Віддайтеся на повну та раз і назавжди знищіть Недоліка!",
"questVice3Completion": "The shadows dissipate from the cavern and a steely silence falls. My word, you've done it! You have defeated Vice! You and your party may finally breathe a sigh of relief. Enjoy your victory, brave Habiteers, but take the lessons you've learned from battling Vice and move forward. There are still Habits to be done and potentially worse evils to conquer!",
"questVice3Boss": "Недолік, Тіньовий Змій",
"questVice3DropWeaponSpecial2": ержак дракона Стівена Вебера",
"questVice2Completion": "Коли Ви піднімаєте останній кристал вгору, тіні розвіюються, і ваш шлях вперед стає ясним. З прискореним серцебиттям Ви крокуєте в печеру.",
"questVice2DropVice3Quest": "Вайс (частина 3) (сувій)",
"questVice3Text": "Вайс (частина 3): Пробудження",
"questVice3Notes": "Після значних зусиль Ваша команда знайшла лігво Вайса. Масивний монстр із несмаком розглядає Ваш гурт. У Вашій голові з’являється тихий голос, коли довкола кружляють тіні, «Ще декілька дурненьких жителів Габітики прийшло мене зупинити? Мило. Було б мудро не з'являтися тут.» Лускатий титан відхиляє голову назад, готуючись напасти. Це Ваш шанс! Віддайтеся на повну та раз і назавжди знищіть звіра!",
"questVice3Completion": "Тіні розвіюються з печери, і настає мертва тиша. Так, Ви це зробили! Ви перемогли Вайса! Ви і вся ваша команда можете нарешті зітхнути з полегшенням. Насолоджуйтесь своєю перемогою, відважні мешканці, але не забувайте уроки, які Ви винесли з боротьби з Вайсом, і рухайтеся вперед. Є ще звички, які потрібно зробити, і потенційно гірше зло, яке потрібно подолати!",
"questVice3Boss": "Вайс - Звір із тіней",
"questVice3DropWeaponSpecial2": раконяча патериця Стівена Вебера",
"questVice3DropDragonEgg": "Дракон (яйце)",
"questVice3DropShadeHatchingPotion": "Зілля вилуплення тіні",
"questGroupMoonstone": "Назад у вороття",
"questMoonstone1Text": "Назад у вороття (частина 1): Місячне намисто",
"questMoonstone1Notes": "A terrible affliction has struck Habiticans. Bad Habits thought long-dead are rising back up with a vengeance. Dishes lie unwashed, textbooks linger unread, and procrastination runs rampant!<br><br>You track some of your own returning Bad Habits to the Swamps of Stagnation and discover the culprit: the ghostly Necromancer, Recidivate. You rush in, weapons swinging, but they slide through her specter uselessly.<br><br>\"Dont bother,\" she hisses with a dry rasp. \"Without a chain of moonstones, nothing can harm me and master jeweler @aurakami scattered all the moonstones across Habitica long ago!\" Panting, you retreat... but you know what you must do.",
"questVice3DropShadeHatchingPotion": "Тіньовий інкубаційний еліксир",
"questGroupMoonstone": "Вороття назад",
"questMoonstone1Text": "Рецидивіна (частина 1): Місячне намисто",
"questMoonstone1Notes": "Жахлива біда вразила габітиканців. Шкідливі звички, які вважалися давно померлими, встають з мертвих і жаждуть помсти. Посуд лежить немитий, підручники залишаються непрочитаними, а зволікання тільки набирає обертів!<br><br>Ви простежилиза власними шкідливі звичками, що повертались з болота Застою, і виявили винуватця: примарного некроманта, Рецидивіну. Ви вриваєтесь всередину, розмахуючи зброєю, але зброя проходить крізь привида.<br><br>«Навіть не намагайся», шипить вона сухим хрипом. «Без ланцюга з місячних каменів мені ніщо не зашкодить і майстер-ювелір @aurakami давно розкидав усі місячні камені по Габітиці!» Важко дихаючи, Ви відступаєте... але Ви знаєте, що треба робити.",
"questMoonstone1CollectMoonstone": "Місячне каміння",
"questMoonstone1Completion": "At last, you manage to pull the final moonstone from the swampy sludge. Its time to go fashion your collection into a weapon that can finally defeat Recidivate!",
"questMoonstone1DropMoonstone2Quest": "Назад у вороття (частина 2): Некромант Рецидивіна",
"questMoonstone2Text": "Назад у вороття (частина 2): Некромант Рецидивіна",
"questMoonstone2Notes": "The brave weaponsmith @InspectorCaracal helps you fashion the enchanted moonstones into a chain. Youre ready to confront Recidivate at last, but as you enter the Swamps of Stagnation, a terrible chill sweeps over you.<br><br>Rotting breath whispers in your ear. \"Back again? How delightful...\" You spin and lunge, and under the light of the moonstone chain, your weapon strikes solid flesh. \"You may have bound me to the world once more,\" Recidivate snarls, \"but now it is time for you to leave it!\"",
"questMoonstone1Completion": "Нарешті Вам вдається витягнути останній місячний камінь із болотистого мулу. Настав час перетворити свою колекцію на зброю, яка нарешті зможе перемогти Рецидивіну!",
"questMoonstone1DropMoonstone2Quest": "Рецидивіна (частина 2): Некромант (сувій)",
"questMoonstone2Text": "Рецидивіна (частина 2): Некромант",
"questMoonstone2Notes": "Відважний зброяр @InspectorCaracal допомагає Вам сформувати зачаровані місячні камені в намисто. Нарешті Ви готові протистояти Рецидивіні, але коли Ви входите на територію болота Застою, Вас охоплює жахливий холодок.<br><br>Сморідний подих шепоче Вам у вухо. «Знову тут? Це не надовго...» Ви обретаєтесь і наносите перший удар, і під світлом ланцюга з місячного каменю, ваша зброя вражає тверду плоть. «Можливо, ти знову зв’язав мене з цим світом, — гарчить Рецидивіна, — але тепер тобі час залишити його!»",
"questMoonstone2Boss": "Некромант",
"questMoonstone2Completion": "Recidivate staggers backwards under your final blow, and for a moment, your heart brightens but then she throws back her head and lets out a horrible laugh. Whats happening?",
"questMoonstone2DropMoonstone3Quest": "Назад у вороття (частина 3): Перетворення Рецидивіни (сувій)",
"questMoonstone3Text": "Назад у вороття (частина 3): Перетворення Рецидивіни",
"questMoonstone3Notes": "Laughing wickedly, Recidivate crumples to the ground, and you strike at her again with the moonstone chain. To your horror, Recidivate seizes the gems, eyes burning with triumph.<br><br>\"Foolish creature of flesh!\" she shouts. \"These moonstones will restore me to a physical form, true, but not as you imagined. As the full moon waxes from the dark, so too does my power flourish, and from the shadows I summon the specter of your most feared foe!\"<br><br>A sickly green fog rises from the swamp, and Recidivates body writhes and contorts into a shape that fills you with dread the undead body of Vice, horribly reborn.",
"questMoonstone3Completion": "Your breath comes hard and sweat stings your eyes as the undead Wyrm collapses. The remains of Recidivate dissipate into a thin grey mist that clears quickly under the onslaught of a refreshing breeze, and you hear the distant, rallying cries of Habiticans defeating their Bad Habits for once and for all.<br><br>@Baconsaur the beast master swoops down on a gryphon. \"I saw the end of your battle from the sky, and I was greatly moved. Please, take this enchanted tunic your bravery speaks of a noble heart, and I believe you were meant to have it.\"",
"questMoonstone3Boss": "Некро-Недолік",
"questMoonstone2Completion": "Від останнього удару Рецидивіна падає назад, і на мить Ваше серце радіє, але потім вона відкидає голову й жахливо сміється. Що з нею відбувається?",
"questMoonstone2DropMoonstone3Quest": "Рецидивіна (частина 3): Перетворення Рецидивіни (сувій)",
"questMoonstone3Text": "Рецидивіна (частина 3): Перетворення Рецидивіни",
"questMoonstone3Notes": "Зловісно сміючись, Рецидивіна звалюється на землю, і Ви пробуєте нанести удар по ній ланцюгом з місячного каменю. Однак, Рецидивіна захоплює дорогоцінні камені, її очі палають тріумфом.<br><br>\"Дурне створіння з плоті!\" — кричить вона. \"Ці місячні камені повернуть мені фізичну форму, але не таку, як ти собі уявляв. Як повний місяць з'являється з темряви, так само процвітає моя сила, а з тіней я викликаю привид твого найстрашнішого ворога!\" <br><br>З болота здіймається хворобливий зелений туман, а тіло Рецидивіни звивається й викривляється у форму, яка наповнює вас страхом звіра Вайса, повсталого з мертвих.",
"questMoonstone3Completion": "Ви важко дихаєте, а піт ріже очі, коли Вайс, що повстав з мертвих, падає знову. Залишки Рецидивіни розвіюються в тонку сіру імлу, яка швидко розносяться під натиском освіжаючого вітерця, і Ви чуєте далекі згуртовані крики габітиканців, які назавжди долають свої шкідливі звички.<br><br>@Baconsaur, господар звірів, підлітає верхом на ґрифоні. «Я бачив фінал Вашої битви з неба, і я був дуже зворушений. Будь ласка, візьміть цю чарівну туніку ваша хоробрість говорить про благородне серце, і я вірю, що Вам судилося її мати».",
"questMoonstone3Boss": "Некро-Вайс",
"questMoonstone3DropRottenMeat": "Гниле м'ясо (Їжа)",
"questMoonstone3DropZombiePotion": "Зомбі інкубаціонне зілля",
"questGroupGoldenknight": "Золотий лицар",
"questGoldenknight1Text": "Золотий лицар (частина 1): Сувора догана",
"questGoldenknight1Notes": "Золотий Лицар завжди незадоволена бідними жителями Габітіки. Не впоралися з усіма щоденними завданнями? Піддалися негативній звичці? Для неї це привід нагадати Вам, що Ви повинні наслідувати її. Вона яскравий приклад ідеального габітіканця, а Ви - невдаха. Що ж, це зовсім не чемно! Усі роблять помилки, тому ви не повинні терпіти подібних обвинувачень. Напевно, настав час Вам зібрати скарги скривджених жителів країни Габітіка і винести Золотому Лицареві сувору догану!",
"questGoldenknight1Notes": "Золотий Лицар завжди незадоволена бідними жителями Габітики. Не впоралися з усіма щоденними завданнями? Піддалися негативній звичці? Для неї це привід нагадати Вам, що Ви повинні наслідувати її. Вона яскравий приклад ідеального габітиканця, а Ви - невдаха. Що ж, це зовсім не чемно! Усі роблять помилки, тому ви не повинні терпіти подібних обвинувачень. Напевно, настав час Вам зібрати скарги скривджених жителів країни Габітика і винести Золотому Лицареві сувору догану!",
"questGoldenknight1CollectTestimony": "Скарги",
"questGoldenknight1Completion": "Look at all these testimonies! Surely this will be enough to convince the Golden Knight. Now all you need to do is find her.",
"questGoldenknight1DropGoldenknight2Quest": "Золотий лицар (частина 2): Золотий лицар (сувій)",
"questGoldenknight2Text": "Золотий лицар (частина 2): Золотий лицар",
"questGoldenknight2Notes": "Озброївшись десятками скарг від габітіканців, Ви нарешті стоїте навпроти Золотого лицаря. Ви починаєте декламувати їй скарги жителів Габітіки, одну за одною. «І @Pfeffernusse каже про твої постійні хвастощі…» Лицар піднімає руку, щоб змусити Вас замовкнути, і насміхається: «Будь ласка, ці люди просто заздрять моїм успіхам. Замість того, щоб скаржитися, вони повинні просто працювати так само наполегливо, як я! Можливо, мені варто показати вам силу, яку ви можете отримати завдяки працьовитості, як у мене!» Вона піднімає свій моргенштерн і готується напасти на Вас!",
"questGoldenknight2Notes": "Озброївшись десятками скарг від габітиканців, Ви нарешті стоїте навпроти Золотого лицаря. Ви починаєте декламувати їй скарги жителів Габітики, одну за одною. «І @Pfeffernusse каже про твої постійні хвастощі…» Лицар піднімає руку, щоб змусити Вас замовкнути, і насміхається: «Будь ласка, ці люди просто заздрять моїм успіхам. Замість того, щоб скаржитися, вони повинні просто працювати так само наполегливо, як я! Можливо, мені варто показати вам силу, яку ви можете отримати завдяки працьовитості, як у мене!» Вона піднімає свій моргенштерн і готується напасти на Вас!",
"questGoldenknight2Boss": "Золотий Лицар",
"questGoldenknight2Completion": "Золотий Лицар від жаху опускає свій моргенштерн. «Прошу вибачення за цей мій вибух», — каже вона. «Правда в тому, що мені боляче думати, що я ненавмисно завдала болю іншим, і це змусило мене кинутися на захист… я сподіваюсь, що ви зможете прийняти мої вибачення?»",
"questGoldenknight2DropGoldenknight3Quest": "Золотий лицар (частина 3): Залізний лицар (сувій)",
"questGoldenknight3Text": "Золотий лицар (частина 3): Залізний лицар",
"questGoldenknight3Notes": "@Jon Arinbjorn кричить щодуху, щоб привернути Вашу увагу. На полі битви з’явилася нова фігура. Лицар, закований в обладунки з темного сплаву заліза, повільно наближається до Вас із мечем у руці. Золотий Лицар кричить фігурі: «Батьку, ні!», однак той і не думає зупинятись. Вона повертається до вас і каже: «Вибачте. Я була сліпою, і не помітила якою жорстокою я стала. Але мій батько жорстокіший в стократ, ніж я коли-небудь могла бути. Якщо його не зупинити, то він знищить всіх нас. Ось, використайте мій моргенштерн і зупиніть Залізного Лицаря!\"",
"questGoldenknight3Completion": "З гучним дзвоном Залізний Лицар опускається на коліна й падає. «Ти доволі сильний», — задихається він. «Сьогодні мені завдали поразки». Золотий Лицар підходить до вас і каже: «Спасибі. Я вважаю, що ми отримали трохи смирення від нашої з Вами зустрічі. Я поговорю зі своїм батьком і поясню чому габітіканці скаржаться на нас. Гадаю, нам варто вибачатись перед багатьма з них». Вона замислюється, перш ніж повернутися до Вас. «Ось: як наш подарунок Вам, я хочу, щоб Ви зберегли мій моргенштерн. Тепер він Ваш».",
"questGoldenknight3Completion": "З гучним дзвоном Залізний Лицар опускається на коліна й падає. «Ти доволі сильний», — задихається він. «Сьогодні мені завдали поразки». Золотий Лицар підходить до вас і каже: «Спасибі. Я вважаю, що ми отримали трохи смирення від нашої з Вами зустрічі. Я поговорю зі своїм батьком і поясню чому габітиканці скаржаться на нас. Гадаю, нам варто вибачатись перед багатьма з них». Вона замислюється, перш ніж повернутися до Вас. «Ось: як наш подарунок Вам, я хочу, щоб Ви зберегли мій моргенштерн. Тепер він Ваш».",
"questGoldenknight3Boss": "Залізний Лицар",
"questGoldenknight3DropHoney": "Мед (Їжа)",
"questGoldenknight3DropGoldenPotion": "Золоте інкубаціонне зілля",
"questGoldenknight3DropWeapon": "Моргенштерн неперевної послідовності (ліворучна зброя)",
"questGroupEarnable": "Зароблені квести",
"questBasilistText": "Спискозмій",
"questBasilistNotes": "На ринку панує переполох — такий, що мав би змусити Вас тікати. Однак будучи сміливим шукачем пригод, Ви замість цього біжите назустріч і зустрічаєте Спискозмія, що утворений зі списків невиконаних справ! Габітіканці, що знаходяться поруч, паралізовані від страху довжиною Спискозмія. Вони не можуть почати працювати. Звідкись неподалік ви чуєте, як @Arcosine кричить: \"Швидко! Виконуйте свої завдання та щоденки, щоб знешкодити монстра, перш ніж він встигне порізати когось папером!\". Бийте швидко, шукачу пригод, і викреслюйте завдання, але будьте обережні - якщо Ви не виконаєте які-небудь щоденки, Спискозмій атакуватиме Вас і Вашу групу!",
"questBasilistNotes": "На ринку панує переполох — такий, що мав би змусити Вас тікати. Однак будучи сміливим шукачем пригод, Ви замість цього біжите назустріч і зустрічаєте Спискозмія, що утворений зі списків невиконаних справ! Габітиканці, що знаходяться поруч, паралізовані від страху довжиною Спискозмія. Вони не можуть почати працювати. Звідкись неподалік ви чуєте, як @Arcosine кричить: \"Швидко! Виконуйте свої завдання та щоденки, щоб знешкодити монстра, перш ніж він встигне порізати когось папером!\". Бийте швидко, шукачу пригод, і викреслюйте завдання, але будьте обережні - якщо Ви не виконаєте які-небудь щоденки, Спискозмій атакуватиме Вас і Вашу групу!",
"questBasilistCompletion": "The Basi-list has scattered into paper scraps, which shimmer gently in rainbow colors. \"Whew!\" says @Arcosine. \"Good thing you guys were here!\" Feeling more experienced than before, you gather up some fallen gold from among the papers.",
"questBasilistBoss": "Спискозмій",
"questEggHuntText": "Яйцелови",
"questEggHuntNotes": "Overnight, strange plain eggs have appeared everywhere: in Matt's stables, behind the counter at the Tavern, and even among the pet eggs at the Marketplace! What a nuisance! \"Nobody knows where they came from, or what they might hatch into,\" says Megan, \"but we can't just leave them laying around! Work hard and search hard to help me gather up these mysterious eggs. Maybe if you collect enough, there will be some extras left over for you...\"",
"questEggHuntNotes": "За ніч дивні яйця з’явилися скрізь: у стайні у Матвея, за прилавком у таверні і навіть серед яєць домашніх тварин на Ринку! Яка неприємність! \"Ніхто не знає, звідки вони з'явилися і що з них може вилупитися, - каже Меган, - але ми не можемо просто залишити їх валятися ось так! Наполегливо працюйте і шукайте, щоб допомогти мені зібрати ці таємничі яйця. Можливо, якщо Ви зберете достатньо, то щось знайдеться і для Вас...\"",
"questEggHuntCompletion": "You did it! In gratitude, <strong>Megan</strong> gives you ten of the eggs. \"I bet the hatching potions will dye them beautiful colors! And I wonder what will happen when they turn into mounts....\"",
"questEggHuntCollectPlainEgg": "Прості яйця",
"questEggHuntDropPlainEgg": "Просте яйце",
@@ -133,7 +133,7 @@
"questDilatoryBossRageMarket": "`Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!`\n\nОоой!! Щойно Драк'он Ударом Занехаяння вщент розбив крамницю Торговця Алекса! Та, здається, ми добряче знесилили цю тварюку. Гадаю, він не має більше сил на ще один удар.\n\nТож не відступай, Звичаніє! Проженімо цього звіра геть з наших берегів!",
"questDilatoryCompletion": "\"Подолання Жахливого Драк'она Неквапливості\"\n\nНам вдалося! Заревівши востаннє, Жахливий Драк'он падає та пливе ген далеко-далеко. На березі вишикувалися натовпи втішених звичаньців! Ми допомогли Митькові, Даніелю та Алексу відбудувати їхні будинки. Але що це?\n\n\"Мешканці повертаються!\"\n\nТепер, коли Драк'он утік, море замерехтіло кольорами. Це різнобарвний рій раків-богомолів... а серед них — сотні морських людей!\n\n\"Ми — забуті жителі Неквапливості!\", — пояснює їхній ватажок Манта. \"Коли Неквапливість затонула, раки-богомоли, які жили у цих водах, з допомогою чарів перетворили нас на водяників, щоб ми змогли вижити. Але лютий Жахливий Драк'он усіх нас запроторив до темної ущелини. Ми сотні років сиділи у тому полоні, та тепер нарешті можемо відбудувати своє місто!\"\n\n\"Як подяку,\" — каже його друг @Ottl, — \"Прийміть, будь ласка, цього рака-богомола та рака-богомола скакуна, а також ОД, золото та нашу безмежну вдячність.\"\n\n\"Нагороди\"\n * Рак-богомол улюбленець\n * Рак-богомол скакун\n * Шоколад, блакитна цукровата, рожева цукровата, риба, мед, м'ясо, молоко, картопля, тухле м'ясо, полуниця",
"questSeahorseText": "Перегони у Неквапливості",
"questSeahorseNotes": "Нині День Перегонів. До Неквапливості прибули габітіканці з усього континенту, щоб влаштувати перегони на своїх морських кониках! Зненацька на біговій доріжці зчиняється шум та гамір і Ви чуєте, як власниця морських коників @Kiwibot перекрикує рев хвиль. \"Зібрання морських коників привернуло увагу шаленого Морського Жеребця!\" — гукає вона. \"Він поривається через стайні і нищить старовинну дорогу для бігу! Чи може хтось його вгамувати?\"",
"questSeahorseNotes": "Нині День Перегонів. До Неквапливості прибули габітиканці з усього континенту, щоб влаштувати перегони на своїх морських кониках! Зненацька на біговій доріжці зчиняється шум та гамір і Ви чуєте, як власниця морських коників @Kiwibot перекрикує рев хвиль. \"Зібрання морських коників привернуло увагу шаленого Морського Жеребця!\" — гукає вона. \"Він поривається через стайні і нищить старовинну дорогу для бігу! Чи може хтось його вгамувати?\"",
"questSeahorseCompletion": "Приборканий морський жеребець покірно до вас підпливає. \"Поглянь!\" — каже Ківібот. \"Він хоче, щоб ми подбали про його діток.\" Вона дає вам три яйця. \"Виростіть їх як слід,\" — каже Ківібот. \"Приходьте на перегони коли забажаєте!\"",
"questSeahorseBoss": "Морський жеребець",
"questSeahorseDropSeahorseEgg": "Морський коник (яйце)",
@@ -145,7 +145,7 @@
"questAtom1Drop": "Чудовисько озера Недої-Десс (сувій)",
"questAtom1Completion": "After some thorough scrubbing, all the dishes are stacked safely on the shore! You stand back and proudly survey your hard work.",
"questAtom2Text": "Битва з Буденністю (частина 2): Чудовисько озера Недої-Десс",
"questAtom2Notes": "Хух, тут значно краще, коли увесь посуд чистий. Може, нарешті Ви можете трохи розважитися. Гей, по озері, здається, плаває коробка від піци. Залишилось прибрати ще її, еге ж? Однак, це не проста коробка від піци! Раптом коробка швидко підіймається і виявляється, що це голова чудовиська. Неймовірно! Легендарне чудовисько Недоїдессі?! Кажуть, начебто воно переховується в озері з прадавніх часів: істота, яка виникла із залишків їжі та сміття давніх габітіканців. Фе!",
"questAtom2Notes": "Хух, тут значно краще, коли увесь посуд чистий. Може, нарешті Ви можете трохи розважитися. Гей, по озері, здається, плаває коробка від піци. Залишилось прибрати ще її, еге ж? Однак, це не проста коробка від піци! Раптом коробка швидко підіймається і виявляється, що це голова чудовиська. Неймовірно! Легендарне чудовисько Недоїдессі?! Кажуть, начебто воно переховується в озері з прадавніх часів: істота, яка виникла із залишків їжі та сміття давніх габітиканців. Фе!",
"questAtom2Boss": "Чудовисько Недоїдессі",
"questAtom2Drop": "Білизномант (сувій)",
"questAtom2Completion": "З оглушливим криком і п’ятьма смачними видами сиру, що вириваються з його пащі, Чудовисько Недоїдессі розпадається на шматки. Молодець, відважний авантюристе! Але зачекай... з цим озером ще щось не так?",
@@ -198,7 +198,7 @@
"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": "Кам'яне яйце (яйце)",
"questRockUnlockText": "Розблоковує купівлю каменю в яйці на ринку",
"questBunnyText": "Вбивця Кролик",
"questBunnyText": "Кролик-вбивця",
"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!\"<br><br>You knock and the doors swing inward. From within the gloom you hear a deafening roar, and you draw your weapon.",
"questBunnyBoss": "Вбивця Кролик",
"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.\"",
@@ -228,8 +228,8 @@
"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": "Кит (Яйце)",
"questWhaleUnlockText": "Розблоковує китові яйця для придбання на ринку",
"questGroupDilatoryDistress": "Dilatory Distress",
"questDilatoryDistress1Text": "Затяжна Біда, Частина 1: Повідомлення у Пляшці",
"questGroupDilatoryDistress": "Затяжна біда",
"questDilatoryDistress1Text": "Затяжна Бідаастина 1): Повідомлення у пляшці",
"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.",
"questDilatoryDistress1Completion": "Ви надягаєте ласту з плавниками і якнайшвидше підпливаєте до Ділатора. Мерфолк та їх союзники з креветками-богомолами на даний момент зуміли утримати монстрів за межами міста, але вони програють. Тільки-но ви опинитесь у стінах замку, як опускається жахлива облога!",
"questDilatoryDistress1CollectFireCoral": "Вогняний Корал",
@@ -392,24 +392,24 @@
"questTaskwoodsTerror3Boss": "Jacko of the Lantern",
"questTaskwoodsTerror3DropStrawberry": "Полуниця (їжа)",
"questTaskwoodsTerror3DropWeapon": "Taskwoods Lantern (Two-Handed Weapon)",
"questFerretText": "The Nefarious Ferret",
"questFerretText": "Нечестивий тхір",
"questFerretNotes": "Walking through Habit City, you see an unhappy crowd surrounding a red-robed Ferret.<br><br>\"That productivity potion you sold me is useless!\" @Beffymaroo complains. \"I watched three hours of TV last night instead of doing my chores!\"<br><br>\"Yeah!\" shouts @Pandah. \"And today I spent an hour rearranging my books instead of reading them!\"<br><br>The Nefarious Ferret spreads his hands innocently. \"That's more TV watching and book organizing than you'd normally get done, isn't it?\"<br><br>The crowd erupts in anger.<br><br>\"No refunds!\" crows the Nefarious Ferret. He fires a bolt of magic into the crowd, preparing to escape in the smoke.<br><br>\"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",
"questFerretBoss": "Нечестивий тхір",
"questFerretDropFerretEgg": "Ferret (Egg)",
"questFerretUnlockText": "Розблоковує купівлю тхора в яйці на ринку",
"questDustBunniesText": "Дикі пильові зайці",
"questDustBunniesNotes": "Давно Ви тут не протирали пил, але не надто хвилюйтеся — трішки пилу нікому не зашкодило, правда ж? Тільки до того моменту як Ви засунете руку в один із найбільш віддалених кутів і відчуєте як Вас щось вкусило. Тоді Ви згадаєте застереження @InspectorCaracal: залишаючи \"нешкідливий\" пил занадто довго, він перетворюється на злісних пильових зайців! Вам краще прогнати їх в поле, перш ніж вони зітруть всю Габітику в пил!",
"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",
"questDustBunniesCompletion": "Пилові зайчики скомкуються у клубок... пилу. Як тільки пил осідає, Ви озираєтесь. Ви й забули, як гарно це місце виглядає, коли воно чисте. Ви помічаєте невелику купу золота там, де колись був пил. Хех, а Ви його так довго шукали!",
"questDustBunniesBoss": "Дикі пильові зайці",
"questGroupMoon": "Битва під місяцем",
"questMoon1Text": "Битва під місяцем (частина 1): Збір містичних уламків",
"questMoon1Notes": "Габітіканців відволікло від своїх завдань щось дивне: по землі з’являються уламки каменю дивної форми. Стурбована провидиця @Starsystemic викликає Вас до своєї вежі. Вона каже: \"Я бачу тривожні прикмети в цих уламках, які руйнують землю і відволікають працьовитих габітіканців. Я спробую відстежити джерело, але спочатку мені потрібно дослідити уламки. Чи можете Ви зібрати декілька для мене?\"",
"questMoon1Notes": "Габітиканців відволікло від своїх завдань щось дивне: по землі з’являються уламки каменю дивної форми. Стурбована провидиця @Starsystemic викликає Вас до своєї вежі. Вона каже: \"Я бачу тривожні прикмети в цих уламках, які руйнують землю і відволікають працьовитих габітиканців. Я спробую відстежити джерело, але спочатку мені потрібно дослідити уламки. Чи можете Ви зібрати декілька для мене?\"",
"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": "Місячні уламки",
"questMoon1DropHeadgear": "Шолом місячного воїна (головний убір)",
"questMoon2Text": "Битва під місяцем (частина 2): Зупиніть затьмарюючий Стрес",
"questMoon2Notes": "Після вивчення осколків провидиця @Starsystemic має погані новини. «Древній монстр наближається до Габітіки, і це накладає жахливий стрес на її громадян. Я можу витягнути тінь із сердець людей у цю вежу, де вона набуде фізичної форми, але Вам потрібно її перемогти, перш ніж вона розпадеться і почне знову поширюватись». Ви киваєте, і вона починає читати закляття. Танцюючі тіні заповнюють кімнату, щільно притискаючись одна до одної. Холодний вітер кружляє, темрява глибшає. Затьмарюючий Стрес підіймається з підлоги, шкірить зуби, як справжній кошмар ... і замахується!",
"questMoon2Notes": "Після вивчення осколків провидиця @Starsystemic має погані новини. «Древній монстр наближається до Габітики, і це накладає жахливий стрес на її громадян. Я можу витягнути тінь із сердець людей у цю вежу, де вона набуде фізичної форми, але Вам потрібно її перемогти, перш ніж вона розпадеться і почне знову поширюватись». Ви киваєте, і вона починає читати закляття. Танцюючі тіні заповнюють кімнату, щільно притискаючись одна до одної. Холодний вітер кружляє, темрява глибшає. Затьмарюючий Стрес підіймається з підлоги, шкірить зуби, як справжній кошмар ... і замахується!",
"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": "Затьмарюючий Стрес",
"questMoon2DropArmor": "Обладунки місячного воїна (броня)",
@@ -453,11 +453,11 @@
"questStoikalmCalamity3DropBlueCottonCandy": "Синя цукрова кулька (їжа)",
"questStoikalmCalamity3DropShield": "Mammoth Rider's Horn (Off-Hand Item)",
"questStoikalmCalamity3DropWeapon": "Mammoth Rider Spear (Weapon)",
"questGuineaPigText": "The Guinea Pig Gang",
"questGuineaPigText": "Банда морських свинок",
"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.<br><br>Alexander the Merchant frowns at it. \"I don't remember putting that out. I wonder where it came--\" A small paw cuts him off.<br><br>\"Guinea all your gold, merchant!\" squeaks a tiny voice brimming with evil.<br><br>\"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.\"<br><br>\"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.\"<br><br>\"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)",
"questGuineaPigBoss": "Банда морських свинок",
"questGuineaPigDropGuineaPigEgg": "Морська свинка (яйце)",
"questGuineaPigUnlockText": "Розблоковує купівлю морської свинки в яйці на ринку",
"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.<br><br>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!",
@@ -601,8 +601,8 @@
"questSquirrelBoss": "Sneaky Squirrel",
"questSquirrelDropSquirrelEgg": "Squirrel (Egg)",
"questSquirrelUnlockText": "Розблоковує купівлю білки в яйці на ринку",
"cuddleBuddiesText": "Cuddle Buddies Quest Bundle",
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.",
"cuddleBuddiesText": "Набір квестів \"Пухнасті друзі\"",
"cuddleBuddiesNotes": "Містить «Кролик-вбивця», «Нечестивий тхір» і «Банда морських свинок». Доступний до 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": "Біда в глибинах: Напад морського змія!",

View File

@@ -126,5 +126,7 @@
"achievementShadyCustomerText": "已集齐所有暗影宠物。",
"achievementZodiacZookeeper": "十二生肖饲养员",
"achievementZodiacZookeeperModalText": "你集齐了所有十二生肖宠物!",
"achievementZodiacZookeeperText": "已经孵化了所有的十二生肖宠物。鼠、牛、兔、蛇、马、羊、猴、鸡、狼、虎、飞猪和龙!"
"achievementZodiacZookeeperText": "已经孵化了所有的十二生肖宠物。鼠、牛、兔、蛇、马、羊、猴、鸡、狼、虎、飞猪和龙!",
"achievementBirdsOfAFeather": "展翅高飞",
"achievementBirdsOfAFeatherText": "已经孵化了所有的飞行宠物:飞猪、猫头鹰、鹦鹉、翼龙、狮鹫和猎鹰。"
}

View File

@@ -490,6 +490,11 @@ const backgrounds = {
brick_wall_with_ivy: { },
flowering_prairie: { },
},
backgrounds042022: {
blossoming_trees: { },
flower_shop: { },
springtime_lake: { },
},
timeTravelBackgrounds: {
airship: {
price: 1,

View File

@@ -392,6 +392,10 @@ const armor = {
con: 7,
set: 'gardenerSet',
},
strawRaincoat: {
con: 9,
set: 'strawRaincoat',
},
};
const body = {
@@ -795,6 +799,10 @@ const head = {
per: 7,
set: 'gardenerSet',
},
strawRainHat: {
per: 9,
set: 'strawRaincoat',
},
};
const shield = {

View File

@@ -341,7 +341,15 @@ api.resetPassword = {
if (validationErrors) throw validationErrors;
const email = req.body.email.toLowerCase();
const user = await User.findOne({ 'auth.local.email': email }).exec();
const user = await User.findOne({
$or: [
{ 'auth.local.username': email.replace(/^@/, '') },
{ 'auth.local.email': email },
{ 'auth.apple.emails.value': email },
{ 'auth.google.emails.value': email },
{ 'auth.facebook.emails.value': email },
],
}).exec();
if (user) {
// create an encrypted link to be used to reset the password
@@ -385,7 +393,9 @@ api.updateEmail = {
if (!user.auth.local.email) throw new BadRequest(res.t('userHasNoLocalRegistration'));
req.checkBody('newEmail', res.t('newEmailRequired')).notEmpty().isEmail();
req.checkBody('password', res.t('missingPassword')).notEmpty();
if (user.auth.local.hashed_password) {
req.checkBody('password', res.t('missingPassword')).notEmpty();
}
const validationErrors = req.validationErrors();
if (validationErrors) throw validationErrors;
@@ -395,13 +405,15 @@ api.updateEmail = {
if (emailAlreadyInUse) throw new NotAuthorized(res.t('cannotFulfillReq', { techAssistanceEmail: TECH_ASSISTANCE_EMAIL }));
const { password } = req.body;
const isValidPassword = await passwordUtils.compare(user, password);
if (!isValidPassword) throw new NotAuthorized(res.t('wrongPassword'));
if (user.auth.local.hashed_password) {
const { password } = req.body;
const isValidPassword = await passwordUtils.compare(user, password);
if (!isValidPassword) throw new NotAuthorized(res.t('wrongPassword'));
// if password is using old sha1 encryption, change it
if (user.auth.local.passwordHashMethod === 'sha1') {
await passwordUtils.convertToBcrypt(user, password);
// if password is using old sha1 encryption, change it
if (user.auth.local.passwordHashMethod === 'sha1') {
await passwordUtils.convertToBcrypt(user, password);
}
}
user.auth.local.email = req.body.newEmail.toLowerCase();

View File

@@ -128,12 +128,13 @@ async function registerLocal (req, res, { isV3 = false }) {
}, { 'auth.local': 1 }).exec();
if (user) {
if (email === user.auth.local.email) throw new NotAuthorized(res.t('emailTaken'));
// Check that the lowercase username isn't already used
if (existingUser) {
if (email === user.auth.local.email && existingUser._id !== user._id) throw new NotAuthorized(res.t('emailTaken'));
if (lowerCaseUsername === user.auth.local.lowerCaseUsername && existingUser._id !== user._id) throw new NotAuthorized(res.t('usernameTaken'));
} else if (lowerCaseUsername === user.auth.local.lowerCaseUsername) {
throw new NotAuthorized(res.t('usernameTaken'));
} else {
throw new NotAuthorized(res.t('emailTaken'));
}
}

View File

@@ -88,8 +88,8 @@ export async function validatePasswordResetCodeAndFindUser (code) {
if (isCodeValid) {
user = await User.findById(userId).exec();
// check if user is found and if it's an email & password account
if (!user || !user.auth || !user.auth.local || !user.auth.local.email) {
// check if user is found
if (!user) {
isCodeValid = false;
} else if (code !== user.auth.local.passwordResetCode) {
// Make sure only the last code can be used

View File

@@ -38,6 +38,12 @@ schema.plugin(baseModel, {
plainObj.flags.newStuff = originalDoc.checkNewStuff();
}
if (plainObj.auth && plainObj.auth.local && originalDoc.auth.local.hashed_password) {
plainObj.auth.local.has_password = true;
} else if (plainObj.auth && plainObj.auth.local && originalDoc.auth.local.email) {
plainObj.auth.local.has_password = false;
}
return plainObj;
},
});

View File

@@ -382,8 +382,12 @@ schema.methods.daysUserHasMissed = function daysUserHasMissed (now, req = {}) {
timezoneUtcOffsetFromUserPrefs = timezoneUtcOffsetFromBrowser;
}
let lastCronTime = this.lastCron;
if (this.auth.timestamps.loggedIn < lastCronTime) {
lastCronTime = this.auth.timestamps.loggedIn;
}
// How many days have we missed using the user's current timezone:
let daysMissed = daysSince(this.lastCron, defaults({ now }, this.preferences));
let daysMissed = daysSince(lastCronTime, defaults({ now }, this.preferences));
if (timezoneUtcOffsetAtLastCron !== timezoneUtcOffsetFromUserPrefs) {
// Give the user extra time based on the difference in timezones
@@ -395,7 +399,7 @@ schema.methods.daysUserHasMissed = function daysUserHasMissed (now, req = {}) {
// Since cron last ran, the user's timezone has changed.
// How many days have we missed using the old timezone:
const daysMissedNewZone = daysMissed;
const daysMissedOldZone = daysSince(this.lastCron, defaults({
const daysMissedOldZone = daysSince(lastCronTime, defaults({
now,
timezoneUtcOffsetOverride: timezoneUtcOffsetAtLastCron,
}, this.preferences));
@@ -435,7 +439,7 @@ schema.methods.daysUserHasMissed = function daysUserHasMissed (now, req = {}) {
const timezoneOffsetDiff = timezoneUtcOffsetFromUserPrefs - timezoneUtcOffsetAtLastCron;
// e.g., for dangerous zone change: -300 - -240 = -60 or 600 - 660= -60
this.lastCron = moment(this.lastCron).subtract(timezoneOffsetDiff, 'minutes');
this.lastCron = moment(lastCronTime).subtract(timezoneOffsetDiff, 'minutes');
// NB: We don't change this.auth.timestamps.loggedin so that will still record
// the time that the previous cron actually ran.
// From now on we can ignore the old timezone: