@ianlucas/cs2-lib 8.0.0-rc.3 → 8.0.0-rc.4
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.
|
@@ -29,7 +29,7 @@ declare const CS2_MAX_KEYCHAIN_SEED = 1e5;
|
|
|
29
29
|
declare const CS2_MAX_STICKERS = 5;
|
|
30
30
|
declare const CS2_MAX_PATCHES = 5;
|
|
31
31
|
declare const CS2_MAX_KEYCHAINS = 1;
|
|
32
|
-
declare const CS2_STICKER_WEAR_FACTOR = .
|
|
32
|
+
declare const CS2_STICKER_WEAR_FACTOR = .01;
|
|
33
33
|
declare const CS2_WEAR_FACTOR = 1e-6;
|
|
34
34
|
declare const CS2_NAMETAG_RE: RegExp;
|
|
35
35
|
declare const CS2_CONTRACT_TOOL_DEF = 62;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CS2ItemType as e}from"./economy-types.mjs";import{CS2Team as t}from"./teams.mjs";const n=0,r=999999,i=0,a=1,o=.06,s=.8,c=0,l=.07,u=.070001,d=.15,f=.150001,p=.37,m=.370001,h=.44,g=.440001,_=1,v=1,y=1e3,b=0,x=1,S=-180,C=180,w=1,T=1e5,E=5,D=5,O=1,k=.
|
|
1
|
+
import{CS2ItemType as e}from"./economy-types.mjs";import{CS2Team as t}from"./teams.mjs";const n=0,r=999999,i=0,a=1,o=.06,s=.8,c=0,l=.07,u=.070001,d=.15,f=.150001,p=.37,m=.370001,h=.44,g=.440001,_=1,v=1,y=1e3,b=0,x=1,S=-180,C=180,w=1,T=1e5,E=5,D=5,O=1,k=.01,A=1e-6,j=/^[A-Za-z0-9`!@#$%^&*-+=(){}\[\]\/\|\\,.?:;'_\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\s]{0,20}$/u,M=62,N=1200,P=1324,F=1201,I=[e.Container,e.Tool],L=[e.Collectible,e.MusicKit],R=[e.Weapon,e.Agent,e.Gloves,e.Melee,e.MusicKit],z=[e.Patch,e.Sticker,e.Graffiti,e.Keychain],B=[e.Melee,e.Weapon],V=[e.Gloves,e.Melee,e.Weapon],H=[e.Agent],U=[e.Weapon,e.Melee,e.Gloves,e.Keychain],W=[e.Melee,e.Weapon,e.MusicKit],G=[e.Weapon],K=[e.Weapon],q=[`heavy`,`smg`],J=[`rifle`],Y=[`c4`,`equipment`],X=[`awp`,`g3sg1`,`scar20`,`ssg08`],Z=[`m249`,`negev`],Q=[t.T,t.CT],$=[t.CT],ee=[t.T];export{I as CS2_CONTAINER_ITEMS,M as CS2_CONTRACT_TOOL_DEF,s as CS2_DEFAULT_MAX_WEAR,o as CS2_DEFAULT_MIN_WEAR,L as CS2_DISPLAY_ITEMS,R as CS2_EQUIPMENT_ITEMS,z as CS2_GRAPHIC_ART_ITEMS,K as CS2_KEYCHAINABLE_ITEMS,Z as CS2_MACHINEGUN_MODELS,_ as CS2_MAX_BATTLE_SCARRED_WEAR,l as CS2_MAX_FACTORY_NEW_WEAR,p as CS2_MAX_FIELD_TESTED_WEAR,O as CS2_MAX_KEYCHAINS,T as CS2_MAX_KEYCHAIN_SEED,d as CS2_MAX_MINIMAL_WEAR_WEAR,D as CS2_MAX_PATCHES,y as CS2_MAX_SEED,r as CS2_MAX_STATTRAK,E as CS2_MAX_STICKERS,C as CS2_MAX_STICKER_ROTATION,x as CS2_MAX_STICKER_WEAR,a as CS2_MAX_WEAR,h as CS2_MAX_WELL_WORN_WEAR,q as CS2_MIDTIER_CATEGORIES,g as CS2_MIN_BATTLE_SCARRED_WEAR,c as CS2_MIN_FACTORY_NEW_WEAR,f as CS2_MIN_FIELD_TESTED_WEAR,w as CS2_MIN_KEYCHAIN_SEED,u as CS2_MIN_MINIMAL_WEAR_WEAR,v as CS2_MIN_SEED,n as CS2_MIN_STATTRAK,S as CS2_MIN_STICKER_ROTATION,b as CS2_MIN_STICKER_WEAR,i as CS2_MIN_WEAR,m as CS2_MIN_WELL_WORN_WEAR,Y as CS2_MISC_CATEGORIES,B as CS2_NAMETAGGABLE_ITEMS,j as CS2_NAMETAG_RE,N as CS2_NAMETAG_TOOL_DEF,V as CS2_PAINTABLE_ITEMS,H as CS2_PATCHABLE_ITEMS,J as CS2_RIFLE_CATEGORIES,U as CS2_SEEDABLE_ITEMS,X as CS2_SNIPER_RIFLE_MODELS,W as CS2_STATTRAKABLE_ITEMS,P as CS2_STATTRAK_SWAP_TOOL_DEF,G as CS2_STICKERABLE_ITEMS,k as CS2_STICKER_WEAR_FACTOR,F as CS2_STORAGE_UNIT_TOOL_DEF,Q as CS2_TEAMS_BOTH,$ as CS2_TEAMS_CT,ee as CS2_TEAMS_T,A as CS2_WEAR_FACTOR};
|
package/dist/inventory.d.mts
CHANGED
|
@@ -87,7 +87,7 @@ declare class CS2Inventory {
|
|
|
87
87
|
add(item: CS2BaseInventoryItem): this;
|
|
88
88
|
private addInventoryItem;
|
|
89
89
|
addWithNameTag(nameTagUid: number, id: number, nameTag: string): this;
|
|
90
|
-
addWithSticker(stickerUid: number, id: number,
|
|
90
|
+
addWithSticker(stickerUid: number, id: number, schema?: number): this;
|
|
91
91
|
edit(itemUid: number, properties: Partial<CS2BaseInventoryItem>): this;
|
|
92
92
|
equip(itemUid: number, team?: CS2Team): this;
|
|
93
93
|
unequip(uid: number, team?: CS2Team): this;
|
|
@@ -102,8 +102,11 @@ declare class CS2Inventory {
|
|
|
102
102
|
getStorageUnitItems(storageUid: number): CS2InventoryItem[];
|
|
103
103
|
depositToStorageUnit(storageUid: number, depositUids: number[]): this;
|
|
104
104
|
retrieveFromStorageUnit(storageUid: number, retrieveUids: number[]): this;
|
|
105
|
-
applyItemSticker(targetUid: number, stickerUid: number,
|
|
106
|
-
|
|
105
|
+
applyItemSticker(targetUid: number, stickerUid: number, schema?: number): this;
|
|
106
|
+
removeItemSticker(targetUid: number, index: number): this;
|
|
107
|
+
moveItemSticker(targetUid: number, fromIndex: number, toIndex: number): this;
|
|
108
|
+
editItemSticker(targetUid: number, index: number, patch: Partial<RecordValue<CS2BaseInventoryItem["stickers"]>>): this;
|
|
109
|
+
scrapeItemSticker(targetUid: number, index: number, wear?: number): this;
|
|
107
110
|
applyItemPatch(targetUid: number, patchUid: number, slot: number): this;
|
|
108
111
|
removeItemPatch(targetUid: number, slot: number): this;
|
|
109
112
|
incrementItemStatTrak(targetUid: number): this;
|
|
@@ -141,7 +144,10 @@ declare class CS2InventoryItem extends CS2EconomyItem implements Interface<Omit<
|
|
|
141
144
|
language
|
|
142
145
|
}: CS2EconomyItem);
|
|
143
146
|
edit(...sources: Partial<CS2BaseInventoryItem>[]): void;
|
|
144
|
-
|
|
147
|
+
static stickersToArray(stickers: CS2BaseInventoryItem["stickers"]): RecordValue<CS2BaseInventoryItem["stickers"]>[];
|
|
148
|
+
static stickersFromArray(stickers: RecordValue<CS2BaseInventoryItem["stickers"]>[]): CS2BaseInventoryItem["stickers"];
|
|
149
|
+
static getNextStickerSchema(stickers: RecordValue<CS2BaseInventoryItem["stickers"]>[], maxStickers: number): number;
|
|
150
|
+
allStickers(): [number, MapValue<CS2InventoryItem["stickers"]>][];
|
|
145
151
|
someStickers(): [number, MapValue<CS2InventoryItem["stickers"]>][];
|
|
146
152
|
getStickersCount(): number;
|
|
147
153
|
allKeychains(): [number, MapValue<CS2InventoryItem["keychains"]> | undefined][];
|
package/dist/inventory.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,ensure as n,float as r}from"./utils.mjs";import{CS2Team as i}from"./teams.mjs";import{CS2_STICKER_WEAR_FACTOR as a}from"./economy-constants.mjs";import{CS2Economy as o,CS2EconomyItem as s}from"./economy.mjs";import{resolveInventoryData as c}from"./inventory-upgrader.mjs";const l=1,u=1707696138408,d=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function f(){return Math.ceil((Date.now()-u)/1e3)}function p(e){let t=0;for(;;){if(!e.has(t))return t;t++}}var m=class e{economy;items;options;static parse(e,t){return c(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??o,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let[e,{id:i,wear:o,rotation:s,x:c,y:l,schema:u}]of r){let r=parseInt(e,10);t(r>=0&&r<5),this.economy.getById(i).expectSticker(),o!==void 0&&(t(Number.isFinite(o)),t(String(o).length<=String(a).length),t(o>=0&&o<=1)),s!==void 0&&(t(Number.isInteger(s)),t(s>=-180&&s<=180)),c!==void 0&&t(Number.isFinite(c)),l!==void 0&&t(Number.isFinite(l)),u!==void 0&&(t(Number.isInteger(u)),t(u>=0&&u<(n?.getMaximumStickers()??5)))}}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:n,seed:i,x:a,y:o,z:s}]of r){let r=parseInt(e,10);t(r>=0&&r<=0),this.economy.getById(n).expectKeychain(),i!==void 0&&(t(Number.isFinite(i)),t(Number.isInteger(i)),t(i>=1&&i<=1e5)),a!==void 0&&t(Number.isFinite(a)),o!==void 0&&t(Number.isFinite(o)),s!==void 0&&t(Number.isFinite(s))}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else for(let[t,n]of Object.entries(e.stickers)){if(!this.economy.items.has(n.id)){delete e.stickers[t];continue}n.rotation!==void 0&&(Number.isInteger(n.rotation)&&n.rotation>180&&(n.rotation-=360),(!Number.isInteger(n.rotation)||n.rotation<-180||n.rotation>180)&&(n.rotation=void 0))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[t,n]of Object.entries(e.keychains))this.economy.items.has(n.id)||delete e.keychains[t];if(e.wear!==void 0)if(!t.hasWear())e.wear=void 0;else{let n=t.getMinimumWear(),r=t.getMaximumWear();e.wear<n?e.wear=n:e.wear>r&&(e.wear=r),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)}}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new h(this,n,t,this.economy.getById(t.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}stringify(){return JSON.stringify(this.getData())}isFull(){return this.items.size>=this.options.maxItems}add(e){t(!this.isFull());let n=p(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new h(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:f()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=p(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=f(),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();return this.items.delete(e),this.add({id:t,stickers:{[n]:{id:r.id}}}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),r.edit(n,{updatedAt:f()}),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(d.includes(r.type)),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?!0:void 0,a.equippedCT=n===i.CT?!0:a.equippedCT,a.equippedT=n===i.T?!0:a.equippedT):a.type===r.type&&(!r.isWeapon()||a.model===r.model)&&(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:f()}),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=f(),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=f(),this}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}getStorageUnitSize(e){return this.get(e).storage?.size??0}isStorageUnitFilled(e){return this.getStorageUnitSize(e)>0}canDepositToStorageUnit(e,t=1){return this.get(e).nameTag!==void 0&&this.getStorageUnitSize(e)+t<=this.options.storageUnitMaxItems}canRetrieveFromStorageUnit(e,t=1){return this.getStorageUnitSize(e)-t>=0&&this.size()+t<=this.options.maxItems}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}depositToStorageUnit(e,n){let r=this.get(e);r.expectStorageUnit(),t(n.length>0),t(this.canDepositToStorageUnit(e,n.length));for(let e of n)t(!this.get(e).isStorageUnit());let i=r.storage??new Map;for(let e of n){let t=p(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=f(),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=f(),this}applyItemSticker(e,n,r){t(r>=0&&r<=4);let i=this.get(e),a=this.get(n);return t(i.hasStickers()),a.expectSticker(),i.stickers??=new Map,t(i.stickers.get(r)===void 0),i.stickers.set(r,{id:a.id}),i.updatedAt=f(),this.items.delete(n),this}scrapeItemSticker(e,i){let o=this.get(e);t(o.stickers!==void 0);let s=n(o.stickers.get(i)),c=r((s.wear??0)+a);return c>1?(o.stickers.delete(i),o.stickers.size===0&&(o.stickers=void 0),this):(s.wear=c,o.updatedAt=f(),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=f(),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=f(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=f()),this}swapItemsStatTrak(e,n,r){t(n!==r),this.get(e).expectStatTrakSwapTool();let i=this.get(n),a=this.get(r);t(i.statTrak!==void 0&&a.statTrak!==void 0),t(i.type===a.type),t(i.isMusicKit()||i.def===a.def);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=f(),a.statTrak=o,a.updatedAt=f(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return n(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},h=class e extends s{inventory;uid;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;assign({keychains:n,patches:r,stickers:i,storage:a}){r!==void 0&&(this.patches=new Map(Object.entries(r).filter(([,e])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.stickers=new Map(Object.entries(i).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}allStickers(){let e=[];for(let t=0;t<5;t++){let n=this.stickers?.get(t);e.push([t,n])}return e}someStickers(){return this.allStickers().filter(e=>e[1]!==void 0)}getStickersCount(){return this.stickers?.size??0}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}getKeychainsCount(){return this.keychains?.size??0}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}getPatchesCount(){return this.patches?.size??0}getWear(){return this.wear??this.wearMin??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getImage(e){return super.getImage(e??this.getWear())}asBase(){return{containerId:this.containerId,equipped:this.equipped,equippedCT:this.equippedCT,equippedT:this.equippedT,id:this.id,keychains:this.keychains===void 0?void 0:Object.fromEntries(this.keychains),nameTag:this.nameTag,patches:this.patches===void 0?void 0:Object.fromEntries(this.patches),seed:this.seed,statTrak:this.statTrak,stickers:this.stickers===void 0?void 0:Object.fromEntries(this.stickers),storage:this.storage===void 0?void 0:Object.fromEntries(Array.from(this.storage).map(([e,t])=>[e,t.asBase()])),updatedAt:this.updatedAt,wear:this.wear}}};export{m as CS2Inventory,h as CS2InventoryItem,d as CS2_INVENTORY_EQUIPPABLE_ITEMS,u as CS2_INVENTORY_TIMESTAMP,l as CS2_INVENTORY_VERSION,p as getNextUid,f as getTimestamp};
|
|
1
|
+
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,ensure as n,float as r}from"./utils.mjs";import{CS2Team as i}from"./teams.mjs";import{CS2_STICKER_WEAR_FACTOR as a}from"./economy-constants.mjs";import{CS2Economy as o,CS2EconomyItem as s}from"./economy.mjs";import{resolveInventoryData as c}from"./inventory-upgrader.mjs";const l=1,u=1707696138408,d=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function f(){return Math.ceil((Date.now()-u)/1e3)}function p(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function m(e){return _.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function h(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}var g=class e{economy;items;options;static parse(e,t){return c(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??o,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.values(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let{id:e,wear:i,rotation:o,x:s,y:c,schema:l}of r)this.economy.getById(e).expectSticker(),i!==void 0&&(t(Number.isFinite(i)),t(String(i).length<=String(a).length),t(i>=0&&i<=1)),o!==void 0&&(t(Number.isInteger(o)),t(o>=-180&&o<=180)),s!==void 0&&t(Number.isFinite(s)),c!==void 0&&t(Number.isFinite(c)),l!==void 0&&(t(Number.isInteger(l)),t(l>=0&&l<(n?.getMaximumStickers()??5)))}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:n,seed:i,x:a,y:o,z:s}]of r){let r=parseInt(e,10);t(r>=0&&r<=0),this.economy.getById(n).expectKeychain(),i!==void 0&&(t(Number.isFinite(i)),t(Number.isInteger(i)),t(i>=1&&i<=1e5)),a!==void 0&&t(Number.isFinite(a)),o!==void 0&&t(Number.isFinite(o)),s!==void 0&&t(Number.isFinite(s))}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else{for(let[t,n]of Object.entries(e.stickers)){if(!this.economy.items.has(n.id)){delete e.stickers[t];continue}n.rotation!==void 0&&(Number.isInteger(n.rotation)&&n.rotation>180&&(n.rotation-=360),(!Number.isInteger(n.rotation)||n.rotation<-180||n.rotation>180)&&(n.rotation=void 0))}e.stickers=_.stickersFromArray(_.stickersToArray(e.stickers))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[t,n]of Object.entries(e.keychains))this.economy.items.has(n.id)||delete e.keychains[t];if(e.wear!==void 0)if(!t.hasWear())e.wear=void 0;else{let n=t.getMinimumWear(),r=t.getMaximumWear();e.wear<n?e.wear=n:e.wear>r&&(e.wear=r),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)}}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new _(this,n,t,this.economy.getById(t.id))]}))}toBaseInventoryItems(e){return Object.fromEntries(Array.from(e).map(([e,t])=>[e,t.asBase()]))}stringify(){return JSON.stringify(this.getData())}isFull(){return this.items.size>=this.options.maxItems}add(e){t(!this.isFull());let n=p(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new _(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:f()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=p(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=f(),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();return this.items.delete(e),this.add({id:t,stickers:{0:{id:r.id,schema:n}}}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),r.edit(n,{updatedAt:f()}),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(d.includes(r.type)),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?!0:void 0,a.equippedCT=n===i.CT?!0:a.equippedCT,a.equippedT=n===i.T?!0:a.equippedT):a.type===r.type&&(!r.isWeapon()||a.model===r.model)&&(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:f()}),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=f(),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=f(),this}isStorageUnitFull(e){return this.get(e).storage?.size===this.options.storageUnitMaxItems}getStorageUnitSize(e){return this.get(e).storage?.size??0}isStorageUnitFilled(e){return this.getStorageUnitSize(e)>0}canDepositToStorageUnit(e,t=1){return this.get(e).nameTag!==void 0&&this.getStorageUnitSize(e)+t<=this.options.storageUnitMaxItems}canRetrieveFromStorageUnit(e,t=1){return this.getStorageUnitSize(e)-t>=0&&this.size()+t<=this.options.maxItems}getStorageUnitItems(e){return Array.from(this.get(e).storage?.values()??[])}depositToStorageUnit(e,n){let r=this.get(e);r.expectStorageUnit(),t(n.length>0),t(this.canDepositToStorageUnit(e,n.length));for(let e of n)t(!this.get(e).isStorageUnit());let i=r.storage??new Map;for(let e of n){let t=p(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=f(),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=f(),this}applyItemSticker(e,n,r){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=m(i.stickers);t(o.length<5),o.push({id:a.id,schema:r??_.getNextStickerSchema(o,i.getMaximumStickers())});let s=_.stickersFromArray(o);return this.validateStickers(s,i),i.stickers=h(s),i.updatedAt=f(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=m(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=h(_.stickersFromArray(i)),r.updatedAt=f(),this}moveItemSticker(e,r,i){let a=this.get(e),o=m(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=h(_.stickersFromArray(o)),a.updatedAt=f(),this}editItemSticker(e,n,r){let i=this.get(e),a=m(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=_.stickersFromArray(a);return this.validateStickers(o,i),i.stickers=h(o),i.updatedAt=f(),this}scrapeItemSticker(e,i,o){let s=this.get(e),c=m(s.stickers),l=n(c[i]),u=l.wear??0,d;return o===void 0?d=r(u+a):(t(Number.isFinite(o)),t(o>u&&o<=1),d=r(o)),d>=1?c.splice(i,1):c[i]={...l,wear:d},s.stickers=h(_.stickersFromArray(c)),s.updatedAt=f(),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=f(),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=f(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=f()),this}swapItemsStatTrak(e,n,r){t(n!==r),this.get(e).expectStatTrakSwapTool();let i=this.get(n),a=this.get(r);t(i.statTrak!==void 0&&a.statTrak!==void 0),t(i.type===a.type),t(i.isMusicKit()||i.def===a.def);let o=i.statTrak;return i.statTrak=a.statTrak,i.updatedAt=f(),a.statTrak=o,a.updatedAt=f(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return n(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},_=class e extends s{inventory;uid;containerId;equipped;equippedCT;equippedT;keychains;nameTag;patches;seed;statTrak;stickers;storage;updatedAt;wear;assign({keychains:n,patches:r,stickers:i,storage:a}){r!==void 0&&(this.patches=new Map(Object.entries(r).filter(([,e])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),i!==void 0&&(this.stickers=h(e.stickersFromArray(e.stickersToArray(i).filter(({id:e})=>this.economy.items.has(e))))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}static stickersToArray(e){return e===void 0?[]:Object.entries(e).map(([e,t])=>[parseInt(e,10),t]).sort(([e],[t])=>e-t).slice(0,5).map(([e,t])=>({...t,schema:t.schema??e}))}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}]))}static getNextStickerSchema(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}allStickers(){return m(this.stickers).map((e,t)=>[t,e])}someStickers(){return this.allStickers()}getStickersCount(){return this.stickers?.size??0}allKeychains(){let e=[];for(let t=0;t<1;t++){let n=this.keychains?.get(t);e.push([t,n])}return e}someKeychains(){return this.allKeychains().filter(e=>e[1]!==void 0)}getKeychainsCount(){return this.keychains?.size??0}allPatches(){let e=[];for(let t=0;t<5;t++){let n=this.patches?.get(t);e.push([t,n])}return e}somePatches(){return this.allPatches().filter(e=>e[1]!==void 0)}getPatchesCount(){return this.patches?.size??0}getWear(){return this.wear??this.wearMin??0}getStickerWear(e){return this.stickers?.get(e)?.wear??0}getKeychainSeed(e){return this.keychains?.get(e)?.seed??1}getImage(e){return super.getImage(e??this.getWear())}asBase(){return{containerId:this.containerId,equipped:this.equipped,equippedCT:this.equippedCT,equippedT:this.equippedT,id:this.id,keychains:this.keychains===void 0?void 0:Object.fromEntries(this.keychains),nameTag:this.nameTag,patches:this.patches===void 0?void 0:Object.fromEntries(this.patches),seed:this.seed,statTrak:this.statTrak,stickers:this.stickers===void 0?void 0:Object.fromEntries(this.stickers),storage:this.storage===void 0?void 0:Object.fromEntries(Array.from(this.storage).map(([e,t])=>[e,t.asBase()])),updatedAt:this.updatedAt,wear:this.wear}}};export{g as CS2Inventory,_ as CS2InventoryItem,d as CS2_INVENTORY_EQUIPPABLE_ITEMS,u as CS2_INVENTORY_TIMESTAMP,l as CS2_INVENTORY_VERSION,p as getNextUid,f as getTimestamp};
|
package/package.json
CHANGED