Added Additional Clothing & Updated Menu Overhaul

This commit is contained in:
Rage 2025-01-13 08:29:02 -05:00
parent 4347242d3a
commit 5381ede0e2
144 changed files with 20572 additions and 2 deletions

View File

@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.1.13.0
newestVersion=
category="1,"
nexusFileStatus=1
installationFile=Additional Clothing BEAR 310.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-01-13T13:28:06Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1

View File

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

View File

@ -0,0 +1,423 @@
{
"manifest": [
{
"key": "Tops/Gorka4MC_Top.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Gorka4MC_Hands.bundle",
"dependencyKeys": [
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_textures.bundle",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle",
"shaders"
]
},
{
"key": "Bottoms/EMR_voin.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/EMR_SPN.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/EMR_SPN_Hands.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/EMRAutumnSumrak.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Sumrak_EMRAutumn_Hands.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/EMRSumrak.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Sumrak_EMR_Hands.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/BEARTacticalEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/TIGR_SURPAT.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/TIGR_EMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/Top_SS_SPN.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_SS_SPN.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/Top_Adaptive_SS.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_AdaptiveSS.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/SRVV_SS.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_SURPAT_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/Top_SURPAT_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_MC_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/Top_MC_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/MC_voin.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/TIGR_MC.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_EMR_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/EMR_lynx.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/Top_MC_SPN.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_MC_SPN.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/SRVV_MC.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/ReconMC.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/Top_SURPAT_Polevoi.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_SURPAT_Polevoi.bundle",
"dependencyKeys": [
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle",
"shaders"
]
},
{
"key": "Tops/Top_Gorka5EMRAutumn.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_Gorka5EMRAutumn.bundle",
"dependencyKeys": [
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle",
"shaders"
]
},
{
"key": "Bottoms/ReconSURPAT.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/BEARTacticalSS.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/URON_SURPAT.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/URON_SS.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/Top_SummerFieldEMR.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_SummerFieldEMR.bundle",
"dependencyKeys": [
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle",
"shaders"
]
},
{
"key": "Tops/Top_TigrEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps"
]
},
{
"key": "Hands/Hands_TigrEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/Top_GhostEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_GhostEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/bear/bear_hands_watch_texture.bundles",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/Top_InfilEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_InfilEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/Bottom_InfilEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/Bottom_GhostEMR.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/Bottom_SummerFieldEMR.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
}
]
}

View File

@ -0,0 +1,546 @@
[
{
"type": "top",
"suiteId": "6771d61a8d0bc58bd4ccb811",
"outfitId": "6771d61a8d0bc58bd4ccb812",
"topId": "6771d61a8d0bc58bd4ccb813",
"handsId": "6771d61a8d0bc58bd4ccb814",
"locales": {
"en": "Gorka 4 (Multicam)"
},
"topBundlePath": "Tops/Gorka4MC_Top.bundle",
"handsBundlePath": "Hands/Gorka4MC_Hands.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4ad6f53dd23f43f224ea7",
"outfitId": "66e4ad6f53dd23f43f224ea8",
"topId": "66e4ad6f53dd23f43f224ea9",
"handsId": "66e4ad6f53dd23f43f224ea6",
"locales": {
"en": "SSO Lynx Fleece (EMR)"
},
"topBundlePath": "Tops/EMR_lynx.bundle",
"handsBundlePath": "Hands/Hands_EMR_lynx.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4d25bbf73ebfd35c3e771",
"outfitId": "66e4d25bbf73ebfd35c3e772",
"topId": "66e4d25bbf73ebfd35c3e773",
"handsId": "66e4d25bbf73ebfd35c3e774",
"locales": {
"en": "SSO Lynx Fleece (Multicam)"
},
"topBundlePath": "Tops/Top_MC_lynx.bundle",
"handsBundlePath": "Hands/Hands_MC_lynx.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4d342edfad85a79666024",
"outfitId": "66e4d342edfad85a79666025",
"topId": "66e4d342edfad85a79666026",
"handsId": "66e4d342edfad85a79666027",
"locales": {
"en": "SSO Lynx Fleece (SURPAT)"
},
"topBundlePath": "Tops/Top_SURPAT_lynx.bundle",
"handsBundlePath": "Hands/Hands_SURPAT_lynx.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4af625799999e89eb2df0",
"outfitId": "66e4af625799999e89eb2df1",
"topId": "66e4af625799999e89eb2df2",
"handsId": "66e4af625799999e89eb2df3",
"locales": {
"en": "SPN (EMR)"
},
"topBundlePath": "Tops/EMR_SPN.bundle",
"handsBundlePath": "Hands/EMR_SPN_Hands.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4d3ed52e082a3c17d1fc7",
"outfitId": "66e4d3ed52e082a3c17d1fc6",
"topId": "66e4d3ed52e082a3c17d1fc5",
"handsId": "66e4d3ed52e082a3c17d1fc4",
"locales": {
"en": "SPN (Multicam)"
},
"topBundlePath": "Tops/Top_MC_SPN.bundle",
"handsBundlePath": "Hands/Hands_MC_SPN.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4d4ddbf48a499e2920ff2",
"outfitId": "66e4d4ddbf48a499e2920ff3",
"topId": "66e4d4ddbf48a499e2920ff4",
"handsId": "66e4d4ddbf48a499e2920ff5",
"locales": {
"en": "SPN (SURPAT Savanna)"
},
"topBundlePath": "Tops/Top_SS_SPN.bundle",
"handsBundlePath": "Hands/Hands_SS_SPN.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4b26563c45b2ace969ed7",
"outfitId": "66e4b26563c45b2ace969ed6",
"topId": "66e4b26563c45b2ace969ed5",
"handsId": "66e4b26563c45b2ace969ed4",
"locales": {
"en": "Sumrak (EMR Autumn)"
},
"topBundlePath": "Tops/EMRAutumnSumrak.bundle",
"handsBundlePath": "Hands/Sumrak_EMRAutumn_Hands.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4b44a15177064d80f9889",
"outfitId": "66e4b44a15177064d80f9888",
"topId": "66e4b44a15177064d80f9887",
"handsId": "66e4b44a15177064d80f9886",
"locales": {
"en": "Sumrak (EMR)"
},
"topBundlePath": "Tops/EMRSumrak.bundle",
"handsBundlePath": "Hands/Sumrak_EMR_Hands.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4c27dae44eb8001be2420",
"outfitId": "66e4c27dae44eb8001be2421",
"topId": "66e4c27dae44eb8001be2422",
"handsId": "66e4c27dae44eb8001be2423",
"locales": {
"en": "BEAR BDU Top (SURPAT Savanna)"
},
"topBundlePath": "Tops/Top_Adaptive_SS.bundle",
"handsBundlePath": "Hands/Hands_AdaptiveSS.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4c3c614e2d053ce6f4749",
"outfitId": "66e4c3c614e2d053ce6f4748",
"topId": "66e4c3c614e2d053ce6f4747",
"handsId": "66e4c3c614e2d053ce6f4746",
"locales": {
"en": "Ghost Marksman (EMR)"
},
"topBundlePath": "Tops/Top_GhostEMR.bundle",
"handsBundlePath": "Hands/Hands_GhostEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "6771de297e873d83edcaa75e",
"outfitId": "6771de31b311b632322d664e",
"topId": "6771de39123660ae4a1dee1e",
"handsId": "6771de1ef569f7df6f281670",
"locales": {
"en": "Gorka 5 (EMR Autumn)"
},
"topBundlePath": "Tops/Top_Gorka5EMRAutumn.bundle",
"handsBundlePath": "Hands/Hands_Gorka5EMRAutumn.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4c82bd9d2cc4f68db9048",
"outfitId": "66e4c82bd9d2cc4f68db9047",
"topId": "66e4c82bd9d2cc4f68db9046",
"handsId": "66e4c82bd9d2cc4f68db9045",
"locales": {
"en": "Gorka 5 (EMR)"
},
"topBundlePath": "Tops/Top_SummerFieldEMR.bundle",
"handsBundlePath": "Hands/Hands_SummerFieldEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4c92b1f9e848432250581",
"outfitId": "66e4c92b1f9e848432250582",
"topId": "66e4c92b1f9e848432250583",
"handsId": "66e4c92b1f9e848432250584",
"locales": {
"en": "Gorka 5 (SURPAT)"
},
"topBundlePath": "Tops/Top_SURPAT_Polevoi.bundle",
"handsBundlePath": "Hands/Hands_SURPAT_Polevoi.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4ca3fd76a2019ea0a1365",
"outfitId": "66e4ca3fd76a2019ea0a1366",
"topId": "66e4ca3fd76a2019ea0a1367",
"handsId": "66e4ca3fd76a2019ea0a1368",
"locales": {
"en": "Infil Top (EMR)"
},
"topBundlePath": "Tops/Top_InfilEMR.bundle",
"handsBundlePath": "Hands/Hands_InfilEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "top",
"suiteId": "66e4d029e00dc71709d52681",
"outfitId": "66e4d029e00dc71709d52682",
"topId": "66e4d029e00dc71709d52683",
"handsId": "66e4d029e00dc71709d52684",
"locales": {
"en": "TIGR (EMR)"
},
"topBundlePath": "Tops/Top_TigrEMR.bundle",
"handsBundlePath": "Hands/Hands_TigrEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4d7c5d1cbf7118d7c7a97",
"outfitId": "66e4d7c5d1cbf7118d7c7a96",
"bottomId": "66e4d7c5d1cbf7118d7c7a95",
"locales": {
"en": "BEAR Tactical (EMR)"
},
"bottomBundlePath": "Bottoms/BEARTacticalEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4d8a2b3e5a7996cbb2963",
"outfitId": "66e4d8a2b3e5a7996cbb2964",
"bottomId": "66e4d8a2b3e5a7996cbb2965",
"locales": {
"en": "BEAR Tactical (SURPAT Savanna)"
},
"bottomBundlePath": "Bottoms/BEARTacticalSS.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4d9c9a6b75b54ba1cbb73",
"outfitId": "66e4d9c9a6b75b54ba1cbb74",
"bottomId": "66e4d9c9a6b75b54ba1cbb75",
"locales": {
"en": "URON (SURPAT Savanna)"
},
"bottomBundlePath": "Bottoms/URON_SS.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4da8b7fdadb407a49d278",
"outfitId": "66e4da8b7fdadb407a49d277",
"bottomId": "66e4da8b7fdadb407a49d276",
"locales": {
"en": "URON (SURPAT)"
},
"bottomBundlePath": "Bottoms/URON_SURPAT.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4db75ebaf79e16fde5a82",
"outfitId": "66e4db75ebaf79e16fde5a83",
"bottomId": "66e4db75ebaf79e16fde5a84",
"locales": {
"en": "TIGR (SURPAT)"
},
"bottomBundlePath": "Bottoms/TIGR_SURPAT.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e49cd46508acae924468",
"outfitId": "66e4e49cd46508acae924467",
"bottomId": "66e4e49cd46508acae924466",
"locales": {
"en": "TIGR (Multicam)"
},
"bottomBundlePath": "Bottoms/TIGR_MC.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e359c07b695a60671138",
"outfitId": "66e4e359c07b695a60671137",
"bottomId": "66e4e359c07b695a60671136",
"locales": {
"en": "TIGR (EMR)"
},
"bottomBundlePath": "Bottoms/TIGR_EMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e4010aeefeddc2fadd81",
"outfitId": "66e4e4010aeefeddc2fadd82",
"bottomId": "66e4e4010aeefeddc2fadd83",
"locales": {
"en": "SRVV (Multicam)"
},
"bottomBundlePath": "Bottoms/SRVV_MC.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e5d3ec824cdad648bda9",
"outfitId": "66e4e5d3ec824cdad648bda8",
"bottomId": "66e4e5d3ec824cdad648bda7",
"locales": {
"en": "SRVV (SURPAT Savanna)"
},
"bottomBundlePath": "Bottoms/SRVV_SS.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e6aaabd48e2279d36601",
"outfitId": "66e4e6aaabd48e2279d36602",
"bottomId": "66e4e6aaabd48e2279d36603",
"locales": {
"en": "BEAR Recon (Multicam)"
},
"bottomBundlePath": "Bottoms/ReconMC.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e7c370548c30ed3f6714",
"outfitId": "66e4e7c370548c30ed3f6715",
"bottomId": "66e4e7c370548c30ed3f6716",
"locales": {
"en": "BEAR Recon (SURPAT)"
},
"bottomBundlePath": "Bottoms/ReconSURPAT.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e8767379e0c40e906988",
"outfitId": "66e4e8767379e0c40e906987",
"bottomId": "66e4e8767379e0c40e906986",
"locales": {
"en": "VOIN (Multicam)"
},
"bottomBundlePath": "Bottoms/MC_voin.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e8f526bfc8238f707062",
"outfitId": "66e4e8f526bfc8238f707063",
"bottomId": "66e4e8f526bfc8238f707064",
"locales": {
"en": "VOIN (EMR)"
},
"bottomBundlePath": "Bottoms/EMR_voin.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4e9cd5f6409352964a8e9",
"outfitId": "66e4e9cd5f6409352964a8e8",
"bottomId": "66e4e9cd5f6409352964a8e7",
"locales": {
"en": "Gorka 5 Lower (EMR)"
},
"bottomBundlePath": "Bottoms/Bottom_SummerFieldEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4eac38bddd59019002a43",
"outfitId": "66e4eac38bddd59019002a44",
"bottomId": "66e4eac38bddd59019002a45",
"locales": {
"en": "Infil Lower (EMR)"
},
"bottomBundlePath": "Bottoms/Bottom_InfilEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
},
{
"type": "bottom",
"suiteId": "66e4ebb603f6a711eba72f29",
"outfitId": "66e4ebb603f6a711eba72f28",
"bottomId": "66e4ebb603f6a711eba72f27",
"locales": {
"en": "BEAR Gorka SSO (EMR)"
},
"bottomBundlePath": "Bottoms/Bottom_GhostEMR.bundle",
"traderId": "RAGMAN",
"loyaltyLevel": 1,
"profileLevel": 1,
"standing": 0,
"currencyId": "ROUBLES",
"price": 0
}
]

View File

@ -0,0 +1,31 @@
{
"name": "Additional Clothing BEAR",
"version": "3.0.0",
"sptVersion": "3.10.*",
"loadBefore": [],
"loadAfter": [],
"incompatibilities": [],
"isBundleMod": true,
"main": "src/mod.js",
"scripts": {
"setup": "npm i",
"build": "node ./build.mjs",
"buildinfo": "node ./build.mjs --verbose",
"buildcopy": "node ./buildcopy.mjs"
},
"devDependencies": {
"@types/node": "20.11",
"@typescript-eslint/eslint-plugin": "7.2",
"@typescript-eslint/parser": "7.2",
"archiver": "^6.0",
"eslint": "8.57",
"fs-extra": "11.2",
"ignore": "^5.2",
"tsyringe": "4.8.0",
"typescript": "5.4",
"winston": "3.12"
},
"author": "Ashley Schaeffer BMW",
"contributors": "",
"license": "UNLICENSE"
}

View File

@ -0,0 +1,323 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomClothingService = void 0;
const configConsts_1 = require("./references/configConsts");
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
class CustomClothingService {
instanceManager;
preSptLoad(instanceManager) {
this.instanceManager = instanceManager;
}
postDBLoad() {
const clothingJsonsPath = node_path_1.default.join(__dirname, "../db/clothing");
if (this.instanceManager.debug) {
console.log(`Scanning directory for clothing JSON files: ${clothingJsonsPath}`);
}
const jsonFiles = node_fs_1.default.readdirSync(clothingJsonsPath).filter(file => file.endsWith(".json"));
if (this.instanceManager.debug) {
console.log(`Found ${jsonFiles.length} JSON file(s) in ${clothingJsonsPath}`);
}
for (const jsonFile of jsonFiles) {
const filePath = node_path_1.default.join(clothingJsonsPath, jsonFile);
if (this.instanceManager.debug) {
console.log(`Processing file: ${jsonFile} at path: ${filePath}`);
}
try {
// Read and parse the JSON file
const clothingConfigs = this.readJsonFile(filePath);
if (this.instanceManager.debug) {
console.log(`Parsed JSON content from ${jsonFile}:`, clothingConfigs);
}
// Process the parsed content
for (const clothingConfig of clothingConfigs) {
if (this.instanceManager.debug) {
console.log("Processing clothing config:", clothingConfig);
}
try {
this.processClothingConfig(clothingConfig);
if (this.instanceManager.debug) {
console.log("Successfully processed clothing config:", clothingConfig);
}
}
catch (error) {
console.error(`Error processing config in ${jsonFile}:`, error);
}
}
if (this.instanceManager.debug) {
console.log(`Successfully processed all configs in ${jsonFile}.`);
}
}
catch (error) {
console.error(`Error reading or parsing ${jsonFile}:`, error);
}
}
}
processClothingConfig(clothingConfig) {
if (this.instanceManager.debug) {
console.log(`Processing config of type: ${clothingConfig.type}`);
}
if (clothingConfig.type === "top") {
this.addTop(clothingConfig);
}
else if (clothingConfig.type === "bottom") {
this.addBottom(clothingConfig);
}
else {
console.error("Unknown config type:", clothingConfig.type);
}
}
addSuiteToTrader(traderId, outfitId, suiteId, loyaltyLevel, profileLevel, standing, currencyId, price) {
const traderIdFromEnum = configConsts_1.traderIDs[traderId] || traderId;
const currencyIdFromEnum = configConsts_1.currencyIDs[currencyId] || currencyId;
this.instanceManager.database.traders[traderIdFromEnum].base.customization_seller = true;
if (!this.instanceManager.database.traders[traderIdFromEnum].suits) {
this.instanceManager.database.traders[traderIdFromEnum].suits = [];
}
const newTraderOutfit = {
"_id": outfitId,
"tid": traderIdFromEnum,
"suiteId": suiteId,
"isActive": true,
"isHiddenInPVE": false,
"externalObtain": false,
"internalObtain": true,
"requirements": {
"loyaltyLevel": loyaltyLevel,
"profileLevel": profileLevel,
"standing": standing,
"skillRequirements": [],
"questRequirements": [],
"achievementRequirements": [],
"itemRequirements": [
{
"count": price,
"_tpl": currencyIdFromEnum,
"onlyFunctional": true
}
],
"requiredTid": traderIdFromEnum
}
};
if (this.instanceManager.debug) {
console.log("Adding new trader outfit:", newTraderOutfit);
}
this.instanceManager.database.traders[traderIdFromEnum].suits.push(newTraderOutfit);
}
addTop(clothingConfig) {
const { side, suiteId, topId, handsId, outfitId, topBundlePath, handsBundlePath, traderId, loyaltyLevel, profileLevel, standing, currencyId, price, watchPrefab, watchPosition, watchRotation } = clothingConfig;
try {
if (this.instanceManager.debug) {
console.log("Adding top");
}
const DefaultWatchPrefab = {
"path": "",
"rcid": ""
};
const DefaultWatchPosition = {
"x": 0,
"y": 0,
"z": 0
};
const DefaultWatchRotation = {
"x": 0,
"y": 0,
"z": 0
};
const newTop = {
"_id": topId,
"_name": `${topId}_name`,
"_parent": "5cc0868e14c02e000c6bea68",
"_type": "Item",
"_props": {
"Description": `${topId}_desc`,
"Name": `${topId}_name`,
"ShortName": `${topId}_shortName`,
"Side": [
"Usec"
],
"BodyPart": "Body",
"IntegratedArmorVest": false,
"Prefab": {
"path": topBundlePath,
"rcid": ""
},
"WatchPosition": watchPosition ?? DefaultWatchPosition,
"WatchPrefab": watchPrefab ?? DefaultWatchPrefab,
"WatchRotation": watchRotation ?? DefaultWatchRotation
},
"_proto": "5cde95d97d6c8b647a3769b0"
};
if (this.instanceManager.debug) {
console.log(`Added top for ${topId}:`, newTop);
}
this.instanceManager.database.templates.customization[topId] = newTop;
// add hands
if (this.instanceManager.debug) {
console.log(`Adding hands for topId: ${topId}`);
}
const newHands = {
"_id": handsId,
"_name": `${handsId}_name`,
"_parent": "5cc086a314c02e000c6bea69",
"_type": "Item",
"_props": {
"Description": `${handsId}_desc`,
"Name": `${handsId}_name`,
"ShortName": `${handsId}_shortName`,
"Side": [
"Usec"
],
"BodyPart": "Hands",
"IntegratedArmorVest": false,
"Prefab": {
"path": handsBundlePath,
"rcid": ""
},
"WatchPosition": watchPosition ?? DefaultWatchPosition,
"WatchPrefab": watchPrefab ?? DefaultWatchPrefab,
"WatchRotation": watchRotation ?? DefaultWatchRotation
},
"_proto": "5cde95fa7d6c8b04737c2d13"
};
this.instanceManager.database.templates.customization[handsId] = newHands;
if (this.instanceManager.debug) {
console.log(`Added hands for ${handsId}:`, newHands);
}
const newSuite = {
"_id": suiteId,
"_name": `${suiteId}_name`,
"_parent": "5cd944ca1388ce03a44dc2a4",
"_type": "Item",
"_props": {
"Description": "DefaultUsecUpperSuite",
"Name": "DefaultUsecUpperSuite",
"ShortName": "DefaultUsecUpperSuite",
"Side": side ?? ["Usec", "Bear", "Savage"],
"AvailableAsDefault": false,
"Game": [
"eft",
"arena"
],
"Body": topId,
"Hands": handsId
},
"_proto": "5cde9ec17d6c8b04723cf479"
};
this.instanceManager.database.templates.customization[suiteId] = newSuite;
if (this.instanceManager.debug) {
console.log(`Added suite for ${suiteId}`, newSuite);
}
this.handleLocale(clothingConfig, suiteId);
this.addSuiteToTrader(traderId, outfitId, suiteId, loyaltyLevel, profileLevel, standing, currencyId, price);
}
catch (error) {
console.error(`Error adding top for outfitId: ${outfitId}:`, error);
}
}
addBottom(clothingConfig) {
const { side, bottomId, suiteId, outfitId, bottomBundlePath, traderId, loyaltyLevel, profileLevel, standing, currencyId, price } = clothingConfig;
// add Bottom
const newBottom = {
"_id": bottomId,
"_name": `${bottomId}_name`,
"_parent": "5cc0869814c02e000a4cad94",
"_type": "Item",
"_props": {
"Description": `${bottomId}_desc`,
"Name": `${bottomId}_name`,
"ShortName": `${bottomId}_shortName`,
"Side": side ?? ["Usec", "Bear", "Savage"],
"BodyPart": "Feet",
"IntegratedArmorVest": false,
"Prefab": {
"path": bottomBundlePath,
"rcid": ""
},
"WatchPosition": {
"x": 0,
"y": 0,
"z": 0
},
"WatchPrefab": {
"path": "",
"rcid": ""
},
"WatchRotation": {
"x": 0,
"y": 0,
"z": 0
}
},
"_proto": "5cdea3c47d6c8b0475341734"
};
this.instanceManager.database.templates.customization[bottomId] = newBottom;
const newSuite = {
"_id": suiteId,
"_name": `${suiteId}_name`,
"_parent": "5cd944d01388ce000a659df9",
"_type": "Item",
"_props": {
"Description": `${suiteId}_desc`,
"Name": `${suiteId}_name`,
"ShortName": `${suiteId}_shortName`,
"Side": side ?? ["Usec", "Bear", "Savage"],
"AvailableAsDefault": false,
"Game": [
"eft",
"arena"
],
"Feet": bottomId
},
"_proto": "5cd946231388ce000d572fe3"
};
// add suite
this.instanceManager.database.templates.customization[suiteId] = newSuite;
if (this.instanceManager.debug) {
console.log(`Added suite for ${suiteId}`, newSuite);
}
this.handleLocale(clothingConfig, suiteId);
this.addSuiteToTrader(traderId, outfitId, suiteId, loyaltyLevel, profileLevel, standing, currencyId, price);
}
handleLocale(clothingConfig, clothingId) {
for (const localeID in this.instanceManager.database.locales.global) {
if (this.instanceManager.debug) {
console.log("Processing localeID:", localeID);
}
try {
const itemName = `${clothingId} Name`;
const shortName = `${clothingId} shortName`;
const itemDescription = `${clothingId} description`;
// Check if the locale exists, else fallback to 'en'
const localeValue = clothingConfig.locales[localeID] || clothingConfig.locales["en"];
if (localeValue && this.instanceManager.database.locales.global[localeID]) {
this.instanceManager.database.locales.global[localeID][itemName] = localeValue;
this.instanceManager.database.locales.global[localeID][itemDescription] = localeValue;
this.instanceManager.database.locales.global[localeID][shortName] = localeValue;
}
}
catch (error) {
console.error(`Error handling locale for ${localeID}: ${error}`);
}
}
}
readJsonFile(filePath) {
const content = node_fs_1.default.readFileSync(filePath, "utf-8");
try {
const parsedContent = JSON.parse(content);
if (this.instanceManager.debug) {
console.log("Custom Clothing Service: Parsed JSON Content:", parsedContent); // Logging the parsed JSON content
}
return parsedContent;
}
catch (error) {
console.error("Error parsing JSON content:", error);
return null;
}
}
}
exports.CustomClothingService = CustomClothingService;
//# sourceMappingURL=CustomClothingService.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,393 @@
/* eslint-disable @typescript-eslint/naming-convention */
import type { ICustomizationItem } from "@spt/models/eft/common/tables/ICustomizationItem";
import { traderIDs, currencyIDs } from "./references/configConsts";
import type { ClothingConfig } from "./references/configConsts";
import type { WTTInstanceManager } from "./WTTInstanceManager";
import fs from "node:fs";
import path from "node:path";
export class CustomClothingService {
private instanceManager: WTTInstanceManager;
public preSptLoad(instanceManager: WTTInstanceManager): void {
this.instanceManager = instanceManager;
}
public postDBLoad(): void {
const clothingJsonsPath = path.join(__dirname, "../db/clothing");
if (this.instanceManager.debug) {
console.log(`Scanning directory for clothing JSON files: ${clothingJsonsPath}`);
}
const jsonFiles = fs.readdirSync(clothingJsonsPath).filter(file => file.endsWith(".json"));
if (this.instanceManager.debug) {
console.log(`Found ${jsonFiles.length} JSON file(s) in ${clothingJsonsPath}`);
}
for (const jsonFile of jsonFiles) {
const filePath = path.join(clothingJsonsPath, jsonFile);
if (this.instanceManager.debug) {
console.log(`Processing file: ${jsonFile} at path: ${filePath}`);
}
try {
// Read and parse the JSON file
const clothingConfigs: ClothingConfig[] = this.readJsonFile(filePath);
if (this.instanceManager.debug) {
console.log(`Parsed JSON content from ${jsonFile}:`, clothingConfigs);
}
// Process the parsed content
for (const clothingConfig of clothingConfigs) {
if (this.instanceManager.debug) {
console.log("Processing clothing config:", clothingConfig);
}
try {
this.processClothingConfig(clothingConfig);
if (this.instanceManager.debug) {
console.log("Successfully processed clothing config:", clothingConfig);
}
} catch (error) {
console.error(`Error processing config in ${jsonFile}:`, error);
}
}
if (this.instanceManager.debug) {
console.log(`Successfully processed all configs in ${jsonFile}.`);
}
} catch (error) {
console.error(`Error reading or parsing ${jsonFile}:`, error);
}
}
}
private processClothingConfig(clothingConfig: ClothingConfig): void {
if (this.instanceManager.debug) {
console.log(`Processing config of type: ${clothingConfig.type}`);
}
if (clothingConfig.type === "top") {
this.addTop(clothingConfig);
}
else if (clothingConfig.type === "bottom") {
this.addBottom(clothingConfig);
}
else {
console.error("Unknown config type:", clothingConfig.type);
}
}
private addSuiteToTrader(
traderId: string,
outfitId: string,
suiteId: string,
loyaltyLevel: number,
profileLevel: number,
standing: number,
currencyId: string,
price: number
): void {
const traderIdFromEnum = traderIDs[traderId as keyof typeof traderIDs] || traderId;
const currencyIdFromEnum = currencyIDs[currencyId as keyof typeof currencyIDs] || currencyId;
this.instanceManager.database.traders[traderIdFromEnum].base.customization_seller = true;
if (!this.instanceManager.database.traders[traderIdFromEnum].suits) {
this.instanceManager.database.traders[traderIdFromEnum].suits = [];
}
const newTraderOutfit = {
"_id": outfitId,
"tid": traderIdFromEnum,
"suiteId": suiteId,
"isActive": true,
"isHiddenInPVE": false,
"externalObtain": false,
"internalObtain": true,
"requirements": {
"loyaltyLevel": loyaltyLevel,
"profileLevel": profileLevel,
"standing": standing,
"skillRequirements": [],
"questRequirements": [],
"achievementRequirements": [],
"itemRequirements": [
{
"count": price,
"_tpl": currencyIdFromEnum,
"onlyFunctional": true
}
],
"requiredTid": traderIdFromEnum
}
}
if (this.instanceManager.debug) {
console.log("Adding new trader outfit:", newTraderOutfit);
}
this.instanceManager.database.traders[traderIdFromEnum].suits.push(newTraderOutfit);
}
private addTop(clothingConfig: ClothingConfig): void {
const {side, suiteId, topId, handsId, outfitId, topBundlePath, handsBundlePath, traderId, loyaltyLevel, profileLevel, standing, currencyId, price, watchPrefab, watchPosition, watchRotation } = clothingConfig;
try {
if (this.instanceManager.debug) {
console.log("Adding top");
}
const DefaultWatchPrefab = {
"path": "",
"rcid": ""
};
const DefaultWatchPosition = {
"x": 0,
"y": 0,
"z": 0
};
const DefaultWatchRotation = {
"x": 0,
"y": 0,
"z": 0
};
const newTop = {
"_id": topId,
"_name": `${topId}_name`,
"_parent": "5cc0868e14c02e000c6bea68",
"_type": "Item",
"_props": {
"Description": `${topId}_desc`,
"Name": `${topId}_name`,
"ShortName": `${topId}_shortName`,
"Side": [
"Usec"
],
"BodyPart": "Body",
"IntegratedArmorVest": false,
"Prefab": {
"path": topBundlePath,
"rcid": ""
},
"WatchPosition": watchPosition ?? DefaultWatchPosition,
"WatchPrefab": watchPrefab ?? DefaultWatchPrefab,
"WatchRotation": watchRotation ?? DefaultWatchRotation
},
"_proto": "5cde95d97d6c8b647a3769b0"
} as ICustomizationItem;
if (this.instanceManager.debug) {
console.log(`Added top for ${topId}:`, newTop);
}
this.instanceManager.database.templates.customization[topId] = newTop;
// add hands
if (this.instanceManager.debug) {
console.log(`Adding hands for topId: ${topId}`);
}
const newHands = {
"_id": handsId,
"_name": `${handsId}_name`,
"_parent": "5cc086a314c02e000c6bea69",
"_type": "Item",
"_props": {
"Description": `${handsId}_desc`,
"Name": `${handsId}_name`,
"ShortName": `${handsId}_shortName`,
"Side": [
"Usec"
],
"BodyPart": "Hands",
"IntegratedArmorVest": false,
"Prefab": {
"path": handsBundlePath,
"rcid": ""
},
"WatchPosition": watchPosition ?? DefaultWatchPosition,
"WatchPrefab": watchPrefab ?? DefaultWatchPrefab,
"WatchRotation": watchRotation ?? DefaultWatchRotation
},
"_proto": "5cde95fa7d6c8b04737c2d13"
} as ICustomizationItem;
this.instanceManager.database.templates.customization[handsId] = newHands;
if (this.instanceManager.debug) {
console.log(`Added hands for ${handsId}:`, newHands);
}
const newSuite = {
"_id": suiteId,
"_name": `${suiteId}_name`,
"_parent": "5cd944ca1388ce03a44dc2a4",
"_type": "Item",
"_props": {
"Description": "DefaultUsecUpperSuite",
"Name": "DefaultUsecUpperSuite",
"ShortName": "DefaultUsecUpperSuite",
"Side": side ?? ["Usec", "Bear", "Savage"],
"AvailableAsDefault": false,
"Game": [
"eft",
"arena"
],
"Body": topId,
"Hands": handsId
},
"_proto": "5cde9ec17d6c8b04723cf479"
} as ICustomizationItem;
this.instanceManager.database.templates.customization[suiteId] = newSuite;
if (this.instanceManager.debug) {
console.log(`Added suite for ${suiteId}`, newSuite);
}
this.handleLocale(clothingConfig, suiteId);
this.addSuiteToTrader(
traderId,
outfitId,
suiteId,
loyaltyLevel,
profileLevel,
standing,
currencyId,
price
);
}
catch (error) {
console.error(`Error adding top for outfitId: ${outfitId}:`, error);
}
}
private addBottom(clothingConfig: ClothingConfig): void {
const { side, bottomId, suiteId, outfitId, bottomBundlePath, traderId, loyaltyLevel, profileLevel, standing, currencyId, price } = clothingConfig;
// add Bottom
const newBottom = {
"_id": bottomId,
"_name": `${bottomId}_name`,
"_parent": "5cc0869814c02e000a4cad94",
"_type": "Item",
"_props": {
"Description": `${bottomId}_desc`,
"Name": `${bottomId}_name`,
"ShortName": `${bottomId}_shortName`,
"Side": side ?? ["Usec", "Bear", "Savage"],
"BodyPart": "Feet",
"IntegratedArmorVest": false,
"Prefab": {
"path": bottomBundlePath,
"rcid": ""
},
"WatchPosition": {
"x": 0,
"y": 0,
"z": 0
},
"WatchPrefab": {
"path": "",
"rcid": ""
},
"WatchRotation": {
"x": 0,
"y": 0,
"z": 0
}
},
"_proto": "5cdea3c47d6c8b0475341734"
} as ICustomizationItem;
this.instanceManager.database.templates.customization[bottomId] = newBottom;
const newSuite = {
"_id": suiteId,
"_name": `${suiteId}_name`,
"_parent": "5cd944d01388ce000a659df9",
"_type": "Item",
"_props": {
"Description": `${suiteId}_desc`,
"Name": `${suiteId}_name`,
"ShortName": `${suiteId}_shortName`,
"Side": side ?? ["Usec", "Bear", "Savage"],
"AvailableAsDefault": false,
"Game": [
"eft",
"arena"
],
"Feet": bottomId
},
"_proto": "5cd946231388ce000d572fe3"
} as ICustomizationItem;
// add suite
this.instanceManager.database.templates.customization[suiteId] = newSuite;
if (this.instanceManager.debug) {
console.log(`Added suite for ${suiteId}`, newSuite);
}
this.handleLocale(clothingConfig, suiteId);
this.addSuiteToTrader(
traderId,
outfitId,
suiteId,
loyaltyLevel,
profileLevel,
standing,
currencyId,
price,
);
}
private handleLocale(clothingConfig: ClothingConfig, clothingId: string): void
{
for (const localeID in this.instanceManager.database.locales.global)
{
if (this.instanceManager.debug)
{
console.log("Processing localeID:", localeID);
}
try
{
const itemName = `${clothingId} Name`;
const shortName = `${clothingId} shortName`;
const itemDescription = `${clothingId} description`;
// Check if the locale exists, else fallback to 'en'
const localeValue = clothingConfig.locales[localeID] || clothingConfig.locales["en"];
if (localeValue && this.instanceManager.database.locales.global[localeID])
{
this.instanceManager.database.locales.global[localeID][itemName] = localeValue;
this.instanceManager.database.locales.global[localeID][itemDescription] = localeValue;
this.instanceManager.database.locales.global[localeID][shortName] = localeValue;
}
}
catch (error)
{
console.error(`Error handling locale for ${localeID}: ${error}`);
}
}
}
private readJsonFile(filePath: string): any {
const content = fs.readFileSync(filePath, "utf-8");
try {
const parsedContent = JSON.parse(content);
if (this.instanceManager.debug) {
console.log("Custom Clothing Service: Parsed JSON Content:", parsedContent); // Logging the parsed JSON content
}
return parsedContent;
}
catch (error) {
console.error("Error parsing JSON content:", error);
return null;
}
}
}

View File

@ -0,0 +1,94 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WTTInstanceManager = void 0;
const node_path_1 = __importDefault(require("node:path"));
class WTTInstanceManager {
//#region Accessible in or after preSptLoad
modName;
debug;
// Useful Paths
profilePath = node_path_1.default.join(process.cwd(), "\\user\\profiles");
modPath;
dbPath;
// Instances
container;
PreSptModLoader;
configServer;
saveServer;
itemHelper;
logger;
staticRouter;
dynamicRouter;
profileController;
profileCallbacks;
//#endregion
//#region Acceessible in or after postDBLoad
database;
customItem;
imageRouter;
jsonUtil;
profileHelper;
eventOutputHolder;
ragfairPriceService;
importerUtil;
traderAssortService;
applicationContext;
vfs;
//#endregion
// Call at the start of the mods postDBLoad method
preSptLoad(container, mod) {
this.modName = mod;
this.modPath = node_path_1.default.join(process.cwd(), `\\user\\mods\\${mod}\\`);
this.dbPath = node_path_1.default.join(process.cwd(), `\\user\\mods\\${mod}\\db`);
this.container = container;
this.PreSptModLoader = container.resolve("PreSptModLoader");
this.imageRouter = container.resolve("ImageRouter");
this.configServer = container.resolve("ConfigServer");
this.saveServer = container.resolve("SaveServer");
this.itemHelper = container.resolve("ItemHelper");
this.eventOutputHolder = container.resolve("EventOutputHolder");
this.profileController = container.resolve("ProfileController");
this.profileCallbacks = container.resolve("ProfileCallbacks");
this.logger = container.resolve("WinstonLogger");
this.staticRouter = container.resolve("StaticRouterModService");
this.dynamicRouter = container.resolve("DynamicRouterModService");
this.traderAssortService = container.resolve("TraderAssortService");
this.vfs = container.resolve("VFS");
}
postDBLoad(container) {
this.database = container.resolve("DatabaseServer").getTables();
this.customItem = container.resolve("CustomItemService");
this.jsonUtil = container.resolve("JsonUtil");
this.profileHelper = container.resolve("ProfileHelper");
this.ragfairPriceService = container.resolve("RagfairPriceService");
this.importerUtil = container.resolve("ImporterUtil");
this.applicationContext = container.resolve("ApplicationContext");
}
colorLog(message, color) {
const colorCodes = {
red: "\x1b[31m",
green: "\x1b[32m",
yellow: "\x1b[33m",
blue: "\x1b[34m",
magenta: "\x1b[35m",
cyan: "\x1b[36m",
white: "\x1b[37m",
gray: "\x1b[90m",
brightRed: "\x1b[91m",
brightGreen: "\x1b[92m",
brightYellow: "\x1b[93m",
brightBlue: "\x1b[94m",
brightMagenta: "\x1b[95m",
brightCyan: "\x1b[96m",
brightWhite: "\x1b[97m"
};
const resetCode = "\x1b[0m";
const colorCode = colorCodes[color] || "\x1b[37m"; // Default to white if color is invalid.
console.log(`${colorCode}${message}${resetCode}`); // Log the colored message here
}
}
exports.WTTInstanceManager = WTTInstanceManager;
//# sourceMappingURL=WTTInstanceManager.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"WTTInstanceManager.js","sourceRoot":"","sources":["WTTInstanceManager.ts"],"names":[],"mappings":"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"}

View File

@ -0,0 +1,119 @@
import path from "node:path";
import type { ILogger } from "@spt/models/spt/utils/ILogger";
import type { ProfileController } from "@spt/controllers/ProfileController";
import type { ProfileCallbacks } from "@spt/callbacks/ProfileCallbacks";
import type { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import type { DatabaseServer } from "@spt/servers/DatabaseServer";
import type { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables";
import type { StaticRouterModService } from "@spt/services/mod/staticRouter/StaticRouterModService";
import type { DynamicRouterModService } from "@spt/services/mod/dynamicRouter/DynamicRouterModService";
import type { TraderAssortService } from "@spt/services/TraderAssortService";
import type { DependencyContainer } from "tsyringe";
import type { CustomItemService } from "@spt/services/mod/CustomItemService";
import type { ImageRouter } from "@spt/routers/ImageRouter";
import type { PreSptModLoader } from "@spt/loaders/PreSptModLoader";
import type { ConfigServer } from "@spt/servers/ConfigServer";
import type { JsonUtil } from "@spt/utils/JsonUtil";
import type { ProfileHelper } from "@spt/helpers/ProfileHelper";
import type { RagfairPriceService } from "@spt/services/RagfairPriceService";
import type { ImporterUtil } from "@spt/utils/ImporterUtil";
import type { SaveServer } from "@spt/servers/SaveServer";
import type { ItemHelper } from "@spt/helpers/ItemHelper";
import type { ApplicationContext } from "@spt/context/ApplicationContext";
import type { VFS } from "@spt/utils/VFS";
export class WTTInstanceManager
{
//#region Accessible in or after preSptLoad
public modName: string;
public debug: boolean;
// Useful Paths
public profilePath: string = path.join(process.cwd(), "\\user\\profiles");
public modPath: string;
public dbPath: string;
// Instances
public container: DependencyContainer;
public PreSptModLoader: PreSptModLoader;
public configServer: ConfigServer;
public saveServer: SaveServer;
public itemHelper: ItemHelper;
public logger: ILogger;
public staticRouter: StaticRouterModService;
public dynamicRouter: DynamicRouterModService;
public profileController: ProfileController;
public profileCallbacks: ProfileCallbacks;
//#endregion
//#region Acceessible in or after postDBLoad
public database: IDatabaseTables;
public customItem: CustomItemService;
public imageRouter: ImageRouter;
public jsonUtil: JsonUtil;
public profileHelper: ProfileHelper;
public eventOutputHolder: EventOutputHolder;
public ragfairPriceService: RagfairPriceService;
public importerUtil: ImporterUtil;
public traderAssortService: TraderAssortService;
public applicationContext: ApplicationContext;
public vfs: VFS;
//#endregion
// Call at the start of the mods postDBLoad method
public preSptLoad(container: DependencyContainer, mod: string): void
{
this.modName = mod;
this.modPath = path.join(process.cwd(), `\\user\\mods\\${mod}\\`);
this.dbPath = path.join(process.cwd(), `\\user\\mods\\${mod}\\db`);
this.container = container;
this.PreSptModLoader = container.resolve<PreSptModLoader>("PreSptModLoader");
this.imageRouter = container.resolve<ImageRouter>("ImageRouter");
this.configServer = container.resolve<ConfigServer>("ConfigServer");
this.saveServer = container.resolve<SaveServer>("SaveServer");
this.itemHelper = container.resolve<ItemHelper>("ItemHelper");
this.eventOutputHolder = container.resolve<EventOutputHolder>("EventOutputHolder");
this.profileController = container.resolve<ProfileController>("ProfileController");
this.profileCallbacks = container.resolve<ProfileCallbacks>("ProfileCallbacks");
this.logger = container.resolve<ILogger>("WinstonLogger");
this.staticRouter = container.resolve<StaticRouterModService>("StaticRouterModService");
this.dynamicRouter = container.resolve<DynamicRouterModService>("DynamicRouterModService");
this.traderAssortService = container.resolve<TraderAssortService>("TraderAssortService");
this.vfs = container.resolve<VFS>("VFS");
}
public postDBLoad(container: DependencyContainer): void
{
this.database = container.resolve<DatabaseServer>("DatabaseServer").getTables();
this.customItem = container.resolve<CustomItemService>("CustomItemService");
this.jsonUtil = container.resolve<JsonUtil>("JsonUtil");
this.profileHelper = container.resolve<ProfileHelper>("ProfileHelper");
this.ragfairPriceService = container.resolve<RagfairPriceService>("RagfairPriceService");
this.importerUtil = container.resolve<ImporterUtil>("ImporterUtil");
this.applicationContext = container.resolve<ApplicationContext>("ApplicationContext");
}
public colorLog(message: string, color: string) {
const colorCodes = {
red: "\x1b[31m",
green: "\x1b[32m",
yellow: "\x1b[33m",
blue: "\x1b[34m",
magenta: "\x1b[35m",
cyan: "\x1b[36m",
white: "\x1b[37m",
gray: "\x1b[90m",
brightRed: "\x1b[91m",
brightGreen: "\x1b[92m",
brightYellow: "\x1b[93m",
brightBlue: "\x1b[94m",
brightMagenta: "\x1b[95m",
brightCyan: "\x1b[96m",
brightWhite: "\x1b[97m"
};
const resetCode = "\x1b[0m";
const colorCode = colorCodes[color as keyof typeof colorCodes] || "\x1b[37m"; // Default to white if color is invalid.
console.log(`${colorCode}${message}${resetCode}`); // Log the colored message here
}
}

View File

@ -0,0 +1,35 @@
"use strict";
/* eslint-disable @typescript-eslint/naming-convention */
Object.defineProperty(exports, "__esModule", { value: true });
const LogTextColor_1 = require("C:/snapshot/project/obj/models/spt/logging/LogTextColor");
// WTT imports
const WTTInstanceManager_1 = require("./WTTInstanceManager");
const CustomClothingService_1 = require("./CustomClothingService");
class Kopat1ch {
instanceManager = new WTTInstanceManager_1.WTTInstanceManager();
version;
modName = "Additional Clothing BEAR";
customClothingService = new CustomClothingService_1.CustomClothingService();
debug = false;
preSptLoad(container) {
this.instanceManager.preSptLoad(container, this.modName);
this.instanceManager.debug = this.debug;
this.customClothingService.preSptLoad(this.instanceManager);
this.displayCreditBanner();
}
postDBLoad(container) {
this.instanceManager.postDBLoad(container);
this.customClothingService.postDBLoad();
if (this.instanceManager.debug) {
this.instanceManager.logger.log(`[${this.modName}] Database: Loading complete.`, LogTextColor_1.LogTextColor.GREEN);
}
}
displayCreditBanner() {
this.instanceManager.colorLog(`[${this.modName}] 3.10.x Release build`, "green");
this.instanceManager.colorLog(`[${this.modName}] Developers: Ashley Schaeffer BMW`, "green");
this.instanceManager.colorLog(`[${this.modName}] Additional Clothing BEAR is Loaded`, "green");
this.instanceManager.colorLog;
}
}
module.exports = { mod: new Kopat1ch() };
//# sourceMappingURL=mod.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"mod.js","sourceRoot":"","sources":["mod.ts"],"names":[],"mappings":";AAAA,yDAAyD;;AAOzD,0FAAuF;AASvF,cAAc;AACd,6DAA0D;AAC1D,mEAAgE;AAGhE,MAAM,QAAQ;IAEF,eAAe,GAAuB,IAAI,uCAAkB,EAAE,CAAC;IAC/D,OAAO,CAAS;IAChB,OAAO,GAAG,0BAA0B,CAAC;IACrC,qBAAqB,GAA0B,IAAI,6CAAqB,EAAE,CAAC;IACnF,KAAK,GAAG,KAAK,CAAC;IAEP,UAAU,CAAC,SAA8B;QAC5C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAE/B,CAAC;IAEM,UAAU,CAAC,SAA8B;QAC5C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAC9B,CAAC;YACG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAC3B,IAAI,IAAI,CAAC,OAAO,+BAA+B,EAC/C,2BAAY,CAAC,KAAK,CACrB,CAAC;QACN,CAAC;IACL,CAAC;IAEO,mBAAmB;QAEvB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAC5B,IAAI,IAAI,CAAC,OAAO,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAC5B,IAAI,IAAI,CAAC,OAAO,oCAAoC,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAC5B,IAAI,IAAI,CAAC,OAAO,sCAAsC,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAA;IACjC,CAAC;CAEJ;AAED,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC"}

View File

@ -0,0 +1,63 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
import type { DependencyContainer } from "tsyringe";
import type { ILostOnDeathConfig } from "@spt/models/spt/config/ILostOnDeathConfig";
import type { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
import type { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod";
import { LogTextColor } from "@spt/models/spt/logging/LogTextColor";
import type { GameController } from "@spt/controllers/GameController";
import type { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { InRaidHelper } from "@spt/helpers/InRaidHelper";
import type { IPmcData } from "@spt/models/eft/common/IPmcData";
import type { IItem } from "@spt/models/eft/common/tables/IItem";
import config from "../config/config.json";
// WTT imports
import { WTTInstanceManager } from "./WTTInstanceManager";
import { CustomClothingService } from "./CustomClothingService";
class Kopat1ch
implements IPreSptLoadMod, IPostDBLoadMod {
private instanceManager: WTTInstanceManager = new WTTInstanceManager();
private version: string;
private modName = "Additional Clothing BEAR";
private customClothingService: CustomClothingService = new CustomClothingService();
debug = false;
public preSptLoad(container: DependencyContainer): void {
this.instanceManager.preSptLoad(container, this.modName);
this.instanceManager.debug = this.debug;
this.customClothingService.preSptLoad(this.instanceManager);
this.displayCreditBanner();
}
public postDBLoad(container: DependencyContainer): void {
this.instanceManager.postDBLoad(container);
this.customClothingService.postDBLoad();
if (this.instanceManager.debug)
{
this.instanceManager.logger.log(
`[${this.modName}] Database: Loading complete.`,
LogTextColor.GREEN
);
}
}
private displayCreditBanner(): void
{
this.instanceManager.colorLog
(`[${this.modName}] 3.10.x Release build`, "green");
this.instanceManager.colorLog
(`[${this.modName}] Developers: Ashley Schaeffer BMW`, "green");
this.instanceManager.colorLog
(`[${this.modName}] Additional Clothing BEAR is Loaded`, "green");
this.instanceManager.colorLog
}
}
module.exports = { mod: new Kopat1ch() };

View File

@ -0,0 +1,137 @@
"use strict";
/* eslint-disable @typescript-eslint/naming-convention */
Object.defineProperty(exports, "__esModule", { value: true });
exports.Stashes = exports.inventorySlots = exports.allBotTypes = exports.currencyIDs = exports.traderIDs = void 0;
;
var traderIDs;
(function (traderIDs) {
traderIDs["MECHANIC"] = "5a7c2eca46aef81a7ca2145d";
traderIDs["SKIER"] = "58330581ace78e27b8b10cee";
traderIDs["PEACEKEEPER"] = "5935c25fb3acc3127c3d8cd9";
traderIDs["THERAPIST"] = "54cb57776803fa99248b456e";
traderIDs["PRAPOR"] = "54cb50c76803fa8b248b4571";
traderIDs["JAEGAR"] = "5c0647fdd443bc2504c2d371";
traderIDs["RAGMAN"] = "5ac3b934156ae10c4430e83c";
traderIDs["FENCE"] = "579dc571d53a0658a154fbec";
traderIDs["ARTEM"] = "66bf757f27d0b097db0acea5";
traderIDs["BADGER"] = "bd3a8b28356d9c6509966546";
})(traderIDs || (exports.traderIDs = traderIDs = {}));
var currencyIDs;
(function (currencyIDs) {
currencyIDs["ROUBLES"] = "5449016a4bdc2d6f028b456f";
currencyIDs["EUROS"] = "569668774bdc2da2298b4568";
currencyIDs["DOLLARS"] = "5696686a4bdc2da3298b456a";
})(currencyIDs || (exports.currencyIDs = currencyIDs = {}));
var allBotTypes;
(function (allBotTypes) {
// Arena Fighters
allBotTypes["ARENAFIGHTER"] = "arenafighter";
allBotTypes["ARENAFIGHTEREVENT"] = "arenafighterevent";
// Scavs
allBotTypes["ASSAULT"] = "assault";
allBotTypes["ASSAULTGROUP"] = "assaultgroup";
allBotTypes["MARKSMAN"] = "marksman";
allBotTypes["CRAZYASSAULTEVENT"] = "crazyassaultevent";
allBotTypes["CURSEDASSAULT"] = "cursedassault";
// PMC's
allBotTypes["BEAR"] = "bear";
allBotTypes["USEC"] = "usec";
allBotTypes["PMCBEAR"] = "pmcbear";
allBotTypes["PMCUSEC"] = "pmcusec";
allBotTypes["PMC"] = "pmcbot";
// ExUsec
allBotTypes["EXUSEC"] = "exusec";
// Cultists
allBotTypes["CULTISTPRIEST"] = "sectantpriest";
allBotTypes["CULTISTWARRIOR"] = "sectantwarrior";
allBotTypes["CULTISTONI"] = "sectantoni";
allBotTypes["CULTISTPRIESTEVENT"] = "sectantpriestevent";
allBotTypes["CULTISTPREDVESTNIK"] = "sectantpredvestnik";
allBotTypes["CULTISTPRIZRAK"] = "sectantprizrak";
// BTR
allBotTypes["BTR"] = "btrshooter";
// Spirits
allBotTypes["SPIRITSPRING"] = "spiritspring";
allBotTypes["SPIRITWINTER"] = "spiritwinter";
// Zombies
allBotTypes["INFECTEDASSAULT"] = "infectedassault";
allBotTypes["INFECTEDCIVIL"] = "infectedcivil";
allBotTypes["INFECTEDLABORANT"] = "infectedlaborant";
allBotTypes["INFECTEDPMC"] = "infectedpmc";
allBotTypes["INFECTEDTAGILLA"] = "infectedtagilla";
// Santa
allBotTypes["GIFTER"] = "gifter";
// Bosses & Followers
// Kaban
allBotTypes["KABAN"] = "bossboar";
allBotTypes["KABANSNIPER"] = "bossboarsniper";
allBotTypes["FOLLOWERBOAR"] = "followerboar";
allBotTypes["FOLLOWERBOARCLOSE1"] = "followerboarclose1";
allBotTypes["FOLLOWERBOARCLOSE2"] = "followerboarclose2";
// Killa
allBotTypes["KILLA"] = "bosskilla";
// Kolontay
allBotTypes["KOLONTAY"] = "bosskolontay";
allBotTypes["FOLLOWERKOLONTAYASSAULT"] = "followerkolontayassault";
allBotTypes["FOLLOWERKOLONTAYSECURITY"] = "followerkolontaysecurity";
// Partisan
allBotTypes["PARTISAN"] = "bosspartisan";
// Reshala
allBotTypes["RESHALA"] = "bossbully";
allBotTypes["FOLLOWERRESHALA"] = "followerbully";
// Gluhar
allBotTypes["GLUHAR"] = "bossgluhar";
allBotTypes["FOLLOWERGLUHARASSAULT"] = "followergluharassault";
allBotTypes["FOLLOWERGLUHARSCOUT"] = "followergluharscout";
allBotTypes["FOLLOWERGLUHARSECURITY"] = "followergluharsecurity";
allBotTypes["FOLLOWERGLUHARSNIPER"] = "followergluharsnipe";
// Goons
allBotTypes["KNIGHT"] = "bossknight";
allBotTypes["FOLLOWERBIGPIPE"] = "followerbigpipe";
allBotTypes["FOLLOWERBIRDEYE"] = "followerbirdeye";
// Shturman
allBotTypes["SHTURMAN"] = "bosskojaniy";
allBotTypes["FOLLOWERSHTURMAN"] = "followerkojaniy";
// Sanitar
allBotTypes["SANITAR"] = "bosssanitar";
allBotTypes["FOLLOWERSANITAR"] = "followersanitar";
// Tagilla
allBotTypes["TAGILLA"] = "bosstagilla";
allBotTypes["FOLLOWERTAGILLA"] = "followertagilla";
// Zryachiy
allBotTypes["ZRYACHIY"] = "bosszryachiy";
allBotTypes["FOLLOWERZRYACHIY"] = "followerzryachiy";
allBotTypes["PEACEFULZRYACHIYEVENT"] = "peacefulzryachiyevent";
allBotTypes["RAVANGEZRYACHIYEVENT"] = "ravengezryachiyevent";
// Traders
// Peacemaker
allBotTypes["PEACEMAKER"] = "peacemaker";
// Skier
allBotTypes["SKIER"] = "skier";
})(allBotTypes || (exports.allBotTypes = allBotTypes = {}));
var inventorySlots;
(function (inventorySlots) {
inventorySlots["FirstPrimaryWeapon"] = "55d729c64bdc2d89028b4570";
inventorySlots["SecondPrimaryWeapon"] = "55d729d14bdc2d86028b456e";
inventorySlots["Holster"] = "55d729d84bdc2de3098b456b";
inventorySlots["Scabbard"] = "55d729e34bdc2d1b198b456d";
inventorySlots["FaceCover"] = "55d729e84bdc2d8a028b4569";
inventorySlots["Headwear"] = "55d729ef4bdc2d3a168b456c";
inventorySlots["TacticalVest"] = "55d729f74bdc2d87028b456e";
inventorySlots["SecuredContainer"] = "55d72a054bdc2d88028b456e";
inventorySlots["Backpack"] = "55d72a104bdc2d89028b4571";
inventorySlots["ArmorVest"] = "55d72a194bdc2d86028b456f";
inventorySlots["Pockets"] = "55d72a274bdc2de3098b456c";
inventorySlots["Earpiece"] = "5665b7164bdc2d144c8b4570";
inventorySlots["Dogtag"] = "59f0be1e86f77453be490939";
inventorySlots["Eyewear"] = "5a0ad9313f1241000e072755";
inventorySlots["ArmBand"] = "5b3f583786f77411d552fb2b";
})(inventorySlots || (exports.inventorySlots = inventorySlots = {}));
var Stashes;
(function (Stashes) {
Stashes["LEVEL1"] = "566abbc34bdc2d92178b4576";
Stashes["LEVEL2"] = "5811ce572459770cba1a34ea";
Stashes["LEVEL3"] = "5811ce662459770f6f490f32";
Stashes["LEVEL4"] = "5811ce772459770e9e5f9532";
})(Stashes || (exports.Stashes = Stashes = {}));
//# sourceMappingURL=configConsts.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"configConsts.js","sourceRoot":"","sources":["configConsts.ts"],"names":[],"mappings":"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"}

View File

@ -0,0 +1,297 @@
/* eslint-disable @typescript-eslint/naming-convention */
import type { IPreset } from "@spt/models/eft/common/IGlobals";
import type { Ixyz } from "@spt/models/eft/common/Ixyz";
import type { IPrefab } from "@spt/models/eft/common/tables/ICustomizationItem";
export interface ConfigItem
{
[itemId: string]: {
itemTplToClone: string;
overrideProperties: {
Prefab: {
path: string;
rcid: string;
};
ReverbVolume: number;
};
parentId: string;
fleaPriceRoubles: number;
handbookPriceRoubles: number;
handbookParentId: string;
locales: {
[locale: string]: {
name: string;
shortName: string;
description: string;
};
};
clearClonedProps: boolean;
addtoInventorySlots: string[];
addtoModSlots: boolean;
modSlot: string[];
ModdableItemWhitelist: string;
ModdableItemBlacklist: string;
addtoTraders: boolean;
traderId: traderIDs;
traderItems: {
unlimitedCount: boolean;
stackObjectsCount: number;
}[];
barterScheme: {
count: number;
_tpl: string;
}[];
loyallevelitems: number;
addtoBots: boolean;
addtoStaticLootContainers: boolean;
StaticLootContainers: string;
Probability: number;
masteries: boolean;
masterySections: {
Name: string;
Templates: string[];
Level2: number;
Level3: number;
};
addweaponpreset: boolean;
weaponpresets: IPreset[];
addtoHallOfFame: boolean;
addtoSpecialSlots: boolean;
};
};
export interface HeadConfig {
path: string;
addHeadToPlayer: boolean;
side: string[];
locales: {
[key: string]: string; // This allows dynamic locale keys, such as "en", "ru", etc.
};
}
export interface VoiceConfig
{
[voiceId: string]: {
locales: {
[key: string]: string; // This allows dynamic locale keys, such as "en", "ru", etc.
};
name: string;
addVoiceToPlayer: boolean;
sideSpecificVoice: string;
addToBotTypes: Record<string, number>;
};
}
export interface ClothingConfig {
type: string; // The type of clothing item, e.g., "bottom"
suiteId: string; // ID of the clothing item's suite
outfitId: string; // Unique identifier for the outfit
bottomId?: string; // ID of the clothing item's bottom
locales: {
[key: string]: string; // This allows dynamic locale keys, such as "en", "ru", etc.
};
topId?: string; // ID of the clothing item's top
handsId?: string; // ID of the clothing item's hands
side: string[]; // Side of the clothing item, e.g., ["usec", "bear"]
bottomBundlePath?: string; // Path to the clothing item's asset bundle
topBundlePath?: string; // Path to the clothing item's top asset bundle
handsBundlePath?: string; // Path to the clothing item's hands asset bundle
watchPrefab?: IPrefab; // Path to the watch prefab asset bundle
watchPosition?: Ixyz; // Position of the watch on the clothing item
watchRotation?: Ixyz; // Rotation of the watch on the clothing item
handsBaseID?: string; // ID of the clothing item's hands base
traderId: string; // Trader who sells this item, e.g., "RAGMAN"
loyaltyLevel: number; // Loyalty level required to purchase the item
profileLevel: number; // Player profile level required to purchase the item
standing: number; // Minimum standing required with the trader
currencyId: string; // Currency type for the item's price, e.g., "ROUBLES"
price: number; // Cost of the clothing item in the specified currency
}
export enum traderIDs
{
MECHANIC = "5a7c2eca46aef81a7ca2145d",
SKIER = "58330581ace78e27b8b10cee",
PEACEKEEPER = "5935c25fb3acc3127c3d8cd9",
THERAPIST = "54cb57776803fa99248b456e",
PRAPOR = "54cb50c76803fa8b248b4571",
JAEGAR = "5c0647fdd443bc2504c2d371",
RAGMAN = "5ac3b934156ae10c4430e83c",
FENCE = "579dc571d53a0658a154fbec",
ARTEM = "66bf757f27d0b097db0acea5",
BADGER = "bd3a8b28356d9c6509966546"
}
export enum currencyIDs
{
ROUBLES = "5449016a4bdc2d6f028b456f",
EUROS = "569668774bdc2da2298b4568",
DOLLARS = "5696686a4bdc2da3298b456a"
}
export enum allBotTypes
{
// Arena Fighters
ARENAFIGHTER = "arenafighter",
ARENAFIGHTEREVENT = "arenafighterevent",
// Scavs
ASSAULT = "assault",
ASSAULTGROUP = "assaultgroup",
MARKSMAN = "marksman",
CRAZYASSAULTEVENT = "crazyassaultevent",
CURSEDASSAULT = "cursedassault",
// PMC's
BEAR = "bear",
USEC = "usec",
PMCBEAR = "pmcbear",
PMCUSEC = "pmcusec",
PMC = "pmcbot",
// ExUsec
EXUSEC = "exusec",
// Cultists
CULTISTPRIEST = "sectantpriest",
CULTISTWARRIOR = "sectantwarrior",
CULTISTONI = "sectantoni",
CULTISTPRIESTEVENT = "sectantpriestevent",
CULTISTPREDVESTNIK = "sectantpredvestnik",
CULTISTPRIZRAK = "sectantprizrak",
// BTR
BTR = "btrshooter",
// Spirits
SPIRITSPRING = "spiritspring",
SPIRITWINTER = "spiritwinter",
// Zombies
INFECTEDASSAULT = "infectedassault",
INFECTEDCIVIL = "infectedcivil",
INFECTEDLABORANT = "infectedlaborant",
INFECTEDPMC = "infectedpmc",
INFECTEDTAGILLA = "infectedtagilla",
// Santa
GIFTER = "gifter",
// Bosses & Followers
// Kaban
KABAN = "bossboar",
KABANSNIPER = "bossboarsniper",
FOLLOWERBOAR = "followerboar",
FOLLOWERBOARCLOSE1 = "followerboarclose1",
FOLLOWERBOARCLOSE2 = "followerboarclose2",
// Killa
KILLA = "bosskilla",
// Kolontay
KOLONTAY = "bosskolontay",
FOLLOWERKOLONTAYASSAULT = "followerkolontayassault",
FOLLOWERKOLONTAYSECURITY = "followerkolontaysecurity",
// Partisan
PARTISAN = "bosspartisan",
// Reshala
RESHALA = "bossbully",
FOLLOWERRESHALA = "followerbully",
// Gluhar
GLUHAR = "bossgluhar",
FOLLOWERGLUHARASSAULT = "followergluharassault",
FOLLOWERGLUHARSCOUT = "followergluharscout",
FOLLOWERGLUHARSECURITY = "followergluharsecurity",
FOLLOWERGLUHARSNIPER = "followergluharsnipe",
// Goons
KNIGHT = "bossknight",
FOLLOWERBIGPIPE = "followerbigpipe",
FOLLOWERBIRDEYE = "followerbirdeye",
// Shturman
SHTURMAN = "bosskojaniy",
FOLLOWERSHTURMAN = "followerkojaniy",
// Sanitar
SANITAR = "bosssanitar",
FOLLOWERSANITAR = "followersanitar",
// Tagilla
TAGILLA = "bosstagilla",
FOLLOWERTAGILLA = "followertagilla",
// Zryachiy
ZRYACHIY = "bosszryachiy",
FOLLOWERZRYACHIY = "followerzryachiy",
PEACEFULZRYACHIYEVENT = "peacefulzryachiyevent",
RAVANGEZRYACHIYEVENT = "ravengezryachiyevent",
// Traders
// Peacemaker
PEACEMAKER = "peacemaker",
// Skier
SKIER = "skier",
}
export enum inventorySlots
{
FirstPrimaryWeapon = "55d729c64bdc2d89028b4570",
SecondPrimaryWeapon = "55d729d14bdc2d86028b456e",
Holster = "55d729d84bdc2de3098b456b",
Scabbard = "55d729e34bdc2d1b198b456d",
FaceCover = "55d729e84bdc2d8a028b4569",
Headwear = "55d729ef4bdc2d3a168b456c",
TacticalVest = "55d729f74bdc2d87028b456e",
SecuredContainer = "55d72a054bdc2d88028b456e",
Backpack = "55d72a104bdc2d89028b4571",
ArmorVest = "55d72a194bdc2d86028b456f",
Pockets = "55d72a274bdc2de3098b456c",
Earpiece = "5665b7164bdc2d144c8b4570",
Dogtag = "59f0be1e86f77453be490939",
Eyewear = "5a0ad9313f1241000e072755",
ArmBand = "5b3f583786f77411d552fb2b"
}
export enum Stashes
{
LEVEL1 = "566abbc34bdc2d92178b4576",
LEVEL2 = "5811ce572459770cba1a34ea",
LEVEL3 = "5811ce662459770f6f490f32",
LEVEL4 = "5811ce772459770e9e5f9532"
}
export interface QuestZone
{
ZoneId: string;
ZoneName: string;
ZoneType: string;
FlareType?: string;
ZoneLocation: string;
Position: {
X: string;
Y: string;
Z: string;
};
Rotation: {
X: string;
Y: string;
Z: string;
};
Scale: {
X: string;
Y: string;
Z: string;
};
}

View File

@ -0,0 +1,83 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ItemBaseClassMap = void 0;
exports.ItemBaseClassMap = {
"AMMO": "5485a8684bdc2da71d8b4567",
"AMMO_CONTAINER": "543be5cb4bdc2deb348b4568",
"ARMORED_EQUIPMENT": "57bef4c42459772e8d35a53b",
"ARMBAND": "5b3f15d486f77432d0509248",
"ARMOR": "5448e54d4bdc2dcc718b4568",
"ARMORPLATE": "644120aa86ffbe10ee032b6f",
"ASSAULT_CARBINE": "5447b5fc4bdc2d87278b4567",
"ASSAULT_RIFLE": "5447b5f14bdc2d61278b4567",
"ASSAULT_SCOPE": "55818add4bdc2d5b648b456f",
"BACKPACK": "5448e53e4bdc2d60728b4567",
"BARREL": "555ef6e44bdc2de9068b457e",
"BATTERY": "57864ee62459775490116fc1",
"BIPOD": "55818afb4bdc2dde698b456d",
"BUILDING_MATERIAL": "57864ada245977548638de91",
"CHARGING_HANDLE": "55818a6f4bdc2db9688b456b",
"CHEST_RIG": "5448e5284bdc2dcb718b4567",
"COMMON_CONTAINER": "5795f317245977243854e041",
"COMPACT_REFLEX_SIGHT": "55818acf4bdc2dde698b456b",
"COMPASS": "5f4fbaaca5573a5ac31db429",
"DRINK": "5448e8d64bdc2dce718b4568",
"DRUG": "5448f3a14bdc2d27728b4569",
"ELECTRONICS": "57864a66245977548f04a81f",
"FACECOVER": "5a341c4686f77469e155819e",
"FLASHLIGHT": "55818b084bdc2d5b648b4571",
"FLASHHIDER": "550aa4bf4bdc2dd6348b456b",
"FOOD": "5448e8d04bdc2ddf718b4569",
"FOREGRIP": "55818af64bdc2d5b648b4570",
"FUEL": "5d650c3e815116009f6201d2",
"GAS_BLOCK": "56ea9461d2720b67698b456f",
"GRENADE_LAUNCHER": "5447bedf4bdc2d87278b4568",
"HANDGUN": "5447b5cf4bdc2d65278b4567",
"HANDGUARD": "55818a104bdc2db9688b4569",
"HEADPHONES": "5645bcb74bdc2ded0b8b4578",
"HEADWEAR": "5a341c4086f77401f2541505",
"INFO": "5448ecbe4bdc2d60728b4568",
"INVENTORY": "55d720f24bdc2d88028b456d",
"IRON_SIGHT": "55818ac54bdc2d5b648b456e",
"KEYCARD": "5c164d2286f774194c5e69fa",
"KEYMECHANICAL": "5c99f98d86f7745c314214b3",
"KEY_CARD": "5c164d2286f774194c5e69fa",
"KNIFE": "5447e1d04bdc2dff2f8b4567",
"LOCKING_CONTAINER": "5671435f4bdc2d96058b4569",
"LOOT_CONTAINER": "566965d44bdc2d814c8b4571",
"LUBRICANT": "57864e4c24597754843f8723",
"MACHINEGUN": "5447bed64bdc2d97278b4568",
"MAGAZINE": "5448bc234bdc2d3c308b4569",
"MAP": "567849dd4bdc2d150f8b456e",
"MARKSMAN_RIFLE": "5447b6194bdc2d67278b4567",
"MEDICAL_ITEM": "5448f3ac4bdc2dce718b4569",
"MEDICAL_SUPPLIES": "57864c8c245977548867e7f1",
"MEDITKIT": "5448f39d4bdc2d0a728b4568",
"MONEY": "543be5dd4bdc2deb348b4569",
"MUZZLECOMBO": "550aa4dd4bdc2dc9348b4569",
"MOUNT": "55818b224bdc2dde698b456f",
"NIGHTVISION": "5a2c3a9486f774688b05e574",
"OTHER": "590c745b86f7743cc433c5f2",
"PISTOLGRIP": "55818a684bdc2ddd698b456d",
"POCKETS": "557596e64bdc2dc2118b4571",
"PORTABLE_RANGEFINDER": "61605ddea09d851a0a0c1bbc",
"RANDOMLOOTCONTAINER": "62f109593b54472778797866",
"RECEIVER": "55818a304bdc2db5418b457d",
"REFLEX_SIGHT": "55818ad54bdc2ddc698b4569",
"REPAIRKITS": "616eb7aea207f41933308f46",
"SCOPE": "55818ae44bdc2dde698b456c",
"SHOTGUN": "5447b6094bdc2dc3278b4567",
"SILENCER": "550aa4cd4bdc2dd8348b456c",
"SNIPER_RIFLE": "5447b6254bdc2dc3278b4568",
"SPECIAL_ITEM": "5447e0e74bdc2d3c308b4567",
"STASH": "566abbb64bdc2d144c8b457d",
"STATIONARY_CONT.": "567583764bdc2d98058b456e",
"STIMULANT": "5448f3a64bdc2d60728b456a",
"STOCK": "55818a594bdc2db9688b456a",
"THROWABLE_WEAPON": "543be6564bdc2df4348b4568",
"THERMALVISION": "5d21f59b6dbe99052b54ef83",
"TOOL": "57864bb7245977548b3b66c2",
"UBGL": "55818b014bdc2ddc698b456b",
"VIS_OBSERV_DEVICE": "5448e5724bdc2ddf718b4568",
};
//# sourceMappingURL=itemBaseClasses.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"itemBaseClasses.js","sourceRoot":"","sources":["itemBaseClasses.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAmC;IAC9D,MAAM,EAAE,0BAA0B;IAClC,gBAAgB,EAAE,0BAA0B;IAC5C,mBAAmB,EAAE,0BAA0B;IAC/C,SAAS,EAAE,0BAA0B;IACrC,OAAO,EAAE,0BAA0B;IACnC,YAAY,EAAE,0BAA0B;IACxC,iBAAiB,EAAE,0BAA0B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,0BAA0B;IACtC,QAAQ,EAAE,0BAA0B;IACpC,SAAS,EAAE,0BAA0B;IACrC,OAAO,EAAE,0BAA0B;IACnC,mBAAmB,EAAE,0BAA0B;IAC/C,iBAAiB,EAAE,0BAA0B;IAC7C,WAAW,EAAE,0BAA0B;IACvC,kBAAkB,EAAE,0BAA0B;IAC9C,sBAAsB,EAAE,0BAA0B;IAClD,SAAS,EAAE,0BAA0B;IACrC,OAAO,EAAE,0BAA0B;IACnC,MAAM,EAAE,0BAA0B;IAClC,aAAa,EAAE,0BAA0B;IACzC,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,0BAA0B;IACxC,MAAM,EAAE,0BAA0B;IAClC,UAAU,EAAE,0BAA0B;IACtC,MAAM,EAAE,0BAA0B;IAClC,WAAW,EAAE,0BAA0B;IACvC,kBAAkB,EAAE,0BAA0B;IAC9C,SAAS,EAAE,0BAA0B;IACrC,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,UAAU,EAAE,0BAA0B;IACtC,MAAM,EAAE,0BAA0B;IAClC,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,SAAS,EAAE,0BAA0B;IACrC,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,0BAA0B;IACtC,OAAO,EAAE,0BAA0B;IACnC,mBAAmB,EAAE,0BAA0B;IAC/C,gBAAgB,EAAE,0BAA0B;IAC5C,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,UAAU,EAAE,0BAA0B;IACtC,KAAK,EAAE,0BAA0B;IACjC,gBAAgB,EAAE,0BAA0B;IAC5C,cAAc,EAAE,0BAA0B;IAC1C,kBAAkB,EAAE,0BAA0B;IAC9C,UAAU,EAAE,0BAA0B;IACtC,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,0BAA0B;IACzC,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,0BAA0B;IACzC,OAAO,EAAE,0BAA0B;IACnC,YAAY,EAAE,0BAA0B;IACxC,SAAS,EAAE,0BAA0B;IACrC,sBAAsB,EAAE,0BAA0B;IAClD,qBAAqB,EAAE,0BAA0B;IACjD,UAAU,EAAE,0BAA0B;IACtC,cAAc,EAAE,0BAA0B;IAC1C,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,0BAA0B;IACnC,SAAS,EAAE,0BAA0B;IACrC,UAAU,EAAE,0BAA0B;IACtC,cAAc,EAAE,0BAA0B;IAC1C,cAAc,EAAE,0BAA0B;IAC1C,OAAO,EAAE,0BAA0B;IACnC,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,0BAA0B;IACvC,OAAO,EAAE,0BAA0B;IACnC,kBAAkB,EAAE,0BAA0B;IAC9C,eAAe,EAAE,0BAA0B;IAC3C,MAAM,EAAE,0BAA0B;IAClC,MAAM,EAAE,0BAA0B;IAClC,mBAAmB,EAAE,0BAA0B;CAChD,CAAC"}

View File

@ -0,0 +1,79 @@
export const ItemBaseClassMap: { [itemName: string]: string } = {
"AMMO": "5485a8684bdc2da71d8b4567",
"AMMO_CONTAINER": "543be5cb4bdc2deb348b4568",
"ARMORED_EQUIPMENT": "57bef4c42459772e8d35a53b",
"ARMBAND": "5b3f15d486f77432d0509248",
"ARMOR": "5448e54d4bdc2dcc718b4568",
"ARMORPLATE": "644120aa86ffbe10ee032b6f",
"ASSAULT_CARBINE": "5447b5fc4bdc2d87278b4567",
"ASSAULT_RIFLE": "5447b5f14bdc2d61278b4567",
"ASSAULT_SCOPE": "55818add4bdc2d5b648b456f",
"BACKPACK": "5448e53e4bdc2d60728b4567",
"BARREL": "555ef6e44bdc2de9068b457e",
"BATTERY": "57864ee62459775490116fc1",
"BIPOD": "55818afb4bdc2dde698b456d",
"BUILDING_MATERIAL": "57864ada245977548638de91",
"CHARGING_HANDLE": "55818a6f4bdc2db9688b456b",
"CHEST_RIG": "5448e5284bdc2dcb718b4567",
"COMMON_CONTAINER": "5795f317245977243854e041",
"COMPACT_REFLEX_SIGHT": "55818acf4bdc2dde698b456b",
"COMPASS": "5f4fbaaca5573a5ac31db429",
"DRINK": "5448e8d64bdc2dce718b4568",
"DRUG": "5448f3a14bdc2d27728b4569",
"ELECTRONICS": "57864a66245977548f04a81f",
"FACECOVER": "5a341c4686f77469e155819e",
"FLASHLIGHT": "55818b084bdc2d5b648b4571",
"FLASHHIDER": "550aa4bf4bdc2dd6348b456b",
"FOOD": "5448e8d04bdc2ddf718b4569",
"FOREGRIP": "55818af64bdc2d5b648b4570",
"FUEL": "5d650c3e815116009f6201d2",
"GAS_BLOCK": "56ea9461d2720b67698b456f",
"GRENADE_LAUNCHER": "5447bedf4bdc2d87278b4568",
"HANDGUN": "5447b5cf4bdc2d65278b4567",
"HANDGUARD": "55818a104bdc2db9688b4569",
"HEADPHONES": "5645bcb74bdc2ded0b8b4578",
"HEADWEAR": "5a341c4086f77401f2541505",
"INFO": "5448ecbe4bdc2d60728b4568",
"INVENTORY": "55d720f24bdc2d88028b456d",
"IRON_SIGHT": "55818ac54bdc2d5b648b456e",
"KEYCARD": "5c164d2286f774194c5e69fa",
"KEYMECHANICAL": "5c99f98d86f7745c314214b3",
"KEY_CARD": "5c164d2286f774194c5e69fa",
"KNIFE": "5447e1d04bdc2dff2f8b4567",
"LOCKING_CONTAINER": "5671435f4bdc2d96058b4569",
"LOOT_CONTAINER": "566965d44bdc2d814c8b4571",
"LUBRICANT": "57864e4c24597754843f8723",
"MACHINEGUN": "5447bed64bdc2d97278b4568",
"MAGAZINE": "5448bc234bdc2d3c308b4569",
"MAP": "567849dd4bdc2d150f8b456e",
"MARKSMAN_RIFLE": "5447b6194bdc2d67278b4567",
"MEDICAL_ITEM": "5448f3ac4bdc2dce718b4569",
"MEDICAL_SUPPLIES": "57864c8c245977548867e7f1",
"MEDITKIT": "5448f39d4bdc2d0a728b4568",
"MONEY": "543be5dd4bdc2deb348b4569",
"MUZZLECOMBO": "550aa4dd4bdc2dc9348b4569",
"MOUNT": "55818b224bdc2dde698b456f",
"NIGHTVISION": "5a2c3a9486f774688b05e574",
"OTHER": "590c745b86f7743cc433c5f2",
"PISTOLGRIP": "55818a684bdc2ddd698b456d",
"POCKETS": "557596e64bdc2dc2118b4571",
"PORTABLE_RANGEFINDER": "61605ddea09d851a0a0c1bbc",
"RANDOMLOOTCONTAINER": "62f109593b54472778797866",
"RECEIVER": "55818a304bdc2db5418b457d",
"REFLEX_SIGHT": "55818ad54bdc2ddc698b4569",
"REPAIRKITS": "616eb7aea207f41933308f46",
"SCOPE": "55818ae44bdc2dde698b456c",
"SHOTGUN": "5447b6094bdc2dc3278b4567",
"SILENCER": "550aa4cd4bdc2dd8348b456c",
"SNIPER_RIFLE": "5447b6254bdc2dc3278b4568",
"SPECIAL_ITEM": "5447e0e74bdc2d3c308b4567",
"STASH": "566abbb64bdc2d144c8b457d",
"STATIONARY_CONT.": "567583764bdc2d98058b456e",
"STIMULANT": "5448f3a64bdc2d60728b456a",
"STOCK": "55818a594bdc2db9688b456a",
"THROWABLE_WEAPON": "543be6564bdc2df4348b4568",
"THERMALVISION": "5d21f59b6dbe99052b54ef83",
"TOOL": "57864bb7245977548b3b66c2",
"UBGL": "55818b014bdc2ddc698b456b",
"VIS_OBSERV_DEVICE": "5448e5724bdc2ddf718b4568",
};

View File

@ -0,0 +1,85 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ItemHandbookCategoryMap = void 0;
exports.ItemHandbookCategoryMap = {
"AMMO": "5b47574386f77428ca22b346",
"AMMO_BOXES": "5b47574386f77428ca22b33c",
"AMMO_ROUNDS": "5b47574386f77428ca22b33b",
"BARTER": "5b47574386f77428ca22b33e",
"BARTER_BUILDING": "5b47574386f77428ca22b2ee",
"BARTER_ELECTRONICS": "5b47574386f77428ca22b2ef",
"BARTER_ENERGY": "5b47574386f77428ca22b2ed",
"BARTER_FLAMMABLE": "5b47574386f77428ca22b2f2",
"BARTER_HOUSEHOLD": "5b47574386f77428ca22b2f0",
"BARTER_MEDICAL": "5b47574386f77428ca22b2f3",
"BARTER_OTHERS": "5b47574386f77428ca22b2f4",
"BARTER_TOOLS": "5b47574386f77428ca22b2f6",
"BARTER_VALUABLES": "5b47574386f77428ca22b2f1",
"GEAR": "5b47574386f77428ca22b33f",
"GEAR_ARMOR": "5b5f701386f774093f2ecf0f",
"GEAR_BACKPACKS": "5b5f6f6c86f774093f2ecf0b",
"GEAR_CASES": "5b5f6fa186f77409407a7eb7",
"GEAR_COMPONENTS": "5b5f704686f77447ec5d76d7",
"GEAR_FACECOVERS": "5b47574386f77428ca22b32f",
"GEAR_HEADSETS": "5b5f6f3c86f774094242ef87",
"GEAR_HEADWEAR": "5b47574386f77428ca22b330",
"GEAR_RIGS": "5b5f6f8786f77447ed563642",
"GEAR_SECURED": "5b5f6fd286f774093f2ecf0d",
"GEAR_VISORS": "5b47574386f77428ca22b331",
"INFO": "5b47574386f77428ca22b341",
"KEYS": "5b47574386f77428ca22b342",
"KEYS_ELECTRONIC": "5c518ed586f774119a772aee",
"KEYS_MECHANIC": "5c518ec986f7743b68682ce2",
"MAPS": "5b47574386f77428ca22b343",
"MEDICAL": "5b47574386f77428ca22b344",
"MEDICAL_INJECTORS": "5b47574386f77428ca22b33a",
"MEDICAL_INJURY": "5b47574386f77428ca22b339",
"MEDICAL_MEDKITS": "5b47574386f77428ca22b338",
"MEDICAL_PILLS": "5b47574386f77428ca22b337",
"MODS": "5b5f71a686f77447ed5636ab",
"MODS_FUNCTIONAL": "5b5f71b386f774093f2ecf11",
"MODS_GEAR": "5b5f750686f774093e6cb503",
"MODS_VITAL": "5b5f75b986f77447ec5d7710",
"MOD_ASSAULT_SCOPE": "5b5f740a86f77447ec5d7706",
"MOD_AUX": "5b5f74cc86f77447ec5d770a",
"MOD_BARREL": "5b5f75c686f774094242f19f",
"MOD_BIPOD": "5b5f71c186f77409407a7ec0",
"MOD_CHARGE": "5b5f751486f77447ec5d770c",
"MOD_FLASHHIDER": "5b5f724c86f774093f2ecf15",
"MOD_FOREGRIP": "5b5f71de86f774093f2ecf13",
"MOD_GASBLOCK": "5b5f760586f774093e6cb509",
"MOD_HANDGUARD": "5b5f75e486f77447ec5d7712",
"MOD_IRON_SIGHT": "5b5f746686f77447ec5d7708",
"MOD_LAUNCHER": "5b5f752e86f774093e6cb505",
"MOD_LIGHTLASER": "5b5f736886f774094242f193",
"MOD_MAGAZINE": "5b5f754a86f774094242f19b",
"MOD_MOUNT": "5b5f755f86f77447ec5d770e",
"MOD_MICRO_DOT": "5b5f744786f774094242f197",
"MOD_MUZZLE": "5b5f724186f77447ed5636ad",
"MOD_OPTIC": "5b5f748386f774093e6cb501",
"MOD_PISTOLGRIP": "5b5f761f86f774094242f1a1",
"MOD_RECEIVER": "5b5f764186f77447ec5d7714",
"MOD_SIGHT": "5b5f73ec86f774093e6cb4fd",
"MOD_STOCK": "5b5f757486f774093e6cb507",
"MOD_SUPPRESSOR": "5b5f731a86f774093e6cb4f9",
"MONEY": "5b5f78b786f77447ed5636af",
"PROVISIONS": "5b47574386f77428ca22b340",
"PROVISIONS_DRINKS": "5b47574386f77428ca22b335",
"PROVISIONS_FOOD": "5b47574386f77428ca22b336",
"QUEST": "5b619f1a86f77450a702a6f3",
"SPEC": "5b47574386f77428ca22b345",
"WEAPONS": "5b5f78dc86f77409407a7f8e",
"WEAPONS_ASSAULTRIFLES": "5b5f78fc86f77409407a7f90",
"WEAPONS_BOLTACTION": "5b5f798886f77447ed5636b5",
"WEAPONS_CARBINES": "5b5f78e986f77447ed5636b1",
"WEAPONS_DMR": "5b5f791486f774093f2ed3be",
"WEAPONS_GL": "5b5f79d186f774093f2ed3c2",
"WEAPONS_MG": "5b5f79a486f77409407a7f94",
"WEAPONS_MELEE": "5b5f7a0886f77409407a7f96",
"WEAPONS_PISTOLS": "5b5f792486f77447ed5636b3",
"WEAPONS_SHOTGUNS": "5b5f794b86f77409407a7f92",
"WEAPONS_SMG": "5b5f796a86f774093f2ed3c0",
"WEAPONS_SPECIAL": "5b5f79eb86f77447ed5636b7",
"WEAPONS_THROW": "5b5f7a2386f774093f2ed3c4",
};
//# sourceMappingURL=itemHandbookCategories.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"itemHandbookCategories.js","sourceRoot":"","sources":["itemHandbookCategories.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAmC;IACrE,MAAM,EAAE,0BAA0B;IAClC,YAAY,EAAE,0BAA0B;IACxC,aAAa,EAAE,0BAA0B;IACzC,QAAQ,EAAE,0BAA0B;IACpC,iBAAiB,EAAE,0BAA0B;IAC7C,oBAAoB,EAAE,0BAA0B;IAChD,eAAe,EAAE,0BAA0B;IAC3C,kBAAkB,EAAE,0BAA0B;IAC9C,kBAAkB,EAAE,0BAA0B;IAC9C,gBAAgB,EAAE,0BAA0B;IAC5C,eAAe,EAAE,0BAA0B;IAC3C,cAAc,EAAE,0BAA0B;IAC1C,kBAAkB,EAAE,0BAA0B;IAC9C,MAAM,EAAE,0BAA0B;IAClC,YAAY,EAAE,0BAA0B;IACxC,gBAAgB,EAAE,0BAA0B;IAC5C,YAAY,EAAE,0BAA0B;IACxC,iBAAiB,EAAE,0BAA0B;IAC7C,iBAAiB,EAAE,0BAA0B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,eAAe,EAAE,0BAA0B;IAC3C,WAAW,EAAE,0BAA0B;IACvC,cAAc,EAAE,0BAA0B;IAC1C,aAAa,EAAE,0BAA0B;IACzC,MAAM,EAAE,0BAA0B;IAClC,MAAM,EAAE,0BAA0B;IAClC,iBAAiB,EAAE,0BAA0B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,MAAM,EAAE,0BAA0B;IAClC,SAAS,EAAE,0BAA0B;IACrC,mBAAmB,EAAE,0BAA0B;IAC/C,gBAAgB,EAAE,0BAA0B;IAC5C,iBAAiB,EAAE,0BAA0B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,MAAM,EAAE,0BAA0B;IAClC,iBAAiB,EAAE,0BAA0B;IAC7C,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,mBAAmB,EAAE,0BAA0B;IAC/C,SAAS,EAAE,0BAA0B;IACrC,YAAY,EAAE,0BAA0B;IACxC,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,0BAA0B;IACxC,gBAAgB,EAAE,0BAA0B;IAC5C,cAAc,EAAE,0BAA0B;IAC1C,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,0BAA0B;IAC3C,gBAAgB,EAAE,0BAA0B;IAC5C,cAAc,EAAE,0BAA0B;IAC1C,gBAAgB,EAAE,0BAA0B;IAC5C,cAAc,EAAE,0BAA0B;IAC1C,WAAW,EAAE,0BAA0B;IACvC,eAAe,EAAE,0BAA0B;IAC3C,YAAY,EAAE,0BAA0B;IACxC,WAAW,EAAE,0BAA0B;IACvC,gBAAgB,EAAE,0BAA0B;IAC5C,cAAc,EAAE,0BAA0B;IAC1C,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,0BAA0B;IACvC,gBAAgB,EAAE,0BAA0B;IAC5C,OAAO,EAAE,0BAA0B;IACnC,YAAY,EAAE,0BAA0B;IACxC,mBAAmB,EAAE,0BAA0B;IAC/C,iBAAiB,EAAE,0BAA0B;IAC7C,OAAO,EAAE,0BAA0B;IACnC,MAAM,EAAE,0BAA0B;IAClC,SAAS,EAAE,0BAA0B;IACrC,uBAAuB,EAAE,0BAA0B;IACnD,oBAAoB,EAAE,0BAA0B;IAChD,kBAAkB,EAAE,0BAA0B;IAC9C,aAAa,EAAE,0BAA0B;IACzC,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,0BAA0B;IAC3C,iBAAiB,EAAE,0BAA0B;IAC7C,kBAAkB,EAAE,0BAA0B;IAC9C,aAAa,EAAE,0BAA0B;IACzC,iBAAiB,EAAE,0BAA0B;IAC7C,eAAe,EAAE,0BAA0B;CAC5C,CAAC"}

View File

@ -0,0 +1,81 @@
export const ItemHandbookCategoryMap: { [itemName: string]: string } = {
"AMMO": "5b47574386f77428ca22b346",
"AMMO_BOXES": "5b47574386f77428ca22b33c",
"AMMO_ROUNDS": "5b47574386f77428ca22b33b",
"BARTER": "5b47574386f77428ca22b33e",
"BARTER_BUILDING": "5b47574386f77428ca22b2ee",
"BARTER_ELECTRONICS": "5b47574386f77428ca22b2ef",
"BARTER_ENERGY": "5b47574386f77428ca22b2ed",
"BARTER_FLAMMABLE": "5b47574386f77428ca22b2f2",
"BARTER_HOUSEHOLD": "5b47574386f77428ca22b2f0",
"BARTER_MEDICAL": "5b47574386f77428ca22b2f3",
"BARTER_OTHERS": "5b47574386f77428ca22b2f4",
"BARTER_TOOLS": "5b47574386f77428ca22b2f6",
"BARTER_VALUABLES": "5b47574386f77428ca22b2f1",
"GEAR": "5b47574386f77428ca22b33f",
"GEAR_ARMOR": "5b5f701386f774093f2ecf0f",
"GEAR_BACKPACKS": "5b5f6f6c86f774093f2ecf0b",
"GEAR_CASES": "5b5f6fa186f77409407a7eb7",
"GEAR_COMPONENTS": "5b5f704686f77447ec5d76d7",
"GEAR_FACECOVERS": "5b47574386f77428ca22b32f",
"GEAR_HEADSETS": "5b5f6f3c86f774094242ef87",
"GEAR_HEADWEAR": "5b47574386f77428ca22b330",
"GEAR_RIGS": "5b5f6f8786f77447ed563642",
"GEAR_SECURED": "5b5f6fd286f774093f2ecf0d",
"GEAR_VISORS": "5b47574386f77428ca22b331",
"INFO": "5b47574386f77428ca22b341",
"KEYS": "5b47574386f77428ca22b342",
"KEYS_ELECTRONIC": "5c518ed586f774119a772aee",
"KEYS_MECHANIC": "5c518ec986f7743b68682ce2",
"MAPS": "5b47574386f77428ca22b343",
"MEDICAL": "5b47574386f77428ca22b344",
"MEDICAL_INJECTORS": "5b47574386f77428ca22b33a",
"MEDICAL_INJURY": "5b47574386f77428ca22b339",
"MEDICAL_MEDKITS": "5b47574386f77428ca22b338",
"MEDICAL_PILLS": "5b47574386f77428ca22b337",
"MODS": "5b5f71a686f77447ed5636ab",
"MODS_FUNCTIONAL": "5b5f71b386f774093f2ecf11",
"MODS_GEAR": "5b5f750686f774093e6cb503",
"MODS_VITAL": "5b5f75b986f77447ec5d7710",
"MOD_ASSAULT_SCOPE": "5b5f740a86f77447ec5d7706",
"MOD_AUX": "5b5f74cc86f77447ec5d770a",
"MOD_BARREL": "5b5f75c686f774094242f19f",
"MOD_BIPOD": "5b5f71c186f77409407a7ec0",
"MOD_CHARGE": "5b5f751486f77447ec5d770c",
"MOD_FLASHHIDER": "5b5f724c86f774093f2ecf15",
"MOD_FOREGRIP": "5b5f71de86f774093f2ecf13",
"MOD_GASBLOCK": "5b5f760586f774093e6cb509",
"MOD_HANDGUARD": "5b5f75e486f77447ec5d7712",
"MOD_IRON_SIGHT": "5b5f746686f77447ec5d7708",
"MOD_LAUNCHER": "5b5f752e86f774093e6cb505",
"MOD_LIGHTLASER": "5b5f736886f774094242f193",
"MOD_MAGAZINE": "5b5f754a86f774094242f19b",
"MOD_MOUNT": "5b5f755f86f77447ec5d770e",
"MOD_MICRO_DOT": "5b5f744786f774094242f197",
"MOD_MUZZLE": "5b5f724186f77447ed5636ad",
"MOD_OPTIC": "5b5f748386f774093e6cb501",
"MOD_PISTOLGRIP": "5b5f761f86f774094242f1a1",
"MOD_RECEIVER": "5b5f764186f77447ec5d7714",
"MOD_SIGHT": "5b5f73ec86f774093e6cb4fd",
"MOD_STOCK": "5b5f757486f774093e6cb507",
"MOD_SUPPRESSOR": "5b5f731a86f774093e6cb4f9",
"MONEY": "5b5f78b786f77447ed5636af",
"PROVISIONS": "5b47574386f77428ca22b340",
"PROVISIONS_DRINKS": "5b47574386f77428ca22b335",
"PROVISIONS_FOOD": "5b47574386f77428ca22b336",
"QUEST": "5b619f1a86f77450a702a6f3",
"SPEC": "5b47574386f77428ca22b345",
"WEAPONS": "5b5f78dc86f77409407a7f8e",
"WEAPONS_ASSAULTRIFLES": "5b5f78fc86f77409407a7f90",
"WEAPONS_BOLTACTION": "5b5f798886f77447ed5636b5",
"WEAPONS_CARBINES": "5b5f78e986f77447ed5636b1",
"WEAPONS_DMR": "5b5f791486f774093f2ed3be",
"WEAPONS_GL": "5b5f79d186f774093f2ed3c2",
"WEAPONS_MG": "5b5f79a486f77409407a7f94",
"WEAPONS_MELEE": "5b5f7a0886f77409407a7f96",
"WEAPONS_PISTOLS": "5b5f792486f77447ed5636b3",
"WEAPONS_SHOTGUNS": "5b5f794b86f77409407a7f92",
"WEAPONS_SMG": "5b5f796a86f774093f2ed3c0",
"WEAPONS_SPECIAL": "5b5f79eb86f77447ed5636b7",
"WEAPONS_THROW": "5b5f7a2386f774093f2ed3c4",
};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.1.13.0
newestVersion=
category="1,"
nexusFileStatus=1
installationFile=Additional Clothing USEC 310.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-01-13T13:27:59Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1

View File

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

View File

@ -0,0 +1,335 @@
{
"manifest": [
{
"key": "Hands/HandsMC_PCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/TopMC_PCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/AdaptiveUCON.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsAdaptiveUCON.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USEC_RaidAggressor.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_RaidAggressor.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USECParkaBL.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsParkaBL.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USECParkaMC.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsParkaMC.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USEC_MC_softshell.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/Hands_MC_softshell.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/MCbirdeye.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsBadlandsPCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/TopBadlandsPCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsBlackPCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/TopBlackPCU.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsPredatorlynx.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USEClynxPredator.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsODlynx.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/USEClynxOD.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/PredatorBirdeye.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/FlecktarnCombat.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/FlecktarnBirdeye.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/BadlandsBirdeye.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/Pants_BL_Knight.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/MultitarnG3.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/AtacsUCONBigPipe.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/FlecktarnSPN.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsSPNFlecktarn.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Tops/MultitarnSPN.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsSPNMultitarn.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
},
{
"key": "Bottoms/ReconUCON.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/MultitarnUFPro.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/UCONBirdeye.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Bottoms/G3FieldMC.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Tops/TopCarinthiaUCON.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/characters/character/skeleton.bundle"
]
},
{
"key": "Hands/HandsCarinthiaUCON.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/content/hands/usec/materials/watch_usec_textures",
"assets/content/textures/holemanager/round_spec_mask.bundle",
"assets/content/hands/bear/bear_watch.bundle"
]
}
]
}

Some files were not shown because too many files have changed in this diff Show More