diff --git a/src/lib/components/common/item_holder_metadata.ts b/src/lib/components/common/item_holder_metadata.ts index 2fd2c696..4766a943 100644 --- a/src/lib/components/common/item_holder_metadata.ts +++ b/src/lib/components/common/item_holder_metadata.ts @@ -79,6 +79,10 @@ export abstract class ItemHolderMetadata extends FloatElement { return $J(this).parent().attr('id')?.split('_')[2]; } + get isTradeProtected(): boolean { + return $J(this).parent().hasClass('provisional_item'); + } + abstract get asset(): rgAsset | undefined; abstract get ownerSteamId(): string | undefined; diff --git a/src/lib/components/inventory/inventory_item_holder_metadata.ts b/src/lib/components/inventory/inventory_item_holder_metadata.ts index 53197754..a017f560 100644 --- a/src/lib/components/inventory/inventory_item_holder_metadata.ts +++ b/src/lib/components/inventory/inventory_item_holder_metadata.ts @@ -1,6 +1,8 @@ import {CustomElement, InjectAppend, InjectionMode} from '../injectors'; import {rgAsset} from '../../types/steam'; import {ItemHolderMetadata} from '../common/item_holder_metadata'; +import {ContextId} from '../../types/steam_constants'; +import {isCAppwideInventory} from '../../utils/checkers'; @CustomElement() @InjectAppend( @@ -11,7 +13,15 @@ export class InventoryItemHolderMetadata extends ItemHolderMetadata { get asset(): rgAsset | undefined { if (!this.assetId) return; - return g_ActiveInventory?.m_rgAssets[this.assetId]?.description; + if (!g_ActiveInventory) return; + + if (isCAppwideInventory(g_ActiveInventory)) { + const contextId = this.isTradeProtected ? ContextId.PROTECTED : ContextId.PRIMARY; + + return g_ActiveInventory.m_rgChildInventories[contextId]?.m_rgAssets[this.assetId]?.description; + } else { + return g_ActiveInventory.m_rgAssets[this.assetId]?.description; + } } get ownerSteamId(): string | undefined { diff --git a/src/lib/types/steam.d.ts b/src/lib/types/steam.d.ts index 10ab8bb8..91144ad3 100644 --- a/src/lib/types/steam.d.ts +++ b/src/lib/types/steam.d.ts @@ -1,5 +1,5 @@ import $ from 'jquery'; -import {AppId, ContextId, Currency} from './steam_constants'; +import {AppId, ContextId} from './steam_constants'; type ClassId = string; type InstanceId = string; @@ -116,10 +116,11 @@ export interface mOwner { strSteamId: string; } -// g_ActiveInventory +// g_ActiveInventory.m_rgChildInventories[contextId] export interface CInventory { initialized: boolean; m_rgAssets: {[assetId: string]: InventoryAsset}; + m_parentInventory: CAppwideInventory | null; rgInventory: {[assetId: string]: rgAsset}; m_owner?: mOwner; owner?: mOwner; @@ -127,6 +128,12 @@ export interface CInventory { appid?: number; } +// g_ActiveInventory +export interface CAppwideInventory extends CInventory { + m_rgChildInventories: {[contextId in ContextId]: CInventory}; + m_rgContextIds: string[]; +} + export interface CAjaxPagingControls { m_bLoading: boolean; m_cMaxPages: number; @@ -231,7 +238,7 @@ declare global { const g_rgListingInfo: {[listingId: string]: ListingData}; const g_rgWalletInfo: WalletInfo | undefined; // Not populated when user is signed-out const g_rgAssets: SteamAssets; - const g_ActiveInventory: CInventory | undefined; // Only populated on Steam inventory pages + const g_ActiveInventory: CAppwideInventory | CInventory | undefined; // Only populated on Steam inventory pages const g_steamID: string; const g_oSearchResults: CAjaxPagingControls; const BuyItemDialog: BuyItemDialog | undefined; // Only populated on Steam Market pages diff --git a/src/lib/types/steam_constants.ts b/src/lib/types/steam_constants.ts index 91c9bebb..389493bb 100644 --- a/src/lib/types/steam_constants.ts +++ b/src/lib/types/steam_constants.ts @@ -9,6 +9,7 @@ export enum AppId { export enum ContextId { PRIMARY = 2, + PROTECTED = 16, } // https://developer.valvesoftware.com/wiki/Steam_Web_API/IEconService diff --git a/src/lib/utils/checkers.ts b/src/lib/utils/checkers.ts index 391c74e0..15bec2d0 100644 --- a/src/lib/utils/checkers.ts +++ b/src/lib/utils/checkers.ts @@ -1,3 +1,9 @@ +import {CInventory, CAppwideInventory} from '../types/steam'; + export function defined(t: string): boolean { return t !== 'undefined'; } + +export function isCAppwideInventory(inventory: CInventory | CAppwideInventory): inventory is CAppwideInventory { + return 'm_rgChildInventories' in inventory; +}