@ianlucas/cs2-lib 9.0.0-rc.4 → 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/inventory-rules.mjs +1 -1
- package/dist/inventory.d.mts +1 -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
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;
|
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}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}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};
|