@ianlucas/cs2-lib-inspect 8.2.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -11,9 +11,15 @@ npm install @ianlucas/cs2-lib-inspect
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
13
|
```typescript
|
|
14
|
-
import { CS2Economy } from "@ianlucas/cs2-lib";
|
|
15
|
-
import {
|
|
14
|
+
import { CS2Economy, CS2_ITEMS } from "@ianlucas/cs2-lib";
|
|
15
|
+
import { english } from "@ianlucas/cs2-lib/translations";
|
|
16
|
+
import { generateInspectLink, parseInspectLink } from "@ianlucas/cs2-lib-inspect";
|
|
17
|
+
|
|
18
|
+
CS2Economy.load({ items: CS2_ITEMS, language: english });
|
|
16
19
|
|
|
17
20
|
const link = generateInspectLink(CS2Economy.getById(307));
|
|
18
21
|
//=> "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%2000180920D802280638004001B9A9F1D4"
|
|
22
|
+
|
|
23
|
+
const item = parseInspectLink(CS2Economy, link);
|
|
24
|
+
//=> { id: 307, ... }
|
|
19
25
|
```
|
|
@@ -9,19 +9,21 @@ import { CS2PreviewRarity, CS2_PREVIEW_COMMAND, CS2_PREVIEW_HAS_STICKERS, CS2_PR
|
|
|
9
9
|
import { CEconItemPreviewDataBlock } from "./Protobufs/cstrike15_gcmessages.js";
|
|
10
10
|
import { floatToBytes } from "./utils.js";
|
|
11
11
|
function getEconomyItemPreviewData(item) {
|
|
12
|
-
const {
|
|
12
|
+
const { definitionIndex, variantIndex, rarityColor, type, tintIndex } = item;
|
|
13
13
|
const hasStickers = CS2_PREVIEW_HAS_STICKERS.includes(type);
|
|
14
14
|
const hasPaintIndex = !hasStickers && !item.isMusicKit();
|
|
15
15
|
const hasKeychains = item.isKeychain();
|
|
16
16
|
return {
|
|
17
|
-
defindex:
|
|
18
|
-
keychains: hasKeychains
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
defindex: definitionIndex,
|
|
18
|
+
keychains: hasKeychains
|
|
19
|
+
? [{ stickerId: variantIndex, slot: 0, wrappedSticker: item.displayedSticker?.variantIndex }]
|
|
20
|
+
: [],
|
|
21
|
+
musicindex: item.isMusicKit() ? variantIndex : undefined,
|
|
22
|
+
paintindex: hasPaintIndex ? variantIndex : undefined,
|
|
21
23
|
paintseed: item.hasSeed() ? CS2_MIN_SEED : undefined,
|
|
22
24
|
paintwear: item.hasWear() ? floatToBytes(item.getMinimumWear()) : undefined,
|
|
23
|
-
rarity: CS2PreviewRarity[
|
|
24
|
-
stickers: hasStickers ? [{ tintId:
|
|
25
|
+
rarity: CS2PreviewRarity[rarityColor] ?? 0,
|
|
26
|
+
stickers: hasStickers ? [{ tintId: tintIndex, stickerId: variantIndex, slot: 0 }] : []
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
29
|
function getInventoryItemPreviewData(item) {
|
|
@@ -40,13 +42,13 @@ function getInventoryItemPreviewData(item) {
|
|
|
40
42
|
offsetY: y,
|
|
41
43
|
rotation,
|
|
42
44
|
slot: schema ?? slot,
|
|
43
|
-
stickerId: item.economy.getById(id).
|
|
45
|
+
stickerId: item.economy.getById(id).variantIndex,
|
|
44
46
|
wear: wear ?? CS2_MIN_STICKER_WEAR
|
|
45
47
|
}))
|
|
46
48
|
: patches !== undefined
|
|
47
49
|
? item
|
|
48
50
|
.somePatches()
|
|
49
|
-
.map(([slot, patchId]) => ({ slot, stickerId: item.economy.getById(patchId).
|
|
51
|
+
.map(([slot, patchId]) => ({ slot, stickerId: item.economy.getById(patchId).variantIndex }))
|
|
50
52
|
: baseAttributes.stickers,
|
|
51
53
|
keychains: keychains !== undefined
|
|
52
54
|
? item.someKeychains().map(([slot, { id, x, y, z, seed }]) => {
|
|
@@ -57,8 +59,8 @@ function getInventoryItemPreviewData(item) {
|
|
|
57
59
|
offsetZ: z,
|
|
58
60
|
pattern: seed,
|
|
59
61
|
slot,
|
|
60
|
-
stickerId: keychainItem.
|
|
61
|
-
wrappedSticker: keychainItem.
|
|
62
|
+
stickerId: keychainItem.variantIndex,
|
|
63
|
+
wrappedSticker: keychainItem.displayedSticker?.variantIndex
|
|
62
64
|
};
|
|
63
65
|
})
|
|
64
66
|
: item.isKeychain()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-inspect-link.js","sourceRoot":"","sources":["../src/generate-inspect-link.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS,yBAAyB,CAAC,IAAoB;IACnD,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"generate-inspect-link.js","sourceRoot":"","sources":["../src/generate-inspect-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,38 +2,39 @@
|
|
|
2
2
|
* Copyright (c) candyboyz, Ian Lucas. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { CS2EconomyInstance, CS2EconomyItem,
|
|
5
|
+
import { CS2EconomyInstance, CS2EconomyItem, CS2_INVENTORY_RULES, CS2_MAX_STICKER_ROTATION, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_SEED, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_WEAR_FACTOR, assert, clamp, ensure, getNextStickerSchema, snapStickerRotation, truncateToFactor } from "@ianlucas/cs2-lib";
|
|
6
6
|
import { CS2_PREVIEW_HAS_STICKERS } from "./constants.js";
|
|
7
7
|
export function parseGCInventoryItem(economy, data) {
|
|
8
8
|
const { defindex, paintindex, paintseed, floatvalue, killeatervalue, customname, musicindex, stickers, keychains } = data;
|
|
9
|
-
let economyItem = economy.itemsAsArray.find((item) => item.
|
|
9
|
+
let economyItem = economy.itemsAsArray.find((item) => item.definitionIndex === defindex);
|
|
10
10
|
if (economyItem !== undefined && CS2_PREVIEW_HAS_STICKERS.includes(economyItem.type)) {
|
|
11
11
|
if (stickers.length === 1) {
|
|
12
12
|
// Patch, Sticker, and Graffiti
|
|
13
|
-
economyItem = economy.itemsAsArray.find((item) => item.
|
|
13
|
+
economyItem = economy.itemsAsArray.find((item) => item.definitionIndex === defindex &&
|
|
14
|
+
item.variantIndex === stickers[0].stickerId &&
|
|
15
|
+
item.tintIndex === stickers[0].tintId);
|
|
14
16
|
}
|
|
15
17
|
return ensure(economyItem !== undefined ? { id: economyItem.id } : undefined);
|
|
16
18
|
}
|
|
17
19
|
else if (musicindex !== undefined) {
|
|
18
20
|
// Music Kit
|
|
19
|
-
economyItem = economy.itemsAsArray.find((item) => item.isMusicKit() && item.
|
|
21
|
+
economyItem = economy.itemsAsArray.find((item) => item.isMusicKit() && item.variantIndex === musicindex);
|
|
20
22
|
return ensure(economyItem !== undefined ? stripMinValues({ id: economyItem.id, statTrak: killeatervalue }) : undefined);
|
|
21
23
|
}
|
|
22
24
|
else {
|
|
23
25
|
if (economyItem?.isKeychain() && keychains.length > 0) {
|
|
24
|
-
economyItem = economy.itemsAsArray.find((item) => item.
|
|
25
|
-
item.
|
|
26
|
-
item.
|
|
26
|
+
economyItem = economy.itemsAsArray.find((item) => item.definitionIndex === defindex &&
|
|
27
|
+
item.variantIndex === keychains[0].stickerId &&
|
|
28
|
+
item.displayedSticker?.variantIndex === keychains[0].wrappedSticker);
|
|
27
29
|
}
|
|
28
30
|
else if (paintindex !== undefined) {
|
|
29
|
-
economyItem = economy.itemsAsArray.find((item) => item.
|
|
31
|
+
economyItem = economy.itemsAsArray.find((item) => item.definitionIndex === defindex && item.variantIndex === paintindex);
|
|
30
32
|
}
|
|
31
33
|
assert(economyItem !== undefined);
|
|
32
34
|
if (economyItem.isKeychain()) {
|
|
33
|
-
const seed = keychains[0]?.pattern ?? paintseed;
|
|
34
35
|
return stripMinValues({
|
|
35
36
|
id: economyItem.id,
|
|
36
|
-
seed:
|
|
37
|
+
seed: CS2_INVENTORY_RULES.keychainSeed.repair(keychains[0]?.pattern ?? paintseed, economyItem)
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
40
|
return stripMinValues({
|
|
@@ -53,46 +54,29 @@ export function parseGCInventoryItem(economy, data) {
|
|
|
53
54
|
patches: economyItem.hasPatches() && stickers.length > 0
|
|
54
55
|
? Object.fromEntries(stickers.map(({ slot, stickerId }) => [
|
|
55
56
|
slot,
|
|
56
|
-
ensure(economy.itemsAsArray.find((item) => item.isPatch() && item.
|
|
57
|
+
ensure(economy.itemsAsArray.find((item) => item.isPatch() && item.variantIndex === stickerId)
|
|
58
|
+
?.id)
|
|
57
59
|
]))
|
|
58
60
|
: undefined
|
|
59
61
|
});
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
|
-
// Builds the keychain record from GC/inspect data. Charm placements arrive as raw absolute
|
|
63
|
-
// markup-space floats carrying more precision than cs2-lib stores, so each axis is snapped onto the
|
|
64
|
-
// keychain offset grid and clamped into the model's published envelope — the same treatment sticker
|
|
65
|
-
// offsets already get — otherwise the parsed item fails cs2-lib's keychain validation.
|
|
66
64
|
function parseKeychains(economy, economyItem, keychains) {
|
|
67
|
-
const offsetXMin = economyItem.getMinimumKeychainOffsetX();
|
|
68
|
-
const offsetXMax = economyItem.getMaximumKeychainOffsetX();
|
|
69
|
-
const offsetYMin = economyItem.getMinimumKeychainOffsetY();
|
|
70
|
-
const offsetYMax = economyItem.getMaximumKeychainOffsetY();
|
|
71
|
-
const offsetZMin = economyItem.getMinimumKeychainOffsetZ();
|
|
72
|
-
const offsetZMax = economyItem.getMaximumKeychainOffsetZ();
|
|
73
65
|
return Object.fromEntries(keychains.map(({ offsetX, offsetY, offsetZ, pattern, slot, stickerId, wrappedSticker }) => [
|
|
74
66
|
slot,
|
|
75
67
|
{
|
|
76
68
|
id: ensure(economy.itemsAsArray.find((item) => item.isKeychain() &&
|
|
77
|
-
item.
|
|
78
|
-
item.
|
|
79
|
-
seed:
|
|
80
|
-
x:
|
|
81
|
-
y:
|
|
82
|
-
z:
|
|
69
|
+
item.variantIndex === stickerId &&
|
|
70
|
+
item.displayedSticker?.variantIndex === wrappedSticker)?.id),
|
|
71
|
+
seed: CS2_INVENTORY_RULES.keychainSeed.repair(pattern, economyItem),
|
|
72
|
+
x: CS2_INVENTORY_RULES.keychainPositionX.repair(offsetX, economyItem),
|
|
73
|
+
y: CS2_INVENTORY_RULES.keychainPositionY.repair(offsetY, economyItem),
|
|
74
|
+
z: CS2_INVENTORY_RULES.keychainPositionZ.repair(offsetZ, economyItem)
|
|
83
75
|
}
|
|
84
76
|
]));
|
|
85
77
|
}
|
|
86
|
-
// Builds the sticker record from GC/inspect data. The record key is the 0-based stack (draw) position
|
|
87
|
-
// and each sticker's `schema` is its physical StickerMarkup anchor. A GC slot outside the model's
|
|
88
|
-
// [0, getStickerSchemaCount()) is repaired onto the first free anchor — mirroring cs2-lib's loader — so
|
|
89
|
-
// the parsed item always satisfies the sticker validator, matching how offsets are already healed.
|
|
90
78
|
function parseStickers(economy, economyItem, stickers) {
|
|
91
79
|
const schemaCount = economyItem.getStickerSchemaCount();
|
|
92
|
-
const offsetXMin = economyItem.getMinimumStickerOffsetX();
|
|
93
|
-
const offsetXMax = economyItem.getMaximumStickerOffsetX();
|
|
94
|
-
const offsetYMin = economyItem.getMinimumStickerOffsetY();
|
|
95
|
-
const offsetYMax = economyItem.getMaximumStickerOffsetY();
|
|
96
80
|
const parsed = [];
|
|
97
81
|
for (const { slot, stickerId, offsetX, offsetY, wear, rotation } of stickers) {
|
|
98
82
|
let schema = slot ?? parsed.length;
|
|
@@ -100,24 +84,17 @@ function parseStickers(economy, economyItem, stickers) {
|
|
|
100
84
|
schema = getNextStickerSchema(parsed, schemaCount);
|
|
101
85
|
}
|
|
102
86
|
parsed.push({
|
|
103
|
-
id: ensure(economy.itemsAsArray.find((item) => item.isSticker() && item.
|
|
87
|
+
id: ensure(economy.itemsAsArray.find((item) => item.isSticker() && item.variantIndex === stickerId)?.id),
|
|
104
88
|
rotation: rotation !== undefined ? normalizeStickerRotation(rotation) : undefined,
|
|
105
89
|
schema,
|
|
106
|
-
wear: wear
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
x: healStickerOffset(offsetX, offsetXMin, offsetXMax),
|
|
110
|
-
y: healStickerOffset(offsetY, offsetYMin, offsetYMax)
|
|
90
|
+
wear: CS2_INVENTORY_RULES.stickerWear.repair(wear, economyItem),
|
|
91
|
+
x: CS2_INVENTORY_RULES.stickerX.repair(offsetX, economyItem),
|
|
92
|
+
y: CS2_INVENTORY_RULES.stickerY.repair(offsetY, economyItem)
|
|
111
93
|
});
|
|
112
94
|
}
|
|
113
95
|
return Object.fromEntries(parsed.map((sticker, index) => [index, sticker]));
|
|
114
96
|
}
|
|
115
97
|
function normalizeStickerRotation(rotation) {
|
|
116
|
-
// Snap onto the half-degree grid, then wrap to the in-game [-180, 180] range; legacy 0–359 and
|
|
117
|
-
// out-of-range values collapse to the equivalent signed angle (e.g. 270 -> -90, 9999 -> -81,
|
|
118
|
-
// 359.7 -> -0.5). This deliberately diverges from cs2-lib's healing, which drops
|
|
119
|
-
// still-out-of-range rotations to undefined — here we wrap-and-preserve so a parsed link keeps
|
|
120
|
-
// its visual angle.
|
|
121
98
|
const normalized = ((snapStickerRotation(rotation) % 360) + 360) % 360; // [0, 359.5]
|
|
122
99
|
return normalized > CS2_MAX_STICKER_ROTATION ? normalized - 360 : normalized; // [-179.5, 180]
|
|
123
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gc-inventory-item.js","sourceRoot":"","sources":["../src/parse-gc-inventory-item.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAGH,kBAAkB,EAClB,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"parse-gc-inventory-item.js","sourceRoot":"","sources":["../src/parse-gc-inventory-item.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -30,21 +30,21 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@protobuf-ts/runtime": "^2.11.1",
|
|
32
32
|
"buffer": "^6.0.3",
|
|
33
|
-
"crc-32": "^1.2.2"
|
|
34
|
-
"vitest": "^4.1.10"
|
|
33
|
+
"crc-32": "^1.2.2"
|
|
35
34
|
},
|
|
36
35
|
"peerDependencies": {
|
|
37
|
-
"@ianlucas/cs2-lib": "^
|
|
36
|
+
"@ianlucas/cs2-lib": "^9.0.0"
|
|
38
37
|
},
|
|
39
38
|
"devDependencies": {
|
|
40
39
|
"@protobuf-ts/plugin": "^2.11.1",
|
|
41
40
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
42
|
-
"prettier": "^3.9.
|
|
41
|
+
"prettier": "^3.9.6",
|
|
43
42
|
"typedoc": "^0.28.20",
|
|
44
|
-
"typescript": "^6.0.3"
|
|
43
|
+
"typescript": "^6.0.3",
|
|
44
|
+
"vitest": "^4.1.10"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
|
47
47
|
"node": ">=20"
|
|
48
48
|
},
|
|
49
|
-
"version": "
|
|
49
|
+
"version": "9.0.0"
|
|
50
50
|
}
|