@ianlucas/cs2-lib 9.0.0-rc.3 → 9.0.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/economy-constants.d.mts +2 -1
- package/dist/economy-constants.mjs +1 -1
- package/dist/economy.d.mts +9 -0
- package/dist/economy.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/inventory-rules.mjs +1 -1
- package/dist/inventory.d.mts +3 -0
- package/dist/inventory.mjs +1 -1
- package/dist/translations/brazilian.mjs +1 -1
- package/dist/translations/bulgarian.mjs +1 -1
- package/dist/translations/czech.mjs +1 -1
- package/dist/translations/danish.mjs +1 -1
- package/dist/translations/dutch.mjs +1 -1
- package/dist/translations/english.mjs +1 -1
- package/dist/translations/finnish.mjs +1 -1
- package/dist/translations/french.mjs +1 -1
- package/dist/translations/german.mjs +1 -1
- package/dist/translations/greek.mjs +1 -1
- package/dist/translations/hungarian.mjs +1 -1
- package/dist/translations/indonesian.mjs +1 -1
- package/dist/translations/italian.mjs +1 -1
- package/dist/translations/japanese.mjs +1 -1
- package/dist/translations/koreana.mjs +1 -1
- package/dist/translations/latam.mjs +1 -1
- package/dist/translations/norwegian.mjs +1 -1
- package/dist/translations/polish.mjs +1 -1
- package/dist/translations/portuguese.mjs +1 -1
- package/dist/translations/romanian.mjs +1 -1
- package/dist/translations/russian.mjs +1 -1
- package/dist/translations/schinese.mjs +1 -1
- package/dist/translations/spanish.mjs +1 -1
- package/dist/translations/swedish.mjs +1 -1
- package/dist/translations/tchinese.mjs +1 -1
- package/dist/translations/thai.mjs +1 -1
- package/dist/translations/turkish.mjs +1 -1
- package/dist/translations/ukrainian.mjs +1 -1
- package/dist/translations/vietnamese.mjs +1 -1
- package/package.json +2 -2
|
@@ -45,6 +45,7 @@ declare const CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX = 65;
|
|
|
45
45
|
declare const CS2_CONTRACT_TOOL_DEFINITION_INDEX = 62;
|
|
46
46
|
declare const CS2_NAMETAG_TOOL_DEFINITION_INDEX = 1200;
|
|
47
47
|
declare const CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX = 1324;
|
|
48
|
+
declare const CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX = 1355;
|
|
48
49
|
declare const CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX = 1201;
|
|
49
50
|
declare const CS2_CONTAINER_ITEMS: CS2ItemType[];
|
|
50
51
|
declare const CS2_DISPLAY_ITEMS: CS2ItemType[];
|
|
@@ -66,4 +67,4 @@ declare const CS2_TEAMS_BOTH: CS2Team[];
|
|
|
66
67
|
declare const CS2_TEAMS_CT: CS2Team[];
|
|
67
68
|
declare const CS2_TEAMS_T: CS2Team[];
|
|
68
69
|
//#endregion
|
|
69
|
-
export { CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR };
|
|
70
|
+
export { CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, 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=5e4,D=5,O=5,k=1,A=1,j=50,M=2**53-1,N=3,P=.01,F=.1,I=1e-4,L=.5,R=1e-4,z=1e-6,B=/^[A-Za-z0-9`!@#$%^&*-+=(){}\[\]\/\|\\,.?:;'_,。;!\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\s]{0,20}$/u,V=4950,H=65,U=62,W=1200,G=1324,K=
|
|
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=5e4,D=5,O=5,k=1,A=1,j=50,M=2**53-1,N=3,P=.01,F=.1,I=1e-4,L=.5,R=1e-4,z=1e-6,B=/^[A-Za-z0-9`!@#$%^&*-+=(){}\[\]\/\|\\,.?:;'_,。;!\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\s]{0,20}$/u,V=4950,H=65,U=62,W=1200,G=1324,K=1355,q=1201,J=[e.Container,e.Tool],Y=[e.Collectible,e.MusicKit],X=[e.Weapon,e.Agent,e.Gloves,e.Melee,e.MusicKit],Z=[e.Patch,e.Sticker,e.Graffiti,e.Keychain],Q=[e.Melee,e.Weapon],$=[e.Gloves,e.Melee,e.Weapon],ee=[e.Agent],te=[e.Weapon,e.Melee,e.Gloves,e.Keychain],ne=[e.Melee,e.Weapon,e.MusicKit],re=[e.Weapon],ie=[e.Weapon],ae=[`heavy`,`smg`],oe=[`rifle`],se=[`c4`,`equipment`],ce=[`awp`,`g3sg1`,`scar20`,`ssg08`],le=[`m249`,`negev`],ue=[t.T,t.CT],de=[t.CT],fe=[t.T];export{N as CS2_CHARM_DETACHMENT_PACK_CHARGES,V as CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX,H as CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX,J as CS2_CONTAINER_ITEMS,U as CS2_CONTRACT_TOOL_DEFINITION_INDEX,s as CS2_DEFAULT_MAX_WEAR,o as CS2_DEFAULT_MIN_WEAR,Y as CS2_DISPLAY_ITEMS,X as CS2_EQUIPMENT_ITEMS,E as CS2_FALLBACK_PREVIEW_SEED,Z as CS2_GRAPHIC_ART_ITEMS,ie as CS2_KEYCHAINABLE_ITEMS,R as CS2_KEYCHAIN_POSITION_FACTOR,le as CS2_MACHINEGUN_MODEL_KEYS,_ as CS2_MAX_BATTLE_SCARRED_WEAR,M as CS2_MAX_CHARM_DETACHMENT_CHARGES,l as CS2_MAX_FACTORY_NEW_WEAR,p as CS2_MAX_FIELD_TESTED_WEAR,j as CS2_MAX_GRAFFITI_CHARGES,k as CS2_MAX_KEYCHAINS,T as CS2_MAX_KEYCHAIN_SEED,d as CS2_MAX_MINIMAL_WEAR_WEAR,O as CS2_MAX_PATCHES,y as CS2_MAX_SEED,r as CS2_MAX_STATTRAK,D 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,ae as CS2_MIDTIER_LOADOUT_CATEGORIES,g as CS2_MIN_BATTLE_SCARRED_WEAR,A as CS2_MIN_CHARGES,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,se as CS2_MISC_LOADOUT_CATEGORIES,Q as CS2_NAMETAGGABLE_ITEMS,B as CS2_NAMETAG_RE,W as CS2_NAMETAG_TOOL_DEFINITION_INDEX,$ as CS2_PAINTABLE_ITEMS,ee as CS2_PATCHABLE_ITEMS,oe as CS2_RIFLE_LOADOUT_CATEGORIES,te as CS2_SEEDABLE_ITEMS,ce as CS2_SNIPER_RIFLE_MODEL_KEYS,ne as CS2_STATTRAKABLE_ITEMS,G as CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX,re as CS2_STICKERABLE_ITEMS,I as CS2_STICKER_OFFSET_FACTOR,L as CS2_STICKER_ROTATION_STEP,F as CS2_STICKER_SCRAPE_FACTOR,K as CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX,P as CS2_STICKER_WEAR_FACTOR,q as CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX,ue as CS2_TEAMS_BOTH,de as CS2_TEAMS_CT,fe as CS2_TEAMS_T,z as CS2_WEAR_FACTOR};
|
package/dist/economy.d.mts
CHANGED
|
@@ -13,6 +13,7 @@ declare class CS2EconomyInstance {
|
|
|
13
13
|
itemsAsArray: CS2EconomyItem[];
|
|
14
14
|
stickers: Set<CS2EconomyItem>;
|
|
15
15
|
private charmDetachment;
|
|
16
|
+
private stickerDisplayCases;
|
|
16
17
|
load({ assetsBaseUrl, items, language }: {
|
|
17
18
|
assetsBaseUrl?: string;
|
|
18
19
|
items: CS2Item[];
|
|
@@ -41,6 +42,8 @@ declare class CS2EconomyInstance {
|
|
|
41
42
|
getStickerCategories(): string[];
|
|
42
43
|
getStickers(): CS2EconomyItem[];
|
|
43
44
|
getCharmDetachment(): CS2EconomyItem;
|
|
45
|
+
getStickerDisplayCase(sticker: number | CS2EconomyItem): CS2EconomyItem;
|
|
46
|
+
hasStickerDisplayCase(sticker: number | CS2EconomyItem): boolean;
|
|
44
47
|
expectUnlockedItem(item: number | CS2EconomyItem, { id }: ReturnType<InstanceType<typeof CS2EconomyItem>["unlockContainer"]>): void;
|
|
45
48
|
resolveUrl(path?: string): string;
|
|
46
49
|
}
|
|
@@ -151,6 +154,8 @@ declare class CS2EconomyItem implements Interface<CS2Item & CS2ItemTranslation &
|
|
|
151
154
|
isContract(): boolean;
|
|
152
155
|
isCharmDetachment(): boolean;
|
|
153
156
|
isCharmDetachmentPack(): boolean;
|
|
157
|
+
isStickerSlab(): boolean;
|
|
158
|
+
isStickerDisplayCase(): boolean;
|
|
154
159
|
isWeaponCase(): boolean;
|
|
155
160
|
isStickerCapsule(): boolean;
|
|
156
161
|
isGraffitiBox(): boolean;
|
|
@@ -165,6 +170,8 @@ declare class CS2EconomyItem implements Interface<CS2Item & CS2ItemTranslation &
|
|
|
165
170
|
expectNameTag(): this;
|
|
166
171
|
expectStatTrakSwapTool(): this;
|
|
167
172
|
expectCharmDetachmentPack(): this;
|
|
173
|
+
expectStickerSlab(): this;
|
|
174
|
+
expectStickerDisplayCase(): this;
|
|
168
175
|
hasWear(): boolean;
|
|
169
176
|
hasSeed(): boolean;
|
|
170
177
|
hasStickers(): boolean;
|
|
@@ -173,6 +180,8 @@ declare class CS2EconomyItem implements Interface<CS2Item & CS2ItemTranslation &
|
|
|
173
180
|
hasNameTag(): boolean;
|
|
174
181
|
hasStatTrak(): boolean;
|
|
175
182
|
hasCharges(): boolean;
|
|
183
|
+
hasDisplayCase(): boolean;
|
|
184
|
+
getDisplayCase(): CS2EconomyItem;
|
|
176
185
|
getImageUrl(wear?: number): string;
|
|
177
186
|
getCollectionImageUrl(): string;
|
|
178
187
|
getSpecialsImageUrl(): string;
|
package/dist/economy.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r,CS2StatTrakMode as i}from"./economy-types.mjs";import{assert as a,compare as o,ensure as s,isFactorPrecise as c,safe as l,truncateToFactor as u}from"./utils.mjs";import{CS2_CONTAINER_ITEMS as d,CS2_DISPLAY_ITEMS as f,CS2_EQUIPMENT_ITEMS as p,CS2_GRAPHIC_ART_ITEMS as m,CS2_KEYCHAINABLE_ITEMS as h,CS2_MACHINEGUN_MODEL_KEYS as g,CS2_MAX_CHARM_DETACHMENT_CHARGES as _,CS2_MAX_FACTORY_NEW_WEAR as v,CS2_MAX_FIELD_TESTED_WEAR as y,CS2_MAX_KEYCHAIN_SEED as b,CS2_MAX_MINIMAL_WEAR_WEAR as x,CS2_MAX_SEED as S,CS2_MAX_WELL_WORN_WEAR as C,CS2_MIDTIER_LOADOUT_CATEGORIES as w,CS2_MISC_LOADOUT_CATEGORIES as T,CS2_NAMETAGGABLE_ITEMS as E,CS2_NAMETAG_RE as D,CS2_PAINTABLE_ITEMS as O,CS2_PATCHABLE_ITEMS as k,CS2_RIFLE_LOADOUT_CATEGORIES as A,CS2_SEEDABLE_ITEMS as j,CS2_SNIPER_RIFLE_MODEL_KEYS as M,CS2_STATTRAKABLE_ITEMS as N,CS2_STICKERABLE_ITEMS as P,CS2_TEAMS_BOTH as F,CS2_TEAMS_CT as I,CS2_TEAMS_T as L,CS2_WEAR_FACTOR as R}from"./economy-constants.mjs";import{CS2RarityColorName as z,CS2RarityColorOrder as B,CS2RaritySoundName as V,CS2_RARITY_ORDER as H,randomFloat as U,randomInt as W}from"./economy-container.mjs";function G(e){return function(t){return o(e.type,t.type)&&o(e.isDefault,t.isDefault)&&o(e.modelKey,t.modelKey)&&o(e.isBase,t.isBase)&&o(e.loadoutCategory,t.loadoutCategory)&&(e.usableByTeam===void 0||t.teams===void 0||t.teams.includes(e.usableByTeam))}}var K=class{baseUrl=`https://cdn.cstrike.app`;categories=new Set;items=new Map;itemsAsArray=[];stickers=new Set;charmDetachment;load({assetsBaseUrl:e,items:t,language:n}){this.baseUrl=e??this.baseUrl,this.categories.clear(),this.items.clear(),this.stickers.clear(),this.itemsAsArray=[],this.charmDetachment=void 0;for(let e of t){let t=new q(this,e,n===void 0?{name:String(e.id)}:s(n[e.id]));this.items.set(e.id,t),t.isSticker()&&(this.stickers.add(t),n!==void 0&&this.categories.add(s(t.categoryName))),this.itemsAsArray.push(t)}}getById(e){return s(this.items.get(e))}get(e){return typeof e==`number`?this.getById(e):e}findItem(e){return s(this.itemsAsArray.find(G(e)))}filterItems(e){let t=this.itemsAsArray.filter(G(e));return a(t.length>0),t}validateWear(e,t){return e===void 0||(a(c(e,R)),a(e>=0&&e<=1),t!==void 0&&(a(t.hasWear()),a(t.wearMin===void 0||e>=t.wearMin),a(t.wearMax===void 0||e<=t.wearMax)),!0)}safeValidateWear(e,t){return l(()=>this.validateWear(e,t))}validateSeed(e,t){return e===void 0||(a(Number.isFinite(e)),a(Number.isInteger(e)),a(t===void 0||t.hasSeed()),a(e>=(t?.getMinimumSeed()??1)&&e<=(t?.getMaximumSeed()??1e3)),!0)}safeValidateSeed(e,t){return l(()=>this.validateSeed(e,t))}trimNameTag(e){let t=e?.trim();return t===``?void 0:t}validateNameTag(e,t){return e!==void 0&&(a(t===void 0||t.hasNameTag()),a(e[0]!==` `&&D.test(e))),!0}safeValidateNameTag(e,t){return l(()=>this.validateNameTag(e,t))}requireNameTag(e,t){return a(e===void 0||e.trim().length>0),this.validateNameTag(e,t)}safeRequireNameTag(e,t){return l(()=>this.requireNameTag(e,t))}validateCharges(e,t){return e===void 0||(a(t===void 0||t.hasCharges()),a(Number.isInteger(e)),a(e>=1&&e<=(t?.getMaximumCharges()??2**53-1)),!0)}safeValidateCharges(e,t){return l(()=>this.validateCharges(e,t))}validateStatTrak(e,t){return e===void 0||(a(t===void 0||t.hasStatTrak()),a(Number.isInteger(e)),a(e>=0&&e<=999999),!0)}safeValidateStatTrak(e,t){return l(()=>this.validateStatTrak(e,t))}validateContainerAndKey(e,t){return e=this.get(e),e.expectContainer(),t=t===void 0?void 0:this.get(t),t===void 0?a(e.keyIds===void 0):(t.expectKey(),a(e.keyIds!==void 0),a(e.keyIds.includes(t.id))),!0}safeValidateContainerAndKey(e,t){return l(()=>this.validateContainerAndKey(e,t))}getWearFromValue(e){switch(!0){case e<=v:return r.FactoryNew;case e<=x:return r.MinimalWear;case e<=y:return r.FieldTested;case e<=C:return r.WellWorn;default:return r.BattleScarred}}getStickerCategories(){return Array.from(this.categories).sort()}getStickers(){return Array.from(this.stickers)}getCharmDetachment(){return this.charmDetachment??=s(this.itemsAsArray.find(e=>e.isCharmDetachment())),this.charmDetachment}expectUnlockedItem(e,{id:t}){e=this.get(e).expectContainer(),a(e.contentIds?.includes(t)||e.specialIds?.includes(t))}resolveUrl(e){return`${this.baseUrl}${e}`}},q=class{economy;item;language;alternateName;categoryName;collectionDescription;collectionImagePath;collectionKey;collectionName;containerType;contentIds;definitionIndex;description;displayedStickerId;hasColliderData;id=null;imagePath;isBase;isDefault;isLegacyModel;keychainPositionXMax;keychainPositionXMin;keychainPositionYMax;keychainPositionYMin;keychainPositionZMax;keychainPositionZMin;keyIds;legacyKeychainPositionXMax;legacyKeychainPositionXMin;legacyKeychainPositionYMax;legacyKeychainPositionYMin;legacyKeychainPositionZMax;legacyKeychainPositionZMin;legacyStickerOffsetXMax;legacyStickerOffsetXMin;legacyStickerOffsetYMax;legacyStickerOffsetYMin;legacyStickerSchemaCount;loadoutCategory;materialPath;modelKey;modelPath;name=null;parentId;previewSeed;rarityColor=null;specialIds;specialsImagePath;statTrakMode;stickerOffsetXMax;stickerOffsetXMin;stickerOffsetYMax;stickerOffsetYMin;stickerSchemaCount;team;tintIndex;tournamentDescription;type=null;variantIndex;wearMax;wearMin;constructor(e,t,r){this.economy=e,this.item=t,this.language=r,Object.assign(this,t),Object.assign(this,r),a(typeof this.id==`number`),a(this.name),a(this.type),a(t.type===n.Stub||typeof this.rarityColor==`string`)}get contents(){return this.expectContainer(),s(this.contentIds).map(e=>this.economy.get(e))}get displayedSticker(){return this.displayedStickerId===void 0?void 0:this.economy.get(this.displayedStickerId)}get parent(){return this.parentId===void 0?void 0:this.economy.items.has(this.parentId)?this.economy.get(this.parentId):void 0}get specials(){return this.expectContainer(),this.specialIds?.map(e=>this.economy.get(e))}get teams(){switch(this.team){case t.Both:return F;case t.T:return L;case t.CT:return I;default:return}}isC4(){return this.loadoutCategory===`c4`}isPistol(){return this.loadoutCategory===`secondary`}isSMG(){return this.loadoutCategory===`smg`}isRifle(){return this.loadoutCategory===`rifle`}isHeavy(){return this.loadoutCategory===`heavy`}isEquipment(){return this.loadoutCategory===`equipment`}isSniperRifle(){return this.modelKey!==void 0&&M.includes(this.modelKey)}isMachinegun(){return this.modelKey!==void 0&&g.includes(this.modelKey)}isInMidTiers(){return this.loadoutCategory!==void 0&&w.includes(this.loadoutCategory)}isInRifles(){return this.loadoutCategory!==void 0&&A.includes(this.loadoutCategory)}isInMisc(){return this.loadoutCategory!==void 0&&T.includes(this.loadoutCategory)}isInEquipments(){return p.includes(this.type)}isInGraphicArts(){return m.includes(this.type)}isInContainers(){return d.includes(this.type)}isInDisplay(){return f.includes(this.type)}isPaintable(){return O.includes(this.type)}isAgent(){return this.type===n.Agent}isCollectible(){return this.type===n.Collectible}isContainer(){return this.type===n.Container}isGloves(){return this.type===n.Gloves}isGraffiti(){return this.type===n.Graffiti}isKey(){return this.type===n.Key}isKeychain(){return this.type===n.Keychain}isMelee(){return this.type===n.Melee}isMusicKit(){return this.type===n.MusicKit}isPatch(){return this.type===n.Patch}isSticker(){return this.type===n.Sticker}isStub(){return this.type===n.Stub}isTool(){return this.type===n.Tool}isWeapon(){return this.type===n.Weapon}isStorageUnit(){return this.isTool()&&this.definitionIndex===1201}isNameTag(){return this.isTool()&&this.definitionIndex===1200}isStatTrakSwapTool(){return this.isTool()&&this.definitionIndex===1324}isContract(){return this.isTool()&&this.definitionIndex===62}isCharmDetachment(){return this.isTool()&&this.definitionIndex===65}isCharmDetachmentPack(){return this.isTool()&&this.definitionIndex===4950}isWeaponCase(){return this.containerType===e.WeaponCase}isStickerCapsule(){return this.containerType===e.StickerCapsule}isGraffitiBox(){return this.containerType===e.GraffitiBox}isSouvenirCase(){return this.containerType===e.SouvenirCase}expectAgent(){return a(this.isAgent()),this}expectContainer(){return a(this.isContainer()),this}expectKey(){return a(this.isKey()),this}expectKeychain(){return a(this.isKeychain()),this}expectPatch(){return a(this.isPatch()),this}expectSticker(){return a(this.isSticker()),this}expectStorageUnit(){return a(this.isStorageUnit()),this}expectNameTag(){return a(this.isNameTag()),this}expectStatTrakSwapTool(){return a(this.isStatTrakSwapTool()),this}expectCharmDetachmentPack(){return a(this.isCharmDetachmentPack()),this}hasWear(){return O.includes(this.type)&&!this.isDefault&&this.variantIndex!==0}hasSeed(){return j.includes(this.type)&&!this.isDefault&&this.variantIndex!==0}hasStickers(){return P.includes(this.type)&&!this.isC4()}hasKeychains(){return h.includes(this.type)&&!this.isC4()}hasPatches(){return k.includes(this.type)}hasNameTag(){return E.includes(this.type)||this.isStorageUnit()}hasStatTrak(){return N.includes(this.type)&&!this.isDefault}hasCharges(){return this.isGraffiti()||this.isCharmDetachment()}getImageUrl(e){a(this.imagePath);let t=this.economy.resolveUrl(this.imagePath);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}getCollectionImageUrl(){return this.economy.resolveUrl(this.collectionImagePath)}getSpecialsImageUrl(){return this.expectContainer(),a(this.specialIds),a(this.specialsImagePath),this.economy.resolveUrl(this.specialsImagePath)}getMaterialUrl(){return this.economy.resolveUrl(this.materialPath??this.parent?.materialPath)}getModelUrl(){let e=this.modelPath??this.parent?.modelPath;return this.economy.resolveUrl(e)}getModelDataUrl(){let e=this.modelPath??this.parent?.modelPath;return this.economy.resolveUrl(e?.replace(/\.glb$/,`.json`))}getColliderDataUrl(){if(!(this.hasColliderData??this.parent?.hasColliderData))return;let e=this.modelPath??this.parent?.modelPath;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()?b:S}getPreviewSeed(){return this.previewSeed??5e4}getDefaultCharges(){return this.isGraffiti()?50:1}getMaximumCharges(){return this.isGraffiti()?50:_}getStickerSchemaCount(){let e=this.parent??this;return(this.isLegacyModel?e.legacyStickerSchemaCount:e.stickerSchemaCount)??5}getStickerOffsetBounds(){let e=this.parent??this,t=this.isLegacyModel;return{x:{min:t?e.legacyStickerOffsetXMin:e.stickerOffsetXMin,max:t?e.legacyStickerOffsetXMax:e.stickerOffsetXMax},y:{min:t?e.legacyStickerOffsetYMin:e.stickerOffsetYMin,max:t?e.legacyStickerOffsetYMax:e.stickerOffsetYMax}}}getKeychainPositionBounds(){let e=this.parent??this,t=this.isLegacyModel;return{x:{min:t?e.legacyKeychainPositionXMin:e.keychainPositionXMin,max:t?e.legacyKeychainPositionXMax:e.keychainPositionXMax},y:{min:t?e.legacyKeychainPositionYMin:e.keychainPositionYMin,max:t?e.legacyKeychainPositionYMax:e.keychainPositionYMax},z:{min:t?e.legacyKeychainPositionZMin:e.keychainPositionZMin,max:t?e.legacyKeychainPositionZMax:e.keychainPositionZMax}}}groupContents(){let e={},t=this.specials;for(let t of this.contents){let n=z[t.rarityColor];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)=>(B[e.rarityColor]??0)-(B[t.rarityColor]??0))}unlockContainer(e){let t=this.groupContents(),n=Object.keys(t),r=H.filter(e=>n.includes(e)),a=e?.computeOdds?.(r)??r.map((e,t)=>.8/5**t),o=a.reduce((e,t)=>e+t,0),c=r.map((e,t)=>[e,s(a[t])/o]),l=Math.random(),[d]=s(c[0]),f=0;for(let[e,t]of c)if(f+=t,l<=f){d=e;break}let p=s(t[d]),m=s(p[Math.floor(Math.random()*p.length)]);return{attributes:{containerId:this.id,seed:m.hasSeed()?W(1,S):void 0,statTrak:m.hasStatTrak()&&this.statTrakMode!==i.Excluded&&(this.statTrakMode===i.Guaranteed||Math.random()<=.1)?0:void 0,wear:m.hasWear()?u(U(m.wearMin??0,m.wearMax??1),R):void 0},id:m.id,rarity:V[m.rarityColor],special:d===`special`}}};const J=new K;export{J as CS2Economy,K as CS2EconomyInstance,q as CS2EconomyItem};
|
|
1
|
+
import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r,CS2StatTrakMode as i}from"./economy-types.mjs";import{assert as a,compare as o,ensure as s,isFactorPrecise as c,safe as l,truncateToFactor as u}from"./utils.mjs";import{CS2_CONTAINER_ITEMS as d,CS2_DISPLAY_ITEMS as f,CS2_EQUIPMENT_ITEMS as p,CS2_GRAPHIC_ART_ITEMS as m,CS2_KEYCHAINABLE_ITEMS as h,CS2_MACHINEGUN_MODEL_KEYS as g,CS2_MAX_CHARM_DETACHMENT_CHARGES as _,CS2_MAX_FACTORY_NEW_WEAR as v,CS2_MAX_FIELD_TESTED_WEAR as y,CS2_MAX_KEYCHAIN_SEED as b,CS2_MAX_MINIMAL_WEAR_WEAR as x,CS2_MAX_SEED as S,CS2_MAX_WELL_WORN_WEAR as C,CS2_MIDTIER_LOADOUT_CATEGORIES as w,CS2_MISC_LOADOUT_CATEGORIES as T,CS2_NAMETAGGABLE_ITEMS as E,CS2_NAMETAG_RE as D,CS2_PAINTABLE_ITEMS as O,CS2_PATCHABLE_ITEMS as k,CS2_RIFLE_LOADOUT_CATEGORIES as A,CS2_SEEDABLE_ITEMS as j,CS2_SNIPER_RIFLE_MODEL_KEYS as M,CS2_STATTRAKABLE_ITEMS as N,CS2_STICKERABLE_ITEMS as P,CS2_TEAMS_BOTH as F,CS2_TEAMS_CT as I,CS2_TEAMS_T as L,CS2_WEAR_FACTOR as R}from"./economy-constants.mjs";import{CS2RarityColorName as z,CS2RarityColorOrder as B,CS2RaritySoundName as V,CS2_RARITY_ORDER as H,randomFloat as U,randomInt as W}from"./economy-container.mjs";function G(e){return function(t){return o(e.type,t.type)&&o(e.isDefault,t.isDefault)&&o(e.modelKey,t.modelKey)&&o(e.isBase,t.isBase)&&o(e.loadoutCategory,t.loadoutCategory)&&(e.usableByTeam===void 0||t.teams===void 0||t.teams.includes(e.usableByTeam))}}var K=class{baseUrl=`https://cdn.cstrike.app`;categories=new Set;items=new Map;itemsAsArray=[];stickers=new Set;charmDetachment;stickerDisplayCases=new Map;load({assetsBaseUrl:e,items:t,language:n}){this.baseUrl=e??this.baseUrl,this.categories.clear(),this.items.clear(),this.stickers.clear(),this.itemsAsArray=[],this.charmDetachment=void 0,this.stickerDisplayCases.clear();for(let e of t){let t=new q(this,e,n===void 0?{name:String(e.id)}:s(n[e.id]));this.items.set(e.id,t),t.isSticker()&&(this.stickers.add(t),n!==void 0&&this.categories.add(s(t.categoryName))),t.isStickerDisplayCase()&&this.stickerDisplayCases.set(s(t.displayedStickerId),t),this.itemsAsArray.push(t)}}getById(e){return s(this.items.get(e))}get(e){return typeof e==`number`?this.getById(e):e}findItem(e){return s(this.itemsAsArray.find(G(e)))}filterItems(e){let t=this.itemsAsArray.filter(G(e));return a(t.length>0),t}validateWear(e,t){return e===void 0||(a(c(e,R)),a(e>=0&&e<=1),t!==void 0&&(a(t.hasWear()),a(t.wearMin===void 0||e>=t.wearMin),a(t.wearMax===void 0||e<=t.wearMax)),!0)}safeValidateWear(e,t){return l(()=>this.validateWear(e,t))}validateSeed(e,t){return e===void 0||(a(Number.isFinite(e)),a(Number.isInteger(e)),a(t===void 0||t.hasSeed()),a(e>=(t?.getMinimumSeed()??1)&&e<=(t?.getMaximumSeed()??1e3)),!0)}safeValidateSeed(e,t){return l(()=>this.validateSeed(e,t))}trimNameTag(e){let t=e?.trim();return t===``?void 0:t}validateNameTag(e,t){return e!==void 0&&(a(t===void 0||t.hasNameTag()),a(e[0]!==` `&&D.test(e))),!0}safeValidateNameTag(e,t){return l(()=>this.validateNameTag(e,t))}requireNameTag(e,t){return a(e===void 0||e.trim().length>0),this.validateNameTag(e,t)}safeRequireNameTag(e,t){return l(()=>this.requireNameTag(e,t))}validateCharges(e,t){return e===void 0||(a(t===void 0||t.hasCharges()),a(Number.isInteger(e)),a(e>=1&&e<=(t?.getMaximumCharges()??2**53-1)),!0)}safeValidateCharges(e,t){return l(()=>this.validateCharges(e,t))}validateStatTrak(e,t){return e===void 0||(a(t===void 0||t.hasStatTrak()),a(Number.isInteger(e)),a(e>=0&&e<=999999),!0)}safeValidateStatTrak(e,t){return l(()=>this.validateStatTrak(e,t))}validateContainerAndKey(e,t){return e=this.get(e),e.expectContainer(),t=t===void 0?void 0:this.get(t),t===void 0?a(e.keyIds===void 0):(t.expectKey(),a(e.keyIds!==void 0),a(e.keyIds.includes(t.id))),!0}safeValidateContainerAndKey(e,t){return l(()=>this.validateContainerAndKey(e,t))}getWearFromValue(e){switch(!0){case e<=v:return r.FactoryNew;case e<=x:return r.MinimalWear;case e<=y:return r.FieldTested;case e<=C:return r.WellWorn;default:return r.BattleScarred}}getStickerCategories(){return Array.from(this.categories).sort()}getStickers(){return Array.from(this.stickers)}getCharmDetachment(){return this.charmDetachment??=s(this.itemsAsArray.find(e=>e.isCharmDetachment())),this.charmDetachment}getStickerDisplayCase(e){return s(this.stickerDisplayCases.get(this.get(e).expectSticker().id))}hasStickerDisplayCase(e){return this.stickerDisplayCases.has(this.get(e).expectSticker().id)}expectUnlockedItem(e,{id:t}){e=this.get(e).expectContainer(),a(e.contentIds?.includes(t)||e.specialIds?.includes(t))}resolveUrl(e){return`${this.baseUrl}${e}`}},q=class{economy;item;language;alternateName;categoryName;collectionDescription;collectionImagePath;collectionKey;collectionName;containerType;contentIds;definitionIndex;description;displayedStickerId;hasColliderData;id=null;imagePath;isBase;isDefault;isLegacyModel;keychainPositionXMax;keychainPositionXMin;keychainPositionYMax;keychainPositionYMin;keychainPositionZMax;keychainPositionZMin;keyIds;legacyKeychainPositionXMax;legacyKeychainPositionXMin;legacyKeychainPositionYMax;legacyKeychainPositionYMin;legacyKeychainPositionZMax;legacyKeychainPositionZMin;legacyStickerOffsetXMax;legacyStickerOffsetXMin;legacyStickerOffsetYMax;legacyStickerOffsetYMin;legacyStickerSchemaCount;loadoutCategory;materialPath;modelKey;modelPath;name=null;parentId;previewSeed;rarityColor=null;specialIds;specialsImagePath;statTrakMode;stickerOffsetXMax;stickerOffsetXMin;stickerOffsetYMax;stickerOffsetYMin;stickerSchemaCount;team;tintIndex;tournamentDescription;type=null;variantIndex;wearMax;wearMin;constructor(e,t,r){this.economy=e,this.item=t,this.language=r,Object.assign(this,t),Object.assign(this,r),a(typeof this.id==`number`),a(this.name),a(this.type),a(t.type===n.Stub||typeof this.rarityColor==`string`)}get contents(){return this.expectContainer(),s(this.contentIds).map(e=>this.economy.get(e))}get displayedSticker(){return this.displayedStickerId===void 0?void 0:this.economy.get(this.displayedStickerId)}get parent(){return this.parentId===void 0?void 0:this.economy.items.has(this.parentId)?this.economy.get(this.parentId):void 0}get specials(){return this.expectContainer(),this.specialIds?.map(e=>this.economy.get(e))}get teams(){switch(this.team){case t.Both:return F;case t.T:return L;case t.CT:return I;default:return}}isC4(){return this.loadoutCategory===`c4`}isPistol(){return this.loadoutCategory===`secondary`}isSMG(){return this.loadoutCategory===`smg`}isRifle(){return this.loadoutCategory===`rifle`}isHeavy(){return this.loadoutCategory===`heavy`}isEquipment(){return this.loadoutCategory===`equipment`}isSniperRifle(){return this.modelKey!==void 0&&M.includes(this.modelKey)}isMachinegun(){return this.modelKey!==void 0&&g.includes(this.modelKey)}isInMidTiers(){return this.loadoutCategory!==void 0&&w.includes(this.loadoutCategory)}isInRifles(){return this.loadoutCategory!==void 0&&A.includes(this.loadoutCategory)}isInMisc(){return this.loadoutCategory!==void 0&&T.includes(this.loadoutCategory)}isInEquipments(){return p.includes(this.type)}isInGraphicArts(){return m.includes(this.type)}isInContainers(){return d.includes(this.type)}isInDisplay(){return f.includes(this.type)}isPaintable(){return O.includes(this.type)}isAgent(){return this.type===n.Agent}isCollectible(){return this.type===n.Collectible}isContainer(){return this.type===n.Container}isGloves(){return this.type===n.Gloves}isGraffiti(){return this.type===n.Graffiti}isKey(){return this.type===n.Key}isKeychain(){return this.type===n.Keychain}isMelee(){return this.type===n.Melee}isMusicKit(){return this.type===n.MusicKit}isPatch(){return this.type===n.Patch}isSticker(){return this.type===n.Sticker}isStub(){return this.type===n.Stub}isTool(){return this.type===n.Tool}isWeapon(){return this.type===n.Weapon}isStorageUnit(){return this.isTool()&&this.definitionIndex===1201}isNameTag(){return this.isTool()&&this.definitionIndex===1200}isStatTrakSwapTool(){return this.isTool()&&this.definitionIndex===1324}isContract(){return this.isTool()&&this.definitionIndex===62}isCharmDetachment(){return this.isTool()&&this.definitionIndex===65}isCharmDetachmentPack(){return this.isTool()&&this.definitionIndex===4950}isStickerSlab(){return this.isTool()&&this.definitionIndex===1355}isStickerDisplayCase(){return this.isKeychain()&&this.displayedStickerId!==void 0}isWeaponCase(){return this.containerType===e.WeaponCase}isStickerCapsule(){return this.containerType===e.StickerCapsule}isGraffitiBox(){return this.containerType===e.GraffitiBox}isSouvenirCase(){return this.containerType===e.SouvenirCase}expectAgent(){return a(this.isAgent()),this}expectContainer(){return a(this.isContainer()),this}expectKey(){return a(this.isKey()),this}expectKeychain(){return a(this.isKeychain()),this}expectPatch(){return a(this.isPatch()),this}expectSticker(){return a(this.isSticker()),this}expectStorageUnit(){return a(this.isStorageUnit()),this}expectNameTag(){return a(this.isNameTag()),this}expectStatTrakSwapTool(){return a(this.isStatTrakSwapTool()),this}expectCharmDetachmentPack(){return a(this.isCharmDetachmentPack()),this}expectStickerSlab(){return a(this.isStickerSlab()),this}expectStickerDisplayCase(){return a(this.isStickerDisplayCase()),this}hasWear(){return O.includes(this.type)&&!this.isDefault&&this.variantIndex!==0}hasSeed(){return j.includes(this.type)&&!this.isDefault&&this.variantIndex!==0}hasStickers(){return P.includes(this.type)&&!this.isC4()}hasKeychains(){return h.includes(this.type)&&!this.isC4()}hasPatches(){return k.includes(this.type)}hasNameTag(){return E.includes(this.type)||this.isStorageUnit()}hasStatTrak(){return N.includes(this.type)&&!this.isDefault}hasCharges(){return this.isGraffiti()||this.isCharmDetachment()}hasDisplayCase(){return this.economy.hasStickerDisplayCase(this)}getDisplayCase(){return this.economy.getStickerDisplayCase(this)}getImageUrl(e){a(this.imagePath);let t=this.economy.resolveUrl(this.imagePath);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}getCollectionImageUrl(){return this.economy.resolveUrl(this.collectionImagePath)}getSpecialsImageUrl(){return this.expectContainer(),a(this.specialIds),a(this.specialsImagePath),this.economy.resolveUrl(this.specialsImagePath)}getMaterialUrl(){return this.economy.resolveUrl(this.materialPath??this.parent?.materialPath)}getModelUrl(){let e=this.modelPath??this.parent?.modelPath;return this.economy.resolveUrl(e)}getModelDataUrl(){let e=this.modelPath??this.parent?.modelPath;return this.economy.resolveUrl(e?.replace(/\.glb$/,`.json`))}getColliderDataUrl(){if(!(this.hasColliderData??this.parent?.hasColliderData))return;let e=this.modelPath??this.parent?.modelPath;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()?b:S}getPreviewSeed(){return this.previewSeed??5e4}getDefaultCharges(){return this.isGraffiti()?50:1}getMaximumCharges(){return this.isGraffiti()?50:_}getStickerSchemaCount(){let e=this.parent??this;return(this.isLegacyModel?e.legacyStickerSchemaCount:e.stickerSchemaCount)??5}getStickerOffsetBounds(){let e=this.parent??this,t=this.isLegacyModel;return{x:{min:t?e.legacyStickerOffsetXMin:e.stickerOffsetXMin,max:t?e.legacyStickerOffsetXMax:e.stickerOffsetXMax},y:{min:t?e.legacyStickerOffsetYMin:e.stickerOffsetYMin,max:t?e.legacyStickerOffsetYMax:e.stickerOffsetYMax}}}getKeychainPositionBounds(){let e=this.parent??this,t=this.isLegacyModel;return{x:{min:t?e.legacyKeychainPositionXMin:e.keychainPositionXMin,max:t?e.legacyKeychainPositionXMax:e.keychainPositionXMax},y:{min:t?e.legacyKeychainPositionYMin:e.keychainPositionYMin,max:t?e.legacyKeychainPositionYMax:e.keychainPositionYMax},z:{min:t?e.legacyKeychainPositionZMin:e.keychainPositionZMin,max:t?e.legacyKeychainPositionZMax:e.keychainPositionZMax}}}groupContents(){let e={},t=this.specials;for(let t of this.contents){let n=z[t.rarityColor];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)=>(B[e.rarityColor]??0)-(B[t.rarityColor]??0))}unlockContainer(e){let t=this.groupContents(),n=Object.keys(t),r=H.filter(e=>n.includes(e)),a=e?.computeOdds?.(r)??r.map((e,t)=>.8/5**t),o=a.reduce((e,t)=>e+t,0),c=r.map((e,t)=>[e,s(a[t])/o]),l=Math.random(),[d]=s(c[0]),f=0;for(let[e,t]of c)if(f+=t,l<=f){d=e;break}let p=s(t[d]),m=s(p[Math.floor(Math.random()*p.length)]);return{attributes:{containerId:this.id,seed:m.hasSeed()?W(1,S):void 0,statTrak:m.hasStatTrak()&&this.statTrakMode!==i.Excluded&&(this.statTrakMode===i.Guaranteed||Math.random()<=.1)?0:void 0,wear:m.hasWear()?u(U(m.wearMin??0,m.wearMax??1),R):void 0},id:m.id,rarity:V[m.rarityColor],special:d===`special`}}};const J=new K;export{J as CS2Economy,K as CS2EconomyInstance,q as CS2EconomyItem};
|
package/dist/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ 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 { CS2Bounds, CS2ContainerType, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2StatTrakMode, CS2UnlockedItem } from "./economy-types.mjs";
|
|
4
4
|
import { CS2Team, toggleCS2Team } from "./teams.mjs";
|
|
5
|
-
import { CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_WEAR_FACTOR } from "./economy-constants.mjs";
|
|
5
|
+
import { CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, 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
7
|
import { CS2BaseInventoryItem, CS2InventoryData, CS2InventoryOptions, CS2InventorySpec } from "./inventory-types.mjs";
|
|
8
8
|
import { CS2InventoryDecodeError, CS2InventoryDecoded, CS2InventoryDrop, CS2InventoryDropReason, CS2InventoryError, CS2InventoryLoadChanges, CS2InventoryMigrationError, CS2InventoryVersionError, decodeInventoryData } from "./inventory-format.mjs";
|
|
@@ -14,4 +14,4 @@ import { CS2KeyValues } from "./keyvalues.mjs";
|
|
|
14
14
|
import { CS2KeyValues3 } from "./keyvalues3.mjs";
|
|
15
15
|
import { CS2Map, 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";
|
|
16
16
|
import { CS2Veto, CS2VetoAction, CS2VetoEvent, CS2VetoMap, CS2VetoTeam, CS2VetoType } from "./veto.mjs";
|
|
17
|
-
export { CS2BaseInventoryItem, CS2Bounds, CS2ContainerType, CS2Economy, CS2EconomyInstance, CS2EconomyItem, CS2Inventory, CS2InventoryData, CS2InventoryDecodeError, CS2InventoryDecoded, CS2InventoryDrop, CS2InventoryDropReason, CS2InventoryError, CS2InventoryItem, CS2InventoryLoadChanges, CS2InventoryMigration, CS2InventoryMigrationError, CS2InventoryOptions, CS2InventoryRule, CS2InventoryRuleName, CS2InventorySpec, CS2InventoryStorageDrops, CS2InventoryVersionError, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2KeyValues, CS2KeyValues3, CS2Map, CS2Rarity, CS2RarityColor, CS2RarityColorName, CS2RarityColorOrder, CS2RarityKeys, CS2RaritySoundName, CS2StatTrakMode, CS2Team, CS2UnlockedItem, CS2Veto, CS2VetoAction, CS2VetoEvent, CS2VetoMap, CS2VetoTeam, CS2VetoType, CS2_ALL_MAPS, CS2_ANCIENT_MAP, CS2_ANUBIS_MAP, CS2_BASE_ODD, CS2_CACHE_MAP, CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_DUST2_MAP, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_INFERNO_MAP, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_RULES, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, CS2_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_INVENTORY_VERSION, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_NUKE_MAP, CS2_OVERPASS_MAP, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RARITIES, CS2_RARITY_COLOR_DEFAULT, CS2_RARITY_ORDER, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_ODD, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_TRAIN_MAP, CS2_VERTIGO_MAP, CS2_WEAR_FACTOR, EnumValues, Interface, MapValue, RecordValue, assert, assertAddable, assertInventoryItem, assertKeychains, assertPatches, assertStickers, checkAddable, checkAttachable, checkInventoryItem, checkKeychains, checkPatches, checkStickerSchema, checkStickers, checkStorage, clamp, compare, countDecimals, decodeInventoryData, ensure, fail, float, getDropReason, getMapnameName, getNextStickerSchema, getNextUid, getTimestamp, isFactorPrecise, isNotUndefined, migrations, randomBoolean, randomFloat, randomInt, reconcileInventoryItems, repairInventoryItem, roundToFactor, safe, snapStickerRotation, stickerMapToArray, toStickerMap, toggleCS2Team, truncateToFactor, validateStickerRotation };
|
|
17
|
+
export { CS2BaseInventoryItem, CS2Bounds, CS2ContainerType, CS2Economy, CS2EconomyInstance, CS2EconomyItem, CS2Inventory, CS2InventoryData, CS2InventoryDecodeError, CS2InventoryDecoded, CS2InventoryDrop, CS2InventoryDropReason, CS2InventoryError, CS2InventoryItem, CS2InventoryLoadChanges, CS2InventoryMigration, CS2InventoryMigrationError, CS2InventoryOptions, CS2InventoryRule, CS2InventoryRuleName, CS2InventorySpec, CS2InventoryStorageDrops, CS2InventoryVersionError, CS2Item, CS2ItemTeam, CS2ItemTranslation, CS2ItemTranslationByLanguage, CS2ItemTranslationMap, CS2ItemType, CS2ItemWear, CS2KeyValues, CS2KeyValues3, CS2Map, CS2Rarity, CS2RarityColor, CS2RarityColorName, CS2RarityColorOrder, CS2RarityKeys, CS2RaritySoundName, CS2StatTrakMode, CS2Team, CS2UnlockedItem, CS2Veto, CS2VetoAction, CS2VetoEvent, CS2VetoMap, CS2VetoTeam, CS2VetoType, CS2_ALL_MAPS, CS2_ANCIENT_MAP, CS2_ANUBIS_MAP, CS2_BASE_ODD, CS2_CACHE_MAP, CS2_CHARM_DETACHMENT_PACK_CHARGES, CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX, CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX, CS2_CONTAINER_ITEMS, CS2_CONTRACT_TOOL_DEFINITION_INDEX, CS2_DEFAULT_MAX_WEAR, CS2_DEFAULT_MIN_WEAR, CS2_DISPLAY_ITEMS, CS2_DUST2_MAP, CS2_EQUIPMENT_ITEMS, CS2_FALLBACK_PREVIEW_SEED, CS2_GRAPHIC_ART_ITEMS, CS2_INFERNO_MAP, CS2_INVENTORY_EQUIPPABLE_ITEMS, CS2_INVENTORY_RULES, CS2_INVENTORY_TIMESTAMP, CS2_INVENTORY_VERSION, CS2_ITEMS, CS2_KEYCHAINABLE_ITEMS, CS2_KEYCHAIN_POSITION_FACTOR, CS2_MACHINEGUN_MODEL_KEYS, CS2_MAX_BATTLE_SCARRED_WEAR, CS2_MAX_CHARM_DETACHMENT_CHARGES, CS2_MAX_FACTORY_NEW_WEAR, CS2_MAX_FIELD_TESTED_WEAR, CS2_MAX_GRAFFITI_CHARGES, 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_LOADOUT_CATEGORIES, CS2_MIN_BATTLE_SCARRED_WEAR, CS2_MIN_CHARGES, CS2_MIN_FACTORY_NEW_WEAR, CS2_MIN_FIELD_TESTED_WEAR, CS2_MIN_INVENTORY_VERSION, 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_LOADOUT_CATEGORIES, CS2_NAMETAGGABLE_ITEMS, CS2_NAMETAG_RE, CS2_NAMETAG_TOOL_DEFINITION_INDEX, CS2_NUKE_MAP, CS2_OVERPASS_MAP, CS2_PAINTABLE_ITEMS, CS2_PATCHABLE_ITEMS, CS2_RARITIES, CS2_RARITY_COLOR_DEFAULT, CS2_RARITY_ORDER, CS2_RIFLE_LOADOUT_CATEGORIES, CS2_SEEDABLE_ITEMS, CS2_SNIPER_RIFLE_MODEL_KEYS, CS2_STATTRAKABLE_ITEMS, CS2_STATTRAK_ODD, CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX, CS2_STICKERABLE_ITEMS, CS2_STICKER_OFFSET_FACTOR, CS2_STICKER_ROTATION_STEP, CS2_STICKER_SCRAPE_FACTOR, CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX, CS2_STICKER_WEAR_FACTOR, CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX, CS2_TEAMS_BOTH, CS2_TEAMS_CT, CS2_TEAMS_T, CS2_TRAIN_MAP, CS2_VERTIGO_MAP, CS2_WEAR_FACTOR, EnumValues, Interface, MapValue, RecordValue, assert, assertAddable, assertInventoryItem, assertKeychains, assertPatches, assertStickers, checkAddable, checkAttachable, checkInventoryItem, checkKeychains, checkPatches, checkStickerSchema, checkStickers, checkStorage, clamp, compare, countDecimals, decodeInventoryData, ensure, fail, float, getDropReason, getMapnameName, getNextStickerSchema, getNextUid, getTimestamp, isFactorPrecise, isNotUndefined, migrations, randomBoolean, randomFloat, randomInt, reconcileInventoryItems, repairInventoryItem, 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,CS2StatTrakMode as i}from"./economy-types.mjs";import{assert as a,clamp as o,compare as s,countDecimals as c,ensure as l,fail as u,float as d,isFactorPrecise as f,isNotUndefined as p,roundToFactor as m,safe as h,truncateToFactor as g}from"./utils.mjs";import{CS2Team as _,toggleCS2Team as v}from"./teams.mjs";import{CS2_CHARM_DETACHMENT_PACK_CHARGES as y,CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX as b,CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX as x,CS2_CONTAINER_ITEMS as S,CS2_CONTRACT_TOOL_DEFINITION_INDEX as C,CS2_DEFAULT_MAX_WEAR as w,CS2_DEFAULT_MIN_WEAR as T,CS2_DISPLAY_ITEMS as E,CS2_EQUIPMENT_ITEMS as D,CS2_FALLBACK_PREVIEW_SEED as O,CS2_GRAPHIC_ART_ITEMS as k,CS2_KEYCHAINABLE_ITEMS as A,CS2_KEYCHAIN_POSITION_FACTOR as j,CS2_MACHINEGUN_MODEL_KEYS as M,CS2_MAX_BATTLE_SCARRED_WEAR as N,CS2_MAX_CHARM_DETACHMENT_CHARGES as P,CS2_MAX_FACTORY_NEW_WEAR as F,CS2_MAX_FIELD_TESTED_WEAR as I,CS2_MAX_GRAFFITI_CHARGES as L,CS2_MAX_KEYCHAINS as R,CS2_MAX_KEYCHAIN_SEED as z,CS2_MAX_MINIMAL_WEAR_WEAR as B,CS2_MAX_PATCHES as V,CS2_MAX_SEED as H,CS2_MAX_STATTRAK as U,CS2_MAX_STICKERS as W,CS2_MAX_STICKER_ROTATION as G,CS2_MAX_STICKER_WEAR as K,CS2_MAX_WEAR as q,CS2_MAX_WELL_WORN_WEAR as J,CS2_MIDTIER_LOADOUT_CATEGORIES as Y,CS2_MIN_BATTLE_SCARRED_WEAR as X,CS2_MIN_CHARGES as Z,CS2_MIN_FACTORY_NEW_WEAR as Q,CS2_MIN_FIELD_TESTED_WEAR as $,CS2_MIN_KEYCHAIN_SEED as ee,CS2_MIN_MINIMAL_WEAR_WEAR as te,CS2_MIN_SEED as ne,CS2_MIN_STATTRAK as re,CS2_MIN_STICKER_ROTATION as ie,CS2_MIN_STICKER_WEAR as ae,CS2_MIN_WEAR as oe,CS2_MIN_WELL_WORN_WEAR as se,CS2_MISC_LOADOUT_CATEGORIES as ce,CS2_NAMETAGGABLE_ITEMS as le,CS2_NAMETAG_RE as ue,CS2_NAMETAG_TOOL_DEFINITION_INDEX as de,CS2_PAINTABLE_ITEMS as fe,CS2_PATCHABLE_ITEMS as pe,CS2_RIFLE_LOADOUT_CATEGORIES as me,CS2_SEEDABLE_ITEMS as he,CS2_SNIPER_RIFLE_MODEL_KEYS as ge,CS2_STATTRAKABLE_ITEMS as _e,CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX as ve,CS2_STICKERABLE_ITEMS as ye,CS2_STICKER_OFFSET_FACTOR as be,CS2_STICKER_ROTATION_STEP as xe,CS2_STICKER_SCRAPE_FACTOR as Se,
|
|
1
|
+
import{CS2ContainerType as e,CS2ItemTeam as t,CS2ItemType as n,CS2ItemWear as r,CS2StatTrakMode as i}from"./economy-types.mjs";import{assert as a,clamp as o,compare as s,countDecimals as c,ensure as l,fail as u,float as d,isFactorPrecise as f,isNotUndefined as p,roundToFactor as m,safe as h,truncateToFactor as g}from"./utils.mjs";import{CS2Team as _,toggleCS2Team as v}from"./teams.mjs";import{CS2_CHARM_DETACHMENT_PACK_CHARGES as y,CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX as b,CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX as x,CS2_CONTAINER_ITEMS as S,CS2_CONTRACT_TOOL_DEFINITION_INDEX as C,CS2_DEFAULT_MAX_WEAR as w,CS2_DEFAULT_MIN_WEAR as T,CS2_DISPLAY_ITEMS as E,CS2_EQUIPMENT_ITEMS as D,CS2_FALLBACK_PREVIEW_SEED as O,CS2_GRAPHIC_ART_ITEMS as k,CS2_KEYCHAINABLE_ITEMS as A,CS2_KEYCHAIN_POSITION_FACTOR as j,CS2_MACHINEGUN_MODEL_KEYS as M,CS2_MAX_BATTLE_SCARRED_WEAR as N,CS2_MAX_CHARM_DETACHMENT_CHARGES as P,CS2_MAX_FACTORY_NEW_WEAR as F,CS2_MAX_FIELD_TESTED_WEAR as I,CS2_MAX_GRAFFITI_CHARGES as L,CS2_MAX_KEYCHAINS as R,CS2_MAX_KEYCHAIN_SEED as z,CS2_MAX_MINIMAL_WEAR_WEAR as B,CS2_MAX_PATCHES as V,CS2_MAX_SEED as H,CS2_MAX_STATTRAK as U,CS2_MAX_STICKERS as W,CS2_MAX_STICKER_ROTATION as G,CS2_MAX_STICKER_WEAR as K,CS2_MAX_WEAR as q,CS2_MAX_WELL_WORN_WEAR as J,CS2_MIDTIER_LOADOUT_CATEGORIES as Y,CS2_MIN_BATTLE_SCARRED_WEAR as X,CS2_MIN_CHARGES as Z,CS2_MIN_FACTORY_NEW_WEAR as Q,CS2_MIN_FIELD_TESTED_WEAR as $,CS2_MIN_KEYCHAIN_SEED as ee,CS2_MIN_MINIMAL_WEAR_WEAR as te,CS2_MIN_SEED as ne,CS2_MIN_STATTRAK as re,CS2_MIN_STICKER_ROTATION as ie,CS2_MIN_STICKER_WEAR as ae,CS2_MIN_WEAR as oe,CS2_MIN_WELL_WORN_WEAR as se,CS2_MISC_LOADOUT_CATEGORIES as ce,CS2_NAMETAGGABLE_ITEMS as le,CS2_NAMETAG_RE as ue,CS2_NAMETAG_TOOL_DEFINITION_INDEX as de,CS2_PAINTABLE_ITEMS as fe,CS2_PATCHABLE_ITEMS as pe,CS2_RIFLE_LOADOUT_CATEGORIES as me,CS2_SEEDABLE_ITEMS as he,CS2_SNIPER_RIFLE_MODEL_KEYS as ge,CS2_STATTRAKABLE_ITEMS as _e,CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX as ve,CS2_STICKERABLE_ITEMS as ye,CS2_STICKER_OFFSET_FACTOR as be,CS2_STICKER_ROTATION_STEP as xe,CS2_STICKER_SCRAPE_FACTOR as Se,CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX as Ce,CS2_STICKER_WEAR_FACTOR as we,CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX as Te,CS2_TEAMS_BOTH as Ee,CS2_TEAMS_CT as De,CS2_TEAMS_T as Oe,CS2_WEAR_FACTOR as ke}from"./economy-constants.mjs";import{CS2Rarity as Ae,CS2RarityColor as je,CS2RarityColorName as Me,CS2RarityColorOrder as Ne,CS2RaritySoundName as Pe,CS2_BASE_ODD as Fe,CS2_RARITIES as Ie,CS2_RARITY_COLOR_DEFAULT as Le,CS2_RARITY_ORDER as Re,CS2_STATTRAK_ODD as ze,randomBoolean as Be,randomFloat as Ve,randomInt as He}from"./economy-container.mjs";import{CS2Economy as Ue,CS2EconomyInstance as We,CS2EconomyItem as Ge}from"./economy.mjs";import{CS2_INVENTORY_VERSION as Ke,CS2_MIN_INVENTORY_VERSION as qe,migrations as Je}from"./inventory-migrations/index.mjs";import{CS2InventoryDecodeError as Ye,CS2InventoryError as Xe,CS2InventoryMigrationError as Ze,CS2InventoryVersionError as Qe,decodeInventoryData as $e}from"./inventory-format.mjs";import{CS2Inventory as et,CS2InventoryItem as tt,CS2_INVENTORY_EQUIPPABLE_ITEMS as nt,CS2_INVENTORY_TIMESTAMP as rt,getNextUid as it,getTimestamp as at,stickerMapToArray as ot,toStickerMap as st}from"./inventory.mjs";import{CS2_INVENTORY_RULES as ct,assertAddable as lt,assertInventoryItem as ut,assertKeychains as dt,assertPatches as ft,assertStickers as pt,checkAddable as mt,checkAttachable as ht,checkInventoryItem as gt,checkKeychains as _t,checkPatches as vt,checkStickerSchema as yt,checkStickers as bt,checkStorage as xt,getDropReason as St,getNextStickerSchema as Ct,reconcileInventoryItems as wt,repairInventoryItem as Tt,snapStickerRotation as Et,validateStickerRotation as Dt}from"./inventory-rules.mjs";import{CS2_ITEMS as Ot}from"./items.mjs";import{CS2KeyValues as kt}from"./keyvalues.mjs";import{CS2KeyValues3 as At}from"./keyvalues3.mjs";import{CS2_ALL_MAPS as jt,CS2_ANCIENT_MAP as Mt,CS2_ANUBIS_MAP as Nt,CS2_CACHE_MAP as Pt,CS2_DUST2_MAP as Ft,CS2_INFERNO_MAP as It,CS2_MIRAGE_MAP as Lt,CS2_NUKE_MAP as Rt,CS2_OVERPASS_MAP as zt,CS2_TRAIN_MAP as Bt,CS2_VERTIGO_MAP as Vt,getMapnameName as Ht}from"./maps.mjs";import{CS2Veto as Ut,CS2VetoAction as Wt,CS2VetoType as Gt}from"./veto.mjs";export{e as CS2ContainerType,Ue as CS2Economy,We as CS2EconomyInstance,Ge as CS2EconomyItem,et as CS2Inventory,Ye as CS2InventoryDecodeError,Xe as CS2InventoryError,tt as CS2InventoryItem,Ze as CS2InventoryMigrationError,Qe as CS2InventoryVersionError,t as CS2ItemTeam,n as CS2ItemType,r as CS2ItemWear,kt as CS2KeyValues,At as CS2KeyValues3,Ae as CS2Rarity,je as CS2RarityColor,Me as CS2RarityColorName,Ne as CS2RarityColorOrder,Pe as CS2RaritySoundName,i as CS2StatTrakMode,_ as CS2Team,Ut as CS2Veto,Wt as CS2VetoAction,Gt as CS2VetoType,jt as CS2_ALL_MAPS,Mt as CS2_ANCIENT_MAP,Nt as CS2_ANUBIS_MAP,Fe as CS2_BASE_ODD,Pt as CS2_CACHE_MAP,y as CS2_CHARM_DETACHMENT_PACK_CHARGES,b as CS2_CHARM_DETACHMENT_PACK_TOOL_DEFINITION_INDEX,x as CS2_CHARM_DETACHMENT_TOOL_DEFINITION_INDEX,S as CS2_CONTAINER_ITEMS,C as CS2_CONTRACT_TOOL_DEFINITION_INDEX,w as CS2_DEFAULT_MAX_WEAR,T as CS2_DEFAULT_MIN_WEAR,E as CS2_DISPLAY_ITEMS,Ft as CS2_DUST2_MAP,D as CS2_EQUIPMENT_ITEMS,O as CS2_FALLBACK_PREVIEW_SEED,k as CS2_GRAPHIC_ART_ITEMS,It as CS2_INFERNO_MAP,nt as CS2_INVENTORY_EQUIPPABLE_ITEMS,ct as CS2_INVENTORY_RULES,rt as CS2_INVENTORY_TIMESTAMP,Ke as CS2_INVENTORY_VERSION,Ot as CS2_ITEMS,A as CS2_KEYCHAINABLE_ITEMS,j as CS2_KEYCHAIN_POSITION_FACTOR,M as CS2_MACHINEGUN_MODEL_KEYS,N as CS2_MAX_BATTLE_SCARRED_WEAR,P as CS2_MAX_CHARM_DETACHMENT_CHARGES,F as CS2_MAX_FACTORY_NEW_WEAR,I as CS2_MAX_FIELD_TESTED_WEAR,L as CS2_MAX_GRAFFITI_CHARGES,R as CS2_MAX_KEYCHAINS,z as CS2_MAX_KEYCHAIN_SEED,B as CS2_MAX_MINIMAL_WEAR_WEAR,V as CS2_MAX_PATCHES,H as CS2_MAX_SEED,U as CS2_MAX_STATTRAK,W as CS2_MAX_STICKERS,G as CS2_MAX_STICKER_ROTATION,K as CS2_MAX_STICKER_WEAR,q as CS2_MAX_WEAR,J as CS2_MAX_WELL_WORN_WEAR,Y as CS2_MIDTIER_LOADOUT_CATEGORIES,X as CS2_MIN_BATTLE_SCARRED_WEAR,Z as CS2_MIN_CHARGES,Q as CS2_MIN_FACTORY_NEW_WEAR,$ as CS2_MIN_FIELD_TESTED_WEAR,qe as CS2_MIN_INVENTORY_VERSION,ee as CS2_MIN_KEYCHAIN_SEED,te as CS2_MIN_MINIMAL_WEAR_WEAR,ne as CS2_MIN_SEED,re as CS2_MIN_STATTRAK,ie as CS2_MIN_STICKER_ROTATION,ae as CS2_MIN_STICKER_WEAR,oe as CS2_MIN_WEAR,se as CS2_MIN_WELL_WORN_WEAR,Lt as CS2_MIRAGE_MAP,ce as CS2_MISC_LOADOUT_CATEGORIES,le as CS2_NAMETAGGABLE_ITEMS,ue as CS2_NAMETAG_RE,de as CS2_NAMETAG_TOOL_DEFINITION_INDEX,Rt as CS2_NUKE_MAP,zt as CS2_OVERPASS_MAP,fe as CS2_PAINTABLE_ITEMS,pe as CS2_PATCHABLE_ITEMS,Ie as CS2_RARITIES,Le as CS2_RARITY_COLOR_DEFAULT,Re as CS2_RARITY_ORDER,me as CS2_RIFLE_LOADOUT_CATEGORIES,he as CS2_SEEDABLE_ITEMS,ge as CS2_SNIPER_RIFLE_MODEL_KEYS,_e as CS2_STATTRAKABLE_ITEMS,ze as CS2_STATTRAK_ODD,ve as CS2_STATTRAK_SWAP_TOOL_DEFINITION_INDEX,ye as CS2_STICKERABLE_ITEMS,be as CS2_STICKER_OFFSET_FACTOR,xe as CS2_STICKER_ROTATION_STEP,Se as CS2_STICKER_SCRAPE_FACTOR,Ce as CS2_STICKER_SLAB_TOOL_DEFINITION_INDEX,we as CS2_STICKER_WEAR_FACTOR,Te as CS2_STORAGE_UNIT_TOOL_DEFINITION_INDEX,Ee as CS2_TEAMS_BOTH,De as CS2_TEAMS_CT,Oe as CS2_TEAMS_T,Bt as CS2_TRAIN_MAP,Vt as CS2_VERTIGO_MAP,ke as CS2_WEAR_FACTOR,a as assert,lt as assertAddable,ut as assertInventoryItem,dt as assertKeychains,ft as assertPatches,pt as assertStickers,mt as checkAddable,ht as checkAttachable,gt as checkInventoryItem,_t as checkKeychains,vt as checkPatches,yt as checkStickerSchema,bt as checkStickers,xt as checkStorage,o as clamp,s as compare,c as countDecimals,$e as decodeInventoryData,l as ensure,u as fail,d as float,St as getDropReason,Ht as getMapnameName,Ct as getNextStickerSchema,it as getNextUid,at as getTimestamp,f as isFactorPrecise,p as isNotUndefined,Je as migrations,Be as randomBoolean,Ve as randomFloat,He as randomInt,wt as reconcileInventoryItems,Tt as repairInventoryItem,m as roundToFactor,h as safe,Et as snapStickerRotation,ot as stickerMapToArray,st as toStickerMap,v as toggleCS2Team,g as truncateToFactor,Dt as validateStickerRotation};
|
package/dist/inventory-rules.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{assert as e,clamp as t,ensure as n,isFactorPrecise as r,truncateToFactor as i}from"./utils.mjs";import{CS2_KEYCHAIN_POSITION_FACTOR as a,CS2_MAX_KEYCHAIN_SEED as o,CS2_MAX_STATTRAK as s,CS2_STICKER_OFFSET_FACTOR as c,CS2_STICKER_ROTATION_STEP as l,CS2_STICKER_WEAR_FACTOR as u}from"./economy-constants.mjs";import{CS2InventoryItem as d,getTimestamp as f}from"./inventory.mjs";function p(e,n){return{check(t,i){if(t===void 0)return!0;let{min:a,max:o}=n(i);return r(t,e)&&(a===void 0||t>=a)&&(o===void 0||t<=o)},repair(r,a){if(r===void 0||!Number.isFinite(r))return;let{min:o,max:s}=n(a),c=i(r,e);return t(c,o??c,s??c)}}}function m(e){return{check(t,n){if(t===void 0)return!0;let{min:r,max:i}=e(n);return Number.isInteger(t)&&t>=r&&t<=i},repair(n,r){if(n===void 0||!Number.isFinite(n))return;let{min:i,max:a}=e(r);return t(Math.trunc(n),i,a)}}}function h(e){return e===void 0||Number.isInteger(e/.5)&&e>=-180&&e<=180}function g(e){return Math.round(e/l)*l}const _={itemCharges:{check:(e,t)=>t.economy.safeValidateCharges(e,t),repair(e,n){return e!==void 0&&n.hasCharges()&&Number.isFinite(e)?t(Math.trunc(e),1,n.getMaximumCharges()):void 0}},itemSeed:{check:(e,t)=>t.economy.safeValidateSeed(e,t),repair(e,n){return e!==void 0&&n.hasSeed()&&Number.isFinite(e)?t(Math.trunc(e),n.getMinimumSeed(),n.getMaximumSeed()):void 0}},itemStatTrak:{check:(e,t)=>t.economy.safeValidateStatTrak(e,t),repair(e,n){return e!==void 0&&n.hasStatTrak()&&Number.isFinite(e)?t(Math.trunc(e),0,s):void 0}},itemWear:{check:(e,t)=>t.economy.safeValidateWear(e,t),repair(e,n){if(e===void 0||!n.hasWear())return;let r=t(e,n.getMinimumWear(),n.getMaximumWear());return n.economy.safeValidateWear(r,n)?r:void 0}},keychainPositionX:p(a,e=>e.getKeychainPositionBounds().x),keychainPositionY:p(a,e=>e.getKeychainPositionBounds().y),keychainPositionZ:p(a,e=>e.getKeychainPositionBounds().z),keychainSeed:m(()=>({min:1,max:o})),stickerRotation:{check:e=>h(e),repair(e){if(e===void 0)return;let t=g(e);return h(t)?t:void 0}},stickerSchema:{check:(e,t)=>v(e,t.getStickerSchemaCount()),repair:(e,t)=>v(e,t.getStickerSchemaCount())?e:void 0},stickerWear:p(u,()=>({min:0,max:1})),stickerX:p(c,e=>e.getStickerOffsetBounds().x),stickerY:p(c,e=>e.getStickerOffsetBounds().y)};function v(e,t){return e===void 0||Number.isInteger(e)&&e>=0&&e<t}function y(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}function b(e){return!e.isGloves()||e.isDefault===!0||e.isBase!==!0}function x(t){e(b(t))}function S(e){return e.isDefault!==!0}function C(e,t,n){if(!e.items.has(t))return!1;let r=e.getById(t);return n(r)&&S(r)}function w(e,t,n){if(t===void 0)return!0;let r=Object.values(t);if(r.length>5||!n.hasStickers())return!1;for(let{id:t,wear:i,rotation:a,x:o,y:s,schema:c}of r){if(!e.items.has(t))return!1;let r=e.getById(t);if(!r.isSticker()||!S(r)||!_.stickerWear.check(i,n)||!_.stickerRotation.check(a,n)||!_.stickerX.check(o,n)||!_.stickerY.check(s,n)||!_.stickerSchema.check(c,n))return!1}return!0}function T(t,n,r){e(w(t,n,r))}function E(e,t,n){if(t===void 0)return!0;let r=Object.entries(t);if(r.length>1||!n.hasKeychains())return!1;for(let[t,{id:i,seed:a,x:o,y:s,z:c}]of r){let r=parseInt(t,10);if(r<0||r>0||!e.items.has(i))return!1;let l=e.getById(i);if(!l.isKeychain()||!S(l)||!_.keychainSeed.check(a,n)||!_.keychainPositionX.check(o,n)||!_.keychainPositionY.check(s,n)||!_.keychainPositionZ.check(c,n))return!1}return!0}function D(t,n,r){e(E(t,n,r))}function O(e,t,n){if(t===void 0)return!0;if(!n.isAgent())return!1;for(let[n,r]of Object.entries(t)){let t=parseInt(n,10);if(t<0||t>4||!e.items.has(r))return!1;let i=e.getById(r);if(!i.isPatch()||!S(i))return!1}return!0}function k(t,n,r){e(O(t,n,r))}function A(e,t,n){if(t===void 0)return!0;if(!n.isStorageUnit())return!1;for(let n of Object.values(t))if(n.storage!==void 0||!j(e,n))return!1;return!0}function j(e,{charges:t,id:n,keychains:r,nameTag:i,patches:a,seed:o,statTrak:s,stickers:c,storage:l,wear:u}){if(!e.items.has(n))return!1;let d=e.getById(n);return _.itemWear.check(u,d)&&_.itemCharges.check(t,d)&&_.itemSeed.check(o,d)&&_.itemStatTrak.check(s,d)&&e.safeValidateNameTag(i,d)&&b(d)&&O(e,a,d)&&w(e,c,d)&&E(e,r,d)&&A(e,l,d)}function M(t,n){e(j(t,n))}function N(e,t){let n=Object.keys(e).map(e=>[e,parseInt(e,10)]).sort(([,e],[,t])=>e-t),r=0;for(let[i,a]of n)!Number.isInteger(a)||a<0||a>=t||r===t?delete e[i]:r++}function P(e,t){return e.items.has(t)?`unrepairable`:`unknown-item`}function F(e,t,n){if(!e.items.has(t.id))return!1;let r=e.getById(t.id);if(t.patches!==void 0)if(!r.hasPatches())t.patches=void 0;else{N(t.patches,5);for(let[n,r]of Object.entries(t.patches))C(e,r,e=>e.isPatch())||delete t.patches[n]}if(t.stickers!==void 0)if(!r.hasStickers())t.stickers=void 0;else{let n=r.getStickerSchemaCount(),i=Object.keys(t.stickers).length>5;for(let[a,o]of Object.entries(t.stickers)){if(!C(e,o.id,e=>e.isSticker())){delete t.stickers[a],i=!0;continue}v(o.schema,n)||(i=!0),o.wear=_.stickerWear.repair(o.wear,r),o.rotation=_.stickerRotation.repair(o.rotation,r),o.x=_.stickerX.repair(o.x,r),o.y=_.stickerY.repair(o.y,r)}i&&(t.stickers=d.stickersFromArray(d.stickersToArray(t.stickers,n)))}if(t.keychains!==void 0)if(!r.hasKeychains())t.keychains=void 0;else{N(t.keychains,1);for(let[n,i]of Object.entries(t.keychains)){if(!C(e,i.id,e=>e.isKeychain())){delete t.keychains[n];continue}i.seed=_.keychainSeed.repair(i.seed,r),i.x=_.keychainPositionX.repair(i.x,r),i.y=_.keychainPositionY.repair(i.y,r),i.z=_.keychainPositionZ.repair(i.z,r)}}if(t.storage!==void 0)if(!r.isStorageUnit())t.storage=void 0;else{for(let[r,i]of Object.entries(t.storage)){let a=parseInt(r,10);i.storage=void 0,F(e,i)||(n?.dropped.push({uid:a,id:i.id,reason:P(e,i.id),storageUid:n.storageUid}),delete t.storage[a])}Object.keys(t.storage).length===0&&(t.storage=void 0)}return e.safeValidateNameTag(t.nameTag,r)||(t.nameTag=void 0),t.seed=_.itemSeed.repair(t.seed,r),t.statTrak=_.itemStatTrak.repair(t.statTrak,r),t.charges=_.itemCharges.repair(t.charges,r),t.charges===void 0&&r.isGraffiti()&&(t.equipped===!0||t.equippedCT===!0||t.equippedT===!0)&&(t.charges=r.getDefaultCharges()),t.wear=_.itemWear.repair(t.wear,r),j(e,t)}function I(e,t){return e.items.has(t.id)&&e.getById(t.id).isDefault===!0&&t.nameTag===void 0&&t.charges===void 0&&Object.keys(t.stickers??{}).length===0&&Object.keys(t.keychains??{}).length===0}function L(e,t,r,i){let a=Object.keys(e).map(e=>parseInt(e,10)).sort((e,t)=>e-t);for(let o of a.slice(t)){let t={uid:o,id:n(e[o]).id,reason:`policy`};i!==void 0&&(t.storageUid=i),r.push(t),delete e[o]}}function R(e,t,r){let i=[];for(let[n,r]of Object.entries(t)){if(r.storage===void 0)continue;let t=parseInt(n,10);for(let[n,a]of Object.entries(r.storage)){if(!e.items.has(a.id))continue;let o=e.getById(a.id);if(o.isCharmDetachment()||o.isCharmDetachmentPack()){let e=parseInt(n,10);i.push({uid:e,id:a.id,reason:`policy`,storageUid:t}),delete r.storage[e]}else o.hasCharges()&&(a.charges=void 0)}Object.keys(r.storage).length===0&&(r.storage=void 0)}let a=Object.entries(t).map(([e,t])=>[parseInt(e,10),t]).filter(([,{id:t}])=>e.items.has(t)&&e.getById(t).isCharmDetachment()).sort(([e],[t])=>e-t);if(a.length>1){let[r,i]=n(a[0]),o=e.getById(i.id),s=0;for(let[e,n]of a)s+=n.charges??o.getDefaultCharges(),e!==r&&delete t[e];i.charges=Math.min(s,o.getMaximumCharges()),i.updatedAt=f()}if(r.dropEmptyDefaultItems===!0){for(let[n,r]of Object.entries(t))if(I(e,r)){let e=parseInt(n,10);i.push({uid:e,id:r.id,reason:`policy`}),delete t[e]}}for(let[e,n]of Object.entries(t))n.storage!==void 0&&Object.keys(n.storage).length>r.storageUnitMaxItems&&L(n.storage,r.storageUnitMaxItems,i,parseInt(e,10));return Object.keys(t).length>r.maxItems&&L(t,r.maxItems,i),i}export{_ as CS2_INVENTORY_RULES,x as assertAddable,M as assertInventoryItem,D as assertKeychains,k as assertPatches,T as assertStickers,b as checkAddable,S as checkAttachable,j as checkInventoryItem,E as checkKeychains,O as checkPatches,v as checkStickerSchema,w as checkStickers,A as checkStorage,P as getDropReason,y as getNextStickerSchema,R as reconcileInventoryItems,F as repairInventoryItem,g as snapStickerRotation,h as validateStickerRotation};
|
|
1
|
+
import{assert as e,clamp as t,ensure as n,isFactorPrecise as r,truncateToFactor as i}from"./utils.mjs";import{CS2_KEYCHAIN_POSITION_FACTOR as a,CS2_MAX_KEYCHAIN_SEED as o,CS2_MAX_STATTRAK as s,CS2_STICKER_OFFSET_FACTOR as c,CS2_STICKER_ROTATION_STEP as l,CS2_STICKER_WEAR_FACTOR as u}from"./economy-constants.mjs";import{CS2InventoryItem as d,getTimestamp as f}from"./inventory.mjs";function p(e,n){return{check(t,i){if(t===void 0)return!0;let{min:a,max:o}=n(i);return r(t,e)&&(a===void 0||t>=a)&&(o===void 0||t<=o)},repair(r,a){if(r===void 0||!Number.isFinite(r))return;let{min:o,max:s}=n(a),c=i(r,e);return t(c,o??c,s??c)}}}function m(e){return{check(t,n){if(t===void 0)return!0;let{min:r,max:i}=e(n);return Number.isInteger(t)&&t>=r&&t<=i},repair(n,r){if(n===void 0||!Number.isFinite(n))return;let{min:i,max:a}=e(r);return t(Math.trunc(n),i,a)}}}function h(e){return e===void 0||Number.isInteger(e/.5)&&e>=-180&&e<=180}function g(e){return Math.round(e/l)*l}const _={itemCharges:{check:(e,t)=>t.economy.safeValidateCharges(e,t),repair(e,n){return e!==void 0&&n.hasCharges()&&Number.isFinite(e)?t(Math.trunc(e),1,n.getMaximumCharges()):void 0}},itemSeed:{check:(e,t)=>t.economy.safeValidateSeed(e,t),repair(e,n){return e!==void 0&&n.hasSeed()&&Number.isFinite(e)?t(Math.trunc(e),n.getMinimumSeed(),n.getMaximumSeed()):void 0}},itemStatTrak:{check:(e,t)=>t.economy.safeValidateStatTrak(e,t),repair(e,n){return e!==void 0&&n.hasStatTrak()&&Number.isFinite(e)?t(Math.trunc(e),0,s):void 0}},itemWear:{check:(e,t)=>t.economy.safeValidateWear(e,t),repair(e,n){if(e===void 0||!n.hasWear())return;let r=t(e,n.getMinimumWear(),n.getMaximumWear());return n.economy.safeValidateWear(r,n)?r:void 0}},keychainPositionX:p(a,e=>e.getKeychainPositionBounds().x),keychainPositionY:p(a,e=>e.getKeychainPositionBounds().y),keychainPositionZ:p(a,e=>e.getKeychainPositionBounds().z),keychainSeed:m(()=>({min:1,max:o})),stickerRotation:{check:e=>h(e),repair(e){if(e===void 0)return;let t=g(e);return h(t)?t:void 0}},stickerSchema:{check:(e,t)=>v(e,t.getStickerSchemaCount()),repair:(e,t)=>v(e,t.getStickerSchemaCount())?e:void 0},stickerWear:p(u,()=>({min:0,max:1})),stickerX:p(c,e=>e.getStickerOffsetBounds().x),stickerY:p(c,e=>e.getStickerOffsetBounds().y)};function v(e,t){return e===void 0||Number.isInteger(e)&&e>=0&&e<t}function y(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}function b(e){return!e.isGloves()||e.isDefault===!0||e.isBase!==!0}function x(t){e(b(t))}function S(e){return e.isDefault!==!0}function C(e,t,n){if(!e.items.has(t))return!1;let r=e.getById(t);return n(r)&&S(r)}function w(e,t,n){if(t===void 0)return!0;let r=Object.values(t);if(r.length>5||!n.hasStickers())return!1;for(let{id:t,wear:i,rotation:a,x:o,y:s,schema:c}of r){if(!e.items.has(t))return!1;let r=e.getById(t);if(!r.isSticker()||!S(r)||!_.stickerWear.check(i,n)||!_.stickerRotation.check(a,n)||!_.stickerX.check(o,n)||!_.stickerY.check(s,n)||!_.stickerSchema.check(c,n))return!1}return!0}function T(t,n,r){e(w(t,n,r))}function E(e,t,n){if(t===void 0)return!0;let r=Object.entries(t);if(r.length>1||!n.hasKeychains())return!1;for(let[t,{id:i,seed:a,x:o,y:s,z:c}]of r){let r=parseInt(t,10);if(r<0||r>0||!e.items.has(i))return!1;let l=e.getById(i);if(!l.isKeychain()||!S(l)||!_.keychainSeed.check(a,n)||!_.keychainPositionX.check(o,n)||!_.keychainPositionY.check(s,n)||!_.keychainPositionZ.check(c,n))return!1}return!0}function D(t,n,r){e(E(t,n,r))}function O(e,t,n){if(t===void 0)return!0;if(!n.isAgent())return!1;for(let[n,r]of Object.entries(t)){let t=parseInt(n,10);if(t<0||t>4||!e.items.has(r))return!1;let i=e.getById(r);if(!i.isPatch()||!S(i))return!1}return!0}function k(t,n,r){e(O(t,n,r))}function A(e,t,n){if(t===void 0)return!0;if(!n.isStorageUnit())return!1;for(let n of Object.values(t))if(n.storage!==void 0||!j(e,n))return!1;return!0}function j(e,{charges:t,id:n,keychains:r,nameTag:i,patches:a,seed:o,statTrak:s,stickers:c,storage:l,wear:u}){if(!e.items.has(n))return!1;let d=e.getById(n);return _.itemWear.check(u,d)&&_.itemCharges.check(t,d)&&_.itemSeed.check(o,d)&&_.itemStatTrak.check(s,d)&&e.safeValidateNameTag(i,d)&&b(d)&&O(e,a,d)&&w(e,c,d)&&E(e,r,d)&&A(e,l,d)}function M(t,n){e(j(t,n))}function N(e,t){let n=Object.keys(e).map(e=>[e,parseInt(e,10)]).sort(([,e],[,t])=>e-t),r=0;for(let[i,a]of n)!Number.isInteger(a)||a<0||a>=t||r===t?delete e[i]:r++}function P(e,t){return e.items.has(t)?`unrepairable`:`unknown-item`}function F(e,t,n){if(!e.items.has(t.id))return!1;let r=e.getById(t.id);if(t.patches!==void 0)if(!r.hasPatches())t.patches=void 0;else{N(t.patches,5);for(let[n,r]of Object.entries(t.patches))C(e,r,e=>e.isPatch())||delete t.patches[n]}if(t.stickers!==void 0)if(!r.hasStickers())t.stickers=void 0;else{let n=r.getStickerSchemaCount(),i=Object.keys(t.stickers).length>5;for(let[a,o]of Object.entries(t.stickers)){if(!C(e,o.id,e=>e.isSticker())){delete t.stickers[a],i=!0;continue}v(o.schema,n)||(i=!0),o.wear=_.stickerWear.repair(o.wear,r),o.rotation=_.stickerRotation.repair(o.rotation,r),o.x=_.stickerX.repair(o.x,r),o.y=_.stickerY.repair(o.y,r)}i&&(t.stickers=d.stickersFromArray(d.stickersToArray(t.stickers,n)))}if(t.keychains!==void 0)if(!r.hasKeychains())t.keychains=void 0;else{N(t.keychains,1);for(let[n,i]of Object.entries(t.keychains)){if(!C(e,i.id,e=>e.isKeychain())){delete t.keychains[n];continue}i.seed=_.keychainSeed.repair(i.seed,r),i.x=_.keychainPositionX.repair(i.x,r),i.y=_.keychainPositionY.repair(i.y,r),i.z=_.keychainPositionZ.repair(i.z,r)}}if(t.storage!==void 0)if(!r.isStorageUnit())t.storage=void 0;else{for(let[r,i]of Object.entries(t.storage)){let a=parseInt(r,10);i.storage=void 0,F(e,i)||(n?.dropped.push({uid:a,id:i.id,reason:P(e,i.id),storageUid:n.storageUid}),delete t.storage[a])}Object.keys(t.storage).length===0&&(t.storage=void 0)}return e.safeValidateNameTag(t.nameTag,r)||(t.nameTag=void 0),t.seed=_.itemSeed.repair(t.seed,r),t.statTrak=_.itemStatTrak.repair(t.statTrak,r),t.charges=_.itemCharges.repair(t.charges,r),t.charges===void 0&&r.isGraffiti()&&(t.equipped===!0||t.equippedCT===!0||t.equippedT===!0)&&(t.charges=r.getDefaultCharges()),t.wear=_.itemWear.repair(t.wear,r),j(e,t)}function I(e,t){return e.items.has(t.id)&&e.getById(t.id).isDefault===!0&&t.nameTag===void 0&&t.charges===void 0&&Object.keys(t.stickers??{}).length===0&&Object.keys(t.keychains??{}).length===0&&Object.keys(t.patches??{}).length===0}function L(e,t,r,i){let a=Object.keys(e).map(e=>parseInt(e,10)).sort((e,t)=>e-t);for(let o of a.slice(t)){let t={uid:o,id:n(e[o]).id,reason:`policy`};i!==void 0&&(t.storageUid=i),r.push(t),delete e[o]}}function R(e,t,r){let i=[];for(let[n,r]of Object.entries(t)){if(r.storage===void 0)continue;let t=parseInt(n,10);for(let[n,a]of Object.entries(r.storage)){if(!e.items.has(a.id))continue;let o=e.getById(a.id);if(o.isCharmDetachment()||o.isCharmDetachmentPack()){let e=parseInt(n,10);i.push({uid:e,id:a.id,reason:`policy`,storageUid:t}),delete r.storage[e]}else o.hasCharges()&&(a.charges=void 0)}Object.keys(r.storage).length===0&&(r.storage=void 0)}let a=Object.entries(t).map(([e,t])=>[parseInt(e,10),t]).filter(([,{id:t}])=>e.items.has(t)&&e.getById(t).isCharmDetachment()).sort(([e],[t])=>e-t);if(a.length>1){let[r,i]=n(a[0]),o=e.getById(i.id),s=0;for(let[e,n]of a)s+=n.charges??o.getDefaultCharges(),e!==r&&delete t[e];i.charges=Math.min(s,o.getMaximumCharges()),i.updatedAt=f()}if(r.dropEmptyDefaultItems===!0){for(let[n,r]of Object.entries(t))if(I(e,r)){let e=parseInt(n,10);i.push({uid:e,id:r.id,reason:`policy`}),delete t[e]}}for(let[e,n]of Object.entries(t))n.storage!==void 0&&Object.keys(n.storage).length>r.storageUnitMaxItems&&L(n.storage,r.storageUnitMaxItems,i,parseInt(e,10));return Object.keys(t).length>r.maxItems&&L(t,r.maxItems,i),i}export{_ as CS2_INVENTORY_RULES,x as assertAddable,M as assertInventoryItem,D as assertKeychains,k as assertPatches,T as assertStickers,b as checkAddable,S as checkAttachable,j as checkInventoryItem,E as checkKeychains,O as checkPatches,v as checkStickerSchema,w as checkStickers,A as checkStorage,P as getDropReason,y as getNextStickerSchema,R as reconcileInventoryItems,F as repairInventoryItem,g as snapStickerRotation,h as validateStickerRotation};
|
package/dist/inventory.d.mts
CHANGED
|
@@ -39,6 +39,7 @@ declare class CS2Inventory {
|
|
|
39
39
|
addWithNameTag(nameTagUid: number, id: number, nameTag: string): this;
|
|
40
40
|
addWithSticker(stickerUid: number, id: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["stickers"]>, "id">): this;
|
|
41
41
|
addWithKeychain(keychainUid: number, id: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["keychains"]>, "id" | "seed">): this;
|
|
42
|
+
private dropIfEmptyDefaultItem;
|
|
42
43
|
edit(itemUid: number, properties: Partial<CS2BaseInventoryItem>): this;
|
|
43
44
|
equip(itemUid: number, team?: CS2Team): this;
|
|
44
45
|
unequip(uid: number, team?: CS2Team): this;
|
|
@@ -58,6 +59,8 @@ declare class CS2Inventory {
|
|
|
58
59
|
applyItemKeychain(targetUid: number, keychainUid: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["keychains"]>, "id" | "seed">): this;
|
|
59
60
|
removeItemKeychain(targetUid: number, slot: number): this;
|
|
60
61
|
editItemKeychain(targetUid: number, slot: number, patch: Partial<Omit<RecordValue<CS2BaseInventoryItem["keychains"]>, "id" | "seed">>): this;
|
|
62
|
+
sealStickerSlab(slabUid: number, stickerUid: number): this;
|
|
63
|
+
unsealStickerSlab(displayCaseUid: number): this;
|
|
61
64
|
applyItemPatch(targetUid: number, patchUid: number, slot: number): this;
|
|
62
65
|
removeItemPatch(targetUid: number, slot: number): this;
|
|
63
66
|
incrementItemStatTrak(targetUid: number): this;
|
package/dist/inventory.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,ensure as n,roundToFactor as r}from"./utils.mjs";import{CS2Team as i}from"./teams.mjs";import{CS2_STICKER_SCRAPE_FACTOR as a,CS2_STICKER_WEAR_FACTOR as o}from"./economy-constants.mjs";import{CS2Economy as s,CS2EconomyItem as c}from"./economy.mjs";import{CS2_INVENTORY_VERSION as l}from"./inventory-migrations/index.mjs";import{decodeInventoryData as u}from"./inventory-format.mjs";import{assertInventoryItem as d,assertKeychains as f,assertStickers as p,checkStickerSchema as m,getDropReason as h,getNextStickerSchema as g,reconcileInventoryItems as _,repairInventoryItem as v}from"./inventory-rules.mjs";const y=1707696138408,b=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function x(){return Math.ceil((Date.now()-y)/1e3)}function S(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function C(e){return E.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function w(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}var T=class e{economy;items;loadChanges;options;static load(t,r={}){let i=r.economy??s,{data:a,migratedFrom:o}=u(t,i),c=new e({...r,data:a,economy:i});return n(c.loadChanges).migratedFrom=o,c}constructor({economy:e,data:t,dropEmptyDefaultItems:n,maxItems:r,storageUnitMaxItems:i}={}){this.economy=e??s,this.options={dropEmptyDefaultItems:n??!1,maxItems:r??256,storageUnitMaxItems:i??32};let a={migratedFrom:void 0,dropped:[],repairedUids:[]};this.items=t===void 0?new Map:this.toInventoryItems(structuredClone(t.items),a),this.loadChanges=t===void 0?void 0:a}toInventoryItems(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),JSON.stringify(t)]));for(let[n,r]of Object.entries(e)){let i=parseInt(n,10);v(this.economy,r,{dropped:t.dropped,storageUid:i})||(t.dropped.push({uid:i,id:r.id,reason:h(this.economy,r.id)}),delete e[i])}return t.dropped.push(..._(this.economy,e,this.options)),new Map(Object.entries(e).map(([e,r])=>{let i=parseInt(e,10);return JSON.stringify(r)!==n.get(i)&&t.repairedUids.push(i),[i,new E(this,i,r,this.economy.getById(r.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}isFull(){return this.items.size>=this.options.maxItems}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}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}get(e){return n(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}getStorageUnitSize(e){return this.get(e).storage?.size??0}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}getCharmDetachmentCharges(){let e=this.findChargeableUid(this.economy.getCharmDetachment().id);return e===void 0?0:this.get(e).getCharges()}getData(){return{items:this.toBaseInventoryItems(this.items),version:l}}findChargeableUid(e){let t;for(let[n,r]of this.items)r.id===e&&(t===void 0||n<t)&&(t=n);return t}addCharges(e,n){t(e.hasCharges());let r=e.getMaximumCharges(),i=this.findChargeableUid(e.id);if(i!==void 0){let t=this.get(i);return t.charges=Math.min((t.charges??e.getDefaultCharges())+n,r),t.updatedAt=x(),this}t(!this.isFull());let a=S(this.items);return this.items.set(a,new E(this,a,{id:e.id,charges:Math.min(n,r),updatedAt:x()},e)),this}add(e){let n=this.economy.getById(e.id);if(t(!n.isStub()),t(e.charges===void 0),n.isCharmDetachment())return this.addCharges(n,1);t(!this.isFull());let r=S(this.items);return this.items.set(r,new E(this,r,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:x()}),n)),this}addInventoryItem(e){t(!this.isFull());let n=S(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=x(),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 p(this.economy,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(),{x:i,y:a,z:o}=n,s={0:{id:r.id,seed:r.seed,x:i,y:a,z:o}};return f(this.economy,s,this.economy.getById(t)),this.items.delete(e),this.add({id:t,keychains:s}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),t(n.charges===void 0||n.charges===r.charges),r.edit(n,{updatedAt:x()}),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==i.CT||r.equippedCT===void 0),t(n!==i.T||r.equippedT===void 0),t(b.includes(r.type)),t(!r.isSealed()),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,a]of this.items)e===t?(a.equipped=n===void 0||void 0,a.equippedCT=n===i.CT||a.equippedCT,a.equippedT=n===i.T||a.equippedT):a.type===r.type&&(!r.isWeapon()||a.modelKey===r.modelKey)&&(a.equipped=n===void 0?void 0:a.equipped,a.equippedCT=n===i.CT?void 0:a.equippedCT,a.equippedT=n===i.T?void 0:a.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===i.CT?void 0:n.equippedCT,n.equippedT=t===i.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:x()}),this}unsealItem(e){let n=this.get(e);return t(n.isSealed()),n.charges=n.getDefaultCharges(),n.updatedAt=x(),this}unpackItem(e){return this.get(e).expectCharmDetachmentPack(),this.items.delete(e),this.addCharges(this.economy.getCharmDetachment(),3)}consumeItemCharges(e,n=1){let r=this.get(e);t(r.hasCharges()),t(!r.isSealed()),t(Number.isInteger(n)&&n>0);let i=r.getCharges()-n;return t(i>=0),i===0?(this.items.delete(e),this):(r.charges=i,r.updatedAt=x(),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=x(),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=x(),this}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){let n=this.get(e);t(!n.isStorageUnit()),t(!n.isCharmDetachment()&&!n.isCharmDetachmentPack()),t(!n.hasCharges()||n.isSealed())}let i=r.storage??new Map;for(let e of n){let t=S(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=x(),this}retrieveFromStorageUnit(e,r){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(r.length>0),t(this.canRetrieveFromStorageUnit(e,r.length));for(let e of r)t(a.has(e));for(let e of r){let t=n(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=x(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=C(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??g(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=E.stickersFromArray(o);return p(this.economy,f,i),i.stickers=w(f),i.updatedAt=x(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=C(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=w(E.stickersFromArray(i)),r.updatedAt=x(),this}moveItemSticker(e,r,i){let a=this.get(e),o=C(a.stickers),s=n(o[r]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(r,1),o.splice(i,0,s),a.stickers=w(E.stickersFromArray(o)),a.updatedAt=x(),this}editItemSticker(e,n,r){let i=this.get(e),a=C(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=E.stickersFromArray(a);return p(this.economy,o,i),i.stickers=w(o),i.updatedAt=x(),this}scrapeItemSticker(e,i,s){let c=this.get(e),l=C(c.stickers),u=n(l[i]),d=u.wear??0,f;return s===void 0?f=r(d+a,o):(t(Number.isFinite(s)),t(s>d&&s<=1),f=r(s,o)),(s===void 0?f>1:f>=1)?l.splice(i,1):l[i]={...u,wear:f},c.stickers=w(E.stickersFromArray(l)),c.updatedAt=x(),this}applyItemKeychain(e,n,r={}){let i=this.get(e),a=this.get(n).expectKeychain();t(i.hasKeychains()),t(i.getKeychainsCount()<1);let o=0;for(;i.keychains?.has(o);)o++;let{x:s,y:c,z:l}=r,u={id:a.id,seed:a.seed,x:s,y:c,z:l},d={...Object.fromEntries(i.keychains??[]),[o]:u};return f(this.economy,d,i),(i.keychains??=new Map).set(o,u),i.updatedAt=x(),this.items.delete(n),this}removeItemKeychain(e,r){let i=this.get(e),a=n(i.keychains),o=n(a.get(r)),s=n(this.findChargeableUid(this.economy.getCharmDetachment().id));return t(!this.isFull()||this.get(s).getCharges()===1),this.consumeItemCharges(s),a.delete(r),a.size===0&&(i.keychains=void 0),i.updatedAt=x(),this.add({id:o.id,seed:o.seed}),this}editItemKeychain(e,t,r){let i=this.get(e),a=n(i.keychains),o={...n(a.get(t)),...r},s={...Object.fromEntries(a),[t]:o};return f(this.economy,s,i),a.set(t,o),i.updatedAt=x(),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=x(),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=x(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=x()),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.definitionIndex===a.definitionIndex);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=x(),a.statTrak=o,a.updatedAt=x(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}setAll(e){return this.items=e,this}size(){return this.items.size}stringify(){return JSON.stringify(this.getData())}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},E=class e extends c{inventory;uid;charges;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;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&&!m(n,t)&&(n=g(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}]))}assign({keychains:t,patches:n,stickers:r,storage:i}){n!==void 0&&(this.patches=new Map(Object.entries(n).map(([e,t])=>[parseInt(e,10),t]))),r!==void 0&&(this.stickers=w(e.stickersFromArray(e.stickersToArray(r,this.getStickerSchemaCount())))),t!==void 0&&(this.keychains=new Map(Object.entries(t).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.storage=new Map(Object.entries(i).map(([t,n])=>{let r=parseInt(t,10);return[r,new e(this.inventory,r,n,this.economy.getById(n.id))]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,d(this.economy,n),Object.assign(this,n),this.assign(n)}isSealed(){return this.hasCharges()&&this.charges===void 0}getStickersCount(){return this.stickers?.size??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainsCount(){return this.keychains?.size??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getPatchesCount(){return this.patches?.size??0}getCharges(){return this.charges??0}getWear(){return this.wear??this.wearMin??0}getImageUrl(e){return super.getImageUrl(e??this.getWear())}allStickers(){return C(this.stickers).map((e,t)=>[t,e])}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}someStickers(){return this.allStickers()}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);d(this.economy,t);for(let t of e)Object.assign(this,t),this.assign(t)}asBase(){return{charges:this.charges,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{T as CS2Inventory,E as CS2InventoryItem,b as CS2_INVENTORY_EQUIPPABLE_ITEMS,y as CS2_INVENTORY_TIMESTAMP,S as getNextUid,x as getTimestamp,C as stickerMapToArray,w as toStickerMap};
|
|
1
|
+
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,ensure as n,roundToFactor as r}from"./utils.mjs";import{CS2Team as i}from"./teams.mjs";import{CS2_STICKER_SCRAPE_FACTOR as a,CS2_STICKER_WEAR_FACTOR as o}from"./economy-constants.mjs";import{CS2Economy as s,CS2EconomyItem as c}from"./economy.mjs";import{CS2_INVENTORY_VERSION as l}from"./inventory-migrations/index.mjs";import{decodeInventoryData as u}from"./inventory-format.mjs";import{assertInventoryItem as d,assertKeychains as f,assertStickers as p,checkStickerSchema as m,getDropReason as h,getNextStickerSchema as g,reconcileInventoryItems as _,repairInventoryItem as v}from"./inventory-rules.mjs";const y=1707696138408,b=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function x(){return Math.ceil((Date.now()-y)/1e3)}function S(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function C(e){return E.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function w(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}var T=class e{economy;items;loadChanges;options;static load(t,r={}){let i=r.economy??s,{data:a,migratedFrom:o}=u(t,i),c=new e({...r,data:a,economy:i});return n(c.loadChanges).migratedFrom=o,c}constructor({economy:e,data:t,dropEmptyDefaultItems:n,maxItems:r,storageUnitMaxItems:i}={}){this.economy=e??s,this.options={dropEmptyDefaultItems:n??!1,maxItems:r??256,storageUnitMaxItems:i??32};let a={migratedFrom:void 0,dropped:[],repairedUids:[]};this.items=t===void 0?new Map:this.toInventoryItems(structuredClone(t.items),a),this.loadChanges=t===void 0?void 0:a}toInventoryItems(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),JSON.stringify(t)]));for(let[n,r]of Object.entries(e)){let i=parseInt(n,10);v(this.economy,r,{dropped:t.dropped,storageUid:i})||(t.dropped.push({uid:i,id:r.id,reason:h(this.economy,r.id)}),delete e[i])}return t.dropped.push(..._(this.economy,e,this.options)),new Map(Object.entries(e).map(([e,r])=>{let i=parseInt(e,10);return JSON.stringify(r)!==n.get(i)&&t.repairedUids.push(i),[i,new E(this,i,r,this.economy.getById(r.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}isFull(){return this.items.size>=this.options.maxItems}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}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}get(e){return n(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}getStorageUnitSize(e){return this.get(e).storage?.size??0}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}getCharmDetachmentCharges(){let e=this.findChargeableUid(this.economy.getCharmDetachment().id);return e===void 0?0:this.get(e).getCharges()}getData(){return{items:this.toBaseInventoryItems(this.items),version:l}}findChargeableUid(e){let t;for(let[n,r]of this.items)r.id===e&&(t===void 0||n<t)&&(t=n);return t}addCharges(e,n){t(e.hasCharges());let r=e.getMaximumCharges(),i=this.findChargeableUid(e.id);if(i!==void 0){let t=this.get(i);return t.charges=Math.min((t.charges??e.getDefaultCharges())+n,r),t.updatedAt=x(),this}t(!this.isFull());let a=S(this.items);return this.items.set(a,new E(this,a,{id:e.id,charges:Math.min(n,r),updatedAt:x()},e)),this}add(e){let n=this.economy.getById(e.id);if(t(!n.isStub()),t(e.charges===void 0),n.isCharmDetachment())return this.addCharges(n,1);t(!this.isFull());let r=S(this.items);return this.items.set(r,new E(this,r,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:x()}),n)),this}addInventoryItem(e){t(!this.isFull());let n=S(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=x(),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 p(this.economy,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(),{x:i,y:a,z:o}=n,s={0:{id:r.id,seed:r.seed,x:i,y:a,z:o}};return f(this.economy,s,this.economy.getById(t)),this.items.delete(e),this.add({id:t,keychains:s}),this}dropIfEmptyDefaultItem(e){this.options.dropEmptyDefaultItems===!0&&e.isDefault===!0&&e.nameTag===void 0&&e.charges===void 0&&(e.stickers?.size??0)===0&&(e.keychains?.size??0)===0&&(e.patches?.size??0)===0&&this.items.delete(e.uid)}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),t(n.charges===void 0||n.charges===r.charges),r.edit(n,{updatedAt:x()}),this.dropIfEmptyDefaultItem(r),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==i.CT||r.equippedCT===void 0),t(n!==i.T||r.equippedT===void 0),t(b.includes(r.type)),t(!r.isSealed()),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,a]of this.items)e===t?(a.equipped=n===void 0||void 0,a.equippedCT=n===i.CT||a.equippedCT,a.equippedT=n===i.T||a.equippedT):a.type===r.type&&(!r.isWeapon()||a.modelKey===r.modelKey)&&(a.equipped=n===void 0?void 0:a.equipped,a.equippedCT=n===i.CT?void 0:a.equippedCT,a.equippedT=n===i.T?void 0:a.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===i.CT?void 0:n.equippedCT,n.equippedT=t===i.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:x()}),this}unsealItem(e){let n=this.get(e);return t(n.isSealed()),n.charges=n.getDefaultCharges(),n.updatedAt=x(),this}unpackItem(e){return this.get(e).expectCharmDetachmentPack(),this.items.delete(e),this.addCharges(this.economy.getCharmDetachment(),3)}consumeItemCharges(e,n=1){let r=this.get(e);t(r.hasCharges()),t(!r.isSealed()),t(Number.isInteger(n)&&n>0);let i=r.getCharges()-n;return t(i>=0),i===0?(this.items.delete(e),this):(r.charges=i,r.updatedAt=x(),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=x(),this.items.delete(e),this.dropIfEmptyDefaultItem(r),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=x(),this}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){let n=this.get(e);t(!n.isStorageUnit()),t(!n.isCharmDetachment()&&!n.isCharmDetachmentPack()),t(!n.hasCharges()||n.isSealed())}let i=r.storage??new Map;for(let e of n){let t=S(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=x(),this}retrieveFromStorageUnit(e,r){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(r.length>0),t(this.canRetrieveFromStorageUnit(e,r.length));for(let e of r)t(a.has(e));for(let e of r){let t=n(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=x(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=C(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??g(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=E.stickersFromArray(o);return p(this.economy,f,i),i.stickers=w(f),i.updatedAt=x(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=C(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=w(E.stickersFromArray(i)),r.updatedAt=x(),this.dropIfEmptyDefaultItem(r),this}moveItemSticker(e,r,i){let a=this.get(e),o=C(a.stickers),s=n(o[r]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(r,1),o.splice(i,0,s),a.stickers=w(E.stickersFromArray(o)),a.updatedAt=x(),this}editItemSticker(e,n,r){let i=this.get(e),a=C(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=E.stickersFromArray(a);return p(this.economy,o,i),i.stickers=w(o),i.updatedAt=x(),this}scrapeItemSticker(e,i,s){let c=this.get(e),l=C(c.stickers),u=n(l[i]),d=u.wear??0,f;return s===void 0?f=r(d+a,o):(t(Number.isFinite(s)),t(s>d&&s<=1),f=r(s,o)),(s===void 0?f>1:f>=1)?l.splice(i,1):l[i]={...u,wear:f},c.stickers=w(E.stickersFromArray(l)),c.updatedAt=x(),this.dropIfEmptyDefaultItem(c),this}applyItemKeychain(e,n,r={}){let i=this.get(e),a=this.get(n).expectKeychain();t(i.hasKeychains()),t(i.getKeychainsCount()<1);let o=0;for(;i.keychains?.has(o);)o++;let{x:s,y:c,z:l}=r,u={id:a.id,seed:a.seed,x:s,y:c,z:l},d={...Object.fromEntries(i.keychains??[]),[o]:u};return f(this.economy,d,i),(i.keychains??=new Map).set(o,u),i.updatedAt=x(),this.items.delete(n),this}removeItemKeychain(e,r){let i=this.get(e),a=n(i.keychains),o=n(a.get(r)),s=n(this.findChargeableUid(this.economy.getCharmDetachment().id));return t(!this.isFull()||this.get(s).getCharges()===1),this.consumeItemCharges(s),a.delete(r),a.size===0&&(i.keychains=void 0),i.updatedAt=x(),this.add({id:o.id,seed:o.seed}),this.dropIfEmptyDefaultItem(i),this}editItemKeychain(e,t,r){let i=this.get(e),a=n(i.keychains),o={...n(a.get(t)),...r},s={...Object.fromEntries(a),[t]:o};return f(this.economy,s,i),a.set(t,o),i.updatedAt=x(),this}sealStickerSlab(e,t){this.get(e).expectStickerSlab();let n=this.get(t).expectSticker().getDisplayCase();return this.items.delete(e),this.items.delete(t),this.add({id:n.id}),this}unsealStickerSlab(e){let t=this.get(e).expectStickerDisplayCase(),r=n(t.displayedStickerId);return this.items.delete(e),this.add({id:r}),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=x(),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=x(),this.dropIfEmptyDefaultItem(r),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=x()),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.definitionIndex===a.definitionIndex);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=x(),a.statTrak=o,a.updatedAt=x(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}setAll(e){return this.items=e,this}size(){return this.items.size}stringify(){return JSON.stringify(this.getData())}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},E=class e extends c{inventory;uid;charges;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;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&&!m(n,t)&&(n=g(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}]))}assign({keychains:t,patches:n,stickers:r,storage:i}){n!==void 0&&(this.patches=new Map(Object.entries(n).map(([e,t])=>[parseInt(e,10),t]))),r!==void 0&&(this.stickers=w(e.stickersFromArray(e.stickersToArray(r,this.getStickerSchemaCount())))),t!==void 0&&(this.keychains=new Map(Object.entries(t).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.storage=new Map(Object.entries(i).map(([t,n])=>{let r=parseInt(t,10);return[r,new e(this.inventory,r,n,this.economy.getById(n.id))]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,d(this.economy,n),Object.assign(this,n),this.assign(n)}isSealed(){return this.hasCharges()&&this.charges===void 0}getStickersCount(){return this.stickers?.size??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainsCount(){return this.keychains?.size??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getPatchesCount(){return this.patches?.size??0}getCharges(){return this.charges??0}getWear(){return this.wear??this.wearMin??0}getImageUrl(e){return super.getImageUrl(e??this.getWear())}allStickers(){return C(this.stickers).map((e,t)=>[t,e])}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}someStickers(){return this.allStickers()}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);d(this.economy,t);for(let t of e)Object.assign(this,t),this.assign(t)}asBase(){return{charges:this.charges,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{T as CS2Inventory,E as CS2InventoryItem,b as CS2_INVENTORY_EQUIPPABLE_ITEMS,y as CS2_INVENTORY_TIMESTAMP,S as getNextUid,x as getTimestamp,C as stickerMapToArray,w as toStickerMap};
|