Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
Xaz16 2019-12-11 22:39:01 +03:00
commit 00ea6a4c7f
340 changed files with 33840 additions and 28916 deletions

View file

@ -1,3 +1,2 @@
node_modules node_modules
.git .git
website

View file

@ -1,5 +1,11 @@
FROM node:12 FROM node:12
WORKDIR /code
COPY package*.json /code/ # Install global packages
RUN npm install RUN npm install -g gulp-cli mocha
RUN npm install -g gulp-cli mocha
# Copy Habitica code into container and install dependencies
WORKDIR /usr/src/habitica
COPY . /usr/src/habitica
RUN npm install
RUN npm run postinstall

View file

@ -0,0 +1,126 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20191127_harvest_feast';
import { v4 as uuid } from 'uuid';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {};
let inc;
let push;
set.migration = MIGRATION_NAME;
if (typeof user.items.gear.owned.head_special_turkeyHelmGilded !== 'undefined') {
inc = {
'items.food.Pie_Base': 1,
'items.food.Pie_CottonCandyBlue': 1,
'items.food.Pie_CottonCandyPink': 1,
'items.food.Pie_Desert': 1,
'items.food.Pie_Golden': 1,
'items.food.Pie_Red': 1,
'items.food.Pie_Shade': 1,
'items.food.Pie_Skeleton': 1,
'items.food.Pie_Zombie': 1,
'items.food.Pie_White': 1,
}
} else if (typeof user.items.gear.owned.armor_special_turkeyArmorBase !== 'undefined') {
set['items.gear.owned.head_special_turkeyHelmGilded'] = false;
set['items.gear.owned.armor_special_turkeyArmorGilded'] = false;
set['items.gear.owned.back_special_turkeyTailGilded'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_turkeyHelmGilded',
_id: uuid(),
},
{
type: 'marketGear',
path: 'gear.flat.armor_special_turkeyArmorGilded',
_id: uuid(),
},
{
type: 'marketGear',
path: 'gear.flat.back_special_turkeyTailGilded',
_id: uuid(),
},
];
} else if (user.items && user.items.mounts && user.items.mounts['Turkey-Gilded']) {
set['items.gear.owned.head_special_turkeyHelmBase'] = false;
set['items.gear.owned.armor_special_turkeyArmorBase'] = false;
set['items.gear.owned.back_special_turkeyTailBase'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_turkeyHelmBase',
_id: uuid(),
},
{
type: 'marketGear',
path: 'gear.flat.armor_special_turkeyArmorBase',
_id: uuid(),
},
{
type: 'marketGear',
path: 'gear.flat.back_special_turkeyTailBase',
_id: uuid(),
},
];
} else if (user.items && user.items.pets && user.items.pets['Turkey-Gilded']) {
set['items.mounts.Turkey-Gilded'] = true;
} else if (user.items && user.items.mounts && user.items.mounts['Turkey-Base']) {
set['items.pets.Turkey-Gilded'] = 5;
} else if (user.items && user.items.pets && user.items.pets['Turkey-Base']) {
set['items.mounts.Turkey-Base'] = true;
} else {
set['items.pets.Turkey-Base'] = 5;
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
if (inc) {
return await User.update({_id: user._id}, {$inc: inc, $set: set}).exec();
} else if (push) {
return await User.update({_id: user._id}, {$set: set, $push: {pinnedItems: {$each: push}}}).exec();
} else {
return await User.update({_id: user._id}, {$set: set}).exec();
}
}
module.exports = async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2019-11-01')},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};

View file

@ -1,110 +0,0 @@
import monk from 'monk';
import nconf from 'nconf';
const migrationName = 'mystery-items-201808.js'; // Update per month
const authorName = 'Sabe'; // in case script author needs to know when their ...
const authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award this month's mystery items to subscribers
*/
const MYSTERY_ITEMS = ['armor_mystery_201810', 'head_mystery_201810'];
const CONNECTION_STRING = nconf.get('MIGRATION_CONNECT_STRING');
let dbUsers = monk(CONNECTION_STRING).get('users', { castIds: false });
let UserNotification = require('../../website/server/models/userNotification').model;
function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
let query = {
migration: {$ne: migrationName},
'purchased.plan.customerId': { $ne: null },
$or: [
{ 'purchased.plan.dateTerminated': { $gte: new Date() } },
{ 'purchased.plan.dateTerminated': { $exists: false } },
{ 'purchased.plan.dateTerminated': { $eq: null } },
],
};
if (lastId) {
query._id = {
$gt: lastId,
};
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
fields: [
], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
.then(updateUsers)
.catch((err) => {
console.log(err);
return exiting(1, `ERROR! ${ err}`);
});
}
let progressCount = 1000;
let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
console.warn('All appropriate users found and modified.');
displayData();
return;
}
let userPromises = users.map(updateUser);
let lastUser = users[users.length - 1];
return Promise.all(userPromises)
.then(() => {
processUsers(lastUser._id);
});
}
function updateUser (user) {
count++;
const addToSet = {
'purchased.plan.mysteryItems': {
$each: MYSTERY_ITEMS,
},
};
const push = {
notifications: (new UserNotification({
type: 'NEW_MYSTERY_ITEMS',
data: {
MYSTERY_ITEMS,
},
})).toJSON(),
};
dbUsers.update({_id: user._id}, {$addToSet: addToSet, $push: push});
if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
function displayData () {
console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
function exiting (code, msg) {
code = code || 0; // 0 = success
if (code && !msg) {
msg = 'ERROR!';
}
if (msg) {
if (code) {
console.error(msg);
} else {
console.log(msg);
}
}
process.exit(code);
}
module.exports = processUsers;

View file

@ -16,7 +16,7 @@ async function updateUser (user) {
if (count % progressCount === 0) console.warn(`${count} ${user._id}`); if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
sendTxn( await sendTxn(
user, user,
EMAIL_SLUG, EMAIL_SLUG,
[{ name: 'BASE_URL', content: BASE_URL }], // Add variables from template [{ name: 'BASE_URL', content: BASE_URL }], // Add variables from template

View file

@ -1,72 +0,0 @@
/* eslint-disable no-console */
import { model as User } from '../../website/server/models/user';
import { model as UserNotification } from '../../website/server/models/userNotification';
const MIGRATION_NAME = 'mystery_items_201910';
const MYSTERY_ITEMS = ['armor_mystery_201910', 'head_mystery_201910'];
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count += 1;
const addToSet = {
'purchased.plan.mysteryItems': {
$each: MYSTERY_ITEMS,
},
};
const push = {
notifications: (new UserNotification({
type: 'NEW_MYSTERY_ITEMS',
data: {
MYSTERY_ITEMS,
},
})).toJSON(),
};
const set = {
migration: MIGRATION_NAME,
};
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return User.update({ _id: user._id }, { $set: set, $push: push, $addToSet: addToSet }).exec();
}
export default async function processUsers () {
const query = {
migration: { $ne: MIGRATION_NAME },
'purchased.plan.customerId': { $ne: null },
$or: [
{ 'purchased.plan.dateTerminated': { $gte: new Date() } },
{ 'purchased.plan.dateTerminated': { $exists: false } },
{ 'purchased.plan.dateTerminated': { $eq: null } },
],
};
const fields = {
_id: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({ _id: 1 })
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
}

1172
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,21 +1,21 @@
{ {
"name": "habitica", "name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.", "description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.121.0", "version": "4.125.0",
"main": "./website/server/index.js", "main": "./website/server/index.js",
"dependencies": { "dependencies": {
"@babel/core": "^7.7.2", "@babel/core": "^7.7.4",
"@babel/preset-env": "^7.7.1", "@babel/preset-env": "^7.7.4",
"@babel/register": "^7.7.0", "@babel/register": "^7.7.4",
"@google-cloud/trace-agent": "^4.2.2", "@google-cloud/trace-agent": "^4.2.3",
"@slack/client": "^3.8.1", "@slack/client": "^3.8.1",
"accepts": "^1.3.5", "accepts": "^1.3.5",
"amazon-payments": "^0.2.7", "amazon-payments": "^0.2.7",
"amplitude": "^3.5.0", "amplitude": "^3.5.0",
"apidoc": "^0.17.5", "apidoc": "^0.17.5",
"apn": "^2.2.0", "apn": "^2.2.0",
"aws-sdk": "^2.568.0", "aws-sdk": "^2.580.0",
"bcrypt": "^3.0.6", "bcrypt": "^3.0.7",
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"compression": "^1.7.4", "compression": "^1.7.4",
"cookie-session": "^1.3.3", "cookie-session": "^1.3.3",
@ -23,7 +23,7 @@
"csv-stringify": "^5.1.0", "csv-stringify": "^5.1.0",
"cwait": "^1.1.1", "cwait": "^1.1.1",
"domain-middleware": "~0.1.0", "domain-middleware": "~0.1.0",
"eslint": "^6.6.0", "eslint": "^6.7.2",
"eslint-config-habitrpg": "^6.2.0", "eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.0.0", "eslint-plugin-mocha": "^5.0.0",
"express": "^4.16.3", "express": "^4.16.3",
@ -33,10 +33,10 @@
"got": "^9.0.0", "got": "^9.0.0",
"gulp": "^4.0.0", "gulp": "^4.0.0",
"gulp-babel": "^8.0.0", "gulp-babel": "^8.0.0",
"gulp-imagemin": "^6.1.1", "gulp-imagemin": "^6.2.0",
"gulp-nodemon": "^2.4.1", "gulp-nodemon": "^2.4.1",
"gulp.spritesmith": "^6.9.0", "gulp.spritesmith": "^6.9.0",
"habitica-markdown": "^1.3.0", "habitica-markdown": "^1.3.2",
"helmet": "^3.21.2", "helmet": "^3.21.2",
"image-size": "^0.8.3", "image-size": "^0.8.3",
"in-app-purchase": "^1.11.3", "in-app-purchase": "^1.11.3",
@ -46,7 +46,7 @@
"method-override": "^3.0.0", "method-override": "^3.0.0",
"moment": "^2.24.0", "moment": "^2.24.0",
"moment-recur": "^1.0.7", "moment-recur": "^1.0.7",
"mongoose": "^5.7.9", "mongoose": "^5.7.13",
"morgan": "^1.7.0", "morgan": "^1.7.0",
"nconf": "^0.10.0", "nconf": "^0.10.0",
"node-gcm": "^1.0.2", "node-gcm": "^1.0.2",
@ -59,10 +59,11 @@
"paypal-rest-sdk": "^1.8.1", "paypal-rest-sdk": "^1.8.1",
"ps-tree": "^1.0.0", "ps-tree": "^1.0.0",
"regenerator-runtime": "^0.13.3", "regenerator-runtime": "^0.13.3",
"remove-markdown": "^0.3.0",
"rimraf": "^3.0.0", "rimraf": "^3.0.0",
"short-uuid": "^3.0.0", "short-uuid": "^3.0.0",
"stripe": "^7.13.0", "stripe": "^7.14.0",
"superagent": "^5.0.2", "superagent": "^5.1.2",
"universal-analytics": "^0.4.17", "universal-analytics": "^0.4.17",
"useragent": "^2.1.9", "useragent": "^2.1.9",
"uuid": "^3.3.3", "uuid": "^3.3.3",

View file

@ -24,7 +24,13 @@ async function deleteAmplitudeData (userId, email) {
console.log(err.response.data); console.log(err.response.data);
}); });
if (response) console.log(`${response.status} ${response.statusText}`); if (response) {
if (response.status === 200) {
console.log(`${userId} (${email}) Amplitude deletion request OK.`);
} else {
console.log(`${userId} (${email}) Amplitude response: ${response.status} ${response.statusText}`);
}
}
} }
async function deleteHabiticaData (user, email) { async function deleteHabiticaData (user, email) {
@ -54,39 +60,46 @@ async function deleteHabiticaData (user, email) {
}); });
if (response) { if (response) {
console.log(`${response.status} ${response.statusText}`); if (response.status === 200) {
if (response.status === 200) console.log(`${user._id} (${email}) removed. Last login: ${user.auth.timestamps.loggedin}`); console.log(`${user._id} (${email}) removed from Habitica. Last login: ${user.auth.timestamps.loggedin}`);
} else {
console.log(`${user._id} (${email}) Habitica response: ${response.status} ${response.statusText}`);
}
} }
} }
async function processEmailAddress (email) { async function processEmailAddress (email) {
const emailRegex = new RegExp(`^${email}$`, 'i'); const emailRegex = new RegExp(`^${email}$`, 'i');
const users = await User.find({ const localUsers = await User.find(
$or: [ { 'auth.local.email': emailRegex },
{ 'auth.local.email': emailRegex }, { _id: 1, apiToken: 1, auth: 1 },
{ 'auth.facebook.emails.value': emailRegex }, ).exec();
{ 'auth.google.emails.value': emailRegex },
], const socialUsers = await User.find(
}, {
{ $or: [
_id: 1, { 'auth.facebook.emails.value': email },
apiToken: 1, { 'auth.google.emails.value': email },
auth: 1, ],
}).exec(); },
{ _id: 1, apiToken: 1, auth: 1 },
).collation(
{ locale: 'en', strength: 1 },
).exec();
const users = localUsers.concat(socialUsers);
if (users.length < 1) { if (users.length < 1) {
console.log(`No users found with email address ${email}`); return console.log(`No users found with email address ${email}`);
} else {
Promise.all(users.map(user => (async () => {
await deleteAmplitudeData(user._id, email); // eslint-disable-line no-await-in-loop
await deleteHabiticaData(user, email); // eslint-disable-line no-await-in-loop
})()));
} }
return Promise.all(users.map(user => (async () => {
await deleteAmplitudeData(user._id, email); // eslint-disable-line no-await-in-loop
await deleteHabiticaData(user, email); // eslint-disable-line no-await-in-loop
})()));
} }
function deleteUserData (emails) { export default function deleteUserData (emails) {
const emailPromises = emails.map(processEmailAddress); const emailPromises = emails.map(processEmailAddress);
return Promise.all(emailPromises); return Promise.all(emailPromises);
} }
module.exports = deleteUserData;

View file

@ -88,6 +88,28 @@ describe('cron', () => {
user.purchased.plan.dateUpdated = moment().subtract(1, 'months').toDate(); user.purchased.plan.dateUpdated = moment().subtract(1, 'months').toDate();
}); });
it('awards current mystery items to subscriber', () => {
user.purchased.plan.dateUpdated = new Date('2018-12-11');
clock = sinon.useFakeTimers(new Date('2019-01-29'));
cron({
user, tasksByType, daysMissed, analytics,
});
expect(user.purchased.plan.mysteryItems.length).to.eql(2);
const filteredNotifications = user.notifications.filter(n => n.type === 'NEW_MYSTERY_ITEMS');
expect(filteredNotifications.length).to.equal(1);
});
it('awards multiple mystery item sets if user skipped months between logins', () => {
user.purchased.plan.dateUpdated = new Date('2018-11-11');
clock = sinon.useFakeTimers(new Date('2019-01-29'));
cron({
user, tasksByType, daysMissed, analytics,
});
expect(user.purchased.plan.mysteryItems.length).to.eql(4);
const filteredNotifications = user.notifications.filter(n => n.type === 'NEW_MYSTERY_ITEMS');
expect(filteredNotifications.length).to.equal(1);
});
it('resets plan.gemsBought on a new month', () => { it('resets plan.gemsBought on a new month', () => {
user.purchased.plan.gemsBought = 10; user.purchased.plan.gemsBought = 10;
cron({ cron({

View file

@ -439,31 +439,6 @@ describe('payments/index', () => {
fakeClock.restore(); fakeClock.restore();
}); });
it('does not awards mystery items when not within the timeframe for a mystery item', async () => {
const noMysteryItemTimeframe = 1462183920000; // May 2nd 2016
const fakeClock = sinon.useFakeTimers(noMysteryItemTimeframe);
data = { paymentMethod: 'PaymentMethod', user, sub: { key: 'basic_3mo' } };
await api.createSubscription(data);
expect(user.purchased.plan.mysteryItems).to.have.a.lengthOf(0);
fakeClock.restore();
});
it('does not add a notification for mystery items if none was awarded', async () => {
const noMysteryItemTimeframe = 1462183920000; // May 2nd 2016
const fakeClock = sinon.useFakeTimers(noMysteryItemTimeframe);
data = { paymentMethod: 'PaymentMethod', user, sub: { key: 'basic_3mo' } };
await api.createSubscription(data);
expect(user.purchased.plan.mysteryItems).to.have.a.lengthOf(0);
expect(user.notifications.find(n => n.type === 'NEW_MYSTERY_ITEMS')).to.be.undefined;
fakeClock.restore();
});
it('does not award mystery item when user already owns the item', async () => { it('does not award mystery item when user already owns the item', async () => {
const mayMysteryItemTimeframe = 1464725113000; // May 31st 2016 const mayMysteryItemTimeframe = 1464725113000; // May 31st 2016
const fakeClock = sinon.useFakeTimers(mayMysteryItemTimeframe); const fakeClock = sinon.useFakeTimers(mayMysteryItemTimeframe);

View file

@ -1317,7 +1317,7 @@ describe('Group Model', () => {
it('formats message', () => { it('formats message', () => {
const chatMessage = party.sendChat({ const chatMessage = party.sendChat({
message: 'a new message', message: 'a _new_ message with *markdown*',
user: { user: {
_id: 'user-id', _id: 'user-id',
profile: { name: 'user name' }, profile: { name: 'user name' },
@ -1336,7 +1336,8 @@ describe('Group Model', () => {
const chat = chatMessage; const chat = chatMessage;
expect(chat.text).to.eql('a new message'); expect(chat.text).to.eql('a _new_ message with *markdown*');
expect(chat.unformattedText).to.eql('a new message with markdown');
expect(validator.isUUID(chat.id)).to.eql(true); expect(validator.isUUID(chat.id)).to.eql(true);
expect(chat.timestamp).to.be.a('date'); expect(chat.timestamp).to.be.a('date');
expect(chat.likes).to.eql({}); expect(chat.likes).to.eql({});

View file

@ -6,7 +6,8 @@ import {
describe('POST /members/send-private-message', () => { describe('POST /members/send-private-message', () => {
let userToSendMessage; let userToSendMessage;
const messageToSend = 'Test Private Message'; const messageToSend = 'Test *Private* Message';
const unformattedMessage = 'Test Private Message';
beforeEach(async () => { beforeEach(async () => {
userToSendMessage = await generateUser(); userToSendMessage = await generateUser();
@ -110,7 +111,9 @@ describe('POST /members/send-private-message', () => {
const sendersMessageInReceiversInbox = _.find( const sendersMessageInReceiversInbox = _.find(
updatedReceiver.inbox.messages, updatedReceiver.inbox.messages,
message => message.uuid === userToSendMessage._id && message.text === messageToSend, message => message.uuid === userToSendMessage._id
&& message.text === messageToSend
&& message.unformattedText === unformattedMessage,
); );
const sendersMessageInSendersInbox = _.find( const sendersMessageInSendersInbox = _.find(

View file

@ -7,6 +7,7 @@ module.exports = {
extends: [ extends: [
'habitrpg/lib/vue', 'habitrpg/lib/vue',
], ],
ignorePatterns: ['dist/', 'node_modules/'],
rules: { rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',

View file

@ -1,4 +1,4 @@
# new_client # Habitica Client
## Project setup ## Project setup
``` ```
@ -27,3 +27,31 @@ npm run lint
### Customize configuration ### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/). See [Configuration Reference](https://cli.vuejs.org/config/).
## Storybook
Storybook is mainly used while working on UI-Components to see changes faster instead of using the website.
### Start Storybook
```
npm run storybook:serve
```
This will start the storybook process, every `*.stories.js`-File is searched and added to the storybook overview.
### Storybook Worklow
Usually when you working on `component-name.vue` you also create a `component-name.stories.js` file.
Example of the stories structure - [Storybook Docs][StorybookDocsExample] - [CountBadge][CountBadgeExample]
[StorybookDocsExample]: https://storybook.js.org/docs/guides/guide-vue/#step-4-write-your-stories
[CountBadgeExample]: src/components/ui/countBadge.stories.js
Each function or example of this component will be put after `storiesOf('Your Component', module)`,
in a separate `.add('function of component', ...`
### Storybook Build
After each client build, storybook build is also triggered and will be available in `dist/storybook`

View file

@ -0,0 +1,5 @@
/* eslint-disable import/no-extraneous-dependencies */
import '@storybook/addon-actions/register';
import '@storybook/addon-knobs/register';
import '@storybook/addon-links/register';
import '@storybook/addon-notes/register';

View file

@ -0,0 +1,11 @@
/* eslint-disable import/no-extraneous-dependencies */
import { configure } from '@storybook/vue';
import '../../src/assets/scss/index.scss';
const req = require.context('../../src', true, /.stories.js$/);
function loadStories () {
req.keys().forEach(filename => req(filename));
}
configure(loadStories, module);

File diff suppressed because it is too large Load diff

View file

@ -5,30 +5,37 @@
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js",
"lint": "vue-cli-service lint .", "lint": "vue-cli-service lint .",
"lint-no-fix": "vue-cli-service lint --no-fix .", "lint-no-fix": "vue-cli-service lint --no-fix .",
"postinstall": "node ./scripts/npm-postinstall.js" "postinstall": "node ./scripts/npm-postinstall.js",
"storybook:build": "vue-cli-service storybook:build -c config/storybook -o dist/storybook",
"storybook:serve": "vue-cli-service storybook:serve -p 6006 -c config/storybook",
"test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js"
}, },
"dependencies": { "dependencies": {
"@vue/cli-plugin-babel": "^4.0.5", "@vue/cli-plugin-babel": "^4.1.1",
"@vue/cli-plugin-eslint": "^4.0.5", "@vue/cli-plugin-eslint": "^4.1.1",
"@vue/cli-plugin-router": "^4.0.5", "@vue/cli-plugin-router": "^4.1.1",
"@vue/cli-plugin-unit-mocha": "^4.0.5", "@vue/cli-plugin-unit-mocha": "^4.1.1",
"@vue/cli-service": "^4.0.5", "@vue/cli-service": "^4.1.1",
"@storybook/addon-actions": "^5.0.0",
"@storybook/addon-knobs": "^5.0.0",
"@storybook/addon-links": "^5.0.0",
"@storybook/addon-notes": "^5.0.0",
"@storybook/vue": "^5.2.5",
"@vue/test-utils": "1.0.0-beta.29", "@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^5.6.0", "amplitude-js": "^5.7.0",
"axios": "^0.19.0", "axios": "^0.19.0",
"axios-progress-bar": "^1.2.0", "axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.0.1", "babel-eslint": "^10.0.1",
"bootstrap": "^4.3.1", "bootstrap": "^4.4.1",
"bootstrap-vue": "^2.0.4", "bootstrap-vue": "^2.1.0",
"chai": "^4.1.2", "chai": "^4.1.2",
"core-js": "^3.4.0", "core-js": "^3.4.5",
"eslint": "^6.6.0", "eslint": "^6.7.2",
"eslint-config-habitrpg": "^6.2.0", "eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.3.0", "eslint-plugin-mocha": "^5.3.0",
"eslint-plugin-vue": "^6.0.0", "eslint-plugin-vue": "^6.0.1",
"habitica-markdown": "^1.3.0", "habitica-markdown": "^1.3.0",
"hellojs": "^1.18.1", "hellojs": "^1.18.1",
"inspectpack": "^4.2.2", "inspectpack": "^4.2.2",
@ -37,16 +44,17 @@
"lodash": "^4.17.15", "lodash": "^4.17.15",
"moment": "^2.24.0", "moment": "^2.24.0",
"nconf": "^0.10.0", "nconf": "^0.10.0",
"sass": "^1.23.3", "sass": "^1.23.7",
"sass-loader": "^8.0.0", "sass-loader": "^8.0.0",
"smartbanner.js": "^1.14.5", "smartbanner.js": "^1.15.0",
"svg-inline-loader": "^0.8.0", "svg-inline-loader": "^0.8.0",
"svg-url-loader": "^3.0.2", "svg-url-loader": "^3.0.3",
"svgo": "^1.3.2", "svgo": "^1.3.2",
"svgo-loader": "^2.2.1", "svgo-loader": "^2.2.1",
"uuid": "^3.3.3", "uuid": "^3.3.3",
"validator": "^11.1.0", "validator": "^11.1.0",
"vue": "^2.6.10", "vue": "^2.6.10",
"vue-cli-plugin-storybook": "^0.6.1",
"vue-mugen-scroll": "^0.2.6", "vue-mugen-scroll": "^0.2.6",
"vue-router": "^3.0.6", "vue-router": "^3.0.6",
"vue-template-compiler": "^2.6.10", "vue-template-compiler": "^2.6.10",

View file

@ -6,4 +6,8 @@ if (process.env.NODE_ENV === 'production') {
execSync('npm run build', { execSync('npm run build', {
stdio: 'inherit', stdio: 'inherit',
}); });
execSync('npm run storybook:build', {
stdio: 'inherit',
});
} }

View file

@ -1,36 +1,42 @@
.promo_armoire_backgrounds_201911 { .promo_armoire_backgrounds_201912 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -451px; background-position: 0px -752px;
width: 423px; width: 423px;
height: 147px; height: 147px;
} }
.promo_costume_achievement { .promo_costume_achievement {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -747px; background-position: -1175px -296px;
width: 144px; width: 144px;
height: 156px; height: 156px;
} }
.promo_delightful_dinos { .promo_delightful_dinos {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -424px -451px; background-position: -424px -752px;
width: 423px; width: 423px;
height: 147px; height: 147px;
} }
.promo_ember_thunderstorm_potions { .promo_ember_thunderstorm_potions {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -599px; background-position: -928px 0px;
width: 423px; width: 423px;
height: 147px; height: 147px;
} }
.promo_mystery_201910 { .promo_harvest_feast {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -424px -599px; background-position: -928px -296px;
width: 246px;
height: 168px;
}
.promo_mystery_201912 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -928px -148px;
width: 282px; width: 282px;
height: 147px; height: 147px;
} }
.promo_take_this { .promo_take_this {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -451px -365px; background-position: -1211px -148px;
width: 96px; width: 96px;
height: 69px; height: 69px;
} }
@ -40,9 +46,21 @@
width: 450px; width: 450px;
height: 450px; height: 450px;
} }
.scene_office {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -421px -451px;
width: 360px;
height: 240px;
}
.scene_seaserpent { .scene_seaserpent {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -451px 0px; background-position: -451px 0px;
width: 476px; width: 476px;
height: 364px; height: 364px;
} }
.scene_yarn_boss {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -451px;
width: 420px;
height: 300px;
}

View file

@ -994,163 +994,163 @@
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_ice_cave { .background_holiday_market {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -426px -592px; background-position: -426px -592px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_iceberg { .background_holiday_wreath {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px -592px; background-position: -284px -592px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_idyllic_cabin { .background_ice_cave {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -142px -592px; background-position: -142px -592px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_in_a_classroom { .background_iceberg {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: 0px -592px; background-position: 0px -592px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_in_an_ancient_tomb { .background_idyllic_cabin {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -710px -444px; background-position: -710px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_island_waterfalls { .background_in_a_classroom {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -710px -296px; background-position: -710px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_kelp_forest { .background_in_an_ancient_tomb {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -710px -148px; background-position: -710px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_lake_with_floating_lanterns { .background_island_waterfalls {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -710px 0px; background-position: -710px 0px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_lighthouse_shore { .background_kelp_forest {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -568px -444px; background-position: -568px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_lilypad { .background_lake_with_floating_lanterns {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -426px -444px; background-position: -426px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_magic_beanstalk { .background_lighthouse_shore {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px -444px; background-position: -284px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_magical_candles { .background_lilypad {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -142px -444px; background-position: -142px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_magical_museum { .background_magic_beanstalk {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: 0px -444px; background-position: 0px -444px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_marble_temple { .background_magical_candles {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -568px -296px; background-position: -568px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_market { .background_magical_museum {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -568px -148px; background-position: -568px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_meandering_cave { .background_marble_temple {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -568px 0px; background-position: -568px 0px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_medieval_kitchen { .background_market {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -426px -296px; background-position: -426px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_midnight_castle { .background_meandering_cave {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px -296px; background-position: -284px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_midnight_clouds { .background_medieval_kitchen {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -142px -296px; background-position: -142px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_midnight_lake { .background_midnight_castle {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: 0px -296px; background-position: 0px -296px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_mist_shrouded_mountain { .background_midnight_clouds {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -426px -148px; background-position: -426px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_mistiflying_circus { .background_midnight_lake {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -426px 0px; background-position: -426px 0px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_monster_makers_workshop { .background_mist_shrouded_mountain {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px -148px; background-position: -284px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_mountain_lake { .background_mistiflying_circus {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -142px -148px; background-position: -142px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_mountain_pyramid { .background_monster_makers_workshop {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: 0px -148px; background-position: 0px -148px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_night_dunes { .background_mountain_lake {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px 0px; background-position: -284px 0px;
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_ocean_sunrise { .background_mountain_pyramid {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -142px 0px; background-position: -142px 0px;
width: 141px; width: 141px;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,330 +1,492 @@
.weapon_warrior_3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -1361px;
width: 90px;
height: 90px;
}
.weapon_warrior_4 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -1270px;
width: 90px;
height: 90px;
}
.weapon_warrior_5 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -1452px;
width: 90px;
height: 90px;
}
.weapon_warrior_6 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -1452px;
width: 90px;
height: 90px;
}
.weapon_wizard_0 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -1543px;
width: 90px;
height: 90px;
}
.weapon_wizard_1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -1543px;
width: 90px;
height: 90px;
}
.weapon_wizard_2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -997px;
width: 90px;
height: 90px;
}
.weapon_wizard_3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -1088px;
width: 90px;
height: 90px;
}
.weapon_wizard_4 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1893px -1088px;
width: 90px;
height: 90px;
}
.weapon_wizard_5 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -1179px;
width: 90px;
height: 90px;
}
.weapon_wizard_6 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -1270px;
width: 90px;
height: 90px;
}
.Pet_Currency_Gem { .Pet_Currency_Gem {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1269px; background-position: -1921px -444px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.Pet_Currency_Gem1x { .Pet_Currency_Gem1x {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1992px -592px; background-position: -1957px -676px;
width: 15px; width: 15px;
height: 13px; height: 13px;
} }
.Pet_Currency_Gem2x { .Pet_Currency_Gem2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1766px -1474px; background-position: -1960px -766px;
width: 30px; width: 30px;
height: 26px; height: 26px;
} }
.PixelPaw-Gold { .PixelPaw-Gold {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1929px -711px; background-position: -1688px -1436px;
width: 51px; width: 51px;
height: 51px; height: 51px;
} }
.PixelPaw { .PixelPaw {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -1474px; background-position: -1740px -1436px;
width: 51px; width: 51px;
height: 51px; height: 51px;
} }
.PixelPaw002 { .PixelPaw002 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1614px; background-position: -220px -203px;
width: 51px; width: 51px;
height: 51px; height: 51px;
} }
.avatar_floral_healer {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1887px -576px;
width: 99px;
height: 99px;
}
.avatar_floral_rogue {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -697px;
width: 99px;
height: 99px;
}
.avatar_floral_warrior {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -897px;
width: 99px;
height: 99px;
}
.avatar_floral_wizard {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -797px;
width: 99px;
height: 99px;
}
.empty_bottles {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1921px -513px;
width: 64px;
height: 54px;
}
.ghost {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1802px -997px;
width: 90px;
height: 90px;
}
.inventory_present { .inventory_present {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1935px -854px; background-position: -1696px -608px;
width: 68px;
height: 68px;
}
.inventory_present_01 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1902px -797px;
width: 68px;
height: 68px;
}
.inventory_present_02 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1902px -897px;
width: 68px;
height: 68px;
}
.inventory_present_03 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -470px;
width: 68px;
height: 68px;
}
.inventory_present_04 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -539px;
width: 68px;
height: 68px;
}
.inventory_present_05 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1696px -539px;
width: 68px;
height: 68px;
}
.inventory_present_06 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -884px;
width: 68px;
height: 68px;
}
.inventory_present_07 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1696px -884px;
width: 68px;
height: 68px;
}
.inventory_present_08 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -953px;
width: 68px;
height: 68px;
}
.inventory_present_09 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1696px -1367px;
width: 68px;
height: 68px;
}
.inventory_present_10 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1902px -697px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_present_11 { .inventory_present_11 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1200px; background-position: -1696px -470px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_present_12 { .inventory_present_12 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1269px; background-position: -1627px -608px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_birthday { .inventory_special_birthday {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -993px; background-position: -1627px -746px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_congrats { .inventory_special_congrats {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1338px; background-position: -1696px -746px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_fortify { .inventory_special_fortify {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1407px; background-position: -1627px -815px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_getwell { .inventory_special_getwell {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1476px; background-position: -1696px -953px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_goodluck { .inventory_special_goodluck {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1929px -642px; background-position: -1627px -1367px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_greeting { .inventory_special_greeting {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1935px -763px; background-position: -1696px -1298px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_nye { .inventory_special_nye {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1062px; background-position: -1627px -1298px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_opaquePotion { .inventory_special_opaquePotion {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1131px; background-position: -1696px -1229px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_seafoam { .inventory_special_seafoam {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1338px; background-position: -1627px -1229px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_shinySeed { .inventory_special_shinySeed {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1545px; background-position: -1696px -1160px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_snowball { .inventory_special_snowball {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1614px; background-position: -1627px -1160px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_spookySparkles { .inventory_special_spookySparkles {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -993px; background-position: -1696px -1091px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_thankyou { .inventory_special_thankyou {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1062px; background-position: -1627px -1091px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_trinket { .inventory_special_trinket {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1131px; background-position: -1696px -1022px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_special_valentine { .inventory_special_valentine {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1200px; background-position: -1627px -1022px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.knockout { .knockout {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -945px; background-position: -1627px -422px;
width: 120px; width: 120px;
height: 47px; height: 47px;
} }
.pet_key { .pet_key {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1545px; background-position: -1696px -815px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.rebirth_orb { .rebirth_orb {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1476px; background-position: -1696px -677px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.seafoam_star { .seafoam_star {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -854px; background-position: -1893px -1179px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.shop_armoire { .shop_armoire {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1913px -1407px; background-position: -1627px -677px;
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.snowman { .snowman {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -763px; background-position: -1802px -1361px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.zzz { .zzz {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1963px -551px; background-position: -220px -255px;
width: 40px; width: 40px;
height: 40px; height: 40px;
} }
.zzz_light { .zzz_light {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1963px -510px; background-position: -1748px -422px;
width: 40px; width: 40px;
height: 40px; height: 40px;
} }
.notif_inventory_present_01 { .notif_inventory_present_01 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1981px -711px; background-position: -1953px -229px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_02 { .notif_inventory_present_02 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1965px -945px; background-position: -1953px -200px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_03 { .notif_inventory_present_03 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1965px -1614px; background-position: -1953px -171px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_04 { .notif_inventory_present_04 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -1683px; background-position: -1953px -142px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_05 { .notif_inventory_present_05 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1873px -1683px; background-position: -1931px -766px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_06 { .notif_inventory_present_06 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1902px -1683px; background-position: -1902px -766px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_07 { .notif_inventory_present_07 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1737px -1474px; background-position: -1953px -409px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_08 { .notif_inventory_present_08 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1960px -1683px; background-position: -1953px -380px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_09 { .notif_inventory_present_09 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1679px -1474px; background-position: -1953px -351px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_10 { .notif_inventory_present_10 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1963px -592px; background-position: -1953px -322px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_11 { .notif_inventory_present_11 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1708px -1474px; background-position: -1953px -258px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_present_12 { .notif_inventory_present_12 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1931px -1683px; background-position: -1953px -293px;
width: 28px; width: 28px;
height: 28px; height: 28px;
} }
.notif_inventory_special_birthday { .notif_inventory_special_birthday {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1131px; background-position: -1971px -797px;
width: 20px; width: 20px;
height: 24px; height: 24px;
} }
.notif_inventory_special_congrats { .notif_inventory_special_congrats {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1156px; background-position: -1927px -866px;
width: 20px; width: 20px;
height: 22px; height: 22px;
} }
.notif_inventory_special_getwell { .notif_inventory_special_getwell {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1981px -740px; background-position: -1948px -866px;
width: 20px; width: 20px;
height: 22px; height: 22px;
} }
.notif_inventory_special_goodluck { .notif_inventory_special_goodluck {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1020px; background-position: -1971px -697px;
width: 20px; width: 20px;
height: 26px; height: 26px;
} }
.notif_inventory_special_greeting { .notif_inventory_special_greeting {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1200px; background-position: -1969px -866px;
width: 20px; width: 20px;
height: 22px; height: 22px;
} }
.notif_inventory_special_nye { .notif_inventory_special_nye {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -993px; background-position: -1902px -866px;
width: 24px; width: 24px;
height: 26px; height: 26px;
} }
.notif_inventory_special_thankyou { .notif_inventory_special_thankyou {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1087px; background-position: -1971px -724px;
width: 20px; width: 20px;
height: 24px; height: 24px;
} }
.notif_inventory_special_valentine { .notif_inventory_special_valentine {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1982px -1062px; background-position: -1971px -822px;
width: 20px; width: 20px;
height: 24px; height: 24px;
} }
.npc_bailey { .npc_bailey {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -220px -203px; background-position: -1627px -1436px;
width: 60px; width: 60px;
height: 72px; height: 72px;
} }
.npc_justin { .npc_justin {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -642px; background-position: -1802px -576px;
width: 84px; width: 84px;
height: 120px; height: 120px;
} }
.npc_matt { .npc_matt {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1155px -1315px; background-position: -208px -1529px;
width: 195px; width: 195px;
height: 138px; height: 138px;
} }
@ -336,22 +498,28 @@
} }
.banner_flair_dysheartener { .banner_flair_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1935px -832px; background-position: -1887px -676px;
width: 69px; width: 69px;
height: 18px; height: 18px;
} }
.phobia_dysheartener { .phobia_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -1278px; background-position: -307px -220px;
width: 201px; width: 201px;
height: 195px; height: 195px;
} }
.quest_alligator { .quest_alligator {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -862px; background-position: -967px -660px;
width: 201px; width: 201px;
height: 213px; height: 213px;
} }
.quest_amber {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px -660px;
width: 219px;
height: 219px;
}
.quest_armadillo { .quest_armadillo {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -527px 0px; background-position: -527px 0px;
@ -360,73 +528,73 @@
} }
.quest_atom1 { .quest_atom1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -445px -1315px; background-position: -1335px -1315px;
width: 250px; width: 250px;
height: 150px; height: 150px;
} }
.quest_atom2 { .quest_atom2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -947px -1315px; background-position: 0px -1529px;
width: 207px; width: 207px;
height: 138px; height: 138px;
} }
.quest_atom3 { .quest_atom3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -967px -660px; background-position: -433px -1315px;
width: 216px; width: 216px;
height: 180px; height: 180px;
} }
.quest_axolotl { .quest_axolotl {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -655px; background-position: -660px -655px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_badger { .quest_badger {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -880px -875px; background-position: 0px -875px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_basilist { .quest_basilist {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -191px -1529px; background-position: -1802px 0px;
width: 189px; width: 189px;
height: 141px; height: 141px;
} }
.quest_beetle { .quest_beetle {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -1076px; background-position: -747px -440px;
width: 204px; width: 204px;
height: 201px; height: 201px;
} }
.quest_bronze { .quest_bronze {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px -660px; background-position: -880px -875px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_bunny { .quest_bunny {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px -880px; background-position: -222px -1315px;
width: 210px; width: 210px;
height: 186px; height: 186px;
} }
.quest_butterfly { .quest_butterfly {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1407px 0px; background-position: -1187px -440px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_cheetah { .quest_cheetah {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1407px -660px; background-position: 0px -1095px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_cow { .quest_cow {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -307px -220px; background-position: -1627px 0px;
width: 174px; width: 174px;
height: 213px; height: 213px;
} }
@ -438,31 +606,31 @@
} }
.quest_dilatoryDistress1 { .quest_dilatoryDistress1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -651px; background-position: -1187px -880px;
width: 210px; width: 210px;
height: 210px; height: 210px;
} }
.quest_dilatoryDistress2 { .quest_dilatoryDistress2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -208px; background-position: -1802px -293px;
width: 150px; width: 150px;
height: 150px; height: 150px;
} }
.quest_dilatoryDistress3 { .quest_dilatoryDistress3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1100px -1095px; background-position: -1407px -440px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_dilatory_derby { .quest_dilatory_derby {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1407px -440px; background-position: -880px -1095px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_dolphin { .quest_dolphin {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -880px -1095px; background-position: -1407px -660px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
@ -474,31 +642,31 @@
} }
.quest_egg { .quest_egg {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px 0px; background-position: -1627px -214px;
width: 165px; width: 165px;
height: 207px; height: 207px;
} }
.quest_evilsanta { .quest_evilsanta {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -510px; background-position: -1802px -444px;
width: 118px; width: 118px;
height: 131px; height: 131px;
} }
.quest_evilsanta2 { .quest_evilsanta2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -440px -1095px; background-position: -1407px 0px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_falcon { .quest_falcon {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -220px -1095px; background-position: -1100px -1095px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_ferret { .quest_ferret {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -1095px; background-position: -440px -875px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
@ -510,19 +678,19 @@
} }
.quest_ghost_stag { .quest_ghost_stag {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px -440px; background-position: -440px -1095px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_goldenknight1 { .quest_goldenknight1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px -220px; background-position: -220px -1095px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_goldenknight2 { .quest_goldenknight2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -696px -1315px; background-position: -1084px -1315px;
width: 250px; width: 250px;
height: 150px; height: 150px;
} }
@ -534,49 +702,49 @@
} }
.quest_gryphon { .quest_gryphon {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -747px -440px; background-position: -867px -1315px;
width: 216px; width: 216px;
height: 177px; height: 177px;
} }
.quest_guineapig { .quest_guineapig {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1407px -880px; background-position: -1187px -220px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_harpy { .quest_harpy {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -660px -875px; background-position: -1187px 0px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_hedgehog { .quest_hedgehog {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1407px -1100px; background-position: -527px -220px;
width: 219px; width: 219px;
height: 186px; height: 186px;
} }
.quest_hippo { .quest_hippo {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -440px -875px; background-position: -660px -875px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_horse { .quest_horse {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -220px -875px; background-position: -307px 0px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_kangaroo { .quest_kangaroo {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -875px; background-position: -220px -875px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_kraken { .quest_kraken {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -527px -220px; background-position: -650px -1315px;
width: 216px; width: 216px;
height: 177px; height: 177px;
} }
@ -600,31 +768,31 @@
} }
.quest_mayhemMistiflying1 { .quest_mayhemMistiflying1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1844px -359px; background-position: -1802px -142px;
width: 150px; width: 150px;
height: 150px; height: 150px;
} }
.quest_mayhemMistiflying2 { .quest_mayhemMistiflying2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -660px -655px; background-position: -440px -655px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_mayhemMistiflying3 { .quest_mayhemMistiflying3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -440px -655px; background-position: -220px -655px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_monkey { .quest_monkey {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -220px -655px; background-position: 0px -655px;
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_moon1 { .quest_moon1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -217px; background-position: -1407px -880px;
width: 216px; width: 216px;
height: 216px; height: 216px;
} }
@ -660,37 +828,7 @@
} }
.quest_nudibranch { .quest_nudibranch {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px -434px; background-position: -1407px -1097px;
width: 216px; width: 216px;
height: 216px; height: 216px;
} }
.quest_octopus {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -222px -1315px;
width: 222px;
height: 177px;
}
.quest_owl {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -307px 0px;
width: 219px;
height: 219px;
}
.quest_peacock {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1627px 0px;
width: 216px;
height: 216px;
}
.quest_penguin {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -1529px;
width: 190px;
height: 183px;
}
.quest_pterodactyl {
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
background-position: -1187px 0px;
width: 219px;
height: 219px;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 KiB

After

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 KiB

After

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 KiB

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View file

@ -30,10 +30,10 @@
</button> </button>
<div class="checkbox"> <div class="checkbox">
<input <input
id="user-preferences-suppressModals-streak"
v-model="user.preferences.suppressModals.streak" v-model="user.preferences.suppressModals.streak"
type="checkbox" type="checkbox"
@change="suppressModals" @change="suppressModals"
id="user-preferences-suppressModals-streak"
> >
<label for="user-preferences-suppressModals-streak">{{ $t('dontShowAgain') }}</label> <label for="user-preferences-suppressModals-streak">{{ $t('dontShowAgain') }}</label>
</div> </div>

View file

@ -151,7 +151,13 @@ export default {
'blackTopFrame', 'blueTopFrame', 'greenTopFrame', 'pinkTopFrame', 'redTopFrame', 'whiteTopFrame', 'yellowTopFrame', 'blackTopFrame', 'blueTopFrame', 'greenTopFrame', 'pinkTopFrame', 'redTopFrame', 'whiteTopFrame', 'yellowTopFrame',
'blackHalfMoon', 'blueHalfMoon', 'greenHalfMoon', 'pinkHalfMoon', 'redHalfMoon', 'whiteHalfMoon', 'yellowHalfMoon', 'blackHalfMoon', 'blueHalfMoon', 'greenHalfMoon', 'pinkHalfMoon', 'redHalfMoon', 'whiteHalfMoon', 'yellowHalfMoon',
]; ];
const options = keys.map(key => { const noneOption = this.createGearItem(0, 'eyewear', 'base');
noneOption.none = true;
const options = [
noneOption,
];
for (const key of keys) {
const newKey = `eyewear_special_${key}`; const newKey = `eyewear_special_${key}`;
const option = {}; const option = {};
option.key = key; option.key = key;
@ -164,8 +170,9 @@ export default {
return this.equip(newKey, type); return this.equip(newKey, type);
}; };
return option; options.push(option);
}); }
return options; return options;
}, },
freeShirts () { freeShirts () {
@ -179,20 +186,18 @@ export default {
}, },
headbands () { headbands () {
const keys = ['blackHeadband', 'blueHeadband', 'greenHeadband', 'pinkHeadband', 'redHeadband', 'whiteHeadband', 'yellowHeadband']; const keys = ['blackHeadband', 'blueHeadband', 'greenHeadband', 'pinkHeadband', 'redHeadband', 'whiteHeadband', 'yellowHeadband'];
const options = keys.map(key => { const noneOption = this.createGearItem(0, 'headAccessory', 'base', 'headband');
const newKey = `headAccessory_special_${key}`; noneOption.none = true;
const option = {}; const options = [
option.key = key; noneOption,
option.active = this.user.preferences.costume ];
? this.user.items.gear.costume.headAccessory === newKey
: this.user.items.gear.equipped.headAccessory === newKey; for (const key of keys) {
option.class = `headAccessory_special_${option.key} headband`; const option = this.createGearItem(key, 'headAccessory', 'special', 'headband');
option.click = () => {
const type = this.user.preferences.costume ? 'costume' : 'equipped'; options.push(option);
return this.equip(newKey, type); }
};
return option;
});
return options; return options;
}, },
chairs () { chairs () {
@ -234,7 +239,14 @@ export default {
// user purchases object, this is not recomputed. Hack for now // user purchases object, this is not recomputed. Hack for now
let backgroundUpdate = this.backgroundUpdate; // eslint-disable-line let backgroundUpdate = this.backgroundUpdate; // eslint-disable-line
const keys = this.animalItemKeys[category]; const keys = this.animalItemKeys[category];
const options = keys.map(key => {
const noneOption = this.createGearItem(0, category, 'base', category);
noneOption.none = true;
const options = [
noneOption,
];
for (const key of keys) {
const newKey = `${category}_special_${key}`; const newKey = `${category}_special_${key}`;
const userPurchased = this.user.items.gear.owned[newKey]; const userPurchased = this.user.items.gear.owned[newKey];
@ -265,8 +277,10 @@ export default {
const type = this.user.preferences.costume ? 'costume' : 'equipped'; const type = this.user.preferences.costume ? 'costume' : 'equipped';
return this.equip(newKey, type); return this.equip(newKey, type);
}; };
return option;
}); options.push(option);
}
return options; return options;
}, },
animalItemsUnlockString (category) { animalItemsUnlockString (category) {
@ -285,6 +299,44 @@ export default {
}); });
return own; return own;
}, },
createGearItem (key, gearType, subGearType, additionalClass) {
const newKey = `${gearType}_${subGearType ? `${subGearType}_` : ''}${key}`;
const option = {};
option.key = key;
const visibleGearType = this.user.preferences.costume ? 'costume' : 'equipped';
const currentlyEquippedValue = this.user.items.gear[visibleGearType][gearType];
option.active = currentlyEquippedValue === newKey;
if (key === 0) {
// if key is the "none" option check if a property
// doesn't have a value and mark it as active
option.active = option.active || !currentlyEquippedValue;
}
option.class = `${newKey} ${additionalClass}`;
option.click = () => {
const type = this.user.preferences.costume ? 'costume' : 'equipped';
const currentlyEquipped = this.user.items.gear[type][gearType];
// no need to call api/equip-op if its already selected
if (currentlyEquipped === newKey || (key === 0 && !currentlyEquipped)) {
return;
}
let keyToEquip = newKey;
if (option.none) {
// you need to "equip" the current selected AGAIN in order to un-equip it
// the "none-key" isn't allowed to be sent
keyToEquip = currentlyEquipped;
}
this.equip(keyToEquip, type);
};
return option;
},
}, },
}; };
</script> </script>

View file

@ -1,7 +1,10 @@
<template> <template>
<div class="row"> <div class="row">
<challenge-modal @updatedChallenge="updatedChallenge" /> <challenge-modal @updatedChallenge="updatedChallenge" />
<leave-challenge-modal :challenge-id="challenge._id" /> <leave-challenge-modal
:challenge-id="challenge._id"
@update-challenge="updateChallenge"
/>
<close-challenge-modal <close-challenge-modal
:members="members" :members="members"
:challenge-id="challenge._id" :challenge-id="challenge._id"
@ -493,12 +496,20 @@ export default {
}, },
async joinChallenge () { async joinChallenge () {
this.user.challenges.push(this.searchId); this.user.challenges.push(this.searchId);
await this.$store.dispatch('challenges:joinChallenge', { challengeId: this.searchId }); this.challenge = await this.$store.dispatch('challenges:joinChallenge', { challengeId: this.searchId });
this.members = await this
.loadMembers({ challengeId: this.searchId, includeAllPublicFields: true });
await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true }); await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true });
}, },
async leaveChallenge () { async leaveChallenge () {
this.$root.$emit('bv::show::modal', 'leave-challenge-modal'); this.$root.$emit('bv::show::modal', 'leave-challenge-modal');
}, },
async updateChallenge () {
this.challenge = await this.$store.dispatch('challenges:getChallenge', { challengeId: this.searchId });
this.members = await this
.loadMembers({ challengeId: this.searchId, includeAllPublicFields: true });
},
closeChallenge () { closeChallenge () {
this.$root.$emit('bv::show::modal', 'close-challenge-modal'); this.$root.$emit('bv::show::modal', 'close-challenge-modal');
}, },

View file

@ -595,7 +595,7 @@ export default {
this.$root.$emit('bv::hide::modal', 'challenge-modal'); this.$root.$emit('bv::hide::modal', 'challenge-modal');
this.$router.push(`/challenges/${challenge._id}`); this.$router.push(`/challenges/${challenge._id}`);
}, },
updateChallenge () { async updateChallenge () {
const categoryKeys = this.workingChallenge.categories; const categoryKeys = this.workingChallenge.categories;
const serverCategories = []; const serverCategories = [];
categoryKeys.forEach(key => { categoryKeys.forEach(key => {
@ -610,10 +610,8 @@ export default {
const challengeDetails = clone(this.workingChallenge); const challengeDetails = clone(this.workingChallenge);
challengeDetails.categories = serverCategories; challengeDetails.categories = serverCategories;
this.$emit('updatedChallenge', { const challenge = await this.$store.dispatch('challenges:updateChallenge', { challenge: challengeDetails });
challenge: challengeDetails, this.$emit('updatedChallenge', { challenge });
});
this.$store.dispatch('challenges:updateChallenge', { challenge: challengeDetails });
this.resetWorkingChallenge(); this.resetWorkingChallenge();
this.$root.$emit('bv::hide::modal', 'challenge-modal'); this.$root.$emit('bv::hide::modal', 'challenge-modal');
}, },

View file

@ -54,6 +54,7 @@ export default {
this.close(); this.close();
}, },
close () { close () {
this.$emit('update-challenge');
this.$root.$emit('bv::hide::modal', 'leave-challenge-modal'); this.$root.$emit('bv::hide::modal', 'leave-challenge-modal');
}, },
}, },

View file

@ -655,7 +655,7 @@ export default {
memberId: member._id, memberId: member._id,
groupId: this.groupId, groupId: this.groupId,
}); });
this.viewMembers(); if (this.invites.length === 0) this.viewMembers();
}, },
async promoteToLeader (member) { async promoteToLeader (member) {
const groupData = { ...this.group }; const groupData = { ...this.group };

View file

@ -169,7 +169,7 @@ export default {
openStatus: undefined, openStatus: undefined,
actionableNotifications: [ actionableNotifications: [
'GUILD_INVITATION', 'PARTY_INVITATION', 'CHALLENGE_INVITATION', 'GUILD_INVITATION', 'PARTY_INVITATION', 'CHALLENGE_INVITATION',
'QUEST_INVITATION', 'GROUP_TASK_NEEDS_WORK', 'GROUP_TASK_APPROVAL', 'QUEST_INVITATION', 'GROUP_TASK_NEEDS_WORK',
], ],
// A list of notifications handled by this component, // A list of notifications handled by this component,
// listed in the order they should appear in the notifications panel. // listed in the order they should appear in the notifications panel.

View file

@ -1437,6 +1437,10 @@ export default {
this.task.group.sharedCompletion = this.sharedCompletion; this.task.group.sharedCompletion = this.sharedCompletion;
} }
if (this.task.type === 'reward' && this.task.value === '') {
this.task.value = 0;
}
if (this.purpose === 'create') { if (this.purpose === 'create') {
if (this.challengeId) { if (this.challengeId) {
const response = await this.$store.dispatch('tasks:createChallengeTasks', { const response = await this.$store.dispatch('tasks:createChallengeTasks', {

View file

@ -0,0 +1,27 @@
/* eslint-disable import/no-extraneous-dependencies */
import { storiesOf } from '@storybook/vue';
import CountBadge from './countBadge.vue';
storiesOf('Count Badge', module)
.add('simple', () => ({
components: { CountBadge },
template: `
<div style="position: absolute; margin: 20px">
<count-badge :count="2" :show="true"></count-badge>
</div>
`,
}))
.add('bind count', () => ({
components: { CountBadge },
template: `
<div style="position: absolute; margin: 20px">
<count-badge :count="count" :show="true"></count-badge>
</div>
`,
data () {
return {
count: 3,
};
},
}));

View file

@ -3,8 +3,8 @@
"challengeDetails": "Challenges are community events in which players compete and earn prizes by completing a group of related tasks.", "challengeDetails": "Challenges are community events in which players compete and earn prizes by completing a group of related tasks.",
"brokenChaLink": "Broken Challenge Link", "brokenChaLink": "Broken Challenge Link",
"brokenTask": "Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do?", "brokenTask": "Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do?",
"keepIt": "Keep It", "keepIt": "এটি রাখুন",
"removeIt": "Remove It", "removeIt": "এটি মুছে ফেলুন",
"brokenChallenge": "Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks?", "brokenChallenge": "Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks?",
"keepThem": "Keep Tasks", "keepThem": "Keep Tasks",
"removeThem": "Remove Tasks", "removeThem": "Remove Tasks",
@ -136,4 +136,4 @@
"selectMember": "Select Member", "selectMember": "Select Member",
"confirmKeepChallengeTasks": "Do you want to keep challenge tasks?", "confirmKeepChallengeTasks": "Do you want to keep challenge tasks?",
"selectParticipant": "Select a Participant" "selectParticipant": "Select a Participant"
} }

View file

@ -1,5 +1,5 @@
{ {
"frequentlyAskedQuestions": "Frequently Asked Questions", "frequentlyAskedQuestions": "বারবার জিজ্ঞাসিত প্রশ্ন",
"faqQuestion0": "I'm confused. Where do I get an overview?", "faqQuestion0": "I'm confused. Where do I get an overview?",
"iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.",
"androidFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > [Inventory >] Avatar.\n\n Some basic ways to interact: click the (+) in the lower-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-right-hand corner, and expand and contract checklists by clicking on the checklist count box.", "androidFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > [Inventory >] Avatar.\n\n Some basic ways to interact: click the (+) in the lower-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-right-hand corner, and expand and contract checklists by clicking on the checklist count box.",
@ -8,11 +8,11 @@
"iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
"androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
"webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", "webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.",
"faqQuestion2": "What are some sample tasks?", "faqQuestion2": "করণীয় কাজের কিছু নমুনা কী হতে পারে?",
"iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n<br><br>\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n<br><br>\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"androidFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n<br><br>\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "androidFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n<br><br>\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"faqQuestion3": "Why do my tasks change color?", "faqQuestion3": "আমার করণীয় কাজগুলো রঙ পরিবর্তন করছে কেন?",
"iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.",
"androidFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "androidFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.",
"webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if its a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if its a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.",
@ -55,4 +55,4 @@
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." "webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help."
} }

View file

@ -1,45 +1,45 @@
{ {
"languageName": "English", "languageName": "ইংরেজি",
"stringNotFound": "String '<%= string %>' not found.", "stringNotFound": "String '<%= string %>' not found.",
"titleIndex": "Habitica | Your Life The Role Playing Game", "titleIndex": "Habitica | Your Life The Role Playing Game",
"habitica": "Habitica", "habitica": "Habitica",
"habiticaLink": "<a href='http://habitica.wikia.com/wiki/Habitica' target='_blank'>Habitica</a>", "habiticaLink": "<a href='http://habitica.wikia.com/wiki/Habitica' target='_blank'>Habitica</a>",
"onward": "Onward!", "onward": "Onward!",
"done": "Done", "done": "Done",
"gotIt": "Got it!", "gotIt": "বুঝতে পেরেছি!",
"titleTasks": "Tasks", "titleTasks": "Tasks",
"titleAvatar": "Avatar", "titleAvatar": "Avatar",
"titleBackgrounds": "Backgrounds", "titleBackgrounds": "Backgrounds",
"titleStats": "Stats", "titleStats": "Stats",
"titleAchievs": "Achievements", "titleAchievs": "অর্জন",
"titleProfile": "Profile", "titleProfile": "Profile",
"titleInbox": "Inbox", "titleInbox": "Inbox",
"titleTavern": "Tavern", "titleTavern": "সরাইখানা",
"titleParty": "Party", "titleParty": "Party",
"titleHeroes": "Hall of Heroes", "titleHeroes": "Hall of Heroes",
"titlePatrons": "Hall of Patrons", "titlePatrons": "Hall of Patrons",
"titleGuilds": "Guilds", "titleGuilds": "Guilds",
"titleChallenges": "Challenges", "titleChallenges": "Challenges",
"titleDrops": "Market", "titleDrops": "বাজার",
"titleQuests": "Quests", "titleQuests": "Quests",
"titlePets": "Pets", "titlePets": "পোষা প্রাণী",
"titleMounts": "Mounts", "titleMounts": "Mounts",
"titleEquipment": "Equipment", "titleEquipment": "Equipment",
"titleTimeTravelers": "Time Travelers", "titleTimeTravelers": "Time Travelers",
"titleSeasonalShop": "Seasonal Shop", "titleSeasonalShop": "Seasonal Shop",
"titleSettings": "Settings", "titleSettings": "Settings",
"saveEdits": "Save Edits", "saveEdits": "Save Edits",
"showMore": "Show More", "showMore": "আরো দেখান",
"showLess": "Show Less", "showLess": "কম দেখান",
"expandToolbar": "Expand Toolbar", "expandToolbar": "Expand Toolbar",
"collapseToolbar": "Collapse Toolbar", "collapseToolbar": "Collapse Toolbar",
"markdownHelpLink": "Markdown formatting help", "markdownHelpLink": "Markdown formatting help",
"showFormattingHelp": "Show formatting help", "showFormattingHelp": "Show formatting help",
"hideFormattingHelp": "Hide formatting help", "hideFormattingHelp": "Hide formatting help",
"youType": "You type:", "youType": "আপনি লিখুন:",
"youSee": "You see:", "youSee": "আপনি দেখুন:",
"italics": "*Italics*", "italics": "*ইটালিক*",
"bold": "**Bold**", "bold": "**গাঢ়**",
"strikethrough": "~~Strikethrough~~", "strikethrough": "~~Strikethrough~~",
"emojiExample": ":smile:", "emojiExample": ":smile:",
"markdownLinkEx": "[Habitica is great!](https://habitica.com)", "markdownLinkEx": "[Habitica is great!](https://habitica.com)",
@ -290,5 +290,9 @@
"selected": "Selected", "selected": "Selected",
"howManyToBuy": "How many would you like to buy?", "howManyToBuy": "How many would you like to buy?",
"habiticaHasUpdated": "There is a new Habitica update. Refresh to get the latest version!", "habiticaHasUpdated": "There is a new Habitica update. Refresh to get the latest version!",
"contactForm": "Contact the Moderation Team" "contactForm": "Contact the Moderation Team",
} "loadEarlierMessages": "আগের বার্তাগুলো লোড করুন",
"demo": "ডেমো",
"options": "Options",
"finish": "সমাপ্ত"
}

View file

@ -143,7 +143,7 @@
"dateEndAugust": "August 31", "dateEndAugust": "August 31",
"dateEndSeptember": "September 21", "dateEndSeptember": "September 21",
"dateEndOctober": "October 31", "dateEndOctober": "October 31",
"dateEndNovember": "December 3", "dateEndNovember": "৩০ নভেম্বর",
"dateEndJanuary": "January 31", "dateEndJanuary": "January 31",
"dateEndFebruary": "February 28", "dateEndFebruary": "February 28",
"winterPromoGiftHeader": "GIFT A SUBSCRIPTION AND GET ONE FREE!", "winterPromoGiftHeader": "GIFT A SUBSCRIPTION AND GET ONE FREE!",
@ -151,5 +151,8 @@
"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", "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", "discountBundle": "bundle",
"g1g1Announcement": "Gift a Subscription, Get a Subscription Free event going on now!", "g1g1Announcement": "Gift a Subscription, Get a Subscription Free event going on now!",
"g1g1Details": "Gift a sub to a friend from their profile and youll receive the same sub for free!" "g1g1Details": "Gift a sub to a friend from their profile and youll receive the same sub for free!",
} "spring2019RobinHealerSet": "রবিন (চিকিৎসক)",
"spring2019AmberMageSet": "অ্যাম্বার (জাদুকর)",
"spring2019OrchidWarriorSet": "অর্কিড (যোদ্ধা)"
}

View file

@ -1,5 +1,5 @@
{ {
"clearCompleted": "Delete Completed", "clearCompleted": "বাদ দেওয়া সম্পূর্ণ",
"clearCompletedDescription": "Completed To-Dos are deleted after 30 days for non-subscribers and 90 days for subscribers.", "clearCompletedDescription": "Completed To-Dos are deleted after 30 days for non-subscribers and 90 days for subscribers.",
"clearCompletedConfirm": "Are you sure you want to delete your completed To-Dos?", "clearCompletedConfirm": "Are you sure you want to delete your completed To-Dos?",
"sureDeleteCompletedTodos": "Are you sure you want to delete your completed To-Dos?", "sureDeleteCompletedTodos": "Are you sure you want to delete your completed To-Dos?",
@ -210,4 +210,4 @@
"searchTasks": "Search titles and descriptions...", "searchTasks": "Search titles and descriptions...",
"sessionOutdated": "Your session is outdated. Please refresh or sync.", "sessionOutdated": "Your session is outdated. Please refresh or sync.",
"errorTemporaryItem": "This item is temporary and cannot be pinned." "errorTemporaryItem": "This item is temporary and cannot be pinned."
} }

View file

@ -134,7 +134,6 @@
"changeClass": "Change Class, Refund Stat Points", "changeClass": "Change Class, Refund Stat Points",
"lvl10ChangeClass": "To change class you must be at least level 10.", "lvl10ChangeClass": "To change class you must be at least level 10.",
"changeClassConfirmCost": "Are you sure you want to change your class for 3 Gems?", "changeClassConfirmCost": "Are you sure you want to change your class for 3 Gems?",
"invalidClass": "Invalid class. Please specify 'warrior', 'rogue', 'wizard', or 'healer'.",
"levelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.", "levelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
"unallocated": "Unallocated Stat Points", "unallocated": "Unallocated Stat Points",
"haveUnallocated": "You have <%= points %> unallocated Stat Point(s)", "haveUnallocated": "You have <%= points %> unallocated Stat Point(s)",
@ -225,4 +224,4 @@
"offHand": "Off-Hand", "offHand": "Off-Hand",
"statPoints": "Stat Points", "statPoints": "Stat Points",
"pts": "pts" "pts": "pts"
} }

View file

@ -104,7 +104,7 @@
"allocatePerPop": "Přidat bod k vnímání", "allocatePerPop": "Přidat bod k vnímání",
"allocateInt": "Body přiřazené k Inteligenci:", "allocateInt": "Body přiřazené k Inteligenci:",
"allocateIntPop": "Přidat bod k inteligenci", "allocateIntPop": "Přidat bod k inteligenci",
"noMoreAllocate": "Nyní, když jsi dosáhl úrovně 100, už nebudeš dostávat žádné body atributů. Můžeš pokračovat v dosahování dalších úrovní, nebo můžeš začít nové dobrodružství na úrovni 1, když použiješ <a href='http://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Orb Znovuzrození</a>, který nyní najdeš zdarma na Trhu.", "noMoreAllocate": "Nyní, když jsi dosáhl úrovně 100, už nebudeš dostávat žádné body atributů. Můžeš pokračovat v dosahování dalších úrovní, nebo můžeš začít nové dobrodružství na úrovni 1, když použiješ <a href='http://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Orb Znovuzrození</a>!",
"stats": "Statistiky", "stats": "Statistiky",
"achievs": "Úspěchy", "achievs": "Úspěchy",
"strength": "Síla", "strength": "Síla",

View file

@ -350,5 +350,6 @@
"questEggDolphinAdjective": "radostný", "questEggDolphinAdjective": "radostný",
"questEggDolphinMountText": "Delfín", "questEggDolphinMountText": "Delfín",
"questEggDolphinText": "Delfín", "questEggDolphinText": "Delfín",
"hatchingPotionShadow": "Stín" "hatchingPotionShadow": "Stín",
"premiumPotionUnlimitedNotes": "Nepoužitelné na vejce z výprav."
} }

View file

@ -1762,5 +1762,52 @@
"weaponSpecialSpring2019WarriorNotes": "Špatné návyky se schovávají před tímto zeleným ostřím. Zvýší sílu o <%= str %>. Limitovaná edice Jarní výzbroj 2019.", "weaponSpecialSpring2019WarriorNotes": "Špatné návyky se schovávají před tímto zeleným ostřím. Zvýší sílu o <%= str %>. Limitovaná edice Jarní výzbroj 2019.",
"weaponSpecialSpring2019RogueNotes": "Tyto zbraně obsahují sílu nebe a deště. Doporučujeme, že je nebudeš používat ve vodě. Zvýší sílu o <%= str %>. Limitovaná edice Jarní výstroj 2019.", "weaponSpecialSpring2019RogueNotes": "Tyto zbraně obsahují sílu nebe a deště. Doporučujeme, že je nebudeš používat ve vodě. Zvýší sílu o <%= str %>. Limitovaná edice Jarní výstroj 2019.",
"weaponSpecialKS2019Notes": "Zakulacená jako zobák a drápy gryfona, ti tato zbraň připomene Tvou sílu, když se úkol před tebou zdá skličujicí. Zvýší tvou sílu o <%= str %>.", "weaponSpecialKS2019Notes": "Zakulacená jako zobák a drápy gryfona, ti tato zbraň připomene Tvou sílu, když se úkol před tebou zdá skličujicí. Zvýší tvou sílu o <%= str %>.",
"weaponSpecialKS2019Text": "Mytická gryfonní halapartna" "weaponSpecialKS2019Text": "Mytická gryfonní halapartna",
"eyewearSpecialYellowHalfMoonNotes": "Brýle s žlutým rámečkem a čočkami ve tvaru půlměsíce. Nepřináší žádnou výhodu.",
"eyewearSpecialWhiteHalfMoonNotes": "Brýle s bílým rámečkem a čočkami ve tvaru půlměsíce. Nepřináší žádnou výhodu.",
"eyewearSpecialRedHalfMoonNotes": "Brýle s červeným rámečkem a čočkami ve tvaru půlměsíce. Nepřináší žádnou výhodu.",
"eyewearSpecialPinkHalfMoonNotes": "Brýle s růžovým rámečkem a čočkami ve tvaru půlměsíce. Nepřináší žádnou výhodu.",
"eyewearSpecialGreenHalfMoonNotes": "Brýle se zeleným rámečkem a čočkami ve tvaru půlměsíce. Nepřináší žádnou výhodu.",
"shieldArmoireAlchemistsScaleText": "Alchymistova stupnice",
"shieldArmoirePolishedPocketwatchText": "Leštěné kapesní hodinky",
"shieldArmoireTrustyUmbrellaText": "Spolehlivý deštník",
"shieldArmoireMightyPizzaText": "Mocná pizza",
"shieldSpecialSummer2019MageText": "Kapky čisté vody",
"shieldSpecialSpring2019HealerText": "Štít z vaječné skořápky",
"shieldSpecialPiDayText": "Pí štít",
"headArmoireAlchemistsHatText": "Alchymistický klobouk",
"headMystery201907Text": "Zpětná čepice",
"headSpecialFall2019HealerText": "Tmavá mitra",
"headSpecialFall2019RogueText": "Antický operní klobouk",
"headSpecialSummer2019HealerText": "Škeblí koruna",
"headSpecialSummer2019WarriorText": "Želví helma",
"headSpecialSummer2019RogueText": "Kladivounova helma",
"headSpecialPiDayText": "Pí klobouk",
"armorArmoireNephriteArmorText": "Nefritová zbroj",
"armorArmoireChefsJacketText": "Šéfkuchařská bunda",
"armorMystery201908Notes": "Tyto nohy byly určeny pro tanec! A přesně to udělají. Nepřináší žádnou výhodu. Srpen 2019 Subscriber Item.",
"armorMystery201907Notes": "Zůstaňte v pohodě a vypadejte skvěle i v nejteplejším letním dni. Nepřináší žádnou výhodu. Odběratelská položka z července 2019.",
"armorMystery201907Text": "Květinová košile",
"armorSpecialFall2019HealerText": "Róba temnoty",
"armorSpecialFall2019WarriorText": "Křídla noci",
"armorSpecialSummer2019HealerText": "Ocas tropických přílivů",
"armorSpecialSummer2019MageText": "Květinové šátečky",
"armorSpecialSummer2019WarriorText": "Krunýřové brnění",
"armorSpecialSummer2019RogueText": "Ocas žraloka kladivouna",
"armorSpecialKS2019Text": "Mýtické zbroje Gryfa",
"weaponArmoireResplendentRapierText": "Úžasný rapír",
"weaponArmoireFloridFanText": "Květinový vějíř",
"weaponArmoireMagnifyingGlassText": "Zvětšovací sklo",
"weaponArmoireAstronomersTelescopeText": "Astronomův dalekohled",
"weaponArmoireBambooCaneText": "Bambusová třtina",
"weaponArmoireNephriteBowText": "Nefritový luk",
"weaponArmoireSlingshotText": "Prak",
"weaponArmoireJugglingBallsText": "Žonglovácí míče",
"weaponArmoireVernalTaperText": "Jarní svíce",
"weaponArmoireChefsSpoonText": "Šéfkuchařská lžíce",
"weaponSpecialFall2019HealerText": "Hrůzná fylakterie",
"weaponSpecialFall2019MageText": "Jednooká hůl",
"weaponSpecialFall2019WarriorText": "Pařátový trojzubec",
"weaponSpecialFall2019RogueText": "Notový pult",
"weaponSpecialSummer2019HealerText": "Bublinová hůlka"
} }

View file

@ -143,7 +143,7 @@
"dateEndAugust": "Srpen 31", "dateEndAugust": "Srpen 31",
"dateEndSeptember": "21. Září", "dateEndSeptember": "21. Září",
"dateEndOctober": "Říjen 31", "dateEndOctober": "Říjen 31",
"dateEndNovember": "December 3", "dateEndNovember": "30. listopadu",
"dateEndJanuary": "Leden 31", "dateEndJanuary": "Leden 31",
"dateEndFebruary": "Únor 28", "dateEndFebruary": "Únor 28",
"winterPromoGiftHeader": "DARUJ PŘEDPLATNÉ A ZÍSKEJ JEDNO ZDARMA!", "winterPromoGiftHeader": "DARUJ PŘEDPLATNÉ A ZÍSKEJ JEDNO ZDARMA!",
@ -167,5 +167,6 @@
"spring2019CloudRogueSet": "Mrak (Tulák)", "spring2019CloudRogueSet": "Mrak (Tulák)",
"spring2019RobinHealerSet": "Červenka (Léčitel)", "spring2019RobinHealerSet": "Červenka (Léčitel)",
"spring2019AmberMageSet": "Jantar (Mág)", "spring2019AmberMageSet": "Jantar (Mág)",
"spring2019OrchidWarriorSet": "Orchidej (válečník)" "spring2019OrchidWarriorSet": "Orchidej (válečník)",
"augustYYYY": "Srpen <%=rok %>"
} }

View file

@ -21,7 +21,7 @@
"sleepDescription": "Potřebuješ pauzu? Ubytuj se v Danielově krčmě pro pauznutí některých z těžších herních mechanismů země Habitica:", "sleepDescription": "Potřebuješ pauzu? Ubytuj se v Danielově krčmě pro pauznutí některých z těžších herních mechanismů země Habitica:",
"sleepBullet1": "Promeškané denní úkoly tě nezraní", "sleepBullet1": "Promeškané denní úkoly tě nezraní",
"sleepBullet2": "Úkoly neztratí sérii a barva zůstane nezměněna", "sleepBullet2": "Úkoly neztratí sérii a barva zůstane nezměněna",
"sleepBullet3": "Bossové ti neublíží za tvé zmeškané denní úkoly", "sleepBullet3": "Bossové ti neublíží za tvé vlastní zmeškané denní úkoly",
"sleepBullet4": "Tvé poškození bossům nebo sbírka předmětů na Výpravě zůstanou vypnuty, dokud se z krčmy neodhlásíš", "sleepBullet4": "Tvé poškození bossům nebo sbírka předmětů na Výpravě zůstanou vypnuty, dokud se z krčmy neodhlásíš",
"pauseDailies": "Pauznout poškození", "pauseDailies": "Pauznout poškození",
"unpauseDailies": "Odpauznout poškození", "unpauseDailies": "Odpauznout poškození",
@ -107,11 +107,11 @@
"amazonInstructions": "Klikni pro zaplacení přes Amazon platby", "amazonInstructions": "Klikni pro zaplacení přes Amazon platby",
"paymentMethods": "Platební metody", "paymentMethods": "Platební metody",
"paymentSuccessful": "Your payment was successful!", "paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:", "paymentYouReceived": "Obdržel jsi:",
"paymentYouSentGems": "You sent <strong><%= name %></strong>:", "paymentYouSentGems": "You sent <strong><%= name %></strong>:",
"paymentYouSentSubscription": "You sent <strong><%= name %></strong> a <%= months %>-months Habitica subscription.", "paymentYouSentSubscription": "You sent <strong><%= name %></strong> a <%= months %>-months Habitica subscription.",
"paymentSubBilling": "Your subscription will be billed <strong>$<%= amount %></strong> every <strong><%= months %> months</strong>.", "paymentSubBilling": "Your subscription will be billed <strong>$<%= amount %></strong> every <strong><%= months %> months</strong>.",
"success": "Success!", "success": "Úspěch!",
"classGear": "Vybavení pro tvé povolání", "classGear": "Vybavení pro tvé povolání",
"classGearText": "Gratuluji k vybrání povolání! Přidal jsem ti základní zbraň do tvého inventáře. Podívej se dolů a vybav se!", "classGearText": "Gratuluji k vybrání povolání! Přidal jsem ti základní zbraň do tvého inventáře. Podívej se dolů a vybav se!",
"classStats": "Toto jsou dovednosti tvé postavy; mají vliv na hru.\nPokaždé když se dostaneš na novou úroveň, získáš jeden bod, který můžeš přiřadit k určité dovednosti. Najeď na každou dovednost pro více informací.", "classStats": "Toto jsou dovednosti tvé postavy; mají vliv na hru.\nPokaždé když se dostaneš na novou úroveň, získáš jeden bod, který můžeš přiřadit k určité dovednosti. Najeď na každou dovednost pro více informací.",

View file

@ -37,7 +37,7 @@
"individualSub": "Osobní předplatné", "individualSub": "Osobní předplatné",
"subscribe": "Předplatit", "subscribe": "Předplatit",
"subscribed": "Předplaceno", "subscribed": "Předplaceno",
"nowSubscribed": "You are now subscribed to Habitica!", "nowSubscribed": "Nyní jste přihlášeni k odběru Habitica!",
"manageSub": "Klikni pro správu předplatného", "manageSub": "Klikni pro správu předplatného",
"cancelSub": "Zrušit předplatné", "cancelSub": "Zrušit předplatné",
"cancelSubInfoGoogle": "Please go to the \"Account\" > \"Subscriptions\" section of the Google Play Store app to cancel your subscription or to see your subscription's termination date if you have already cancelled it. This screen is not able to show you whether your subscription has been cancelled.", "cancelSubInfoGoogle": "Please go to the \"Account\" > \"Subscriptions\" section of the Google Play Store app to cancel your subscription or to see your subscription's termination date if you have already cancelled it. This screen is not able to show you whether your subscription has been cancelled.",
@ -73,10 +73,10 @@
"subCanceled": "Předplatné bude neaktivní od", "subCanceled": "Předplatné bude neaktivní od",
"buyGemsGoldTitle": "koupit drahokamy za zlato", "buyGemsGoldTitle": "koupit drahokamy za zlato",
"becomeSubscriber": "Staň se předplatitelem", "becomeSubscriber": "Staň se předplatitelem",
"subGemPop": "Because you subscribe to Habitica, you can purchase a number of Gems each month using Gold.", "subGemPop": "Protože se přihlašujete k odběru Habitica, můžete si každý měsíc zakoupit drahokamy pomocí zlata.",
"subGemName": "Drahokamy předplatitele", "subGemName": "Drahokamy předplatitele",
"freeGemsTitle": "Získej Drahokamy zadarmoq", "freeGemsTitle": "Získej Drahokamy zadarmoq",
"maxBuyGems": "You have bought all the Gems you can this month. More become available within the first three days of each month. Thanks for subscribing!", "maxBuyGems": "Tento měsíc jste koupili všechny drahokamy. Více bude k dispozici během prvních tří dnů každého měsíce. Díky za přihlášení!",
"buyGemsAllow1": "Můžeš si koupit", "buyGemsAllow1": "Můžeš si koupit",
"buyGemsAllow2": "Více drahokamů tento měsíc", "buyGemsAllow2": "Více drahokamů tento měsíc",
"purchaseGemsSeparately": "Koupit si další drahokamy", "purchaseGemsSeparately": "Koupit si další drahokamy",
@ -86,7 +86,7 @@
"timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> a <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> a <%= linkStartVicky %>Vicky<%= linkEnd %>",
"timeTravelersTitle": "Záhadní cestovatelé časem", "timeTravelersTitle": "Záhadní cestovatelé časem",
"timeTravelersPopoverNoSub": "Abys svolal záhadné cestovatele časem, potřebuješ mystické přesýpací hodiny! <%= linkStart %>Předplatitelé<%= linkEnd %> dostanou jedny mystické přesýpací hodiny za každé tři měsíce nepřetržitého předplaceného období. Vrať se až budeš mít mystické přesýpací hodiny a cestovatelé časem ti přinesou vzácného mazlíčka, zvíře, nebo se předmětů pro předplatitele z minulosti.... anebo i z budoucnosti.", "timeTravelersPopoverNoSub": "Abys svolal záhadné cestovatele časem, potřebuješ mystické přesýpací hodiny! <%= linkStart %>Předplatitelé<%= linkEnd %> dostanou jedny mystické přesýpací hodiny za každé tři měsíce nepřetržitého předplaceného období. Vrať se až budeš mít mystické přesýpací hodiny a cestovatelé časem ti přinesou vzácného mazlíčka, zvíře, nebo se předmětů pro předplatitele z minulosti.... anebo i z budoucnosti.",
"timeTravelersPopoverNoSubMobile": "Looks like youll need a Mystic Hourglass to open the time portal and summon the Mysterious Time Travelers.", "timeTravelersPopoverNoSubMobile": "Vypadá to, že budete potřebovat Mystické přesýpací hodiny, abyste mohli otevřít časový portál a svolat Mysterious Time Travelers.",
"timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what youd like us to fetch from the past or future.", "timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what youd like us to fetch from the past or future.",
"timeTravelersAlreadyOwned": "Gratulujeme! Teď máš vše, co cestovatelé časem nabízejí. Děkujeme za podporu stránek!", "timeTravelersAlreadyOwned": "Gratulujeme! Teď máš vše, co cestovatelé časem nabízejí. Děkujeme za podporu stránek!",
"mysticHourglassPopover": "Díky Mystickým Přesýpacím hodinám si můžeš koupit limitované předměty, jako záhadné předměty měsíce nebo odměny z boje se světovými příšerami, z minulosti!", "mysticHourglassPopover": "Díky Mystickým Přesýpacím hodinám si můžeš koupit limitované předměty, jako záhadné předměty měsíce nebo odměny z boje se světovými příšerami, z minulosti!",
@ -134,16 +134,16 @@
"mysterySet201704": "Vílí set", "mysterySet201704": "Vílí set",
"mysterySet201705": "Set Opeřeného bojovníka", "mysterySet201705": "Set Opeřeného bojovníka",
"mysterySet201706": "Set Pirátského pionýra", "mysterySet201706": "Set Pirátského pionýra",
"mysterySet201707": "Jellymancer Set", "mysterySet201707": "Jellymancer Sada",
"mysterySet201708": "Set Lávového válečníka", "mysterySet201708": "Set Lávového válečníka",
"mysterySet201709": "Set Studenta kouzel", "mysterySet201709": "Set Studenta kouzel",
"mysterySet201710": "Imperious Imp Set", "mysterySet201710": "Imperious Imp Sada",
"mysterySet201711": "Set Jezdce koberců", "mysterySet201711": "Set Jezdce koberců",
"mysterySet201712": "Candlemancer Set", "mysterySet201712": "Candlemancer Sada",
"mysterySet201801": "Set Mrazivého skřítka", "mysterySet201801": "Set Mrazivého skřítka",
"mysterySet201802": "Set Zamilovaného brouka", "mysterySet201802": "Set Zamilovaného brouka",
"mysterySet201803": "Daring Dragonfly Set", "mysterySet201803": "Daring Dragonfly Sada",
"mysterySet201804": "Spiffy Squirrel Set", "mysterySet201804": "Spiffy Squirrel Sada",
"mysterySet201805": "Phenomenal Peacock Set", "mysterySet201805": "Phenomenal Peacock Set",
"mysterySet201806": "Alluring Anglerfish Set", "mysterySet201806": "Alluring Anglerfish Set",
"mysterySet201807": "Sea Serpent Set", "mysterySet201807": "Sea Serpent Set",
@ -187,31 +187,31 @@
"couponCodeRequired": "Je požadován kód kupónu.", "couponCodeRequired": "Je požadován kód kupónu.",
"paypalCanceled": "Your subscription has been canceled", "paypalCanceled": "Your subscription has been canceled",
"earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month", "earnGemsMonthly": "Earn up to **<%= cap %> Gems** per month",
"receiveMysticHourglass": "Receive a Mystic Hourglass!", "receiveMysticHourglass": "Obdržíte mystický přesýpací hodiny!",
"receiveMysticHourglasses": "Receive **<%= amount %> Mystic Hourglasses**!", "receiveMysticHourglasses": "Receive **<%= amount %> Mystic Hourglasses**!",
"everyMonth": "Every Month", "everyMonth": "Každý měsíc",
"everyXMonths": "Every <%= interval %> Months", "everyXMonths": "Every <%= interval %> Months",
"everyYear": "Every Year", "everyYear": "Každý rok",
"choosePaymentMethod": "Choose your payment method", "choosePaymentMethod": "Vyberte platební metodu",
"subscribeSupportsDevs": "Subscribing supports the developers and helps keep Habitica running", "subscribeSupportsDevs": "Předplatné podporuje vývojáře a pomáhá udržovat Habitica v chodu",
"buyGemsSupportsDevs": "Purchasing Gems supports the developers and helps keep Habitica running", "buyGemsSupportsDevs": "Zakoupení drahokamů podporuje vývojáře a pomáhá udržovat Habitica v chodu",
"support": "SUPPORT", "support": "SUPPORT",
"gemBenefitLeadin": "Gems allow you to buy fun extras for your account, including:", "gemBenefitLeadin": "Drahokamy vám umožní koupit zábavné doplňky pro váš účet, včetně:",
"gemBenefit1": "Unique and fashionable costumes for your avatar.", "gemBenefit1": "Unikátní a módní kostýmy pro váš avatar.",
"gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!", "gemBenefit2": "Pozadí pro ponoření vašeho avatara do světa Habitica!",
"gemBenefit3": "Exciting Quest chains that drop pet eggs.", "gemBenefit3": "Exciting Quest chains that drop pet eggs.",
"gemBenefit4": "Reset your avatar's Stat Points and change its Class.", "gemBenefit4": "Reset your avatar's Stat Points and change its Class.",
"subscriptionBenefitLeadin": "Support Habitica by becoming a subscriber and you'll receive these useful benefits!", "subscriptionBenefitLeadin": "Podpořte Habitica tím, že se stanete odběratelem, a získáte tyto užitečné výhody!",
"subscriptionBenefit1": "Alexander the Merchant will sell you Gems, for 20 Gold each!", "subscriptionBenefit1": "Alexander the Merchant will sell you Gems, for 20 Gold each!",
"subscriptionBenefit2": "Completed To-Dos and task history are available for longer.", "subscriptionBenefit2": "Completed To-Dos and task history are available for longer.",
"subscriptionBenefit3": "Discover more items in Habitica with a doubled daily drop cap.", "subscriptionBenefit3": "Discover more items in Habitica with a doubled daily drop cap.",
"subscriptionBenefit4": "Unique cosmetic items for your avatar each month.", "subscriptionBenefit4": "Unikátní kosmetické výrobky pro váš avatar každý měsíc.",
"subscriptionBenefit5": "Receive the exclusive Royal Purple Jackalope pet!", "subscriptionBenefit5": "Receive the exclusive Royal Purple Jackalope pet!",
"subscriptionBenefit6": "Earn Mystic Hourglasses for use in the Time Travelers' Shop!", "subscriptionBenefit6": "Earn Mystic Hourglasses for use in the Time Travelers' Shop!",
"haveCouponCode": "Do you have a coupon code?", "haveCouponCode": "Máte kuponový kód?",
"subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribedLeadIn": "Díky za přihlášení!",
"subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to <a href='/user/settings/subscription'>User icon &gt; Settings &gt; Subscription</a>.", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to <a href='/user/settings/subscription'>User icon &gt; Settings &gt; Subscription</a>.",
"purchaseAll": "Purchase Set", "purchaseAll": "Koupit sadu",
"gemsPurchaseNote": "Předplatitelé mohou zakoupit drahokamy za zlato na Trhu! Pro jednoduchý přístup si můžeš drahokamy také připnout do tvého sloupečku s Odměnami.", "gemsPurchaseNote": "Předplatitelé mohou zakoupit drahokamy za zlato na Trhu! Pro jednoduchý přístup si můžeš drahokamy také připnout do tvého sloupečku s Odměnami.",
"gemsRemaining": "zbývající drahokamy", "gemsRemaining": "zbývající drahokamy",
"notEnoughGemsToBuy": "Nemůžeš zakoupit toto množství drahokamů", "notEnoughGemsToBuy": "Nemůžeš zakoupit toto množství drahokamů",
@ -225,5 +225,7 @@
"mysterySet201903": "Egg-squisite sada", "mysterySet201903": "Egg-squisite sada",
"mysterySet201902": "Cryptic Crush sada", "mysterySet201902": "Cryptic Crush sada",
"subWillBecomeInactive": "Stane se neaktivní", "subWillBecomeInactive": "Stane se neaktivní",
"confirmCancelSub": "Opravdu chcete zrušit předplatné? Ztratíte všechny své předplacené benefity." "confirmCancelSub": "Opravdu chcete zrušit předplatné? Ztratíte všechny své předplacené benefity.",
"mysterySet201911": "Sada Křišťálového zaklínače",
"mysterySet201910": "Sada Záhadného ohně"
} }

View file

@ -17,5 +17,13 @@
"achievementBackToBasicsModalText": "Du har samlet alle Almindelige kæledyr!", "achievementBackToBasicsModalText": "Du har samlet alle Almindelige kæledyr!",
"achievementAllYourBase": "Alle almindelige", "achievementAllYourBase": "Alle almindelige",
"achievementAllYourBaseText": "Har tæmmet alle Almindelige ridedyr.", "achievementAllYourBaseText": "Har tæmmet alle Almindelige ridedyr.",
"achievementAllYourBaseModalText": "Du har tæmmet alle Almindelige ridedyr!" "achievementAllYourBaseModalText": "Du har tæmmet alle Almindelige ridedyr!",
"achievementMonsterMagusModalText": "Du har samlet all zombie dyr!",
"achievementMonsterMagusText": "Har samlet all zombie dyr.",
"achievementPartyOn": "Dit hold vokset til 4 medlemmer!",
"achievementAridAuthorityModalText": "Du har tæmmet all ørken dyr!",
"achievementAridAuthorityText": "Har tæmmet all ørken dyr.",
"achievementDustDevilModalText": "Du har samlet alle ørken dyr!",
"achievementDustDevilText": "Har samlet alle ørken dyr.",
"achievementDustDevil": "Støv djævel"
} }

View file

@ -129,18 +129,18 @@
"questEggArmadilloMountText": "Gürteltier", "questEggArmadilloMountText": "Gürteltier",
"questEggArmadilloAdjective": "ein gepanzertes", "questEggArmadilloAdjective": "ein gepanzertes",
"questEggCowText": "Kalb", "questEggCowText": "Kalb",
"questEggCowMountText": "Kuh-Reittier", "questEggCowMountText": "Rind",
"questEggCowAdjective": "ein muhendes", "questEggCowAdjective": "ein muhendes",
"questEggBeetleText": "Käferchen", "questEggBeetleText": "Käferchen",
"questEggBeetleMountText": "Käfer-Reittier", "questEggBeetleMountText": "Käfer-Reittier",
"questEggBeetleAdjective": "ein unschlagbares", "questEggBeetleAdjective": "ein unschlagbares",
"questEggFerretText": "Frettchen", "questEggFerretText": "Frettchen-Haustier",
"questEggFerretMountText": "Frettchen", "questEggFerretMountText": "Frettchen-Reittier",
"questEggFerretAdjective": "ein pelziges", "questEggFerretAdjective": "ein pelziges",
"questEggSlothText": "Faultier", "questEggSlothText": "Faultier-Haustier",
"questEggSlothMountText": "Faultier", "questEggSlothMountText": "Faultier-Reittier",
"questEggSlothAdjective": "ein flinkes", "questEggSlothAdjective": "ein flinkes",
"questEggTriceratopsText": "Triceratops-Jungtier", "questEggTriceratopsText": "Triceratops-Haustier",
"questEggTriceratopsMountText": "Triceratops-Reittier", "questEggTriceratopsMountText": "Triceratops-Reittier",
"questEggTriceratopsAdjective": "ein trickreiches", "questEggTriceratopsAdjective": "ein trickreiches",
"questEggGuineaPigText": "Meerschweinchen", "questEggGuineaPigText": "Meerschweinchen",
@ -152,33 +152,33 @@
"questEggButterflyText": "Raupen-Haustier", "questEggButterflyText": "Raupen-Haustier",
"questEggButterflyMountText": "Schmetterling-Reittier", "questEggButterflyMountText": "Schmetterling-Reittier",
"questEggButterflyAdjective": "ein süßes", "questEggButterflyAdjective": "ein süßes",
"questEggNudibranchText": "Nacktkiemerschnecken-Jungtier", "questEggNudibranchText": "Nacktkiemerschnecken-Haustier",
"questEggNudibranchMountText": "Nacktkiemerschnecken-Reittier", "questEggNudibranchMountText": "Nacktkiemerschnecken-Reittier",
"questEggNudibranchAdjective": "ein raffiniertes", "questEggNudibranchAdjective": "ein raffiniertes",
"questEggHippoText": "Nilpferd", "questEggHippoText": "Nilpferd-Haustier",
"questEggHippoMountText": "Nilpferd", "questEggHippoMountText": "Nilpferd-Reittier",
"questEggHippoAdjective": "ein glückliches", "questEggHippoAdjective": "ein glückliches",
"questEggYarnText": "Wollknäuel", "questEggYarnText": "Wollknäuel",
"questEggYarnMountText": "Fliegendes Teppichwesen", "questEggYarnMountText": "Fliegendes Teppichwesen",
"questEggYarnAdjective": "wolliges", "questEggYarnAdjective": "wolliges",
"questEggPterodactylText": "Pterodactylus-Jungtier", "questEggPterodactylText": "Pterodactylus-Haustier",
"questEggPterodactylMountText": "Pterodactylus-Reittier", "questEggPterodactylMountText": "Pterodactylus-Reittier",
"questEggPterodactylAdjective": "ein zutrauliches", "questEggPterodactylAdjective": "ein zutrauliches",
"questEggBadgerText": "Dachs-Jungtier", "questEggBadgerText": "Dachs-Haustier",
"questEggBadgerMountText": "Dachs-Reittier", "questEggBadgerMountText": "Dachs-Reittier",
"questEggBadgerAdjective": "ein geschäftiges", "questEggBadgerAdjective": "ein geschäftiges",
"questEggSquirrelText": "Eichhörnchen-Jungtier", "questEggSquirrelText": "Eichhörnchen-Haustier",
"questEggSquirrelMountText": "Eichörnchen-Jungtier", "questEggSquirrelMountText": "Eichhörnchen-Reittier",
"questEggSquirrelAdjective": "ein buschschwanziges", "questEggSquirrelAdjective": "ein buschschwanziges",
"questEggSeaSerpentText": "Seeschlangen-Jungtier", "questEggSeaSerpentText": "Seeschlangen-Haustier",
"questEggSeaSerpentMountText": "Seeschlangen-Reittier", "questEggSeaSerpentMountText": "Seeschlangen-Reittier",
"questEggSeaSerpentAdjective": "ein schimmerndes", "questEggSeaSerpentAdjective": "ein schimmerndes",
"questEggKangarooText": "Känguru-Jungtier", "questEggKangarooText": "Känguru-Haustier",
"questEggKangarooMountText": "Känguru-Reittier", "questEggKangarooMountText": "Känguru-Reittier",
"questEggKangarooAdjective": "ein eifriges", "questEggKangarooAdjective": "ein eifriges",
"questEggAlligatorText": "Alligator-Jungtier", "questEggAlligatorText": "Alligator-Haustier",
"questEggAlligatorMountText": "Alligator-Reittier", "questEggAlligatorMountText": "Alligator-Reittier",
"questEggAlligatorAdjective": "gerissener", "questEggAlligatorAdjective": "gerissenes",
"questEggVelociraptorText": "Velociraptor-Haustier", "questEggVelociraptorText": "Velociraptor-Haustier",
"questEggVelociraptorMountText": "Velociraptor-Reittier", "questEggVelociraptorMountText": "Velociraptor-Reittier",
"questEggVelociraptorAdjective": "ein cleveres", "questEggVelociraptorAdjective": "ein cleveres",
@ -206,10 +206,10 @@
"hatchingPotionShimmer": "Schimmerndes", "hatchingPotionShimmer": "Schimmerndes",
"hatchingPotionFairy": "Feenhaftes", "hatchingPotionFairy": "Feenhaftes",
"hatchingPotionStarryNight": "Sternenklare Nacht", "hatchingPotionStarryNight": "Sternenklare Nacht",
"hatchingPotionRainbow": "Regenbogen", "hatchingPotionRainbow": "Regenbogenfarbiges",
"hatchingPotionGlass": "Glas", "hatchingPotionGlass": "Glasiges",
"hatchingPotionGlow": "Fluoreszierendes", "hatchingPotionGlow": "Fluoreszierendes",
"hatchingPotionFrost": "Frost", "hatchingPotionFrost": "Frostiges",
"hatchingPotionIcySnow": "Eisschnee", "hatchingPotionIcySnow": "Eisschnee",
"hatchingPotionNotes": "Gieße dies über ein Ei und es wird ein <%= potText(locale) %> Haustier daraus schlüpfen.", "hatchingPotionNotes": "Gieße dies über ein Ei und es wird ein <%= potText(locale) %> Haustier daraus schlüpfen.",
"premiumPotionAddlNotes": "Nicht auf Eier von Quest-Haustieren anwendbar. Zum Kauf verfügbar bis <%= date(locale) %>.", "premiumPotionAddlNotes": "Nicht auf Eier von Quest-Haustieren anwendbar. Zum Kauf verfügbar bis <%= date(locale) %>.",
@ -266,7 +266,7 @@
"foodCakeGoldenA": "ein Stück Honigkuchen", "foodCakeGoldenA": "ein Stück Honigkuchen",
"foodCakeZombie": "Verrotteter Kuchen", "foodCakeZombie": "Verrotteter Kuchen",
"foodCakeZombieThe": "den verrotteten Kuchen", "foodCakeZombieThe": "den verrotteten Kuchen",
"foodCakeZombieA": "einen verrotteten Kuchen", "foodCakeZombieA": "ein Stück verrotteter Kuchen",
"foodCakeDesert": "Sandkuchen", "foodCakeDesert": "Sandkuchen",
"foodCakeDesertThe": "den Sandkuchen", "foodCakeDesertThe": "den Sandkuchen",
"foodCakeDesertA": "ein Stück Sandkuchen", "foodCakeDesertA": "ein Stück Sandkuchen",
@ -307,19 +307,19 @@
"foodSaddleNotes": "Lässt eines Deiner Haustiere augenblicklich zum Reittier heranwachsen.", "foodSaddleNotes": "Lässt eines Deiner Haustiere augenblicklich zum Reittier heranwachsen.",
"foodSaddleSellWarningNote": "Hey! Das ist ein sehr nützlicher Gegenstand! Bist Du vertraut damit, wie Du den Sattel mit Deinen Haustieren nutzt?", "foodSaddleSellWarningNote": "Hey! Das ist ein sehr nützlicher Gegenstand! Bist Du vertraut damit, wie Du den Sattel mit Deinen Haustieren nutzt?",
"foodNotes": "Verfüttere das an ein Haustier und es wächst bald zu einem kräftigen Reittier heran.", "foodNotes": "Verfüttere das an ein Haustier und es wächst bald zu einem kräftigen Reittier heran.",
"hatchingPotionRoseQuartz": "Rosenquarz", "hatchingPotionRoseQuartz": "Rosenquarziges",
"hatchingPotionCelestial": "Himmlisch", "hatchingPotionCelestial": "Himmlisches",
"foodPieSkeleton": "Knochenmark Topfkuchen", "foodPieSkeleton": "Knochenmark-Topfkuchen",
"foodPieSkeletonThe": "der Knochenmark Topfkuchen", "foodPieSkeletonThe": "den Knochenmark-Topfkuchen",
"foodPieSkeletonA": "ein Stück Knochenmark Topfkuchen", "foodPieSkeletonA": "ein Stück Knochenmark-Topfkuchen",
"foodPieBase": "regulär Apfelkuchen", "foodPieBase": "regulärer Apfelkuchen",
"foodPieBaseThe": "der regulär Apfelkuchen", "foodPieBaseThe": "den regulären Apfelkuchen",
"foodPieBaseA": "ein Stück regulär Apfelkuchen", "foodPieBaseA": "ein Stück regulärer Apfelkuchen",
"foodPieCottonCandyBlue": "Heidelbeerkuchen", "foodPieCottonCandyBlue": "Heidelbeerkuchen",
"foodPieCottonCandyBlueThe": "der Heidelbeerkuchen", "foodPieCottonCandyBlueThe": "den Heidelbeerkuchen",
"foodPieCottonCandyBlueA": "ein Stück Heidelbeerkuchen", "foodPieCottonCandyBlueA": "ein Stück Heidelbeerkuchen",
"foodPieCottonCandyPink": "Rosarhabarberkuchen", "foodPieCottonCandyPink": "Rosarhabarberkuchen",
"foodPieCottonCandyPinkThe": "der Rosarhabarberkuchen", "foodPieCottonCandyPinkThe": "den Rosarhabarberkuchen",
"foodPieCottonCandyPinkA": "ein Stück Rosarhabarberkuchen", "foodPieCottonCandyPinkA": "ein Stück Rosarhabarberkuchen",
"foodPieShade": "dunkle Schokoladentorte", "foodPieShade": "dunkle Schokoladentorte",
"foodPieShadeThe": "die dunkle Schokoladentorte", "foodPieShadeThe": "die dunkle Schokoladentorte",
@ -331,25 +331,26 @@
"foodPieGoldenThe": "die Goldenebananencremetorte", "foodPieGoldenThe": "die Goldenebananencremetorte",
"foodPieGoldenA": "ein Stück Goldenebananencremetorte", "foodPieGoldenA": "ein Stück Goldenebananencremetorte",
"foodPieZombie": "Fauler Kuchen", "foodPieZombie": "Fauler Kuchen",
"foodPieZombieThe": "der Fauler Kuchen", "foodPieZombieThe": "den Faulen Kuchen",
"foodPieZombieA": "ein Stück Fauler Kuchen", "foodPieZombieA": "ein Stück Fauler Kuchen",
"foodPieDesert": "Wüstenfarbene Desserttorte", "foodPieDesert": "Wüstenfarbene Desserttorte",
"foodPieDesertThe": "die wüstenfarbene Desserttorte", "foodPieDesertThe": "die wüstenfarbene Desserttorte",
"foodPieDesertA": "ein Stück wüstenfarbene Desserttorte", "foodPieDesertA": "ein Stück wüstenfarbene Desserttorte",
"foodPieRed": "Roter Kirschkuchen", "foodPieRed": "Roter Kirschkuchen",
"foodPieRedThe": "der rote Kirschkuchen", "foodPieRedThe": "den roten Kirschkuchen",
"foodPieRedA": "ein Stück roter Kirschkuchen", "foodPieRedA": "ein Stück roter Kirschkuchen",
"hatchingPotionVeggie": "Garten", "hatchingPotionVeggie": "Garten-",
"questEggDolphinText": "Delfin-Haustier", "questEggDolphinText": "Delfin-Haustier",
"questEggDolphinMountText": "Delfin-Reittier", "questEggDolphinMountText": "Delfin-Reittier",
"questEggDolphinAdjective": "ein munteres", "questEggDolphinAdjective": "ein munteres",
"hatchingPotionSunshine": "Sonnenschein", "hatchingPotionSunshine": "Sonnenschein-",
"hatchingPotionBronze": "Bronze", "hatchingPotionBronze": "Bronzenes",
"hatchingPotionWatery": "Wässrig", "hatchingPotionWatery": "Wässriges",
"hatchingPotionSilver": "Silber", "hatchingPotionSilver": "Silbernes",
"questEggRobotAdjective": "ein futuristischer", "questEggRobotAdjective": "ein futuristisches",
"questEggRobotMountText": "Roboter", "questEggRobotMountText": "Roboter-Reittier",
"questEggRobotText": "Roboter", "questEggRobotText": "Roboter-Haustier",
"hatchingPotionShadow": "Schatten", "hatchingPotionShadow": "Schatten",
"premiumPotionUnlimitedNotes": "Nicht auf Eier von Quest-Haustieren anwendbar." "premiumPotionUnlimitedNotes": "Nicht auf Eier von Quest-Haustieren anwendbar.",
"hatchingPotionAmber": "Bernstein"
} }

View file

@ -1960,7 +1960,7 @@
"headSpecialFall2019WarriorNotes": "Die dunklen Augenhöhlen dieses Schädelhelms werden auch die Mutigsten Deiner Feinde abschrecken.Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2019 Herbstausrüstung.", "headSpecialFall2019WarriorNotes": "Die dunklen Augenhöhlen dieses Schädelhelms werden auch die Mutigsten Deiner Feinde abschrecken.Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2019 Herbstausrüstung.",
"headSpecialKS2019Notes": "Dieser glorreiche Helm, der mit einem Greifenbild und Gefieder geschmückt ist, symbolisiert die Art und Weise, wie Deine Fähigkeiten und Deine Haltung als Vorbild für andere stehen. Erhöht Intelligenz um <%= int %>.", "headSpecialKS2019Notes": "Dieser glorreiche Helm, der mit einem Greifenbild und Gefieder geschmückt ist, symbolisiert die Art und Weise, wie Deine Fähigkeiten und Deine Haltung als Vorbild für andere stehen. Erhöht Intelligenz um <%= int %>.",
"armorSpecialFall2019RogueNotes": "Dieses Outfit wird komplett mit weißen Handschuhen geliefert und ist ideal, um in Deiner Privatloge über der Bühne zu brüten oder überraschende Auftritte auf der großen Treppe zu machen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2019 Herbstausrüstung.", "armorSpecialFall2019RogueNotes": "Dieses Outfit wird komplett mit weißen Handschuhen geliefert und ist ideal, um in Deiner Privatloge über der Bühne zu brüten oder überraschende Auftritte auf der großen Treppe zu machen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2019 Herbstausrüstung.",
"headMystery201910Notes": "Diese Flammen offenbaren obskure Geheimnisse vor Deinen Augen! Gewährt keinen Attributbonus. Oktober 2019 Abonnentengegenstand.", "headMystery201910Notes": "Diese Flammen offenbaren obskure Geheimnisse vor Deinen Augen! Gewährt keinen Attributbonus. Abonnentengegenstand, Oktober 2019.",
"headMystery201910Text": "Rätselhafte Flamme", "headMystery201910Text": "Rätselhafte Flamme",
"armorMystery201910Notes": "Diese schillernde Rüstung wird Dich vor sichtbaren und unsichtbaren Schrecken schützen. Gewährt keinen Attributbonus. Oktober 2019 Abonnentengegenstand.", "armorMystery201910Notes": "Diese schillernde Rüstung wird Dich vor sichtbaren und unsichtbaren Schrecken schützen. Gewährt keinen Attributbonus. Oktober 2019 Abonnentengegenstand.",
"armorMystery201910Text": "Rätselhafte Rüstung", "armorMystery201910Text": "Rätselhafte Rüstung",
@ -1971,5 +1971,13 @@
"armorArmoireAlchemistsRobeNotes": "Jede Menge gefährlicher Elixiere sind an der Herstellung arkaner Metalle und Edelsteine beteiligt. Diese schwere Robe schützt Dich vor Schaden und unbeabsichtigter Nebenwirkungen! Erhöht Konstitution um <%= con%> und Wahrnehmung um <%= per%>. Verzauberter Schrank: Alchemisten-Set (Gegenstand 1 von 4).", "armorArmoireAlchemistsRobeNotes": "Jede Menge gefährlicher Elixiere sind an der Herstellung arkaner Metalle und Edelsteine beteiligt. Diese schwere Robe schützt Dich vor Schaden und unbeabsichtigter Nebenwirkungen! Erhöht Konstitution um <%= con%> und Wahrnehmung um <%= per%>. Verzauberter Schrank: Alchemisten-Set (Gegenstand 1 von 4).",
"weaponArmoireAlchemistsDistillerText": "Distilliergerät der Alchemisten", "weaponArmoireAlchemistsDistillerText": "Distilliergerät der Alchemisten",
"armorArmoireAlchemistsRobeText": "Robe der Alchemisten", "armorArmoireAlchemistsRobeText": "Robe der Alchemisten",
"weaponArmoireAlchemistsDistillerNotes": "Reinige Metalle und andere magische Verbindungen mit diesem glänzenden Messinginstrument. Erhöht Stärke um <%= str%> und Intelligenz um <%= int%>. Verzauberter Schrank: Alchemisten-Set (Gegenstand 3 von 4)." "weaponArmoireAlchemistsDistillerNotes": "Reinige Metalle und andere magische Verbindungen mit diesem glänzenden Messinginstrument. Erhöht Stärke um <%= str%> und Intelligenz um <%= int%>. Verzauberter Schrank: Alchemisten-Set (Gegenstand 3 von 4).",
"headMystery201911Text": "Verzauberter Kristallhut",
"weaponMystery201911Text": "Verzauberter Kristallstab",
"weaponMystery201911Notes": "Die Kristallkugel auf der Spitze dieses Stabes kann Dir die Zukunft zeigen, aber pass auf! Derart gefährliches Wissen zu nutzen kann einen in unerwarteter Weise verändern. Gewährt keinen Attributbonus. Abonnentengegenstand, November 2019.",
"headMystery201911Notes": "Jede Kristallspitze an diesem Hut verleiht Dir eine besondere Kraft: mystisches Hellsehen, arkane Weisheit und... hexerisches Tellerdrehen? Na dann... Gewährt keinen Attributbonus. Abonnentengegenstand, November 2019.",
"backMystery201912Notes": "Gleite leise über glänzende Schneefelder und schimmernde Berge mit diesen eisigen Flügeln. Gewährt keinen Attributbonus. Abonnentengegenstand, Dezember 2019.",
"backMystery201912Text": "Frostige Feenflügel",
"headMystery201912Notes": "Diese glitzernde Schneeflocke verleiht Dir Resistenz gegen die beißende Kälte, unabhängig davon wie hoch Du fliegst! Gewährt keinen Attributbonus. Abonnentengegenstand, Dezember 2019.",
"headMystery201912Text": "Frostige Feenkrone"
} }

Some files were not shown because too many files have changed in this diff Show more