Jump to content
McKay Development

All Activity

This stream auto-updates

  1. Today
  2. Hi, My guess is that they changed it when they made listed items on the Community Market remain in your inventory. Since there were previously two inspect link structures, one for the market and one for the inventory, they seem to have merged them into one general inspect link structure ("masked" inspect link) You can extract the asset ID from it (itemid), but I do not think the steamid ("ownerid") can be extracted from it. You can decode from the "Item certificate" (here being: 92826859045B28938A6E91B20991BA94A291AA016F546091D24895FAE5E29A90E5B003) To the protobuf (CEconItemPreviewDataBlock) and from there also the item details: { "defindex": 508, "inventory": 119, "itemid": "50082457082", "origin": 8, "paintindex": 411, "paintseed": 986, "paintwear": 1045544595, "paintwear_float": 0.20482854545116425, "quality": 3, "rarity": 6 } I "vibe-coded" also a repo for this: Repository So in short the repo does this: Hex-decodes the certificate. Uses the first byte as the XOR key. XORs every byte with that key. Drops the leading `00` byte. Drops the trailing 4-byte trailer/checksum. Returns the remaining bytes as the protobuf payload. Also i saw that, with this change, the market history (and trade history) no longer expose valid inspect links anymore only references to , at least for "skins"/non-common items.
  3. Hi. Now all inspect links are masked here is my libs to parse https://github.com/vlydev/cs2-masked-inspect-php https://github.com/vlydev/cs2-masked-inspect-js https://github.com/vlydev/cs2-masked-inspect-python
  4. Yesterday
  5. Hello everybody. Did you notice that valve just changed the representation of cs inspect links? This is how it looks now: steam://run/730//+csgo_econ_action_preview%2092826859045B28938A6E91B20991BA94A291AA016F546091D24895FAE5E29A90E5B003 Any ideas how to get asset id, server inspect id or owner id from it? Any ideas why they did that?
  6. It's quite convenient that the inventory response now includes asset_properties. assets (100) descriptions (92) asset_properties (98) more_items 1 last_assetid "44889606861" total_inventory_count 983 success 1 rwgrsn-2 However, for huge inventories, Steam doesn't include them in the response, their cache needs to be warmed up. This is bad because for an inventory of 999 items, you need to make as many as 5 requests along the chain count=75->150->300->600->1000 . Whereas Steam does this in 2 requests: https://steamcommunity.com/inventory/_/730/2?l=en&count=75&preserve_bbcode=1&raw_asset_properties=1 https://steamcommunity.com/inventory/_/730/2?l=en&count=2000&preserve_bbcode=1&raw_asset_properties=1&start_assetid=44889606861 Any attempts to repeat the process with count=2000 on the second request don't give me a result with asset_properties. Same cookies, same delay, same headers Any thoughts?
  7. Last week
  8. I tested using your method and was able to successfully retrieve the star balance, but the redemption times out - possibly due to protocol mismatch. Could you please share if you have any updated strategies? The following is the log: [Armory batch open] Request openCount(stars)=400 [Armory batch open] Reusing existing login session [Armory] getArmoryBalance source: xpShop (type_id 6), redeemable_balance=400 [Armory batch open] balanceBefore=400 openCount=400, 4 stars per item → redeem count=100 [Armory batch open] Redeem 1/100 defindex=4028 Armory: Sending GC UseItem(1025) defindex=4028 payloadLen=3 payloadHex=08bc1f Armory: Timeout (no GC messages received in 30s, GC may not be responding to 1025) [Armory batch open] 1025 timeout, trying 9219... Armory: Sending GC 9219 ClientRedeemFreeReward defindex=4028 genTime=1773404500 balance=400 Armory: 9219 timeout (0 GC messages in 30s) [Armory batch open] 9219 timeout, trying 9209... Armory: Sending GC 9209 ClientRedeemMissionReward defindex=4028 balance=400 expectedCost=4 Armory: 9209 timeout [Armory batch open] Timeout 202, 0 items opened balanceAfter=400
  9. so the problem is that i received an item in my inventoy its not appearing on the incoming history but is appearing in the trade history whats causing this behaviour.
  10. still the same, out of 700 inspects more 400 get a timeout
  11. Hello, I am successfully creating valid auth session tickets using the createAuthSessionTicket api, but after a few minutes they get cancelled. Do I need to keep a client alive somehow for them to stay valid? Please forgive my ignorance. Best, James
  12. Earlier
  13. 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?
  14. manager.getInventoryContents(730, 2, true, function (err, inventory){ console.log("tradeable",inventory.length); tradeablecount = inventory.length; }); manager.getInventoryContents(730, 16, false, function (err, inventory){ console.log("protect",inventory.length); protectcount = inventory.length; if (inventorycount!="") { getMarketListings(cookies); } }); ****** if (marketListingsElement.length > 0) { const listingscount = marketListingsElement.text().trim(); console.log("market: " + listingscount); const parsedMarketCount = parseInt(String(listingscount).replace(/,/g, ''), 10); marketcount = Number.isNaN(parsedMarketCount) ? 0 : parsedMarketCount; const adjustedProtectCount = Math.max(0, protectcount - marketcount); const inventorycounttotal = "["+tradeablecount+","+adjustedProtectCount+","+marketcount+"]"; if (inventorycount!=0) { request(Config.inventorycount.replace("{steamid64}",client.steamID).replace("{inventorycount}",inventorycounttotal), (err, res, body) => { if (err) {console.log("@debug inventorycount")}else{console.log("\n### 成功上传API inventorycount")} }) } } else { console.log("## 未找到市场上架数量元素 (my_market_selllistings_number)"); } now i use this code. but i want to know is there any way to get marketlisting like use manager.getInventoryContents because they on inventory now
  15. manager.setCookies(cookies, (err) => { // console.log(manager) console.log("### 准备连接报价API") if(err){ console.log("## 连接报价API失败") console.log("## ERRmessage:" + err); } else { console.log("## 连接报价API成功"); manager.getInventoryContents(730, 2, true, function (err, inventory){ console.log("tradeable",inventory.length); tradeablecount = inventory.length; }); manager.getInventoryContents(730, 16, false, function (err, inventory){ console.log("protect",inventory.length); protectcount = inventory.length; }); if (inventorycount!="") { getMarketListings(cookies); } } }); function getMarketListings(cookies) { console.log("### 开始查询Steam市场上架数量"); // 构建cookie字符串 let cookieString = ''; if (Array.isArray(cookies)) { cookieString = cookies.join('; '); } else { cookieString = cookies; } // 第一步:先访问资格检查页面 let eligibilityOptions = { url: 'https://steamcommunity.com/market/eligibilitycheck/?goto=%2Fmarket%2F', headers: { 'Cookie': cookieString, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'Accept-Language': 'zh-CN,zh;q=0.9,is;q=0.8', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'Cache-Control': 'no-cache', 'DNT': '1', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"' }, followRedirect: false, // 不自动跟随重定向 timeout: 30000, gzip: true }; // 如果使用代理,添加代理配置 if (apiproxy === "1") { if (proxyset && proxyset.indexOf("http") >= 0) { eligibilityOptions.proxy = proxyset; } else if (proxyset && proxyset.indexOf("sock") >= 0) { eligibilityOptions.socksProxy = proxyset; } else if (proxyipuse) { eligibilityOptions.proxy = "http://" + proxyipuse; } } request(eligibilityOptions, function(error, response, body) { if (error) { console.log("## 资格检查失败: " + error); return; } // 获取新的cookies let newCookies = cookieString; if (response.headers['set-cookie']) { const additionalCookies = response.headers['set-cookie'].map(cookie => { return cookie.split(';')[0]; }).join('; '); newCookies += '; ' + additionalCookies; } console.log("## 资格检查完成,准备访问市场页面"); // 第二步:访问市场页面 let marketOptions = { url: 'https://steamcommunity.com/market/', headers: { 'Cookie': newCookies, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'Accept-Language': 'zh-CN,zh;q=0.9,is;q=0.8', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'Cache-Control': 'no-cache', 'DNT': '1', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"' }, followRedirect: true, maxRedirects: 3, timeout: 30000, gzip: true }; // 添加代理配置 if (apiproxy === "1") { if (proxyset && proxyset.indexOf("http") >= 0) { marketOptions.proxy = proxyset; } else if (proxyset && proxyset.indexOf("sock") >= 0) { marketOptions.socksProxy = proxyset; } else if (proxyipuse) { marketOptions.proxy = "http://" + proxyipuse; } } if (inventorycount!="") { request(marketOptions, function(marketError, marketResponse, marketBody) { if (marketError) { console.log("## 查询市场上架数量失败"); console.log("## ERRmessage:" + marketError); return; } if (marketResponse.statusCode !== 200) { console.log("## 查询市场上架数量失败,状态码:" + marketResponse.statusCode); return; } try { // 使用cheerio解析HTML const $ = cheerio.load(marketBody); const marketListingsElement = $('#my_market_selllistings_number'); if (marketListingsElement.length > 0) { const listingscount = marketListingsElement.text().trim(); console.log("market: " + listingscount); marketcount = listingscount; const inventorycounttotal = "["+tradeablecount+","+protectcount+","+marketcount+"]"; if (inventorycount!=0) { request(Config.inventorycount.replace("{steamid64}",client.steamID).replace("{inventorycount}",inventorycounttotal), (err, res, body) => { if (err) {console.log("@debug inventorycount")}else{console.log("\n### 成功上传API inventorycount")} }) } } else { console.log("## 未找到市场上架数量元素 (my_market_selllistings_number)"); } } catch (parseError) { console.log("## 解析市场页面失败"); console.log("## ERRmessage:" + parseError); } }); } }); } i use this code can get protect tradeable marketlisting itemcount but now steam update a patch, item which marketlisting still use one shot on inventory, and it will belong protectcount, is there any way to get is clear?
  16. I noticed that many people are complaining about not getting their items at all after today's rollback, so it might be an issue on Steam side after all.
  17. Hello, I have noticed that sometimes TF2 trades are being rollbacked by Steam and even though they have "tradeID", are rollbacked (can't be resent with identical same IDs, returns 26 when trying) and got state "6" (canceled) don't have any rollback information when I call getExchangeDetails. Is this a known issue or something new that needs fixing? My guess is that the v12.2.2 update that fixed corrupt data on normal trade offers doesn't consider rollback data and when it's corrupt - no data gets returned. (Just a guess at this moment)
  18. Hi, I have a socks5 proxy and use it for every package, but when I log in to the MobileApp, Steam shows my real location. SteamClient works good. here is proxy usage here is steam devices screenshot - The mobile device should have the same location as the Steam client.
  19. Which paid or free proxies should be used for trading, reselling websites then could you please help out?
  20. I'm trying to use the getUserInventoryContents but I'm always getting error 400 without explaining more. Can you help?
  21. If you want to scrape from the account, you can use depot dumper mod.
  22. Heyo, I was just wondering if there's any plans for you to fix this @Dr. McKay?
  23. Good day, everyone! I've been trying to solve a trade confirmation issue for three days now. All other requests are working perfectly, but trade confirmations specifically return the "Could not act on confirmation" error. The raw request returns a 200 status code with {"success": false}. Does anyone know what might be causing this or how to fix it? For context: my identity_secret is correct, and other requests handle successfully. I am attaching a script with logic similar to my project. I would be very grateful for any help! Version of node-steamcommunity: 3.49.0 test.js
  24. Hello! I just tried to delete my account. After receiving the account deletion e-mail and clicking on the link it doesn't work. Can someone please delete my account, thanks!
  25. Thanks, that makes sense. I suspected that at some point you have to rely on the game client itself, and your explanation about the GC vs client-side rendering logic really clarified it for me. Appreciate the insight.
  26. You have to use the game client code somehow, whether that's injection or hooking or whatever. The GC only sends the raw data (paint seed, paint index, wear, etc) but the code to turn that into a model or image is only inside the game client.
  27. thats fine but you see the disparency in the auth devices y is that? what causes it? i am using the proxy always in the steam user and community thne how steam gets the location sometimes wrong
  28. I’m trying to build a screenshot service similar to BUFF and CSMoney Ideally, the full pipeline would cover everything from an action/inspect link (e.g., steam://rungame/... +csgo_econ_action_preview ...) to generating clean, high-quality, UI-free weapon screenshots. However, I found a YouTube video showing a Python-based method to capture images: https://www.youtube.com/watch?v=HUIERG6r-t0 This looks more like a manual/automation screenshot workflow inside the game, and it may not match what I want in terms of scalability. I also noticed this site: https://cs2inspects.com/zh-CN/screenshots It seems able to generate screenshots using only paint seed, paint index, and float (wear), without requiring an inspect link. Or does achieving this level of control usually rely on in-game injection or memory hooking?
  29. Cursor is wrong. Passing the httpProxy option to LoginSession is unnecessary because the CMAuthTransport handles proxying already. All login communication happens through the same proxied TCP/WS connection as all other Steam client communication.
  1. Load more activity
×
×
  • Create New...