feat: enhance inventory schema to support longer ItemSlug and add GiftBox equipment payload handling

This commit is contained in:
Alexa
2026-06-06 22:50:42 +03:00
parent 92bd22d164
commit 73d77dffb6
9 changed files with 67 additions and 7 deletions
+35 -1
View File
@@ -376,6 +376,40 @@ public class StoreService(DorkNetDbContext db, LevelService level, IConfiguratio
out string modificationGuid) =>
TryGetEquipmentPayload(slug, out prefabName, out modificationGuid, out _);
public static bool TryGetGiftBoxEquipmentPayload(
string? slug,
out string prefabName,
out string modificationGuid,
out EquipmentSkinEntry? entry)
{
if (!TryGetEquipmentPayload(slug, out prefabName, out modificationGuid, out entry))
return false;
// The 2020 client previews GiftPackage equipment by spawning the
// prefab. Spawning [MakerPen] outside the real tool equip flow wakes
// MakerPen tool scripts without their visuals wired up, causing a
// repeating MakerPenVisuals null-ref/spin. Still grant the skin as
// inventory; just don't ask the gift-box/store-preview path to spawn it.
if (IsMakerPenPrefab(prefabName))
{
prefabName = string.Empty;
modificationGuid = string.Empty;
entry = null;
return false;
}
return true;
}
public static bool TryGetGiftBoxEquipmentPayload(
string? slug,
out string prefabName,
out string modificationGuid) =>
TryGetGiftBoxEquipmentPayload(slug, out prefabName, out modificationGuid, out _);
private static bool IsMakerPenPrefab(string? prefabName) =>
string.Equals(prefabName, "[MakerPen]", StringComparison.OrdinalIgnoreCase);
private async Task SeedEquipmentSkinsAsync(HashSet<string> existingSlugs)
{
var catalog = _equipmentSkinCatalog.Value;
@@ -942,7 +976,7 @@ public class StoreService(DorkNetDbContext db, LevelService level, IConfiguratio
// here too.
TryGetAvatarItemPayload(i.Slug, out var avatarItemType, out var avatarItemDesc);
TryGetConsumableItemDesc(i.Slug, out var consumableItemDesc);
TryGetEquipmentPayload(i.Slug, out var equipmentPrefabName, out var equipmentModificationGuid, out var equipmentEntry);
TryGetGiftBoxEquipmentPayload(i.Slug, out var equipmentPrefabName, out var equipmentModificationGuid, out var equipmentEntry);
var isHairDye = TryGetHairDyePayload(i.Slug, out var consumableHairDyeDesc, out var hairDyeColorGuid);
if (isHairDye)
{