0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-13 02:30:43 -05:00

Biome Configuration Updates (#1042)

See 0d1e1ba3591458bb195812232d3b8c3345abbeaa for actual changes. The
rest is from running the `style:fix` script.

- Consolidated ignores
- Enabled for `ModCompilerService.ts`
- Added a format ignore line to `ModCompilerService.ts` to prevent
mappings from being affected
- Enabled for `jsonc` file types

---------

Co-authored-by: Chomp <27521899+chompDev@users.noreply.github.com>
This commit is contained in:
Refringe 2025-01-07 10:36:08 -05:00 committed by GitHub
parent f1b1dd46eb
commit 7190557805
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 596 additions and 602 deletions

View File

@ -11,6 +11,9 @@
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.organizeImports.biome": "explicit", "source.organizeImports.biome": "explicit",
"quickfix.biome": "explicit" "quickfix.biome": "explicit"
},
"[jsonc]": {
"editor.defaultFormatter": "biomejs.biome"
} }
}, },
"extensions": { "extensions": {
@ -31,16 +34,10 @@
"runtimeVersion": "22.12.0", "runtimeVersion": "22.12.0",
"runtimeExecutable": "tsx", "runtimeExecutable": "tsx",
"request": "launch", "request": "launch",
"runtimeArgs": [ "runtimeArgs": ["watch", "--clear-screen=false"],
"watch",
"--clear-screen=false"
],
"console": "integratedTerminal", "console": "integratedTerminal",
"internalConsoleOptions": "neverOpen", "internalConsoleOptions": "neverOpen",
"skipFiles": [ "skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**"]
"<node_internals>/**",
"${workspaceFolder}/node_modules/**",
],
}, },
{ {
"name": "Run Vitest Tests", "name": "Run Vitest Tests",
@ -48,16 +45,10 @@
"runtimeVersion": "22.12.0", "runtimeVersion": "22.12.0",
"runtimeExecutable": "npm", "runtimeExecutable": "npm",
"request": "launch", "request": "launch",
"runtimeArgs": [ "runtimeArgs": ["run", "test"],
"run",
"test"
],
"console": "integratedTerminal", "console": "integratedTerminal",
"internalConsoleOptions": "neverOpen", "internalConsoleOptions": "neverOpen",
"skipFiles": [ "skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**"]
"<node_internals>/**",
"${workspaceFolder}/node_modules/**",
],
} }
] ]
} }

View File

@ -8522,209 +8522,239 @@
"associatedEvent": "Promo", "associatedEvent": "Promo",
"maxToSendPlayer": 5 "maxToSendPlayer": 5
}, },
"NewYear2024": { "NewYear2024": {
"items": [{ "items": [
"_id": "6773b39ccf4c2fe4e50a7ec3", {
"_tpl": "67124dcfa3541f2a1f0e788b", "_id": "6773b39ccf4c2fe4e50a7ec3",
"upd": { "_tpl": "67124dcfa3541f2a1f0e788b",
"FireMode": { "upd": {
"FireMode": "single" "FireMode": {
}, "FireMode": "single"
"Repairable": { },
"Durability": 100, "Repairable": {
"MaxDurability": 100 "Durability": 100,
} "MaxDurability": 100
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec4",
"_tpl": "6719023b612cc94b9008e78c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_stock"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec5",
"_tpl": "6709133fa532466d5403fb7c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_magazine"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec6",
"_tpl": "670fd0a8d8d4eae4790c8187",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_barrel"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec7",
"_tpl": "6710cea62bb09af72f0e6bf8",
"parentId": "6773b39ccf4c2fe4e50a7ec6",
"slotId": "mod_mount"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec8",
"_tpl": "57d17c5e2459775a5c57d17d",
"parentId": "6773b39ccf4c2fe4e50a7ec7",
"slotId": "mod_tactical_003"
}, {
"_id": "6773b39ccf4c2fe4e50a7ec9",
"_tpl": "6165ac8c290d254f5e6b2f6c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_scope"
}, {
"_id": "6773b39ccf4c2fe4e50a7ecb",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ecd",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ecf",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed1",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed3",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed5",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed6",
"_tpl": "5ab8e79e86f7742d8b372e78",
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed7",
"_tpl": "65732688d9d89ff7ac0d9c4c",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_front"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed8",
"_tpl": "657326978c1cc6dcd9098b56",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_back"
}, {
"_id": "6773b39ccf4c2fe4e50a7ed9",
"_tpl": "657326a28c1cc6dcd9098b5a",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_left"
}, {
"_id": "6773b39ccf4c2fe4e50a7eda",
"_tpl": "657326b08c1cc6dcd9098b5e",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "soft_armor_right"
}, {
"_id": "6773b39ccf4c2fe4e50a7edb",
"_tpl": "657326bc5d3a3129fb05f36b",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Collar"
}, {
"_id": "6773b39ccf4c2fe4e50a7edc",
"_tpl": "656f611f94b480b8a500c0db",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Front_plate"
}, {
"_id": "6773b39ccf4c2fe4e50a7edd",
"_tpl": "65573fa5655447403702a816",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Back_plate"
}, {
"_id": "6773b39ccf4c2fe4e50a7ede",
"_tpl": "675956062f6ddfe8ff0e2806",
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7edf",
"_tpl": "676307c004856a0b3c0dfffd",
"parentId": "6773b39ccf4c2fe4e50a7ede",
"slotId": "Helmet_top"
}, {
"_id": "6773b39ccf4c2fe4e50a7ee0",
"_tpl": "676307b4d9ec0af3d9001fa8",
"parentId": "6773b39ccf4c2fe4e50a7ede",
"slotId": "Helmet_back"
}, {
"_id": "6773b39ccf4c2fe4e50a7ee2",
"_tpl": "674589d98dd67746010329e6",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ee4",
"_tpl": "67458794e21e5d724e066976",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ee6",
"_tpl": "5d40407c86f774318526545a",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7ee8",
"_tpl": "5d40407c86f774318526545a",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7eea",
"_tpl": "5d403f9186f7743cac3f229b",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}, {
"_id": "6773b39ccf4c2fe4e50a7eec",
"_tpl": "5d403f9186f7743cac3f229b",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
} }
], },
"sender": "System", "parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec4",
"_tpl": "6719023b612cc94b9008e78c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_stock"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec5",
"_tpl": "6709133fa532466d5403fb7c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_magazine"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec6",
"_tpl": "670fd0a8d8d4eae4790c8187",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_barrel"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec7",
"_tpl": "6710cea62bb09af72f0e6bf8",
"parentId": "6773b39ccf4c2fe4e50a7ec6",
"slotId": "mod_mount"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec8",
"_tpl": "57d17c5e2459775a5c57d17d",
"parentId": "6773b39ccf4c2fe4e50a7ec7",
"slotId": "mod_tactical_003"
},
{
"_id": "6773b39ccf4c2fe4e50a7ec9",
"_tpl": "6165ac8c290d254f5e6b2f6c",
"parentId": "6773b39ccf4c2fe4e50a7ec3",
"slotId": "mod_scope"
},
{
"_id": "6773b39ccf4c2fe4e50a7ecb",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ecd",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ecf",
"_tpl": "6709133fa532466d5403fb7c",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed1",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed3",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed5",
"_tpl": "5c0d591486f7744c505b416f",
"upd": {
"StackObjectsCount": 20
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed6",
"_tpl": "5ab8e79e86f7742d8b372e78",
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed7",
"_tpl": "65732688d9d89ff7ac0d9c4c",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_front"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed8",
"_tpl": "657326978c1cc6dcd9098b56",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_back"
},
{
"_id": "6773b39ccf4c2fe4e50a7ed9",
"_tpl": "657326a28c1cc6dcd9098b5a",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Soft_armor_left"
},
{
"_id": "6773b39ccf4c2fe4e50a7eda",
"_tpl": "657326b08c1cc6dcd9098b5e",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "soft_armor_right"
},
{
"_id": "6773b39ccf4c2fe4e50a7edb",
"_tpl": "657326bc5d3a3129fb05f36b",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Collar"
},
{
"_id": "6773b39ccf4c2fe4e50a7edc",
"_tpl": "656f611f94b480b8a500c0db",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Front_plate"
},
{
"_id": "6773b39ccf4c2fe4e50a7edd",
"_tpl": "65573fa5655447403702a816",
"parentId": "6773b39ccf4c2fe4e50a7ed6",
"slotId": "Back_plate"
},
{
"_id": "6773b39ccf4c2fe4e50a7ede",
"_tpl": "675956062f6ddfe8ff0e2806",
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7edf",
"_tpl": "676307c004856a0b3c0dfffd",
"parentId": "6773b39ccf4c2fe4e50a7ede",
"slotId": "Helmet_top"
},
{
"_id": "6773b39ccf4c2fe4e50a7ee0",
"_tpl": "676307b4d9ec0af3d9001fa8",
"parentId": "6773b39ccf4c2fe4e50a7ede",
"slotId": "Helmet_back"
},
{
"_id": "6773b39ccf4c2fe4e50a7ee2",
"_tpl": "674589d98dd67746010329e6",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ee4",
"_tpl": "67458794e21e5d724e066976",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ee6",
"_tpl": "5d40407c86f774318526545a",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7ee8",
"_tpl": "5d40407c86f774318526545a",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7eea",
"_tpl": "5d403f9186f7743cac3f229b",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
},
{
"_id": "6773b39ccf4c2fe4e50a7eec",
"_tpl": "5d403f9186f7743cac3f229b",
"upd": {
"StackObjectsCount": 1
},
"parentId": "6773b39ccf4c2fe4e50a7ec2",
"slotId": "main"
}
],
"sender": "System",
"messageText": "New year present!", "messageText": "New year present!",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"associatedEvent": "Promo", "associatedEvent": "Promo",
"maxToSendPlayer": 5 "maxToSendPlayer": 5
} }
} }
} }

View File

@ -1411,7 +1411,7 @@
"_type": "opened case - walter event quest", "_type": "opened case - walter event quest",
"rewardCount": 4, "rewardCount": 4,
"foundInRaid": true, "foundInRaid": true,
"rewardTplPool": {"67409848d0b2f8eb9b034db9": 1} "rewardTplPool": { "67409848d0b2f8eb9b034db9": 1 }
}, },
"674098588466ebb03408b210": { "674098588466ebb03408b210": {
"_type": "opened box - walter event quest", "_type": "opened box - walter event quest",
@ -1596,5 +1596,5 @@
"skillGainMultiplers": { "skillGainMultiplers": {
"Strength": 1 "Strength": 1
}, },
"deprioritisedMoneyContainers": ["590c60fc86f77412b13fddcf", "5d235bb686f77443f4331278"] "deprioritisedMoneyContainers": ["590c60fc86f77412b13fddcf", "5d235bb686f77443f4331278"]
} }

View File

@ -52,12 +52,12 @@
"66da1b546916142b3b022777", "66da1b546916142b3b022777",
"670ad7f1ad195290cd00da7a", "670ad7f1ad195290cd00da7a",
"66ec2aa6daf127599c0c31f1", "66ec2aa6daf127599c0c31f1",
"67654a6759116d347b0bfb86", "67654a6759116d347b0bfb86",
"5751916f24597720a27126df", "5751916f24597720a27126df",
"57518f7724597720a31c09ab", "57518f7724597720a31c09ab",
"57518fd424597720c85dbaaa", "57518fd424597720c85dbaaa",
"5a043f2c86f7741aa57b5145", "5a043f2c86f7741aa57b5145",
"5a0448bc86f774736f14efa8" "5a0448bc86f774736f14efa8"
], ],
"rewardItemTypeBlacklist": ["65649eb40bf0ed77b8044453"], "rewardItemTypeBlacklist": ["65649eb40bf0ed77b8044453"],
"lootableItemBlacklist": ["660bbc47c38b837877075e47", "660bc341c38b837877075e4c"], "lootableItemBlacklist": ["660bbc47c38b837877075e47", "660bc341c38b837877075e4c"],
@ -122,21 +122,21 @@
"671d8b38b769f0d88c0950f8", "671d8b38b769f0d88c0950f8",
"671d8b8c0959c721a50ca838", "671d8b8c0959c721a50ca838",
"660bc341c38b837877075e4c", "660bc341c38b837877075e4c",
"67409848d0b2f8eb9b034db9", "67409848d0b2f8eb9b034db9",
"67449b6c89d5e1ddc603f504", "67449b6c89d5e1ddc603f504",
"675aab0d6b6addc02a08f097", "675aab0d6b6addc02a08f097",
"675aaae1dcf102478202c537", "675aaae1dcf102478202c537",
"675aaa9a3107dac100063331", "675aaa9a3107dac100063331",
"675aaae75a3ab8372d0b02a7", "675aaae75a3ab8372d0b02a7",
"675aaab74bca0b001d02f356", "675aaab74bca0b001d02f356",
"675aaa8f7f3c962069072b27", "675aaa8f7f3c962069072b27",
"675aaaf674a7619a5304c233", "675aaaf674a7619a5304c233",
"675aaa003107dac10006332f", "675aaa003107dac10006332f",
"6764207f2fa5e32733055c4a", "6764207f2fa5e32733055c4a",
"6764202ae307804338014c1a", "6764202ae307804338014c1a",
"6707d13e4e617ec94f0e5631", "6707d13e4e617ec94f0e5631",
"675dc9d37ae1a8792107ca96", "675dc9d37ae1a8792107ca96",
"675dcb0545b1a2d108011b2b" "675dcb0545b1a2d108011b2b"
], ],
"bossItems": [ "bossItems": [
"6275303a9f372d6ea97f9ec7", "6275303a9f372d6ea97f9ec7",
@ -183,204 +183,204 @@
"63a898a328e385334e0640a5": { "price": 20000, "parentId": "5b5f6fa186f77409407a7eb7" }, "63a898a328e385334e0640a5": { "price": 20000, "parentId": "5b5f6fa186f77409407a7eb7" },
"63a897c6b1ff6e29734fcc95": { "price": 40000, "parentId": "5b5f6fa186f77409407a7eb7" } "63a897c6b1ff6e29734fcc95": { "price": 40000, "parentId": "5b5f6fa186f77409407a7eb7" }
}, },
"customItemGlobalPresets": [ "customItemGlobalPresets": [
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "675956062f6ddfe8ff0e2806", "_encyclopedia": "675956062f6ddfe8ff0e2806",
"_id": "6777b37393a9a6f10ea57501", "_id": "6777b37393a9a6f10ea57501",
"_items": [ "_items": [
{ {
"_id": "6777bee3324b2e0cf7b7cfe1", "_id": "6777bee3324b2e0cf7b7cfe1",
"_tpl": "675956062f6ddfe8ff0e2806" "_tpl": "675956062f6ddfe8ff0e2806"
}, },
{ {
"_id": "6777c029e3703d1f9dc47d15", "_id": "6777c029e3703d1f9dc47d15",
"_tpl": "676307c004856a0b3c0dfffd", "_tpl": "676307c004856a0b3c0dfffd",
"parentId": "6777bee3324b2e0cf7b7cfe1", "parentId": "6777bee3324b2e0cf7b7cfe1",
"slotId": "Helmet_top" "slotId": "Helmet_top"
}, },
{ {
"_id": "6777c030386bec3cd3c41b6e", "_id": "6777c030386bec3cd3c41b6e",
"_tpl": "676307b4d9ec0af3d9001fa8", "_tpl": "676307b4d9ec0af3d9001fa8",
"parentId": "6777bee3324b2e0cf7b7cfe1", "parentId": "6777bee3324b2e0cf7b7cfe1",
"slotId": "Helmet_back" "slotId": "Helmet_back"
} }
], ],
"_name": "MTEK FLUX Ballistic helmet (MultiCam Alpine) Default", "_name": "MTEK FLUX Ballistic helmet (MultiCam Alpine) Default",
"_parent": "6777bee3324b2e0cf7b7cfe1", "_parent": "6777bee3324b2e0cf7b7cfe1",
"_type": "Preset" "_type": "Preset"
}, },
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "6759655674aa5e0825040d62", "_encyclopedia": "6759655674aa5e0825040d62",
"_id": "6777bf37e10ffdb431ff9508", "_id": "6777bf37e10ffdb431ff9508",
"_items": [ "_items": [
{ {
"_id": "6777bf03ad549e66e7ad06b2", "_id": "6777bf03ad549e66e7ad06b2",
"_tpl": "6759655674aa5e0825040d62" "_tpl": "6759655674aa5e0825040d62"
}, },
{ {
"_id": "6777c02180ddaee0b54493da", "_id": "6777c02180ddaee0b54493da",
"_tpl": "676307c004856a0b3c0dfffd", "_tpl": "676307c004856a0b3c0dfffd",
"parentId": "6777bf03ad549e66e7ad06b2", "parentId": "6777bf03ad549e66e7ad06b2",
"slotId": "Helmet_top" "slotId": "Helmet_top"
}, },
{ {
"_id": "6777c00f41b022243abdac99", "_id": "6777c00f41b022243abdac99",
"_tpl": "676307b4d9ec0af3d9001fa8", "_tpl": "676307b4d9ec0af3d9001fa8",
"parentId": "6777bf03ad549e66e7ad06b2", "parentId": "6777bf03ad549e66e7ad06b2",
"slotId": "Helmet_back" "slotId": "Helmet_back"
} }
], ],
"_name": "MTEK FLUX Ballistic helmet (Olive Drab) Default", "_name": "MTEK FLUX Ballistic helmet (Olive Drab) Default",
"_parent": "6777bf03ad549e66e7ad06b2", "_parent": "6777bf03ad549e66e7ad06b2",
"_type": "Preset" "_type": "Preset"
}, },
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "67597ceea35600b4c10cea86", "_encyclopedia": "67597ceea35600b4c10cea86",
"_id": "6777bfee0658691ef27d9993", "_id": "6777bfee0658691ef27d9993",
"_items": [ "_items": [
{ {
"_id": "6777bfaaaf1999ce0701bc00", "_id": "6777bfaaaf1999ce0701bc00",
"_tpl": "67597ceea35600b4c10cea86" "_tpl": "67597ceea35600b4c10cea86"
}, },
{ {
"_id": "6777c01b07b5d347d6b99404", "_id": "6777c01b07b5d347d6b99404",
"_tpl": "676307ded8b241b4f703a3e8", "_tpl": "676307ded8b241b4f703a3e8",
"parentId": "6777bfaaaf1999ce0701bc00", "parentId": "6777bfaaaf1999ce0701bc00",
"slotId": "Helmet_top" "slotId": "Helmet_top"
}, },
{ {
"_id": "6777c0033f374912b965ae5a", "_id": "6777c0033f374912b965ae5a",
"_tpl": "676307d3d9ec0af3d9001fac", "_tpl": "676307d3d9ec0af3d9001fac",
"parentId": "6777bfaaaf1999ce0701bc00", "parentId": "6777bfaaaf1999ce0701bc00",
"slotId": "Helmet_back" "slotId": "Helmet_back"
} }
], ],
"_name": "MTEK FLUX Ballistic helmet (Coyote) Default", "_name": "MTEK FLUX Ballistic helmet (Coyote) Default",
"_parent": "6777bfaaaf1999ce0701bc00", "_parent": "6777bfaaaf1999ce0701bc00",
"_type": "Preset" "_type": "Preset"
}, },
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "67597d241d5a44f2f605df06", "_encyclopedia": "67597d241d5a44f2f605df06",
"_id": "6777c1244557b9b1474da362", "_id": "6777c1244557b9b1474da362",
"_items": [ "_items": [
{ {
"_id": "6777c10f4989fc544063b5a1", "_id": "6777c10f4989fc544063b5a1",
"_tpl": "67597d241d5a44f2f605df06" "_tpl": "67597d241d5a44f2f605df06"
}, },
{ {
"_id": "6777c1293c00b35cd6960536", "_id": "6777c1293c00b35cd6960536",
"_tpl": "676307ded8b241b4f703a3e8", "_tpl": "676307ded8b241b4f703a3e8",
"parentId": "6777c10f4989fc544063b5a1", "parentId": "6777c10f4989fc544063b5a1",
"slotId": "Helmet_top" "slotId": "Helmet_top"
}, },
{ {
"_id": "6777c12f8fc234973af0cf16", "_id": "6777c12f8fc234973af0cf16",
"_tpl": "676307d3d9ec0af3d9001fac", "_tpl": "676307d3d9ec0af3d9001fac",
"parentId": "6777c10f4989fc544063b5a1", "parentId": "6777c10f4989fc544063b5a1",
"slotId": "Helmet_back" "slotId": "Helmet_back"
} }
], ],
"_name": "MTEK FLUX Ballistic helmet (Coyote/MultiCam Arid) Default", "_name": "MTEK FLUX Ballistic helmet (Coyote/MultiCam Arid) Default",
"_parent": "6777c10f4989fc544063b5a1", "_parent": "6777c10f4989fc544063b5a1",
"_type": "Preset" "_type": "Preset"
}, },
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "674d91ce6e862d5a95059ed6", "_encyclopedia": "674d91ce6e862d5a95059ed6",
"_id": "67784df15058057382b28f87", "_id": "67784df15058057382b28f87",
"_items": [ "_items": [
{ {
"_id": "67784dfaf57296ecbdbfc87f", "_id": "67784dfaf57296ecbdbfc87f",
"_tpl": "674d91ce6e862d5a95059ed6" "_tpl": "674d91ce6e862d5a95059ed6"
}, },
{ {
"_id": "67784e27ee352de60dc982a3", "_id": "67784e27ee352de60dc982a3",
"_tpl": "6575ea3060703324250610da", "_tpl": "6575ea3060703324250610da",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Soft_armor_front" "slotId": "Soft_armor_front"
}, },
{ {
"_id": "67784e32d75f52daffe36de5", "_id": "67784e32d75f52daffe36de5",
"_tpl": "6575ea4cf6a13a7b7100adc4", "_tpl": "6575ea4cf6a13a7b7100adc4",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Soft_armor_back" "slotId": "Soft_armor_back"
}, },
{ {
"_id": "67784e36e778f8aace662e1d", "_id": "67784e36e778f8aace662e1d",
"_tpl": "6575ea5cf6a13a7b7100adc8", "_tpl": "6575ea5cf6a13a7b7100adc8",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Soft_armor_left" "slotId": "Soft_armor_left"
}, },
{ {
"_id": "67784e3c0e4afac4ebdab52d", "_id": "67784e3c0e4afac4ebdab52d",
"_tpl": "6575ea6760703324250610de", "_tpl": "6575ea6760703324250610de",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "soft_armor_right" "slotId": "soft_armor_right"
}, },
{ {
"_id": "67784e40832d547cb2c986bf", "_id": "67784e40832d547cb2c986bf",
"_tpl": "6575ea719c7cad336508e418", "_tpl": "6575ea719c7cad336508e418",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Collar" "slotId": "Collar"
}, },
{ {
"_id": "67784e446c92fcb0e0d8fea8", "_id": "67784e446c92fcb0e0d8fea8",
"_tpl": "6575ea7c60703324250610e2", "_tpl": "6575ea7c60703324250610e2",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Groin" "slotId": "Groin"
}, },
{ {
"_id": "67784e473abf2a39a05dba5a", "_id": "67784e473abf2a39a05dba5a",
"_tpl": "656f611f94b480b8a500c0db", "_tpl": "656f611f94b480b8a500c0db",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Front_plate" "slotId": "Front_plate"
}, },
{ {
"_id": "67784e4b934ace8451681bee", "_id": "67784e4b934ace8451681bee",
"_tpl": "656efaf54772930db4031ff5", "_tpl": "656efaf54772930db4031ff5",
"parentId": "67784dfaf57296ecbdbfc87f", "parentId": "67784dfaf57296ecbdbfc87f",
"slotId": "Back_plate" "slotId": "Back_plate"
} }
], ],
"_name": "Body armor 6B13 M Killa Christmas Standard", "_name": "Body armor 6B13 M Killa Christmas Standard",
"_parent": "67784dfaf57296ecbdbfc87f", "_parent": "67784dfaf57296ecbdbfc87f",
"_type": "Preset" "_type": "Preset"
}, },
{ {
"_changeWeaponName": false, "_changeWeaponName": false,
"_encyclopedia": "6745895717824b1ec20570a6", "_encyclopedia": "6745895717824b1ec20570a6",
"_id": "677d14927f8ee8353d85918d", "_id": "677d14927f8ee8353d85918d",
"_items": [ "_items": [
{ {
"_id": "677d14a27757dcc54a3054fb", "_id": "677d14a27757dcc54a3054fb",
"_tpl": "6745895717824b1ec20570a6" "_tpl": "6745895717824b1ec20570a6"
}, },
{ {
"_id": "677d14abef2285ed18ee3e62", "_id": "677d14abef2285ed18ee3e62",
"_tpl": "657baaf0b7e9ca9a02045c02", "_tpl": "657baaf0b7e9ca9a02045c02",
"parentId": "677d14a27757dcc54a3054fb", "parentId": "677d14a27757dcc54a3054fb",
"slotId": "Helmet_top" "slotId": "Helmet_top"
}, },
{ {
"_id": "677d14b0024eda59d1544794", "_id": "677d14b0024eda59d1544794",
"_tpl": "657bab6ec6f689d3a205b85f", "_tpl": "657bab6ec6f689d3a205b85f",
"parentId": "677d14a27757dcc54a3054fb", "parentId": "677d14a27757dcc54a3054fb",
"slotId": "Helmet_back" "slotId": "Helmet_back"
}, },
{ {
"_id": "677d14bb1dfea5b33fa31337", "_id": "677d14bb1dfea5b33fa31337",
"_tpl": "657babc6f58ba5a6250107a2", "_tpl": "657babc6f58ba5a6250107a2",
"parentId": "677d14a27757dcc54a3054fb", "parentId": "677d14a27757dcc54a3054fb",
"slotId": "Helmet_ears" "slotId": "Helmet_ears"
} }
], ],
"_name": "6B47 Ratnik-BSh helmet (EMR Arctic cover) default", "_name": "6B47 Ratnik-BSh helmet (EMR Arctic cover) default",
"_parent": "677d14a27757dcc54a3054fb", "_parent": "677d14a27757dcc54a3054fb",
"_type": "Preset" "_type": "Preset"
} }
] ]
} }

View File

@ -151,9 +151,9 @@
"675dc9d37ae1a8792107ca96", "675dc9d37ae1a8792107ca96",
"675dcb0545b1a2d108011b2b", "675dcb0545b1a2d108011b2b",
"6707d13e4e617ec94f0e5631", "6707d13e4e617ec94f0e5631",
"67408903268737ef6908d432", "67408903268737ef6908d432",
"67499b9b909d2013670a5029", "67499b9b909d2013670a5029",
"6638a5474e92f038531e210e" "6638a5474e92f038531e210e"
], ],
"useDifficultyOverride": false, "useDifficultyOverride": false,
"difficulty": "AsOnline", "difficulty": "AsOnline",
@ -772,8 +772,8 @@
"hostilitySettings": { "hostilitySettings": {
"pmcusec": { "pmcusec": {
"additionalEnemyTypes": [ "additionalEnemyTypes": [
"arenaFighterEvent", "arenaFighterEvent",
"marksman", "marksman",
"peacemaker", "peacemaker",
"skier", "skier",
"ravangeZryachiyEvent", "ravangeZryachiyEvent",
@ -796,14 +796,16 @@
"followerBigPipe", "followerBigPipe",
"followerBirdEye", "followerBirdEye",
"followerBully", "followerBully",
"followerBoarClose1", "followerBoarClose1",
"followerBoarClose2" "followerBoarClose2"
], ],
"additionalFriendlyTypes": ["gifter", "shooterBTR", "sectactPriestEvent", "peacefullZryachiyEvent"], "additionalFriendlyTypes": ["gifter", "shooterBTR", "sectactPriestEvent", "peacefullZryachiyEvent"],
"chancedEnemies": [{ "chancedEnemies": [
{
"EnemyChance": 85, "EnemyChance": 85,
"Role": "pmcUSEC" "Role": "pmcUSEC"
}, { },
{
"EnemyChance": 100, "EnemyChance": 100,
"Role": "pmcBEAR" "Role": "pmcBEAR"
} }
@ -815,8 +817,8 @@
}, },
"pmcbear": { "pmcbear": {
"additionalEnemyTypes": [ "additionalEnemyTypes": [
"arenaFighterEvent", "arenaFighterEvent",
"marksman", "marksman",
"peacemaker", "peacemaker",
"skier", "skier",
"ravangeZryachiyEvent", "ravangeZryachiyEvent",
@ -839,14 +841,16 @@
"followerBigPipe", "followerBigPipe",
"followerBirdEye", "followerBirdEye",
"followerBully", "followerBully",
"followerBoarClose1", "followerBoarClose1",
"followerBoarClose2" "followerBoarClose2"
], ],
"additionalFriendlyTypes": ["gifter", "shooterBTR", "sectactPriestEvent", "peacefullZryachiyEvent"], "additionalFriendlyTypes": ["gifter", "shooterBTR", "sectactPriestEvent", "peacefullZryachiyEvent"],
"chancedEnemies": [{ "chancedEnemies": [
{
"EnemyChance": 85, "EnemyChance": 85,
"Role": "pmcBEAR" "Role": "pmcBEAR"
}, { },
{
"EnemyChance": 100, "EnemyChance": 100,
"Role": "pmcUSEC" "Role": "pmcUSEC"
} }

View File

@ -16,8 +16,8 @@
"5e381b0286f77420e3417a74", "5e381b0286f77420e3417a74",
"5e4d4ac186f774264f758336", "5e4d4ac186f774264f758336",
"639136d68ba6894d155e77cf", "639136d68ba6894d155e77cf",
"6613f3007f6666d56807c929", "6613f3007f6666d56807c929",
"6613f307fca4f2f386029409" "6613f307fca4f2f386029409"
], ],
"profileBlacklist": { "profileBlacklist": {
"unheard_edition": ["666314a50aa5c7436c00908a"] "unheard_edition": ["666314a50aa5c7436c00908a"]

View File

@ -337,13 +337,13 @@
"newPriceHandbookMultiplier": 11 "newPriceHandbookMultiplier": 11
} }
}, },
"itemPriceOverrideRouble":{ "itemPriceOverrideRouble": {
"66bc98a01a47be227a5e956e": 500000, "66bc98a01a47be227a5e956e": 500000,
"63a8970d7108f713591149f5": 50000, "63a8970d7108f713591149f5": 50000,
"63a898a328e385334e0640a5": 100000, "63a898a328e385334e0640a5": 100000,
"63a897c6b1ff6e29734fcc95": 200000, "63a897c6b1ff6e29734fcc95": 200000,
"674d91ce6e862d5a95059ed6": 250000 "674d91ce6e862d5a95059ed6": 250000
} }
}, },
"tieredFlea": { "tieredFlea": {
"enabled": false, "enabled": false,

View File

@ -98,13 +98,13 @@
"5a43957686f7742a2c2f11b0": 150 "5a43957686f7742a2c2f11b0": 150
} }
}, },
"bosskilla": { "bosskilla": {
"ArmorVest": { "ArmorVest": {
"674d91ce6e862d5a95059ed6": 200 "674d91ce6e862d5a95059ed6": 200
}, },
"Headwear": { "Headwear": {
"6759af0f9c8a538dd70bfae6": 200 "6759af0f9c8a538dd70bfae6": 200
} }
}, },
"bossknight": { "bossknight": {
"FaceCover": { "FaceCover": {
@ -242,7 +242,7 @@
"bear": { "bear": {
"FaceCover": { "FaceCover": {
"5c1a1e3f2e221602b66cc4c2": 30, "5c1a1e3f2e221602b66cc4c2": 30,
"675ac888803644528007b3f6": 30 "675ac888803644528007b3f6": 30
}, },
"Headwear": { "Headwear": {
"5a43957686f7742a2c2f11b0": 80, "5a43957686f7742a2c2f11b0": 80,
@ -252,7 +252,7 @@
"usec": { "usec": {
"FaceCover": { "FaceCover": {
"5c1a1e3f2e221602b66cc4c2": 30, "5c1a1e3f2e221602b66cc4c2": 30,
"675ac888803644528007b3f6": 30 "675ac888803644528007b3f6": 30
}, },
"Headwear": { "Headwear": {
"5a43957686f7742a2c2f11b0": 80, "5a43957686f7742a2c2f11b0": 80,
@ -261,28 +261,28 @@
} }
} }
}, },
"eventLoot": { "eventLoot": {
"christmas": { "christmas": {
"assault": { "assault": {
"Pockets": { "Pockets": {
"5df8a6a186f77412640e2e80": 2200, "5df8a6a186f77412640e2e80": 2200,
"5df8a72c86f77412640e2e83": 2200, "5df8a72c86f77412640e2e83": 2200,
"5df8a77486f77412672a1e3f": 2200 "5df8a77486f77412672a1e3f": 2200
}, },
"Backpack": { "Backpack": {
"5df8a6a186f77412640e2e80": 2200, "5df8a6a186f77412640e2e80": 2200,
"5df8a72c86f77412640e2e83": 2200, "5df8a72c86f77412640e2e83": 2200,
"5df8a77486f77412672a1e3f": 2200, "5df8a77486f77412672a1e3f": 2200,
"63a8970d7108f713591149f5": 250 "63a8970d7108f713591149f5": 250
}, },
"TacticalVest": { "TacticalVest": {
"5df8a6a186f77412640e2e80": 2200, "5df8a6a186f77412640e2e80": 2200,
"5df8a72c86f77412640e2e83": 2200, "5df8a72c86f77412640e2e83": 2200,
"5df8a77486f77412672a1e3f": 2200 "5df8a77486f77412672a1e3f": 2200
} }
} }
} }
}, },
"eventBotMapping": { "eventBotMapping": {
"peacefullZryachiyEvent": "bossZryachiy", "peacefullZryachiyEvent": "bossZryachiy",
"sectactPriestEvent": "sectantPriest", "sectactPriestEvent": "sectantPriest",
@ -8363,9 +8363,9 @@
"endDay": "31", "endDay": "31",
"endMonth": "12", "endMonth": "12",
"settings": { "settings": {
"enableChristmasHideout": true, "enableChristmasHideout": true,
"enableSanta": true, "enableSanta": true,
"adjustBotAppearances": true "adjustBotAppearances": true
} }
}, },
{ {
@ -8376,13 +8376,13 @@
"startMonth": "1", "startMonth": "1",
"endDay": "1", "endDay": "1",
"endMonth": "1", "endMonth": "1",
"settings": { "settings": {
"enableChristmasHideout": true, "enableChristmasHideout": true,
"enableSanta": true, "enableSanta": true,
"adjustBotAppearances": true "adjustBotAppearances": true
} }
}, },
{ {
"enabled": true, "enabled": true,
"name": "christmas January", "name": "christmas January",
"type": "CHRISTMAS", "type": "CHRISTMAS",
@ -8391,9 +8391,9 @@
"endDay": "7", "endDay": "7",
"endMonth": "1", "endMonth": "1",
"settings": { "settings": {
"enableChristmasHideout": true, "enableChristmasHideout": true,
"enableSanta": true, "enableSanta": true,
"adjustBotAppearances": true "adjustBotAppearances": true
} }
}, },
{ {
@ -12314,11 +12314,11 @@
] ]
} }
}, },
"christmasContainerIds": [ "christmasContainerIds": [
"container_custom_DesignStuff_00427", "container_custom_DesignStuff_00427",
"container_Shopping_Mall_DesignStuff_00808", "container_Shopping_Mall_DesignStuff_00808",
"container_Lighthouse_DesignStuff_00001", "container_Lighthouse_DesignStuff_00001",
"container_shoreline_DesignStuff_00418", "container_shoreline_DesignStuff_00418",
"container_woods_design_stuff_00328" "container_woods_design_stuff_00328"
] ]
} }

View File

@ -365,7 +365,7 @@
"65ddcc9cfa85b9f17d0dfb07", "65ddcc9cfa85b9f17d0dfb07",
"660312cc4d6cdfa6f500c703", "660312cc4d6cdfa6f500c703",
"6655e35b6bc645cb7b059912", "6655e35b6bc645cb7b059912",
"6759673c76e93d8eb20b2080" "6759673c76e93d8eb20b2080"
], ],
"coopExtractGift": { "coopExtractGift": {
"sendGift": true, "sendGift": true,

View File

@ -97,56 +97,64 @@
"weights": [1, 2] "weights": [1, 2]
} }
}, },
"seasonDates": [{ "seasonDates": [
{
"seasonType": 0, "seasonType": 0,
"name": "SUMMER", "name": "SUMMER",
"startDay": "2", "startDay": "2",
"startMonth": "6", "startMonth": "6",
"endDay": "15", "endDay": "15",
"endMonth": "10" "endMonth": "10"
}, { },
{
"seasonType": 1, "seasonType": 1,
"name": "AUTUMN", "name": "AUTUMN",
"startDay": "15", "startDay": "15",
"startMonth": "10", "startMonth": "10",
"endDay": "1", "endDay": "1",
"endMonth": "11" "endMonth": "11"
}, { },
{
"seasonType": 4, "seasonType": 4,
"name": "AUTUMN_LATE", "name": "AUTUMN_LATE",
"startDay": "1", "startDay": "1",
"startMonth": "11", "startMonth": "11",
"endDay": "21", "endDay": "21",
"endMonth": "12" "endMonth": "12"
}, { },
{
"seasonType": 2, "seasonType": 2,
"name": "WINTER_START", "name": "WINTER_START",
"startDay": "21", "startDay": "21",
"startMonth": "12", "startMonth": "12",
"endDay": "31", "endDay": "31",
"endMonth": "12" "endMonth": "12"
}, { },
{
"seasonType": 2, "seasonType": 2,
"name": "WINTER_END", "name": "WINTER_END",
"startDay": "1", "startDay": "1",
"startMonth": "1", "startMonth": "1",
"endDay": "9", "endDay": "9",
"endMonth": "1" "endMonth": "1"
}, { },
{
"seasonType": 5, "seasonType": 5,
"name": "SPRING_EARLY", "name": "SPRING_EARLY",
"startDay": "9", "startDay": "9",
"startMonth": "1", "startMonth": "1",
"endDay": "25", "endDay": "25",
"endMonth": "3" "endMonth": "3"
}, { },
{
"seasonType": 3, "seasonType": 3,
"name": "SPRING", "name": "SPRING",
"startDay": "25", "startDay": "25",
"startMonth": "3", "startMonth": "3",
"endDay": "2", "endDay": "2",
"endMonth": "6" "endMonth": "6"
}, { },
{
"seasonType": 4, "seasonType": 4,
"name": "STORM", "name": "STORM",
"startDay": "24", "startDay": "24",

View File

@ -8,24 +8,23 @@
".editorconfig", ".editorconfig",
".git/*", ".git/*",
".pkg-cache/*", ".pkg-cache/*",
".vscode/*", "assets/database/*",
"build/*", "build/*",
"node_modules/*", "node_modules/*",
"obj/*", "obj/*",
"out/*",
"src/services/ModCompilerService.ts",
"tests/__cache__/*", "tests/__cache__/*",
"tests/__coverage__/*", "tests/__coverage__/*",
"types/*", "types/*",
"user/mods/*", "user/*"
"user/profiles/*",
"assets/database/*"
] ]
}, },
"linter": { "linter": {
"enabled": true, "enabled": true,
"rules": { "rules": {
"recommended": true, "recommended": true,
"suspicious": {
"noExplicitAny": "warn"
},
"style": { "style": {
"useImportType": "off" "useImportType": "off"
} }
@ -34,17 +33,6 @@
"formatter": { "formatter": {
"enabled": true, "enabled": true,
"formatWithErrors": false, "formatWithErrors": false,
"ignore": [
"**/.git",
"**/.pkg-cache",
"**/.vscode",
"**/build",
"**/node_modules",
"**/types",
"**/tests/__cache__",
"**/tests/__coverage__",
"**/.editorconfig"
],
"attributePosition": "auto", "attributePosition": "auto",
"indentStyle": "space", "indentStyle": "space",
"indentWidth": 4, "indentWidth": 4,
@ -72,14 +60,7 @@
}, },
"overrides": [ "overrides": [
{ {
"include": ["tests/*"], "include": ["tests/*"]
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
} }
] ]
} }

View File

@ -33,7 +33,7 @@
"gen:docs": "typedoc --options ./typedoc.json --entryPointStrategy expand ./src", "gen:docs": "typedoc --options ./typedoc.json --entryPointStrategy expand ./src",
"gen:items": "tsx ./src/tools/ItemTplGenerator/ItemTplGeneratorProgram.ts", "gen:items": "tsx ./src/tools/ItemTplGenerator/ItemTplGeneratorProgram.ts",
"gen:productionquests": "tsx ./src/tools/ProductionQuestsGen/ProductionQuestsGenProgram.ts", "gen:productionquests": "tsx ./src/tools/ProductionQuestsGen/ProductionQuestsGenProgram.ts",
"gen:customisationstorage": "tsx ./src/tools/HideoutCustomisation/HideoutCustomisationProgram.ts" "gen:customisationstorage": "tsx ./src/tools/HideoutCustomisation/HideoutCustomisationProgram.ts"
}, },
"dependencies": { "dependencies": {
"atomically": "~1.7", "atomically": "~1.7",

View File

@ -335,7 +335,7 @@ export class RagfairController {
// Figure out how many items the requirementsCost is applying to, and what the per-item price is // Figure out how many items the requirementsCost is applying to, and what the per-item price is
const offerItemCount = Math.max( const offerItemCount = Math.max(
offer.sellInOnePiece ? (offer.items[0].upd?.StackObjectsCount ?? 1) : 1, offer.sellInOnePiece ? offer.items[0].upd?.StackObjectsCount ?? 1 : 1,
); );
const perItemPrice = offer.requirementsCost / offerItemCount; const perItemPrice = offer.requirementsCost / offerItemCount;

View File

@ -1,6 +1,5 @@
// This is an auto generated file, do not modify. Re-generate with `npm run gen:items` // This is an auto generated file, do not modify. Re-generate with `npm run gen:items`
export enum ItemTpl export enum ItemTpl {
{
AMMOBOX_127X33_COPPER_20RND = "676009ddb623f3b8ba079419", AMMOBOX_127X33_COPPER_20RND = "676009ddb623f3b8ba079419",
AMMOBOX_127X33_FMJ_20RND = "676009ed8f1fee08740f9479", AMMOBOX_127X33_FMJ_20RND = "676009ed8f1fee08740f9479",
AMMOBOX_127X33_JHP_20RND = "676009fe8f1fee08740f947c", AMMOBOX_127X33_JHP_20RND = "676009fe8f1fee08740f947c",

View File

@ -1,6 +1,5 @@
// This is an auto generated file, do not modify. Re-generate with `npm run gen:items` // This is an auto generated file, do not modify. Re-generate with `npm run gen:items`
export enum Weapons export enum Weapons {
{
ASSAULTCARBINE_762X39_OP_SKS = "587e02ff24597743df3deaeb", ASSAULTCARBINE_762X39_OP_SKS = "587e02ff24597743df3deaeb",
ASSAULTCARBINE_762X39_SKS = "574d967124597745970e7c94", ASSAULTCARBINE_762X39_SKS = "574d967124597745970e7c94",
ASSAULTCARBINE_762X51_VPO_101_VEPR_HUNTER = "5c501a4d2e221602b412b540", ASSAULTCARBINE_762X51_VPO_101_VEPR_HUNTER = "5c501a4d2e221602b412b540",

View File

@ -38,7 +38,7 @@ export interface ISeasonalEventSettings {
enableSummoning: boolean; enableSummoning: boolean;
enableHalloweenHideout: boolean; enableHalloweenHideout: boolean;
enableChristmasHideout: boolean; enableChristmasHideout: boolean;
enableSanta: boolean, enableSanta: boolean;
adjustBotAppearances: boolean; adjustBotAppearances: boolean;
addEventGearToBots: boolean; addEventGearToBots: boolean;
addEventLootToBots: boolean; addEventLootToBots: boolean;

View File

@ -16,9 +16,9 @@ export class SPTWebSocket extends WebSocket {
public closeAsync(): Promise<void> { public closeAsync(): Promise<void> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.on('close', () => resolve()); this.on("close", () => resolve());
this.on('error', (err) => reject(err)); this.on("error", (err) => reject(err));
this.close(); this.close();
}); });
} }
} }

View File

@ -55,7 +55,7 @@ export class SptWebSocketConnectionHandler implements IWebSocketConnectionHandle
if (this.websocketPingHandler) { if (this.websocketPingHandler) {
clearInterval(this.websocketPingHandler); clearInterval(this.websocketPingHandler);
} }
ws.on("message", async (msg) => { ws.on("message", async (msg) => {
for (const wsmh of this.sptWebSocketMessageHandlers) { for (const wsmh of this.sptWebSocketMessageHandlers) {
await wsmh.onSptMessage(sessionID, this.webSockets.get(sessionID), msg); await wsmh.onSptMessage(sessionID, this.webSockets.get(sessionID), msg);

View File

@ -1,23 +1,21 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import { inject, injectable } from "tsyringe";
import { ScriptTarget, ModuleKind, ModuleResolutionKind, transpileModule, CompilerOptions } from "typescript";
import { ProgramStatics } from "@spt/ProgramStatics"; import { ProgramStatics } from "@spt/ProgramStatics";
import type { ILogger } from "@spt/models/spt/utils/ILogger"; import type { ILogger } from "@spt/models/spt/utils/ILogger";
import { ModHashCacheService } from "@spt/services/cache/ModHashCacheService"; import { ModHashCacheService } from "@spt/services/cache/ModHashCacheService";
import { VFS } from "@spt/utils/VFS"; import { VFS } from "@spt/utils/VFS";
import { inject, injectable } from "tsyringe";
import { CompilerOptions, ModuleKind, ModuleResolutionKind, ScriptTarget, transpileModule } from "typescript";
@injectable() @injectable()
export class ModCompilerService export class ModCompilerService {
{
protected serverDependencies: string[]; protected serverDependencies: string[];
constructor( constructor(
@inject("PrimaryLogger") protected logger: ILogger, @inject("PrimaryLogger") protected logger: ILogger,
@inject("ModHashCacheService") protected modHashCacheService: ModHashCacheService, @inject("ModHashCacheService") protected modHashCacheService: ModHashCacheService,
@inject("VFS") protected vfs: VFS, @inject("VFS") protected vfs: VFS,
) ) {
{
const packageJsonPath: string = path.join(__dirname, "../../package.json"); const packageJsonPath: string = path.join(__dirname, "../../package.json");
this.serverDependencies = Object.keys(JSON.parse(this.vfs.readFile(packageJsonPath)).dependencies); this.serverDependencies = Object.keys(JSON.parse(this.vfs.readFile(packageJsonPath)).dependencies);
} }
@ -29,33 +27,28 @@ export class ModCompilerService
* @param modTypeScriptFiles * @param modTypeScriptFiles
* @returns * @returns
*/ */
public async compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise<void> public async compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise<void> {
{
// Concatenate TS files into one string // Concatenate TS files into one string
let tsFileContents = ""; let tsFileContents = "";
let fileExists = true; // does every js file exist (been compiled before) let fileExists = true; // does every js file exist (been compiled before)
for (const file of modTypeScriptFiles) for (const file of modTypeScriptFiles) {
{
const fileContent = this.vfs.readFile(file); const fileContent = this.vfs.readFile(file);
tsFileContents += fileContent; tsFileContents += fileContent;
// Does equivalent .js file exist // Does equivalent .js file exist
if (!this.vfs.exists(file.replace(".ts", ".js"))) if (!this.vfs.exists(file.replace(".ts", ".js"))) {
{
fileExists = false; fileExists = false;
} }
} }
const hashMatches = this.modHashCacheService.calculateAndCompareHash(modName, tsFileContents); const hashMatches = this.modHashCacheService.calculateAndCompareHash(modName, tsFileContents);
if (fileExists && hashMatches) if (fileExists && hashMatches) {
{
// Everything exists and matches, escape early // Everything exists and matches, escape early
return; return;
} }
if (!hashMatches) if (!hashMatches) {
{
// Store / update hash in json file // Store / update hash in json file
this.modHashCacheService.calculateAndStoreHash(modName, tsFileContents); this.modHashCacheService.calculateAndStoreHash(modName, tsFileContents);
} }
@ -82,13 +75,11 @@ export class ModCompilerService
* @param fileNames Paths to TS files * @param fileNames Paths to TS files
* @param options Compiler options * @param options Compiler options
*/ */
protected async compile(fileNames: string[], options: CompilerOptions): Promise<void> protected async compile(fileNames: string[], options: CompilerOptions): Promise<void> {
{
// C:/snapshot/project || /snapshot/project // C:/snapshot/project || /snapshot/project
const baseDir: string = __dirname.replace(/\\/g, "/").split("/").slice(0, 3).join("/"); const baseDir: string = __dirname.replace(/\\/g, "/").split("/").slice(0, 3).join("/");
for (const filePath of fileNames) for (const filePath of fileNames) {
{
const destPath = filePath.replace(".ts", ".js"); const destPath = filePath.replace(".ts", ".js");
const parsedPath = path.parse(filePath); const parsedPath = path.parse(filePath);
const parsedDestPath = path.parse(destPath); const parsedDestPath = path.parse(destPath);
@ -97,20 +88,17 @@ export class ModCompilerService
if (ProgramStatics.COMPILED) { if (ProgramStatics.COMPILED) {
replacedText = text.replace(/(@spt)/g, `${baseDir}/obj`); replacedText = text.replace(/(@spt)/g, `${baseDir}/obj`);
for (const dependency of this.serverDependencies) for (const dependency of this.serverDependencies) {
{
replacedText = replacedText.replace(`"${dependency}"`, `"${baseDir}/node_modules/${dependency}"`); replacedText = replacedText.replace(`"${dependency}"`, `"${baseDir}/node_modules/${dependency}"`);
} }
} } else {
else
{
replacedText = text.replace(/(@spt)/g, path.join(__dirname, "..").replace(/\\/g, "/")); replacedText = text.replace(/(@spt)/g, path.join(__dirname, "..").replace(/\\/g, "/"));
} }
const output = transpileModule(replacedText, { compilerOptions: options }); const output = transpileModule(replacedText, { compilerOptions: options });
if (output.sourceMapText) if (output.sourceMapText) {
{ // biome-ignore format: these mappings should not be formatted
output.outputText = output.outputText.replace( output.outputText = output.outputText.replace(
"//# sourceMappingURL\=module.js.map", "//# sourceMappingURL\=module.js.map",
`//# sourceMappingURL\=${parsedDestPath.base}.map`, `//# sourceMappingURL\=${parsedDestPath.base}.map`,
@ -125,8 +113,7 @@ export class ModCompilerService
fs.writeFileSync(destPath, output.outputText); fs.writeFileSync(destPath, output.outputText);
} }
while (!this.areFilesReady(fileNames)) while (!this.areFilesReady(fileNames)) {
{
await this.delay(200); await this.delay(200);
} }
} }
@ -136,8 +123,7 @@ export class ModCompilerService
* @param fileNames * @param fileNames
* @returns * @returns
*/ */
protected areFilesReady(fileNames: string[]): boolean protected areFilesReady(fileNames: string[]): boolean {
{
return fileNames.filter((x) => !this.vfs.exists(x.replace(".ts", ".js"))).length === 0; return fileNames.filter((x) => !this.vfs.exists(x.replace(".ts", ".js"))).length === 0;
} }
@ -146,8 +132,7 @@ export class ModCompilerService
* @param ms Milliseconds * @param ms Milliseconds
* @returns * @returns
*/ */
protected delay(ms: number): Promise<unknown> protected delay(ms: number): Promise<unknown> {
{
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
} }
} }

View File

@ -11,7 +11,12 @@ import { SeasonalEventType } from "@spt/models/enums/SeasonalEventType";
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig"; import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig"; import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
import { ISeasonalEvent, ISeasonalEventConfig, ISeasonalEventSettings, IZombieSettings } from "@spt/models/spt/config/ISeasonalEventConfig"; import {
ISeasonalEvent,
ISeasonalEventConfig,
ISeasonalEventSettings,
IZombieSettings,
} from "@spt/models/spt/config/ISeasonalEventConfig";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig"; import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import type { ILogger } from "@spt/models/spt/utils/ILogger"; import type { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";

View File

@ -70,7 +70,8 @@ export class HideoutCustomisationGen {
} }
const matchingQuest = this.questCustomisationReward[questOrAchievementRequirement.target as string]; const matchingQuest = this.questCustomisationReward[questOrAchievementRequirement.target as string];
const matchingAchievement = this.achievementCustomisationReward[questOrAchievementRequirement.target as string]; const matchingAchievement =
this.achievementCustomisationReward[questOrAchievementRequirement.target as string];
let source = null; let source = null;
if (matchingQuest) { if (matchingQuest) {

View File

@ -26,7 +26,7 @@ export default (<Environment>{
await importDatabase(container); await importDatabase(container);
return { return {
async teardown() { }, async teardown() {},
}; };
}, },
}); });

View File

@ -13,16 +13,9 @@
"verbatimModuleSyntax": false, "verbatimModuleSyntax": false,
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@spt/*": [ "@spt/*": ["./src/*"],
"./src/*" "@tests/*": ["./tests/*"]
], }
"@tests/*": [
"./tests/*"
]
},
}, },
"include": [ "include": ["src/*", "src/**/*"]
"src/*",
"src/**/*"
]
} }

View File

@ -7,7 +7,5 @@
"declaration": true, "declaration": true,
"declarationDir": "./types" "declarationDir": "./types"
}, },
"exclude": [ "exclude": ["./types/**/*"]
"./types/**/*"
]
} }