@ianlucas/cs2-lib 8.3.0 → 8.5.0-rc.1

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.
@@ -32,6 +32,7 @@ declare const CS2_STICKER_WEAR_FACTOR = .01;
32
32
  declare const CS2_STICKER_SCRAPE_FACTOR = .1;
33
33
  declare const CS2_STICKER_OFFSET_FACTOR = 1e-4;
34
34
  declare const CS2_STICKER_ROTATION_STEP = .5;
35
+ declare const CS2_KEYCHAIN_OFFSET_FACTOR = 1e-4;
35
36
  declare const CS2_WEAR_FACTOR = 1e-6;
36
37
  declare const CS2_NAMETAG_RE: RegExp;
37
38
  declare const CS2_CONTRACT_TOOL_DEF = 62;
@@ -58,4 +59,4 @@ declare const CS2_TEAMS_BOTH: CS2Team[];
58
59
  declare const CS2_TEAMS_CT: CS2Team[];
59
60
  declare const CS2_TEAMS_T: CS2Team[];
60
61
  //#endregion
61
- export { CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR };
62
+ export { CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_OFFSET_FACTOR, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR };
@@ -1 +1 @@
1
- import{CS2ItemType as e}from"./economy-types.mjs";import{CS2Team as t}from"./teams.mjs";const n=0,r=999999,i=0,a=1,o=.06,s=.8,c=0,l=.07,u=.070001,d=.15,f=.150001,p=.37,m=.370001,h=.44,g=.440001,_=1,v=1,y=1e3,b=0,x=1,S=-180,C=180,w=1,T=1e5,E=5,D=5,O=1,k=.01,A=.1,j=1e-4,M=.5,N=1e-6,P=/^[A-Za-z0-9`!@#$%^&*-+=(){}\[\]\/\|\\,.?:;'_,。;!\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\s]{0,20}$/u,F=62,I=1200,L=1324,R=1201,z=[e.Container,e.Tool],B=[e.Collectible,e.MusicKit],V=[e.Weapon,e.Agent,e.Gloves,e.Melee,e.MusicKit],H=[e.Patch,e.Sticker,e.Graffiti,e.Keychain],U=[e.Melee,e.Weapon],W=[e.Gloves,e.Melee,e.Weapon],G=[e.Agent],K=[e.Weapon,e.Melee,e.Gloves,e.Keychain],q=[e.Melee,e.Weapon,e.MusicKit],J=[e.Weapon],Y=[e.Weapon],X=[`heavy`,`smg`],Z=[`rifle`],Q=[`c4`,`equipment`],$=[`awp`,`g3sg1`,`scar20`,`ssg08`],ee=[`m249`,`negev`],te=[t.T,t.CT],ne=[t.CT],re=[t.T];export{z as CS2_CONTAINER_ITEMS,F as CS2_CONTRACT_TOOL_DEF,s as CS2_DEFAULT_MAX_WEAR,o as CS2_DEFAULT_MIN_WEAR,B as CS2_DISPLAY_ITEMS,V as CS2_EQUIPMENT_ITEMS,H as CS2_GRAPHIC_ART_ITEMS,Y as CS2_KEYCHAINABLE_ITEMS,ee as CS2_MACHINEGUN_MODELS,_ as CS2_MAX_BATTLE_SCARRED_WEAR,l as CS2_MAX_FACTORY_NEW_WEAR,p as CS2_MAX_FIELD_TESTED_WEAR,O as CS2_MAX_KEYCHAINS,T as CS2_MAX_KEYCHAIN_SEED,d as CS2_MAX_MINIMAL_WEAR_WEAR,D as CS2_MAX_PATCHES,y as CS2_MAX_SEED,r as CS2_MAX_STATTRAK,E as CS2_MAX_STICKERS,C as CS2_MAX_STICKER_ROTATION,x as CS2_MAX_STICKER_WEAR,a as CS2_MAX_WEAR,h as CS2_MAX_WELL_WORN_WEAR,X as CS2_MIDTIER_CATEGORIES,g as CS2_MIN_BATTLE_SCARRED_WEAR,c as CS2_MIN_FACTORY_NEW_WEAR,f as CS2_MIN_FIELD_TESTED_WEAR,w as CS2_MIN_KEYCHAIN_SEED,u as CS2_MIN_MINIMAL_WEAR_WEAR,v as CS2_MIN_SEED,n as CS2_MIN_STATTRAK,S as CS2_MIN_STICKER_ROTATION,b as CS2_MIN_STICKER_WEAR,i as CS2_MIN_WEAR,m as CS2_MIN_WELL_WORN_WEAR,Q as CS2_MISC_CATEGORIES,U as CS2_NAMETAGGABLE_ITEMS,P as CS2_NAMETAG_RE,I as CS2_NAMETAG_TOOL_DEF,W as CS2_PAINTABLE_ITEMS,G as CS2_PATCHABLE_ITEMS,Z as CS2_RIFLE_CATEGORIES,K as CS2_SEEDABLE_ITEMS,$ as CS2_SNIPER_RIFLE_MODELS,q as CS2_STATTRAKABLE_ITEMS,L as CS2_STATTRAK_SWAP_TOOL_DEF,J as CS2_STICKERABLE_ITEMS,j as CS2_STICKER_OFFSET_FACTOR,M as CS2_STICKER_ROTATION_STEP,A as CS2_STICKER_SCRAPE_FACTOR,k as CS2_STICKER_WEAR_FACTOR,R as CS2_STORAGE_UNIT_TOOL_DEF,te as CS2_TEAMS_BOTH,ne as CS2_TEAMS_CT,re as CS2_TEAMS_T,N as CS2_WEAR_FACTOR};
1
+ import{CS2ItemType as e}from"./economy-types.mjs";import{CS2Team as t}from"./teams.mjs";const n=0,r=999999,i=0,a=1,o=.06,s=.8,c=0,l=.07,u=.070001,d=.15,f=.150001,p=.37,m=.370001,h=.44,g=.440001,_=1,v=1,y=1e3,b=0,x=1,S=-180,C=180,w=1,T=1e5,E=5,D=5,O=1,k=.01,A=.1,j=1e-4,M=.5,N=1e-4,P=1e-6,F=/^[A-Za-z0-9`!@#$%^&*-+=(){}\[\]\/\|\\,.?:;'_,。;!\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\s]{0,20}$/u,I=62,L=1200,R=1324,z=1201,B=[e.Container,e.Tool],V=[e.Collectible,e.MusicKit],H=[e.Weapon,e.Agent,e.Gloves,e.Melee,e.MusicKit],U=[e.Patch,e.Sticker,e.Graffiti,e.Keychain],W=[e.Melee,e.Weapon],G=[e.Gloves,e.Melee,e.Weapon],K=[e.Agent],q=[e.Weapon,e.Melee,e.Gloves,e.Keychain],J=[e.Melee,e.Weapon,e.MusicKit],Y=[e.Weapon],X=[e.Weapon],Z=[`heavy`,`smg`],Q=[`rifle`],$=[`c4`,`equipment`],ee=[`awp`,`g3sg1`,`scar20`,`ssg08`],te=[`m249`,`negev`],ne=[t.T,t.CT],re=[t.CT],ie=[t.T];export{B as CS2_CONTAINER_ITEMS,I as CS2_CONTRACT_TOOL_DEF,s as CS2_DEFAULT_MAX_WEAR,o as CS2_DEFAULT_MIN_WEAR,V as CS2_DISPLAY_ITEMS,H as CS2_EQUIPMENT_ITEMS,U as CS2_GRAPHIC_ART_ITEMS,X as CS2_KEYCHAINABLE_ITEMS,N as CS2_KEYCHAIN_OFFSET_FACTOR,te as CS2_MACHINEGUN_MODELS,_ as CS2_MAX_BATTLE_SCARRED_WEAR,l as CS2_MAX_FACTORY_NEW_WEAR,p as CS2_MAX_FIELD_TESTED_WEAR,O as CS2_MAX_KEYCHAINS,T as CS2_MAX_KEYCHAIN_SEED,d as CS2_MAX_MINIMAL_WEAR_WEAR,D as CS2_MAX_PATCHES,y as CS2_MAX_SEED,r as CS2_MAX_STATTRAK,E as CS2_MAX_STICKERS,C as CS2_MAX_STICKER_ROTATION,x as CS2_MAX_STICKER_WEAR,a as CS2_MAX_WEAR,h as CS2_MAX_WELL_WORN_WEAR,Z as CS2_MIDTIER_CATEGORIES,g as CS2_MIN_BATTLE_SCARRED_WEAR,c as CS2_MIN_FACTORY_NEW_WEAR,f as CS2_MIN_FIELD_TESTED_WEAR,w as CS2_MIN_KEYCHAIN_SEED,u as CS2_MIN_MINIMAL_WEAR_WEAR,v as CS2_MIN_SEED,n as CS2_MIN_STATTRAK,S as CS2_MIN_STICKER_ROTATION,b as CS2_MIN_STICKER_WEAR,i as CS2_MIN_WEAR,m as CS2_MIN_WELL_WORN_WEAR,$ as CS2_MISC_CATEGORIES,W as CS2_NAMETAGGABLE_ITEMS,F as CS2_NAMETAG_RE,L as CS2_NAMETAG_TOOL_DEF,G as CS2_PAINTABLE_ITEMS,K as CS2_PATCHABLE_ITEMS,Q as CS2_RIFLE_CATEGORIES,q as CS2_SEEDABLE_ITEMS,ee as CS2_SNIPER_RIFLE_MODELS,J as CS2_STATTRAKABLE_ITEMS,R as CS2_STATTRAK_SWAP_TOOL_DEF,Y as CS2_STICKERABLE_ITEMS,j as CS2_STICKER_OFFSET_FACTOR,M as CS2_STICKER_ROTATION_STEP,A as CS2_STICKER_SCRAPE_FACTOR,k as CS2_STICKER_WEAR_FACTOR,z as CS2_STORAGE_UNIT_TOOL_DEF,ne as CS2_TEAMS_BOTH,re as CS2_TEAMS_CT,ie as CS2_TEAMS_T,P as CS2_WEAR_FACTOR};
@@ -45,22 +45,35 @@ interface CS2Item {
45
45
  base?: boolean | undefined;
46
46
  baseId?: number | undefined;
47
47
  category?: string | undefined;
48
+ clothCollider?: boolean | undefined;
48
49
  collection?: string | undefined;
49
50
  collectionImage?: string | undefined;
50
51
  containerType?: CS2ContainerType | undefined;
51
52
  contents?: number[] | undefined;
52
53
  def?: number | undefined;
54
+ displaySeed?: number | undefined;
53
55
  free?: boolean | undefined;
54
56
  id: number;
55
57
  image?: string | undefined;
56
58
  index?: number | undefined;
59
+ keychainOffsetXMax?: number | undefined;
60
+ keychainOffsetXMin?: number | undefined;
61
+ keychainOffsetYMax?: number | undefined;
62
+ keychainOffsetYMin?: number | undefined;
63
+ keychainOffsetZMax?: number | undefined;
64
+ keychainOffsetZMin?: number | undefined;
57
65
  keys?: number[] | undefined;
58
66
  legacy?: boolean | undefined;
67
+ legacyKeychainOffsetXMax?: number | undefined;
68
+ legacyKeychainOffsetXMin?: number | undefined;
69
+ legacyKeychainOffsetYMax?: number | undefined;
70
+ legacyKeychainOffsetYMin?: number | undefined;
71
+ legacyKeychainOffsetZMax?: number | undefined;
72
+ legacyKeychainOffsetZMin?: number | undefined;
59
73
  legacyStickerOffsetXMax?: number | undefined;
60
74
  legacyStickerOffsetXMin?: number | undefined;
61
75
  legacyStickerOffsetYMax?: number | undefined;
62
76
  legacyStickerOffsetYMin?: number | undefined;
63
- /** Count of sticker schemas (StickerMarkup anchors) on the legacy mesh; see {@link CS2EconomyItem.getStickerSchemaCount}. */
64
77
  legacyStickerSchemaCount?: number | undefined;
65
78
  model?: string | undefined;
66
79
  paintMaterial?: string | undefined;
@@ -75,7 +88,6 @@ interface CS2Item {
75
88
  stickerOffsetXMin?: number | undefined;
76
89
  stickerOffsetYMax?: number | undefined;
77
90
  stickerOffsetYMin?: number | undefined;
78
- /** Count of sticker schemas (StickerMarkup anchors) on the HD mesh; see {@link CS2EconomyItem.getStickerSchemaCount}. */
79
91
  stickerSchemaCount?: number | undefined;
80
92
  teams?: CS2ItemTeam | undefined;
81
93
  tint?: number | undefined;
@@ -51,6 +51,7 @@ declare class CS2EconomyItem implements Interface<Omit<CS2Item, "contents" | "sp
51
51
  base: boolean | undefined;
52
52
  baseId: number | undefined;
53
53
  category: string | undefined;
54
+ clothCollider: boolean | undefined;
54
55
  collection: string | undefined;
55
56
  collectionDesc: string | undefined;
56
57
  collectionImage: string | undefined;
@@ -58,12 +59,25 @@ declare class CS2EconomyItem implements Interface<Omit<CS2Item, "contents" | "sp
58
59
  containerType: CS2ContainerType | undefined;
59
60
  def: number | undefined;
60
61
  desc: string | undefined;
62
+ displaySeed: number | undefined;
61
63
  free: boolean | undefined;
62
64
  id: number;
63
65
  image: string | undefined;
64
66
  index: number | undefined;
67
+ keychainOffsetXMax: number | undefined;
68
+ keychainOffsetXMin: number | undefined;
69
+ keychainOffsetYMax: number | undefined;
70
+ keychainOffsetYMin: number | undefined;
71
+ keychainOffsetZMax: number | undefined;
72
+ keychainOffsetZMin: number | undefined;
65
73
  keys: number[] | undefined;
66
74
  legacy: boolean | undefined;
75
+ legacyKeychainOffsetXMax: number | undefined;
76
+ legacyKeychainOffsetXMin: number | undefined;
77
+ legacyKeychainOffsetYMax: number | undefined;
78
+ legacyKeychainOffsetYMin: number | undefined;
79
+ legacyKeychainOffsetZMax: number | undefined;
80
+ legacyKeychainOffsetZMin: number | undefined;
67
81
  legacyStickerOffsetXMax: number | undefined;
68
82
  legacyStickerOffsetXMin: number | undefined;
69
83
  legacyStickerOffsetYMax: number | undefined;
@@ -162,22 +176,25 @@ declare class CS2EconomyItem implements Interface<Omit<CS2Item, "contents" | "sp
162
176
  getPaintMaterial(): string;
163
177
  getPlayerModel(): string;
164
178
  getModelData(): string;
179
+ getClothCollider(): string | undefined;
165
180
  getMinimumWear(): number;
166
181
  getMaximumWear(): number;
167
182
  getMinimumSeed(): number;
168
183
  getMaximumSeed(): number;
169
- /**
170
- * Count of sticker schemas (StickerMarkup anchors) the model defines; valid `schema` is
171
- * `[0, count)`. Independent of the 5-deep stack ({@link CS2_MAX_STICKERS}), so a model with
172
- * fewer schemas than stickers shares anchors.
173
- */
174
184
  getStickerSchemaCount(): number;
175
185
  getMinimumStickerOffsetX(): number | undefined;
176
186
  getMaximumStickerOffsetX(): number | undefined;
177
187
  getMinimumStickerOffsetY(): number | undefined;
178
188
  getMaximumStickerOffsetY(): number | undefined;
189
+ getMinimumKeychainOffsetX(): number | undefined;
190
+ getMaximumKeychainOffsetX(): number | undefined;
191
+ getMinimumKeychainOffsetY(): number | undefined;
192
+ getMaximumKeychainOffsetY(): number | undefined;
193
+ getMinimumKeychainOffsetZ(): number | undefined;
194
+ getMaximumKeychainOffsetZ(): number | undefined;
179
195
  groupContents(): Record<string, CS2EconomyItem[]>;
180
196
  listContents(hideSpecials?: boolean): CS2EconomyItem[];
197
+ /** @see https://www.csgo.com.cn/news/gamebroad/20170911/206155.shtml */
181
198
  unlockContainer(options?: {
182
199
  computeOdds?: (rarities: (typeof CS2_RARITY_ORDER)[number][]) => number[] | undefined;
183
200
  }): CS2UnlockedItem;
package/dist/economy.mjs CHANGED
@@ -1 +1 @@
1
- import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r}from"./economy-types.mjs";import{assert as i,compare as a,ensure as o,isFactorPrecise as s,safe as c,truncateToFactor as l}from"./utils.mjs";import{CS2_CONTAINER_ITEMS as u,CS2_DISPLAY_ITEMS as d,CS2_EQUIPMENT_ITEMS as f,CS2_GRAPHIC_ART_ITEMS as p,CS2_KEYCHAINABLE_ITEMS as m,CS2_MACHINEGUN_MODELS as h,CS2_MAX_FACTORY_NEW_WEAR as g,CS2_MAX_FIELD_TESTED_WEAR as _,CS2_MAX_KEYCHAIN_SEED as v,CS2_MAX_MINIMAL_WEAR_WEAR as y,CS2_MAX_SEED as b,CS2_MAX_WELL_WORN_WEAR as x,CS2_MIDTIER_CATEGORIES as S,CS2_MISC_CATEGORIES as C,CS2_NAMETAGGABLE_ITEMS as w,CS2_NAMETAG_RE as T,CS2_PAINTABLE_ITEMS as E,CS2_PATCHABLE_ITEMS as D,CS2_RIFLE_CATEGORIES as O,CS2_SEEDABLE_ITEMS as k,CS2_SNIPER_RIFLE_MODELS as A,CS2_STATTRAKABLE_ITEMS as j,CS2_STICKERABLE_ITEMS as M,CS2_TEAMS_BOTH as N,CS2_TEAMS_CT as P,CS2_TEAMS_T as F,CS2_WEAR_FACTOR as I}from"./economy-constants.mjs";import{CS2RarityColorName as L,CS2RarityColorOrder as R,CS2RaritySoundName as z,CS2_RARITY_ORDER as B,randomFloat as V,randomInt as H}from"./economy-container.mjs";function U(e){return function(t){return a(e.type,t.type)&&a(e.free,t.free)&&a(e.model,t.model)&&a(e.base,t.base)&&a(e.category,t.category)&&(e.team===void 0||t.teams===void 0||t.teams.includes(e.team))}}var W=class{baseUrl=`https://cdn.cstrike.app`;categories=new Set;items=new Map;itemsAsArray=[];stickers=new Set;load({assetsBaseUrl:e,items:t,language:n}){this.baseUrl=e??this.baseUrl,this.categories.clear(),this.items.clear(),this.stickers.clear(),this.itemsAsArray=[];for(let e of t){let t=new G(this,e,n===void 0?{name:String(e.id)}:o(n[e.id]));this.items.set(e.id,t),t.isSticker()&&(this.stickers.add(t),n!==void 0&&this.categories.add(o(t.category))),this.itemsAsArray.push(t)}}getById(e){return o(this.items.get(e))}get(e){return typeof e==`number`?this.getById(e):e}findItem(e){return o(this.itemsAsArray.find(U(e)))}filterItems(e){let t=this.itemsAsArray.filter(U(e));return i(t.length>0),t}validateWear(e,t){return e===void 0?!0:(i(s(e,I)),i(e>=0&&e<=1),t!==void 0&&(i(t.hasWear()),i(t.wearMin===void 0||e>=t.wearMin),i(t.wearMax===void 0||e<=t.wearMax)),!0)}safeValidateWear(e,t){return c(()=>this.validateWear(e,t))}validateSeed(e,t){return e===void 0?!0:(i(Number.isFinite(e)),i(Number.isInteger(e)),i(t===void 0||t.hasSeed()),i(e>=(t?.getMinimumSeed()??1)&&e<=(t?.getMaximumSeed()??1e3)),!0)}safeValidateSeed(e,t){return c(()=>this.validateSeed(e,t))}trimNameTag(e){let t=e?.trim();return t===``?void 0:t}validateNameTag(e,t){return e!==void 0&&(i(t===void 0||t.hasNameTag()),i(e[0]!==` `&&T.test(e))),!0}safeValidateNameTag(e,t){return c(()=>this.validateNameTag(e,t))}requireNameTag(e,t){return i(e===void 0||e.trim().length>0),this.validateNameTag(e,t)}safeRequireNameTag(e,t){return c(()=>this.requireNameTag(e,t))}validateStatTrak(e,t){return e===void 0?!0:(i(t===void 0||t.hasStatTrak()),i(Number.isInteger(e)),i(e>=0&&e<=999999),!0)}safeValidateStatTrak(e,t){return c(()=>this.validateStatTrak(e,t))}getWearFromValue(e){switch(!0){case e<=g:return r.FactoryNew;case e<=y:return r.MinimalWear;case e<=_:return r.FieldTested;case e<=x:return r.WellWorn;default:return r.BattleScarred}}getStickerCategories(){return Array.from(this.categories).sort()}getStickers(){return Array.from(this.stickers)}validateContainerAndKey(e,t){return e=this.get(e),e.expectContainer(),t=t===void 0?void 0:this.get(t),t===void 0?i(e.keys===void 0):(t.expectKey(),i(e.keys!==void 0),i(e.keys.includes(t.id))),!0}safeValidateContainerAndKey(e,t){return c(()=>this.validateContainerAndKey(e,t))}expectUnlockedItem(e,{id:t}){e=this.get(e).expectContainer(),i(e.rawContents?.includes(t)||e.rawSpecials?.includes(t))}resolveUrl(e){return`${this.baseUrl}${e}`}},G=class{economy;item;language;altName;base;baseId;category;collection;collectionDesc;collectionImage;collectionName;containerType;def;desc;free;id=null;image;index;keys;legacy;legacyStickerOffsetXMax;legacyStickerOffsetXMin;legacyStickerOffsetYMax;legacyStickerOffsetYMin;legacyStickerSchemaCount;model;name=null;paintMaterial;playerModel;rarity=null;specialsImage;statTrakless;statTrakOnly;stickerId;stickerOffsetXMax;stickerOffsetXMin;stickerOffsetYMax;stickerOffsetYMin;stickerSchemaCount;tint;tournamentDesc;type=null;wearMax;wearMin;_contents;_specials;_teams;constructor(e,t,r){this.economy=e,this.item=t,this.language=r,Object.assign(this,t),Object.assign(this,r),i(typeof this.id==`number`),i(this.name),i(this.type),i(t.type===n.Stub||typeof this.rarity==`string`)}set contents(e){this._contents=e}get contents(){return this.expectContainer(),o(this._contents).map(e=>this.economy.get(e))}get parent(){return this.baseId===void 0?void 0:this.economy.items.has(this.baseId)?this.economy.get(this.baseId):void 0}get rawContents(){return this._contents}get rawSpecials(){return this._specials}set specials(e){this._specials=e}get specials(){return this.expectContainer(),this._specials?.map(e=>this.economy.get(e))}set teams(e){this._teams=e}get teams(){switch(this._teams){case t.Both:return N;case t.T:return F;case t.CT:return P;default:return}}get wrappedSticker(){return this.stickerId===void 0?void 0:this.economy.get(this.stickerId)}isC4(){return this.category===`c4`}isPistol(){return this.category===`secondary`}isSMG(){return this.category===`smg`}isRifle(){return this.category===`rifle`}isSniperRifle(){return this.model!==void 0&&A.includes(this.model)}isMachinegun(){return this.model!==void 0&&h.includes(this.model)}isHeavy(){return this.category===`heavy`}isEquipment(){return this.category===`equipment`}isInMidTiers(){return this.category!==void 0&&S.includes(this.category)}isInRifles(){return this.category!==void 0&&O.includes(this.category)}isInMisc(){return this.category!==void 0&&C.includes(this.category)}isAgent(){return this.type===n.Agent}isCollectible(){return this.type===n.Collectible}isContainer(){return this.type===n.Container}isKey(){return this.type===n.Key}isGloves(){return this.type===n.Gloves}isGraffiti(){return this.type===n.Graffiti}isMelee(){return this.type===n.Melee}isMusicKit(){return this.type===n.MusicKit}isPatch(){return this.type===n.Patch}isSticker(){return this.type===n.Sticker}isKeychain(){return this.type===n.Keychain}isStub(){return this.type===n.Stub}isTool(){return this.type===n.Tool}isWeapon(){return this.type===n.Weapon}isStorageUnit(){return this.isTool()&&this.def===1201}isNameTag(){return this.isTool()&&this.def===1200}isStatTrakSwapTool(){return this.isTool()&&this.def===1324}isContract(){return this.isTool()&&this.def===62}expectAgent(){return i(this.isAgent()),this}expectPatch(){return i(this.isPatch()),this}expectSticker(){return i(this.isSticker()),this}expectKeychain(){return i(this.isKeychain()),this}expectStorageUnit(){return i(this.isStorageUnit()),this}expectNameTag(){return i(this.isNameTag()),this}expectStatTrakSwapTool(){return i(this.isStatTrakSwapTool()),this}expectContainer(){return i(this.isContainer()),this}expectKey(){return i(this.isKey()),this}hasWear(){return E.includes(this.type)&&!this.free&&this.index!==0}hasSeed(){return k.includes(this.type)&&!this.free&&this.index!==0}hasStickers(){return M.includes(this.type)&&!this.isC4()}hasKeychains(){return m.includes(this.type)&&!this.isC4()}hasPatches(){return D.includes(this.type)}hasNameTag(){return w.includes(this.type)||this.isStorageUnit()}hasStatTrak(){return j.includes(this.type)&&!this.free}isWeaponCase(){return this.containerType===e.WeaponCase}isStickerCapsule(){return this.containerType===e.StickerCapsule}isGraffitiBox(){return this.containerType===e.GraffitiBox}isSouvenirCase(){return this.containerType===e.SouvenirCase}isInEquipments(){return f.includes(this.type)}isInGraphicArts(){return p.includes(this.type)}isInContainers(){return u.includes(this.type)}isInDisplay(){return d.includes(this.type)}isPaintable(){return E.includes(this.type)}getImage(e){i(this.image);let t=this.economy.resolveUrl(this.image);if(this.hasWear()&&e!==void 0)switch(!0){case e<1/3:return t.replace(`.webp`,`_light.webp`);case e<2/3:return t.replace(`.webp`,`_medium.webp`);default:return t.replace(`.webp`,`_heavy.webp`)}return t}getCollectionImage(){return this.economy.resolveUrl(this.collectionImage)}getSpecialsImage(){return this.expectContainer(),i(this.rawSpecials),i(this.specialsImage),this.economy.resolveUrl(this.specialsImage)}getPaintMaterial(){return this.economy.resolveUrl(this.paintMaterial)}getPlayerModel(){let{playerModel:e}=this.parent??this;return this.economy.resolveUrl(e)}getModelData(){let{playerModel:e}=this.parent??this;return this.economy.resolveUrl(e?.replace(/\.glb$/,`.json`))}getMinimumWear(){return this.wearMin??0}getMaximumWear(){return this.wearMax??1}getMinimumSeed(){return this.isKeychain(),1}getMaximumSeed(){return this.isKeychain()?v:b}getStickerSchemaCount(){let e=this.parent??this;return(this.legacy?e.legacyStickerSchemaCount:void 0)??e.stickerSchemaCount??5}getMinimumStickerOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetXMin:void 0)??e.stickerOffsetXMin}getMaximumStickerOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetXMax:void 0)??e.stickerOffsetXMax}getMinimumStickerOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetYMin:void 0)??e.stickerOffsetYMin}getMaximumStickerOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetYMax:void 0)??e.stickerOffsetYMax}groupContents(){let e={},t=this.specials;for(let t of this.contents){let n=L[t.rarity];e[n]||(e[n]=[]),e[n].push(t)}if(t!==void 0)for(let n of t){let t=`special`;e[t]||(e[t]=[]),e[t].push(n)}return e}listContents(e=!1){let t=this.specials;return[...this.contents,...!e&&t!==void 0?t:[]].sort((e,t)=>(R[e.rarity]??0)-(R[t.rarity]??0))}unlockContainer(e){let t=this.groupContents(),n=Object.keys(t),r=B.filter(e=>n.includes(e)),i=e?.computeOdds?.(r)??r.map((e,t)=>.8/5**t),a=i.reduce((e,t)=>e+t,0),s=r.map((e,t)=>[e,o(i[t])/a]),c=Math.random(),[u]=o(s[0]),d=0;for(let[e,t]of s)if(d+=t,c<=d){u=e;break}let f=o(t[u]),p=o(f[Math.floor(Math.random()*f.length)]),m=this.statTrakless!==!0,h=this.statTrakOnly===!0;return{attributes:{containerId:this.id,seed:p.hasSeed()?H(1,b):void 0,statTrak:m&&p.hasStatTrak()&&(h||Math.random()<=.1)?0:void 0,wear:p.hasWear()?l(V(p.wearMin??0,p.wearMax??1),I):void 0},id:p.id,rarity:z[p.rarity],special:u===`special`}}};const K=new W;export{K as CS2Economy,W as CS2EconomyInstance,G as CS2EconomyItem};
1
+ import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r}from"./economy-types.mjs";import{assert as i,compare as a,ensure as o,isFactorPrecise as s,safe as c,truncateToFactor as l}from"./utils.mjs";import{CS2_CONTAINER_ITEMS as u,CS2_DISPLAY_ITEMS as d,CS2_EQUIPMENT_ITEMS as f,CS2_GRAPHIC_ART_ITEMS as p,CS2_KEYCHAINABLE_ITEMS as m,CS2_MACHINEGUN_MODELS as h,CS2_MAX_FACTORY_NEW_WEAR as g,CS2_MAX_FIELD_TESTED_WEAR as _,CS2_MAX_KEYCHAIN_SEED as v,CS2_MAX_MINIMAL_WEAR_WEAR as y,CS2_MAX_SEED as b,CS2_MAX_WELL_WORN_WEAR as x,CS2_MIDTIER_CATEGORIES as S,CS2_MISC_CATEGORIES as C,CS2_NAMETAGGABLE_ITEMS as w,CS2_NAMETAG_RE as T,CS2_PAINTABLE_ITEMS as E,CS2_PATCHABLE_ITEMS as D,CS2_RIFLE_CATEGORIES as O,CS2_SEEDABLE_ITEMS as k,CS2_SNIPER_RIFLE_MODELS as A,CS2_STATTRAKABLE_ITEMS as j,CS2_STICKERABLE_ITEMS as M,CS2_TEAMS_BOTH as N,CS2_TEAMS_CT as P,CS2_TEAMS_T as F,CS2_WEAR_FACTOR as I}from"./economy-constants.mjs";import{CS2RarityColorName as L,CS2RarityColorOrder as R,CS2RaritySoundName as z,CS2_RARITY_ORDER as B,randomFloat as V,randomInt as H}from"./economy-container.mjs";function U(e){return function(t){return a(e.type,t.type)&&a(e.free,t.free)&&a(e.model,t.model)&&a(e.base,t.base)&&a(e.category,t.category)&&(e.team===void 0||t.teams===void 0||t.teams.includes(e.team))}}var W=class{baseUrl=`https://cdn.cstrike.app`;categories=new Set;items=new Map;itemsAsArray=[];stickers=new Set;load({assetsBaseUrl:e,items:t,language:n}){this.baseUrl=e??this.baseUrl,this.categories.clear(),this.items.clear(),this.stickers.clear(),this.itemsAsArray=[];for(let e of t){let t=new G(this,e,n===void 0?{name:String(e.id)}:o(n[e.id]));this.items.set(e.id,t),t.isSticker()&&(this.stickers.add(t),n!==void 0&&this.categories.add(o(t.category))),this.itemsAsArray.push(t)}}getById(e){return o(this.items.get(e))}get(e){return typeof e==`number`?this.getById(e):e}findItem(e){return o(this.itemsAsArray.find(U(e)))}filterItems(e){let t=this.itemsAsArray.filter(U(e));return i(t.length>0),t}validateWear(e,t){return e===void 0?!0:(i(s(e,I)),i(e>=0&&e<=1),t!==void 0&&(i(t.hasWear()),i(t.wearMin===void 0||e>=t.wearMin),i(t.wearMax===void 0||e<=t.wearMax)),!0)}safeValidateWear(e,t){return c(()=>this.validateWear(e,t))}validateSeed(e,t){return e===void 0?!0:(i(Number.isFinite(e)),i(Number.isInteger(e)),i(t===void 0||t.hasSeed()),i(e>=(t?.getMinimumSeed()??1)&&e<=(t?.getMaximumSeed()??1e3)),!0)}safeValidateSeed(e,t){return c(()=>this.validateSeed(e,t))}trimNameTag(e){let t=e?.trim();return t===``?void 0:t}validateNameTag(e,t){return e!==void 0&&(i(t===void 0||t.hasNameTag()),i(e[0]!==` `&&T.test(e))),!0}safeValidateNameTag(e,t){return c(()=>this.validateNameTag(e,t))}requireNameTag(e,t){return i(e===void 0||e.trim().length>0),this.validateNameTag(e,t)}safeRequireNameTag(e,t){return c(()=>this.requireNameTag(e,t))}validateStatTrak(e,t){return e===void 0?!0:(i(t===void 0||t.hasStatTrak()),i(Number.isInteger(e)),i(e>=0&&e<=999999),!0)}safeValidateStatTrak(e,t){return c(()=>this.validateStatTrak(e,t))}getWearFromValue(e){switch(!0){case e<=g:return r.FactoryNew;case e<=y:return r.MinimalWear;case e<=_:return r.FieldTested;case e<=x:return r.WellWorn;default:return r.BattleScarred}}getStickerCategories(){return Array.from(this.categories).sort()}getStickers(){return Array.from(this.stickers)}validateContainerAndKey(e,t){return e=this.get(e),e.expectContainer(),t=t===void 0?void 0:this.get(t),t===void 0?i(e.keys===void 0):(t.expectKey(),i(e.keys!==void 0),i(e.keys.includes(t.id))),!0}safeValidateContainerAndKey(e,t){return c(()=>this.validateContainerAndKey(e,t))}expectUnlockedItem(e,{id:t}){e=this.get(e).expectContainer(),i(e.rawContents?.includes(t)||e.rawSpecials?.includes(t))}resolveUrl(e){return`${this.baseUrl}${e}`}},G=class{economy;item;language;altName;base;baseId;category;clothCollider;collection;collectionDesc;collectionImage;collectionName;containerType;def;desc;displaySeed;free;id=null;image;index;keychainOffsetXMax;keychainOffsetXMin;keychainOffsetYMax;keychainOffsetYMin;keychainOffsetZMax;keychainOffsetZMin;keys;legacy;legacyKeychainOffsetXMax;legacyKeychainOffsetXMin;legacyKeychainOffsetYMax;legacyKeychainOffsetYMin;legacyKeychainOffsetZMax;legacyKeychainOffsetZMin;legacyStickerOffsetXMax;legacyStickerOffsetXMin;legacyStickerOffsetYMax;legacyStickerOffsetYMin;legacyStickerSchemaCount;model;name=null;paintMaterial;playerModel;rarity=null;specialsImage;statTrakless;statTrakOnly;stickerId;stickerOffsetXMax;stickerOffsetXMin;stickerOffsetYMax;stickerOffsetYMin;stickerSchemaCount;tint;tournamentDesc;type=null;wearMax;wearMin;_contents;_specials;_teams;constructor(e,t,r){this.economy=e,this.item=t,this.language=r,Object.assign(this,t),Object.assign(this,r),i(typeof this.id==`number`),i(this.name),i(this.type),i(t.type===n.Stub||typeof this.rarity==`string`)}set contents(e){this._contents=e}get contents(){return this.expectContainer(),o(this._contents).map(e=>this.economy.get(e))}get parent(){return this.baseId===void 0?void 0:this.economy.items.has(this.baseId)?this.economy.get(this.baseId):void 0}get rawContents(){return this._contents}get rawSpecials(){return this._specials}set specials(e){this._specials=e}get specials(){return this.expectContainer(),this._specials?.map(e=>this.economy.get(e))}set teams(e){this._teams=e}get teams(){switch(this._teams){case t.Both:return N;case t.T:return F;case t.CT:return P;default:return}}get wrappedSticker(){return this.stickerId===void 0?void 0:this.economy.get(this.stickerId)}isC4(){return this.category===`c4`}isPistol(){return this.category===`secondary`}isSMG(){return this.category===`smg`}isRifle(){return this.category===`rifle`}isSniperRifle(){return this.model!==void 0&&A.includes(this.model)}isMachinegun(){return this.model!==void 0&&h.includes(this.model)}isHeavy(){return this.category===`heavy`}isEquipment(){return this.category===`equipment`}isInMidTiers(){return this.category!==void 0&&S.includes(this.category)}isInRifles(){return this.category!==void 0&&O.includes(this.category)}isInMisc(){return this.category!==void 0&&C.includes(this.category)}isAgent(){return this.type===n.Agent}isCollectible(){return this.type===n.Collectible}isContainer(){return this.type===n.Container}isKey(){return this.type===n.Key}isGloves(){return this.type===n.Gloves}isGraffiti(){return this.type===n.Graffiti}isMelee(){return this.type===n.Melee}isMusicKit(){return this.type===n.MusicKit}isPatch(){return this.type===n.Patch}isSticker(){return this.type===n.Sticker}isKeychain(){return this.type===n.Keychain}isStub(){return this.type===n.Stub}isTool(){return this.type===n.Tool}isWeapon(){return this.type===n.Weapon}isStorageUnit(){return this.isTool()&&this.def===1201}isNameTag(){return this.isTool()&&this.def===1200}isStatTrakSwapTool(){return this.isTool()&&this.def===1324}isContract(){return this.isTool()&&this.def===62}expectAgent(){return i(this.isAgent()),this}expectPatch(){return i(this.isPatch()),this}expectSticker(){return i(this.isSticker()),this}expectKeychain(){return i(this.isKeychain()),this}expectStorageUnit(){return i(this.isStorageUnit()),this}expectNameTag(){return i(this.isNameTag()),this}expectStatTrakSwapTool(){return i(this.isStatTrakSwapTool()),this}expectContainer(){return i(this.isContainer()),this}expectKey(){return i(this.isKey()),this}hasWear(){return E.includes(this.type)&&!this.free&&this.index!==0}hasSeed(){return k.includes(this.type)&&!this.free&&this.index!==0}hasStickers(){return M.includes(this.type)&&!this.isC4()}hasKeychains(){return m.includes(this.type)&&!this.isC4()}hasPatches(){return D.includes(this.type)}hasNameTag(){return w.includes(this.type)||this.isStorageUnit()}hasStatTrak(){return j.includes(this.type)&&!this.free}isWeaponCase(){return this.containerType===e.WeaponCase}isStickerCapsule(){return this.containerType===e.StickerCapsule}isGraffitiBox(){return this.containerType===e.GraffitiBox}isSouvenirCase(){return this.containerType===e.SouvenirCase}isInEquipments(){return f.includes(this.type)}isInGraphicArts(){return p.includes(this.type)}isInContainers(){return u.includes(this.type)}isInDisplay(){return d.includes(this.type)}isPaintable(){return E.includes(this.type)}getImage(e){i(this.image);let t=this.economy.resolveUrl(this.image);if(this.hasWear()&&e!==void 0)switch(!0){case e<1/3:return t.replace(`.webp`,`_light.webp`);case e<2/3:return t.replace(`.webp`,`_medium.webp`);default:return t.replace(`.webp`,`_heavy.webp`)}return t}getCollectionImage(){return this.economy.resolveUrl(this.collectionImage)}getSpecialsImage(){return this.expectContainer(),i(this.rawSpecials),i(this.specialsImage),this.economy.resolveUrl(this.specialsImage)}getPaintMaterial(){return this.economy.resolveUrl(this.paintMaterial??this.parent?.paintMaterial)}getPlayerModel(){let e=this.playerModel??this.parent?.playerModel;return this.economy.resolveUrl(e)}getModelData(){let e=this.playerModel??this.parent?.playerModel;return this.economy.resolveUrl(e?.replace(/\.glb$/,`.json`))}getClothCollider(){if(!(this.clothCollider??this.parent?.clothCollider))return;let e=this.playerModel??this.parent?.playerModel;return this.economy.resolveUrl(e?.replace(/\.glb$/,`.collider.json`))}getMinimumWear(){return this.wearMin??0}getMaximumWear(){return this.wearMax??1}getMinimumSeed(){return this.isKeychain(),1}getMaximumSeed(){return this.isKeychain()?v:b}getStickerSchemaCount(){let e=this.parent??this;return(this.legacy?e.legacyStickerSchemaCount:void 0)??e.stickerSchemaCount??5}getMinimumStickerOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetXMin:void 0)??e.stickerOffsetXMin}getMaximumStickerOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetXMax:void 0)??e.stickerOffsetXMax}getMinimumStickerOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetYMin:void 0)??e.stickerOffsetYMin}getMaximumStickerOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyStickerOffsetYMax:void 0)??e.stickerOffsetYMax}getMinimumKeychainOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetXMin:void 0)??e.keychainOffsetXMin}getMaximumKeychainOffsetX(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetXMax:void 0)??e.keychainOffsetXMax}getMinimumKeychainOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetYMin:void 0)??e.keychainOffsetYMin}getMaximumKeychainOffsetY(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetYMax:void 0)??e.keychainOffsetYMax}getMinimumKeychainOffsetZ(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetZMin:void 0)??e.keychainOffsetZMin}getMaximumKeychainOffsetZ(){let e=this.parent??this;return(this.legacy?e.legacyKeychainOffsetZMax:void 0)??e.keychainOffsetZMax}groupContents(){let e={},t=this.specials;for(let t of this.contents){let n=L[t.rarity];e[n]||(e[n]=[]),e[n].push(t)}if(t!==void 0)for(let n of t){let t=`special`;e[t]||(e[t]=[]),e[t].push(n)}return e}listContents(e=!1){let t=this.specials;return[...this.contents,...!e&&t!==void 0?t:[]].sort((e,t)=>(R[e.rarity]??0)-(R[t.rarity]??0))}unlockContainer(e){let t=this.groupContents(),n=Object.keys(t),r=B.filter(e=>n.includes(e)),i=e?.computeOdds?.(r)??r.map((e,t)=>.8/5**t),a=i.reduce((e,t)=>e+t,0),s=r.map((e,t)=>[e,o(i[t])/a]),c=Math.random(),[u]=o(s[0]),d=0;for(let[e,t]of s)if(d+=t,c<=d){u=e;break}let f=o(t[u]),p=o(f[Math.floor(Math.random()*f.length)]),m=this.statTrakless!==!0,h=this.statTrakOnly===!0;return{attributes:{containerId:this.id,seed:p.hasSeed()?H(1,b):void 0,statTrak:m&&p.hasStatTrak()&&(h||Math.random()<=.1)?0:void 0,wear:p.hasWear()?l(V(p.wearMin??0,p.wearMax??1),I):void 0},id:p.id,rarity:z[p.rarity],special:u===`special`}}};const K=new W;export{K as CS2Economy,W as CS2EconomyInstance,G as CS2EconomyItem};
package/dist/index.d.mts CHANGED
@@ -2,12 +2,12 @@ import { EnumValues, Interface, MapValue, RecordValue, assert, clamp, compare, c
2
2
  import { CS2Rarity, CS2RarityColor, CS2RarityColorName, CS2RarityColorOrder, CS2RarityKeys, CS2RaritySoundName, CS2_BASE_ODD, CS2_RARITIES, CS2_RARITY_COLOR_DEFAULT, CS2_RARITY_ORDER, CS2_STATTRAK_ODD, randomBoolean, randomFloat, randomInt } from "./economy-container.mjs";
3
3
  import { CS2ContainerType, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2UnlockedItem } from "./economy-types.mjs";
4
4
  import { CS2Team, toggleCS2Team } from "./teams.mjs";
5
- import { CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR } from "./economy-constants.mjs";
5
+ import { CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_OFFSET_FACTOR, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR } from "./economy-constants.mjs";
6
6
  import { CS2Economy, CS2EconomyInstance, CS2EconomyItem } from "./economy.mjs";
7
- import { CS2BaseInventoryItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, getNextStickerSchema, getNextUid, getTimestamp, healStickerOffset, snapStickerRotation, stickerMapToArray, toStickerMap, validateStickerRotation } from "./inventory.mjs";
7
+ import { CS2BaseInventoryItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, getNextStickerSchema, getNextUid, getTimestamp, healKeychainOffset, healStickerOffset, snapStickerRotation, stickerMapToArray, toStickerMap, validateStickerRotation } from "./inventory.mjs";
8
8
  import { CS2_ITEMS } from "./items.mjs";
9
9
  import { CS2KeyValues } from "./keyvalues.mjs";
10
10
  import { CS2KeyValues3 } from "./keyvalues3.mjs";
11
11
  import { CS2Map, CS2_ACTIVE_MAP_POOL, CS2_ALL_MAPS, CS2_ANCIENT_MAP, CS2_ANUBIS_MAP, CS2_CACHE_MAP, CS2_DUST2_MAP, CS2_INFERNO_MAP, CS2_MIRAGE_MAP, CS2_NUKE_MAP, CS2_OVERPASS_MAP, CS2_TRAIN_MAP, CS2_VERTIGO_MAP, getMapnameName } from "./maps.mjs";
12
12
  import { CS2Veto, CS2VetoAction, CS2VetoMap, CS2VetoType } from "./veto.mjs";
13
- export { CS2BaseInventoryItem, CS2ContainerType, CS2Economy, CS2EconomyInstance, CS2EconomyItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2KeyValues, CS2KeyValues3, CS2Map, CS2Rarity, CS2RarityColor, CS2RarityColorName, CS2RarityColorOrder, CS2RarityKeys, CS2RaritySoundName, CS2Team, CS2UnlockedItem, CS2Veto, CS2VetoAction, CS2VetoMap, CS2VetoType, CS2_ACTIVE_MAP_POOL, CS2_ALL_MAPS, CS2_ANCIENT_MAP, CS2_ANUBIS_MAP, CS2_BASE_ODD, CS2_CACHE_MAP, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_DUST2_MAP, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_INFERNO_MAP, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, CS2_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MIRAGE_MAP, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_NUKE_MAP, CS2_OVERPASS_MAP, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RARITIES, CS2_RARITY_COLOR_DEFAULT, CS2_RARITY_ORDER, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_ODD, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_TRAIN_MAP, CS2_VERTIGO_MAP, CS2_WEAR_FACTOR, EnumValues, Interface, MapValue, RecordValue, assert, clamp, compare, countDecimals, ensure, fail, float, getMapnameName, getNextStickerSchema, getNextUid, getTimestamp, healStickerOffset, isFactorPrecise, isNotUndefined, randomBoolean, randomFloat, randomInt, roundToFactor, safe, snapStickerRotation, stickerMapToArray, toStickerMap, toggleCS2Team, truncateToFactor, validateStickerRotation };
13
+ export { CS2BaseInventoryItem, CS2ContainerType, CS2Economy, CS2EconomyInstance, CS2EconomyItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2KeyValues, CS2KeyValues3, CS2Map, CS2Rarity, CS2RarityColor, CS2RarityColorName, CS2RarityColorOrder, CS2RarityKeys, CS2RaritySoundName, CS2Team, CS2UnlockedItem, CS2Veto, CS2VetoAction, CS2VetoMap, CS2VetoType, CS2_ACTIVE_MAP_POOL, CS2_ALL_MAPS, CS2_ANCIENT_MAP, CS2_ANUBIS_MAP, CS2_BASE_ODD, CS2_CACHE_MAP, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEF, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_DUST2_MAP, CS2_EQUIPMENT_ITEMS, CS2_GRAPHIC_ART_ITEMS, CS2_INFERNO_MAP, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, CS2_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_OFFSET_FACTOR, CS2_MACHINEGUN_MODELS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_KEYCHAINS, CS2_MAX_KEYCHAIN_SEED, CS2_MAX_MINIMAL_WEAR_WEAR, CS2_MAX_PATCHES, CS2_MAX_SEED, CS2_MAX_STATTRAK, CS2_MAX_STICKERS, CS2_MAX_STICKER_ROTATION, CS2_MAX_STICKER_WEAR, CS2_MAX_WEAR, CS2_MAX_WELL_WORN_WEAR, CS2_MIDTIER_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_KEYCHAIN_SEED, CS2_MIN_MINIMAL_WEAR_WEAR, CS2_MIN_SEED, CS2_MIN_STATTRAK, CS2_MIN_STICKER_ROTATION, CS2_MIN_STICKER_WEAR, CS2_MIN_WEAR, CS2_MIN_WELL_WORN_WEAR, CS2_MIRAGE_MAP, CS2_MISC_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEF, CS2_NUKE_MAP, CS2_OVERPASS_MAP, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RARITIES, CS2_RARITY_COLOR_DEFAULT, CS2_RARITY_ORDER, CS2_RIFLE_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODELS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_ODD, CS2_STATTRAK_SWAP_TOOL_DEF, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEF, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_TRAIN_MAP, CS2_VERTIGO_MAP, CS2_WEAR_FACTOR, EnumValues, Interface, MapValue, RecordValue, assert, clamp, compare, countDecimals, ensure, fail, float, getMapnameName, getNextStickerSchema, getNextUid, getTimestamp, healKeychainOffset, healStickerOffset, isFactorPrecise, isNotUndefined, randomBoolean, randomFloat, randomInt, roundToFactor, safe, snapStickerRotation, stickerMapToArray, toStickerMap, toggleCS2Team, truncateToFactor, validateStickerRotation };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r}from"./economy-types.mjs";import{assert as i,clamp as a,compare as o,countDecimals as s,ensure as c,fail as l,float as u,isFactorPrecise as d,isNotUndefined as f,roundToFactor as p,safe as m,truncateToFactor as h}from"./utils.mjs";import{CS2Team as g,toggleCS2Team as _}from"./teams.mjs";import{CS2_CONTAINER_ITEMS as v,CS2_CONTRACT_TOOL_DEF as y,CS2_DEFAULT_MAX_WEAR as b,CS2_DEFAULT_MIN_WEAR as x,CS2_DISPLAY_ITEMS as S,CS2_EQUIPMENT_ITEMS as C,CS2_GRAPHIC_ART_ITEMS as w,CS2_KEYCHAINABLE_ITEMS as T,CS2_MACHINEGUN_MODELS as E,CS2_MAX_BATTLE_SCARRED_WEAR as D,CS2_MAX_FACTORY_NEW_WEAR as O,CS2_MAX_FIELD_TESTED_WEAR as k,CS2_MAX_KEYCHAINS as A,CS2_MAX_KEYCHAIN_SEED as j,CS2_MAX_MINIMAL_WEAR_WEAR as M,CS2_MAX_PATCHES as N,CS2_MAX_SEED as P,CS2_MAX_STATTRAK as F,CS2_MAX_STICKERS as I,CS2_MAX_STICKER_ROTATION as L,CS2_MAX_STICKER_WEAR as R,CS2_MAX_WEAR as z,CS2_MAX_WELL_WORN_WEAR as B,CS2_MIDTIER_CATEGORIES as V,CS2_MIN_BATTLE_SCARRED_WEAR as H,CS2_MIN_FACTORY_NEW_WEAR as U,CS2_MIN_FIELD_TESTED_WEAR as W,CS2_MIN_KEYCHAIN_SEED as G,CS2_MIN_MINIMAL_WEAR_WEAR as K,CS2_MIN_SEED as q,CS2_MIN_STATTRAK as J,CS2_MIN_STICKER_ROTATION as Y,CS2_MIN_STICKER_WEAR as X,CS2_MIN_WEAR as Z,CS2_MIN_WELL_WORN_WEAR as Q,CS2_MISC_CATEGORIES as $,CS2_NAMETAGGABLE_ITEMS as ee,CS2_NAMETAG_RE as te,CS2_NAMETAG_TOOL_DEF as ne,CS2_PAINTABLE_ITEMS as re,CS2_PATCHABLE_ITEMS as ie,CS2_RIFLE_CATEGORIES as ae,CS2_SEEDABLE_ITEMS as oe,CS2_SNIPER_RIFLE_MODELS as se,CS2_STATTRAKABLE_ITEMS as ce,CS2_STATTRAK_SWAP_TOOL_DEF as le,CS2_STICKERABLE_ITEMS as ue,CS2_STICKER_OFFSET_FACTOR as de,CS2_STICKER_ROTATION_STEP as fe,CS2_STICKER_SCRAPE_FACTOR as pe,CS2_STICKER_WEAR_FACTOR as me,CS2_STORAGE_UNIT_TOOL_DEF as he,CS2_TEAMS_BOTH as ge,CS2_TEAMS_CT as _e,CS2_TEAMS_T as ve,CS2_WEAR_FACTOR as ye}from"./economy-constants.mjs";import{CS2Rarity as be,CS2RarityColor as xe,CS2RarityColorName as Se,CS2RarityColorOrder as Ce,CS2RaritySoundName as we,CS2_BASE_ODD as Te,CS2_RARITIES as Ee,CS2_RARITY_COLOR_DEFAULT as De,CS2_RARITY_ORDER as Oe,CS2_STATTRAK_ODD as ke,randomBoolean as Ae,randomFloat as je,randomInt as Me}from"./economy-container.mjs";import{CS2Economy as Ne,CS2EconomyInstance as Pe,CS2EconomyItem as Fe}from"./economy.mjs";import{CS2Inventory as Ie,CS2InventoryItem as Le,CS2_INVENTORY_EQUIPPABLE_ITEMS as Re,CS2_INVENTORY_TIMESTAMP as ze,CS2_INVENTORY_VERSION as Be,getNextStickerSchema as Ve,getNextUid as He,getTimestamp as Ue,healStickerOffset as We,snapStickerRotation as Ge,stickerMapToArray as Ke,toStickerMap as qe,validateStickerRotation as Je}from"./inventory.mjs";import{CS2_ITEMS as Ye}from"./items.mjs";import{CS2KeyValues as Xe}from"./keyvalues.mjs";import{CS2KeyValues3 as Ze}from"./keyvalues3.mjs";import{CS2_ACTIVE_MAP_POOL as Qe,CS2_ALL_MAPS as $e,CS2_ANCIENT_MAP as et,CS2_ANUBIS_MAP as tt,CS2_CACHE_MAP as nt,CS2_DUST2_MAP as rt,CS2_INFERNO_MAP as it,CS2_MIRAGE_MAP as at,CS2_NUKE_MAP as ot,CS2_OVERPASS_MAP as st,CS2_TRAIN_MAP as ct,CS2_VERTIGO_MAP as lt,getMapnameName as ut}from"./maps.mjs";import{CS2Veto as dt,CS2VetoAction as ft,CS2VetoType as pt}from"./veto.mjs";export{e as CS2ContainerType,Ne as CS2Economy,Pe as CS2EconomyInstance,Fe as CS2EconomyItem,Ie as CS2Inventory,Le as CS2InventoryItem,t as CS2ItemTeam,n as CS2ItemType,r as CS2ItemWear,Xe as CS2KeyValues,Ze as CS2KeyValues3,be as CS2Rarity,xe as CS2RarityColor,Se as CS2RarityColorName,Ce as CS2RarityColorOrder,we as CS2RaritySoundName,g as CS2Team,dt as CS2Veto,ft as CS2VetoAction,pt as CS2VetoType,Qe as CS2_ACTIVE_MAP_POOL,$e as CS2_ALL_MAPS,et as CS2_ANCIENT_MAP,tt as CS2_ANUBIS_MAP,Te as CS2_BASE_ODD,nt as CS2_CACHE_MAP,v as CS2_CONTAINER_ITEMS,y as CS2_CONTRACT_TOOL_DEF,b as CS2_DEFAULT_MAX_WEAR,x as CS2_DEFAULT_MIN_WEAR,S as CS2_DISPLAY_ITEMS,rt as CS2_DUST2_MAP,C as CS2_EQUIPMENT_ITEMS,w as CS2_GRAPHIC_ART_ITEMS,it as CS2_INFERNO_MAP,Re as CS2_INVENTORY_EQUIPPABLE_ITEMS,ze as CS2_INVENTORY_TIMESTAMP,Be as CS2_INVENTORY_VERSION,Ye as CS2_ITEMS,T as CS2_KEYCHAINABLE_ITEMS,E as CS2_MACHINEGUN_MODELS,D as CS2_MAX_BATTLE_SCARRED_WEAR,O as CS2_MAX_FACTORY_NEW_WEAR,k as CS2_MAX_FIELD_TESTED_WEAR,A as CS2_MAX_KEYCHAINS,j as CS2_MAX_KEYCHAIN_SEED,M as CS2_MAX_MINIMAL_WEAR_WEAR,N as CS2_MAX_PATCHES,P as CS2_MAX_SEED,F as CS2_MAX_STATTRAK,I as CS2_MAX_STICKERS,L as CS2_MAX_STICKER_ROTATION,R as CS2_MAX_STICKER_WEAR,z as CS2_MAX_WEAR,B as CS2_MAX_WELL_WORN_WEAR,V as CS2_MIDTIER_CATEGORIES,H as CS2_MIN_BATTLE_SCARRED_WEAR,U as CS2_MIN_FACTORY_NEW_WEAR,W as CS2_MIN_FIELD_TESTED_WEAR,G as CS2_MIN_KEYCHAIN_SEED,K as CS2_MIN_MINIMAL_WEAR_WEAR,q as CS2_MIN_SEED,J as CS2_MIN_STATTRAK,Y as CS2_MIN_STICKER_ROTATION,X as CS2_MIN_STICKER_WEAR,Z as CS2_MIN_WEAR,Q as CS2_MIN_WELL_WORN_WEAR,at as CS2_MIRAGE_MAP,$ as CS2_MISC_CATEGORIES,ee as CS2_NAMETAGGABLE_ITEMS,te as CS2_NAMETAG_RE,ne as CS2_NAMETAG_TOOL_DEF,ot as CS2_NUKE_MAP,st as CS2_OVERPASS_MAP,re as CS2_PAINTABLE_ITEMS,ie as CS2_PATCHABLE_ITEMS,Ee as CS2_RARITIES,De as CS2_RARITY_COLOR_DEFAULT,Oe as CS2_RARITY_ORDER,ae as CS2_RIFLE_CATEGORIES,oe as CS2_SEEDABLE_ITEMS,se as CS2_SNIPER_RIFLE_MODELS,ce as CS2_STATTRAKABLE_ITEMS,ke as CS2_STATTRAK_ODD,le as CS2_STATTRAK_SWAP_TOOL_DEF,ue as CS2_STICKERABLE_ITEMS,de as CS2_STICKER_OFFSET_FACTOR,fe as CS2_STICKER_ROTATION_STEP,pe as CS2_STICKER_SCRAPE_FACTOR,me as CS2_STICKER_WEAR_FACTOR,he as CS2_STORAGE_UNIT_TOOL_DEF,ge as CS2_TEAMS_BOTH,_e as CS2_TEAMS_CT,ve as CS2_TEAMS_T,ct as CS2_TRAIN_MAP,lt as CS2_VERTIGO_MAP,ye as CS2_WEAR_FACTOR,i as assert,a as clamp,o as compare,s as countDecimals,c as ensure,l as fail,u as float,ut as getMapnameName,Ve as getNextStickerSchema,He as getNextUid,Ue as getTimestamp,We as healStickerOffset,d as isFactorPrecise,f as isNotUndefined,Ae as randomBoolean,je as randomFloat,Me as randomInt,p as roundToFactor,m as safe,Ge as snapStickerRotation,Ke as stickerMapToArray,qe as toStickerMap,_ as toggleCS2Team,h as truncateToFactor,Je as validateStickerRotation};
1
+ import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r}from"./economy-types.mjs";import{assert as i,clamp as a,compare as o,countDecimals as s,ensure as c,fail as l,float as u,isFactorPrecise as d,isNotUndefined as f,roundToFactor as p,safe as m,truncateToFactor as h}from"./utils.mjs";import{CS2Team as g,toggleCS2Team as _}from"./teams.mjs";import{CS2_CONTAINER_ITEMS as v,CS2_CONTRACT_TOOL_DEF as y,CS2_DEFAULT_MAX_WEAR as b,CS2_DEFAULT_MIN_WEAR as x,CS2_DISPLAY_ITEMS as S,CS2_EQUIPMENT_ITEMS as C,CS2_GRAPHIC_ART_ITEMS as w,CS2_KEYCHAINABLE_ITEMS as T,CS2_KEYCHAIN_OFFSET_FACTOR as E,CS2_MACHINEGUN_MODELS as D,CS2_MAX_BATTLE_SCARRED_WEAR as O,CS2_MAX_FACTORY_NEW_WEAR as k,CS2_MAX_FIELD_TESTED_WEAR as A,CS2_MAX_KEYCHAINS as j,CS2_MAX_KEYCHAIN_SEED as M,CS2_MAX_MINIMAL_WEAR_WEAR as N,CS2_MAX_PATCHES as P,CS2_MAX_SEED as F,CS2_MAX_STATTRAK as I,CS2_MAX_STICKERS as L,CS2_MAX_STICKER_ROTATION as R,CS2_MAX_STICKER_WEAR as z,CS2_MAX_WEAR as B,CS2_MAX_WELL_WORN_WEAR as V,CS2_MIDTIER_CATEGORIES as H,CS2_MIN_BATTLE_SCARRED_WEAR as U,CS2_MIN_FACTORY_NEW_WEAR as W,CS2_MIN_FIELD_TESTED_WEAR as G,CS2_MIN_KEYCHAIN_SEED as K,CS2_MIN_MINIMAL_WEAR_WEAR as q,CS2_MIN_SEED as J,CS2_MIN_STATTRAK as Y,CS2_MIN_STICKER_ROTATION as X,CS2_MIN_STICKER_WEAR as Z,CS2_MIN_WEAR as Q,CS2_MIN_WELL_WORN_WEAR as $,CS2_MISC_CATEGORIES as ee,CS2_NAMETAGGABLE_ITEMS as te,CS2_NAMETAG_RE as ne,CS2_NAMETAG_TOOL_DEF as re,CS2_PAINTABLE_ITEMS as ie,CS2_PATCHABLE_ITEMS as ae,CS2_RIFLE_CATEGORIES as oe,CS2_SEEDABLE_ITEMS as se,CS2_SNIPER_RIFLE_MODELS as ce,CS2_STATTRAKABLE_ITEMS as le,CS2_STATTRAK_SWAP_TOOL_DEF as ue,CS2_STICKERABLE_ITEMS as de,CS2_STICKER_OFFSET_FACTOR as fe,CS2_STICKER_ROTATION_STEP as pe,CS2_STICKER_SCRAPE_FACTOR as me,CS2_STICKER_WEAR_FACTOR as he,CS2_STORAGE_UNIT_TOOL_DEF as ge,CS2_TEAMS_BOTH as _e,CS2_TEAMS_CT as ve,CS2_TEAMS_T as ye,CS2_WEAR_FACTOR as be}from"./economy-constants.mjs";import{CS2Rarity as xe,CS2RarityColor as Se,CS2RarityColorName as Ce,CS2RarityColorOrder as we,CS2RaritySoundName as Te,CS2_BASE_ODD as Ee,CS2_RARITIES as De,CS2_RARITY_COLOR_DEFAULT as Oe,CS2_RARITY_ORDER as ke,CS2_STATTRAK_ODD as Ae,randomBoolean as je,randomFloat as Me,randomInt as Ne}from"./economy-container.mjs";import{CS2Economy as Pe,CS2EconomyInstance as Fe,CS2EconomyItem as Ie}from"./economy.mjs";import{CS2Inventory as Le,CS2InventoryItem as Re,CS2_INVENTORY_EQUIPPABLE_ITEMS as ze,CS2_INVENTORY_TIMESTAMP as Be,CS2_INVENTORY_VERSION as Ve,getNextStickerSchema as He,getNextUid as Ue,getTimestamp as We,healKeychainOffset as Ge,healStickerOffset as Ke,snapStickerRotation as qe,stickerMapToArray as Je,toStickerMap as Ye,validateStickerRotation as Xe}from"./inventory.mjs";import{CS2_ITEMS as Ze}from"./items.mjs";import{CS2KeyValues as Qe}from"./keyvalues.mjs";import{CS2KeyValues3 as $e}from"./keyvalues3.mjs";import{CS2_ACTIVE_MAP_POOL as et,CS2_ALL_MAPS as tt,CS2_ANCIENT_MAP as nt,CS2_ANUBIS_MAP as rt,CS2_CACHE_MAP as it,CS2_DUST2_MAP as at,CS2_INFERNO_MAP as ot,CS2_MIRAGE_MAP as st,CS2_NUKE_MAP as ct,CS2_OVERPASS_MAP as lt,CS2_TRAIN_MAP as ut,CS2_VERTIGO_MAP as dt,getMapnameName as ft}from"./maps.mjs";import{CS2Veto as pt,CS2VetoAction as mt,CS2VetoType as ht}from"./veto.mjs";export{e as CS2ContainerType,Pe as CS2Economy,Fe as CS2EconomyInstance,Ie as CS2EconomyItem,Le as CS2Inventory,Re as CS2InventoryItem,t as CS2ItemTeam,n as CS2ItemType,r as CS2ItemWear,Qe as CS2KeyValues,$e as CS2KeyValues3,xe as CS2Rarity,Se as CS2RarityColor,Ce as CS2RarityColorName,we as CS2RarityColorOrder,Te as CS2RaritySoundName,g as CS2Team,pt as CS2Veto,mt as CS2VetoAction,ht as CS2VetoType,et as CS2_ACTIVE_MAP_POOL,tt as CS2_ALL_MAPS,nt as CS2_ANCIENT_MAP,rt as CS2_ANUBIS_MAP,Ee as CS2_BASE_ODD,it as CS2_CACHE_MAP,v as CS2_CONTAINER_ITEMS,y as CS2_CONTRACT_TOOL_DEF,b as CS2_DEFAULT_MAX_WEAR,x as CS2_DEFAULT_MIN_WEAR,S as CS2_DISPLAY_ITEMS,at as CS2_DUST2_MAP,C as CS2_EQUIPMENT_ITEMS,w as CS2_GRAPHIC_ART_ITEMS,ot as CS2_INFERNO_MAP,ze as CS2_INVENTORY_EQUIPPABLE_ITEMS,Be as CS2_INVENTORY_TIMESTAMP,Ve as CS2_INVENTORY_VERSION,Ze as CS2_ITEMS,T as CS2_KEYCHAINABLE_ITEMS,E as CS2_KEYCHAIN_OFFSET_FACTOR,D as CS2_MACHINEGUN_MODELS,O as CS2_MAX_BATTLE_SCARRED_WEAR,k as CS2_MAX_FACTORY_NEW_WEAR,A as CS2_MAX_FIELD_TESTED_WEAR,j as CS2_MAX_KEYCHAINS,M as CS2_MAX_KEYCHAIN_SEED,N as CS2_MAX_MINIMAL_WEAR_WEAR,P as CS2_MAX_PATCHES,F as CS2_MAX_SEED,I as CS2_MAX_STATTRAK,L as CS2_MAX_STICKERS,R as CS2_MAX_STICKER_ROTATION,z as CS2_MAX_STICKER_WEAR,B as CS2_MAX_WEAR,V as CS2_MAX_WELL_WORN_WEAR,H as CS2_MIDTIER_CATEGORIES,U as CS2_MIN_BATTLE_SCARRED_WEAR,W as CS2_MIN_FACTORY_NEW_WEAR,G as CS2_MIN_FIELD_TESTED_WEAR,K as CS2_MIN_KEYCHAIN_SEED,q as CS2_MIN_MINIMAL_WEAR_WEAR,J as CS2_MIN_SEED,Y as CS2_MIN_STATTRAK,X as CS2_MIN_STICKER_ROTATION,Z as CS2_MIN_STICKER_WEAR,Q as CS2_MIN_WEAR,$ as CS2_MIN_WELL_WORN_WEAR,st as CS2_MIRAGE_MAP,ee as CS2_MISC_CATEGORIES,te as CS2_NAMETAGGABLE_ITEMS,ne as CS2_NAMETAG_RE,re as CS2_NAMETAG_TOOL_DEF,ct as CS2_NUKE_MAP,lt as CS2_OVERPASS_MAP,ie as CS2_PAINTABLE_ITEMS,ae as CS2_PATCHABLE_ITEMS,De as CS2_RARITIES,Oe as CS2_RARITY_COLOR_DEFAULT,ke as CS2_RARITY_ORDER,oe as CS2_RIFLE_CATEGORIES,se as CS2_SEEDABLE_ITEMS,ce as CS2_SNIPER_RIFLE_MODELS,le as CS2_STATTRAKABLE_ITEMS,Ae as CS2_STATTRAK_ODD,ue as CS2_STATTRAK_SWAP_TOOL_DEF,de as CS2_STICKERABLE_ITEMS,fe as CS2_STICKER_OFFSET_FACTOR,pe as CS2_STICKER_ROTATION_STEP,me as CS2_STICKER_SCRAPE_FACTOR,he as CS2_STICKER_WEAR_FACTOR,ge as CS2_STORAGE_UNIT_TOOL_DEF,_e as CS2_TEAMS_BOTH,ve as CS2_TEAMS_CT,ye as CS2_TEAMS_T,ut as CS2_TRAIN_MAP,dt as CS2_VERTIGO_MAP,be as CS2_WEAR_FACTOR,i as assert,a as clamp,o as compare,s as countDecimals,c as ensure,l as fail,u as float,ft as getMapnameName,He as getNextStickerSchema,Ue as getNextUid,We as getTimestamp,Ge as healKeychainOffset,Ke as healStickerOffset,d as isFactorPrecise,f as isNotUndefined,je as randomBoolean,Me as randomFloat,Ne as randomInt,p as roundToFactor,m as safe,qe as snapStickerRotation,Je as stickerMapToArray,Ye as toStickerMap,_ as toggleCS2Team,h as truncateToFactor,Xe as validateStickerRotation};
@@ -20,17 +20,9 @@ interface CS2BaseInventoryItem {
20
20
  patches?: Record<string, number>;
21
21
  seed?: number;
22
22
  statTrak?: number;
23
- /**
24
- * Stickers on the item — a stack of up to {@link CS2_MAX_STICKERS}. The record key is the
25
- * **slot/index**: the 0-based stack (draw) position. Each sticker's **`schema`** is its physical
26
- * anchor — an index into the model's `StickerMarkup`, valid in
27
- * `[0, CS2EconomyItem.getStickerSchemaCount())`. The stack can outnumber a model's schemas, so
28
- * stickers may share an anchor.
29
- */
30
23
  stickers?: Record<string, {
31
24
  id: number;
32
25
  rotation?: number;
33
- /** Physical anchor: a `StickerMarkup` index in `[0, CS2EconomyItem.getStickerSchemaCount())`. */
34
26
  schema?: number;
35
27
  wear?: number;
36
28
  x?: number;
@@ -59,29 +51,10 @@ declare function getTimestamp(): number;
59
51
  declare function getNextUid(map: Map<number, unknown>): number;
60
52
  declare function stickerMapToArray(stickers: Map<number, RecordValue<CS2BaseInventoryItem["stickers"]>> | undefined): RecordValue<CS2BaseInventoryItem["stickers"]>[];
61
53
  declare function toStickerMap(stickers: CS2BaseInventoryItem["stickers"]): Map<number, RecordValue<CS2BaseInventoryItem["stickers"]>> | undefined;
62
- /**
63
- * Normalizes a stored sticker offset so healed data passes validation: drops non-finite values,
64
- * truncates onto the {@link CS2_STICKER_OFFSET_FACTOR} grid, then clamps into the model's
65
- * `[min, max]` (pass the item's `getMinimum/MaximumStickerOffsetX/Y()`; each bound skipped when undefined).
66
- */
67
54
  declare function healStickerOffset(value: number | undefined, min: number | undefined, max: number | undefined): number | undefined;
68
- /**
69
- * True when `rotation` is a valid sticker rotation: on the {@link CS2_STICKER_ROTATION_STEP}
70
- * half-degree grid (…, -0.5, 0, 0.5, 1, …) and within
71
- * [{@link CS2_MIN_STICKER_ROTATION}, {@link CS2_MAX_STICKER_ROTATION}]. `undefined` (unset) is valid.
72
- */
55
+ declare function healKeychainOffset(value: number | undefined, min: number | undefined, max: number | undefined): number | undefined;
73
56
  declare function validateStickerRotation(rotation?: number): boolean;
74
- /**
75
- * Snaps a rotation in degrees to the nearest {@link CS2_STICKER_ROTATION_STEP} grid value
76
- * (2.4 → 2.5, 2.7 → 2.5). Exact - half-degree values are binary-representable, so no float noise.
77
- * Does NOT range-wrap; pair with {@link validateStickerRotation}.
78
- */
79
57
  declare function snapStickerRotation(rotation: number): number;
80
- /**
81
- * The schema (StickerMarkup anchor) a freshly applied sticker should occupy: the first anchor in
82
- * `[0, schemaCount)` no current sticker uses, falling back to `0` once every anchor is taken (so the
83
- * stack can exceed the schema count). Pass the target's {@link CS2EconomyItem.getStickerSchemaCount}.
84
- */
85
58
  declare function getNextStickerSchema(stickers: RecordValue<CS2BaseInventoryItem["stickers"]>[], schemaCount: number): number;
86
59
  declare class CS2Inventory {
87
60
  private economy;
@@ -94,9 +67,6 @@ declare class CS2Inventory {
94
67
  private validateKeychains;
95
68
  private validatePatches;
96
69
  healBaseInventoryItem(item: CS2BaseInventoryItem): void;
97
- /**
98
- * @deprecated Use {@link healBaseInventoryItem} instead.
99
- */
100
70
  removeInvalidItemReferences(item: CS2BaseInventoryItem): void;
101
71
  validateBaseInventoryItem({ id, keychains, nameTag, patches, seed, statTrak, stickers, wear }: CS2BaseInventoryItem): void;
102
72
  private toInventoryItems;
@@ -106,14 +76,8 @@ declare class CS2Inventory {
106
76
  add(item: CS2BaseInventoryItem): this;
107
77
  private addInventoryItem;
108
78
  addWithNameTag(nameTagUid: number, id: number, nameTag: string): this;
109
- /**
110
- * Adds a new item `id` to the inventory with the sticker item `stickerUid` applied to its first
111
- * slot, consuming the sticker. The optional `attributes` set that sticker's `schema` (its physical
112
- * {@link CS2EconomyItem.getStickerSchemaCount} anchor), `x`/`y` offset, `rotation`, and `wear`. All
113
- * are validated against the new item before anything mutates, so an invalid value throws without
114
- * consuming the sticker.
115
- */
116
79
  addWithSticker(stickerUid: number, id: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["stickers"]>, "id">): this;
80
+ addWithKeychain(keychainUid: number, id: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["keychains"]>, "id">): this;
117
81
  edit(itemUid: number, properties: Partial<CS2BaseInventoryItem>): this;
118
82
  equip(itemUid: number, team?: CS2Team): this;
119
83
  unequip(uid: number, team?: CS2Team): this;
@@ -128,13 +92,6 @@ declare class CS2Inventory {
128
92
  getStorageUnitItems(storageUid: number): CS2InventoryItem[];
129
93
  depositToStorageUnit(storageUid: number, depositUids: number[]): this;
130
94
  retrieveFromStorageUnit(storageUid: number, retrieveUids: number[]): this;
131
- /**
132
- * Applies the sticker item `stickerUid` onto `targetUid`, appending it to the stack. The optional
133
- * `attributes` set the new sticker's `schema` (its physical {@link CS2EconomyItem.getStickerSchemaCount}
134
- * anchor — defaults to the next free anchor), `x`/`y` offset, `rotation`, and `wear`. All are
135
- * validated against the target before anything mutates, so an invalid value throws without
136
- * consuming the sticker.
137
- */
138
95
  applyItemSticker(targetUid: number, stickerUid: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["stickers"]>, "id">): this;
139
96
  removeItemSticker(targetUid: number, index: number): this;
140
97
  moveItemSticker(targetUid: number, fromIndex: number, toIndex: number): this;
@@ -191,4 +148,4 @@ declare class CS2InventoryItem extends CS2EconomyItem implements Interface<Omit<
191
148
  asBase(): CS2BaseInventoryItem;
192
149
  }
193
150
  //#endregion
194
- export { CS2BaseInventoryItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, getNextStickerSchema, getNextUid, getTimestamp, healStickerOffset, snapStickerRotation, stickerMapToArray, toStickerMap, validateStickerRotation };
151
+ export { CS2BaseInventoryItem, CS2Inventory, CS2InventoryData, CS2InventoryItem, CS2InventoryOptions, CS2InventorySpec, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, getNextStickerSchema, getNextUid, getTimestamp, healKeychainOffset, healStickerOffset, snapStickerRotation, stickerMapToArray, toStickerMap, validateStickerRotation };
@@ -1 +1 @@
1
- import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,clamp as n,ensure as r,isFactorPrecise as i,roundToFactor as a,truncateToFactor as o}from"./utils.mjs";import{CS2Team as s}from"./teams.mjs";import{CS2_STICKER_OFFSET_FACTOR as c,CS2_STICKER_ROTATION_STEP as l,CS2_STICKER_SCRAPE_FACTOR as u,CS2_STICKER_WEAR_FACTOR as d}from"./economy-constants.mjs";import{CS2Economy as f,CS2EconomyItem as p}from"./economy.mjs";import{resolveInventoryData as m}from"./inventory-upgrader.mjs";const h=1,g=1707696138408,_=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function v(){return Math.ceil((Date.now()-g)/1e3)}function y(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function b(e){return D.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function x(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}function S(e,t,n){if(!(e===void 0||!Number.isFinite(e)))return e=o(e,c),t!==void 0&&e<t?t:n!==void 0&&e>n?n:e}function C(e){return e===void 0||Number.isInteger(e/.5)&&e>=-180&&e<=180}function w(e){return Math.round(e/l)*l}function T(e,t){let n=new Set(e.map(({schema:e})=>e));for(let e=0;e<t;e++)if(!n.has(e))return e;return 0}var E=class e{economy;items;options;static parse(e,t){return m(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??f,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.values(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let{id:e,wear:a,rotation:o,x:s,y:l,schema:u}of r){if(this.economy.getById(e).expectSticker(),a!==void 0&&(t(i(a,d)),t(a>=0&&a<=1)),o!==void 0&&t(C(o)),s!==void 0&&(t(i(s,c)),n!==void 0)){let e=n.getMinimumStickerOffsetX(),r=n.getMaximumStickerOffsetX();t(e===void 0||s>=e),t(r===void 0||s<=r)}if(l!==void 0&&(t(i(l,c)),n!==void 0)){let e=n.getMinimumStickerOffsetY(),r=n.getMaximumStickerOffsetY();t(e===void 0||l>=e),t(r===void 0||l<=r)}u!==void 0&&(t(Number.isInteger(u)),t(u>=0&&u<(n?.getStickerSchemaCount()??5)))}}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:n,seed:i,x:a,y:o,z:s}]of r){let r=parseInt(e,10);t(r>=0&&r<=0),this.economy.getById(n).expectKeychain(),i!==void 0&&(t(Number.isFinite(i)),t(Number.isInteger(i)),t(i>=1&&i<=1e5)),a!==void 0&&t(Number.isFinite(a)),o!==void 0&&t(Number.isFinite(o)),s!==void 0&&t(Number.isFinite(s))}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else{for(let[n,r]of Object.entries(e.stickers)){if(!this.economy.items.has(r.id)){delete e.stickers[n];continue}if(r.rotation!==void 0){let e=w(r.rotation);e>180&&(e-=360),r.rotation=C(e)?e:void 0}r.x=S(r.x,t.getMinimumStickerOffsetX(),t.getMaximumStickerOffsetX()),r.y=S(r.y,t.getMinimumStickerOffsetY(),t.getMaximumStickerOffsetY())}e.stickers=D.stickersFromArray(D.stickersToArray(e.stickers,t.getStickerSchemaCount()))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[t,n]of Object.entries(e.keychains))this.economy.items.has(n.id)||delete e.keychains[t];e.wear!==void 0&&(t.hasWear()?(e.wear=n(e.wear,t.getMinimumWear(),t.getMaximumWear()),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)):e.wear=void 0)}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new D(this,n,t,this.economy.getById(t.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}stringify(){return JSON.stringify(this.getData())}isFull(){return this.items.size>=this.options.maxItems}add(e){t(!this.isFull());let n=y(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new D(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:v()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=y(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=v(),this.items.set(n,e),this}addWithNameTag(e,t,n){return this.get(e).expectNameTag(),this.economy.requireNameTag(n),this.items.delete(e),this.add({id:t,nameTag:n}),this}addWithSticker(e,t,n={}){let r=this.get(e).expectSticker(),{schema:i,x:a,y:o,rotation:s,wear:c}=n,l={0:{id:r.id,schema:i,x:a,y:o,rotation:s,wear:c}};return this.validateStickers(l,this.economy.getById(t)),this.items.delete(e),this.add({id:t,stickers:l}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),r.edit(n,{updatedAt:v()}),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==s.CT||r.equippedCT===void 0),t(n!==s.T||r.equippedT===void 0),t(_.includes(r.type)),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,i]of this.items)e===t?(i.equipped=n===void 0||void 0,i.equippedCT=n===s.CT||i.equippedCT,i.equippedT=n===s.T||i.equippedT):i.type===r.type&&(!r.isWeapon()||i.model===r.model)&&(i.equipped=n===void 0?void 0:i.equipped,i.equippedCT=n===s.CT?void 0:i.equippedCT,i.equippedT=n===s.T?void 0:i.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===s.CT?void 0:n.equippedCT,n.equippedT=t===s.T?void 0:n.equippedT,this}unlockContainer(e,t,n){let r=this.get(t);this.economy.expectUnlockedItem(r,e);let i=n===void 0?void 0:this.get(n);return this.economy.validateContainerAndKey(r,i),this.items.delete(t),n!==void 0&&this.items.delete(n),this.add({...e.attributes,id:e.id,updatedAt:v()}),this}renameItem(e,t,n){n=this.economy.trimNameTag(n),this.get(e).expectNameTag();let r=this.get(t);return this.economy.validateNameTag(n,r),r.nameTag=n,r.updatedAt=v(),this.items.delete(e),this}renameStorageUnit(e,t){let n=this.economy.trimNameTag(t),r=this.get(e);return r.expectStorageUnit(),this.economy.requireNameTag(n),r.nameTag=n,r.updatedAt=v(),this}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}getStorageUnitSize(e){return this.get(e).storage?.size??0}isStorageUnitFilled(e){return this.getStorageUnitSize(e)>0}canDepositToStorageUnit(e,t=1){return this.get(e).nameTag!==void 0&&this.getStorageUnitSize(e)+t<=this.options.storageUnitMaxItems}canRetrieveFromStorageUnit(e,t=1){return this.getStorageUnitSize(e)-t>=0&&this.size()+t<=this.options.maxItems}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}depositToStorageUnit(e,n){let r=this.get(e);r.expectStorageUnit(),t(n.length>0),t(this.canDepositToStorageUnit(e,n.length));for(let e of n)t(!this.get(e).isStorageUnit());let i=r.storage??new Map;for(let e of n){let t=y(i);i.set(t,Object.assign(this.get(e),{equipped:void 0,equippedCT:void 0,equippedT:void 0,uid:t})),this.items.delete(e)}return r.storage=i,r.updatedAt=v(),this}retrieveFromStorageUnit(e,n){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(n.length>0),t(this.canRetrieveFromStorageUnit(e,n.length));for(let e of n)t(a.has(e));for(let e of n){let t=r(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=v(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=b(i.stickers);t(o.length<5);let{schema:s,x:c,y:l,rotation:u,wear:d}=r;o.push({id:a.id,schema:s??T(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=D.stickersFromArray(o);return this.validateStickers(f,i),i.stickers=x(f),i.updatedAt=v(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=b(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=x(D.stickersFromArray(i)),r.updatedAt=v(),this}moveItemSticker(e,n,i){let a=this.get(e),o=b(a.stickers),s=r(o[n]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(n,1),o.splice(i,0,s),a.stickers=x(D.stickersFromArray(o)),a.updatedAt=v(),this}editItemSticker(e,n,r){let i=this.get(e),a=b(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=D.stickersFromArray(a);return this.validateStickers(o,i),i.stickers=x(o),i.updatedAt=v(),this}scrapeItemSticker(e,n,i){let o=this.get(e),s=b(o.stickers),c=r(s[n]),l=c.wear??0,f;return i===void 0?f=a(l+u,d):(t(Number.isFinite(i)),t(i>l&&i<=1),f=a(i,d)),(i===void 0?f>1:f>=1)?s.splice(n,1):s[n]={...c,wear:f},o.stickers=x(D.stickersFromArray(s)),o.updatedAt=v(),this}applyItemPatch(e,n,r){t(r>=0&&r<=4);let i=this.get(e).expectAgent(),a=this.get(n).expectPatch();return i.patches??=new Map,t(i.patches.get(r)===void 0),i.patches.set(r,a.id),i.updatedAt=v(),this.items.delete(n),this}removeItemPatch(e,n){let r=this.get(e);return t(r.patches!==void 0),t(r.patches.get(n)!==void 0),r.patches.delete(n),r.patches.size===0&&(r.patches=void 0),r.updatedAt=v(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=v()),this}swapItemsStatTrak(e,n,r){t(n!==r),this.get(e).expectStatTrakSwapTool();let i=this.get(n),a=this.get(r);t(i.statTrak!==void 0&&a.statTrak!==void 0),t(i.type===a.type),t(i.isMusicKit()||i.def===a.def);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=v(),a.statTrak=o,a.updatedAt=v(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return r(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},D=class e extends p{inventory;uid;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;assign({keychains:n,patches:r,stickers:i,storage:a}){r!==void 0&&(this.patches=new Map(Object.entries(r).filter(([,e])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.stickers=x(e.stickersFromArray(e.stickersToArray(i,this.getStickerSchemaCount()).filter(({id:e})=>this.economy.items.has(e))))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}static stickersToArray(e,t){if(e===void 0)return[];let n=Object.entries(e).map(([e,t])=>[parseInt(e,10),t]).sort(([e],[t])=>e-t).slice(0,5),r=[];for(let[e,i]of n){let n=i.schema??e;t!==void 0&&(!Number.isInteger(n)||n<0||n>=t)&&(n=T(r,t)),r.push({...i,schema:n})}return r}static stickersFromArray(e){if(e.length!==0)return Object.fromEntries(e.slice(0,5).map((e,t)=>[t,{id:e.id,schema:e.schema??t,wear:e.wear||void 0,rotation:e.rotation||void 0,x:e.x||void 0,y:e.y||void 0}]))}allStickers(){return b(this.stickers).map((e,t)=>[t,e])}someStickers(){return this.allStickers()}getStickersCount(){return this.stickers?.size??0}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}getKeychainsCount(){return this.keychains?.size??0}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}getPatchesCount(){return this.patches?.size??0}getWear(){return this.wear??this.wearMin??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getImage(e){return super.getImage(e??this.getWear())}asBase(){return{containerId:this.containerId,equipped:this.equipped,equippedCT:this.equippedCT,equippedT:this.equippedT,id:this.id,keychains:this.keychains===void 0?void 0:Object.fromEntries(this.keychains),nameTag:this.nameTag,patches:this.patches===void 0?void 0:Object.fromEntries(this.patches),seed:this.seed,statTrak:this.statTrak,stickers:this.stickers===void 0?void 0:Object.fromEntries(this.stickers),storage:this.storage===void 0?void 0:Object.fromEntries(Array.from(this.storage).map(([e,t])=>[e,t.asBase()])),updatedAt:this.updatedAt,wear:this.wear}}};export{E as CS2Inventory,D as CS2InventoryItem,_ as CS2_INVENTORY_EQUIPPABLE_ITEMS,g as CS2_INVENTORY_TIMESTAMP,h as CS2_INVENTORY_VERSION,T as getNextStickerSchema,y as getNextUid,v as getTimestamp,S as healStickerOffset,w as snapStickerRotation,b as stickerMapToArray,x as toStickerMap,C as validateStickerRotation};
1
+ import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,clamp as n,ensure as r,isFactorPrecise as i,roundToFactor as a,truncateToFactor as o}from"./utils.mjs";import{CS2Team as s}from"./teams.mjs";import{CS2_KEYCHAIN_OFFSET_FACTOR as c,CS2_STICKER_OFFSET_FACTOR as l,CS2_STICKER_ROTATION_STEP as u,CS2_STICKER_SCRAPE_FACTOR as d,CS2_STICKER_WEAR_FACTOR as f}from"./economy-constants.mjs";import{CS2Economy as p,CS2EconomyItem as m}from"./economy.mjs";import{resolveInventoryData as h}from"./inventory-upgrader.mjs";const g=1,_=1707696138408,v=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function y(){return Math.ceil((Date.now()-_)/1e3)}function b(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function x(e){return A.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function S(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}function C(e,t,n,r){if(!(e===void 0||!Number.isFinite(e)))return e=o(e,r),t!==void 0&&e<t?t:n!==void 0&&e>n?n:e}function w(e,t,n){return C(e,t,n,l)}function T(e,t,n){return C(e,t,n,c)}function E(e){return e===void 0||Number.isInteger(e/.5)&&e>=-180&&e<=180}function D(e){return Math.round(e/u)*u}function O(e,t){let n=new Set(e.map(({schema:e})=>e));for(let e=0;e<t;e++)if(!n.has(e))return e;return 0}var k=class e{economy;items;options;static parse(e,t){return h(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??p,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.values(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let{id:e,wear:a,rotation:o,x:s,y:c,schema:u}of r){if(this.economy.getById(e).expectSticker(),a!==void 0&&(t(i(a,f)),t(a>=0&&a<=1)),o!==void 0&&t(E(o)),s!==void 0&&(t(i(s,l)),n!==void 0)){let e=n.getMinimumStickerOffsetX(),r=n.getMaximumStickerOffsetX();t(e===void 0||s>=e),t(r===void 0||s<=r)}if(c!==void 0&&(t(i(c,l)),n!==void 0)){let e=n.getMinimumStickerOffsetY(),r=n.getMaximumStickerOffsetY();t(e===void 0||c>=e),t(r===void 0||c<=r)}u!==void 0&&(t(Number.isInteger(u)),t(u>=0&&u<(n?.getStickerSchemaCount()??5)))}}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:a,seed:o,x:s,y:l,z:u}]of r){let r=parseInt(e,10);if(t(r>=0&&r<=0),this.economy.getById(a).expectKeychain(),o!==void 0&&(t(Number.isFinite(o)),t(Number.isInteger(o)),t(o>=1&&o<=1e5)),s!==void 0&&(t(Number.isFinite(s)),t(i(s,c)),n!==void 0)){let e=n.getMinimumKeychainOffsetX(),r=n.getMaximumKeychainOffsetX();t(e===void 0||s>=e),t(r===void 0||s<=r)}if(l!==void 0&&(t(Number.isFinite(l)),t(i(l,c)),n!==void 0)){let e=n.getMinimumKeychainOffsetY(),r=n.getMaximumKeychainOffsetY();t(e===void 0||l>=e),t(r===void 0||l<=r)}if(u!==void 0&&(t(Number.isFinite(u)),t(i(u,c)),n!==void 0)){let e=n.getMinimumKeychainOffsetZ(),r=n.getMaximumKeychainOffsetZ();t(e===void 0||u>=e),t(r===void 0||u<=r)}}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else{for(let[n,r]of Object.entries(e.stickers)){if(!this.economy.items.has(r.id)){delete e.stickers[n];continue}if(r.rotation!==void 0){let e=D(r.rotation);e>180&&(e-=360),r.rotation=E(e)?e:void 0}r.x=w(r.x,t.getMinimumStickerOffsetX(),t.getMaximumStickerOffsetX()),r.y=w(r.y,t.getMinimumStickerOffsetY(),t.getMaximumStickerOffsetY())}e.stickers=A.stickersFromArray(A.stickersToArray(e.stickers,t.getStickerSchemaCount()))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[n,r]of Object.entries(e.keychains)){if(!this.economy.items.has(r.id)){delete e.keychains[n];continue}r.x=T(r.x,t.getMinimumKeychainOffsetX(),t.getMaximumKeychainOffsetX()),r.y=T(r.y,t.getMinimumKeychainOffsetY(),t.getMaximumKeychainOffsetY()),r.z=T(r.z,t.getMinimumKeychainOffsetZ(),t.getMaximumKeychainOffsetZ())}e.wear!==void 0&&(t.hasWear()?(e.wear=n(e.wear,t.getMinimumWear(),t.getMaximumWear()),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)):e.wear=void 0)}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new A(this,n,t,this.economy.getById(t.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}stringify(){return JSON.stringify(this.getData())}isFull(){return this.items.size>=this.options.maxItems}add(e){t(!this.isFull());let n=b(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new A(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:y()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=b(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=y(),this.items.set(n,e),this}addWithNameTag(e,t,n){return this.get(e).expectNameTag(),this.economy.requireNameTag(n),this.items.delete(e),this.add({id:t,nameTag:n}),this}addWithSticker(e,t,n={}){let r=this.get(e).expectSticker(),{schema:i,x:a,y:o,rotation:s,wear:c}=n,l={0:{id:r.id,schema:i,x:a,y:o,rotation:s,wear:c}};return this.validateStickers(l,this.economy.getById(t)),this.items.delete(e),this.add({id:t,stickers:l}),this}addWithKeychain(e,t,n={}){let r=this.get(e).expectKeychain(),{seed:i,x:a,y:o,z:s}=n,c={0:{id:r.id,seed:i,x:a,y:o,z:s}};return this.validateKeychains(c,this.economy.getById(t)),this.items.delete(e),this.add({id:t,keychains:c}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),r.edit(n,{updatedAt:y()}),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==s.CT||r.equippedCT===void 0),t(n!==s.T||r.equippedT===void 0),t(v.includes(r.type)),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,i]of this.items)e===t?(i.equipped=n===void 0||void 0,i.equippedCT=n===s.CT||i.equippedCT,i.equippedT=n===s.T||i.equippedT):i.type===r.type&&(!r.isWeapon()||i.model===r.model)&&(i.equipped=n===void 0?void 0:i.equipped,i.equippedCT=n===s.CT?void 0:i.equippedCT,i.equippedT=n===s.T?void 0:i.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===s.CT?void 0:n.equippedCT,n.equippedT=t===s.T?void 0:n.equippedT,this}unlockContainer(e,t,n){let r=this.get(t);this.economy.expectUnlockedItem(r,e);let i=n===void 0?void 0:this.get(n);return this.economy.validateContainerAndKey(r,i),this.items.delete(t),n!==void 0&&this.items.delete(n),this.add({...e.attributes,id:e.id,updatedAt:y()}),this}renameItem(e,t,n){n=this.economy.trimNameTag(n),this.get(e).expectNameTag();let r=this.get(t);return this.economy.validateNameTag(n,r),r.nameTag=n,r.updatedAt=y(),this.items.delete(e),this}renameStorageUnit(e,t){let n=this.economy.trimNameTag(t),r=this.get(e);return r.expectStorageUnit(),this.economy.requireNameTag(n),r.nameTag=n,r.updatedAt=y(),this}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}getStorageUnitSize(e){return this.get(e).storage?.size??0}isStorageUnitFilled(e){return this.getStorageUnitSize(e)>0}canDepositToStorageUnit(e,t=1){return this.get(e).nameTag!==void 0&&this.getStorageUnitSize(e)+t<=this.options.storageUnitMaxItems}canRetrieveFromStorageUnit(e,t=1){return this.getStorageUnitSize(e)-t>=0&&this.size()+t<=this.options.maxItems}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}depositToStorageUnit(e,n){let r=this.get(e);r.expectStorageUnit(),t(n.length>0),t(this.canDepositToStorageUnit(e,n.length));for(let e of n)t(!this.get(e).isStorageUnit());let i=r.storage??new Map;for(let e of n){let t=b(i);i.set(t,Object.assign(this.get(e),{equipped:void 0,equippedCT:void 0,equippedT:void 0,uid:t})),this.items.delete(e)}return r.storage=i,r.updatedAt=y(),this}retrieveFromStorageUnit(e,n){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(n.length>0),t(this.canRetrieveFromStorageUnit(e,n.length));for(let e of n)t(a.has(e));for(let e of n){let t=r(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=y(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=x(i.stickers);t(o.length<5);let{schema:s,x:c,y:l,rotation:u,wear:d}=r;o.push({id:a.id,schema:s??O(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=A.stickersFromArray(o);return this.validateStickers(f,i),i.stickers=S(f),i.updatedAt=y(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=x(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=S(A.stickersFromArray(i)),r.updatedAt=y(),this}moveItemSticker(e,n,i){let a=this.get(e),o=x(a.stickers),s=r(o[n]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(n,1),o.splice(i,0,s),a.stickers=S(A.stickersFromArray(o)),a.updatedAt=y(),this}editItemSticker(e,n,r){let i=this.get(e),a=x(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=A.stickersFromArray(a);return this.validateStickers(o,i),i.stickers=S(o),i.updatedAt=y(),this}scrapeItemSticker(e,n,i){let o=this.get(e),s=x(o.stickers),c=r(s[n]),l=c.wear??0,u;return i===void 0?u=a(l+d,f):(t(Number.isFinite(i)),t(i>l&&i<=1),u=a(i,f)),(i===void 0?u>1:u>=1)?s.splice(n,1):s[n]={...c,wear:u},o.stickers=S(A.stickersFromArray(s)),o.updatedAt=y(),this}applyItemPatch(e,n,r){t(r>=0&&r<=4);let i=this.get(e).expectAgent(),a=this.get(n).expectPatch();return i.patches??=new Map,t(i.patches.get(r)===void 0),i.patches.set(r,a.id),i.updatedAt=y(),this.items.delete(n),this}removeItemPatch(e,n){let r=this.get(e);return t(r.patches!==void 0),t(r.patches.get(n)!==void 0),r.patches.delete(n),r.patches.size===0&&(r.patches=void 0),r.updatedAt=y(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=y()),this}swapItemsStatTrak(e,n,r){t(n!==r),this.get(e).expectStatTrakSwapTool();let i=this.get(n),a=this.get(r);t(i.statTrak!==void 0&&a.statTrak!==void 0),t(i.type===a.type),t(i.isMusicKit()||i.def===a.def);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=y(),a.statTrak=o,a.updatedAt=y(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return r(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},A=class e extends m{inventory;uid;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;assign({keychains:n,patches:r,stickers:i,storage:a}){r!==void 0&&(this.patches=new Map(Object.entries(r).filter(([,e])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.stickers=S(e.stickersFromArray(e.stickersToArray(i,this.getStickerSchemaCount()).filter(({id:e})=>this.economy.items.has(e))))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}static stickersToArray(e,t){if(e===void 0)return[];let n=Object.entries(e).map(([e,t])=>[parseInt(e,10),t]).sort(([e],[t])=>e-t).slice(0,5),r=[];for(let[e,i]of n){let n=i.schema??e;t!==void 0&&(!Number.isInteger(n)||n<0||n>=t)&&(n=O(r,t)),r.push({...i,schema:n})}return r}static stickersFromArray(e){if(e.length!==0)return Object.fromEntries(e.slice(0,5).map((e,t)=>[t,{id:e.id,schema:e.schema??t,wear:e.wear||void 0,rotation:e.rotation||void 0,x:e.x||void 0,y:e.y||void 0}]))}allStickers(){return x(this.stickers).map((e,t)=>[t,e])}someStickers(){return this.allStickers()}getStickersCount(){return this.stickers?.size??0}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}getKeychainsCount(){return this.keychains?.size??0}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}getPatchesCount(){return this.patches?.size??0}getWear(){return this.wear??this.wearMin??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getImage(e){return super.getImage(e??this.getWear())}asBase(){return{containerId:this.containerId,equipped:this.equipped,equippedCT:this.equippedCT,equippedT:this.equippedT,id:this.id,keychains:this.keychains===void 0?void 0:Object.fromEntries(this.keychains),nameTag:this.nameTag,patches:this.patches===void 0?void 0:Object.fromEntries(this.patches),seed:this.seed,statTrak:this.statTrak,stickers:this.stickers===void 0?void 0:Object.fromEntries(this.stickers),storage:this.storage===void 0?void 0:Object.fromEntries(Array.from(this.storage).map(([e,t])=>[e,t.asBase()])),updatedAt:this.updatedAt,wear:this.wear}}};export{k as CS2Inventory,A as CS2InventoryItem,v as CS2_INVENTORY_EQUIPPABLE_ITEMS,_ as CS2_INVENTORY_TIMESTAMP,g as CS2_INVENTORY_VERSION,O as getNextStickerSchema,b as getNextUid,y as getTimestamp,T as healKeychainOffset,w as healStickerOffset,D as snapStickerRotation,x as stickerMapToArray,S as toStickerMap,E as validateStickerRotation};