From 09db467d8fe5a43f6434aa922df7069ba55d56d8 Mon Sep 17 00:00:00 2001 From: FlaminSarge Date: Thu, 27 Aug 2026 05:38:49 -0700 Subject: [PATCH 1/3] Update shared loadout text to indicate that overrides could be for subclass or artifact --- config/i18n.json | 3 ++- src/app/loadout/loadout-share/LoadoutShareSheet.tsx | 4 ++-- src/locale/en.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/config/i18n.json b/config/i18n.json index 53e8ef422d..0b572e9b51 100644 --- a/config/i18n.json +++ b/config/i18n.json @@ -901,7 +901,8 @@ "Fashion": "Fashion (shaders & ornaments)", "Subclass": "Subclass customization", "LoadoutOptimizer": "Loadout Optimizer settings", - "Notes": "Notes" + "Notes": "Notes", + "SocketOverrides": "Subclass/artifact customization" }, "ShareLoadout": "Share", "ShowModPlacement": "Show Mod Placement", diff --git a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx index 7fcf77a4ef..6eece2c66f 100644 --- a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx +++ b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx @@ -77,7 +77,7 @@ export default function LoadoutShareSheet({ const numMods = loadout.parameters?.mods?.length ?? 0; const numItems = count(loadout.items, (i) => !i.socketOverrides); const hasFashion = Boolean(loadout.parameters?.modsByBucket); - const hasSubclass = loadout.items.some((i) => i.equip && i.socketOverrides); + const hasOverrides = loadout.items.some((i) => i.equip && i.socketOverrides); const hasLoParams = Boolean( loadout.parameters && (loadout.parameters.query || @@ -108,7 +108,7 @@ export default function LoadoutShareSheet({ {numItems > 0 &&
  • {t('Loadouts.Share.NumItems', { count: numItems })}
  • } {numMods > 0 &&
  • {t('Loadouts.Share.NumMods', { count: numItems })}
  • } {hasFashion &&
  • {t('Loadouts.Share.Fashion')}
  • } - {hasSubclass &&
  • {t('Loadouts.Share.Subclass')}
  • } + {hasOverrides &&
  • {t('Loadouts.Share.SocketOverrides')}
  • } {hasLoParams &&
  • {t('Loadouts.Share.LoadoutOptimizer')}
  • } {loadout.notes &&
  • {t('Loadouts.Share.Notes')}
  • } diff --git a/src/locale/en.json b/src/locale/en.json index 56178dc7e1..4b6119415a 100644 --- a/src/locale/en.json +++ b/src/locale/en.json @@ -948,7 +948,7 @@ "NumMods_one": "{{count}} mod", "NumMods_other": "{{count}} mods", "Placeholder": "Loading share link", - "Subclass": "Subclass customization", + "SocketOverrides": "Subclass/artifact customization", "Summary": "Share this loadout containing:", "Title": "Share \"{{name}}\"" }, From 8ba3950416fb95f0120c514e7f53cca85d9b1d58 Mon Sep 17 00:00:00 2001 From: FlaminSarge Date: Thu, 27 Aug 2026 05:39:25 -0700 Subject: [PATCH 2/3] Update loadout csv export to put equipped artifact in existing 'Artifact Season' column and equipped mods in existing 'Artifact Unlocks' columns --- src/app/loadout/spreadsheets.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/app/loadout/spreadsheets.ts b/src/app/loadout/spreadsheets.ts index 73634f964f..ed60767567 100644 --- a/src/app/loadout/spreadsheets.ts +++ b/src/app/loadout/spreadsheets.ts @@ -82,7 +82,9 @@ export function downloadLoadoutsCsv(): ThunkResult { const fragments = subclassPlugs.filter((p) => fragmentSocketCategoryHashes.includes(p.socketCategoryHash), ); - // TODO artifact and artifactPlugs + const artifact = resolvedLoadout.resolvedLoadoutItems.find( + (item) => item.item.bucket.hash === BucketHashes.Artifacts, + ); const stats: CsvRow = {}; const equippedArmor = resolvedLoadout.resolvedLoadoutItems.filter( (i) => i.loadoutItem.equip && i.item.bucket.inArmor, @@ -122,7 +124,12 @@ export function downloadLoadoutsCsv(): ThunkResult { ); const equippedItems = resolvedLoadout.resolvedLoadoutItems - .filter((i) => i.loadoutItem.equip && i.item.bucket.hash !== BucketHashes.Subclass) + .filter( + (i) => + i.loadoutItem.equip && + i.item.bucket.hash !== BucketHashes.Subclass && + i.item.bucket.hash !== BucketHashes.Artifacts, + ) .sort(sortItems); const equippedItemValues = Object.fromEntries( @@ -163,9 +170,16 @@ export function downloadLoadoutsCsv(): ThunkResult { Aspects: localizeResolvedPlugs(aspects), Fragments: localizeResolvedPlugs(fragments), Mods: mods.map((mod) => mod.displayProperties.name), - 'Artifact Season': loadout.parameters?.artifactUnlocks?.seasonNumber, - 'Artifact Unlocks': loadout.parameters?.artifactUnlocks?.unlockedItemHashes.map( - (modHash) => defs.InventoryItem.get(modHash)?.displayProperties.name, + 'Artifact Season': + artifact?.item.name || loadout.parameters?.artifactUnlocks?.seasonNumber || '', + 'Artifact Unlocks': ( + artifact?.item.sockets?.allSockets?.map( + (s) => artifact?.loadoutItem.socketOverrides?.[s.socketIndex] || 0, + ) || + loadout.parameters?.artifactUnlocks?.unlockedItemHashes || + [] + ).map( + (modHash) => (modHash && defs.InventoryItem.get(modHash)?.displayProperties.name) || '', ), }; }); From 377ddc47e7df56a80deff0865e1efb8d20323c68 Mon Sep 17 00:00:00 2001 From: FlaminSarge Date: Thu, 27 Aug 2026 06:11:11 -0700 Subject: [PATCH 3/3] Fix incorrect mod count in loadout share panel --- src/app/loadout/loadout-share/LoadoutShareSheet.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx index 6eece2c66f..6bf5d7f903 100644 --- a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx +++ b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx @@ -106,7 +106,7 @@ export default function LoadoutShareSheet({ {t('Loadouts.Share.Summary')}
      {numItems > 0 &&
    • {t('Loadouts.Share.NumItems', { count: numItems })}
    • } - {numMods > 0 &&
    • {t('Loadouts.Share.NumMods', { count: numItems })}
    • } + {numMods > 0 &&
    • {t('Loadouts.Share.NumMods', { count: numMods })}
    • } {hasFashion &&
    • {t('Loadouts.Share.Fashion')}
    • } {hasOverrides &&
    • {t('Loadouts.Share.SocketOverrides')}
    • } {hasLoParams &&
    • {t('Loadouts.Share.LoadoutOptimizer')}
    • }