diff --git a/habitica-images b/habitica-images
index 5cc03160b5..973f84ead2 160000
--- a/habitica-images
+++ b/habitica-images
@@ -1 +1 @@
-Subproject commit 5cc03160b57bb3e0fbb7b75543fcd01c2c136883
+Subproject commit 973f84ead2613073f301c1e2b5496d08163f7507
diff --git a/package-lock.json b/package-lock.json
index a7e1f4f37d..b16e7b3a62 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "habitica",
- "version": "4.260.1",
+ "version": "4.262.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index beabae8d5e..9ebc5a1346 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
- "version": "4.260.1",
+ "version": "4.262.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.20.12",
diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css
index 2ac6f4a821..cc08b248ed 100644
--- a/website/client/src/assets/css/sprites/spritesmith-main.css
+++ b/website/client/src/assets/css/sprites/spritesmith-main.css
@@ -1369,6 +1369,11 @@
width: 141px;
height: 147px;
}
+.background_jungle_watering_hole {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_jungle_watering_hole.png');
+ width: 141px;
+ height: 147px;
+}
.background_kelp_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_kelp_forest.png');
width: 141px;
@@ -1404,6 +1409,11 @@
width: 141px;
height: 147px;
}
+.background_mangrove_forest {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_mangrove_forest.png');
+ width: 141px;
+ height: 147px;
+}
.background_marble_temple {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_marble_temple.png');
width: 141px;
@@ -1514,6 +1524,11 @@
width: 141px;
height: 147px;
}
+.background_old_timey_basketball_court {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_old_timey_basketball_court.png');
+ width: 141px;
+ height: 147px;
+}
.background_on_a_castle_wall {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_on_a_castle_wall.png');
width: 141px;
@@ -3025,6 +3040,11 @@
width: 68px;
height: 68px;
}
+.icon_background_jungle_watering_hole {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_jungle_watering_hole.png');
+ width: 68px;
+ height: 68px;
+}
.icon_background_kelp_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_kelp_forest.png');
width: 68px;
@@ -3060,6 +3080,11 @@
width: 68px;
height: 68px;
}
+.icon_background_mangrove_forest {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_mangrove_forest.png');
+ width: 68px;
+ height: 68px;
+}
.icon_background_marble_temple {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_marble_temple.png');
width: 68px;
@@ -3170,6 +3195,11 @@
width: 68px;
height: 68px;
}
+.icon_background_old_timey_basketball_court {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_old_timey_basketball_court.png');
+ width: 68px;
+ height: 68px;
+}
.icon_background_on_a_castle_wall {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_on_a_castle_wall.png');
width: 68px;
@@ -18320,6 +18350,11 @@
width: 90px;
height: 90px;
}
+.broad_armor_armoire_basketballUniform {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_basketballUniform.png');
+ width: 114px;
+ height: 90px;
+}
.broad_armor_armoire_bathtub {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_bathtub.png');
width: 114px;
@@ -19205,6 +19240,11 @@
width: 114px;
height: 90px;
}
+.shield_armoire_basketball {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_basketball.png');
+ width: 114px;
+ height: 90px;
+}
.shield_armoire_birthdayBanner {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_birthdayBanner.png');
width: 114px;
@@ -19575,6 +19615,11 @@
width: 68px;
height: 68px;
}
+.shop_armor_armoire_basketballUniform {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_basketballUniform.png');
+ width: 68px;
+ height: 68px;
+}
.shop_armor_armoire_bathtub {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_bathtub.png');
width: 68px;
@@ -20475,6 +20520,11 @@
width: 68px;
height: 68px;
}
+.shop_shield_armoire_basketball {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_basketball.png');
+ width: 68px;
+ height: 68px;
+}
.shop_shield_armoire_birthdayBanner {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_birthdayBanner.png');
width: 68px;
@@ -21305,6 +21355,11 @@
width: 90px;
height: 90px;
}
+.slim_armor_armoire_basketballUniform {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_basketballUniform.png');
+ width: 114px;
+ height: 90px;
+}
.slim_armor_armoire_bathtub {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_bathtub.png');
width: 114px;
@@ -27750,6 +27805,31 @@
width: 68px;
height: 68px;
}
+.eyewear_mystery_202303 {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_mystery_202303.png');
+ width: 114px;
+ height: 90px;
+}
+.head_mystery_202303 {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202303.png');
+ width: 114px;
+ height: 90px;
+}
+.shop_eyewear_mystery_202303 {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_mystery_202303.png');
+ width: 68px;
+ height: 68px;
+}
+.shop_head_mystery_202303 {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202303.png');
+ width: 68px;
+ height: 68px;
+}
+.shop_set_mystery_202303 {
+ background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202303.png');
+ width: 68px;
+ height: 68px;
+}
.broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px;
diff --git a/website/client/src/components/static/communityGuidelines.vue b/website/client/src/components/static/communityGuidelines.vue
index 7d26f14d56..8f4b186ce1 100644
--- a/website/client/src/components/static/communityGuidelines.vue
+++ b/website/client/src/components/static/communityGuidelines.vue
@@ -149,7 +149,7 @@
{{ $t('commGuideList10A') }}
- - {{ $t('commGuideList10A1') }}
+
diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js
index 1a5fc4e99d..09727c789e 100644
--- a/website/client/src/router/index.js
+++ b/website/client/src/router/index.js
@@ -272,6 +272,11 @@ const router = new VueRouter({
name: 'transactions',
path: 'transactions',
component: Transactions,
+ meta: {
+ privilegeNeeded: [
+ 'userSupport',
+ ],
+ },
},
{
name: 'notifications',
@@ -316,11 +321,6 @@ const router = new VueRouter({
{
name: 'front', path: 'front', component: HomePage, meta: { requiresLogin: false },
},
- // Commenting out merch page see
- // https://github.com/HabitRPG/habitica/issues/12039
- // {
- // name: 'merch', path: 'merch', component: MerchPage, meta: { requiresLogin: false },
- // },
{
name: 'news', path: 'new-stuff', component: NewsPage, meta: { requiresLogin: false },
},
diff --git a/website/common/locales/en/backgrounds.json b/website/common/locales/en/backgrounds.json
index 39beda6e4a..32e9e1e8e1 100644
--- a/website/common/locales/en/backgrounds.json
+++ b/website/common/locales/en/backgrounds.json
@@ -845,11 +845,11 @@
"backgrounds012023": "SET 104: Released January 2023",
"backgroundRimeIceText": "Rime Ice",
- "backgroundRimeIceNotes": "Admire Sparkly Rime Ice.",
+ "backgroundRimeIceNotes": "Admire sparkly Rime Ice.",
"backgroundSnowyTempleText": "Snowy Temple",
- "backgroundSnowyTempleNotes": "View a Serene Snowy Temple.",
+ "backgroundSnowyTempleNotes": "View a serene Snowy Temple.",
"backgroundWinterLakeWithSwansText": "Winter Lake With Swans",
- "backgroundWinterLakeWithSwansNotes": "Enjoy Nature at a Winter Lake With Swans.",
+ "backgroundWinterLakeWithSwansNotes": "Enjoy nature at a Winter Lake With Swans.",
"backgrounds022023": "SET 105: Released February 2023",
"backgroundInFrontOfFountainText": "In Front of a Fountain",
@@ -859,6 +859,14 @@
"backgroundFancyBedroomText": "Fancy Bedroom",
"backgroundFancyBedroomNotes": "Luxuriate in a Fancy Bedroom.",
+ "backgrounds032023": "SET 106: Released March 2023",
+ "backgroundOldTimeyBasketballCourtText": "Old Timey Basketball Court",
+ "backgroundOldTimeyBasketballCourtNotes": "Shoot hoops on an Old Timey BasketBall Court.",
+ "backgroundJungleWateringHoleText": "Jungle Watering Hole",
+ "backgroundJungleWateringHoleNotes": "Stop for a sip at a Jungle Watering Hole.",
+ "backgroundMangroveForestText": "Mangrove Forest",
+ "backgroundMangroveForestNotes": "Explore the edge of the Mangrove Forest.",
+
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json
index c02f62d6c3..cbb8e3e709 100644
--- a/website/common/locales/en/gear.json
+++ b/website/common/locales/en/gear.json
@@ -1430,6 +1430,8 @@
"armorArmoireShawlCollarCoatNotes": "A wise wizard once said there’s nothing better than being both cozy and productive! Wear this warm and stylish coat as you conquer the year’s challenges. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
"armorArmoireTeaGownText": "Tea Party Gown",
"armorArmoireTeaGownNotes": "You’re resilient, creative, brilliant, and so fashionable! Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Tea Party Set (Item 1 of 3).",
+ "armorArmoireBasketballUniformText": "Basketball Uniform",
+ "armorArmoireBasketballUniformNotes": "Wondering what’s printed on the back of this uniform? It’s your lucky number, of course! Increases Perception by <% per %>. Enchanted Armoire: Old Timey Basketball Set (Item 1 of 2).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -2016,6 +2018,8 @@
"headMystery202211Notes": "Be careful with this powerful hat, its effect on admirers can be quite shocking! Confers no benefit. November 2022 Subscriber Item.",
"headMystery202301Text": "Valiant Vulpine Ears",
"headMystery202301Notes": "Your hearing will be so sharp you'll hear the dawn breaking and the dew sparkling. Confers no benefit. January 2023 Subscriber Item.",
+ "headMystery202303Text": "Mane Character Hair",
+ "headMystery202303Notes": "What better way to let everyone know you’re the star of this tale than to have blue and improbably spiky hair? Confers no benefit. March 2023 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
"headMystery301405Text": "Basic Top Hat",
@@ -2601,6 +2605,8 @@
"shieldArmoireJewelersPliersNotes": "They cut, twist, pinch, and more. This tool can help you create whatever you can imagine. Increases Strength by <%= str %>. Enchanted Armoire: Jeweler Set (Item 3 of 4).",
"shieldArmoireTeaKettleText": "Tea Kettle",
"shieldArmoireTeaKettleNotes": "All your favorite, flavorful teas can be brewed in this kettle. Are you in the mood for black tea, green tea, oolong, or perhaps an herbal infusion? Increases Constitution by <%= con %>. Enchanted Armoire: Tea Party Set (Item 3 of 3).",
+ "shieldArmoireBasketballText": "Basketball",
+ "shieldArmoireBasketballNotes": "Swish! Whenever you shoot this magic basketball, there will be nothing but net. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Old Timey Basketball Set (Item 2 of 2).",
"back": "Back Accessory",
"backBase0Text": "No Back Accessory",
@@ -2970,6 +2976,8 @@
"eyewearMystery202204BNotes": "What's your mood today? Express yourself with these fun screens. Confers no benefit. April 2022 Subscriber Item.",
"eyewearMystery202208Text": "Sparkly Eyes",
"eyewearMystery202208Notes": "Lull your enemies into a false sense of security with these terrifyingly cute peepers. Confers no benefit. August 2022 Subscriber Item.",
+ "eyewearMystery202303Text": "Dreamy Eyes",
+ "eyewearMystery202303Notes": "Let your nonchalant expression lure your enemies into a false sense of security. Confers no benefit. March 2023 Subscriber Item.",
"eyewearMystery301404Text": "Eyewear Goggles",
"eyewearMystery301404Notes": "No eyewear could be fancier than a pair of goggles - except, perhaps, for a monocle. Confers no benefit. April 3015 Subscriber Item.",
"eyewearMystery301405Text": "Monocle",
diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json
index e8c737be83..62c7cea8bf 100644
--- a/website/common/locales/en/subscriber.json
+++ b/website/common/locales/en/subscriber.json
@@ -147,6 +147,7 @@
"mysterySet202212": "Glacial Guardian Set",
"mysterySet202301": "Valiant Vulpine Set",
"mysterySet202302": "Trickster Tabby Set",
+ "mysterySet202303": "Mane Character Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",
diff --git a/website/common/script/content/appearance/backgrounds.js b/website/common/script/content/appearance/backgrounds.js
index 452855ea81..b5736c802f 100644
--- a/website/common/script/content/appearance/backgrounds.js
+++ b/website/common/script/content/appearance/backgrounds.js
@@ -545,6 +545,11 @@ const backgrounds = {
golden_birdcage: { },
fancy_bedroom: { },
},
+ backgrounds032023: {
+ jungle_watering_hole: { },
+ mangrove_forest: { },
+ old_timey_basketball_court: { },
+ },
eventBackgrounds: {
birthday_bash: {
price: 0,
diff --git a/website/common/script/content/gear/sets/armoire.js b/website/common/script/content/gear/sets/armoire.js
index c79e433e7b..05efe54b1e 100644
--- a/website/common/script/content/gear/sets/armoire.js
+++ b/website/common/script/content/gear/sets/armoire.js
@@ -416,6 +416,10 @@ const armor = {
int: 5,
set: 'teaParty',
},
+ basketballUniform: {
+ per: 10,
+ set: 'oldTimeyBasketball',
+ },
};
const body = {
@@ -1146,6 +1150,11 @@ const shield = {
con: 10,
set: 'teaParty',
},
+ basketball: {
+ con: 5,
+ str: 5,
+ set: 'oldTimeyBasketball',
+ },
};
const headAccessory = {
diff --git a/website/common/script/content/gear/sets/mystery.js b/website/common/script/content/gear/sets/mystery.js
index ed445c9e09..f9a5775e8e 100644
--- a/website/common/script/content/gear/sets/mystery.js
+++ b/website/common/script/content/gear/sets/mystery.js
@@ -124,6 +124,7 @@ const eyewear = {
'202204A': { mystery: '202204' },
'202204B': { mystery: '202204' },
202208: { },
+ 202303: { },
301404: { },
301405: { },
301703: { },
@@ -201,6 +202,7 @@ const head = {
202210: { },
202211: { },
202301: { },
+ 202303: { },
301404: { },
301405: { },
301703: { },
diff --git a/website/server/controllers/api-v3/groups.js b/website/server/controllers/api-v3/groups.js
index c16ba61c7e..d6431e40cd 100644
--- a/website/server/controllers/api-v3/groups.js
+++ b/website/server/controllers/api-v3/groups.js
@@ -165,6 +165,7 @@ api.createGroup = {
hitType: 'event',
category: 'behavior',
owner: true,
+ groupId: savedGroup._id,
groupType: savedGroup.type,
privacy: savedGroup.privacy,
headers: req.headers,
@@ -214,6 +215,7 @@ api.createGroupPlan = {
hitType: 'event',
category: 'behavior',
owner: true,
+ groupId: savedGroup._id,
groupType: savedGroup.type,
privacy: savedGroup.privacy,
headers: req.headers,
@@ -736,6 +738,7 @@ api.joinGroup = {
hitType: 'event',
category: 'behavior',
owner: false,
+ groupId: group._id,
groupType: group.type,
privacy: group.privacy,
headers: req.headers,
@@ -1205,6 +1208,7 @@ api.inviteToGroup = {
uuid: user._id,
hitType: 'event',
category: 'behavior',
+ groupId: group._id,
groupType: group.type,
headers: req.headers,
};