mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-05-18 11:48:52 +00:00
Merge branch '2023-winner-funderlamb' into release
by @CuriousMagpie
This commit is contained in:
parent
19253cd9b5
commit
8a45f753ca
15 changed files with 442 additions and 49 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 60b9a912a2b2b5b5ed3ee7ebf768be0487da21cb
|
||||
Subproject commit 7a26306dc9ba92d7f5382794f7c5bba919437622
|
||||
87
migrations/archive/2023/20231228_nye.js
Normal file
87
migrations/archive/2023/20231228_nye.js
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20231228_nye';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = { migration: MIGRATION_NAME };
|
||||
let push = {};
|
||||
|
||||
if (typeof user.items.gear.owned.head_special_nye2022 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2023'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2021 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2022'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2020 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2021'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2019 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2020'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2018 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2019'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2017 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2018'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2017'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2016'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2015'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2014'] = true;
|
||||
} else {
|
||||
set['items.gear.owned.head_special_nye'] = true;
|
||||
}
|
||||
|
||||
push.notifications = {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_head_special_nye',
|
||||
title: 'Happy New Year!',
|
||||
text: 'Check your Equipment for this year\'s party hat!',
|
||||
destination: 'inventory/equipment',
|
||||
},
|
||||
seen: false,
|
||||
};
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.updateOne({_id: user._id}, {$set: set, $push: push}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2023-12-01') },
|
||||
migration: { $ne: MIGRATION_NAME },
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
|
|
@ -33000,6 +33000,26 @@
|
|||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.broad_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_yeti.png');
|
||||
width: 90px;
|
||||
|
|
@ -33060,6 +33080,11 @@
|
|||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_nye2023 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_nye2023.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_ski {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_ski.png');
|
||||
width: 90px;
|
||||
|
|
@ -33250,6 +33275,26 @@
|
|||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.head_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_yeti.png');
|
||||
width: 90px;
|
||||
|
|
@ -33400,6 +33445,21 @@
|
|||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.shield_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_yeti.png');
|
||||
width: 90px;
|
||||
|
|
@ -33600,6 +33660,26 @@
|
|||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_yeti.png');
|
||||
width: 68px;
|
||||
|
|
@ -33660,6 +33740,11 @@
|
|||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_nye2023 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_nye2023.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_ski {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_ski.png');
|
||||
width: 68px;
|
||||
|
|
@ -33850,6 +33935,26 @@
|
|||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_yeti.png');
|
||||
width: 68px;
|
||||
|
|
@ -34000,6 +34105,21 @@
|
|||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_yeti.png');
|
||||
width: 68px;
|
||||
|
|
@ -34200,6 +34320,26 @@
|
|||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_yeti.png');
|
||||
width: 68px;
|
||||
|
|
@ -34400,6 +34540,26 @@
|
|||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.slim_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_yeti.png');
|
||||
width: 90px;
|
||||
|
|
@ -34600,6 +34760,26 @@
|
|||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.weapon_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_yeti.png');
|
||||
width: 90px;
|
||||
|
|
|
|||
|
|
@ -495,6 +495,15 @@
|
|||
"weaponSpecialFall2023HealerText": "Log Great Hammer",
|
||||
"weaponSpecialFall2023HealerNotes": "With slow, heavy attacks, this gnarled hammer deals out healing blows instead of damage. Increases Intelligence by <%= int %>. Limited Edition 2023 Fall Gear.",
|
||||
|
||||
"weaponSpecialWinter2024RogueText": "Snowy Owl Bracer",
|
||||
"weaponSpecialWinter2024RogueNotes": "You are equipped with a flurry of feathers and talons! Hoot! Increases Strength by <%= str %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"weaponSpecialWinter2024WarriorText": "Candy Club",
|
||||
"weaponSpecialWinter2024WarriorNotes": "A fine weapon, so long as you can stop yourself from eating it. Increases Strength by <%= str %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"weaponSpecialWinter2024MageText": "Narwhal Wand",
|
||||
"weaponSpecialWinter2024MageNotes": "Thanks to a generous, magical narwhal that sensed your great abilities, you have been gifted a tusk that lets you sense changes happening around you. Increases Intelligence by <%= int %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"weaponSpecialWinter2024HealerText": "Torch",
|
||||
"weaponSpecialWinter2024HealerNotes": "Melt yourself out of this jam in no time! Increases Intelligence by <%= int %>. Limited Edition Winter 2023-2024 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",
|
||||
|
|
@ -1202,6 +1211,15 @@
|
|||
"armorSpecialFall2023HealerText": "Bog Creature Body",
|
||||
"armorSpecialFall2023HealerNotes": "With moss, rock, wood, and bog water merged into one, this outfit is sometimes tough and sometimes spongey (but always intimidating). Increases Constitution by <%= con %>. Limited Edition 2023 Fall Gear.",
|
||||
|
||||
"armorSpecialWinter2024RogueText": "Snowy Owl Robes",
|
||||
"armorSpecialWinter2024RogueNotes": "Whooooo will you be when wearing this robe? Covered in feathers and fluff, you will be both warm and stealthy! Increases Perception by <%= per %>. Limited Edition 2023-2024 Winter Gear.",
|
||||
"armorSpecialWinter2024WarriorText": "Peppermint Bark Armor",
|
||||
"armorSpecialWinter2024WarriorNotes": "Turns out chocolate, mint, and frosting are stronger materials than you’d think. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter Gear.",
|
||||
"armorSpecialWinter2024MageText": "Narwhal Wizard Robes",
|
||||
"armorSpecialWinter2024MageNotes": "Both practical and pretty, these robes will keep you toasty as you perform your magical abilities out in the cold. Increases Intelligence by <%= int %>. Limited Edition 2023-2024 Winter Gear.",
|
||||
"armorSpecialWinter2024HealerText": "Frozen Armor",
|
||||
"armorSpecialWinter2024HealerNotes": "This sparkling block of magic ice is at least protective while you figure out your escape. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter 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",
|
||||
|
|
@ -1992,6 +2010,18 @@
|
|||
"headSpecialFall2023HealerText": "Bog Creature Mask",
|
||||
"headSpecialFall2023HealerNotes": "With eyes as dark as the bog it emerged from, it fixes its gaze upon enemies. Increases Intelligence by <%= int %>. Limited Edition 2023 Fall Gear.",
|
||||
|
||||
"headSpecialNye2023Text": "Ludicrous Party Hat",
|
||||
"headSpecialNye2023Notes": "You've received a Ludicrous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
|
||||
|
||||
"headSpecialWinter2024RogueText": "Snowy Owl Hood",
|
||||
"headSpecialWinter2024RogueNotes": "Whooooo will you see when wearing this hood? Well, who WON’T you see? You will capture every movement, every gesture, every detail around you. Increases Perception by <%= per %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"headSpecialWinter2024WarriorText": "Peppermint Bark Helm",
|
||||
"headSpecialWinter2024WarriorNotes": "Never has protecting your noggin been so festively delicious! Increases Strength by <%= str %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"headSpecialWinter2024MageText": "Narwhal Wizard Hood",
|
||||
"headSpecialWinter2024MageNotes": "This fleece-lined hood will protect you from the cold as well as from negative thoughts and vibes. Increases Perception by <%= per %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"headSpecialWinter2024HealerText": "Frozen Helm",
|
||||
"headSpecialWinter2024HealerNotes": "Uh oh, a spell gone wrong has trapped you in ice! Increases Intelligence by <%= int %>. Limited Edition Winter 2023-2024 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.",
|
||||
|
||||
|
|
@ -2603,6 +2633,11 @@
|
|||
"shieldSpecialFall2023HealerText": "Mossy Rock",
|
||||
"shieldSpecialFall2023HealerNotes": "With a firm base and a soft top, this is perfect to hurl at enemies or to sit upon when you need a rest from your adventures. Increases Constitution by <%= con %>. Limited Edition 2023 Fall Gear.",
|
||||
|
||||
"shieldSpecialWinter2024WarriorText": "Cookie Shield",
|
||||
"shieldSpecialWinter2024WarriorNotes": "You’re a tough cookie who will never crumble! Increases Constitution by <%= con %>. Limited Edition Winter 2023-2024 Gear.",
|
||||
"shieldSpecialWinter2024HealerText": "Salt Shaker",
|
||||
"shieldSpecialWinter2024HealerNotes": "How convenient that you had ice-melting materials handy when you froze! Increases Constitution by <%= con %>. Limited Edition Winter 2023-2024 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",
|
||||
|
|
|
|||
|
|
@ -207,8 +207,12 @@
|
|||
"fall2023ScarletWarlockMageSet": "Scarlet Warlock (Mage)",
|
||||
"fall2023WitchsBrewRogueSet": "Witch's Brew (Rogue)",
|
||||
"fall2023BogCreatureHealerSet": "Bog Creature (Healer)",
|
||||
"winter2024SnowyOwlRogueSet": "Snowy Owl (Rogue)",
|
||||
"winter2024FrozenHealerSet": "Frozen (Healer)",
|
||||
"winter2024PeppermintBarkWarriorSet": "Peppermint Bark Set (Warrior)",
|
||||
"winter2024NarwhalWizardMageSet": "Narwhal Wizard Set (Mage)",
|
||||
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
|
||||
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
|
||||
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>.",
|
||||
"dateEndJanuary": "January 31",
|
||||
"dateEndFebruary": "February 28",
|
||||
"dateEndMarch": "March 31",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ export default prefill({
|
|||
setPrice: 5, availableFrom: '2023-10-03T08:00-04:00', availableUntil: EVENTS.fall2023.end, text: t('hauntedColors'),
|
||||
},
|
||||
winteryHairColors: {
|
||||
setPrice: 5, availableFrom: '2023-01-17T08:00-05:00', availableUntil: EVENTS.winter2023.end, text: t('winteryColors'),
|
||||
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winteryColors'), // 2024-01-16
|
||||
},
|
||||
rainbowSkins: { setPrice: 5, text: t('rainbowSkins') },
|
||||
animalSkins: { setPrice: 5, text: t('animalSkins') },
|
||||
|
|
@ -33,6 +33,6 @@ export default prefill({
|
|||
setPrice: 5, availableFrom: '2023-07-11T08:00-05:00', availableUntil: EVENTS.summer2023.end, text: t('splashySkins'),
|
||||
},
|
||||
winterySkins: {
|
||||
setPrice: 5, availableFrom: '2023-01-17T08:00-05:00', availableUntil: EVENTS.winter2023.end, text: t('winterySkins'),
|
||||
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winterySkins'), // 2024-01-16
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -78,16 +78,16 @@ const bundles = {
|
|||
winterQuests: {
|
||||
key: 'winterQuests',
|
||||
text: t('winterQuestsText'),
|
||||
notes: t('winterQuestsNotes', { date: moment(EVENTS.winter2023.end).format('LL') }),
|
||||
notes: t('winterQuestsNotes', { date: moment(EVENTS.winter2024.end).format('LL') }),
|
||||
addlNotes: t('evilSantaAddlNotes'),
|
||||
bundleKeys: [
|
||||
'evilsanta',
|
||||
'evilsanta2',
|
||||
'penguin',
|
||||
],
|
||||
event: EVENTS.winter2023,
|
||||
event: EVENTS.winter2024,
|
||||
canBuy () {
|
||||
return moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end);
|
||||
return moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end);
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
|
|
|
|||
|
|
@ -10,11 +10,29 @@ const gemsPromo = {
|
|||
|
||||
export const EVENTS = {
|
||||
noEvent: {
|
||||
start: '2023-12-01T00:00-05:00',
|
||||
end: '2023-12-21T08:00-05:00',
|
||||
start: '2024-02-01T00:00-05:00',
|
||||
end: '2024-03-20T08:00-05:00',
|
||||
season: 'normal',
|
||||
npcImageSuffix: '',
|
||||
},
|
||||
nye2023: {
|
||||
start: '2023-12-28T08:00-05:00',
|
||||
end: '2024-01-04T23:59-05:00',
|
||||
season: 'nye',
|
||||
npcImageSuffix: '_nye',
|
||||
},
|
||||
winter2024: {
|
||||
start: '2023-12-19T08:00-05:00',
|
||||
end: '2024-01-31T23:59-05:00',
|
||||
npcImageSuffix: '_winter',
|
||||
season: 'winter',
|
||||
gear: true,
|
||||
},
|
||||
g1g12023: {
|
||||
start: '2023-12-18T08:00-05:00',
|
||||
end: '2024-01-09T23:59-05:00',
|
||||
promo: 'g1g1',
|
||||
},
|
||||
potions202311: {
|
||||
start: '2023-11-14T08:00-04:00',
|
||||
end: '2023-11-30T23:59-04:00',
|
||||
|
|
|
|||
|
|
@ -53,6 +53,10 @@ const SEASONAL_SETS = {
|
|||
'winter2023FairyLightsMageSet',
|
||||
'winter2023CardinalHealerSet',
|
||||
|
||||
'winter2024SnowyOwlRogueSet',
|
||||
'winter2024PeppermintBarkWarriorSet',
|
||||
'winter2024NarwhalWizardMageSet',
|
||||
'winter2024FrozenHealerSet',
|
||||
],
|
||||
spring: [
|
||||
// spring 2014
|
||||
|
|
|
|||
|
|
@ -844,15 +844,31 @@ const armor = {
|
|||
},
|
||||
fall2023Warrior: {
|
||||
set: 'fall2023ScaryMovieWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Healer: {
|
||||
set: 'fall2023BogCreatureHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Mage: {
|
||||
set: 'fall2023ScarletWarlockMageSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Rogue: {
|
||||
set: 'fall2023WitchsBrewRogueSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
winter2024Warrior: {
|
||||
set: 'winter2024PeppermintBarkWarriorSet',
|
||||
},
|
||||
winter2024Mage: {
|
||||
set: 'winter2024NarwhalWizardMageSet',
|
||||
},
|
||||
winter2024Healer: {
|
||||
set: 'winter2024FrozenHealerSet',
|
||||
},
|
||||
winter2024Rogue: {
|
||||
set: 'winter2024SnowyOwlRogueSet',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -2051,15 +2067,37 @@ const head = {
|
|||
},
|
||||
fall2023Healer: {
|
||||
set: 'fall2023BogCreatureHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Mage: {
|
||||
set: 'fall2023ScarletWarlockMageSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Rogue: {
|
||||
set: 'fall2023WitchsBrewRogueSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Warrior: {
|
||||
set: 'fall2023ScaryMovieWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
winter2024Healer: {
|
||||
set: 'winter2024FrozenHealerSet',
|
||||
},
|
||||
winter2024Rogue: {
|
||||
set: 'winter2024SnowyOwlRogueSet',
|
||||
},
|
||||
winter2024Warrior: {
|
||||
set: 'winter2024PeppermintBarkWarriorSet',
|
||||
},
|
||||
winter2024Mage: {
|
||||
set: 'winter2024NarwhalWizardMageSet',
|
||||
},
|
||||
nye2023: {
|
||||
text: t('headSpecialNye2023Text'),
|
||||
notes: t('headSpecialNye2023Notes'),
|
||||
value: 0,
|
||||
canOwn: ownsItem('head_special_nye2023'),
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -2893,26 +2931,38 @@ const shield = {
|
|||
},
|
||||
summer2023Rogue: {
|
||||
set: 'summer2023GuppyRogueSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
summer2023Warrior: {
|
||||
set: 'summer2023GoldfishWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
summer2023Healer: {
|
||||
set: 'summer2023KelpHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
fall2023Rogue: {
|
||||
set: 'fall2023WitchsBrewRogueSet',
|
||||
text: t('shieldSpecialFall2023RogueText'),
|
||||
notes: t('shieldSpecialFall2023RogueNotes', { str: 8 }),
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Warrior: {
|
||||
set: 'fall2023ScaryMovieWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Healer: {
|
||||
set: 'fall2023BogCreatureHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
winter2024Warrior: {
|
||||
set: 'winter2024PeppermintBarkWarriorSet',
|
||||
},
|
||||
winter2024Rogue: {
|
||||
set: 'winter2024SnowyOwlRogueSet',
|
||||
},
|
||||
winter2024Healer: {
|
||||
set: 'winter2024FrozenHealerSet',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -3688,31 +3738,47 @@ const weapon = {
|
|||
},
|
||||
summer2023Rogue: {
|
||||
set: 'summer2023GuppyRogueSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
summer2023Warrior: {
|
||||
set: 'summer2023GoldfishWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
summer2023Mage: {
|
||||
set: 'summer2023CoralMageSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
summer2023Healer: {
|
||||
set: 'summer2023KelpHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
|
||||
},
|
||||
fall2023Rogue: {
|
||||
set: 'fall2023WitchsBrewRogueSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Healer: {
|
||||
set: 'fall2023BogCreatureHealerSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Warrior: {
|
||||
set: 'fall2023ScaryMovieWarriorSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
fall2023Mage: {
|
||||
set: 'fall2023ScarletWarlockMageSet',
|
||||
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
|
||||
},
|
||||
winter2024Rogue: {
|
||||
set: 'winter2024SnowyOwlRogueSet',
|
||||
},
|
||||
winter2024Healer: {
|
||||
set: 'winter2024FrozenHealerSet',
|
||||
},
|
||||
winter2024Warrior: {
|
||||
set: 'winter2024PeppermintBarkWarriorSet',
|
||||
},
|
||||
winter2024Mage: {
|
||||
set: 'winter2024NarwhalWizardMageSet',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -193,12 +193,12 @@ const premium = {
|
|||
text: t('hatchingPotionPeppermint'),
|
||||
limited: true,
|
||||
_addlNotes: t('eventAvailabilityReturning', {
|
||||
availableDate: t('dateStartFebruary'),
|
||||
availableDate: t('dateEndJanuary'),
|
||||
previousDate: t('januaryYYYY', { year: 2022 }),
|
||||
}),
|
||||
event: EVENTS.birthday10,
|
||||
event: EVENTS.winter2024,
|
||||
canBuy () {
|
||||
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
|
||||
return moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end);
|
||||
},
|
||||
},
|
||||
StarryNight: {
|
||||
|
|
@ -270,13 +270,13 @@ const premium = {
|
|||
value: 2,
|
||||
text: t('hatchingPotionIcySnow'),
|
||||
limited: true,
|
||||
event: EVENTS.winter2024,
|
||||
_addlNotes: t('eventAvailabilityReturning', {
|
||||
availableDate: t('dateEndJanuary'),
|
||||
previousDate: t('decemberYYYY', { year: 2018 }),
|
||||
previousDate: t('novemberYYYY', { year: 2022 }),
|
||||
}),
|
||||
event: EVENTS.winter2021,
|
||||
canBuy () {
|
||||
return moment().isBetween('2020-12-22T08:00-04:00', '2021-01-31T20:00-04:00');
|
||||
return moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end);
|
||||
},
|
||||
},
|
||||
RoseQuartz: {
|
||||
|
|
@ -470,12 +470,11 @@ const premium = {
|
|||
text: t('hatchingPotionStainedGlass'),
|
||||
limited: true,
|
||||
_addlNotes: t('eventAvailabilityReturning', {
|
||||
availableDate: t('dateStartFebruary'),
|
||||
previousDate: t('januaryYYYY', { year: 2022 }),
|
||||
availableDate: t('dateEndJanuary'),
|
||||
}),
|
||||
event: EVENTS.birthday10,
|
||||
event: EVENTS.winter2024,
|
||||
canBuy () {
|
||||
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
|
||||
return moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end);
|
||||
},
|
||||
},
|
||||
PolkaDot: {
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ api.cardTypes = {
|
|||
nye: {
|
||||
key: 'nye',
|
||||
messageOptions: 5,
|
||||
yearRound: moment().isBefore('2023-01-02T20:00-05:00'),
|
||||
yearRound: moment().isBetween(EVENTS.nye2023.start, EVENTS.nye2023.end),
|
||||
},
|
||||
thankyou: {
|
||||
key: 'thankyou',
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { EVENTS } from './constants';
|
|||
// path: 'premiumHatchingPotions.Rainbow',
|
||||
const featuredItems = {
|
||||
market () {
|
||||
if (moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end)) {
|
||||
if (moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end)) {
|
||||
return [
|
||||
{
|
||||
type: 'armoire',
|
||||
|
|
@ -13,15 +13,15 @@ const featuredItems = {
|
|||
},
|
||||
{
|
||||
type: 'premiumHatchingPotion',
|
||||
path: 'premiumHatchingPotions.AutumnLeaf',
|
||||
path: 'premiumHatchingPotions.StainedGlass',
|
||||
},
|
||||
{
|
||||
type: 'premiumHatchingPotion',
|
||||
path: 'premiumHatchingPotions.Ember',
|
||||
path: 'premiumHatchingPotions.Peppermint',
|
||||
},
|
||||
{
|
||||
type: 'premiumHatchingPotion',
|
||||
path: 'premiumHatchingPotions.Frost',
|
||||
path: 'premiumHatchingPotions.IcySnow',
|
||||
},
|
||||
];
|
||||
}
|
||||
|
|
@ -32,32 +32,32 @@ const featuredItems = {
|
|||
},
|
||||
{
|
||||
type: 'food',
|
||||
path: 'food.RottenMeat',
|
||||
path: 'food.Honey',
|
||||
},
|
||||
{
|
||||
type: 'hatchingPotions',
|
||||
path: 'hatchingPotions.Zombie',
|
||||
path: 'hatchingPotions.Golden',
|
||||
},
|
||||
{
|
||||
type: 'eggs',
|
||||
path: 'eggs.Cactus',
|
||||
path: 'eggs.BearCub',
|
||||
},
|
||||
];
|
||||
},
|
||||
quests () {
|
||||
if (moment().isBetween(EVENTS.bundle202311.start, EVENTS.bundle202311.end)) {
|
||||
if (moment().isBetween(EVENTS.winter2024.start, EVENTS.winter2024.end)) {
|
||||
return [
|
||||
{
|
||||
type: 'bundles',
|
||||
path: 'bundles.oddballs',
|
||||
path: 'bundles.winterQuests',
|
||||
},
|
||||
{
|
||||
type: 'quests',
|
||||
path: 'quests.gryphon',
|
||||
path: 'quests.ghost_stag',
|
||||
},
|
||||
{
|
||||
type: 'quests',
|
||||
path: 'quests.armadillo',
|
||||
path: 'quests.penguin',
|
||||
},
|
||||
];
|
||||
}
|
||||
|
|
@ -77,7 +77,7 @@ const featuredItems = {
|
|||
},
|
||||
];
|
||||
},
|
||||
seasonal: 'fall2017TrickOrTreatSet',
|
||||
seasonal: 'winter2021WinterMoonMageSet',
|
||||
timeTravelers: [
|
||||
// TODO
|
||||
],
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ spells.special = {
|
|||
target: 'user',
|
||||
notes: t('spellSpecialSnowballAuraNotes'),
|
||||
canOwn () {
|
||||
return moment().isBetween('2022-12-27T08:00-05:00', EVENTS.winter2023.end);
|
||||
return moment().isBetween('2024-01-09T08:00-05:00', EVENTS.winter2024.end);
|
||||
},
|
||||
cast (user, target, req) {
|
||||
if (!user.items.special.snowball) throw new NotAuthorized(t('spellNotOwned')(req.language));
|
||||
|
|
@ -423,7 +423,7 @@ spells.special = {
|
|||
target: 'user',
|
||||
notes: t('nyeCardNotes'),
|
||||
canOwn () {
|
||||
return moment().isBetween('2022-12-28T08:00-05:00', '2023-01-02T20:00-05:00');
|
||||
return moment().isBetween(EVENTS.nye2023.start, EVENTS.nye2023.end);
|
||||
},
|
||||
cast (user, target) {
|
||||
if (user === target) {
|
||||
|
|
|
|||
|
|
@ -29,22 +29,22 @@ export default {
|
|||
|
||||
pinnedSets: CURRENT_EVENT
|
||||
? {
|
||||
rogue: 'fall2023WitchsBrewRogueSet',
|
||||
warrior: 'fall2023ScaryMovieWarriorSet',
|
||||
wizard: 'fall2023ScarletWarlockMageSet',
|
||||
healer: 'fall2023BogCreatureHealerSet',
|
||||
rogue: 'winter2024SnowyOwlRogueSet',
|
||||
warrior: 'winter2024PeppermintBarkWarriorSet',
|
||||
wizard: 'winter2024NarwhalWizardMageSet',
|
||||
healer: 'winter2024FrozenHealerSet',
|
||||
}
|
||||
: {},
|
||||
|
||||
availableSpells: CURRENT_EVENT && moment().isBetween('2023-10-03T08:00-04:00', CURRENT_EVENT.end)
|
||||
availableSpells: CURRENT_EVENT && moment().isBetween('2023-01-09T08:00-04:00', CURRENT_EVENT.end)
|
||||
? [
|
||||
'spookySparkles',
|
||||
'snowball',
|
||||
]
|
||||
: [],
|
||||
|
||||
availableQuests: CURRENT_EVENT && moment().isBetween('2023-07-11T08:00-04:00', CURRENT_EVENT.end)
|
||||
availableQuests: CURRENT_EVENT && moment().isBetween('2023-01-09T08:00-04:00', CURRENT_EVENT.end) // 2024-01-09
|
||||
? []
|
||||
: [],
|
||||
|
||||
featuredSet: 'fall2022HarpyMageSet',
|
||||
featuredSet: 'winter2019PoinsettiaSet',
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue