mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-07-13 17:52:22 +00:00
Merge branch 'release' into develop
This commit is contained in:
commit
7b4b4240cb
20 changed files with 405 additions and 121 deletions
2
package-lock.json
generated
2
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"version": "4.189.1",
|
"version": "4.189.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||||
"version": "4.189.1",
|
"version": "4.189.2",
|
||||||
"main": "./website/server/index.js",
|
"main": "./website/server/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.12.10",
|
"@babel/core": "^7.12.10",
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ describe('POST /user/buy/:key', () => {
|
||||||
it('buys a special spell', async () => {
|
it('buys a special spell', async () => {
|
||||||
const key = 'spookySparkles';
|
const key = 'spookySparkles';
|
||||||
const item = content.special[key];
|
const item = content.special[key];
|
||||||
|
const stub = sinon.stub(item, 'canOwn').returns(true);
|
||||||
|
|
||||||
await user.update({ 'stats.gp': 250 });
|
await user.update({ 'stats.gp': 250 });
|
||||||
const res = await user.post(`/user/buy/${key}`);
|
const res = await user.post(`/user/buy/${key}`);
|
||||||
|
|
@ -82,6 +83,8 @@ describe('POST /user/buy/:key', () => {
|
||||||
expect(res.message).to.equal(t('messageBought', {
|
expect(res.message).to.equal(t('messageBought', {
|
||||||
itemText: item.text(),
|
itemText: item.text(),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
stub.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('allows for bulk purchases', async () => {
|
it('allows for bulk purchases', async () => {
|
||||||
|
|
|
||||||
|
|
@ -161,16 +161,10 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<countdown-banner
|
||||||
v-if="item.event && item.owned == null"
|
v-if="item.event && item.owned == null"
|
||||||
class="limitedTime"
|
:endDate = "endDate"
|
||||||
>
|
/>
|
||||||
<span
|
|
||||||
class="svg-icon inline icon-16 clock-icon"
|
|
||||||
v-html="icons.clock"
|
|
||||||
></span>
|
|
||||||
<span class="limitedString">{{ limitedString }}</span>
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
v-if="item.key === 'rebirth_orb' && item.value > 0 && user.stats.lvl >= 100"
|
v-if="item.key === 'rebirth_orb' && item.value > 0 && user.stats.lvl >= 100"
|
||||||
class="free-rebirth d-flex align-items-center"
|
class="free-rebirth d-flex align-items-center"
|
||||||
|
|
@ -324,27 +318,6 @@
|
||||||
opacity: 0.55;
|
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 {
|
.attributesGrid {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
|
@ -399,6 +372,7 @@ import svgWhiteClock from '@/assets/svg/clock-white.svg';
|
||||||
|
|
||||||
import BalanceInfo from './balanceInfo.vue';
|
import BalanceInfo from './balanceInfo.vue';
|
||||||
import PinBadge from '@/components/ui/pinBadge';
|
import PinBadge from '@/components/ui/pinBadge';
|
||||||
|
import CountdownBanner from './countdownBanner';
|
||||||
import currencyMixin from './_currencyMixin';
|
import currencyMixin from './_currencyMixin';
|
||||||
import notifications from '@/mixins/notifications';
|
import notifications from '@/mixins/notifications';
|
||||||
import buyMixin from '@/mixins/buy';
|
import buyMixin from '@/mixins/buy';
|
||||||
|
|
@ -432,6 +406,7 @@ export default {
|
||||||
Item,
|
Item,
|
||||||
Avatar,
|
Avatar,
|
||||||
PinBadge,
|
PinBadge,
|
||||||
|
CountdownBanner,
|
||||||
},
|
},
|
||||||
mixins: [buyMixin, currencyMixin, notifications, numberInvalid, spellsMixin],
|
mixins: [buyMixin, currencyMixin, notifications, numberInvalid, spellsMixin],
|
||||||
props: {
|
props: {
|
||||||
|
|
@ -462,6 +437,7 @@ export default {
|
||||||
|
|
||||||
selectedAmountToBuy: 1,
|
selectedAmountToBuy: 1,
|
||||||
isPinned: false,
|
isPinned: false,
|
||||||
|
endDate: seasonalShopConfig.dateRange.end,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -494,9 +470,6 @@ export default {
|
||||||
}
|
}
|
||||||
return this.item.notes;
|
return this.item.notes;
|
||||||
},
|
},
|
||||||
limitedString () {
|
|
||||||
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
|
|
||||||
},
|
|
||||||
gemsLeft () {
|
gemsLeft () {
|
||||||
if (!this.user.purchased.plan) return 0;
|
if (!this.user.purchased.plan) return 0;
|
||||||
return planGemLimits.convCap
|
return planGemLimits.convCap
|
||||||
|
|
|
||||||
105
website/client/src/components/shops/countdownBanner.vue
Normal file
105
website/client/src/components/shops/countdownBanner.vue
Normal file
|
|
@ -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],
|
mixins: [pinUtils],
|
||||||
props: ['hideLocked', 'hidePinned', 'searchBy', 'sortBy', 'category'],
|
props: ['hideLocked', 'hidePinned', 'searchBy', 'sortBy', 'category'],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
timer: '',
|
||||||
|
limitedString: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
content: 'content',
|
content: 'content',
|
||||||
|
|
@ -60,9 +66,6 @@ export default {
|
||||||
return planGemLimits.convCap
|
return planGemLimits.convCap
|
||||||
+ this.user.purchased.plan.consecutive.gemCapExtra - this.user.purchased.plan.gemsBought;
|
+ this.user.purchased.plan.consecutive.gemCapExtra - this.user.purchased.plan.gemsBought;
|
||||||
},
|
},
|
||||||
limitedString () {
|
|
||||||
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
|
|
||||||
},
|
|
||||||
sortedMarketItems () {
|
sortedMarketItems () {
|
||||||
let result = _map(this.category.items, e => ({
|
let result = _map(this.category.items, e => ({
|
||||||
...e,
|
...e,
|
||||||
|
|
@ -103,10 +106,43 @@ export default {
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mounted () {
|
||||||
|
this.countdownString();
|
||||||
|
this.timer = setInterval(this.countdownString, 1000);
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
itemSelected (item) {
|
itemSelected (item) {
|
||||||
this.$root.$emit('buyModal::showItem', 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>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -84,16 +84,10 @@
|
||||||
>
|
>
|
||||||
<questDialogDrops :item="item" />
|
<questDialogDrops :item="item" />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<countdown-banner
|
||||||
v-if="item.event"
|
v-if="item.event"
|
||||||
class="limitedTime"
|
:endDate="endDate"
|
||||||
>
|
/>
|
||||||
<span
|
|
||||||
class="svg-icon inline icon-16 clock-icon"
|
|
||||||
v-html="icons.clock"
|
|
||||||
></span>
|
|
||||||
<span class="limitedString">{{ limitedString }}</span>
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
slot="modal-footer"
|
slot="modal-footer"
|
||||||
class="clearfix"
|
class="clearfix"
|
||||||
|
|
@ -208,27 +202,6 @@
|
||||||
display: block;
|
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 {
|
.notEnough {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
|
|
@ -268,7 +241,6 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import moment from 'moment';
|
|
||||||
import { mapState } from '@/libs/store';
|
import { mapState } from '@/libs/store';
|
||||||
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
|
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
|
||||||
|
|
||||||
|
|
@ -285,6 +257,7 @@ import notifications from '@/mixins/notifications';
|
||||||
import buyMixin from '@/mixins/buy';
|
import buyMixin from '@/mixins/buy';
|
||||||
import numberInvalid from '@/mixins/numberInvalid';
|
import numberInvalid from '@/mixins/numberInvalid';
|
||||||
import PinBadge from '@/components/ui/pinBadge';
|
import PinBadge from '@/components/ui/pinBadge';
|
||||||
|
import CountdownBanner from '../countdownBanner';
|
||||||
|
|
||||||
import questDialogDrops from './questDialogDrops';
|
import questDialogDrops from './questDialogDrops';
|
||||||
import questDialogContent from './questDialogContent';
|
import questDialogContent from './questDialogContent';
|
||||||
|
|
@ -295,6 +268,7 @@ export default {
|
||||||
PinBadge,
|
PinBadge,
|
||||||
questDialogDrops,
|
questDialogDrops,
|
||||||
questDialogContent,
|
questDialogContent,
|
||||||
|
CountdownBanner,
|
||||||
},
|
},
|
||||||
mixins: [buyMixin, currencyMixin, notifications, numberInvalid],
|
mixins: [buyMixin, currencyMixin, notifications, numberInvalid],
|
||||||
props: {
|
props: {
|
||||||
|
|
@ -321,6 +295,7 @@ export default {
|
||||||
|
|
||||||
isPinned: false,
|
isPinned: false,
|
||||||
selectedAmountToBuy: 1,
|
selectedAmountToBuy: 1,
|
||||||
|
endDate: seasonalShopConfig.dateRange.end,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -344,9 +319,6 @@ export default {
|
||||||
if (this.priceType === 'hourglasses') return this.icons.hourglass;
|
if (this.priceType === 'hourglasses') return this.icons.hourglass;
|
||||||
return this.icons.gem;
|
return this.icons.gem;
|
||||||
},
|
},
|
||||||
limitedString () {
|
|
||||||
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
item: function itemChanged () {
|
item: function itemChanged () {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="quest.event && popoverVersion">
|
<div v-if="quest.event">
|
||||||
{{ limitedString }}
|
{{ limitedString }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -131,10 +131,6 @@ export default {
|
||||||
quest: {
|
quest: {
|
||||||
type: Object,
|
type: Object,
|
||||||
},
|
},
|
||||||
popoverVersion: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
|
@ -143,6 +139,8 @@ export default {
|
||||||
starHalf: svgStarHalf,
|
starHalf: svgStarHalf,
|
||||||
starEmpty: svgStarEmpty,
|
starEmpty: svgStarEmpty,
|
||||||
}),
|
}),
|
||||||
|
timer: '',
|
||||||
|
limitedString: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -153,9 +151,10 @@ export default {
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
},
|
},
|
||||||
limitedString () {
|
},
|
||||||
return this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
|
mounted () {
|
||||||
},
|
this.countdownString();
|
||||||
|
this.timer = setInterval(this.countdownString, 1000);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
stars () {
|
stars () {
|
||||||
|
|
@ -182,6 +181,35 @@ export default {
|
||||||
}
|
}
|
||||||
return collect.text;
|
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>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="item.event"
|
v-if="item.event && item.purchaseType !== 'quests'"
|
||||||
:class="item.purchaseType === 'gear' ? 'mt-4' : 'mt-2'"
|
:class="item.purchaseType === 'gear' ? 'mt-4' : 'mt-2'"
|
||||||
>
|
>
|
||||||
{{ limitedString }}
|
{{ limitedString }}
|
||||||
|
|
@ -291,16 +291,18 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return Object.freeze({
|
return {
|
||||||
itemId: uuid(),
|
itemId: uuid(),
|
||||||
icons: {
|
icons: Object.freeze({
|
||||||
gems: svgGem,
|
gems: svgGem,
|
||||||
gold: svgGold,
|
gold: svgGold,
|
||||||
lock: svgLock,
|
lock: svgLock,
|
||||||
hourglasses: svgHourglasses,
|
hourglasses: svgHourglasses,
|
||||||
clock: svgClock,
|
clock: svgClock,
|
||||||
},
|
}),
|
||||||
});
|
timer: '',
|
||||||
|
limitedString: '',
|
||||||
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
showNotes () {
|
showNotes () {
|
||||||
|
|
@ -314,10 +316,10 @@ export default {
|
||||||
}
|
}
|
||||||
return 'gold';
|
return 'gold';
|
||||||
},
|
},
|
||||||
limitedString () {
|
},
|
||||||
return this.item.owned === false ? ''
|
mounted () {
|
||||||
: this.$t('limitedOffer', { date: moment(seasonalShopConfig.dateRange.end).format('LL') });
|
this.countdownString();
|
||||||
},
|
this.timer = setInterval(this.countdownString, 1000);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
click () {
|
click () {
|
||||||
|
|
@ -338,6 +340,35 @@ export default {
|
||||||
locked: this.item.locked,
|
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>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
"achievementRedLetterDayText": "Has tamed all Red Mounts.",
|
"achievementRedLetterDayText": "Has tamed all Red Mounts.",
|
||||||
"achievementRedLetterDayModalText": "You tamed all the Red Mounts!",
|
"achievementRedLetterDayModalText": "You tamed all the Red Mounts!",
|
||||||
"achievementLegendaryBestiary": "Legendary Bestiary",
|
"achievementLegendaryBestiary": "Legendary Bestiary",
|
||||||
"achievementLegendaryBestiaryText": "Has hatched all the mythical pets: Dragon, Flying Pig, Gryphon, Sea Serpent, and Unicorn!",
|
"achievementLegendaryBestiaryText": "Has hatched all standard colors of mythical pets: Dragon, Flying Pig, Gryphon, Sea Serpent, and Unicorn!",
|
||||||
"achievementLegendaryBestiaryModalText": "You collected all the mythical pets!",
|
"achievementLegendaryBestiaryModalText": "You collected all the mythical pets!",
|
||||||
"achievementSeasonalSpecialist": "Seasonal Specialist",
|
"achievementSeasonalSpecialist": "Seasonal Specialist",
|
||||||
"achievementSeasonalSpecialistText": "Has completed all the Spring and Winter seasonal quests: Egg Hunt, Trapper Santa, and Find the Cub!",
|
"achievementSeasonalSpecialistText": "Has completed all the Spring and Winter seasonal quests: Egg Hunt, Trapper Santa, and Find the Cub!",
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,10 @@
|
||||||
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
|
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
|
||||||
"seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>",
|
"seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>",
|
||||||
"seasonalShopClosedText": "The Seasonal Shop is currently closed!! It’s only open during Habitica’s four Grand Galas.",
|
"seasonalShopClosedText": "The Seasonal Shop is currently closed!! It’s only open during Habitica’s four Grand Galas.",
|
||||||
"seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? They’ll only be available until July 31st!",
|
"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? They’ll only be available until October 31st!",
|
"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? They’ll only be available until January 31st!",
|
"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? They’ll only be available until April 30th!",
|
"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>",
|
"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!",
|
"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.",
|
"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.",
|
||||||
|
|
@ -199,5 +199,6 @@
|
||||||
"howItWorks": "How it Works",
|
"howItWorks": "How it Works",
|
||||||
"g1g1HowItWorks": "Type in the username of the account you’d like to gift to. From there, pick the sub length you’d like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
|
"g1g1HowItWorks": "Type in the username of the account you’d like to gift to. From there, pick the sub length you’d like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
|
||||||
"limitations": "Limitations",
|
"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."
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,5 +125,8 @@
|
||||||
"welcome3": "Progress in life and the game!",
|
"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!",
|
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
|
||||||
"imReady": "Enter Habitica",
|
"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"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -164,18 +164,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
springRogue: {
|
springRogue: {
|
||||||
set: 'stealthyKittySet',
|
set: 'stealthyKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springWarrior: {
|
springWarrior: {
|
||||||
set: 'mightyBunnySet',
|
set: 'mightyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springMage: {
|
springMage: {
|
||||||
set: 'magicMouseSet',
|
set: 'magicMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springHealer: {
|
springHealer: {
|
||||||
set: 'lovingPupSet',
|
set: 'lovingPupSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summerRogue: {
|
summerRogue: {
|
||||||
|
|
@ -234,18 +238,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2015Rogue: {
|
spring2015Rogue: {
|
||||||
set: 'sneakySqueakerSet',
|
set: 'sneakySqueakerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Warrior: {
|
spring2015Warrior: {
|
||||||
set: 'bewareDogSet',
|
set: 'bewareDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Mage: {
|
spring2015Mage: {
|
||||||
set: 'magicianBunnySet',
|
set: 'magicianBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Healer: {
|
spring2015Healer: {
|
||||||
set: 'comfortingKittySet',
|
set: 'comfortingKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2015Rogue: {
|
summer2015Rogue: {
|
||||||
|
|
@ -310,18 +318,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2016Rogue: {
|
spring2016Rogue: {
|
||||||
set: 'cleverDogSet',
|
set: 'cleverDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Warrior: {
|
spring2016Warrior: {
|
||||||
set: 'braveMouseSet',
|
set: 'braveMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Mage: {
|
spring2016Mage: {
|
||||||
set: 'grandMalkinSet',
|
set: 'grandMalkinSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Healer: {
|
spring2016Healer: {
|
||||||
set: 'springingBunnySet',
|
set: 'springingBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2016Rogue: {
|
summer2016Rogue: {
|
||||||
|
|
@ -380,18 +392,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2017Rogue: {
|
spring2017Rogue: {
|
||||||
set: 'spring2017SneakyBunnySet',
|
set: 'spring2017SneakyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Warrior: {
|
spring2017Warrior: {
|
||||||
set: 'spring2017FelineWarriorSet',
|
set: 'spring2017FelineWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Mage: {
|
spring2017Mage: {
|
||||||
set: 'spring2017CanineConjurorSet',
|
set: 'spring2017CanineConjurorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Healer: {
|
spring2017Healer: {
|
||||||
set: 'spring2017FloralMouseSet',
|
set: 'spring2017FloralMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2017Rogue: {
|
summer2017Rogue: {
|
||||||
|
|
@ -450,18 +466,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2018Rogue: {
|
spring2018Rogue: {
|
||||||
set: 'spring2018DucklingRogueSet',
|
set: 'spring2018DucklingRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Warrior: {
|
spring2018Warrior: {
|
||||||
set: 'spring2018SunriseWarriorSet',
|
set: 'spring2018SunriseWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Mage: {
|
spring2018Mage: {
|
||||||
set: 'spring2018TulipMageSet',
|
set: 'spring2018TulipMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Healer: {
|
spring2018Healer: {
|
||||||
set: 'spring2018GarnetHealerSet',
|
set: 'spring2018GarnetHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2018Rogue: {
|
summer2018Rogue: {
|
||||||
|
|
@ -526,18 +546,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2019Rogue: {
|
spring2019Rogue: {
|
||||||
set: 'spring2019CloudRogueSet',
|
set: 'spring2019CloudRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Warrior: {
|
spring2019Warrior: {
|
||||||
set: 'spring2019OrchidWarriorSet',
|
set: 'spring2019OrchidWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Mage: {
|
spring2019Mage: {
|
||||||
set: 'spring2019AmberMageSet',
|
set: 'spring2019AmberMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Healer: {
|
spring2019Healer: {
|
||||||
set: 'spring2019RobinHealerSet',
|
set: 'spring2019RobinHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2019Rogue: {
|
summer2019Rogue: {
|
||||||
|
|
@ -603,18 +627,22 @@ const armor = {
|
||||||
},
|
},
|
||||||
spring2020Rogue: {
|
spring2020Rogue: {
|
||||||
set: 'spring2020LapisLazuliRogueSet',
|
set: 'spring2020LapisLazuliRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Warrior: {
|
spring2020Warrior: {
|
||||||
set: 'spring2020BeetleWarriorSet',
|
set: 'spring2020BeetleWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Mage: {
|
spring2020Mage: {
|
||||||
set: 'spring2020PuddleMageSet',
|
set: 'spring2020PuddleMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Healer: {
|
spring2020Healer: {
|
||||||
set: 'spring2020IrisHealerSet',
|
set: 'spring2020IrisHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2020Rogue: {
|
summer2020Rogue: {
|
||||||
|
|
@ -1171,18 +1199,22 @@ const head = {
|
||||||
},
|
},
|
||||||
springRogue: {
|
springRogue: {
|
||||||
set: 'stealthyKittySet',
|
set: 'stealthyKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springWarrior: {
|
springWarrior: {
|
||||||
set: 'mightyBunnySet',
|
set: 'mightyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springMage: {
|
springMage: {
|
||||||
set: 'magicMouseSet',
|
set: 'magicMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springHealer: {
|
springHealer: {
|
||||||
set: 'lovingPupSet',
|
set: 'lovingPupSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summerRogue: {
|
summerRogue: {
|
||||||
|
|
@ -1241,18 +1273,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2015Rogue: {
|
spring2015Rogue: {
|
||||||
set: 'sneakySqueakerSet',
|
set: 'sneakySqueakerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Warrior: {
|
spring2015Warrior: {
|
||||||
set: 'bewareDogSet',
|
set: 'bewareDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Mage: {
|
spring2015Mage: {
|
||||||
set: 'magicianBunnySet',
|
set: 'magicianBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Healer: {
|
spring2015Healer: {
|
||||||
set: 'comfortingKittySet',
|
set: 'comfortingKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2015Rogue: {
|
summer2015Rogue: {
|
||||||
|
|
@ -1317,18 +1353,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2016Rogue: {
|
spring2016Rogue: {
|
||||||
set: 'cleverDogSet',
|
set: 'cleverDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Warrior: {
|
spring2016Warrior: {
|
||||||
set: 'braveMouseSet',
|
set: 'braveMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Mage: {
|
spring2016Mage: {
|
||||||
set: 'grandMalkinSet',
|
set: 'grandMalkinSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Healer: {
|
spring2016Healer: {
|
||||||
set: 'springingBunnySet',
|
set: 'springingBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2016Rogue: {
|
summer2016Rogue: {
|
||||||
|
|
@ -1387,18 +1427,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2017Rogue: {
|
spring2017Rogue: {
|
||||||
set: 'spring2017SneakyBunnySet',
|
set: 'spring2017SneakyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Warrior: {
|
spring2017Warrior: {
|
||||||
set: 'spring2017FelineWarriorSet',
|
set: 'spring2017FelineWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Mage: {
|
spring2017Mage: {
|
||||||
set: 'spring2017CanineConjurorSet',
|
set: 'spring2017CanineConjurorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Healer: {
|
spring2017Healer: {
|
||||||
set: 'spring2017FloralMouseSet',
|
set: 'spring2017FloralMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2017Rogue: {
|
summer2017Rogue: {
|
||||||
|
|
@ -1463,18 +1507,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2018Rogue: {
|
spring2018Rogue: {
|
||||||
set: 'spring2018DucklingRogueSet',
|
set: 'spring2018DucklingRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Warrior: {
|
spring2018Warrior: {
|
||||||
set: 'spring2018SunriseWarriorSet',
|
set: 'spring2018SunriseWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Mage: {
|
spring2018Mage: {
|
||||||
set: 'spring2018TulipMageSet',
|
set: 'spring2018TulipMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Healer: {
|
spring2018Healer: {
|
||||||
set: 'spring2018GarnetHealerSet',
|
set: 'spring2018GarnetHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2018Rogue: {
|
summer2018Rogue: {
|
||||||
|
|
@ -1545,18 +1593,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2019Rogue: {
|
spring2019Rogue: {
|
||||||
set: 'spring2019CloudRogueSet',
|
set: 'spring2019CloudRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Warrior: {
|
spring2019Warrior: {
|
||||||
set: 'spring2019OrchidWarriorSet',
|
set: 'spring2019OrchidWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Mage: {
|
spring2019Mage: {
|
||||||
set: 'spring2019AmberMageSet',
|
set: 'spring2019AmberMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Healer: {
|
spring2019Healer: {
|
||||||
set: 'spring2019RobinHealerSet',
|
set: 'spring2019RobinHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2019Rogue: {
|
summer2019Rogue: {
|
||||||
|
|
@ -1622,18 +1674,22 @@ const head = {
|
||||||
},
|
},
|
||||||
spring2020Rogue: {
|
spring2020Rogue: {
|
||||||
set: 'spring2020LapisLazuliRogueSet',
|
set: 'spring2020LapisLazuliRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Warrior: {
|
spring2020Warrior: {
|
||||||
set: 'spring2020BeetleWarriorSet',
|
set: 'spring2020BeetleWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Mage: {
|
spring2020Mage: {
|
||||||
set: 'spring2020PuddleMageSet',
|
set: 'spring2020PuddleMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Healer: {
|
spring2020Healer: {
|
||||||
set: 'spring2020IrisHealerSet',
|
set: 'spring2020IrisHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2020Rogue: {
|
summer2020Rogue: {
|
||||||
|
|
@ -1720,75 +1776,75 @@ Object.keys(gearEvents).forEach(event => {
|
||||||
|
|
||||||
const headAccessory = {
|
const headAccessory = {
|
||||||
springRogue: {
|
springRogue: {
|
||||||
event: EVENTS.spring,
|
|
||||||
specialClass: 'rogue',
|
specialClass: 'rogue',
|
||||||
set: 'stealthyKittySet',
|
set: 'stealthyKittySet',
|
||||||
text: t('headAccessorySpecialSpringRogueText'),
|
text: t('headAccessorySpecialSpringRogueText'),
|
||||||
notes: t('headAccessorySpecialSpringRogueNotes'),
|
notes: t('headAccessorySpecialSpringRogueNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springWarrior: {
|
springWarrior: {
|
||||||
event: EVENTS.spring,
|
|
||||||
specialClass: 'warrior',
|
specialClass: 'warrior',
|
||||||
set: 'mightyBunnySet',
|
set: 'mightyBunnySet',
|
||||||
text: t('headAccessorySpecialSpringWarriorText'),
|
text: t('headAccessorySpecialSpringWarriorText'),
|
||||||
notes: t('headAccessorySpecialSpringWarriorNotes'),
|
notes: t('headAccessorySpecialSpringWarriorNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springMage: {
|
springMage: {
|
||||||
event: EVENTS.spring,
|
|
||||||
specialClass: 'wizard',
|
specialClass: 'wizard',
|
||||||
set: 'magicMouseSet',
|
set: 'magicMouseSet',
|
||||||
text: t('headAccessorySpecialSpringMageText'),
|
text: t('headAccessorySpecialSpringMageText'),
|
||||||
notes: t('headAccessorySpecialSpringMageNotes'),
|
notes: t('headAccessorySpecialSpringMageNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springHealer: {
|
springHealer: {
|
||||||
event: EVENTS.spring,
|
|
||||||
specialClass: 'healer',
|
specialClass: 'healer',
|
||||||
set: 'lovingPupSet',
|
set: 'lovingPupSet',
|
||||||
text: t('headAccessorySpecialSpringHealerText'),
|
text: t('headAccessorySpecialSpringHealerText'),
|
||||||
notes: t('headAccessorySpecialSpringHealerNotes'),
|
notes: t('headAccessorySpecialSpringHealerNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Rogue: {
|
spring2015Rogue: {
|
||||||
event: EVENTS.spring2015,
|
|
||||||
specialClass: 'rogue',
|
specialClass: 'rogue',
|
||||||
set: 'sneakySqueakerSet',
|
set: 'sneakySqueakerSet',
|
||||||
text: t('headAccessorySpecialSpring2015RogueText'),
|
text: t('headAccessorySpecialSpring2015RogueText'),
|
||||||
notes: t('headAccessorySpecialSpring2015RogueNotes'),
|
notes: t('headAccessorySpecialSpring2015RogueNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Warrior: {
|
spring2015Warrior: {
|
||||||
event: EVENTS.spring2015,
|
|
||||||
specialClass: 'warrior',
|
specialClass: 'warrior',
|
||||||
set: 'bewareDogSet',
|
set: 'bewareDogSet',
|
||||||
text: t('headAccessorySpecialSpring2015WarriorText'),
|
text: t('headAccessorySpecialSpring2015WarriorText'),
|
||||||
notes: t('headAccessorySpecialSpring2015WarriorNotes'),
|
notes: t('headAccessorySpecialSpring2015WarriorNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Mage: {
|
spring2015Mage: {
|
||||||
event: EVENTS.spring2015,
|
|
||||||
specialClass: 'wizard',
|
specialClass: 'wizard',
|
||||||
set: 'magicianBunnySet',
|
set: 'magicianBunnySet',
|
||||||
text: t('headAccessorySpecialSpring2015MageText'),
|
text: t('headAccessorySpecialSpring2015MageText'),
|
||||||
notes: t('headAccessorySpecialSpring2015MageNotes'),
|
notes: t('headAccessorySpecialSpring2015MageNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Healer: {
|
spring2015Healer: {
|
||||||
event: EVENTS.spring2015,
|
|
||||||
specialClass: 'healer',
|
specialClass: 'healer',
|
||||||
set: 'comfortingKittySet',
|
set: 'comfortingKittySet',
|
||||||
text: t('headAccessorySpecialSpring2015HealerText'),
|
text: t('headAccessorySpecialSpring2015HealerText'),
|
||||||
notes: t('headAccessorySpecialSpring2015HealerNotes'),
|
notes: t('headAccessorySpecialSpring2015HealerNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
bearEars: {
|
bearEars: {
|
||||||
|
|
@ -1856,75 +1912,75 @@ const headAccessory = {
|
||||||
canBuy: () => true,
|
canBuy: () => true,
|
||||||
},
|
},
|
||||||
spring2016Rogue: {
|
spring2016Rogue: {
|
||||||
event: EVENTS.spring2016,
|
|
||||||
specialClass: 'rogue',
|
specialClass: 'rogue',
|
||||||
set: 'cleverDogSet',
|
set: 'cleverDogSet',
|
||||||
text: t('headAccessorySpecialSpring2016RogueText'),
|
text: t('headAccessorySpecialSpring2016RogueText'),
|
||||||
notes: t('headAccessorySpecialSpring2016RogueNotes'),
|
notes: t('headAccessorySpecialSpring2016RogueNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Warrior: {
|
spring2016Warrior: {
|
||||||
event: EVENTS.spring2016,
|
|
||||||
specialClass: 'warrior',
|
specialClass: 'warrior',
|
||||||
set: 'braveMouseSet',
|
set: 'braveMouseSet',
|
||||||
text: t('headAccessorySpecialSpring2016WarriorText'),
|
text: t('headAccessorySpecialSpring2016WarriorText'),
|
||||||
notes: t('headAccessorySpecialSpring2016WarriorNotes'),
|
notes: t('headAccessorySpecialSpring2016WarriorNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Mage: {
|
spring2016Mage: {
|
||||||
event: EVENTS.spring2016,
|
|
||||||
specialClass: 'wizard',
|
specialClass: 'wizard',
|
||||||
set: 'grandMalkinSet',
|
set: 'grandMalkinSet',
|
||||||
text: t('headAccessorySpecialSpring2016MageText'),
|
text: t('headAccessorySpecialSpring2016MageText'),
|
||||||
notes: t('headAccessorySpecialSpring2016MageNotes'),
|
notes: t('headAccessorySpecialSpring2016MageNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Healer: {
|
spring2016Healer: {
|
||||||
event: EVENTS.spring2016,
|
|
||||||
specialClass: 'healer',
|
specialClass: 'healer',
|
||||||
set: 'springingBunnySet',
|
set: 'springingBunnySet',
|
||||||
text: t('headAccessorySpecialSpring2016HealerText'),
|
text: t('headAccessorySpecialSpring2016HealerText'),
|
||||||
notes: t('headAccessorySpecialSpring2016HealerNotes'),
|
notes: t('headAccessorySpecialSpring2016HealerNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Rogue: {
|
spring2017Rogue: {
|
||||||
event: EVENTS.spring2017,
|
|
||||||
specialClass: 'rogue',
|
specialClass: 'rogue',
|
||||||
set: 'spring2017SneakyBunnySet',
|
set: 'spring2017SneakyBunnySet',
|
||||||
text: t('headAccessorySpecialSpring2017RogueText'),
|
text: t('headAccessorySpecialSpring2017RogueText'),
|
||||||
notes: t('headAccessorySpecialSpring2017RogueNotes'),
|
notes: t('headAccessorySpecialSpring2017RogueNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Warrior: {
|
spring2017Warrior: {
|
||||||
event: EVENTS.spring2017,
|
|
||||||
specialClass: 'warrior',
|
specialClass: 'warrior',
|
||||||
set: 'spring2017FelineWarriorSet',
|
set: 'spring2017FelineWarriorSet',
|
||||||
text: t('headAccessorySpecialSpring2017WarriorText'),
|
text: t('headAccessorySpecialSpring2017WarriorText'),
|
||||||
notes: t('headAccessorySpecialSpring2017WarriorNotes'),
|
notes: t('headAccessorySpecialSpring2017WarriorNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Mage: {
|
spring2017Mage: {
|
||||||
event: EVENTS.spring2017,
|
|
||||||
specialClass: 'wizard',
|
specialClass: 'wizard',
|
||||||
set: 'spring2017CanineConjurorSet',
|
set: 'spring2017CanineConjurorSet',
|
||||||
text: t('headAccessorySpecialSpring2017MageText'),
|
text: t('headAccessorySpecialSpring2017MageText'),
|
||||||
notes: t('headAccessorySpecialSpring2017MageNotes'),
|
notes: t('headAccessorySpecialSpring2017MageNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Healer: {
|
spring2017Healer: {
|
||||||
event: EVENTS.spring2017,
|
|
||||||
specialClass: 'healer',
|
specialClass: 'healer',
|
||||||
set: 'spring2017FloralMouseSet',
|
set: 'spring2017FloralMouseSet',
|
||||||
text: t('headAccessorySpecialSpring2017HealerText'),
|
text: t('headAccessorySpecialSpring2017HealerText'),
|
||||||
notes: t('headAccessorySpecialSpring2017HealerNotes'),
|
notes: t('headAccessorySpecialSpring2017HealerNotes'),
|
||||||
value: 20,
|
value: 20,
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
blackHeadband: {
|
blackHeadband: {
|
||||||
|
|
@ -2071,14 +2127,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
springRogue: {
|
springRogue: {
|
||||||
set: 'stealthyKittySet',
|
set: 'stealthyKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springWarrior: {
|
springWarrior: {
|
||||||
set: 'mightyBunnySet',
|
set: 'mightyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springHealer: {
|
springHealer: {
|
||||||
set: 'lovingPupSet',
|
set: 'lovingPupSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summerRogue: {
|
summerRogue: {
|
||||||
|
|
@ -2119,14 +2178,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2015Rogue: {
|
spring2015Rogue: {
|
||||||
set: 'sneakySqueakerSet',
|
set: 'sneakySqueakerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Warrior: {
|
spring2015Warrior: {
|
||||||
set: 'bewareDogSet',
|
set: 'bewareDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Healer: {
|
spring2015Healer: {
|
||||||
set: 'comfortingKittySet',
|
set: 'comfortingKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2015Rogue: {
|
summer2015Rogue: {
|
||||||
|
|
@ -2167,14 +2229,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2016Rogue: {
|
spring2016Rogue: {
|
||||||
set: 'cleverDogSet',
|
set: 'cleverDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Warrior: {
|
spring2016Warrior: {
|
||||||
set: 'braveMouseSet',
|
set: 'braveMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Healer: {
|
spring2016Healer: {
|
||||||
set: 'springingBunnySet',
|
set: 'springingBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2016Rogue: {
|
summer2016Rogue: {
|
||||||
|
|
@ -2215,14 +2280,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2017Rogue: {
|
spring2017Rogue: {
|
||||||
set: 'spring2017SneakyBunnySet',
|
set: 'spring2017SneakyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Warrior: {
|
spring2017Warrior: {
|
||||||
set: 'spring2017FelineWarriorSet',
|
set: 'spring2017FelineWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Healer: {
|
spring2017Healer: {
|
||||||
set: 'spring2017FloralMouseSet',
|
set: 'spring2017FloralMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2017Rogue: {
|
summer2017Rogue: {
|
||||||
|
|
@ -2263,14 +2331,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2018Rogue: {
|
spring2018Rogue: {
|
||||||
set: 'spring2018DucklingRogueSet',
|
set: 'spring2018DucklingRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Warrior: {
|
spring2018Warrior: {
|
||||||
set: 'spring2018SunriseWarriorSet',
|
set: 'spring2018SunriseWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Healer: {
|
spring2018Healer: {
|
||||||
set: 'spring2018GarnetHealerSet',
|
set: 'spring2018GarnetHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2018Rogue: {
|
summer2018Rogue: {
|
||||||
|
|
@ -2319,14 +2390,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2019Rogue: {
|
spring2019Rogue: {
|
||||||
set: 'spring2019CloudRogueSet',
|
set: 'spring2019CloudRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Warrior: {
|
spring2019Warrior: {
|
||||||
set: 'spring2019OrchidWarriorSet',
|
set: 'spring2019OrchidWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Healer: {
|
spring2019Healer: {
|
||||||
set: 'spring2019RobinHealerSet',
|
set: 'spring2019RobinHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2019Rogue: {
|
summer2019Rogue: {
|
||||||
|
|
@ -2384,14 +2458,17 @@ const shield = {
|
||||||
},
|
},
|
||||||
spring2020Rogue: {
|
spring2020Rogue: {
|
||||||
set: 'spring2020LapisLazuliRogueSet',
|
set: 'spring2020LapisLazuliRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Warrior: {
|
spring2020Warrior: {
|
||||||
set: 'spring2020BeetleWarriorSet',
|
set: 'spring2020BeetleWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Healer: {
|
spring2020Healer: {
|
||||||
set: 'spring2020IrisHealerSet',
|
set: 'spring2020IrisHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2020Warrior: {
|
summer2020Warrior: {
|
||||||
|
|
@ -2604,18 +2681,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
springRogue: {
|
springRogue: {
|
||||||
set: 'stealthyKittySet',
|
set: 'stealthyKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springWarrior: {
|
springWarrior: {
|
||||||
set: 'mightyBunnySet',
|
set: 'mightyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springMage: {
|
springMage: {
|
||||||
set: 'magicMouseSet',
|
set: 'magicMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
springHealer: {
|
springHealer: {
|
||||||
set: 'lovingPupSet',
|
set: 'lovingPupSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summerRogue: {
|
summerRogue: {
|
||||||
|
|
@ -2668,18 +2749,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2015Rogue: {
|
spring2015Rogue: {
|
||||||
set: 'sneakySqueakerSet',
|
set: 'sneakySqueakerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Warrior: {
|
spring2015Warrior: {
|
||||||
set: 'bewareDogSet',
|
set: 'bewareDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Mage: {
|
spring2015Mage: {
|
||||||
set: 'magicianBunnySet',
|
set: 'magicianBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2015Healer: {
|
spring2015Healer: {
|
||||||
set: 'comfortingKittySet',
|
set: 'comfortingKittySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2015Rogue: {
|
summer2015Rogue: {
|
||||||
|
|
@ -2732,18 +2817,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2016Rogue: {
|
spring2016Rogue: {
|
||||||
set: 'cleverDogSet',
|
set: 'cleverDogSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Warrior: {
|
spring2016Warrior: {
|
||||||
set: 'braveMouseSet',
|
set: 'braveMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Mage: {
|
spring2016Mage: {
|
||||||
set: 'grandMalkinSet',
|
set: 'grandMalkinSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2016Healer: {
|
spring2016Healer: {
|
||||||
set: 'springingBunnySet',
|
set: 'springingBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2016Rogue: {
|
summer2016Rogue: {
|
||||||
|
|
@ -2796,18 +2885,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2017Rogue: {
|
spring2017Rogue: {
|
||||||
set: 'spring2017SneakyBunnySet',
|
set: 'spring2017SneakyBunnySet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Warrior: {
|
spring2017Warrior: {
|
||||||
set: 'spring2017FelineWarriorSet',
|
set: 'spring2017FelineWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Mage: {
|
spring2017Mage: {
|
||||||
set: 'spring2017CanineConjurorSet',
|
set: 'spring2017CanineConjurorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2017Healer: {
|
spring2017Healer: {
|
||||||
set: 'spring2017FloralMouseSet',
|
set: 'spring2017FloralMouseSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2017Rogue: {
|
summer2017Rogue: {
|
||||||
|
|
@ -2860,18 +2953,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2018Rogue: {
|
spring2018Rogue: {
|
||||||
set: 'spring2018DucklingRogueSet',
|
set: 'spring2018DucklingRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Warrior: {
|
spring2018Warrior: {
|
||||||
set: 'spring2018SunriseWarriorSet',
|
set: 'spring2018SunriseWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Mage: {
|
spring2018Mage: {
|
||||||
set: 'spring2018TulipMageSet',
|
set: 'spring2018TulipMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2018Healer: {
|
spring2018Healer: {
|
||||||
set: 'spring2018GarnetHealerSet',
|
set: 'spring2018GarnetHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2018Rogue: {
|
summer2018Rogue: {
|
||||||
|
|
@ -2924,18 +3021,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2019Rogue: {
|
spring2019Rogue: {
|
||||||
set: 'spring2019CloudRogueSet',
|
set: 'spring2019CloudRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Warrior: {
|
spring2019Warrior: {
|
||||||
set: 'spring2019OrchidWarriorSet',
|
set: 'spring2019OrchidWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Mage: {
|
spring2019Mage: {
|
||||||
set: 'spring2019AmberMageSet',
|
set: 'spring2019AmberMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2019Healer: {
|
spring2019Healer: {
|
||||||
set: 'spring2019RobinHealerSet',
|
set: 'spring2019RobinHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2019Rogue: {
|
summer2019Rogue: {
|
||||||
|
|
@ -3003,18 +3104,22 @@ const weapon = {
|
||||||
},
|
},
|
||||||
spring2020Rogue: {
|
spring2020Rogue: {
|
||||||
set: 'spring2020LapisLazuliRogueSet',
|
set: 'spring2020LapisLazuliRogueSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Warrior: {
|
spring2020Warrior: {
|
||||||
set: 'spring2020BeetleWarriorSet',
|
set: 'spring2020BeetleWarriorSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Mage: {
|
spring2020Mage: {
|
||||||
set: 'spring2020PuddleMageSet',
|
set: 'spring2020PuddleMageSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
spring2020Healer: {
|
spring2020Healer: {
|
||||||
set: 'spring2020IrisHealerSet',
|
set: 'spring2020IrisHealerSet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
|
||||||
},
|
},
|
||||||
summer2020Rogue: {
|
summer2020Rogue: {
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,7 @@ const premium = {
|
||||||
}),
|
}),
|
||||||
event: EVENTS.spring2021,
|
event: EVENTS.spring2021,
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBefore('2021-04-30T20:00-04:00');
|
return moment().isBefore(EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Glass: {
|
Glass: {
|
||||||
|
|
@ -353,7 +353,7 @@ const premium = {
|
||||||
previousDate: t('marchYYYY', { year: 2020 }),
|
previousDate: t('marchYYYY', { year: 2020 }),
|
||||||
}),
|
}),
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBefore('2021-04-30T20:00-04:00');
|
return moment().isBefore(EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fluorite: {
|
Fluorite: {
|
||||||
|
|
@ -440,7 +440,7 @@ const premium = {
|
||||||
date: t('dateEndMarch'),
|
date: t('dateEndMarch'),
|
||||||
}),
|
}),
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBefore('2021-04-30T20:00-04:00');
|
return moment().isBefore(EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -455,7 +455,7 @@ const wacky = {
|
||||||
previousDate: t('marchYYYY', { year: 2019 }),
|
previousDate: t('marchYYYY', { year: 2019 }),
|
||||||
}),
|
}),
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBetween('2021-04-01T08:00-05:00', '2021-04-30T20:00-05:00');
|
return moment().isBetween('2021-04-01T08:00-05:00', EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Dessert: {
|
Dessert: {
|
||||||
|
|
|
||||||
|
|
@ -518,8 +518,9 @@ const quests = {
|
||||||
completion: t('questEggHuntCompletion'),
|
completion: t('questEggHuntCompletion'),
|
||||||
value: 1,
|
value: 1,
|
||||||
category: 'pet',
|
category: 'pet',
|
||||||
|
event: EVENTS.spring2021,
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBefore('2021-04-30T20:00-05:00');
|
return moment().isBefore(EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
collect: {
|
collect: {
|
||||||
plainEgg: {
|
plainEgg: {
|
||||||
|
|
@ -3587,7 +3588,7 @@ const quests = {
|
||||||
category: 'hatchingPotion',
|
category: 'hatchingPotion',
|
||||||
event: EVENTS.spring2021,
|
event: EVENTS.spring2021,
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBetween('2021-04-01T08:00-05:00', '2021-04-30T20:00-05:00');
|
return moment().isBefore(EVENTS.spring2021.end);
|
||||||
},
|
},
|
||||||
boss: {
|
boss: {
|
||||||
name: t('questWaffleBoss'),
|
name: t('questWaffleBoss'),
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
import each from 'lodash/each';
|
import each from 'lodash/each';
|
||||||
|
import moment from 'moment';
|
||||||
import t from './translation';
|
import t from './translation';
|
||||||
import { NotAuthorized, BadRequest } from '../libs/errors';
|
import { NotAuthorized, BadRequest } from '../libs/errors';
|
||||||
import statsComputed from '../libs/statsComputed'; // eslint-disable-line import/no-cycle
|
import statsComputed from '../libs/statsComputed'; // eslint-disable-line import/no-cycle
|
||||||
import setDebuffPotionItems from '../libs/setDebuffPotionItems'; // eslint-disable-line import/no-cycle
|
import setDebuffPotionItems from '../libs/setDebuffPotionItems'; // eslint-disable-line import/no-cycle
|
||||||
import crit from '../fns/crit'; // eslint-disable-line import/no-cycle
|
import crit from '../fns/crit'; // eslint-disable-line import/no-cycle
|
||||||
import updateStats from '../fns/updateStats';
|
import updateStats from '../fns/updateStats';
|
||||||
|
import { EVENTS } from './constants';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
|
|
@ -286,6 +288,9 @@ spells.special = {
|
||||||
previousPurchase: true,
|
previousPurchase: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('spellSpecialSnowballAuraNotes'),
|
notes: t('spellSpecialSnowballAuraNotes'),
|
||||||
|
canOwn () {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
cast (user, target, req) {
|
cast (user, target, req) {
|
||||||
if (!user.items.special.snowball) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
if (!user.items.special.snowball) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
||||||
target.stats.buffs.snowball = true;
|
target.stats.buffs.snowball = true;
|
||||||
|
|
@ -319,6 +324,9 @@ spells.special = {
|
||||||
previousPurchase: true,
|
previousPurchase: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('spellSpecialSpookySparklesNotes'),
|
notes: t('spellSpecialSpookySparklesNotes'),
|
||||||
|
canOwn () {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
cast (user, target, req) {
|
cast (user, target, req) {
|
||||||
if (!user.items.special.spookySparkles) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
if (!user.items.special.spookySparkles) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
||||||
target.stats.buffs.snowball = false;
|
target.stats.buffs.snowball = false;
|
||||||
|
|
@ -352,6 +360,10 @@ spells.special = {
|
||||||
previousPurchase: true,
|
previousPurchase: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('spellSpecialShinySeedNotes'),
|
notes: t('spellSpecialShinySeedNotes'),
|
||||||
|
event: EVENTS.spring2021,
|
||||||
|
canOwn () {
|
||||||
|
return moment().isBetween('2021-04-06T08:00-05:00', EVENTS.spring2021.end);
|
||||||
|
},
|
||||||
cast (user, target, req) {
|
cast (user, target, req) {
|
||||||
if (!user.items.special.shinySeed) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
if (!user.items.special.shinySeed) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
||||||
target.stats.buffs.snowball = false;
|
target.stats.buffs.snowball = false;
|
||||||
|
|
@ -385,6 +397,9 @@ spells.special = {
|
||||||
previousPurchase: true,
|
previousPurchase: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('spellSpecialSeafoamNotes'),
|
notes: t('spellSpecialSeafoamNotes'),
|
||||||
|
canOwn () {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
cast (user, target, req) {
|
cast (user, target, req) {
|
||||||
if (!user.items.special.seafoam) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
if (!user.items.special.seafoam) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
||||||
target.stats.buffs.snowball = false;
|
target.stats.buffs.snowball = false;
|
||||||
|
|
@ -419,6 +434,9 @@ spells.special = {
|
||||||
silent: true,
|
silent: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('nyeCardNotes'),
|
notes: t('nyeCardNotes'),
|
||||||
|
canOwn () {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
cast (user, target) {
|
cast (user, target) {
|
||||||
if (user === target) {
|
if (user === target) {
|
||||||
if (!user.achievements.nye) user.achievements.nye = 0;
|
if (!user.achievements.nye) user.achievements.nye = 0;
|
||||||
|
|
@ -456,6 +474,9 @@ spells.special = {
|
||||||
silent: true,
|
silent: true,
|
||||||
target: 'user',
|
target: 'user',
|
||||||
notes: t('valentineCardNotes'),
|
notes: t('valentineCardNotes'),
|
||||||
|
canOwn () {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
cast (user, target) {
|
cast (user, target) {
|
||||||
if (user === target) {
|
if (user === target) {
|
||||||
if (!user.achievements.valentine) user.achievements.valentine = 0;
|
if (!user.achievements.valentine) user.achievements.valentine = 0;
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,7 @@ export default function getItemInfo (user, type, item, officialPinnedItems, lang
|
||||||
class: `inventory_special_${item.key}`,
|
class: `inventory_special_${item.key}`,
|
||||||
path: `spells.special.${item.key}`,
|
path: `spells.special.${item.key}`,
|
||||||
pinType: 'seasonalSpell',
|
pinType: 'seasonalSpell',
|
||||||
|
event: item.event,
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'debuffPotion':
|
case 'debuffPotion':
|
||||||
|
|
@ -215,6 +216,7 @@ export default function getItemInfo (user, type, item, officialPinnedItems, lang
|
||||||
purchaseType: 'quests',
|
purchaseType: 'quests',
|
||||||
path: `quests.${item.key}`,
|
path: `quests.${item.key}`,
|
||||||
pinType: 'seasonalQuest',
|
pinType: 'seasonalQuest',
|
||||||
|
event: item.event,
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'gear':
|
case 'gear':
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ export default {
|
||||||
currentSeason: SHOP_OPEN ? upperFirst(CURRENT_EVENT.season) : 'Closed',
|
currentSeason: SHOP_OPEN ? upperFirst(CURRENT_EVENT.season) : 'Closed',
|
||||||
|
|
||||||
dateRange: {
|
dateRange: {
|
||||||
start: SHOP_OPEN ? moment(CURRENT_EVENT.start).format('YYYY-MM-DD') : moment().subtract(1, 'days').toDate(),
|
start: SHOP_OPEN ? moment(CURRENT_EVENT.start) : moment().subtract(1, 'days').toDate(),
|
||||||
end: SHOP_OPEN ? moment(CURRENT_EVENT.end).format('YYYY-MM-DD') : moment().subtract(1, 'seconds').toDate(),
|
end: SHOP_OPEN ? moment(CURRENT_EVENT.end) : moment().subtract(1, 'seconds').toDate(),
|
||||||
},
|
},
|
||||||
|
|
||||||
availableSets: SHOP_OPEN
|
availableSets: SHOP_OPEN
|
||||||
|
|
@ -37,7 +37,7 @@ export default {
|
||||||
}
|
}
|
||||||
: {},
|
: {},
|
||||||
|
|
||||||
availableSpells: moment().isBetween('2021-04-06T08:00-05:00', '2021-04-30T20:00-05:00')
|
availableSpells: SHOP_OPEN && moment().isAfter('2021-04-06T08:00-05:00')
|
||||||
? [
|
? [
|
||||||
'shinySeed',
|
'shinySeed',
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,7 @@ shops.getMarketGearCategories = function getMarketGear (user, language) {
|
||||||
if (
|
if (
|
||||||
gearItem.specialClass === classType
|
gearItem.specialClass === classType
|
||||||
&& user.items.gear.owned[gearItem.key] !== false
|
&& user.items.gear.owned[gearItem.key] !== false
|
||||||
|
&& gearItem.set === seasonalShopConfig.pinnedSets[gearItem.specialClass]
|
||||||
) return gearItem.canOwn(classShift);
|
) return gearItem.canOwn(classShift);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,8 @@ function _formatUserData (user) {
|
||||||
|
|
||||||
if (user.purchased && user.purchased.plan.planId) {
|
if (user.purchased && user.purchased.plan.planId) {
|
||||||
properties.subscription = user.purchased.plan.planId;
|
properties.subscription = user.purchased.plan.planId;
|
||||||
|
} else {
|
||||||
|
properties.subscription = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user._ABtests) {
|
if (user._ABtests) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue