<?xml version="1.0"?>
<rss version="2.0"><channel><title>General Latest Topics</title><link>https://dev.doctormckay.com/forum/10-general/</link><description>General Latest Topics</description><language>en</language><item><title>market_bucket_group_id</title><link>https://dev.doctormckay.com/topic/5936-market_bucket_group_id/</link><description><![CDATA[<p>
	The latest Steam update changed the links to item pages on the market. Instead of `market_hash_name`, they’ve started using `market_bucket_group_id`. Has anyone found a way to convert `market_bucket_group_id` to `market_bucket_group_name` yet?
</p>
]]></description><guid isPermaLink="false">5936</guid><pubDate>Wed, 13 May 2026 10:23:00 +0000</pubDate></item><item><title>New Community Market API Endpoint Queries</title><link>https://dev.doctormckay.com/topic/5940-new-community-market-api-endpoint-queries/</link><description><![CDATA[<p>
	The new Steam Community Market (SCM) uses queries to fetch EconItem data. For example, if I access the page for <a href="https://steamcommunity.com/market/listings/730/G18BD283004" rel="external nofollow">Sealed Dead Hand Terminal</a> in CS2 (appid 730), I can see that the following <code>queryData</code> was used: <br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">[
  {
    state: {
      data: {
        has_wallet: true,
        user_country_code: "DE",
        wallet_country_code: "DE",
        wallet_state: "",
        balance: "XX",
        delayed_balance: "0",
        currency_code: 3,
        time_most_recent_txn: 1771355122,
        most_recent_txnid: "95599083520",
        has_wallet_in_other_regions: false,
        other_regions: [],
        formatted_balance: "XXX€",
        formatted_delayed_balance: "0,00€",
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244631,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["CurrentUserWalletDetails", 1792357676],
    queryHash: '["CurrentUserWalletDetails",1792357676]',
  },
  {
    state: {
      data: {
        property_schemas: [
          {
            id: 1,
            name: "#attr_set_item_texture_seed",
            type: 2,
            int_min: "0",
            int_max: "1000",
            localized_label: "Pattern Template",
            hide_from_description: false,
          },
          {
            id: 2,
            name: "#attr_set_item_texture_wear",
            type: 1,
            float_min: 0,
            float_max: 1,
            localized_label: "Wear Rating",
            hide_from_description: false,
          },
          {
            id: 3,
            name: "#attr_keychain_slot_seed",
            type: 2,
            int_min: "0",
            int_max: "100000",
            localized_label: "Charm Template",
            hide_from_description: false,
          },
          {
            id: 4,
            name: "#attr_sticker_slot_wear",
            type: 1,
            float_min: 0,
            float_max: 1,
            localized_label: "Sticker Scrape Level",
            hide_from_description: false,
          },
          {
            id: 5,
            name: "#attr_custom_name_attr",
            type: 3,
            localized_label: "Name Tag",
            hide_from_description: false,
          },
          {
            id: 6,
            name: "#attr_econ_action_preview",
            type: 3,
            localized_label: "Item Certificate",
            hide_from_description: true,
          },
          {
            id: 7,
            name: "#attr_set_item_texture_prefab",
            type: 2,
            int_min: "0",
            int_max: "1000",
            localized_label: "Finish Catalog",
            hide_from_description: false,
          },
        ],
      },
      dataUpdateCount: 2,
      dataUpdatedAt: 1778690244646,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["AssetPropertySchema", 730, "english"],
    queryHash: '["AssetPropertySchema",730,"english"]',
  },
  {
    state: {
      data: {
        item_type: 0,
        id: 730,
        success: 1,
        visible: true,
        name: "Counter-Strike 2",
        store_url_path: "app/730/CounterStrike_2",
        appid: 730,
        type: 0,
        included_types: [],
        included_appids: [],
        is_free: true,
        content_descriptorids: [2, 5],
        categories: {
          supported_player_categoryids: [1, 27],
          feature_categoryids: [29, 30, 35, 64, 66, 67, 68, 69, 70, 74, 8, 15, 41, 42, 43, 63],
          controller_categoryids: [],
        },
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244650,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["StoreItem", "app_730", "default_info"],
    queryHash: '["StoreItem","app_730","default_info"]',
  },
  {
    state: {
      data: {
        asset_url_format: "steam/apps/730/?t=1749053861",
        main_capsule: "capsule_616x353.jpg",
        small_capsule: "capsule_231x87.jpg",
        header: "header.jpg",
        page_background: "page_bg_generated_v6b.jpg",
        hero_capsule: "hero_capsule.jpg",
        library_capsule: "library_600x900.jpg",
        library_capsule_2x: "library_600x900_2x.jpg",
        library_hero: "library_hero.jpg",
        library_hero_2x: "library_hero_2x.jpg",
        community_icon: "8dbc71957312bbd3baea65848b545be9eae2a355",
        page_background_path: "app/730?t=1749053861",
        raw_page_background: "page_bg_raw.jpg",
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244650,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["StoreItem", "app_730", "include_assets"],
    queryHash: '["StoreItem","app_730","include_assets"]',
  },
  {
    state: {
      data: {
        _t: 10,
        v: [
          [
            1,
            {
              id: 1,
              name: "#attr_set_item_texture_seed",
              type: 2,
              int_min: "0",
              int_max: "1000",
              localized_label: "Pattern Template",
              hide_from_description: false,
            },
          ],
          [
            2,
            {
              id: 2,
              name: "#attr_set_item_texture_wear",
              type: 1,
              float_min: 0,
              float_max: 1,
              localized_label: "Wear Rating",
              hide_from_description: false,
            },
          ],
          [
            3,
            {
              id: 3,
              name: "#attr_keychain_slot_seed",
              type: 2,
              int_min: "0",
              int_max: "100000",
              localized_label: "Charm Template",
              hide_from_description: false,
            },
          ],
          [
            4,
            {
              id: 4,
              name: "#attr_sticker_slot_wear",
              type: 1,
              float_min: 0,
              float_max: 1,
              localized_label: "Sticker Scrape Level",
              hide_from_description: false,
            },
          ],
          [
            5,
            {
              id: 5,
              name: "#attr_custom_name_attr",
              type: 3,
              localized_label: "Name Tag",
              hide_from_description: false,
            },
          ],
          [
            6,
            {
              id: 6,
              name: "#attr_econ_action_preview",
              type: 3,
              localized_label: "Item Certificate",
              hide_from_description: true,
            },
          ],
          [
            7,
            {
              id: 7,
              name: "#attr_set_item_texture_prefab",
              type: 2,
              int_min: "0",
              int_max: "1000",
              localized_label: "Finish Catalog",
              hide_from_description: false,
            },
          ],
        ],
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244646,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["AssetPropertySchemaMap", 730, "english"],
    queryHash: '["AssetPropertySchemaMap",730,"english"]',
  },
  {
    state: {
      data: {
        ecurrency: 3,
        prices: [],
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244660,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["market", "pricehistory", 730, "Sealed Dead Hand Terminal"],
    queryHash: '["market","pricehistory",730,"Sealed Dead Hand Terminal"]',
  },
  {
    state: {
      data: {
        amtMaxBuyOrder: 191,
        amtMinSellOrder: 192,
        eCurrency: 3,
        cBuyOrders: 1543776,
        cSellOrders: 145826,
        rgCompactBuyOrders: [],
        rgCompactSellOrders: [],
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244659,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["market", "orderbook", 730, "Sealed Dead Hand Terminal"],
    queryHash: '["market","orderbook",730,"Sealed Dead Hand Terminal"]',
  },
  {
    state: {
      data: {
        version: 1,
        preference_state: 1,
        utm_enabled: true,
      },
      dataUpdateCount: 1,
      dataUpdatedAt: 1778690244665,
      error: null,
      errorUpdateCount: 0,
      errorUpdatedAt: 0,
      fetchFailureCount: 0,
      fetchFailureReason: null,
      fetchMeta: null,
      isInvalidated: false,
      status: "success",
      fetchStatus: "idle",
    },
    queryKey: ["CookiePreferences"],
    queryHash: '["CookiePreferences"]',
  },
]</span></pre>

<p>
	Does anyone know how I can query this new API endpoint myself? Previously, if I wanted to get the price history of an item, I would use this endpoint which returns only the pricehistory:<br />
	<a href="https://steamcommunity.com/market/pricehistory?market_hash_name=Sealed%20Dead%20Hand%20Terminal&amp;appid=730" rel="external nofollow">https://steamcommunity.com/market/pricehistory?market_hash_name=Sealed%20Dead%20Hand%20Terminal&amp;appid=730</a>
</p>

<p>
	How can I achieve the same result using the new endpoints?
</p>
]]></description><guid isPermaLink="false">5940</guid><pubDate>Tue, 19 May 2026 10:18:10 +0000</pubDate></item><item><title>community.getMarketItem is broken</title><link>https://dev.doctormckay.com/topic/5938-communitygetmarketitem-is-broken/</link><description><![CDATA[<p>
	Valve updated the SCM yesterday and now uses a market_bucket_group_id instead of market_hash_name to get item information. Using getMarketItem(appid, hashName, callback) keeps returning an error even if i manually switch the hashname with the market_bucket_group_id.
</p>
]]></description><guid isPermaLink="false">5938</guid><pubDate>Wed, 13 May 2026 13:28:44 +0000</pubDate></item><item><title>Take more than 20 skins in 1 request</title><link>https://dev.doctormckay.com/topic/5937-take-more-than-20-skins-in-1-request/</link><description><![CDATA[<p>
	Hi!<br />
	After latest update Steam reworked API, so now default length of skins that you can get from 1 request is 20.
</p>

<p>
	<strong>Does anyone know how to change quantity of skins in 1 request to 100(or any other value)?</strong>
</p>

<p>
	I couldn't find any info about this property in DevTools  
</p>
]]></description><guid isPermaLink="false">5937</guid><pubDate>Wed, 13 May 2026 11:34:36 +0000</pubDate></item><item><title>Decoding the CS2 GCWelcome Message</title><link>https://dev.doctormckay.com/topic/5933-decoding-the-cs2-gcwelcome-message/</link><description><![CDATA[<p>
	<span><span>Hi,</span></span>
</p>

<p>
	<span><span>I'm </span><span>trying </span><span>to </span><span>decode </span><span>the </span><code><span>GCWelcome</span></code><span> </span><span>message </span><span>from </span><span>the </span><span>Game </span><span>Coordinator. </span><span>Most </span><span>of </span><span>it </span><span>already </span><span>works, </span><span>but </span><span>there </span><span>are </span><span>two </span><span>fields </span><span>I </span><span>can't </span><span>find </span><span>any </span><span>documentation </span><span>for. </span><span>After </span><span>inspecting </span><span>the </span><span>GC </span><span>response </span><span>with </span><span>NetHook2 </span><span>Analyzer, </span><span>the </span><span>fields </span><code><span>game_data</span></code><span> </span><span>and </span><code><span>game_data2</span></code><span> </span><span>remain </span><span>unclear. </span><span>I </span><span>haven't </span><span>been </span><span>able </span><span>to </span><span>decode </span><span>them </span><span>or </span><span>find </span><span>any </span><span>information </span><span>about </span><span>their </span><span>structure.</span></span>
</p>

<p>
	<span><span>Does </span><span>anyone </span><span>know </span><span>how </span><span>these </span><span>fields </span><span>are </span><span>encoded </span><span>and </span><span>what </span><span>data </span><span>they </span><span>contain?</span></span>
</p>

<div>
	 
</div>
]]></description><guid isPermaLink="false">5933</guid><pubDate>Mon, 20 Apr 2026 09:31:13 +0000</pubDate></item><item><title>API</title><link>https://dev.doctormckay.com/topic/5842-api/</link><description><![CDATA[<p>
	Hello everyone,<br />
	Do you guys know what data? and access to what gives this API token? - I know that you are able to get trade history out of this - but I wasnt able to find any docs - anyone any docs any info? Thanks!<br />
	<br />
	<a href="https://steamcommunity.com/pointssummary/ajaxgetasyncconfig" rel="external nofollow">https://steamcommunity.com/pointssummary/ajaxgetasyncconfig</a>
</p>
]]></description><guid isPermaLink="false">5842</guid><pubDate>Sat, 12 Jul 2025 21:45:01 +0000</pubDate></item><item><title>Getting Steam Ticket</title><link>https://dev.doctormckay.com/topic/5931-getting-steam-ticket/</link><description><![CDATA[<p>
	I'm trying to make my own API calls for a game I play called The Outlast Trials to scrape data for a site I'm making. I have used Requestly to view network traffic of the game but for some reason it won't fully log me in to the game when I have Requestly capturing all system traffic so I can't view every call the game makes. I have been able to view the initial authentication though, which shows me my API key and I'm able to make calls for certain stat leaderboards because the game log file has occasional information about where it's sending API requests to. This is great for manually scraping data, but the API key only lasts 60 minutes. I have no way to refresh the token and I'm struggling to generate my own because of the Steam ticket.<br />
	The authentication call looks like this, and returns a valid key when successful.
</p>

<pre class="ipsCode prettyprint prettyprinted"><span class="pln">url </span><span class="pun">=</span><span class="pln"> </span><span class="str">"https://prod.rbg-services.com/auth/public/sessions"</span><span class="pln">

headers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="str">"accept"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"*/*"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"accept-encoding"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"gzip"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"accepts"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"application/json"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"content-type"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"application/json"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"host"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"prod.rbg-services.com"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"user-agent"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"X-OPP-Client"</span><span class="pun">,</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

payload </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="str">"steamApplicationId"</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1304930</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"platform"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"steam"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"applicationId"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"0e67af76-2839-4451-880b-471a48757e09"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"apiKey"</span><span class="pun">:</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"releaseKey"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"vbrzgw2mGlM5Axa9Ier4ApOQYjuVfG"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"language"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"en"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"acceptedPolicyDocuments"</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[],</span><span class="pln">
    </span><span class="str">"platformAppId"</span><span class="pun">:</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"clientEnvironment"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"prod"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"eosIdToken"</span><span class="pun">:</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"ticket"</span><span class="pun">:</span><span class="pln"> </span><span class="str">"1400000057CCF54021E8213ACBC7851A01001001E1F3C669180000000100000005000000B97E69F3378D98133C0E9A0005000000B80000003800000004000000CBC7851A0100100162E913002F16BF26714B088A00000000DB88C7695B38E36901003F070F00010042103A0000000000914F34EA6FAFD8B191CDB648EAB978CCE7D52896BA455C2EC3092DEEFA2890393C7C13E04228CD368EF5724D2C921C12189D12220F25A1DB8D1E52B1AA8D139849A9FF5CFE8AA82787AE56D1D92F501135D20CE650F27408C923FDF71F82645835175DB5AC64E487F1412B765BE528989582557B7ED1E95D9C94A31CD6161156"</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	I've left out my eosIdToken because I've already figured out how to generate that but the ticket in that code was a valid ticket. I've noticed they all start with 14000000<br />
	I've tried using <a href="https://github.com/ValvePython/steam" rel="external nofollow">https://github.com/ValvePython/steam</a> and the two methods, 'get_encrypted_app_ticket(1304930, b"")' and 'get_app_ticket(1304930)' but when I do this and convert the ticket to hex, I am given a much shorter string<br />
	<br />
	E0BB0AE58DF917D6F1D1B4308300C253039CCBED224918AFAD639B156E425CFD91575EE2521A6F122B9B2D74B23862D127DA156CB63D0D222D3D6470E8999413F0253E087A4CA727FA439BC8AA7DE2867F0EC7AF64DD88E2881CC9A079A61CFD003709A3B72A841B9D6C4718AA630E9B19E25A1905E651CFF38D13515C5BC034 for encrypted<br />
	and <br />
	77D882516B73FE44CCD75225B0CCB5033B7D0B5AA6D67A28623057E31600E940B3817148BEE2E9EFD81BB283A57E231AB9A2876BA87626A2A57F1BC34051679518C0E92AF7621712E895E7D22B96EEB2A569A15448A8BFAAF4389F91E53FE43278944A16A9520A10462D7A0A7241F0CB7EE203588970BFE262300D9F41AB6C3 for non encrypted<br />
	<br />
	When I try these strings as the ticket, I'm returned "Unexpected response format when processing steam authentication. Params key not found in body."<br />
	I'm not sure if the ticket includes other data before the Steam ticket but I'm super confused on what to do next. Any help is appreciated if this is even possible, I'm not very experienced with this stuff at all
</p>
]]></description><guid isPermaLink="false">5931</guid><pubDate>Sat, 28 Mar 2026 08:43:05 +0000</pubDate></item><item><title>New CS2 inspect links</title><link>https://dev.doctormckay.com/topic/5926-new-cs2-inspect-links/</link><description><![CDATA[<p>
	Hello everybody. Did you notice that valve just changed the representation of cs inspect links?<br />
	<br />
	This is how it looks now:<br />
	steam://run/730//+csgo_econ_action_preview%2092826859045B28938A6E91B20991BA94A291AA016F546091D24895FAE5E29A90E5B003<br />
	<br />
	<br />
	Any ideas how to get asset id, server inspect id or owner id from it? Any ideas why they did that?
</p>
]]></description><guid isPermaLink="false">5926</guid><pubDate>Sun, 15 Mar 2026 13:49:21 +0000</pubDate></item><item><title>node-tf2 parsing attribute value_bytes</title><link>https://dev.doctormckay.com/topic/5927-node-tf2-parsing-attribute-value_bytes/</link><description><![CDATA[<p>
	I have several items in a tf2 backpack which have attributes I would like to read on backpack load. For example, I have a professional killstreak item which sheen and killstreaker I would like to read using node-tf2:
</p>

<pre class="ipsCode">"attribute":
	[{
    	"def_index":2013,
        "value":null,
        "value_bytes":
        {
        	"type":"Buffer",
            "data": [0,160,250,68]
        }
     },
     {
     	"def_index":2014,
        "value":null,
        "value_bytes":
        {
        	"type":"Buffer",
            "data":[0,0,192,64]
        }
    },
    {
    	"def_index":2025,
        "value":null,
        "value_bytes":
        {
        	"type":"Buffer",
            "data":[0,0,64,64]
        }
    }]</pre>

<p>
	While I know that def_index is referring through the attribute's id in items_game.txt, I'm struggling to figure out how to convert the attribute's value_bytes into a human-readable value. Is there any documentation on this?
</p>

<p>
	Value_bytes also seems to be able to be something other than a single integer, such as when defined by fabricators to list their crafting recipe. I'd also like to know how to parse these as well.
</p>
]]></description><guid isPermaLink="false">5927</guid><pubDate>Thu, 19 Mar 2026 04:21:48 +0000</pubDate></item><item><title>asset_properties and cache warm up</title><link>https://dev.doctormckay.com/topic/5925-asset_properties-and-cache-warm-up/</link><description><![CDATA[<p>
	<span lang="en" xml:lang="en"><span><span>It's quite convenient that the inventory response now includes asset_properties.</span></span> </span>
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">assets (100)
descriptions (92)
asset_properties (98)
more_items 1
last_assetid "44889606861"
total_inventory_count 983
success 1
rwgrsn-2</span></pre>

<p>
	<span lang="en" xml:lang="en"><span><span>However, for huge inventories, Steam doesn't include them in the response, their cache needs to be warmed up.</span></span><span><span> This is bad because for an inventory of 999 items, you need to make as many as 5 requests along the chain count=75-&gt;150-&gt;300-&gt;600-&gt;1000 . Whereas Steam does this in 2 requests:</span></span></span>
</p>

<p>
	<a href="https://steamcommunity.com/inventory/_/730/2?l=en&amp;count=75&amp;preserve_bbcode=1&amp;raw_asset_properties=1" rel="external nofollow">https://steamcommunity.com/inventory/_/730/2?l=en&amp;count=75&amp;preserve_bbcode=1&amp;raw_asset_properties=1</a>
</p>

<p>
	<a href="https://steamcommunity.com/inventory/_/730/2?l=en&amp;count=2000&amp;preserve_bbcode=1&amp;raw_asset_properties=1&amp;start_assetid=44889606861" rel="external nofollow">https://steamcommunity.com/inventory/_/730/2?l=en&amp;count=2000&amp;preserve_bbcode=1&amp;raw_asset_properties=1&amp;start_assetid=44889606861</a>
</p>

<p>
	<span lang="en" xml:lang="en"><span><span>Any attempts to repeat the process with count=2000 on the second request don't give me a result with asset_properties.</span></span></span> Same cookies, same delay, same headers<br />
	<br />
	Any thoughts?
</p>
]]></description><guid isPermaLink="false">5925</guid><pubDate>Sun, 15 Mar 2026 12:44:47 +0000</pubDate></item><item><title>node-globaloffensive, inspectItem - Parsing masked inspect links</title><link>https://dev.doctormckay.com/topic/5746-node-globaloffensive-inspectitem-parsing-masked-inspect-links/</link><description><![CDATA[<p>
	Hey, wassup,<br />
	<br />
	have a quick question, please. I'am trying to parse out item information from an inspect link, for my project. Parsing out normal links isn't an issue at all. The issue comes when I want to parse out custom generated, masked inspect links, just like this one
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">steam://rungame/730/76561202255233023/+csgo_econ_action_preview%2000180920D8022806300438FF8AE9D90340E30213DDF8BB</span></pre>

<p>
	Since there are no S A D M params, it can't be processed via the inspectItem function.<br />
	<br />
	I did some digging and it seams like these links are made using this code base<br />
	<a href="https://github.com/Helyux/cs2inspect" rel="external nofollow">https://github.com/Helyux/cs2inspect</a><br />
	Where it gets the base item information, which is then coded into the link using hex parsing and protobuf (I think).<br />
	<br />
	Since this kind of link still works and opens up the game client, I was wondering, if the item information can still be gathered?<br />
	If so, how?<br />
	<br />
	Thanks in advance for a reply <span class="ipsEmoji">❤️</span>
</p>
]]></description><guid isPermaLink="false">5746</guid><pubDate>Sat, 31 May 2025 09:50:02 +0000</pubDate></item><item><title>[node-globaloffensive] GC timeouts</title><link>https://dev.doctormckay.com/topic/5922-node-globaloffensive-gc-timeouts/</link><description><![CDATA[<p>
	Hey, gc works half of the time, the second half just timeouts, i see this behaviour for atleast a week, does anybody know what could be the cause of it?
</p>
]]></description><guid isPermaLink="false">5922</guid><pubDate>Mon, 09 Mar 2026 11:34:34 +0000</pubDate></item><item><title>Connect whole Bot via Proxy (https?)</title><link>https://dev.doctormckay.com/topic/1719-connect-whole-bot-via-proxy-https/</link><description><![CDATA[<p>Hello,</p><p> </p><p>I want to connect all my bots via proxy servers to give them separate IP's to connect them to steam for trading and getting users inventory.</p><p>Yesterday I tried around many hours and could not find any workings solution.</p><p> </p><p>I end up with this code: (free proxy's to test only)</p><pre class="ipsCode prettyprint">
const steam = require('steam-client');
const request = require('request');
require('request-debug')(request);
const SteamUser = require('steam-user');
const SteamCommunity = require('steamcommunity');
const SteamTotp = require('steam-totp');
const TradeOfferManager = require('steam-tradeoffer-manager');

let proxyUrl = 'https://119.28.152.208:80';
let proxifiedRequest = request.defaults({'proxy': proxyUrl});

let community = new SteamCommunity({request: proxifiedRequest});
//
// let community = new SteamCommunity();

let steamclient = new steam.CMClient();
steamclient.setHttpProxy('https://119.28.152.208:80');
let client = new SteamUser(steamclient);

let manager = new TradeOfferManager({
    "community": community,
    "steam": client, // Polling every 30 seconds is fine since we get notifications from Steam
    "domain": "localhost", // Our domain is example.com
    "language": "en" // We want English item descriptions
});

steamclient.on('error', (...data) =&gt; console.log('client-error', ...data));
steamclient.on('debug', (...data) =&gt; console.log('client-debug', ...data));
// user.on('debug', (...data) =&gt; console.log('user-debug', ...data));
// user.on('error', (...data) =&gt; console.log('user-error', ...data));

// Steam logon options
let logOnOptions = {
    "accountName": config.steamAccountName,
    "password": config.steamAccountPassword,
    "twoFactorCode": SteamTotp.generateAuthCode(config.sharedSecret)
};

client.logOn(logOnOptions);

let botOnline = false;
client.on('loggedOn', function() {
    botOnline = true;
    console.log("Logged into Steam");
});

setTimeout(function () {
    if (!botOnline) {
        console.log("BOT TIMEOUT - RESTART");
        process.exit();
    }
}, 90 * 1000);

client.on('webSession', function(sessionID, cookies) {
    manager.setCookies(cookies, function(err) {
        if (err) {
            console.log("Fatal error since we couldn't get our API key");
            console.log(err);
            setTimeout(() =&gt; {
                process.exit(1);
            }, 60000);
            return;
        }

        console.log("Got API key: " + manager.apiKey);

        [........]
</pre><p>but if I run this script, I instantly get an error back:</p><pre class="ipsCode prettyprint">
error: uncaughtException: Protocol "https:" not supported. Expected "http:"
Error: Protocol "https:" not supported. Expected "http:"
    at new ClientRequest (_http_client.js:55:11)
    at Object.exports.request (http.js:31:10)
    at TCPConnection.connect (C:\xampp\htdocs\...\node_modules\steam-client\lib\tcp_connection.js:56:34)
    at _getServer (C:\xampp\htdocs\...\node_modules\steam-client\lib\cm_client.js:119:20)
    at CMClient._getServer (C:\xampp\htdocs\...\node_modules\steam-client\lib\cm_client.js:442:3)
    at CMClient.connect (C:\xampp\htdocs\...\node_modules\steam-client\lib\cm_client.js:97:7)
    at gotCMList (C:\xampp\htdocs\...\node_modules\steam-user\components\logon.js:171:17)
    at readFileCallback (C:\xampp\htdocs\...\node_modules\steam-user\components\logon.js:117:4)
    at C:\xampp\htdocs\...\node_modules\file-manager\node_modules\async\lib\async.js:52:16
</pre><p>the code above uses a https proxy to connect. If I use a http proxy, my console logs looks like</p><pre class="ipsCode prettyprint">
Starting services...
client-debug connecting to 155.133.230.34:27019
client-debug proxy timed out
client-debug socket closed
client-debug connecting to 162.254.193.7:27019
</pre><p>or like</p><pre class="ipsCode prettyprint">
client-error { Error: HTTP CONNECT 400 Bad Request
    at ClientRequest.&lt;anonymous&gt; (C:\xampp\htdocs\...\node_modules\steam-client\lib\tcp_connection.js:70:14)
    at emitThree (events.js:116:13)
    at ClientRequest.emit (events.js:194:7)
    at Socket.socketOnData (_http_client.js:395:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    at TCP.onread (net.js:548:20) eresult: 35 }

</pre><p><b>Does anyone have a working example to connect bots via proxy server?</b></p><p><b>Whats wrong with my code and does it have something to do with steam's change to https in the past? (oAuth login for example which returns https now)</b></p><p> </p><p><b>Thanks &lt;3</b></p>]]></description><guid isPermaLink="false">1719</guid><pubDate>Thu, 26 Apr 2018 17:58:13 +0000</pubDate></item><item><title>Account deletion link not working</title><link>https://dev.doctormckay.com/topic/5917-account-deletion-link-not-working/</link><description><![CDATA[<p>
	Hello!
</p>

<p>
	I just tried to delete my account.
</p>

<p>
	After receiving the account deletion e-mail and clicking on the link it doesn't work. 
</p>

<p>
	Can someone please delete my account, thanks!
</p>
]]></description><guid isPermaLink="false">5917</guid><pubDate>Thu, 15 Jan 2026 19:25:15 +0000</pubDate></item><item><title>Disparency between recentSteam Logins and teh Authorized devices</title><link>https://dev.doctormckay.com/topic/5914-disparency-between-recentsteam-logins-and-teh-authorized-devices/</link><description><![CDATA[<p>
	I am seeing a weird pattern the logins are all in the right place but steam shows authorized devices sometimes way off target and issues the your steam account was accessed by some one else y is that hapening any clue we use trading sites also so they collect our steam token too.
</p>

<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2563.png.c97c867c7d27428630a7e8cd0fa54306.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="578" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2563.thumb.png.b153760fd07da90551824a17d4dc61f8.png" data-ratio="114.5" width="655" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2563.png"></a></p>
<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2564.png.3c52b28f255af5568015e0e5889689fb.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="579" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2564.png.3c52b28f255af5568015e0e5889689fb.png" data-ratio="79.67" width="782" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2564.png"></a></p>
<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2565.png.462ee0a753641262d32507f4a2f8aa43.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="580" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2565.png.462ee0a753641262d32507f4a2f8aa43.png" data-ratio="25.06" width="826" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2565.png"></a></p>
<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2566.png.d6da62e48bd78eac7015a1ef7720a395.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="581" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2566.png.d6da62e48bd78eac7015a1ef7720a395.png" data-ratio="13.33" width="705" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2566.png"></a></p>
<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2567.png.8543c8035f9c51d3a6d3c5d781ec4b9a.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="582" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2567.thumb.png.e94db3bbd829eb4696dcf665444f3329.png" data-ratio="131.81" width="569" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2567.png"></a></p>
<p><a href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2568.png.3d96353e9d1c9be2a326202dbd478792.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="583" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2568.thumb.png.30b9d46d05ce198475408b718e568066.png" data-ratio="144.79" width="518" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_2568.png"></a></p><blockquote class="ipsQuote" data-ipsquote="" data-ipsquote-contentapp="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="14672" data-ipsquote-contentid="5914" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1766489817" data-ipsquote-userid="6401" data-ipsquote-username="TheMaster">
	<div class="ipsQuote_citation">
		14 minutes ago, TheMaster said:
	</div>

	<div class="ipsQuote_contents">
		<p>
			I am seeing a weird pattern the logins are all in the right place but steam shows authorized devices sometimes way off target and issues the your steam account was accessed by some one else y is that hapening any clue we use trading sites also so they collect our steam token too.
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="578" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2563.png.c97c867c7d27428630a7e8cd0fa54306.png" data-fileext="png" rel=""><img alt="Screenshot_2563.png" class="ipsImage ipsImage_thumbnailed" data-fileid="578" data-ratio="114.5" style="height:auto;" width="655" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2563.thumb.png.b153760fd07da90551824a17d4dc61f8.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="579" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2564.png.3c52b28f255af5568015e0e5889689fb.png" data-fileext="png" rel=""><img alt="Screenshot_2564.png" class="ipsImage ipsImage_thumbnailed" data-fileid="579" data-ratio="79.67" style="height:auto;" width="782" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2564.png.3c52b28f255af5568015e0e5889689fb.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="580" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2565.png.462ee0a753641262d32507f4a2f8aa43.png" data-fileext="png" rel=""><img alt="Screenshot_2565.png" class="ipsImage ipsImage_thumbnailed" data-fileid="580" data-ratio="25.06" style="height:auto;" width="826" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2565.png.462ee0a753641262d32507f4a2f8aa43.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="581" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2566.png.d6da62e48bd78eac7015a1ef7720a395.png" data-fileext="png" rel=""><img alt="Screenshot_2566.png" class="ipsImage ipsImage_thumbnailed" data-fileid="581" data-ratio="13.33" style="height:auto;" width="705" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2566.png.d6da62e48bd78eac7015a1ef7720a395.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="582" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2567.png.8543c8035f9c51d3a6d3c5d781ec4b9a.png" data-fileext="png" rel=""><img alt="Screenshot_2567.png" class="ipsImage ipsImage_thumbnailed" data-fileid="582" data-ratio="131.81" style="height:auto;" width="569" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2567.thumb.png.e94db3bbd829eb4696dcf665444f3329.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="583" href="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2568.png.3d96353e9d1c9be2a326202dbd478792.png" data-fileext="png" rel=""><img alt="Screenshot_2568.png" class="ipsImage ipsImage_thumbnailed" data-fileid="583" data-ratio="144.79" style="height:auto;" width="518" data-src="https://dev.doctormckay.com/uploads/monthly_2025_12/Screenshot_2568.thumb.png.30b9d46d05ce198475408b718e568066.png" src="https://dev.doctormckay.com/applications/core/interface/js/spacer.png" /></a>
		</p>
	</div>
</blockquote>

<p>
	<a contenteditable="false" data-ipshover="" data-ipshover-target="https://dev.doctormckay.com/profile/1-dr-mckay/?do=hovercard" data-mentionid="1" href="https://dev.doctormckay.com/profile/1-dr-mckay/" rel="">@Dr. McKay</a>
</p>
]]></description><guid isPermaLink="false">5914</guid><pubDate>Tue, 23 Dec 2025 11:36:57 +0000</pubDate></item><item><title>Creating and tracking an order: how to place a purchase and find out its status and cost</title><link>https://dev.doctormckay.com/topic/5915-creating-and-tracking-an-order-how-to-place-a-purchase-and-find-out-its-status-and-cost/</link><description><![CDATA[<p>
	Hello everyone
</p>

<p>
	How and by what method can I create an order to purchase an item and then find out the status of the order? And then where can I find out exactly how much money the item was bought for?
</p>
]]></description><guid isPermaLink="false">5915</guid><pubDate>Tue, 23 Dec 2025 22:13:23 +0000</pubDate></item><item><title>Nethook</title><link>https://dev.doctormckay.com/topic/5909-nethook/</link><description><![CDATA[<p>
	There is any guide how to properly inject nethook.dll into steam.exe? <br />
	 
</p>
]]></description><guid isPermaLink="false">5909</guid><pubDate>Sat, 15 Nov 2025 23:10:05 +0000</pubDate></item><item><title>best way to check if an item is used in node-tf2</title><link>https://dev.doctormckay.com/topic/5904-best-way-to-check-if-an-item-is-used-in-node-tf2/</link><description><![CDATA[<p>
	Hi,<br />
	i wrote a script to use backpack expander to not run game anymore<br />
	<br />
	this script is simple<br />
	1. log in to steam <br />
	2. run the tf2<br />
	3. get backpack data and slots amount<br />
	4. find the backpack expander<br />
	5. use backpack<br />
	6. check for more backpack and do process 5 again<br />
	<br />
	my main question is that how can i check if i used item cuase the "useItem" method dont throw any thing and i tried that <br />
	and also i have found two events "itemRemoved" and "accountUpdate"<br />
	<br />
	which one should i check ?<br />
	<br />
	i know i should try it my self but it take time and also cost me some backpacks to find out the answer<br />
	<br />
	here is my code that i wrote about useItem method:<br />
	<br />
	 
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">function</span><span class="pln"> checkForExpanders</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">tf2</span><span class="pun">.</span><span class="pln">backpack </span><span class="pun">||</span><span class="pln"> tf2</span><span class="pun">.</span><span class="pln">backpack</span><span class="pun">.</span><span class="pln">length </span><span class="pun">===</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">⏳</span> Backpack not loaded yet..."</span><span class="pun">);</span><span class="pln">
    setTimeout</span><span class="pun">(()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> checkForExpanders</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">const</span><span class="pln"> expanders </span><span class="pun">=</span><span class="pln"> tf2</span><span class="pun">.</span><span class="pln">backpack</span><span class="pun">.</span><span class="pln">filter</span><span class="pun">((</span><span class="pln">item</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> defindex </span><span class="pun">=</span><span class="pln"> item</span><span class="pun">.</span><span class="pln">def_index </span><span class="pun">||</span><span class="pln"> item</span><span class="pun">.</span><span class="pln">defIndex </span><span class="pun">||</span><span class="pln"> item</span><span class="pun">.</span><span class="pln">defindex</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> schemaItem </span><span class="pun">=</span><span class="pln"> tf2</span><span class="pun">.</span><span class="pln">itemSchema</span><span class="pun">?.</span><span class="pln">itemsByDefindex</span><span class="pun">?.[</span><span class="pln">defindex</span><span class="pun">];</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> name </span><span class="pun">=</span><span class="pln"> schemaItem</span><span class="pun">?.</span><span class="pln">item_name</span><span class="pun">?.</span><span class="pln">toLowerCase</span><span class="pun">()</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> defindex </span><span class="pun">===</span><span class="pln"> </span><span class="lit">5050</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> name</span><span class="pun">.</span><span class="pln">includes</span><span class="pun">(</span><span class="str">"backpack expander"</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">});</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">expanders</span><span class="pun">.</span><span class="pln">length </span><span class="pun">===</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">❌</span> No Backpack Expander found in your inventory."</span><span class="pun">);</span><span class="pln">
    askToCheckAgain</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(`<span class="ipsEmoji">🧳</span></span><span class="pln"> </span><span class="typ">Found</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">expanders</span><span class="pun">.</span><span class="pln">length</span><span class="pun">}</span><span class="pln"> </span><span class="typ">Backpack</span><span class="pln"> </span><span class="typ">Expander</span><span class="pun">(</span><span class="pln">s</span><span class="pun">).`);</span><span class="pln">
  </span><span class="kwd">const</span><span class="pln"> expander </span><span class="pun">=</span><span class="pln"> expanders</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">

  rl</span><span class="pun">.</span><span class="pln">question</span><span class="pun">(</span><span class="pln">
    </span><span class="str">"<span class="ipsEmoji">❓</span> Do you want to use a Backpack Expander? (y/n): "</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">(</span><span class="pln">answer</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">answer</span><span class="pun">.</span><span class="pln">toLowerCase</span><span class="pun">()</span><span class="pln"> </span><span class="pun">===</span><span class="pln"> </span><span class="str">"y"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(`<span class="ipsEmoji">🔧</span></span><span class="pln"> </span><span class="typ">Trying</span><span class="pln"> to use </span><span class="typ">Backpack</span><span class="pln"> </span><span class="typ">Expander</span><span class="pun">...</span><span class="pln"> </span><span class="pun">(</span><span class="pln">item_id</span><span class="pun">:</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">expander</span><span class="pun">.</span><span class="pln">id</span><span class="pun">})`);</span><span class="pln">
        tf2</span><span class="pun">.</span><span class="pln">useItem</span><span class="pun">(</span><span class="pln">expander</span><span class="pun">.</span><span class="pln">id</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="pln">err</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">err</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            console</span><span class="pun">.</span><span class="pln">error</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">❌</span> Failed to use item:"</span><span class="pun">,</span><span class="pln"> err</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">✅</span> Used Backpack Expander successfully."</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="pln">

          setTimeout</span><span class="pun">(()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">🔄</span> Refreshing backpack info..."</span><span class="pun">);</span><span class="pln">
            showBackpackInfo</span><span class="pun">();</span><span class="pln">
            setTimeout</span><span class="pun">(()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> checkForExpanders</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">},</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">});</span><span class="pln">
      </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"<span class="ipsEmoji">❎</span> Operation cancelled by user."</span><span class="pun">);</span><span class="pln">
        askToCheckAgain</span><span class="pun">();</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">5904</guid><pubDate>Tue, 04 Nov 2025 10:17:34 +0000</pubDate></item><item><title>How to Decode out_of_date_subscribed_caches from GC clientWelcome Message?</title><link>https://dev.doctormckay.com/topic/5889-how-to-decode-out_of_date_subscribed_caches-from-gc-clientwelcome-message/</link><description><![CDATA[<p>
	I'm currently trying to decode the <code>out_of_date_subscribed_caches</code> from the CS2 GC <code>clientWelcome</code> message. However, I don’t know where to find the definitions or <code>type_ids</code> needed to parse the object data. I noticed that Node-GlobalOffensive is only parsing <code>type_id</code> 1.
</p>

<p>
	I want to retrieve the current XP of the account as well as additional information. Therefore, I would like to parse all <code>type_ids</code> if possible.
</p>

<p>
	Here is the <code>out_of_date_subscribed_caches</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">[
  {
    objects: [
      {
        object_data: [
          new Uint8Array([8, 5, 24, 1, 32, 144, 250, 241, 198, 6, 40, 2]),
        ],
        type_id: 2,
      },
      {
        object_data: [
          new Uint8Array([8, 246, 220, 169, 198, 6, 16, 0, 24, 238, 165, 128, 128, 128, 128, 128, 128, 240, 1, 24, 197, 185, 213, 236, 172, 1, 24, 191, 128, 196, 169, 128, 128, 128, 128, 240, 1, 24, 199, 185, 213, 236, 172, 1]),
        ],
        type_id: 4,
      },
      {
        object_data: [
          new Uint8Array([8, 238, 146, 176, 198, 6, 16, 200, 1, 24, 224, 93, 24, 224, 93, 24, 224, 93, 24, 224, 93, 24, 224, 93]),
        ],
        type_id: 6,
      },
      {
        object_data: [
          new Uint8Array([8, 0, 101, 144, 66, 211, 104, 104, 131, 130, 128, 128, 6, 112, 5, 120, 5]),
        ],
        type_id: 7,
      },
      {
        object_data: [
          new Uint8Array([8, 161, 159, 128, 128, 128, 128, 128, 128, 240, 1, 16, 188, 197, 224, 214, 6, 24, 133, 128, 128, 128, 12, 32, 161, 31, 56, 4, 64, 24, 72, 8, 152, 1, 1]),
          new Uint8Array([8, 164, 128, 244, 131, 128, 128, 128, 128, 240, 1, 16, 188, 197, 224, 214, 6, 24, 133, 128, 128, 128, 12, 32, 36, 56, 1, 64, 24, 72, 8, 98, 8, 8, 6, 26, 4, 0, 0, 250, 66, 152, 1, 4]),
          new Uint8Array([8, 197, 185, 213, 236, 172, 1, 16, 188, 197, 224, 214, 6, 24, 1, 32, 13, 56, 4, 64, 0, 72, 24, 98, 9, 8, 149, 2, 26, 4, 1, 0, 0, 0, 98, 8, 8, 6, 26, 4, 0, 96, 159, 68, 98, 8, 8, 7, 26, 4, 176, 248, 62, 68, 98, 8, 8, 8, 26, 4, 221, 253, 49, 62, 152, 1, 1]),
          new Uint8Array([8, 199, 185, 213, 236, 172, 1, 16, 188, 197, 224, 214, 6, 24, 1, 32, 196, 10, 56, 4, 64, 0, 72, 24, 98, 9, 8, 149, 2, 26, 4, 1, 0, 0, 0, 98, 8, 8, 113, 26, 4, 175, 6, 0, 0, 98, 9, 8, 233, 1, 26, 4, 9, 0, 0, 0, 152, 1, 1]),
        ],
        type_id: 1,
      },
    ],
    version: "29496881091084074",
    owner_soid: {
      type: 1,
      id: "76561XXXXXXXX",
    },
  },
]</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">5889</guid><pubDate>Fri, 19 Sep 2025 11:52:07 +0000</pubDate></item><item><title>How to determine which party reverted a Steam trade?</title><link>https://dev.doctormckay.com/topic/5907-how-to-determine-which-party-reverted-a-steam-trade/</link><description><![CDATA[<p>
	I'm trying to find out if there is any reliable way to see who initiated a trade rollback. The <code>GetTradeHistory API</code> endpoint does not provide any field identifying whether party performed the revert action.<br />
	<br />
	Is there any endpoint, internal flag, or alternative method available to accurately determine which party reverted a trade?
</p>
]]></description><guid isPermaLink="false">5907</guid><pubDate>Mon, 10 Nov 2025 23:18:08 +0000</pubDate></item><item><title>[node-globaloffensive] Genesis Collectibles Offer Inventory Glitch (Missing Items)</title><link>https://dev.doctormckay.com/topic/5905-node-globaloffensive-genesis-collectibles-offer-inventory-glitch-missing-items/</link><description><![CDATA[<p>
	I opened three Genesis Collectibles offers, but I can only see one offer item in my inventory. How can I view all the offer items at once?<br />
	After a while, I can't even see a single offer item anymore.
</p>
]]></description><guid isPermaLink="false">5905</guid><pubDate>Tue, 04 Nov 2025 11:47:10 +0000</pubDate></item><item><title>SteamCommunity RateLimit on /market Endpoint</title><link>https://dev.doctormckay.com/topic/5899-steamcommunity-ratelimit-on-market-endpoint/</link><description><![CDATA[<p>
	Hi guys,
</p>

<p>
	I’ve noticed that over the last couple of months, the issue with requesting data from the Steam Community has been getting worse.<br />
	Especially when I try to fetch market listings for high-value CS2 items — for example, those with Doppler finishes or paints — I often get an empty response with no listings, or occasionally a 429 error. This seems strange because I’m only making around 100–200 individual CS2 item requests per day. Each request is sent through one of five residential proxies I control.
</p>

<p>
	Even when I use a normal browser while logged into one of my accounts, I have to refresh and try several times before I can see any listings for certain items on the Steam Community Market. This doesn’t seem to be IP or Account related, since I experience the same issue even with clean mobile IPs and other Accounts.
</p>

<p>
	So I’m wondering if anyone else is experiencing this as well, and if there’s anything that can be done about it.
</p>
]]></description><guid isPermaLink="false">5899</guid><pubDate>Sun, 12 Oct 2025 16:00:43 +0000</pubDate></item><item><title>How do I get the original base price in dollars on Steam?</title><link>https://dev.doctormckay.com/topic/5898-how-do-i-get-the-original-base-price-in-dollars-on-steam/</link><description><![CDATA[<p>
	How can I get the price of any game in dollars, regardless of region? I know that when a developer releases a game, they set the price in dollars, and then Steam sets the prices for the game regionally. I need to get the price in dollars, regardless of region. I want to get the regional Steam exchange rate. How can I do this? Steamdb.info isn't of interest; I need a method for getting prices.
</p>
]]></description><guid isPermaLink="false">5898</guid><pubDate>Wed, 08 Oct 2025 22:48:30 +0000</pubDate></item><item><title>Is there an update with the rate limits?</title><link>https://dev.doctormckay.com/topic/5897-is-there-an-update-with-the-rate-limits/</link><description><![CDATA[<p>
	My bot running in my homelab runs fine(login, retrieve inventory, send offer)
</p>

<p>
	But when I login it on a browser and go to inventory page, it hits me with too many requests. I tried to access in both local and office IP. This started 2 weeks ago?<br />
	<br />
	I don't run the bots in my office IP and I am not doing anything other than opening steam client and chat on my main and occasionally check my bot inventory page.
</p>
]]></description><guid isPermaLink="false">5897</guid><pubDate>Mon, 06 Oct 2025 04:34:30 +0000</pubDate></item><item><title>Mobile Confirmation of incoming tradeoffer</title><link>https://dev.doctormckay.com/topic/5894-mobile-confirmation-of-incoming-tradeoffer/</link><description><![CDATA[<p>
	hi McKay.<br />
	After you initiated tradeoffer, there also need second confirmation through Steam mobile application.<br />
	<span lang="en" xml:lang="en"><span><span>I'm building a user-friendly system that does it for the user (the user just clicks the "Submit Trade" button, and behind the scenes, initialization and confirmation occurs). I'm partially certain that a mafile is needed.</span></span> <span><span>But my users log in through Steam and that's it; nothing else is required of them.</span></span><span><span> Some Chinese have already implemented this.</span></span> <span><span>I can't find any information about how this is done without the mafile secrets.</span></span><span><span><br />
	I'm asking here because you've worked with Steam much more than I have.</span></span><span><span> Am I missing something?</span></span></span>
</p>
]]></description><guid isPermaLink="false">5894</guid><pubDate>Wed, 01 Oct 2025 12:45:11 +0000</pubDate></item></channel></rss>
