Squashed commit of the following:

commit 5b2f90356bd5630272ebabefb763f100926288c8
Author: SabreCat <sabrecat@gmail.com>
Date:   Fri Dec 15 16:19:02 2023 -0600

    fix(migration): full URL

commit a2962c0d106ce84d06a6478c1babacb1b776cc6f
Author: SabreCat <sabrecat@gmail.com>
Date:   Fri Dec 15 15:57:21 2023 -0600

    feat(migration): add birthday notif

commit 9da8e39dd03932cd9d4269ff7f6823856fa97798
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Fri Dec 15 12:32:25 2023 -0500

    feat(script): awards 2024 Habitica birthday robes

commit 7de6b80ee6fe59d708ba38b0e0aff8269b5b2f58
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Thu Dec 14 13:11:07 2023 -0500

    feat(content): add Habitica birthday item

commit 1bb95f58679425fbb323ccfae1fe0a823d120a70
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Thu Dec 14 11:43:12 2023 -0500

    fix(dates): fix availability dates to canonical

commit 8e7f49f2539b5dbd5cb35176f77a93796e4880d0
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Thu Dec 14 11:37:44 2023 -0500

    feat(content): make 2024 default backgroumd, fix errors

commit acc30f044eee3550e778831c91587e1a48f17ede
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Wed Dec 13 16:53:33 2023 -0500

    feat(content): the rest of the January content

commit 6a5e45c6d0dd9d6ef7f8898085ea10b9a25c2199
Author: CuriousMagpie <eilatan@gmail.com>
Date:   Wed Dec 13 16:49:33 2023 -0500

    feat(content): January content
This commit is contained in:
SabreCat 2023-12-29 16:07:43 -06:00
parent f66b05f707
commit 7fb1c9db8c
12 changed files with 293 additions and 8 deletions

View file

@ -0,0 +1,102 @@
/* eslint-disable no-console */
import { v4 as uuid } from 'uuid';
import { model as User } from '../../../website/server/models/user';
const MIGRATION_NAME = '20240131_habit_birthday';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count += 1;
const inc = {
'items.food.Cake_Skeleton': 1,
'items.food.Cake_Base': 1,
'items.food.Cake_CottonCandyBlue': 1,
'items.food.Cake_CottonCandyPink': 1,
'items.food.Cake_Shade': 1,
'items.food.Cake_White': 1,
'items.food.Cake_Golden': 1,
'items.food.Cake_Zombie': 1,
'items.food.Cake_Desert': 1,
'items.food.Cake_Red': 1,
'achievements.habitBirthdays': 1,
};
const set = {};
const push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_cake',
title: 'Happy Habit Birthday!',
text: 'Habitica turns 11 today! Enjoy free party robes and cake!',
destination: 'inventory/equipment',
},
seen: false,
},
};
set.migration = MIGRATION_NAME;
if (typeof user.items.gear.owned.armor_special_birthday2023 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2024'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2022 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2023'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2021 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2022'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2020 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2021'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2019 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2020'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2018 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2019'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2017 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2018'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2016 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2017'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday2015 !== 'undefined') {
set['items.gear.owned.armor_special_birthday2016'] = true;
} else if (typeof user.items.gear.owned.armor_special_birthday !== 'undefined') {
set['items.gear.owned.armor_special_birthday2015'] = true;
} else {
set['items.gear.owned.armor_special_birthday'] = true;
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.updateOne({_id: user._id}, {$inc: inc, $set: set, $push: push}).exec();
}
export default async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2023-12-23')},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};

View file

@ -1179,6 +1179,11 @@
width: 141px;
height: 147px;
}
.background_frozen_blue_pond {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_frozen_blue_pond.png');
width: 141px;
height: 147px;
}
.background_frozen_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_frozen_lake.png');
width: 141px;
@ -1384,6 +1389,11 @@
width: 141px;
height: 147px;
}
.background_ice_bubble_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_ice_bubble_lake.png');
width: 141px;
height: 147px;
}
.background_ice_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_ice_cave.png');
width: 141px;
@ -2269,6 +2279,11 @@
width: 141px;
height: 147px;
}
.background_winter_mountain_range {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_mountain_range.png');
width: 141px;
height: 147px;
}
.background_winter_night {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_night.png');
width: 141px;
@ -2985,6 +3000,11 @@
width: 68px;
height: 68px;
}
.icon_background_frozen_blue_pond {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_frozen_blue_pond.png');
width: 68px;
height: 68px;
}
.icon_background_frozen_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_frozen_lake.png');
width: 68px;
@ -3190,6 +3210,11 @@
width: 68px;
height: 68px;
}
.icon_background_ice_bubble_lake {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_ice_bubble_lake.png');
width: 68px;
height: 68px;
}
.icon_background_ice_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_ice_cave.png');
width: 68px;
@ -4080,6 +4105,11 @@
width: 68px;
height: 68px;
}
.icon_background_winter_mountain_range {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_mountain_range.png');
width: 68px;
height: 68px;
}
.icon_background_winter_night {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_night.png');
width: 68px;
@ -19020,6 +19050,16 @@
width: 90px;
height: 90px;
}
.broad_armor_armoire_schoolUniformPants {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_schoolUniformPants.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_schoolUniformSkirt {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_schoolUniformSkirt.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_scribesRobe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_scribesRobe.png');
width: 114px;
@ -19975,6 +20015,11 @@
width: 114px;
height: 90px;
}
.shield_armoire_trustyPencil {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyPencil.png');
width: 114px;
height: 90px;
}
.shield_armoire_trustyUmbrella {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyUmbrella.png');
width: 114px;
@ -20360,6 +20405,16 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_schoolUniformPants {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_schoolUniformPants.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_schoolUniformSkirt {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_schoolUniformSkirt.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_scribesRobe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_scribesRobe.png');
width: 68px;
@ -21375,6 +21430,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_trustyPencil {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyPencil.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_trustyUmbrella {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyUmbrella.png');
width: 68px;
@ -21820,6 +21880,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_scholarlyTextbooks {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_scholarlyTextbooks.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_shadowMastersMace {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_shadowMastersMace.png');
width: 68px;
@ -22245,6 +22310,16 @@
width: 90px;
height: 90px;
}
.slim_armor_armoire_schoolUniformPants {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_schoolUniformPants.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_schoolUniformSkirt {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_schoolUniformSkirt.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_scribesRobe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_scribesRobe.png');
width: 114px;
@ -22785,6 +22860,11 @@
width: 114px;
height: 90px;
}
.weapon_armoire_scholarlyTextbooks {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_scholarlyTextbooks.png');
width: 114px;
height: 90px;
}
.weapon_armoire_shadowMastersMace {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_shadowMastersMace.png');
width: 114px;
@ -23655,6 +23735,11 @@
width: 114px;
height: 90px;
}
.broad_armor_special_birthday2024 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_birthday2024.png');
width: 114px;
height: 90px;
}
.eyewear_special_anniversary {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_special_anniversary.png');
width: 90px;
@ -23710,6 +23795,11 @@
width: 68px;
height: 68px;
}
.shop_armor_special_birthday2024 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_birthday2024.png');
width: 68px;
height: 68px;
}
.shop_back_special_anniversary {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_back_special_anniversary.png');
width: 68px;
@ -23775,6 +23865,11 @@
width: 114px;
height: 90px;
}
.slim_armor_special_birthday2024 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_birthday2024.png');
width: 114px;
height: 90px;
}
.broad_armor_special_fall2015Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2015Healer.png');
width: 93px;
@ -28895,6 +28990,41 @@
width: 68px;
height: 68px;
}
.back_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/back_mystery_202401.png');
width: 117px;
height: 120px;
}
.broad_armor_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202401.png');
width: 117px;
height: 120px;
}
.shop_armor_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202401.png');
width: 68px;
height: 68px;
}
.shop_back_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_back_mystery_202401.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202401.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_scholarlyTextbooks {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_scholarlyTextbooks.png');
width: 68px;
height: 68px;
}
.slim_armor_mystery_202401 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202401.png');
width: 117px;
height: 120px;
}
.broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px;

View file

@ -121,7 +121,7 @@
v-if="editing"
class="menu-container col-2"
:class="{active: activeTopPage === 'backgrounds'}"
@click="changeTopPage('backgrounds', '2023')"
@click="changeTopPage('backgrounds', '2024')"
>
<div class="menu-item">
<div
@ -208,13 +208,13 @@
<div
class="row text-center title-row"
>
<strong>{{ backgroundShopSets[2].text }}</strong>
<strong>{{ backgroundShopSets[1].text }}</strong>
</div>
<div
class="row title-row"
>
<div
v-for="bg in backgroundShopSets[2].items"
v-for="bg in backgroundShopSets[1].items"
:id="bg.key"
:key="bg.key"
class="col-4 text-center customize-option background-button"
@ -1237,7 +1237,7 @@ export default {
},
],
bgSubMenuItems: ['2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
bgSubMenuItems: ['2024', '2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
id: y,
label: y,
})),
@ -1267,6 +1267,7 @@ export default {
2021: [],
2022: [],
2023: [],
2024: [],
};
// Hack to force update for now until we restructure the data

View file

@ -47,7 +47,7 @@ export default {
if (this.notification.data.destination.indexOf('backgrounds') !== -1) {
this.$store.state.avatarEditorOptions.editingUser = true;
this.$store.state.avatarEditorOptions.startingPage = 'backgrounds';
this.$store.state.avatarEditorOptions.subpage = '2023';
this.$store.state.avatarEditorOptions.subpage = '2024';
this.$root.$emit('bv::show::modal', 'avatar-modal');
} else {
this.$router.push(this.notification.data.destination || '/inventory/items');

View file

@ -40,7 +40,7 @@
>{{ $t('editAvatar') }}</a>
<a
class="topbar-dropdown-item dropdown-item dropdown-separated"
@click="showAvatar('backgrounds', '2023')"
@click="showAvatar('backgrounds', '2024')"
>{{ $t('backgrounds') }}</a>
<a
class="topbar-dropdown-item dropdown-item"

View file

@ -838,7 +838,7 @@
"backgrounds122022": "SET 103: Released December 2022",
"backgroundBranchesOfAHolidayTreeText": "Branches of a Holiday Tree",
"backgroundBranchesOfAHolidayTreeNotes": "Frolic on the Branches of a Holiday Tree.",
"backgroundInsideACrystalText": "Inside A Crystal",
"backgroundInsideACrystalText": "Inside A Crystal",
"backgroundInsideACrystalNotes": "Peer out from Inside A Crystal.",
"backgroundSnowyVillageText": "Snowy Village",
"backgroundSnowyVillageNotes": "Admire a Snowy Village.",
@ -939,6 +939,13 @@
"backgroundWinterFullMoonText": "WinterFullMoon",
"backgroundWinterFullMoonNotes": "Gaze at the Winter Full Moon.",
"backgrounds012024": "SET 116: Released January 2024",
"backgroundWinterMountainRangeText": "Winter Mountain Range",
"backgroundWinterMountainRangeNotes": "Climb a Winter Mountain Range.",
"backgroundFrozenBluePondText": "Frozen Blue Pond",
"backgroundFrozenBluePondNotes": "Chill out by the Frozen Blue Pond.",
"backgroundIceBubbleLakeText": "Ice Bubble Lake",
"backgroundIceBubbleLakeNotes": "Stand carefully on the Ice Bubble Lake.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",

View file

@ -736,6 +736,8 @@
"weaponArmoireRidingBroomNotes": "Run all your most magical errands on this fine broom--or, just take it for a joyride around the neighborhood. Whee! Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Spooky Sorcery Set (Item 1 of 3)",
"weaponArmoireRollingPinText": "Rolling Pin",
"weaponArmoireRollingPinNotes": "Roll your dough as thin as you like in-between bonking bad habits when they pop up around you like a certain rodent-bopping game. Increases Strength by <%= str %>. Enchanted Armoire: Cooking Implements Set 2 (Item 2 of 2).",
"weaponArmoireScholarlyTextbooksText": "Scholarly Textbooks",
"weaponArmoireScholarlyTextbooksNotes": "Heres your chance to dive deep and learn about any topic that interests you. Whats your current hyperfixation? Increases Intelligence by <%= int %>. Enchanted Armoire: School Uniform Set (Item 3 of 4).",
"armor": "armor",
"armorCapitalized": "Armor",
@ -856,6 +858,8 @@
"armorSpecialBirthday2022Notes": "Happy Birthday, Habitica! Wear these Proposterous Party Robes to celebrate this wonderful day. Confers no benefit.",
"armorSpecialBirthday2023Text": "Fabulous Party Robes",
"armorSpecialBirthday2023Notes": "Happy Birthday, Habitica! Wear these Fabulous Party Robes to celebrate this wonderful day. Confers no benefit.",
"armorSpecialBirthday2024Text": "Ludicrous Party Robes",
"armorSpecialBirthday2024Notes": "Happy Birthday, Habitica! Wear these Ludicrous Party Robes to celebrate this wonderful day. Confers no benefit.",
"armorSpecialGaymerxText": "Rainbow Warrior Armor",
"armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@ -1342,6 +1346,8 @@
"armorMystery202307Notes": "Suction cups have the best traction on the sea floor and on the sides of wayward ships. Confers no benefit. July 2023 Subscriber Item.",
"armorMystery202310Text": "Wraith's Robe",
"armorMystery202310Notes": "A ghostly garment that will curl and drift gracefully as you float amidst the haunted bogs and wastes. Confers no benefit. October 2023 Subscriber Item.",
"armorMystery202401Text": "Snowy Spellbinder Robes",
"armorMystery202401Notes": "These robes appear as delicate as crystal snowflakes, but will keep you plenty warm as you work your wintry magic. Confers no benefit. January 2024 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
@ -1542,6 +1548,10 @@
"armorArmoireKarateGiNotes": "This lightweight karate uniform is perfect for practice or competition. Increases Strength by <%= str %>. Enchanted Armoire: Karate Set (Item 1 of 10).",
"armorArmoireGreenFluffTrimmedCoatText": "Green Fluff Trimmed Coat",
"armorArmoireGreenFluffTrimmedCoatNotes": "Tales tell that once in a generation, a coat comes along that is the warmest and coziest. Its fluff is extraordinary and its buttons are manageable even by mitten-clad hands. This is that coat. Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Trapper Hat Set (Item 2 of 2).",
"armorArmoireSchoolUniformSkirtText": "School Uniform with Skirt",
"armorArmoireSchoolUniformSkirtNotes": "Whether youre attending a school for magical wizards, dragon riders, sportsball players, creative artisans, or members of a profession too secret to list here, youll fit right in with this uniform. Increases Intelligence by <%= int %>. Enchanted Armoire: School Uniform Set (Item 1 of 4).",
"armorArmoireSchoolUniformPantsText": "School Uniform with Pants",
"armorArmoireSchoolUniformPantsNotes": "Whether youre attending a school for magical wizards, dragon riders, sportsball players, creative artisans, or members of a profession too secret to list here, youll fit right in with this uniform. Increases Intelligence by <%= int %>. Enchanted Armoire: School Uniform Set (Item 2 of 4).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@ -2807,6 +2817,8 @@
"shieldArmoireBucketNotes": "Though this bucket is helpful in holding a mixture of water and cleaning solution, you could also use it to collect, carry, and cart around just about anything that fits inside! Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Cleaning Supplies Set 2 (Item 1 of 3)",
"shieldArmoireSaucepanText": "Sauce Pan",
"shieldArmoireSaucepanNotes": "Look inside this steaming saucepan for the answer to the most closely guarded secret in life! (Soup. The answer is always soup.) Increases Perception by <%= per %> . Enchanted Armoire: Cooking Implements Set 2 (Item 1 of 2).",
"shieldArmoireTrustyPencilText": "Trusty Pencil",
"shieldArmoireTrustyPencilNotes": "You know what they say: the pencil is mightier than the sword-cil. Wait... that doesnt sound quite right... Increases Intelligence by <%= int %>. Enchanted Armoire: School Uniform Set (Item 4 of 4).",
"back": "Back Accessory",
"backBase0Text": "No Back Accessory",
@ -2881,6 +2893,8 @@
"backMystery202305Notes": "Catch the sparkle of the evening star and soar to strange realms on these wings. Confers no benefit. May 2023 Subscriber Item.",
"backMystery202309Text": "Colossal Comet Moth Wings",
"backMystery202309Notes": "Flutter across forests, glide over mountains, and soar over oceans on these bright and beautiful wings. Confers no benefit. September 2023 Subscriber Item.",
"backMystery202401Text": "Snowy Spell",
"backMystery202401Notes": "Conjure softly falling flurries or call a mighty blizzard. The choice is yours! Confers no benefit. January 2024 Subscriber Item.",
"backSpecialWonderconRedText": "Mighty Cape",
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",

View file

@ -154,10 +154,10 @@
"mysterySet202307": "Perilous Kraken Set",
"mysterySet202308": "Purple Protagonist Set",
"mysterySet202309": "Colossal Comet Moth Set",
"mysterySet202309": "All-Seeing Spellbinder Set",
"mysterySet202310": "Ghostlight Wraith Set",
"mysterySet202311": "All-Seeing Spellbinder Set",
"mysterySet202312": "Wintry Blue Set",
"mysterySet202401": "Snowy Spellbinder Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",

View file

@ -597,6 +597,11 @@ const plannedBackgrounds = {
ice_sculpture_festival: { },
winter_full_moon: { },
},
backgrounds012024: {
winter_mountain_range: { },
frozen_blue_pond: { },
ice_bubble_lake: { },
},
eventBackgrounds: {
birthday_bash: {
price: 0,
@ -643,6 +648,7 @@ const releaseDates = {
backgrounds102023: '2023-10-10T08:00-04:00',
backgrounds112023: '2023-11-07T08:00-05:00',
backgrounds122023: '2023-12-05T08:00-05:00',
backgrounds012024: '2024-01-04T08:00-05:00',
};
const flat = {};

View file

@ -449,6 +449,14 @@ const armor = {
int: 8,
set: 'greenTrapper',
},
schoolUniformSkirt: {
int: 5,
set: 'schoolUniform',
},
schoolUniformPants: {
int: 5,
set: 'schoolUniform',
},
};
const body = {
@ -1263,6 +1271,10 @@ const shield = {
per: 10,
set: 'cookingImplementsTwo',
},
trustyPencil: {
int: 10,
set: 'schoolUniform',
},
};
const headAccessory = {
@ -1728,12 +1740,17 @@ const weapon = {
str: 10,
set: 'cookingImplementsTwo',
},
scholarlyTextbooks: {
int: 10,
set: 'schoolUniform',
},
};
const releaseDates = {
somethingSpooky: '2023-10-10T08:00-04:00',
cookingImplementsTwo: '2023-11-07T08:00-05:00',
greenTrapper: '2023-12-05T08:00-05:00',
schoolUniform: '2024-01-04T08:00-05:00',
};
forEach({

View file

@ -64,6 +64,7 @@ const armor = {
202306: { },
202307: { },
202310: { },
202401: { },
301404: { },
301703: { },
301704: { },
@ -104,6 +105,7 @@ const back = {
202302: { },
202305: { },
202309: { },
202401: { },
};
const body = {

View file

@ -870,6 +870,12 @@ const armor = {
winter2024Rogue: {
set: 'winter2024SnowyOwlRogueSet',
},
birthday2024: {
text: t('armorSpecialBirthday2024Text'),
notes: t('armorSpecialBirthday2024Notes'),
value: 0,
canOwn: ownsItem('armor_special_birthday2023'),
},
};
const armorStats = {