fix: Update AvatarItemId handling to ensure correct data type and prevent malformed responses in Shop tab

This commit is contained in:
Alexa
2026-07-08 01:04:39 +03:00
parent 7b7eb651e3
commit 3d2deeedf8
2 changed files with 13 additions and 9 deletions
@@ -42,6 +42,12 @@ public sealed class WatchShop2023Tests : IClassFixture<DorkNetServerFactory>
Assert.Equal(JsonValueKind.String, giftDrop.GetProperty("TagList").ValueKind); Assert.Equal(JsonValueKind.String, giftDrop.GetProperty("TagList").ValueKind);
var rarity = giftDrop.GetProperty("Rarity").GetInt32(); var rarity = giftDrop.GetProperty("Rarity").GetInt32();
Assert.Contains(rarity, new[] { 0, 10, 20, 30, 50 }); Assert.Contains(rarity, new[] { 0, 10, 20, 30, 50 });
// Int32 on the 2023 wire — a descriptor STRING here makes the
// strict Utf8Json reader throw "Malformed Response" for the
// whole storefront payload (expected:'Number Token').
Assert.Equal(JsonValueKind.Number, giftDrop.GetProperty("AvatarItemId").ValueKind);
Assert.Equal(JsonValueKind.String, giftDrop.GetProperty("AvatarItemDesc").ValueKind);
} }
// Featured strip: bare int ids, every one resolvable in the rows. // Featured strip: bare int ids, every one resolvable in the rows.
+7 -9
View File
@@ -985,15 +985,13 @@ public class StoreService(DorkNetDbContext db, LevelService level, IConfiguratio
Tooltip = i.Description, Tooltip = i.Description,
AvatarItemDesc = avatarItemDesc, AvatarItemDesc = avatarItemDesc,
AvatarItemDescOrHairDyeDesc = avatarItemDesc, AvatarItemDescOrHairDyeDesc = avatarItemDesc,
// AvatarItemId is the field the 2023 client's StoreItemListModel // AvatarItemId is an Int32 on the 2023 wire (EMBCEDNHFLB
// actually reads (store-item +0x38) to resolve the card to a baked // serialiser writes field +0x60 with the same int writer as
// AvatarItem and read its OutfitType for tab placement — verified // GiftDropId; the descriptor string lives in AvatarItemDesc
// vs 2023 ISIL (EMBCEDNHFLB/CLIANCNHNIE, AvatarItem.GIJPCPDKHPO). // +0x38). Shipping the {guid},,, descriptor here made the
// AvatarItemDesc alone is NOT the join key, so clothing cards // strict Utf8Json reader throw "Malformed Response" on the
// resolved to OutfitType=-1 and the Shop rendered empty. Ship the // whole giftdropstore payload, so the Shop tab loaded nothing.
// same {guid},,, descriptor (GIJPCPDKHPO accepts bare {guid} or the AvatarItemId = itemId,
// composite and falls back to parsing it to the immutable Guid).
AvatarItemId = avatarItemDesc,
AvatarItemType = string.IsNullOrEmpty(avatarItemDesc) ? (int?)null : avatarItemType, AvatarItemType = string.IsNullOrEmpty(avatarItemDesc) ? (int?)null : avatarItemType,
ConsumableItemDesc = consumableItemDesc, ConsumableItemDesc = consumableItemDesc,
EquipmentPrefabName = equipmentPrefabName, EquipmentPrefabName = equipmentPrefabName,