Compare commits

..

62 Commits

Author SHA1 Message Date
Sabe Jones 1413f1d9f5 4.190.0 2021-04-28 14:35:07 -05:00
Sabe Jones 6f7e1ff326 chore(sprites): compile 2021-04-28 14:33:55 -05:00
Sabe Jones c028a4c99c feat(content): subscriber items May 2021 2021-04-28 14:33:47 -05:00
Sabe Jones e1521f9456 4.189.2 2021-04-16 11:13:02 -05:00
Sabe Jones affa33868a Merge branch 'sabrecat/banner-dates' into release 2021-04-16 11:12:41 -05:00
Sabe Jones 8641817d78 fix(analytics): if user no longer subscriber, blank out sub field 2021-04-14 14:43:35 -05:00
Sabe Jones 2b8a9ba6b7 fix(achievement): clarify Legendary Bestiary requirement 2021-04-14 14:34:22 -05:00
Sabe Jones 344280d124 refactor(potions): also de-hardcode Veggie Potion 2021-04-13 15:19:44 -05:00
Sabe Jones 06f6355006 chore(analytics): Gem transfer tracking and shorten task score period 2021-04-13 14:51:19 -05:00
Sabe Jones b5497b149b refactor(potions): de-hardcode premium potion end dates 2021-04-13 14:36:24 -05:00
Sabe Jones d231eb3023 fix(test): force special spell purchasable for test 2021-04-09 15:41:20 -05:00
Sabe Jones 46b8e7f725 fix(event): filter out past seasonal sets in Market
also block purchase of special spells outside their events
also remove hardcoded dates from seasonal shop intro text used on mobile
2021-04-09 15:14:18 -05:00
Sabe Jones c349719303 feat(event): current event data in Gem-buy Seasonal Shop gear 2021-04-08 16:45:56 -05:00
Sabe Jones 9c402152e8 feat(event): Shiny Seed and Egg Hunt countdowns 2021-04-08 16:26:32 -05:00
Sabe Jones 23f6e9b911 feat(event): more datetime countdown improvements 2021-04-08 15:43:47 -05:00
Sabe Jones 8703a22b3a 4.189.1 2021-04-07 14:51:30 -05:00
Sabe Jones 2c5accd5b2 fix(event): correct event data for Birch Potion
also adjust placement of clown nose
2021-04-07 14:49:48 -05:00
Sabe Jones 5ffdf09be4 fix(event): don't flatten start/end moments 2021-04-07 13:08:08 -05:00
Sabe Jones cdaa504db4 feat(event): countdown banners for limited availability items 2021-04-07 12:24:24 -05:00
Sabe Jones 309634f751 4.189.0 2021-04-06 17:10:54 -05:00
Sabe Jones 2e246dad28 chore(sprites): compile 2021-04-06 17:09:43 -05:00
Sabe Jones 8707c80dc1 feat(content): Armoire and Backgrounds April 2021 2021-04-06 17:09:13 -05:00
Sabe Jones f61beee9e9 fix(testing): don't blow up Seasonal Shop 2021-04-06 15:55:17 -05:00
Sabe Jones 13fae3028c 4.188.4 2021-04-05 15:39:53 -05:00
Sabe Jones 48892a0af3 chore(packages): update Bootstrap 2021-04-05 15:39:33 -05:00
Sabe Jones 9472264bb2 4.188.3 2021-04-02 15:50:36 -05:00
Sabe Jones b3e3d0cb63 fix(fix): hide future mystery sets in Time Travel shop
...not in the gear tree
2021-04-02 15:50:20 -05:00
Sabe Jones cdb058b696 4.188.2 2021-03-30 15:46:59 -05:00
Sabe Jones 9b719dc144 fix(subscriptions): handle future/prebuilt mystery items 2021-03-30 15:46:52 -05:00
Sabe Jones 1b0b31cd80 fix(subscriptions): handle future/prebuilt mystery items 2021-03-30 15:46:29 -05:00
Sabe Jones fda581e60a 4.188.1 2021-03-30 15:24:51 -05:00
Sabe Jones ed15c633c5 fix(quests): function derp 2021-03-30 15:24:31 -05:00
Sabe Jones 43018580b7 4.188.0 2021-03-30 15:20:14 -05:00
Sabe Jones e8c6908e6a feat(content): new achievement
also fixes Time Traveler and Egg Quest issues
2021-03-30 15:19:53 -05:00
Sabe Jones 6a49ae8397 Merge branch 'sabrecat/seasonal-cheevo' into release 2021-03-30 14:56:50 -05:00
Sabe Jones 4637e5ffdc 4.187.0 2021-03-29 18:00:56 -05:00
Sabe Jones 68e6d52c64 feat(content): Mystery Items April 2021 2021-03-29 18:00:32 -05:00
Sabe Jones e9c69f93a6 feat(content): seasonal quest achievement 2021-03-29 17:51:33 -05:00
Sabe Jones ef58360305 4.186.0 2021-03-25 15:47:56 -05:00
Sabe Jones b9ed916003 chore(sprites): compile 2021-03-25 15:21:32 -05:00
Sabe Jones ba18f6211d feat(content): new hatching potion + rereleases 2021-03-25 15:21:24 -05:00
Sabe Jones 24bf1c31d8 fix(onboarding): remove start date restriction 2021-03-25 15:20:55 -05:00
Sabe Jones e9fcd6c894 4.185.0 2021-03-23 13:03:37 -05:00
Sabe Jones 676a9348d0 feat(event): March-April goodness 2021-03-23 11:58:21 -05:00
Sabe Jones cd87d7d605 4.184.3 2021-03-15 15:44:06 -05:00
Sabe Jones d6714c43c0 feat(content): set up for bundle release 2021-03-15 15:43:55 -05:00
Sabe Jones 39d82843df 4.184.2 2021-03-12 17:58:55 -06:00
Sabe Jones 665ae4ea03 feat(event): Pi Day 2021 2021-03-12 17:58:49 -06:00
Sabe Jones d2795f3ac9 fix(stats): bump level cap to 9999 and related corrections 2021-03-11 16:44:34 -06:00
Sabe Jones d7aa448676 4.184.1 2021-03-10 15:36:46 -06:00
Sabe Jones 96492e5a0e fix(api): correct world, cap level 2021-03-10 15:36:17 -06:00
Sabe Jones e3757994b9 4.184.0 2021-03-02 15:29:26 -06:00
Sabe Jones 2e4481fc1f chore(sprites): compile 2021-03-02 15:29:13 -06:00
Sabe Jones c41b0b3028 feat(content): Armoire and Backgrounds 2021-03 2021-03-02 15:29:07 -06:00
Sabe Jones 1c40972607 fix(analytics): one more drop cap correction 2021-03-01 18:25:52 -06:00
Sabe Jones c4be9a274c 4.183.1 2021-03-01 18:02:03 -06:00
Sabe Jones 593149abe6 fix(analytics): drop cap and Stripe platform fixes 2021-03-01 18:01:38 -06:00
Sabe Jones 98de7f634d 4.183.0 2021-02-25 16:04:17 -06:00
Sabe Jones a459e54586 feat(content): March Mystery Items 2021-02-25 15:51:17 -06:00
Sabe Jones 7cc705ffcd fix(test): should hatch Desert pet to get Desert achievement 2021-02-16 17:08:59 -06:00
Sabe Jones 10a4dc5128 4.182.0 2021-02-16 17:00:46 -06:00
Sabe Jones ee1f95bb67 feat(content): bundle and cheevo 2021-02-16 17:00:39 -06:00
251 changed files with 29612 additions and 28126 deletions
@@ -0,0 +1,108 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20210216_pet_group_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['Dragon-Base']
&& pets['Dragon-CottonCandyBlue']
&& pets['Dragon-CottonCandyPink']
&& pets['Dragon-Desert']
&& pets['Dragon-Golden']
&& pets['Dragon-Red']
&& pets['Dragon-Shade']
&& pets['Dragon-Skeleton']
&& pets['Dragon-White']
&& pets['Dragon-Zombie']
&& pets['FlyingPig-Base']
&& pets['FlyingPig-CottonCandyBlue']
&& pets['FlyingPig-CottonCandyPink']
&& pets['FlyingPig-Desert']
&& pets['FlyingPig-Golden']
&& pets['FlyingPig-Red']
&& pets['FlyingPig-Shade']
&& pets['FlyingPig-Skeleton']
&& pets['FlyingPig-White']
&& pets['FlyingPig-Zombie']
&& pets['Gryphon-Base']
&& pets['Gryphon-CottonCandyBlue']
&& pets['Gryphon-CottonCandyPink']
&& pets['Gryphon-Desert']
&& pets['Gryphon-Golden']
&& pets['Gryphon-Red']
&& pets['Gryphon-Shade']
&& pets['Gryphon-Skeleton']
&& pets['Gryphon-White']
&& pets['Gryphon-Zombie']
&& pets['SeaSerpent-Base']
&& pets['SeaSerpent-CottonCandyBlue']
&& pets['SeaSerpent-CottonCandyPink']
&& pets['SeaSerpent-Desert']
&& pets['SeaSerpent-Golden']
&& pets['SeaSerpent-Red']
&& pets['SeaSerpent-Shade']
&& pets['SeaSerpent-Skeleton']
&& pets['SeaSerpent-White']
&& pets['SeaSerpent-Zombie']
&& pets['Unicorn-Base']
&& pets['Unicorn-CottonCandyBlue']
&& pets['Unicorn-CottonCandyPink']
&& pets['Unicorn-Desert']
&& pets['Unicorn-Golden']
&& pets['Unicorn-Red']
&& pets['Unicorn-Shade']
&& pets['Unicorn-Skeleton']
&& pets['Unicorn-White']
&& pets['Unicorn-Zombie']) {
set['achievements.legendaryBestiary'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2021-02-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]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+1 -1
View File
@@ -18,7 +18,7 @@ function setUpServer () {
setUpServer();
// Replace this with your migration
const processUsers = require('./archive/2021/20210129_habit_birthday').default;
const processUsers = require().default;
processUsers()
.then(() => {
+2 -2
View File
@@ -3,7 +3,7 @@ import { v4 as uuid } from 'uuid';
import { model as User } from '../../website/server/models/user';
const MIGRATION_NAME = '20200314_pi_day';
const MIGRATION_NAME = '20210314_pi_day';
const progressCount = 1000;
let count = 0;
@@ -54,7 +54,7 @@ async function updateUser (user) {
export default async function processUsers () {
const query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2020-02-15') },
'auth.timestamps.loggedin': { $gt: new Date('2021-02-15') },
};
const fields = {
+6 -1
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.181.3",
"version": "4.190.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2925,6 +2925,11 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"optional": true
},
"bootstrap": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
"integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
},
"boxen": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
+2 -1
View File
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.181.3",
"version": "4.190.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.12.10",
@@ -17,6 +17,7 @@
"apple-auth": "^1.0.7",
"bcrypt": "^5.0.0",
"body-parser": "^1.18.3",
"bootstrap": "^4.6.0",
"compression": "^1.7.4",
"cookie-session": "^1.4.0",
"coupon-code": "^0.4.5",
@@ -535,24 +535,12 @@ describe('PUT /tasks/:id', () => {
});
expect(savedMonthly.nextDue.length).to.eql(6);
expect(moment(savedMonthly.nextDue[0]).toDate()).to.eql(
moment(date2).add(1, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[1]).toDate()).to.eql(
moment(date2).add(2, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[2]).toDate()).to.eql(
moment(date2).add(3, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[3]).toDate()).to.eql(
moment(date2).add(4, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[4]).toDate()).to.eql(
moment(date2).add(5, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[5]).toDate()).to.eql(
moment(date2).add(6, 'months').startOf('day').toDate(),
);
expect(moment(savedMonthly.nextDue[0]).isSame(moment(date2).add(1, 'months').startOf('day')));
expect(moment(savedMonthly.nextDue[1]).isSame(moment(date2).add(2, 'months').startOf('day')));
expect(moment(savedMonthly.nextDue[2]).isSame(moment(date2).add(3, 'months').startOf('day')));
expect(moment(savedMonthly.nextDue[3]).isSame(moment(date2).add(4, 'months').startOf('day')));
expect(moment(savedMonthly.nextDue[4]).isSame(moment(date2).add(5, 'months').startOf('day')));
expect(moment(savedMonthly.nextDue[5]).isSame(moment(date2).add(6, 'months').startOf('day')));
});
});
@@ -70,6 +70,7 @@ describe('POST /user/buy/:key', () => {
it('buys a special spell', async () => {
const key = 'spookySparkles';
const item = content.special[key];
const stub = sinon.stub(item, 'canOwn').returns(true);
await user.update({ 'stats.gp': 250 });
const res = await user.post(`/user/buy/${key}`);
@@ -82,6 +83,8 @@ describe('POST /user/buy/:key', () => {
expect(res.message).to.equal(t('messageBought', {
itemText: item.text(),
}));
stub.restore();
});
it('allows for bulk purchases', async () => {
-14
View File
@@ -1,6 +1,5 @@
import moment from 'moment';
import {
hasActiveOnboarding,
hasCompletedOnboarding,
onOnboardingComplete,
checkOnboardingStatus,
@@ -17,19 +16,6 @@ describe('onboarding', () => {
user.auth.timestamps.created = moment('2019-12-20').toDate();
});
describe('hasActiveOnboarding', () => {
// The value of BEGIN DATE is available in common/script/libs/onboarding
it('returns true if the account is created after BEGIN_DATE', () => {
expect(hasActiveOnboarding(user)).to.eql(true);
});
it('returns false if the account is created before BEGIN_DATE', () => {
user.auth.timestamps.created = moment('2019-12-01').toDate();
expect(hasActiveOnboarding(user)).to.eql(false);
});
});
describe('hasCompletedOnboarding', () => {
it('returns false if no achievement has been awarded', () => {
const result = hasCompletedOnboarding(user);
+4 -6
View File
@@ -169,7 +169,6 @@ describe('shared.ops.hatch', () => {
it('awards Back to Basics achievement', () => {
user.items.pets = {
'Wolf-Base': 5,
'TigerCub-Base': 5,
'PandaCub-Base': 10,
'LionCub-Base': 5,
@@ -180,14 +179,13 @@ describe('shared.ops.hatch', () => {
'BearCub-Base': 5,
};
user.items.eggs = { Wolf: 1 };
user.items.hatchingPotions = { Spooky: 1 };
hatch(user, { params: { egg: 'Wolf', hatchingPotion: 'Spooky' } });
user.items.hatchingPotions = { Base: 1 };
hatch(user, { params: { egg: 'Wolf', hatchingPotion: 'Base' } });
expect(user.achievements.backToBasics).to.eql(true);
});
it('awards Dust Devil achievement', () => {
user.items.pets = {
'Wolf-Desert': 5,
'TigerCub-Desert': 5,
'PandaCub-Desert': 10,
'LionCub-Desert': 5,
@@ -198,8 +196,8 @@ describe('shared.ops.hatch', () => {
'BearCub-Desert': 5,
};
user.items.eggs = { Wolf: 1 };
user.items.hatchingPotions = { Spooky: 1 };
hatch(user, { params: { egg: 'Wolf', hatchingPotion: 'Spooky' } });
user.items.hatchingPotions = { Desert: 1 };
hatch(user, { params: { egg: 'Wolf', hatchingPotion: 'Desert' } });
expect(user.achievements.dustDevil).to.eql(true);
});
+55 -70
View File
@@ -10094,6 +10094,12 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"optional": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -10196,6 +10202,55 @@
"has-flag": "^3.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.2.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
"integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
@@ -25542,76 +25597,6 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.2",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-mugen-scroll": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/vue-mugen-scroll/-/vue-mugen-scroll-0.2.6.tgz",
+1 -1
View File
@@ -28,7 +28,7 @@
"axios": "^0.21.1",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.5.3",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.21.2",
"chai": "^4.1.2",
"core-js": "^3.8.3",
+1 -1
View File
@@ -544,6 +544,6 @@ export default {
<style src="@/assets/css/sprites/spritesmith-main-27.css"></style>
<style src="@/assets/css/sprites/spritesmith-main-28.css"></style>
<style src="@/assets/css/sprites/spritesmith-main-29.css"></style>
<!-- <style src="@/assets/css/sprites/spritesmith-main-30.css"></style> -->
<style src="@/assets/css/sprites/spritesmith-main-30.css"></style>
<style src="@/assets/css/sprites.css"></style>
<style src="smartbanner.js/dist/smartbanner.min.css"></style>
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
@@ -1,396 +1,402 @@
.npc_matt {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -459px -1535px;
width: 195px;
height: 138px;
}
.background_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px 0px;
width: 306px;
height: 202px;
}
.banner_flair_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1844px -856px;
width: 69px;
height: 18px;
}
.phobia_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1187px -880px;
width: 201px;
height: 195px;
}
.quest_alligator {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1627px -1079px;
width: 201px;
height: 213px;
}
.quest_amber {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -307px 0px;
width: 219px;
height: 219px;
}
.quest_armadillo {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -527px 0px;
width: 219px;
height: 219px;
}
.quest_atom1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1325px -1315px;
width: 250px;
height: 150px;
}
.quest_atom2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -251px -1535px;
width: 207px;
height: 138px;
}
.quest_atom3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -747px -440px;
width: 216px;
height: 180px;
}
.quest_axolotl {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -435px;
width: 219px;
height: 219px;
}
.quest_badger {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -435px;
width: 219px;
height: 219px;
}
.quest_basilist {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -191px -1686px;
width: 189px;
height: 141px;
}
.quest_beetle {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1627px -1293px;
width: 204px;
height: 201px;
}
.quest_blackPearl {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1627px 0px;
width: 216px;
height: 216px;
}
.quest_bronze {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -435px;
width: 219px;
height: 219px;
}
.quest_bunny {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -967px -660px;
width: 210px;
height: 186px;
}
.quest_butterfly {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -747px 0px;
width: 219px;
height: 219px;
}
.quest_cheetah {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px 0px;
background-position: -747px -220px;
width: 219px;
height: 219px;
}
.quest_cow {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px 0px;
background-position: -1844px 0px;
width: 174px;
height: 213px;
}
.quest_dilatory {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -232px;
background-position: -220px -655px;
width: 219px;
height: 219px;
}
.quest_dilatoryDistress1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -222px -1332px;
background-position: -1627px -868px;
width: 210px;
height: 210px;
}
.quest_dilatoryDistress2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -422px;
background-position: -1844px -422px;
width: 150px;
height: 150px;
}
.quest_dilatoryDistress3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -232px;
background-position: -440px -655px;
width: 219px;
height: 219px;
}
.quest_dilatory_derby {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px 0px;
background-position: 0px -655px;
width: 219px;
height: 219px;
}
.quest_dolphin {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -232px;
background-position: -660px -655px;
width: 219px;
height: 219px;
}
.quest_dustbunnies {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px 0px;
background-position: -967px 0px;
width: 219px;
height: 219px;
}
.quest_egg {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -214px;
background-position: -1844px -214px;
width: 165px;
height: 207px;
}
.quest_evilsanta {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -1026px;
background-position: -1844px -724px;
width: 118px;
height: 131px;
}
.quest_evilsanta2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px -220px;
background-position: -967px -220px;
width: 219px;
height: 219px;
}
.quest_falcon {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -452px;
background-position: -967px -440px;
width: 219px;
height: 219px;
}
.quest_ferret {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -452px;
background-position: 0px -875px;
width: 219px;
height: 219px;
}
.quest_fluorite {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -452px;
background-position: -220px -875px;
width: 219px;
height: 219px;
}
.quest_frog {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -1332px;
background-position: -880px -1315px;
width: 221px;
height: 213px;
}
.quest_ghost_stag {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px -452px;
background-position: -440px -875px;
width: 219px;
height: 219px;
}
.quest_goldenknight1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px 0px;
background-position: -660px -875px;
width: 219px;
height: 219px;
}
.quest_goldenknight2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -1546px;
background-position: 0px -1535px;
width: 250px;
height: 150px;
}
.quest_goldenknight3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px 0px;
background-position: 0px -203px;
width: 219px;
height: 231px;
}
.quest_gryphon {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -876px -1332px;
background-position: -527px -220px;
width: 216px;
height: 177px;
}
.quest_guineapig {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px -220px;
background-position: -880px -875px;
width: 219px;
height: 219px;
}
.quest_harpy {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px -440px;
background-position: -1187px 0px;
width: 219px;
height: 219px;
}
.quest_hedgehog {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -433px -1332px;
background-position: -1407px -1100px;
width: 219px;
height: 186px;
}
.quest_hippo {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -672px;
background-position: -1187px -220px;
width: 219px;
height: 219px;
}
.quest_horse {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -672px;
background-position: -1187px -440px;
width: 219px;
height: 219px;
}
.quest_kangaroo {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -672px;
background-position: -1187px -660px;
width: 219px;
height: 219px;
}
.quest_kraken {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1093px -1332px;
background-position: -307px -220px;
width: 216px;
height: 177px;
}
.quest_lostMasterclasser1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px -672px;
background-position: 0px -1095px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px -672px;
background-position: -220px -1095px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px 0px;
background-position: -440px -1095px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -573px;
background-position: -1844px -573px;
width: 150px;
height: 150px;
}
.quest_mayhemMistiflying2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px -220px;
background-position: -660px -1095px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px -440px;
background-position: -880px -1095px;
width: 219px;
height: 219px;
}
.quest_monkey {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px -660px;
background-position: -1100px -1095px;
width: 219px;
height: 219px;
}
.quest_moon1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px -220px;
background-position: -1627px -217px;
width: 216px;
height: 216px;
}
.quest_moon2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -892px;
background-position: -1407px 0px;
width: 219px;
height: 219px;
}
.quest_moon3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -892px;
background-position: -1407px -220px;
width: 219px;
height: 219px;
}
.quest_moonstone1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -892px;
background-position: -1407px -440px;
width: 219px;
height: 219px;
}
.quest_moonstone2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px -892px;
background-position: -1407px -660px;
width: 219px;
height: 219px;
}
.quest_moonstone3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px -892px;
background-position: -1407px -880px;
width: 219px;
height: 219px;
}
.quest_nudibranch {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px -437px;
background-position: -1627px -434px;
width: 216px;
height: 216px;
}
.quest_octopus {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -653px -1332px;
background-position: -1102px -1315px;
width: 222px;
height: 177px;
}
.quest_owl {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px -892px;
background-position: 0px -1315px;
width: 219px;
height: 219px;
}
.quest_peacock {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px -654px;
background-position: -1627px -651px;
width: 216px;
height: 216px;
}
.quest_penguin {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -1697px;
background-position: 0px -1686px;
width: 190px;
height: 183px;
}
.quest_pterodactyl {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px 0px;
background-position: -220px -1315px;
width: 219px;
height: 219px;
}
.quest_rat {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px -220px;
background-position: -440px -1315px;
width: 219px;
height: 219px;
}
.quest_robot {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px -440px;
background-position: -660px -1315px;
width: 219px;
height: 219px;
}
.quest_rock {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px -871px;
width: 216px;
height: 216px;
}
.quest_rooster {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1527px -1332px;
width: 213px;
height: 174px;
}
.quest_ruby {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px -660px;
width: 219px;
height: 219px;
}
.quest_sabretooth {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px -880px;
width: 219px;
height: 219px;
}
.quest_seaserpent {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: 0px -1112px;
width: 219px;
height: 219px;
}
.quest_sheep {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -220px -1112px;
width: 219px;
height: 219px;
}
.quest_silver {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -440px -1112px;
width: 219px;
height: 219px;
}
.quest_slime {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -660px -1112px;
width: 219px;
height: 219px;
}
.quest_sloth {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -880px -1112px;
width: 219px;
height: 219px;
}
.quest_snail {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px -1088px;
width: 219px;
height: 213px;
}
.quest_snake {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1310px -1332px;
width: 216px;
height: 177px;
}
.quest_spider {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -251px -1546px;
width: 250px;
height: 150px;
}
.quest_squirrel {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1100px -1112px;
width: 219px;
height: 219px;
}
.quest_stoikalmCalamity1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -724px;
width: 150px;
height: 150px;
}
.quest_stoikalmCalamity2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1320px -1112px;
width: 219px;
height: 219px;
}
.quest_stoikalmCalamity3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1540px 0px;
width: 219px;
height: 219px;
}
.quest_taskwoodsTerror1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-14.png');
background-position: -1760px -875px;
width: 150px;
height: 150px;
}
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
@@ -0,0 +1,504 @@
.Pet-Wolf-Peppermint {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-PolkaDot {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -82px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Rainbow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -164px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Red {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-RoseQuartz {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -82px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-RoyalPurple {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -164px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Ruby {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -246px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-SandSculpture {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -246px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Shade {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Shadow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -82px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Shimmer {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -164px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Silver {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -246px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Skeleton {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -328px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Spooky {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -328px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-StainedGlass {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -328px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-StarryNight {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Sunshine {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -82px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Thunderstorm {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -164px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Turquoise {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -246px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Vampire {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -328px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Veggie {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -410px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Veteran {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -410px -100px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Watery {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -410px -200px;
width: 81px;
height: 99px;
}
.Pet-Wolf-White {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -410px -300px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Windup {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -492px 0px;
width: 81px;
height: 99px;
}
.Pet-Wolf-Zombie {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -492px -100px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Base {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -492px -200px;
width: 81px;
height: 99px;
}
.Pet-Yarn-CottonCandyBlue {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -492px -300px;
width: 81px;
height: 99px;
}
.Pet-Yarn-CottonCandyPink {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Desert {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -82px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Golden {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -164px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Red {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -246px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Shade {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -328px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Skeleton {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -410px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-White {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -492px -400px;
width: 81px;
height: 99px;
}
.Pet-Yarn-Zombie {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px 0px;
width: 81px;
height: 99px;
}
.Pet_HatchingPotion_Amber {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px -100px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Aquatic {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px -169px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Aurora {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px -238px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_AutumnLeaf {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px -307px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Base {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -574px -376px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_BirchBark {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_BlackPearl {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -69px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Bronze {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -138px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Celestial {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -207px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_CottonCandyBlue {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -276px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_CottonCandyPink {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -345px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Cupid {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -414px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Desert {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -483px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Ember {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -552px -500px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Fairy {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Floral {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -69px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Fluorite {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -138px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Frost {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -207px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Ghost {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -276px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Glass {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -345px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Glow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -414px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Golden {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -483px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Holly {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -552px -569px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_IcySnow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px 0px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Peppermint {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -69px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_PolkaDot {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -138px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Purple {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -207px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Rainbow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -276px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Red {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -345px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_RoseQuartz {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -414px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_RoyalPurple {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -483px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Ruby {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -656px -552px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_SandSculpture {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: 0px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Shade {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -69px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Shadow {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -138px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Shimmer {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -207px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Silver {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -276px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Skeleton {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -345px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Spooky {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -414px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_StainedGlass {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -483px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_StarryNight {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -552px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Sunshine {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -621px -638px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Thunderstorm {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px 0px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Turquoise {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px -69px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Vampire {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px -138px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Watery {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px -207px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_White {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px -276px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Zombie {
background-image: url('~@/assets/images/sprites/spritesmith-main-30.png');
background-position: -725px -345px;
width: 68px;
height: 68px;
}
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: 462 KiB

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 516 KiB

After

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 KiB

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 144 KiB

@@ -213,10 +213,9 @@ export default {
}),
eventName () {
if (
!this.currentEvent || !this.currentEvent.event
|| this.currentEvent.season === 'normal' || this.currentEvent.season === 'valentines'
!this.currentEvent || !this.currentEvent.event || !this.currentEvent.gear
) return null;
return this.currentEvent.event.replace('NoPromo', '');
return this.currentEvent.event;
},
},
methods: {
+17 -1
View File
@@ -81,7 +81,7 @@
<span
v-if="member.items.currentPet"
class="current-pet"
:class="'Pet-' + member.items.currentPet"
:class="petClass"
></span>
</template>
</div>
@@ -121,9 +121,15 @@
.offset-kangaroo {
margin-top: 24px;
}
.invert {
filter: invert(100%);
}
</style>
<script>
import some from 'lodash/some';
import moment from 'moment';
import { mapState } from '@/libs/store';
import ClassBadge from '@/components/members/classBadge';
@@ -174,6 +180,7 @@ export default {
computed: {
...mapState({
flatGear: 'content.gear.flat',
currentEventList: 'worldState.data.currentEventList',
}),
hasClass () {
return this.$store.getters['members:hasClass'](this.member);
@@ -233,6 +240,15 @@ export default {
return null;
},
petClass () {
if (some(
this.currentEventList,
event => moment().isBetween(event.start, event.end) && event.aprilFools && event.aprilFools === 'invert',
)) {
return `Pet-${this.member.items.currentPet} invert`;
}
return `Pet-${this.member.items.currentPet}`;
},
},
methods: {
getGearClass (gearType) {
@@ -114,10 +114,7 @@
<script>
import { mapState, mapActions } from '@/libs/store';
import * as quests from '@/../../common/script/content/quests';
import {
hasCompletedOnboarding,
hasActiveOnboarding,
} from '@/../../common/script/libs/onboarding';
import { hasCompletedOnboarding } from '@/../../common/script/libs/onboarding';
import notificationsIcon from '@/assets/svg/notifications.svg';
import MenuDropdown from '../ui/customMenuDropdown';
import MessageCount from './messageCount';
@@ -300,7 +297,7 @@ export default {
return this.$store.getters['members:hasClass'](this.user);
},
showOnboardingGuide () {
return hasActiveOnboarding(this.user) && !hasCompletedOnboarding(this.user);
return !hasCompletedOnboarding(this.user);
},
},
mounted () {
@@ -103,9 +103,15 @@
transform: scale(1.2);
}
}
.invert {
filter: invert(100%);
}
</style>
<script>
import some from 'lodash/some';
import moment from 'moment';
import { v4 as uuid } from 'uuid';
import { mapState } from '@/libs/store';
import {
@@ -141,6 +147,7 @@ export default {
computed: {
...mapState({
userItems: 'user.data.items',
currentEventList: 'worldState.data.currentEventList',
}),
potionClass () {
return `Pet_HatchingPotion_${this.item.potionKey}`;
@@ -160,6 +167,13 @@ export default {
return isAllowedToFeed(this.item, this.userItems);
},
getPetItemClass () {
if (this.isOwned() && some(
this.currentEventList,
event => moment().isBetween(event.start, event.end) && event.aprilFools && event.aprilFools === 'invert',
)) {
return `Pet Pet-${this.item.key} ${this.item.eggKey} invert`;
}
if (this.isOwned() || (this.mountOwned() && this.isHatchable())) {
return `Pet Pet-${this.item.key} ${this.item.eggKey}`;
}
@@ -115,6 +115,7 @@ import { toNextLevel } from '@/../../common/script/statHelpers';
import { shouldDo } from '@/../../common/script/cron';
import { onOnboardingComplete } from '@/../../common/script/libs/onboarding';
import { mapState } from '@/libs/store';
import { MAX_LEVEL_HARD_CAP } from '@/../../common/script/constants';
import notifications from '@/mixins/notifications';
import guide from '@/mixins/guide';
@@ -386,6 +387,22 @@ const NOTIFICATIONS = {
achievement: 'redLetterDay',
},
},
ACHIEVEMENT_LEGENDARY_BESTIARY: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementLegendaryBestiary')}`,
modalId: 'generic-achievement',
data: {
achievement: 'legendaryBestiary',
},
},
ACHIEVEMENT_SEASONAL_SPECIALIST: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementSeasonalSpecialist')}`,
modalId: 'generic-achievement',
data: {
achievement: 'seasonalSpecialist',
},
},
};
export default {
@@ -448,7 +465,7 @@ export default {
'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA', 'ACHIEVEMENT_BARE_NECESSITIES',
'ACHIEVEMENT_FRESHWATER_FRIENDS', 'ACHIEVEMENT_GOOD_AS_GOLD', 'ACHIEVEMENT_ALL_THAT_GLITTERS',
'ACHIEVEMENT_BONE_COLLECTOR', 'ACHIEVEMENT_SKELETON_CREW', 'ACHIEVEMENT_SEEING_RED',
'ACHIEVEMENT_RED_LETTER_DAY',
'ACHIEVEMENT_RED_LETTER_DAY', 'ACHIEVEMENT_LEGENDARY_BESTIARY', 'ACHIEVEMENT_SEASONAL_SPECIALIST',
].forEach(type => {
handledNotifications[type] = true;
});
@@ -643,7 +660,7 @@ export default {
const lvlUps = afterLvl - beforeLvl;
let exp = afterExp - beforeExp;
if (lvlUps > 0) {
if (lvlUps > 0 || afterLvl >= MAX_LEVEL_HARD_CAP) {
let level = Math.trunc(beforeLvl);
exp += toNextLevel(level);
@@ -869,6 +886,8 @@ export default {
case 'ACHIEVEMENT_SKELETON_CREW':
case 'ACHIEVEMENT_SEEING_RED':
case 'ACHIEVEMENT_RED_LETTER_DAY':
case 'ACHIEVEMENT_LEGENDARY_BESTIARY':
case 'ACHIEVEMENT_SEASONAL_SPECIALIST':
case 'GENERIC_ACHIEVEMENT':
this.showNotificationWithModal(notification);
break;
@@ -114,6 +114,7 @@
<script>
import clone from 'lodash/clone';
import { MAX_LEVEL_HARD_CAP } from '@/../../common/script/constants';
import { mapState } from '@/libs/store';
export default {
@@ -151,6 +152,10 @@ export default {
return;
}
if (this.restoreValues.stats.lvl > MAX_LEVEL_HARD_CAP) {
this.restoreValues.stats.lvl = MAX_LEVEL_HARD_CAP;
}
const userChangedLevel = this.restoreValues.stats.lvl !== this.user.stats.lvl;
const userDidNotChangeExp = this.restoreValues.stats.exp === this.user.stats.exp;
if (userChangedLevel && userDidNotChangeExp) this.restoreValues.stats.exp = 0;
@@ -161,16 +161,10 @@
</button>
</div>
</div>
<div
<countdown-banner
v-if="item.event && item.owned == null"
class="limitedTime"
>
<span
class="svg-icon inline icon-16 clock-icon"
v-html="icons.clock"
></span>
<span class="limitedString">{{ limitedString }}</span>
</div>
:endDate = "endDate"
/>
<div
v-if="item.key === 'rebirth_orb' && item.value > 0 && user.stats.lvl >= 100"
class="free-rebirth d-flex align-items-center"
@@ -324,27 +318,6 @@
opacity: 0.55;
}
.limitedTime {
height: 32px;
background-color: $purple-300;
width: calc(100% + 30px);
margin: 0 -15px; // the modal content has its own padding
font-size: 12px;
line-height: 1.33;
text-align: center;
color: $white;
display: flex;
align-items: center;
justify-content: center;
.limitedString {
height: 16px;
margin-left: 8px;
}
}
.attributesGrid {
margin-top: 8px;
border-radius: 2px;
@@ -399,6 +372,7 @@ import svgWhiteClock from '@/assets/svg/clock-white.svg';
import BalanceInfo from './balanceInfo.vue';
import PinBadge from '@/components/ui/pinBadge';
import CountdownBanner from './countdownBanner';
import currencyMixin from './_currencyMixin';
import notifications from '@/mixins/notifications';
import buyMixin from '@/mixins/buy';
@@ -432,6 +406,7 @@ export default {
Item,
Avatar,
PinBadge,
CountdownBanner,
},
mixins: [buyMixin, currencyMixin, notifications, numberInvalid, spellsMixin],
props: {
@@ -462,6 +437,7 @@ export default {
selectedAmountToBuy: 1,
isPinned: false,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -494,9 +470,6 @@ export default {
}
return this.item.notes;
},
limitedString () {
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
},
gemsLeft () {
if (!this.user.purchased.plan) return 0;
return planGemLimits.convCap
@@ -0,0 +1,105 @@
<template>
<div
class="limitedTime"
:class="availabilityClass"
>
<span
class="svg-icon inline icon-16"
v-html="availabilityClass === 'expired' ? icons.clockWhite : icons.clock"
></span>
<span class="limitedString"> {{ limitedString }} </span>
</div>
</template>
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
.limitedTime {
height: 32px;
width: calc(100% + 30px);
margin: 0 -15px; // the modal content has its own padding
font-size: 12px;
line-height: 1.33;
text-align: center;
color: $white;
display: flex;
align-items: center;
justify-content: center;
.limitedString {
height: 16px;
margin-left: 8px;
}
}
.available {
background-color: $purple-300;
}
.expired {
background-color: $gray-200;
}
</style>
<script>
import moment from 'moment';
import svgClock from '@/assets/svg/clock.svg';
import clockWhite from '@/assets/svg/clock-white.svg';
export default {
props: {
endDate: {
type: Object, // moment
},
},
data () {
return {
icons: Object.freeze({
clock: svgClock,
clockWhite,
}),
timer: '',
limitedString: '',
availabilityClass: 'available',
};
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
methods: {
countdownString () {
const diffDuration = moment.duration(moment(this.endDate).diff(moment()));
if (moment(this.endDate).isBefore()) {
this.limitedString = this.$t('noLongerAvailable');
this.availabilityClass = 'expired';
this.cancelAutoUpdate();
} else if (diffDuration.days() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: diffDuration.days(),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
beforeDestroy () {
this.cancelAutoUpdate();
},
};
</script>
@@ -48,6 +48,12 @@ export default {
},
mixins: [pinUtils],
props: ['hideLocked', 'hidePinned', 'searchBy', 'sortBy', 'category'],
data () {
return {
timer: '',
limitedString: '',
};
},
computed: {
...mapState({
content: 'content',
@@ -60,9 +66,6 @@ export default {
return planGemLimits.convCap
+ this.user.purchased.plan.consecutive.gemCapExtra - this.user.purchased.plan.gemsBought;
},
limitedString () {
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
},
sortedMarketItems () {
let result = _map(this.category.items, e => ({
...e,
@@ -103,10 +106,43 @@ export default {
return result;
},
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
methods: {
itemSelected (item) {
this.$root.$emit('buyModal::showItem', item);
},
countdownString () {
const diffDuration = moment.duration(moment(seasonalShopConfig.dateRange.end).diff(moment()));
if (diffDuration.asSeconds() <= 0) {
this.limitedString = this.$t('noLongerAvailable');
} else if (diffDuration.days() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: diffDuration.days(),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
beforeDestroy () {
this.cancelAutoUpdate();
},
};
</script>
@@ -84,16 +84,10 @@
>
<questDialogDrops :item="item" />
</div>
<div
<countdown-banner
v-if="item.event"
class="limitedTime"
>
<span
class="svg-icon inline icon-16 clock-icon"
v-html="icons.clock"
></span>
<span class="limitedString">{{ limitedString }}</span>
</div>
:endDate="endDate"
/>
<div
slot="modal-footer"
class="clearfix"
@@ -208,27 +202,6 @@
display: block;
}
.limitedTime {
height: 32px;
background-color: $purple-300;
width: calc(100% + 30px);
margin: 0 -15px; // the modal content has its own padding
font-size: 12px;
line-height: 1.33;
text-align: center;
color: $white;
display: flex;
align-items: center;
justify-content: center;
.limitedString {
height: 16px;
margin-left: 8px;
}
}
.notEnough {
pointer-events: none;
opacity: 0.55;
@@ -268,7 +241,6 @@
</style>
<script>
import moment from 'moment';
import { mapState } from '@/libs/store';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
@@ -285,6 +257,7 @@ import notifications from '@/mixins/notifications';
import buyMixin from '@/mixins/buy';
import numberInvalid from '@/mixins/numberInvalid';
import PinBadge from '@/components/ui/pinBadge';
import CountdownBanner from '../countdownBanner';
import questDialogDrops from './questDialogDrops';
import questDialogContent from './questDialogContent';
@@ -295,6 +268,7 @@ export default {
PinBadge,
questDialogDrops,
questDialogContent,
CountdownBanner,
},
mixins: [buyMixin, currencyMixin, notifications, numberInvalid],
props: {
@@ -321,6 +295,7 @@ export default {
isPinned: false,
selectedAmountToBuy: 1,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -344,9 +319,6 @@ export default {
if (this.priceType === 'hourglasses') return this.icons.hourglass;
return this.icons.gem;
},
limitedString () {
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
},
},
watch: {
item: function itemChanged () {
@@ -36,7 +36,7 @@
</dd>
</div>
</div>
<div v-if="quest.event && popoverVersion">
<div v-if="quest.event">
{{ limitedString }}
</div>
</div>
@@ -131,10 +131,6 @@ export default {
quest: {
type: Object,
},
popoverVersion: {
type: Boolean,
default: false,
},
},
data () {
return {
@@ -143,6 +139,8 @@ export default {
starHalf: svgStarHalf,
starEmpty: svgStarEmpty,
}),
timer: '',
limitedString: '',
};
},
computed: {
@@ -153,9 +151,10 @@ export default {
return 1;
},
limitedString () {
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
},
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
methods: {
stars () {
@@ -182,6 +181,35 @@ export default {
}
return collect.text;
},
countdownString () {
const diffDuration = moment.duration(moment(seasonalShopConfig.dateRange.end).diff(moment()));
if (diffDuration.asSeconds() <= 0) {
this.limitedString = this.$t('noLongerAvailable');
} else if (diffDuration.days() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: diffDuration.days(),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
beforeDestroy () {
this.cancelAutoUpdate();
},
};
</script>
@@ -107,7 +107,7 @@
</div>
</div>
<div
v-if="item.event"
v-if="item.event && item.purchaseType !== 'quests'"
:class="item.purchaseType === 'gear' ? 'mt-4' : 'mt-2'"
>
{{ limitedString }}
@@ -291,16 +291,18 @@ export default {
},
},
data () {
return Object.freeze({
return {
itemId: uuid(),
icons: {
icons: Object.freeze({
gems: svgGem,
gold: svgGold,
lock: svgLock,
hourglasses: svgHourglasses,
clock: svgClock,
},
});
}),
timer: '',
limitedString: '',
};
},
computed: {
showNotes () {
@@ -314,10 +316,10 @@ export default {
}
return 'gold';
},
limitedString () {
return this.item.owned === false ? ''
: this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
},
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
methods: {
click () {
@@ -338,6 +340,35 @@ export default {
locked: this.item.locked,
};
},
countdownString () {
const diffDuration = moment.duration(moment(seasonalShopConfig.dateRange.end).diff(moment()));
if (diffDuration.asSeconds() <= 0) {
this.limitedString = this.$t('noLongerAvailable');
} else if (diffDuration.days() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: diffDuration.days(),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
beforeDestroy () {
this.cancelAutoUpdate();
},
};
</script>
+7 -1
View File
@@ -102,5 +102,11 @@
"achievementSeeingRedModalText": "You collected all the Red Pets!",
"achievementRedLetterDay": "Red Letter Day",
"achievementRedLetterDayText": "Has tamed all Red Mounts.",
"achievementRedLetterDayModalText": "You tamed all the Red Mounts!"
"achievementRedLetterDayModalText": "You tamed all the Red Mounts!",
"achievementLegendaryBestiary": "Legendary Bestiary",
"achievementLegendaryBestiaryText": "Has hatched all standard colors of mythical pets: Dragon, Flying Pig, Gryphon, Sea Serpent, and Unicorn!",
"achievementLegendaryBestiaryModalText": "You collected all the mythical pets!",
"achievementSeasonalSpecialist": "Seasonal Specialist",
"achievementSeasonalSpecialistText": "Has completed all the Spring and Winter seasonal quests: Egg Hunt, Trapper Santa, and Find the Cub!",
"achievementSeasonalSpecialistModalText": "You completed all the seasonal quests!"
}
@@ -667,6 +667,22 @@
"backgroundThroneRoomText": "Throne Room",
"backgroundThroneRoomNotes": "Grant an audience in your luxurious Throne Room.",
"backgrounds032021": "SET 82: Released March 2021",
"backgroundInTheArmoryText": "In the Armory",
"backgroundInTheArmoryNotes": "Gear up In the Armory.",
"backgroundSplashInAPuddleText": "Splashing in a Puddle",
"backgroundSplashInAPuddleNotes": "Enjoy the sequel to the storm by Splashing in a Puddle.",
"backgroundSpringThawText": "Spring Thaw",
"backgroundSpringThawNotes": "Watch winter yield to the Spring Thaw.",
"backgrounds042021": "SET 83: Released April 2021",
"backgroundAmongCattailsText": "Among Cattails",
"backgroundAmongCattailsNotes": "Admire wetland wildlife Among Cattails.",
"backgroundCottageConstructionText": "Cottage Under Construction",
"backgroundCottageConstructionNotes": "Help out with, or at least supervise, a Cottage Under Construction.",
"backgroundElegantGardenText": "Elegant Garden",
"backgroundElegantGardenNotes": "Walk the well-manicured paths of an Elegant Garden.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
+1
View File
@@ -302,6 +302,7 @@
"hatchingPotionAutumnLeaf": "Autumn Leaf",
"hatchingPotionBlackPearl": "Black Pearl",
"hatchingPotionStainedGlass": "Stained Glass",
"hatchingPotionPolkaDot": "Polka Dot",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",
+60
View File
@@ -389,6 +389,15 @@
"headSpecialNye2020Text": "Extravagant Party Hat",
"headSpecialNye2020Notes": "You've received an Extravagant Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"weaponSpecialSpring2021RogueText": "Twin Flower Bloom",
"weaponSpecialSpring2021RogueNotes": "You know what's better than dual-wielding flowers? QUADRUPLE wielding flowers! Increases Strength by <%= str %>. Limited Edition 2021 Spring Gear.",
"weaponSpecialSpring2021WarriorText": "Hammer of the Sun",
"weaponSpecialSpring2021WarriorNotes": "Harness the power of the sun against your enemies, and let the sunstone bring you luck! Increases Strength by <%= str %>. Limited Edition 2021 Spring Gear.",
"weaponSpecialSpring2021MageText": "Swan Plume",
"weaponSpecialSpring2021MageNotes": "Throw, beat, treadle, rest! Swish this magnificent feather in time to conduct the music of your magic. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021 Spring Gear.",
"weaponSpecialSpring2021HealerText": "Willow Branch",
"weaponSpecialSpring2021HealerNotes": "The bark and leaves of this fresh cutting are known for their ability to relieve pain. Or you can plant it and watch it grow! Increases Intelligence by <%= int %>. Limited Edition 2021 Spring Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting",
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -407,6 +416,8 @@
"weaponMystery202002Notes": "An accessory that lends you an air of mystery and romance. Sun protection is a bonus! Confers no benefit. February 2020 Subscriber Item.",
"weaponMystery202102Text": "Charming Wand",
"weaponMystery202102Notes": "The glowing pink gem in this wand holds the power to spread joy and friendship far and wide! Confers no benefit. February 2021 Subscriber Item.",
"weaponMystery202104Text": "Thorny Thistle Staff",
"weaponMystery202104Notes": "Your enemies had better look out- you've got powerful and prickly defenses! Confers no benefit. April 2021 Subscriber Item.",
"weaponMystery301404Text": "Steampunk Cane",
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
@@ -536,6 +547,8 @@
"weaponArmoireEveningTeaNotes": "This panacea will help you relax so those big tasks don't look so threatening. Increases Intelligence by <%= int %>. Enchanted Armoire: Dressing Gown Set (Item 3 of 3).",
"weaponArmoireBlueMoonSaiText": "Dark Lunar Sai",
"weaponArmoireBlueMoonSaiNotes": "This sai is a traditional weapon, imbued with the powers of the dark side of the moon. Increases Strength by <%= str %>. Enchanted Armoire: Blue Moon Rogue Set (item 1 of 4).",
"weaponArmoireJadeGlaiveText": "Jade Glaive",
"weaponArmoireJadeGlaiveNotes": "The reach of this glaive will keep you far from your enemies! Also, you can knock things off high shelves. Increases Strength by <%= str %>. Enchanted Armoire: Jade Warrior Set (Item 3 of 3).",
"armor": "armor",
"armorCapitalized": "Armor",
@@ -906,6 +919,15 @@
"armorSpecialWinter2021HealerText": "Arctic Parka",
"armorSpecialWinter2021HealerNotes": "Defy the chill winds with the best protection available north of the Circle! Increases Constitution by <%= con %>. Limited Edition 2020-2021 Winter Gear.",
"armorSpecialSpring2021RogueText": "Twin Flower Stem",
"armorSpecialSpring2021RogueNotes": "No one will see you waiting in amBUSH with this cunning armor; you look like a plant from every angle. Increases Perception by <%= per %>. Limited Edition 2021 Spring Gear.",
"armorSpecialSpring2021WarriorText": "Armor of the Sun",
"armorSpecialSpring2021WarriorNotes": "Be careful you don't dazzle yourself as this sunstone armor catches the light! Increases Constitution by <%= con %>. Limited Edition 2021 Spring Gear.",
"armorSpecialSpring2021MageText": "White Swan's Splendor",
"armorSpecialSpring2021MageNotes": "Your transformation is complete! Take to the sky, or to the lake, and sing for joy! Increases Intelligence by <%= int %>. Limited Edition 2021 Spring Gear.",
"armorSpecialSpring2021HealerText": "Willow Bark Coat",
"armorSpecialSpring2021HealerNotes": "This armor helps you bend instead of break when buffeted by wind or weapon. Increases Constitution by <%= con %>. Limited Edition 2021 Spring Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -1002,6 +1024,10 @@
"armorMystery202101Notes": "Wrap yourself in warm fur and nearly endless tail floof! Confers no benefit. January 2021 Subscriber Item.",
"armorMystery202102Text": "Charming Dress",
"armorMystery202102Notes": "Sail across the universe in fine style in this buoyantly bright dress. Confers no benefit. February 2021 Subscriber Item.",
"armorMystery202103Text": "Blossom Viewing Robes",
"armorMystery202103Notes": "These soft and breezy robes are perfect for a tea party beneath the showy spring trees. Confers no benefit. March 2021 Subscriber Item.",
"armorMystery202104Text": "Downy Thistle Armor",
"armorMystery202104Notes": "Soft on the inside, spiky on the outside, stylish everywhere! Confers no benefit. April 2021 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
"armorMystery301703Text": "Steampunk Peacock Gown",
@@ -1153,6 +1179,10 @@
"armorArmoireBlueMoonShozokuNotes": "A strange serenity surrounds the wearer of this armor. Increases Constitution by <%= con %>. Enchanted Armoire: Blue Moon Rogue Set (item 4 of 4).",
"armorArmoireSoftPinkSuitText": "Soft Pink Suit",
"armorArmoireSoftPinkSuitNotes": "Pink is a soothing color. Slip into this loungewear set for a bit of peace during the daily grind! Increases Perception by <%= per %>. Enchanted Armoire: Pink Loungewear Set (item 2 of 3).",
"armorArmoireJadeArmorText": "Jade Armor",
"armorArmoireJadeArmorNotes": "This jade armor is both beautiful and functional. Protect yourself, and know that you look fabulous! Increases Perception by <%= per %>. Enchanted Armoire: Jade Warrior Set (Item 2 of 3).",
"armorArmoireClownsMotleyText": "Clown's Motley",
"armorArmoireClownsMotleyNotes": "The clothes fit beautifully, but filling these shoes is no small feat. Increases Strength by <%= str %>. Enchanted Armoire: Clown Set (Item 1 of 5).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -1522,6 +1552,15 @@
"headSpecialWinter2021HealerText": "Arctic Exploration Headgear",
"headSpecialWinter2021HealerNotes": "A surprising amount of heat escapes through the head! Not if you're wearing this thick hood and goggles, though. There'll be no icicles on YOUR eyelashes! Increases Intelligence by <%= int %>. Limited Edition 2020-2021 Winter Gear.",
"headSpecialSpring2021RogueText": "Twin Flower Hat",
"headSpecialSpring2021RogueNotes": "Let's keep the flowery language to a minimum: this hat will help you blend in with the spring flowers! Increases Perception by <%= per %>. Limited Edition 2021 Spring Gear.",
"headSpecialSpring2021WarriorText": "Helm of the Sun",
"headSpecialSpring2021WarriorNotes": "Don't fear! The sunstone in this helm will help you bring to light those deepest, darkest red to-dos. Increases Strength by <%= str %>. Limited Edition 2021 Spring Gear.",
"headSpecialSpring2021MageText": "Cygnet Circlet",
"headSpecialSpring2021MageNotes": "Set this airy crown upon your brow, and the birds of the water will come attend to you. To what quest will you call them? Increases Perception by <%= per %>. Limited Edition 2021 Spring Gear.",
"headSpecialSpring2021HealerText": "Salix Wreath",
"headSpecialSpring2021HealerNotes": "Weep not, friends! A Healer is here to soothe your suffering! Increases Intelligence by <%= int %>. Limited Edition 2021 Spring Gear.",
"headSpecialGaymerxText": "Rainbow Warrior Helm",
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@@ -1639,6 +1678,8 @@
"headMystery202012Notes": "This imposing mask features piercing eyes that will blind foes like the glare of sunlight on fresh snow. Confers no benefit. December 2020 Subscriber Item.",
"headMystery202101Text": "Snazzy Snow Leopard Helm",
"headMystery202101Notes": "The icy blue eyes on this feline helm will freeze even the most intimidating task on your list. Confers no benefit. January 2021 Subscriber Item.",
"headMystery202103Text": "Blossom Viewing Circlet",
"headMystery202103Notes": "Greet spring in style in this circlet woven from the first blooming branches. Confers no benefit. March 2021 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
"headMystery301405Text": "Basic Top Hat",
@@ -1788,6 +1829,10 @@
"headArmoireBlueMoonHelmNotes": "This helm offers an astonishing amount of luck to its wearer, and exceptional events follow its use. Increases Intelligence by <%= int %>. Enchanted Armoire: Blue Moon Rogue Set (item 3 of 4).",
"headArmoirePinkFloppyHatText": "Pink Floppy Hat",
"headArmoirePinkFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a perfect pink color. Increases Intelligence by <%= int %>. Enchanted Armoire: Pink Loungewear Set (item 1 of 3).",
"headArmoireJadeHelmText": "Jade Helm",
"headArmoireJadeHelmNotes": "Some say jade decreases fear and anxiety. With this beautiful helm, you definitely have no cause to worry! Increases Constitution by <%= con %>. Enchanted Armoire: Jade Warrior Set (Item 1 of 3).",
"headArmoireClownsWigText": "Clown's Wig",
"headArmoireClownsWigNotes": "No bad tasks can bite you now! You'll taste funny. Increases Constitution by <%= con %>. Enchanted Armoire: Clown Set (Item 3 of 5).",
"offhand": "off-hand item",
"offhandCapitalized": "Off-Hand Item",
@@ -1995,6 +2040,11 @@
"shieldSpecialWinter2021HealerText": "Arctic Armguards",
"shieldSpecialWinter2021HealerNotes": "These mighty mitts stop weapons cold. Increases Constitution by <%= con %>. Limited Edition 2020-2021 Winter Gear.",
"shieldSpecialSpring2021WarriorText": "Shield of the Sun",
"shieldSpecialSpring2021WarriorNotes": "The beauty in this roughly-shaped sunstone will shine even in the deepest caves and darkest dungeons. Hold it high! Increases Constitution by <%= con %>. Limited Edition 2021 Spring Gear.",
"shieldSpecialSpring2021HealerText": "Salicylic Shield",
"shieldSpecialSpring2021HealerNotes": "A leafy green bundle that heralds shelter and compassion. Increases Constitution by <%= con %>. Limited Edition 2021 Spring Gear.",
"shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield",
@@ -2104,6 +2154,8 @@
"shieldArmoireBlueMoonSaiNotes": "This sai is a traditional weapon, imbued with the powers of the light side of the moon. Increases Perception by <%= per %>. Enchanted Armoire: Blue Moon Rogue Set (item 2 of 4).",
"shieldArmoireSoftPinkPillowText": "Soft Pink Pillow",
"shieldArmoireSoftPinkPillowNotes": "The sensible warrior packs a pillow for any expedition. Soften life's blows... even while you nap. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Pink Loungewear Set (item 3 of 3).",
"shieldArmoireClownsBalloonsText": "Clown's Balloons",
"shieldArmoireClownsBalloonsNotes": "Be careful: replacing these balloons would be a bit expensive... because of the inflation! Increases Perception by <%= per %>. Enchanted Armoire: Clown Set (Item 4 of 5).",
"back": "Back Accessory",
"backCapitalized": "Back Accessory",
@@ -2161,6 +2213,8 @@
"backMystery202010Notes": "You are the night! So fly as silently as a midnight cloud with these swift purple wings. Confers no benefit. October 2020 Subscriber Item.",
"backMystery202012Text": "Frostfire Wings",
"backMystery202012Notes": "The snowy feathers of these wings will grant you the speed of a wintry gale. Confers no benefit. December 2020 Subscriber Item.",
"backMystery202105Text": "Nebula Dragon Wings",
"backMystery202105Notes": "Glide through the starry sky and place yourself among the constellations! Confers no benefit. May 2021 Subscriber Item.",
"backSpecialWonderconRedText": "Mighty Cape",
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",
@@ -2247,6 +2301,8 @@
"bodyArmoireCozyScarfNotes": "This fine scarf will keep you warm as you go about your wintry business. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Lamplighter's Set (Item 4 of 4).",
"bodyArmoireLifeguardWhistleText": "Lifeguard Whistle",
"bodyArmoireLifeguardWhistleNotes": "Call that misbehaving habit to order! It should know the rules! Increases Intelligence by <%= int %>. Enchanted Armoire: Lifeguard Set (Item 3 of 3).",
"bodyArmoireClownsBowtieText": "Clown's Bow-Tie",
"bodyArmoireClownsBowtieNotes": "A nice bow-tie is no joking matter, even for a clown. Increases Strength, Intelligence, Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Clown Set (Item 5 of 5).",
"headAccessory": "head accessory",
"headAccessoryCapitalized": "Head Accessory",
@@ -2353,6 +2409,8 @@
"headAccessoryMystery202009Notes": "These feathery appendages will help you find your way even in the dark of night. Confers no benefit. September 2020 Subscriber Item.",
"headAccessoryMystery202102Text": "Charming Tiara",
"headAccessoryMystery202102Notes": "Magnify your empathy and caring to new heights with this ornate golden tiara. Confers no benefit. February 2021 Subscriber Item.",
"headAccessoryMystery202105Text": "Nebula Dragon Horns",
"headAccessoryMystery202105Notes": "Don these iridescent horns and summon the magic of starlight. Confers no benefit. May 2021 Subscriber Item.",
"headAccessoryMystery301405Text": "Headwear Goggles",
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",
@@ -2439,6 +2497,8 @@
"eyewearArmoirePlagueDoctorMaskNotes": "An authentic mask worn by the doctors who battle the Plague of Procrastination. Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Plague Doctor Set (Item 2 of 3).",
"eyewearArmoireGoofyGlassesText": "Goofy Glasses",
"eyewearArmoireGoofyGlassesNotes": "Perfect for going incognito or just making your partymates giggle. Increases Perception by <%= per %>. Enchanted Armoire: Independent Item.",
"eyewearArmoireClownsNoseText": "Clown's Nose",
"eyewearArmoireClownsNoseNotes": "This accessory will make sure everyone 'nose' you're a clown! Increases Intelligence by <%= int %>. Enchanted Armoire: Clown Set (Item 2 of 5).",
"twoHandedItem": "Two-handed item."
}
+10 -5
View File
@@ -28,10 +28,10 @@
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
"seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>",
"seasonalShopClosedText": "The Seasonal Shop is currently closed!! Its only open during Habiticas four Grand Galas.",
"seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? Theyll only be available until July 31st!",
"seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? Theyll only be available until October 31st!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? Theyll only be available until January 31st!",
"seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? Theyll only be available until April 30th!",
"seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... <strong>*sigh*</strong>",
"seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!",
"seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.",
@@ -163,6 +163,10 @@
"winter2021WinterMoonMageSet": "Winter Moon (Mage)",
"winter2021ArcticExplorerHealerSet": "Arctic Explorer (Healer)",
"winter2021HollyIvyRogueSet": "Holly and Ivy (Rogue)",
"spring2021SunstoneWarriorSet": "Sunstone (Warrior)",
"spring2021SwanMageSet": "Swan (Mage)",
"spring2021WillowHealerSet": "Willow (Healer)",
"spring2021TwinFlowerRogueSet": "Twin Flower (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndMarch": "April 30",
@@ -195,5 +199,6 @@
"howItWorks": "How it Works",
"g1g1HowItWorks": "Type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
"limitations": "Limitations",
"g1g1Limitations": "This is a limited time event that starts on December 17th at 8:00 AM ET (13:00 UTC) and will end January 7th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires."
"g1g1Limitations": "This is a limited time event that starts on December 17th at 8:00 AM ET (13:00 UTC) and will end January 7th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"noLongerAvailable": "This item is no longer available."
}
+4 -1
View File
@@ -125,5 +125,8 @@
"welcome3": "Progress in life and the game!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"imReady": "Enter Habitica",
"limitedOffer": "Available until <%= date %>"
"limitedOffer": "Available until <%= date %>",
"limitedAvailabilityDays": "Available for <%= days %>d <%= hours %>h <%= minutes %>m",
"limitedAvailabilityHours": "Available for <%= hours %>h <%= minutes %>m",
"limitedAvailabilityMinutes": "Available for <%= minutes %>m <%= seconds %>s"
}
+1 -1
View File
@@ -729,7 +729,7 @@
"questAlligatorUnlockText": "Unlocks Alligator Eggs for purchase in the Market",
"oddballsText": "Oddballs Quest Bundle",
"oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until June 30.",
"oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until April 30.",
"birdBuddiesText": "Bird Buddies Quest Bundle",
"birdBuddiesNotes": "Contains 'The Fowl Frost,' 'Rooster Rampage,' and 'The Push-and-Pull Peacock.' Available until December 31.",
@@ -119,6 +119,9 @@
"mysterySet202012": "Frostfire Phoenix Set",
"mysterySet202101": "Snazzy Snow Leopard Set",
"mysterySet202102": "Charming Champion Set",
"mysterySet202103": "Blossom Viewing Set",
"mysterySet202104": "Thistle Guardian Set",
"mysterySet202105": "Nebula Dragon Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",
+1
View File
@@ -1,6 +1,7 @@
export const MAX_HEALTH = 50;
export const MAX_LEVEL = 100;
export const MAX_STAT_POINTS = MAX_LEVEL;
export const MAX_LEVEL_HARD_CAP = 9999;
export const ATTRIBUTES = ['str', 'int', 'con', 'per'];
export const MAX_INCENTIVES = 500;
@@ -232,6 +232,16 @@ const basicAchievs = {
titleKey: 'achievementRedLetterDay',
textKey: 'achievementRedLetterDayText',
},
legendaryBestiary: {
icon: 'achievement-legendaryBestiary',
titleKey: 'achievementLegendaryBestiary',
textKey: 'achievementLegendaryBestiaryText',
},
seasonalSpecialist: {
icon: 'achievement-seasonalSpecialist',
titleKey: 'achievementSeasonalSpecialist',
textKey: 'achievementSeasonalSpecialistText',
},
};
Object.assign(achievementsData, basicAchievs);
@@ -425,6 +425,16 @@ const backgrounds = {
heart_shaped_bubbles: { },
throne_room: { },
},
backgrounds032021: {
in_the_armory: { },
splash_in_a_puddle: { },
spring_thaw: { },
},
backgrounds042021: {
among_cattails: { },
cottage_construction: { },
elegant_garden: { },
},
timeTravelBackgrounds: {
airship: {
price: 1,
@@ -11,7 +11,7 @@ export default prefill({
pastelHairColors: { setPrice: 5, availableUntil: '2016-01-01' },
rainbowHairColors: { setPrice: 5, text: t('rainbowColors') },
shimmerHairColors: {
setPrice: 5, availableFrom: '2020-04-14', availableUntil: '2020-05-02', text: t('shimmerColors'),
setPrice: 5, availableFrom: '2021-04-06', availableUntil: '2021-04-30T20:00-05:00', text: t('shimmerColors'),
},
hauntedHairColors: {
setPrice: 5, availableFrom: '2020-09-25', availableUntil: '2020-11-02', text: t('hauntedColors'),
@@ -22,7 +22,7 @@ export default prefill({
rainbowSkins: { setPrice: 5, text: t('rainbowSkins') },
animalSkins: { setPrice: 5, text: t('animalSkins') },
pastelSkins: {
setPrice: 5, availableFrom: '2020-04-14', availableUntil: '2020-05-02', text: t('pastelSkins'),
setPrice: 5, availableFrom: '2021-04-06', availableUntil: '2021-04-30T20:00-05:00', text: t('pastelSkins'),
},
spookySkins: { setPrice: 5, availableUntil: '2016-01-01', text: t('spookySkins') },
supernaturalSkins: {
+2 -2
View File
@@ -160,7 +160,7 @@ const bundles = {
'yarn',
],
canBuy () {
return moment().isBetween('2019-06-10', '2019-07-03');
return moment().isBetween('2021-03-16T08:00-05:00', '2021-03-31T20:00-05:00');
},
type: 'quests',
value: 7,
@@ -190,7 +190,7 @@ const bundles = {
'gryphon',
],
canBuy () {
return moment().isBetween('2019-02-19', '2019-03-02');
return moment().isBefore('2021-02-28T08:00-05:00');
},
type: 'quests',
value: 7,
@@ -0,0 +1,16 @@
const ANIMAL_SET_ACHIEVEMENTS = {
legendaryBestiary: {
type: 'pet',
species: [
'Dragon',
'FlyingPig',
'Gryphon',
'SeaSerpent',
'Unicorn',
],
achievementKey: 'legendaryBestiary',
notificationType: 'ACHIEVEMENT_LEGENDARY_BESTIARY',
},
};
export default ANIMAL_SET_ACHIEVEMENTS;

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