[econ] potentially fix hair again

This commit is contained in:
Devin Zuczek
2026-09-25 16:28:55 -04:00
parent bbdc061d05
commit 37c4e4d61e
3 changed files with 96 additions and 53 deletions
+13 -4
View File
@@ -149,6 +149,14 @@ export interface CatalogRow {
*
* `AvatarItemId` is nullable and `Tooltip` may be null; both are true of the captured data and
* the client reads them that way. Do not tighten either to keep a projection simple.
*
* `CreatedAt` and `ThumbnailImage` are OPTIONAL, never null: the capture this record mirrors
* carried a date on most rows and simply had no key on the rest — the permanent hair dyes
* among them — and never `null`. A row loaded from a store listing has no date at all, and
* serving it as `"CreatedAt": null` on every record (as `lockeditems/bulk` did once the
* loader moved to the store) broke the dorm mirror's hair dyes: the client resolves locked
* hair colours through that route, and a null where it expects a date costs it the whole
* response, not the field. Leave the key out, as the capture did.
*/
export interface CatalogAvatarItem {
AvatarItemDesc: string
@@ -160,8 +168,8 @@ export interface CatalogAvatarItem {
TagList: string | null
AvatarItemId: number | null
IsBaseAvatarItem: boolean
CreatedAt: string | null
ThumbnailImage: string | null
CreatedAt?: string
ThumbnailImage?: string
}
/**
@@ -201,8 +209,9 @@ export function toCatalogAvatarItem(row: CatalogRow): CatalogAvatarItem {
TagList: row.tag_list,
AvatarItemId: row.avatar_item_id,
IsBaseAvatarItem: row.is_base_avatar_item === 1,
CreatedAt: row.created_at,
ThumbnailImage: row.thumbnail_image,
// Absent rather than null when the row has none — see the record's note.
...(row.created_at !== null ? { CreatedAt: row.created_at } : {}),
...(row.thumbnail_image !== null ? { ThumbnailImage: row.thumbnail_image } : {}),
}
}
+46 -46
View File
@@ -152622,7 +152622,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -152675,7 +152675,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -152728,7 +152728,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -152781,7 +152781,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -152834,7 +152834,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -152887,7 +152887,7 @@
"Unique": true,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -156881,7 +156881,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -156940,7 +156940,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -156999,7 +156999,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157058,7 +157058,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157117,7 +157117,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157176,7 +157176,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157235,7 +157235,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157294,7 +157294,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157353,7 +157353,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157412,7 +157412,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157471,7 +157471,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157530,7 +157530,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157589,7 +157589,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157648,7 +157648,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157707,7 +157707,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157766,7 +157766,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157825,7 +157825,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157884,7 +157884,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -157943,7 +157943,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -158002,7 +158002,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -158061,7 +158061,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -158120,7 +158120,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 50,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -158946,7 +158946,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -158999,7 +158999,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -159052,7 +159052,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -159105,7 +159105,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -159158,7 +159158,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -159211,7 +159211,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -165512,7 +165512,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -165565,7 +165565,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -165618,7 +165618,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -165671,7 +165671,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -165724,7 +165724,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -172898,7 +172898,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -172951,7 +172951,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -173004,7 +173004,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -173057,7 +173057,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -173110,7 +173110,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -173163,7 +173163,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 20,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,
@@ -183947,7 +183947,7 @@
"Unique": false,
"SubscribersOnly": false,
"Rarity": 30,
"Context": -1,
"Context": 0,
"Currency": 0,
"CurrencyType": 0,
"ItemCount": 1,