diff --git a/config/i18n.json b/config/i18n.json index 6367d3771..428734e2b 100644 --- a/config/i18n.json +++ b/config/i18n.json @@ -967,6 +967,7 @@ "Consolidate": "Consolidate", "CommunityData": "Community Insight", "DistributeEvenly": "Distribute Evenly", + "EnhancementTier": "Tier {{tier}}", "Equip": "Equip on:", "EquipWithName": "Equip on {{character}}", "FavoriteUnFavorite": { diff --git a/src/app/inventory/item-types.ts b/src/app/inventory/item-types.ts index bfd89ca93..390a35ab0 100644 --- a/src/app/inventory/item-types.ts +++ b/src/app/inventory/item-types.ts @@ -267,6 +267,8 @@ export interface DimCrafted { progress: number; /** when this weapon was crafted, UTC epoch seconds timestamp */ craftedDate: number; + /** the enhancement tier for this weapon, if enhanced. 0 otherwise. */ + enhancementTier: number; } export interface DimCatalyst { diff --git a/src/app/inventory/store/crafted.ts b/src/app/inventory/store/crafted.ts index 210fb94eb..60096a017 100644 --- a/src/app/inventory/store/crafted.ts +++ b/src/app/inventory/store/crafted.ts @@ -1,6 +1,7 @@ import { D2ManifestDefinitions } from 'app/destiny2/d2-definitions'; import { warnLog } from 'app/utils/log'; import { getFirstSocketByCategoryHash } from 'app/utils/socket-utils'; +import { HashLookup } from 'app/utils/util-types'; import { DestinyObjectiveProgress, DestinyObjectiveUiStyle } from 'bungie-api-ts/destiny2'; import { DimCrafted, DimItem, DimSocket } from '../item-types'; @@ -10,6 +11,14 @@ export const craftedSocketCategoryHash = 3583996951; /** the socket category containing the Mementos */ export const mementoSocketCategoryHash = 3201856887; +/** the socket containing the enhancement tier plugs */ +export const enhancementSocketHash = 4251072212; +export const plugHashToEnhancementTier: HashLookup = { + 2728416798: 1, + 2728416797: 2, + 2728416796: 3, +}; + export function buildCraftedInfo( item: DimItem, defs: D2ManifestDefinitions, @@ -23,8 +32,12 @@ export function buildCraftedInfo( if (!objectives) { return undefined; } - - return getCraftingInfo(defs, objectives); + const craftingInfo = getCraftingInfo(defs, objectives); + if (!craftingInfo) { + return undefined; + } + craftingInfo.enhancementTier = getEnhancementTier(item); + return craftingInfo; } /** find the item socket that could contain the "this weapon was crafted" plug with its objectives */ @@ -34,6 +47,16 @@ export function getCraftedSocket(item: DimItem): DimSocket | undefined { } } +export function getEnhancementTier(item: DimItem): number { + if (item.bucket.inWeapons && item.sockets) { + const plugHash = item.sockets.allSockets.find( + (s) => s.socketDefinition.socketTypeHash === enhancementSocketHash, + )?.plugged?.plugDef.hash; + return (plugHash && plugHashToEnhancementTier[plugHash]) || 0; + } + return 0; +} + function getCraftingInfo( defs: D2ManifestDefinitions, objectives: DestinyObjectiveProgress[], @@ -64,5 +87,5 @@ function getCraftingInfo( return undefined; } - return { level, progress, craftedDate }; + return { level, progress, craftedDate, enhancementTier: 0 }; } diff --git a/src/app/item-popup/WeaponCraftedInfo.tsx b/src/app/item-popup/WeaponCraftedInfo.tsx index fc7046afc..50e17f6a7 100644 --- a/src/app/item-popup/WeaponCraftedInfo.tsx +++ b/src/app/item-popup/WeaponCraftedInfo.tsx @@ -29,6 +29,8 @@ export function WeaponCraftedInfo({ item, className }: { item: DimItem; classNam
+ {item.craftedInfo?.enhancementTier > 0 && + `${t('MovePopup.EnhancementTier', { tier: item.craftedInfo?.enhancementTier })} - `} {t('MovePopup.WeaponLevel', { level: item.craftedInfo.level })}
{percentWithSingleDecimal(progress)}