@ianlucas/cs2-lib 8.0.0-rc.7 → 8.0.0-rc.9
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/inventory.d.mts +8 -1
- package/dist/inventory.mjs +1 -1
- package/dist/items.mjs +1 -1
- package/package.json +4 -4
package/dist/inventory.d.mts
CHANGED
|
@@ -108,7 +108,14 @@ declare class CS2Inventory {
|
|
|
108
108
|
add(item: CS2BaseInventoryItem): this;
|
|
109
109
|
private addInventoryItem;
|
|
110
110
|
addWithNameTag(nameTagUid: number, id: number, nameTag: string): this;
|
|
111
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Adds a new item `id` to the inventory with the sticker item `stickerUid` applied to its first
|
|
113
|
+
* slot, consuming the sticker. The optional `attributes` set that sticker's `schema` (its physical
|
|
114
|
+
* {@link CS2EconomyItem.getStickerSchemaCount} anchor), `x`/`y` offset, `rotation`, and `wear`. All
|
|
115
|
+
* are validated against the new item before anything mutates, so an invalid value throws without
|
|
116
|
+
* consuming the sticker.
|
|
117
|
+
*/
|
|
118
|
+
addWithSticker(stickerUid: number, id: number, attributes?: Omit<RecordValue<CS2BaseInventoryItem["stickers"]>, "id">): this;
|
|
112
119
|
edit(itemUid: number, properties: Partial<CS2BaseInventoryItem>): this;
|
|
113
120
|
equip(itemUid: number, team?: CS2Team): this;
|
|
114
121
|
unequip(uid: number, team?: CS2Team): this;
|
package/dist/inventory.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,clamp as n,ensure as r,isFactorPrecise as i,roundToFactor as a,truncateToFactor as o}from"./utils.mjs";import{CS2Team as s}from"./teams.mjs";import{CS2_STICKER_OFFSET_FACTOR as c,CS2_STICKER_SCRAPE_FACTOR as l,CS2_STICKER_WEAR_FACTOR as u}from"./economy-constants.mjs";import{CS2Economy as d,CS2EconomyItem as f}from"./economy.mjs";import{resolveInventoryData as p}from"./inventory-upgrader.mjs";const m=1,h=1707696138408,g=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function _(){return Math.ceil((Date.now()-h)/1e3)}function v(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function y(e){return w.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function b(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}function x(e,t,n){if(!(e===void 0||!Number.isFinite(e)))return e=o(e,c),t!==void 0&&e<t?t:n!==void 0&&e>n?n:e}function S(e,t){let n=new Set(e.map(({schema:e})=>e));for(let e=0;e<t;e++)if(!n.has(e))return e;return 0}var C=class e{economy;items;options;static parse(e,t){return p(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??d,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.values(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let{id:e,wear:a,rotation:o,x:s,y:l,schema:d}of r){if(this.economy.getById(e).expectSticker(),a!==void 0&&(t(i(a,u)),t(a>=0&&a<=1)),o!==void 0&&(t(Number.isInteger(o)),t(o>=-180&&o<=180)),s!==void 0&&(t(i(s,c)),n!==void 0)){let e=n.getMinimumStickerOffsetX(),r=n.getMaximumStickerOffsetX();t(e===void 0||s>=e),t(r===void 0||s<=r)}if(l!==void 0&&(t(i(l,c)),n!==void 0)){let e=n.getMinimumStickerOffsetY(),r=n.getMaximumStickerOffsetY();t(e===void 0||l>=e),t(r===void 0||l<=r)}d!==void 0&&(t(Number.isInteger(d)),t(d>=0&&d<(n?.getStickerSchemaCount()??5)))}}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:n,seed:i,x:a,y:o,z:s}]of r){let r=parseInt(e,10);t(r>=0&&r<=0),this.economy.getById(n).expectKeychain(),i!==void 0&&(t(Number.isFinite(i)),t(Number.isInteger(i)),t(i>=1&&i<=1e5)),a!==void 0&&t(Number.isFinite(a)),o!==void 0&&t(Number.isFinite(o)),s!==void 0&&t(Number.isFinite(s))}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else{for(let[n,r]of Object.entries(e.stickers)){if(!this.economy.items.has(r.id)){delete e.stickers[n];continue}r.rotation!==void 0&&(Number.isInteger(r.rotation)&&r.rotation>180&&(r.rotation-=360),(!Number.isInteger(r.rotation)||r.rotation<-180||r.rotation>180)&&(r.rotation=void 0)),r.x=x(r.x,t.getMinimumStickerOffsetX(),t.getMaximumStickerOffsetX()),r.y=x(r.y,t.getMinimumStickerOffsetY(),t.getMaximumStickerOffsetY())}e.stickers=w.stickersFromArray(w.stickersToArray(e.stickers,t.getStickerSchemaCount()))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[t,n]of Object.entries(e.keychains))this.economy.items.has(n.id)||delete e.keychains[t];e.wear!==void 0&&(t.hasWear()?(e.wear=n(e.wear,t.getMinimumWear(),t.getMaximumWear()),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)):e.wear=void 0)}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new w(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=v(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new w(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:_()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=v(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=_(),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:_()}),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==s.CT||r.equippedCT===void 0),t(n!==s.T||r.equippedT===void 0),t(g.includes(r.type)),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,i]of this.items)e===t?(i.equipped=n===void 0?!0:void 0,i.equippedCT=n===s.CT?!0:i.equippedCT,i.equippedT=n===s.T?!0:i.equippedT):i.type===r.type&&(!r.isWeapon()||i.model===r.model)&&(i.equipped=n===void 0?void 0:i.equipped,i.equippedCT=n===s.CT?void 0:i.equippedCT,i.equippedT=n===s.T?void 0:i.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===s.CT?void 0:n.equippedCT,n.equippedT=t===s.T?void 0:n.equippedT,this}unlockContainer(e,t,n){let r=this.get(t);this.economy.expectUnlockedItem(r,e);let i=n===void 0?void 0:this.get(n);return this.economy.validateContainerAndKey(r,i),this.items.delete(t),n!==void 0&&this.items.delete(n),this.add({...e.attributes,id:e.id,updatedAt:_()}),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=_(),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=_(),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=v(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=_(),this}retrieveFromStorageUnit(e,n){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(n.length>0),t(this.canRetrieveFromStorageUnit(e,n.length));for(let e of n)t(a.has(e));for(let e of n){let t=r(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=_(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=y(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??S(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=w.stickersFromArray(o);return this.validateStickers(f,i),i.stickers=b(f),i.updatedAt=_(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=y(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=b(w.stickersFromArray(i)),r.updatedAt=_(),this}moveItemSticker(e,n,i){let a=this.get(e),o=y(a.stickers),s=r(o[n]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(n,1),o.splice(i,0,s),a.stickers=b(w.stickersFromArray(o)),a.updatedAt=_(),this}editItemSticker(e,n,r){let i=this.get(e),a=y(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=w.stickersFromArray(a);return this.validateStickers(o,i),i.stickers=b(o),i.updatedAt=_(),this}scrapeItemSticker(e,n,i){let o=this.get(e),s=y(o.stickers),c=r(s[n]),d=c.wear??0,f;return i===void 0?f=a(d+l,u):(t(Number.isFinite(i)),t(i>d&&i<=1),f=a(i,u)),(i===void 0?f>1:f>=1)?s.splice(n,1):s[n]={...c,wear:f},o.stickers=b(w.stickersFromArray(s)),o.updatedAt=_(),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=_(),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=_(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=_()),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=_(),a.statTrak=o,a.updatedAt=_(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return r(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},w=class e extends f{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=b(e.stickersFromArray(e.stickersToArray(i,this.getStickerSchemaCount()).filter(({id:e})=>this.economy.items.has(e))))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}static stickersToArray(e,t){if(e===void 0)return[];let n=Object.entries(e).map(([e,t])=>[parseInt(e,10),t]).sort(([e],[t])=>e-t).slice(0,5),r=[];for(let[e,i]of n){let n=i.schema??e;t!==void 0&&(!Number.isInteger(n)||n<0||n>=t)&&(n=S(r,t)),r.push({...i,schema:n})}return r}static stickersFromArray(e){if(e.length!==0)return Object.fromEntries(e.slice(0,5).map((e,t)=>[t,{id:e.id,schema:e.schema??t,wear:e.wear||void 0,rotation:e.rotation||void 0,x:e.x||void 0,y:e.y||void 0}]))}allStickers(){return y(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{C as CS2Inventory,w as CS2InventoryItem,g as CS2_INVENTORY_EQUIPPABLE_ITEMS,h as CS2_INVENTORY_TIMESTAMP,m as CS2_INVENTORY_VERSION,S as getNextStickerSchema,v as getNextUid,_ as getTimestamp,x as healStickerOffset,y as stickerMapToArray,b as toStickerMap};
|
|
1
|
+
import{CS2ItemType as e}from"./economy-types.mjs";import{assert as t,clamp as n,ensure as r,isFactorPrecise as i,roundToFactor as a,truncateToFactor as o}from"./utils.mjs";import{CS2Team as s}from"./teams.mjs";import{CS2_STICKER_OFFSET_FACTOR as c,CS2_STICKER_SCRAPE_FACTOR as l,CS2_STICKER_WEAR_FACTOR as u}from"./economy-constants.mjs";import{CS2Economy as d,CS2EconomyItem as f}from"./economy.mjs";import{resolveInventoryData as p}from"./inventory-upgrader.mjs";const m=1,h=1707696138408,g=[e.Agent,e.Collectible,e.Gloves,e.Graffiti,e.Melee,e.MusicKit,e.Weapon];function _(){return Math.ceil((Date.now()-h)/1e3)}function v(e){let t=0;for(;;){if(!e.has(t))return t;t++}}function y(e){return w.stickersToArray(e===void 0?void 0:Object.fromEntries(e))}function b(e){return e===void 0?void 0:new Map(Object.entries(e).map(([e,t])=>[parseInt(e,10),t]))}function x(e,t,n){if(!(e===void 0||!Number.isFinite(e)))return e=o(e,c),t!==void 0&&e<t?t:n!==void 0&&e>n?n:e}function S(e,t){let n=new Set(e.map(({schema:e})=>e));for(let e=0;e<t;e++)if(!n.has(e))return e;return 0}var C=class e{economy;items;options;static parse(e,t){return p(e??void 0,t)}constructor({economy:e,data:t,maxItems:n,storageUnitMaxItems:r}={}){this.economy=e??d,this.items=t===void 0?new Map:this.toInventoryItems(t.items),this.options={maxItems:n??256,storageUnitMaxItems:r??32}}validateAddable(e){e.isGloves()&&t(e.free||!e.base)}validateStickers(e,n){if(e===void 0)return;let r=Object.values(e);t(r.length<=5),t(n===void 0||n.hasStickers());for(let{id:e,wear:a,rotation:o,x:s,y:l,schema:d}of r){if(this.economy.getById(e).expectSticker(),a!==void 0&&(t(i(a,u)),t(a>=0&&a<=1)),o!==void 0&&(t(Number.isInteger(o)),t(o>=-180&&o<=180)),s!==void 0&&(t(i(s,c)),n!==void 0)){let e=n.getMinimumStickerOffsetX(),r=n.getMaximumStickerOffsetX();t(e===void 0||s>=e),t(r===void 0||s<=r)}if(l!==void 0&&(t(i(l,c)),n!==void 0)){let e=n.getMinimumStickerOffsetY(),r=n.getMaximumStickerOffsetY();t(e===void 0||l>=e),t(r===void 0||l<=r)}d!==void 0&&(t(Number.isInteger(d)),t(d>=0&&d<(n?.getStickerSchemaCount()??5)))}}validateKeychains(e,n){if(e===void 0)return;let r=Object.entries(e);t(r.length<=1),t(n===void 0||n.hasKeychains());for(let[e,{id:n,seed:i,x:a,y:o,z:s}]of r){let r=parseInt(e,10);t(r>=0&&r<=0),this.economy.getById(n).expectKeychain(),i!==void 0&&(t(Number.isFinite(i)),t(Number.isInteger(i)),t(i>=1&&i<=1e5)),a!==void 0&&t(Number.isFinite(a)),o!==void 0&&t(Number.isFinite(o)),s!==void 0&&t(Number.isFinite(s))}}validatePatches(e,n){if(e!==void 0){t(n===void 0||n.isAgent());for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);t(e>=0&&e<=4),t(r===void 0||this.economy.getById(r).isPatch())}}}healBaseInventoryItem(e){if(!this.economy.items.has(e.id))return;let t=this.economy.getById(e.id);if(e.patches!==void 0)if(!t.hasPatches())e.patches=void 0;else for(let[t,n]of Object.entries(e.patches))this.economy.items.has(n)||delete e.patches[t];if(e.stickers!==void 0)if(!t.hasStickers())e.stickers=void 0;else{for(let[n,r]of Object.entries(e.stickers)){if(!this.economy.items.has(r.id)){delete e.stickers[n];continue}r.rotation!==void 0&&(Number.isInteger(r.rotation)&&r.rotation>180&&(r.rotation-=360),(!Number.isInteger(r.rotation)||r.rotation<-180||r.rotation>180)&&(r.rotation=void 0)),r.x=x(r.x,t.getMinimumStickerOffsetX(),t.getMaximumStickerOffsetX()),r.y=x(r.y,t.getMinimumStickerOffsetY(),t.getMaximumStickerOffsetY())}e.stickers=w.stickersFromArray(w.stickersToArray(e.stickers,t.getStickerSchemaCount()))}if(e.keychains!==void 0)if(!t.hasKeychains())e.keychains=void 0;else for(let[t,n]of Object.entries(e.keychains))this.economy.items.has(n.id)||delete e.keychains[t];e.wear!==void 0&&(t.hasWear()?(e.wear=n(e.wear,t.getMinimumWear(),t.getMaximumWear()),this.economy.safeValidateWear(e.wear,t)||(e.wear=void 0)):e.wear=void 0)}removeInvalidItemReferences(e){this.healBaseInventoryItem(e)}validateBaseInventoryItem({id:e,keychains:t,nameTag:n,patches:r,seed:i,statTrak:a,stickers:o,wear:s}){let c=this.economy.getById(e);this.economy.validateWear(s,c),this.economy.validateSeed(i,c),this.economy.validateNameTag(n,c),this.economy.validateStatTrak(a,c),this.validateAddable(c),this.validatePatches(r,c),this.validateStickers(o,c),this.validateKeychains(t,c)}toInventoryItems(e){return new Map(Object.entries(e).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>{this.healBaseInventoryItem(t);let n=parseInt(e,10);return[n,new w(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=v(this.items),r=this.economy.getById(e.id);return t(!r.isStub()),this.items.set(n,new w(this,n,Object.assign(e,{equipped:void 0,equippedCT:void 0,equippedT:void 0,updatedAt:_()}),r)),this}addInventoryItem(e){t(!this.isFull());let n=v(this.items);return e.equipped=void 0,e.equippedCT=void 0,e.equippedT=void 0,e.uid=n,e.updatedAt=_(),this.items.set(n,e),this}addWithNameTag(e,t,n){return this.get(e).expectNameTag(),this.economy.requireNameTag(n),this.items.delete(e),this.add({id:t,nameTag:n}),this}addWithSticker(e,t,n={}){let r=this.get(e).expectSticker(),{schema:i,x:a,y:o,rotation:s,wear:c}=n,l={0:{id:r.id,schema:i,x:a,y:o,rotation:s,wear:c}};return this.validateStickers(l,this.economy.getById(t)),this.items.delete(e),this.add({id:t,stickers:l}),this}edit(e,n){let r=this.get(e);return t(n.id===void 0||n.id===r.id),r.edit(n,{updatedAt:_()}),this}equip(e,n){let r=this.get(e);t(r.equipped===void 0),t(n!==s.CT||r.equippedCT===void 0),t(n!==s.T||r.equippedT===void 0),t(g.includes(r.type)),t(n===void 0||r.teams?.includes(n)),t(n!==void 0||r.teams===void 0);for(let[t,i]of this.items)e===t?(i.equipped=n===void 0?!0:void 0,i.equippedCT=n===s.CT?!0:i.equippedCT,i.equippedT=n===s.T?!0:i.equippedT):i.type===r.type&&(!r.isWeapon()||i.model===r.model)&&(i.equipped=n===void 0?void 0:i.equipped,i.equippedCT=n===s.CT?void 0:i.equippedCT,i.equippedT=n===s.T?void 0:i.equippedT);return this}unequip(e,t){let n=this.get(e);return n.equipped=t===void 0?void 0:n.equipped,n.equippedCT=t===s.CT?void 0:n.equippedCT,n.equippedT=t===s.T?void 0:n.equippedT,this}unlockContainer(e,t,n){let r=this.get(t);this.economy.expectUnlockedItem(r,e);let i=n===void 0?void 0:this.get(n);return this.economy.validateContainerAndKey(r,i),this.items.delete(t),n!==void 0&&this.items.delete(n),this.add({...e.attributes,id:e.id,updatedAt:_()}),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=_(),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=_(),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=v(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=_(),this}retrieveFromStorageUnit(e,n){let i=this.get(e);i.expectStorageUnit();let a=i.storage;t(a!==void 0),t(n.length>0),t(this.canRetrieveFromStorageUnit(e,n.length));for(let e of n)t(a.has(e));for(let e of n){let t=r(a.get(e));this.addInventoryItem(t),a.delete(e)}return i.storage=a.size>0?a:void 0,i.updatedAt=_(),this}applyItemSticker(e,n,r={}){let i=this.get(e),a=this.get(n).expectSticker();t(i.hasStickers());let o=y(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??S(o,i.getStickerSchemaCount()),x:c,y:l,rotation:u,wear:d});let f=w.stickersFromArray(o);return this.validateStickers(f,i),i.stickers=b(f),i.updatedAt=_(),this.items.delete(n),this}removeItemSticker(e,n){let r=this.get(e),i=y(r.stickers);return t(i[n]!==void 0),i.splice(n,1),r.stickers=b(w.stickersFromArray(i)),r.updatedAt=_(),this}moveItemSticker(e,n,i){let a=this.get(e),o=y(a.stickers),s=r(o[n]);return t(Number.isInteger(i)&&i>=0&&i<o.length),o.splice(n,1),o.splice(i,0,s),a.stickers=b(w.stickersFromArray(o)),a.updatedAt=_(),this}editItemSticker(e,n,r){let i=this.get(e),a=y(i.stickers);t(a[n]!==void 0),a[n]={...a[n],...r};let o=w.stickersFromArray(a);return this.validateStickers(o,i),i.stickers=b(o),i.updatedAt=_(),this}scrapeItemSticker(e,n,i){let o=this.get(e),s=y(o.stickers),c=r(s[n]),d=c.wear??0,f;return i===void 0?f=a(d+l,u):(t(Number.isFinite(i)),t(i>d&&i<=1),f=a(i,u)),(i===void 0?f>1:f>=1)?s.splice(n,1):s[n]={...c,wear:f},o.stickers=b(w.stickersFromArray(s)),o.updatedAt=_(),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=_(),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=_(),this}incrementItemStatTrak(e){let n=this.get(e);return t(n.statTrak!==void 0),n.statTrak<999999&&(n.statTrak++,n.updatedAt=_()),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=_(),a.statTrak=o,a.updatedAt=_(),this.items.delete(e),this}remove(e){return this.items.delete(e),this}removeAll(){return this.items.clear(),this}get(e){return r(this.items.get(e))}getAll(){return Array.from(this.items.values())}getAllAsBase(){return Object.values(this.toBaseInventoryItems(this.items))}setAll(e){return this.items=e,this}getData(){return{items:this.toBaseInventoryItems(this.items),version:1}}size(){return this.items.size}move(t={}){return new e({...this.options,economy:this.economy,...t}).setAll(this.items)}},w=class e extends f{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=b(e.stickersFromArray(e.stickersToArray(i,this.getStickerSchemaCount()).filter(({id:e})=>this.economy.items.has(e))))),n!==void 0&&(this.keychains=new Map(Object.entries(n).filter(([,{id:e}])=>this.economy.items.has(e)).map(([e,t])=>[parseInt(e,10),t]))),a!==void 0&&(t(this.isStorageUnit()),this.storage=new Map(Object.entries(a).filter(([,{id:e}])=>this.economy.items.has(e)).map(([n,r])=>{this.inventory.healBaseInventoryItem(r);let i=this.economy.getById(r.id);t(r.storage===void 0);let a=parseInt(n,10);return[a,new e(this.inventory,a,r,i)]})))}constructor(e,t,n,{economy:r,item:i,language:a}){super(r,i,a),this.inventory=e,this.uid=t,e.validateBaseInventoryItem(n),Object.assign(this,n),this.assign(n)}edit(...e){let t=this.asBase();for(let n of e)Object.assign(t,n);this.inventory.validateBaseInventoryItem(t);for(let t of e)Object.assign(this,t),this.assign(t)}static stickersToArray(e,t){if(e===void 0)return[];let n=Object.entries(e).map(([e,t])=>[parseInt(e,10),t]).sort(([e],[t])=>e-t).slice(0,5),r=[];for(let[e,i]of n){let n=i.schema??e;t!==void 0&&(!Number.isInteger(n)||n<0||n>=t)&&(n=S(r,t)),r.push({...i,schema:n})}return r}static stickersFromArray(e){if(e.length!==0)return Object.fromEntries(e.slice(0,5).map((e,t)=>[t,{id:e.id,schema:e.schema??t,wear:e.wear||void 0,rotation:e.rotation||void 0,x:e.x||void 0,y:e.y||void 0}]))}allStickers(){return y(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{C as CS2Inventory,w as CS2InventoryItem,g as CS2_INVENTORY_EQUIPPABLE_ITEMS,h as CS2_INVENTORY_TIMESTAMP,m as CS2_INVENTORY_VERSION,S as getNextStickerSchema,v as getNextUid,_ as getTimestamp,x as healStickerOffset,y as stickerMapToArray,b as toStickerMap};
|