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

Merge branch 'master' of https://dev.sp-tarkov.com/SPT-AKI/Server into 3.8.0

# Conflicts:
#	project/assets/database/bots/types/assault.json
#	project/assets/database/bots/types/bossknight.json
#	project/assets/database/bots/types/bosszryachiy.json
#	project/assets/database/bots/types/followerzryachiy.json
This commit is contained in:
Dev 2023-10-31 19:10:23 +00:00
commit fc606ee540
55 changed files with 63126 additions and 63224 deletions

View File

@ -27,7 +27,7 @@ steps:
- cd ./project
- pnpm install
- name: Run Rome
- name: Run Biome
image: registry.sp-tarkov.com/spt/pnpm:7.25.1
commands:
- cd ./project
@ -84,7 +84,7 @@ steps:
- cd ./project
- pnpm install
- name: Run Rome
- name: Run Biome
image: registry.sp-tarkov.com/spt/pnpm:7.25.1
commands:
- cd ./project
@ -102,7 +102,7 @@ steps:
# - cd ./project
# - pnpm run test:coverage
# depends_on:
# - Run Rome
# - Run Biome
# when:
# event:
# - push
@ -128,7 +128,7 @@ steps:
-Dsonar.javascript.lcov.reportPaths=./project/coverage/lcov.info
depends_on:
# - Jest coverage
- Run Rome
- Run Biome
when:
event:
- push
@ -165,7 +165,7 @@ steps:
-Dsonar.projectVersion=$DRONE_TAG
depends_on:
# - Jest coverage
- Run Rome
- Run Biome
when:
event:
- tag

View File

@ -1,6 +0,0 @@
{
"extends": "@parcel/config-default",
"transformers": {
"*.pjs": ["@parcel/transformer-js"]
}
}

View File

@ -5,7 +5,7 @@ WORKDIR /app
COPY package.json .
RUN yarn
COPY .parcelrc tsconfig.json tsconfig.base.json ./
COPY tsconfig.json tsconfig.base.json ./
COPY src ./src
RUN yarn test:comp-linux

View File

@ -780,6 +780,7 @@
"Backpack": 35,
"FaceCover": 5
},
"randomisedWeaponModSlots": [],
"mods": {
"mod_barrel": 20,
"mod_bipod": 10,

View File

@ -747,7 +747,7 @@
"Exploration": {
"maxExtracts": 10,
"specificExits": {
"probability": 0.5,
"probability": 0.4,
"passageRequirementWhitelist": [
"None",
"TransferItem",
@ -846,7 +846,7 @@
}
}
],
"bodyPartProb": 0.2,
"bodyPartProb": 0.15,
"bodyParts": [{
"key": "Head",
"relativeProbability": 1,
@ -1052,8 +1052,8 @@
"minDist": 10,
"maxKills": 40,
"minKills": 15,
"maxBossKills": 30,
"minBossKills": 15,
"maxBossKills": 10,
"minBossKills": 5,
"maxPmcKills": 15,
"minPmcKills": 10,
"weaponRequirementProb": 0,
@ -1206,7 +1206,7 @@
}
}
],
"bodyPartProb": 0.4,
"bodyPartProb": 0.25,
"bodyParts": [{
"key": "Head",
"relativeProbability": 1,
@ -1232,8 +1232,8 @@
"minDist": 10,
"maxKills": 40,
"minKills": 20,
"maxBossKills": 20,
"minBossKills": 10,
"maxBossKills": 14,
"minBossKills": 7,
"maxPmcKills": 25,
"minPmcKills": 10,
"weaponRequirementProb": 0,

View File

@ -1,20 +1,20 @@
{
"appearance": {
"body": {
"5d5e7e7586f77427997cfb7f": 1,
"5d5e7e8386f774393602d6fa": 1,
"5df8a10486f77412672a1e3a": 1,
"5e4bb3ee86f77406975c934e": 1,
"5e9da1d086f774054a667134": 1,
"5fd1eb3fbe3b7107d66cb645": 1
"5d5e7e7586f77427997cfb7f": 9,
"5d5e7e8386f774393602d6fa": 4,
"5df8a10486f77412672a1e3a": 10,
"5e4bb3ee86f77406975c934e": 4,
"5e9da1d086f774054a667134": 8,
"5fd1eb3fbe3b7107d66cb645": 9
},
"feet": {
"5cc2e5d014c02e15d53d9c03": 1,
"5d28af7886f77429275dba25": 1,
"5d5e7f4986f7746956659f8a": 1,
"5f5e410c6bdad616ad46d60b": 1,
"5f5e41366760b4138443b343": 1,
"5f5e41576760b4138443b344": 1
"5cc2e5d014c02e15d53d9c03": 8,
"5d28af7886f77429275dba25": 9,
"5d5e7f4986f7746956659f8a": 8,
"5f5e410c6bdad616ad46d60b": 4,
"5f5e41366760b4138443b343": 10,
"5f5e41576760b4138443b344": 5
},
"hands": [
"5df8eac086f77412640e2ea7",
@ -2040,28 +2040,46 @@
"standingForKill": 0
},
"firstName": [
"Картавый",
"Сырок",
"Дальневосточный",
"Мутко",
"Базарыч",
"Кореш",
"Лобстер",
"Балкан",
"Логан",
"Подружка",
"Васек",
"Оливье",
"Хардбас",
"Шнырь",
"Ярик",
"Ден",
"Гарри",
"Кулек",
"Андрюша",
"Анимешник",
"Баба Яга",
"Балкан",
"Бастурма",
"Базарыч",
"Чёткий",
"Дальневосточный",
"Дементий",
"Дэн",
"Димон",
"Друг Дамирки",
"Гамлет",
"Гарри Поттер",
"Грустный",
"Хардбас",
"Картавый",
"Кел Гоблин",
"Киллада",
"Кореш",
"Кощей",
"Космонавт",
"Кроссфитер",
"Кулёк",
"Лобстер",
"Логан",
"Михалыч",
"Мутко",
"Огород",
"Пашка",
"Оливье",
"Подружка",
"Шмыга",
"Баба",
"Михалыч"
"Шнур",
"Сырок",
"Улётный",
"Васёк",
"Ярик",
"Кулек",
"Шнырь"
],
"generation": {
"items": {
@ -2216,9 +2234,9 @@
"56dff2ced2720bb4668b4567": 1
},
"Caliber556x45NATO": {
"54527a984bdc2d4e668b4567": 1,
"54527ac44bdc2d36668b4567": 1,
"59e6920f86f77411d82aa167": 1
"54527a984bdc2d4e668b4567": 6,
"54527ac44bdc2d36668b4567": 5,
"59e6920f86f77411d82aa167": 2
},
"Caliber57x28": {
"5cc80f38e4a949001152b560": 1
@ -2230,22 +2248,22 @@
"59e0d99486f7744a32234762": 1
},
"Caliber762x51": {
"58dd3ad986f77403051cba8f": 1,
"5a6086ea4f39f99cd479502f": 1,
"5a608bf24f39f98ffc77720e": 1,
"58dd3ad986f77403051cba8f": 2,
"5a6086ea4f39f99cd479502f": 3,
"5a608bf24f39f98ffc77720e": 2,
"5e023e53d4353e3302577c4c": 1
},
"Caliber9x18PM": {
"573719762459775a626ccbc1": 1
},
"Caliber9x19PARA": {
"56d59d3ad2720bdb418b4577": 1,
"5c925fa22e221601da359b7b": 1,
"5efb0da7a29a85116f6ea05f": 1
"56d59d3ad2720bdb418b4577": 53,
"5c925fa22e221601da359b7b": 16,
"5efb0da7a29a85116f6ea05f": 4
},
"Caliber9x21": {
"5a26abfac4a28232980eabff": 1,
"5a26ac0ec4a28200741e1e18": 1
"5a26abfac4a28232980eabff": 3,
"5a26ac0ec4a28200741e1e18": 8
},
"Caliber9x39": {
"5c0d668f86f7747ccb7f13b2": 1
@ -2254,108 +2272,108 @@
"equipment": {
"ArmBand": {},
"ArmorVest": {
"5648a7494bdc2d9d488b4583": 1,
"5ab8e79e86f7742d8b372e78": 1,
"5b44d22286f774172b0c9de8": 1,
"5c0e51be86f774598e797894": 1,
"5648a7494bdc2d9d488b4583": 4,
"5ab8e79e86f7742d8b372e78": 2,
"5b44d22286f774172b0c9de8": 3,
"5c0e51be86f774598e797894": 4,
"5c0e53c886f7747fa54205c7": 1,
"5c0e57ba86f7747fa141986d": 1,
"5c0e5bab86f77461f55ed1f3": 1,
"5c0e57ba86f7747fa141986d": 4,
"5c0e5bab86f77461f55ed1f3": 3,
"5c0e625a86f7742d77340f62": 1,
"5c0e655586f774045612eeb2": 1,
"5ca2151486f774244a3b8d30": 1,
"5ca2151486f774244a3b8d30": 2,
"5fd4c474dd870108a754b241": 1,
"609e8540d5c319764c2bc2e9": 1,
"609e8540d5c319764c2bc2e9": 2,
"63737f448b28897f2802b874": 1
},
"Backpack": {
"545cdae64bdc2d39198b4568": 1,
"5ca20d5986f774331e7c9602": 1,
"5f5e467b0bc58666c37e7821": 1,
"545cdae64bdc2d39198b4568": 2,
"5ca20d5986f774331e7c9602": 2,
"5f5e467b0bc58666c37e7821": 3,
"6034d103ca006d2dca39b3f0": 1,
"6038d614d10cbf667352dd44": 1,
"60a272cc93ef783291411d8e": 1,
"60a2828e8689911a226117f9": 1,
"618cfae774bb2d036a049e7c": 1,
"619cf0335771dd3c390269ae": 1,
"62a1b7fbc30cfa1d366af586": 1
"6038d614d10cbf667352dd44": 4,
"60a272cc93ef783291411d8e": 2,
"60a2828e8689911a226117f9": 7,
"618cfae774bb2d036a049e7c": 5,
"619cf0335771dd3c390269ae": 3,
"62a1b7fbc30cfa1d366af586": 3
},
"Earpiece": {
"5645bcc04bdc2d363b8b4572": 1,
"5aa2ba71e5b5b000137b758f": 1,
"5b432b965acfc47a8774094e": 1,
"5e4d34ca86f774264f758330": 1,
"6033fa48ffd42c541047f728": 1
"5645bcc04bdc2d363b8b4572": 5,
"5aa2ba71e5b5b000137b758f": 5,
"5b432b965acfc47a8774094e": 5,
"5e4d34ca86f774264f758330": 5,
"6033fa48ffd42c541047f728": 7
},
"Eyewear": {
"557ff21e4bdc2d89578b4586": 1,
"59e770b986f7742cbd762754": 1,
"5b432be65acfc433000ed01f": 1,
"603409c80ca681766b6a0fb2": 1,
"61c18d83b00456371a66814b": 1
"557ff21e4bdc2d89578b4586": 12,
"59e770b986f7742cbd762754": 13,
"5b432be65acfc433000ed01f": 10,
"603409c80ca681766b6a0fb2": 4,
"61c18d83b00456371a66814b": 4
},
"FaceCover": {
"572b7fa524597762b747ce82": 1,
"5ab8f39486f7745cd93a1cca": 1,
"5ab8f4ff86f77431c60d91ba": 1,
"5b432f3d5acfc4704b4a1dfb": 1,
"5fd8d28367cb5e077335170f": 1,
"572b7fa524597762b747ce82": 2,
"5ab8f39486f7745cd93a1cca": 3,
"5ab8f4ff86f77431c60d91ba": 6,
"5b432f3d5acfc4704b4a1dfb": 19,
"5fd8d28367cb5e077335170f": 2,
"60363c0c92ec1c31037959f5": 1
},
"FirstPrimaryWeapon": {
"5447a9cd4bdc2dbd208b4567": 1,
"576165642459773c7a400233": 1,
"57c44b372459772d2b39b8ce": 1,
"5447a9cd4bdc2dbd208b4567": 2,
"576165642459773c7a400233": 3,
"57c44b372459772d2b39b8ce": 2,
"587e02ff24597743df3deaeb": 1,
"59984ab886f7743e98271174": 1,
"5a367e5dc4a282000e49738f": 1,
"5a367e5dc4a282000e49738f": 3,
"5a7828548dc32e5a9c28b516": 1,
"5aafa857e5b5b00018480968": 1,
"5ac4cd105acfc40016339859": 1,
"5ac66cb05acfc40198510a10": 1,
"5aafa857e5b5b00018480968": 2,
"5ac4cd105acfc40016339859": 2,
"5ac66cb05acfc40198510a10": 2,
"5ba26383d4351e00334c93d9": 1,
"5cc82d76e24e8d00134b4b83": 1,
"5dcbd56fdbd3d91b3e5468d5": 1,
"5e00903ae9dc277128008b87": 1,
"5cc82d76e24e8d00134b4b83": 2,
"5dcbd56fdbd3d91b3e5468d5": 2,
"5e00903ae9dc277128008b87": 3,
"5f2a9575926fd9352339381f": 1,
"5fbcc1d9016cce60e8341ab3": 1,
"5fc3f2d5900b1d5091531e57": 1,
"5fbcc1d9016cce60e8341ab3": 3,
"5fc3f2d5900b1d5091531e57": 3,
"60339954d62c9b14ed777c06": 1,
"618428466ef05c2ce828f218": 1,
"623063e994fc3f7b302a9696": 1,
"628b9c37a733087d0d7fe84b": 1,
"62e14904c2699c0ec93adc47": 1,
"628b9c37a733087d0d7fe84b": 2,
"62e14904c2699c0ec93adc47": 4,
"62e7c4fba689e8c9c50dfc38": 1
},
"Headwear": {
"5645bc214bdc2d363b8b4571": 1,
"5645bc214bdc2d363b8b4571": 2,
"5a154d5cfcdbcb001a3b00da": 1,
"5aa2b8d7e5b5b00014028f4a": 1,
"5aa2ba19e5b5b00014028f4e": 1,
"5aa7d193e5b5b000171d063f": 1,
"5aa7e4a4e5b5b000137b76f2": 1,
"5ac8d6885acfc400180ae7b0": 1,
"5b40e1525acfc4771e1c6611": 1,
"5b40e2bc5acfc40016388216": 1,
"5b40e3f35acfc40016388218": 1,
"5b40e4035acfc47a87740943": 1,
"5b432d215acfc4771e1c6624": 1,
"5aa2b8d7e5b5b00014028f4a": 5,
"5aa2ba19e5b5b00014028f4e": 6,
"5aa7d193e5b5b000171d063f": 3,
"5aa7e4a4e5b5b000137b76f2": 2,
"5ac8d6885acfc400180ae7b0": 2,
"5b40e1525acfc4771e1c6611": 3,
"5b40e2bc5acfc40016388216": 2,
"5b40e3f35acfc40016388218": 3,
"5b40e4035acfc47a87740943": 2,
"5b432d215acfc4771e1c6624": 2,
"5ea17ca01412a1425304d1c0": 1,
"5f60b34a41e30a4ab12a6947": 1,
"5f60b34a41e30a4ab12a6947": 2,
"60361b5a9a15b10d96792291": 1,
"6040de02647ad86262233012": 1,
"61bca7cda0eae612383adf57": 1
"61bca7cda0eae612383adf57": 4
},
"Holster": {
"56d59856d2720bd8418b456a": 1,
"59f98b4986f7746f546d2cef": 1,
"5a17f98cfcdbcb0980087290": 1,
"56d59856d2720bd8418b456a": 3,
"59f98b4986f7746f546d2cef": 2,
"5a17f98cfcdbcb0980087290": 2,
"5b1fa9b25acfc40018633c01": 1,
"5cadc190ae921500103bb3b6": 1,
"5e81c3cbac2bb513793cdc75": 1,
"602a9740da11d6478d5a06dc": 1,
"5cadc190ae921500103bb3b6": 3,
"5e81c3cbac2bb513793cdc75": 25,
"602a9740da11d6478d5a06dc": 2,
"6193a720f8ee7e52e42109ed": 1,
"63088377b5cd696784087147": 1
"63088377b5cd696784087147": 5
},
"Pockets": {
"5af99e9186f7747c447120b8": 1
@ -2366,19 +2384,19 @@
"5c0a794586f77461c458f892": 1
},
"TacticalVest": {
"544a5caa4bdc2d1a388b4568": 1,
"544a5caa4bdc2d1a388b4568": 2,
"5648a69d4bdc2ded0b8b457b": 1,
"5929a2a086f7744f4b234d43": 1,
"5d5d85c586f774279a21cbdb": 1,
"5e9db13186f7742f845ee9d3": 1,
"5f5f41f56760b4138443b352": 1,
"5fd4c60f875c30179f5d04c2": 1,
"5929a2a086f7744f4b234d43": 5,
"5d5d85c586f774279a21cbdb": 5,
"5e9db13186f7742f845ee9d3": 4,
"5f5f41f56760b4138443b352": 5,
"5fd4c60f875c30179f5d04c2": 2,
"603648ff5a45383c122086ac": 1,
"6040dd4ddcf9592f401632d2": 1,
"60a621c49c197e4e8c4455e6": 1,
"6040dd4ddcf9592f401632d2": 2,
"60a621c49c197e4e8c4455e6": 10,
"60a6220e953894617404b00a": 1,
"61bc85697113f767765c7fe7": 1,
"61bcc89aef0f505f0c6cd0fc": 1,
"61bc85697113f767765c7fe7": 2,
"61bcc89aef0f505f0c6cd0fc": 3,
"639343fce101f4caa40a4ef3": 1
}
},
@ -2678,26 +2696,32 @@
"5c07dd120db834001c39092d"
],
"Pockets": [
"63076701a987397c0816d21b",
"5e32f56fcb6d5863cc5e5ee4",
"5a17fb03fcdbcbcae668728f",
"5aaa5e60e5b5b000140293d6",
"602286df23506e50807090c6",
"5e81c4ca763d9f754677befa",
"5e32f56fcb6d5863cc5e5ee4",
"5df8f535bb49d91fb446d6b0",
"617fd91e5539a84ec44ce155",
"5a718b548dc32e000d46d262",
"59e0d99486f7744a32234762",
"59f99a7d86f7745b134aa97b",
"5a718da68dc32e000d46d264",
"5cadc2e0ae9215051e1c21e7",
"5df8f535bb49d91fb446d6b0",
"617fd91e5539a84ec44ce155",
"5a718b548dc32e000d46d262",
"56d59948d2720bb7418b4582",
"63076701a987397c0816d21b",
"5a17fb03fcdbcbcae668728f",
"5aaa5e60e5b5b000140293d6",
"602286df23506e50807090c6",
"5448be9a4bdc2dfd2f8b456a",
"56d59948d2720bb7418b4582",
"5d6e6911a4b9361bd5780d52",
"6193d3149fb0c665d5490e32",
"618a431df1eb8e24b8741deb",
"5b7bef1e5acfc43d82528402",
"630e1adbbd357927e4007c09"
"630e1adbbd357927e4007c09",
"560d5e524bdc2d25448b4571",
"5c0d591486f7744c505b416f",
"5448c1d04bdc2dff2f8b4569",
"5d6e68c4a4b9361b93413f79",
"5d3eb5eca4b9363b1f22f8e4",
"5d6e6869a4b9361c140bcfde"
],
"SecuredContainer": [
"56d59d3ad2720bdb418b4577",
@ -4032,10 +4056,7 @@
}
}
},
"lastName": [
"Поттер",
"Яга"
],
"lastName": [],
"skills": {
"Common": {
"BotReload": {

View File

@ -1,32 +1,32 @@
{
"appearance": {
"body": {
"5cc2e59214c02e000f16684e": 1,
"5cde9f337d6c8b0474535da8": 1,
"5d28ad6986f77429275dba22": 1,
"5d28ad7286f7742926686182": 1,
"5df8a10486f77412672a1e3a": 1,
"5e4bb3ee86f77406975c934e": 1,
"5e9da1d086f774054a667134": 1,
"5fd1eb3fbe3b7107d66cb645": 1,
"5fd22d311add82653b5a704c": 1,
"618d1af10a5a59657e5f56f3": 1,
"619238266c614e6d15792bca": 1,
"637df28ac22da5bb8d046935": 1,
"64a2edba08d26f8d62049c06": 1
"5cc2e59214c02e000f16684e": 697,
"5cde9f337d6c8b0474535da8": 714,
"5d28ad6986f77429275dba22": 708,
"5d28ad7286f7742926686182": 716,
"5df8a10486f77412672a1e3a": 756,
"5e4bb3ee86f77406975c934e": 735,
"5e9da1d086f774054a667134": 728,
"5fd1eb3fbe3b7107d66cb645": 702,
"5fd22d311add82653b5a704c": 711,
"618d1af10a5a59657e5f56f3": 691,
"619238266c614e6d15792bca": 700,
"637df28ac22da5bb8d046935": 742,
"64a2edba08d26f8d62049c06": 664
},
"feet": {
"5cc2e5d014c02e15d53d9c03": 1,
"5cde9fb87d6c8b0474535da9": 1,
"5d28af3486f774292364a6e7": 1,
"5df8a15186f77412640e2e6a": 1,
"5f5e410c6bdad616ad46d60b": 1,
"5f5e41366760b4138443b343": 1,
"5f5e41576760b4138443b344": 1,
"61922589bb2cea6f7a22d964": 1,
"6193be546e5968395b260157": 1,
"637df25a1e688345e1097bd4": 1,
"64a2e970a74bb33d140e6dc5": 1
"5cc2e5d014c02e15d53d9c03": 213,
"5cde9fb87d6c8b0474535da9": 201,
"5d28af3486f774292364a6e7": 192,
"5df8a15186f77412640e2e6a": 213,
"5f5e410c6bdad616ad46d60b": 201,
"5f5e41366760b4138443b343": 200,
"5f5e41576760b4138443b344": 198,
"61922589bb2cea6f7a22d964": 195,
"6193be546e5968395b260157": 213,
"637df25a1e688345e1097bd4": 197,
"64a2e970a74bb33d140e6dc5": 209
},
"hands": [
"5e4bb49586f77406a313ec5a",
@ -2532,117 +2532,117 @@
"inventory": {
"Ammo": {
"Caliber1143x23ACP": {
"5e81f423763d9f754677bf2e": 1,
"5efb0d4f4bc50b58e81710f3": 1,
"5efb0fc6aeb21837e749c801": 1
"5e81f423763d9f754677bf2e": 119,
"5efb0d4f4bc50b58e81710f3": 78,
"5efb0fc6aeb21837e749c801": 7
},
"Caliber12g": {
"560d5e524bdc2d25448b4571": 5,
"58820d1224597753c90aeb13": 2,
"5d6e6772a4b936088465b17c": 4,
"5d6e67fba4b9361bc73bc779": 4,
"5d6e6806a4b936088465b17e": 3,
"5d6e6869a4b9361c140bcfde": 1,
"5d6e6891a4b9361bd473feea": 1,
"5d6e689ca4b9361bc8618956": 1,
"5d6e68b3a4b9361bca7e50b5": 1,
"5d6e68d1a4b93622fe60e845": 1,
"5d6e68dea4b9361bcc29e659": 1,
"5d6e68e6a4b9361c140bcfe0": 1,
"5d6e6911a4b9361bd5780d52": 1
"560d5e524bdc2d25448b4571": 10943,
"58820d1224597753c90aeb13": 2684,
"5d6e6772a4b936088465b17c": 101,
"5d6e67fba4b9361bc73bc779": 3098,
"5d6e6806a4b936088465b17e": 2797,
"5d6e6869a4b9361c140bcfde": 1589,
"5d6e6891a4b9361bd473feea": 1525,
"5d6e689ca4b9361bc8618956": 253,
"5d6e68b3a4b9361bca7e50b5": 631,
"5d6e68d1a4b93622fe60e845": 90,
"5d6e68dea4b9361bcc29e659": 465,
"5d6e68e6a4b9361c140bcfe0": 291,
"5d6e6911a4b9361bd5780d52": 25
},
"Caliber20g": {
"5a38ebd9c4a282000d722a5b": 1,
"5d6e695fa4b936359b35d852": 1,
"5d6e69b9a4b9361bc8618958": 1,
"5d6e69c7a4b9360b6c0d54e4": 1,
"5d6e6a05a4b93618084f58d0": 1,
"5d6e6a42a4b9364f07165f52": 1,
"5d6e6a53a4b9361bd473feec": 1,
"5d6e6a5fa4b93614ec501745": 1
"5a38ebd9c4a282000d722a5b": 5792,
"5d6e695fa4b936359b35d852": 1622,
"5d6e69b9a4b9361bc8618958": 460,
"5d6e69c7a4b9360b6c0d54e4": 628,
"5d6e6a05a4b93618084f58d0": 451,
"5d6e6a42a4b9364f07165f52": 493,
"5d6e6a53a4b9361bd473feec": 1636,
"5d6e6a5fa4b93614ec501745": 340
},
"Caliber23x75": {
"5e85a9a6eacf8c039e4e2ac1": 1
},
"Caliber366TKM": {
"59e6542b86f77411dc52a77a": 44,
"59e655cb86f77411dc52a77b": 20,
"59e6658b86f77411d949b250": 31,
"5f0596629e22f464da6bbdd9": 8
"59e6542b86f77411dc52a77a": 4600,
"59e655cb86f77411dc52a77b": 2355,
"59e6658b86f77411d949b250": 1568,
"5f0596629e22f464da6bbdd9": 101
},
"Caliber545x39": {
"56dfef82d2720bbd668b4567": 1,
"56dff061d2720bb5668b4567": 1,
"56dff0bed2720bb0668b4567": 1,
"56dff216d2720bbd668b4568": 1,
"56dff2ced2720bb4668b4567": 1,
"56dff338d2720bbd668b4569": 1,
"56dff3afd2720bba668b4567": 1,
"56dff421d2720b5f5a8b4567": 1,
"56dff4a2d2720bbd668b456a": 1,
"56dff4ecd2720b5f5a8b4568": 1
"56dfef82d2720bbd668b4567": 132,
"56dff061d2720bb5668b4567": 30,
"56dff0bed2720bb0668b4567": 886,
"56dff216d2720bbd668b4568": 1075,
"56dff2ced2720bb4668b4567": 112,
"56dff338d2720bbd668b4569": 857,
"56dff3afd2720bba668b4567": 3638,
"56dff421d2720b5f5a8b4567": 1059,
"56dff4a2d2720bbd668b456a": 895,
"56dff4ecd2720b5f5a8b4568": 557
},
"Caliber556x45NATO": {
"54527a984bdc2d4e668b4567": 4,
"54527ac44bdc2d36668b4567": 1,
"59e68f6f86f7746c9f75e846": 1,
"59e6906286f7746c9f75e847": 1,
"59e6918f86f7746c9f75e849": 1,
"59e6920f86f77411d82aa167": 1,
"59e6927d86f77411da468256": 1,
"5c0d5ae286f7741e46554302": 3
"54527a984bdc2d4e668b4567": 276,
"54527ac44bdc2d36668b4567": 24,
"59e68f6f86f7746c9f75e846": 306,
"59e6906286f7746c9f75e847": 76,
"59e6918f86f7746c9f75e849": 445,
"59e6920f86f77411d82aa167": 620,
"59e6927d86f77411da468256": 405,
"5c0d5ae286f7741e46554302": 140
},
"Caliber762x25TT": {
"5735fdcd2459776445391d61": 1,
"5735ff5c245977640e39ba7e": 1,
"573601b42459776410737435": 1,
"573602322459776445391df1": 1,
"5736026a245977644601dc61": 1,
"573603562459776430731618": 1,
"573603c924597764442bd9cb": 1
"5735fdcd2459776445391d61": 1165,
"5735ff5c245977640e39ba7e": 610,
"573601b42459776410737435": 677,
"573602322459776445391df1": 246,
"5736026a245977644601dc61": 1698,
"573603562459776430731618": 227,
"573603c924597764442bd9cb": 642
},
"Caliber762x39": {
"5656d7c34bdc2d9d198b4587": 2,
"59e4cf5286f7741778269d8a": 2,
"59e4d3d286f774176a36250a": 1,
"64b7af5a8532cf95ee0a0dbd": 1,
"64b7af734b75259c590fa895": 1
"5656d7c34bdc2d9d198b4587": 630,
"59e4cf5286f7741778269d8a": 991,
"59e4d3d286f774176a36250a": 1362,
"64b7af5a8532cf95ee0a0dbd": 1385,
"64b7af734b75259c590fa895": 670
},
"Caliber762x51": {
"5e023e53d4353e3302577c4c": 15,
"5e023e6e34d52a55c3304f71": 10,
"5e023e88277cce2b522ff2b1": 10
"5e023e53d4353e3302577c4c": 1238,
"5e023e6e34d52a55c3304f71": 961,
"5e023e88277cce2b522ff2b1": 57
},
"Caliber762x54R": {
"5887431f2459777e1612938f": 1,
"5e023cf8186a883be655e54f": 1,
"64b8f7968532cf95ee0a0dbf": 1,
"64b8f7b5389d7ffd620ccba2": 1,
"64b8f7c241772715af0f9c3d": 1
"5887431f2459777e1612938f": 21,
"5e023cf8186a883be655e54f": 10,
"64b8f7968532cf95ee0a0dbf": 202,
"64b8f7b5389d7ffd620ccba2": 130,
"64b8f7c241772715af0f9c3d": 139
},
"Caliber9x18PM": {
"573718ba2459775a75491131": 1,
"573719762459775a626ccbc1": 1,
"573719df2459775a626ccbc2": 1,
"57371aab2459775a77142f22": 1,
"57371b192459775a9f58a5e0": 1,
"57371e4124597760ff7b25f1": 1,
"57371eb62459776125652ac1": 1,
"57371f2b24597761224311f1": 1,
"57371f8d24597761006c6a81": 1,
"5737201124597760fc4431f1": 1,
"5737207f24597760ff7b25f2": 1,
"573720e02459776143012541": 1,
"57372140245977611f70ee91": 1,
"5737218f245977612125ba51": 1
"573718ba2459775a75491131": 209,
"573719762459775a626ccbc1": 1641,
"573719df2459775a626ccbc2": 22,
"57371aab2459775a77142f22": 33,
"57371b192459775a9f58a5e0": 261,
"57371e4124597760ff7b25f1": 420,
"57371eb62459776125652ac1": 584,
"57371f2b24597761224311f1": 342,
"57371f8d24597761006c6a81": 222,
"5737201124597760fc4431f1": 319,
"5737207f24597760ff7b25f2": 168,
"573720e02459776143012541": 72,
"57372140245977611f70ee91": 20,
"5737218f245977612125ba51": 272
},
"Caliber9x19PARA": {
"56d59d3ad2720bdb418b4577": 1,
"58864a4f2459770fcc257101": 1,
"5c3df7d588a4501f290594e5": 1,
"5efb0da7a29a85116f6ea05f": 1,
"5efb0e16aeb21837e749c7ff": 1,
"64b7bbb74b75259c590fa897": 1
"56d59d3ad2720bdb418b4577": 2877,
"58864a4f2459770fcc257101": 2749,
"5c3df7d588a4501f290594e5": 898,
"5efb0da7a29a85116f6ea05f": 4,
"5efb0e16aeb21837e749c7ff": 118,
"64b7bbb74b75259c590fa897": 874
},
"Caliber9x21": {
"5a26abfac4a28232980eabff": 1
@ -2651,191 +2651,191 @@
"equipment": {
"ArmBand": {},
"ArmorVest": {
"5648a7494bdc2d9d488b4583": 3,
"59e7635f86f7742cbf2c1095": 3,
"5ab8e4ed86f7742d8e50c7fa": 2,
"5ab8e79e86f7742d8b372e78": 1,
"5b44d22286f774172b0c9de8": 3,
"5c0e53c886f7747fa54205c7": 2,
"5c0e5edb86f77461f55ed1f7": 3,
"5df8a2ca86f7740bfe6df777": 3,
"607f20859ee58b18e41ecd90": 1,
"609e8540d5c319764c2bc2e9": 2,
"62a09d79de7ac81993580530": 1,
"64be79e2bf8412471d0d9bcc": 1
"5648a7494bdc2d9d488b4583": 898,
"59e7635f86f7742cbf2c1095": 2334,
"5ab8e4ed86f7742d8e50c7fa": 731,
"5ab8e79e86f7742d8b372e78": 85,
"5b44d22286f774172b0c9de8": 191,
"5c0e53c886f7747fa54205c7": 352,
"5c0e5edb86f77461f55ed1f7": 795,
"5df8a2ca86f7740bfe6df777": 1127,
"607f20859ee58b18e41ecd90": 23,
"609e8540d5c319764c2bc2e9": 95,
"62a09d79de7ac81993580530": 286,
"64be79e2bf8412471d0d9bcc": 279
},
"Backpack": {
"544a5cde4bdc2d39388b456b": 9,
"56e335e4d2720b6c058b456d": 4,
"56e33634d2720bd8058b456b": 10,
"56e33680d2720be2748b4576": 12,
"59e763f286f7742ee57895da": 5,
"5ab8ee7786f7742d8f33f0b9": 5,
"5ab8f04f86f774585f4237d8": 12,
"5f5e45cc5021ce62144be7aa": 4,
"60a2828e8689911a226117f9": 5
"544a5cde4bdc2d39388b456b": 2054,
"56e335e4d2720b6c058b456d": 1208,
"56e33634d2720bd8058b456b": 3015,
"56e33680d2720be2748b4576": 4124,
"59e763f286f7742ee57895da": 236,
"5ab8ee7786f7742d8f33f0b9": 673,
"5ab8f04f86f774585f4237d8": 470,
"5f5e45cc5021ce62144be7aa": 1679,
"60a2828e8689911a226117f9": 109
},
"Earpiece": {},
"Eyewear": {
"557ff21e4bdc2d89578b4586": 3,
"59e770b986f7742cbd762754": 2,
"5aa2b923e5b5b000137b7589": 2,
"5aa2b986e5b5b00014028f4c": 3,
"5aa2b9aee5b5b00015693121": 2,
"5b432be65acfc433000ed01f": 3,
"5d6d2ef3a4b93618084f58bd": 2,
"603409c80ca681766b6a0fb2": 1,
"61c18d83b00456371a66814b": 1,
"62a09e410b9d3c46de5b6e78": 1
"557ff21e4bdc2d89578b4586": 1777,
"59e770b986f7742cbd762754": 1469,
"5aa2b923e5b5b000137b7589": 540,
"5aa2b986e5b5b00014028f4c": 1821,
"5aa2b9aee5b5b00015693121": 1169,
"5b432be65acfc433000ed01f": 747,
"5d6d2ef3a4b93618084f58bd": 323,
"603409c80ca681766b6a0fb2": 179,
"61c18d83b00456371a66814b": 117,
"62a09e410b9d3c46de5b6e78": 106
},
"FaceCover": {
"572b7f1624597762ae139822": 10,
"572b7fa524597762b747ce82": 10,
"59e7715586f7742ee5789605": 10,
"5ab8f39486f7745cd93a1cca": 8,
"5ab8f4ff86f77431c60d91ba": 5,
"5b4326435acfc433000ed01d": 10,
"5b432b2f5acfc4771e1c6622": 10,
"5b432b6c5acfc4001a599bf0": 6,
"5b432c305acfc40019478128": 10,
"5b432f3d5acfc4704b4a1dfb": 10,
"5bd073a586f7747e6f135799": 7,
"5e54f76986f7740366043752": 3,
"5e54f79686f7744022011103": 1,
"5e71f6be86f77429f2683c44": 1,
"60363c0c92ec1c31037959f5": 10,
"62a09e08de7ac81993580532": 1,
"62a5c2c98ec41a51b34739c0": 1,
"62a5c333ec21e50cad3b5dc6": 1,
"62a5c41e8ec41a51b34739c3": 1
"572b7f1624597762ae139822": 2542,
"572b7fa524597762b747ce82": 5011,
"59e7715586f7742ee5789605": 4294,
"5ab8f39486f7745cd93a1cca": 338,
"5ab8f4ff86f77431c60d91ba": 623,
"5b4326435acfc433000ed01d": 1493,
"5b432b2f5acfc4771e1c6622": 94,
"5b432b6c5acfc4001a599bf0": 206,
"5b432c305acfc40019478128": 596,
"5b432f3d5acfc4704b4a1dfb": 537,
"5bd073a586f7747e6f135799": 267,
"5e54f76986f7740366043752": 97,
"5e54f79686f7744022011103": 74,
"5e71f6be86f77429f2683c44": 16,
"60363c0c92ec1c31037959f5": 416,
"62a09e08de7ac81993580532": 66,
"62a5c2c98ec41a51b34739c0": 90,
"62a5c333ec21e50cad3b5dc6": 144,
"62a5c41e8ec41a51b34739c3": 121
},
"FirstPrimaryWeapon": {
"5447a9cd4bdc2dbd208b4567": 1,
"54491c4f4bdc2db1078b4568": 61,
"5580223e4bdc2d1c128b457f": 4,
"5644bd2b4bdc2d3b4c8b4572": 10,
"56dee2bdd2720bc8328b4567": 80,
"574d967124597745970e7c94": 56,
"576165642459773c7a400233": 80,
"57d14d2524597714373db789": 16,
"57dc2fa62459775949412633": 41,
"587e02ff24597743df3deaeb": 37,
"59d6088586f774275f37482f": 22,
"59e6152586f77473dc057aa1": 83,
"59e6687d86f77411d949b251": 61,
"59f9cabd86f7743a10721f46": 49,
"59ff346386f77477562ff5e2": 12,
"5a38e6bac4a2826c6e06d79b": 78,
"5a7828548dc32e5a9c28b516": 1,
"5ab8e9fcd8ce870019439434": 4,
"5ac4cd105acfc40016339859": 32,
"5ac66d725acfc43b321d4b60": 1,
"5ac66d9b5acfc4001633997a": 9,
"5ae08f0a5acfc408fb1398a1": 4,
"5bf3e03b0db834001d2c4a9c": 4,
"5bf3e0490db83400196199af": 7,
"5bfd297f0db834001a669119": 5,
"5c07c60e0db834002330051f": 33,
"5c501a4d2e221602b412b540": 27,
"5d2f0d8048f0356c925bc3b0": 1,
"5de652c31b7e3716273428be": 17,
"5e00903ae9dc277128008b87": 1,
"5e848cc2988a8701445df1e8": 1,
"5e870397991fd70db46995c8": 29,
"5ea03f7400685063ec28bfa8": 11,
"606dae0ab0e443224b421bb7": 57,
"60db29ce99594040e04c4a27": 4,
"61f7c9e189e6fb1a5e3ea78d": 32,
"6259b864ebedf17603599e88": 1,
"643ea5b23db6f9f57107d9fd": 1
"5447a9cd4bdc2dbd208b4567": 22,
"54491c4f4bdc2db1078b4568": 2513,
"5580223e4bdc2d1c128b457f": 850,
"5644bd2b4bdc2d3b4c8b4572": 208,
"56dee2bdd2720bc8328b4567": 2569,
"574d967124597745970e7c94": 1051,
"576165642459773c7a400233": 2099,
"57d14d2524597714373db789": 390,
"57dc2fa62459775949412633": 1183,
"587e02ff24597743df3deaeb": 707,
"59d6088586f774275f37482f": 384,
"59e6152586f77473dc057aa1": 2202,
"59e6687d86f77411d949b251": 1685,
"59f9cabd86f7743a10721f46": 1388,
"59ff346386f77477562ff5e2": 254,
"5a38e6bac4a2826c6e06d79b": 2983,
"5a7828548dc32e5a9c28b516": 249,
"5ab8e9fcd8ce870019439434": 104,
"5ac4cd105acfc40016339859": 700,
"5ac66d725acfc43b321d4b60": 64,
"5ac66d9b5acfc4001633997a": 148,
"5ae08f0a5acfc408fb1398a1": 79,
"5bf3e03b0db834001d2c4a9c": 176,
"5bf3e0490db83400196199af": 254,
"5bfd297f0db834001a669119": 324,
"5c07c60e0db834002330051f": 695,
"5c501a4d2e221602b412b540": 702,
"5d2f0d8048f0356c925bc3b0": 28,
"5de652c31b7e3716273428be": 928,
"5e00903ae9dc277128008b87": 32,
"5e848cc2988a8701445df1e8": 2,
"5e870397991fd70db46995c8": 829,
"5ea03f7400685063ec28bfa8": 537,
"606dae0ab0e443224b421bb7": 1235,
"60db29ce99594040e04c4a27": 866,
"61f7c9e189e6fb1a5e3ea78d": 301,
"6259b864ebedf17603599e88": 51,
"643ea5b23db6f9f57107d9fd": 33
},
"Headwear": {
"572b7d8524597762b472f9d1": 1,
"572b7fa124597762b472f9d2": 1,
"59e7708286f7742cbd762753": 1,
"59e770f986f7742cbe3164ef": 1,
"59e7711e86f7746cae05fbe1": 1,
"59ef13ca86f77445fd0e2483": 1,
"5a43943586f77416ad2f06e2": 1,
"5a43957686f7742a2c2f11b0": 1,
"5a7c4850e899ef00150be885": 1,
"5aa2a7e8e5b5b00016327c16": 1,
"5aa2b87de5b5b00016327c25": 1,
"5aa2b89be5b5b0001569311f": 1,
"5aa2b8d7e5b5b00014028f4a": 1,
"5aa2b9ede5b5b000137b758b": 1,
"5aa2ba19e5b5b00014028f4e": 1,
"5aa2ba46e5b5b000137b758d": 1,
"5aa7cfc0e5b5b00015693143": 1,
"5aa7d03ae5b5b00016327db5": 1,
"5ab8f20c86f7745cdb629fb2": 1,
"5b4329075acfc400153b78ff": 1,
"5bd073c986f7747f627e796c": 1,
"5c06c6a80db834001b735491": 1,
"5c08f87c0db8340019124324": 1,
"5c0d2727d174af02a012cf58": 1,
"5df8a58286f77412631087ed": 1,
"5ea05cf85ad9772e6624305d": 1,
"5f60e6403b85f6263c14558c": 1,
"5f60e7788adaa7100c3adb49": 1,
"5f60e784f2bcbb675b00dac7": 1,
"603618feffd42c541047f771": 1,
"603619720ca681766b6a0fc4": 1,
"60361a7497633951dc245eb4": 1,
"60361b0b5a45383c122086a1": 1,
"60361b5a9a15b10d96792291": 1,
"6040de02647ad86262233012": 1,
"60b52e5bc7d8103275739d67": 1,
"60bf74184a63fc79b60c57f6": 1,
"61c18db6dfd64163ea78fbb4": 1
"572b7d8524597762b472f9d1": 2053,
"572b7fa124597762b472f9d2": 2967,
"59e7708286f7742cbd762753": 2429,
"59e770f986f7742cbe3164ef": 2492,
"59e7711e86f7746cae05fbe1": 807,
"59ef13ca86f77445fd0e2483": 5,
"5a43943586f77416ad2f06e2": 29,
"5a43957686f7742a2c2f11b0": 35,
"5a7c4850e899ef00150be885": 634,
"5aa2a7e8e5b5b00016327c16": 254,
"5aa2b87de5b5b00016327c25": 218,
"5aa2b89be5b5b0001569311f": 514,
"5aa2b8d7e5b5b00014028f4a": 1182,
"5aa2b9ede5b5b000137b758b": 450,
"5aa2ba19e5b5b00014028f4e": 763,
"5aa2ba46e5b5b000137b758d": 269,
"5aa7cfc0e5b5b00015693143": 205,
"5aa7d03ae5b5b00016327db5": 507,
"5ab8f20c86f7745cdb629fb2": 709,
"5b4329075acfc400153b78ff": 475,
"5bd073c986f7747f627e796c": 79,
"5c06c6a80db834001b735491": 934,
"5c08f87c0db8340019124324": 145,
"5c0d2727d174af02a012cf58": 232,
"5df8a58286f77412631087ed": 1366,
"5ea05cf85ad9772e6624305d": 437,
"5f60e6403b85f6263c14558c": 105,
"5f60e7788adaa7100c3adb49": 210,
"5f60e784f2bcbb675b00dac7": 264,
"603618feffd42c541047f771": 179,
"603619720ca681766b6a0fc4": 430,
"60361a7497633951dc245eb4": 569,
"60361b0b5a45383c122086a1": 394,
"60361b5a9a15b10d96792291": 604,
"6040de02647ad86262233012": 300,
"60b52e5bc7d8103275739d67": 163,
"60bf74184a63fc79b60c57f6": 76,
"61c18db6dfd64163ea78fbb4": 290
},
"Holster": {
"5448bd6b4bdc2dfc2f8b4569": 1,
"56d59856d2720bd8418b456a": 1,
"56e0598dd2720bb5668b45a6": 1,
"571a12c42459771f627b58a0": 1,
"576a581d2459771e7b1bc4f1": 1,
"579204f224597773d619e051": 1,
"59f98b4986f7746f546d2cef": 1,
"5a17f98cfcdbcb0980087290": 1,
"5e81c3cbac2bb513793cdc75": 1,
"602a9740da11d6478d5a06dc": 1,
"624c2e8614da335f1e034d8c": 1,
"64748cb8de82c85eaf0a273a": 1
"5448bd6b4bdc2dfc2f8b4569": 526,
"56d59856d2720bd8418b456a": 125,
"56e0598dd2720bb5668b45a6": 96,
"571a12c42459771f627b58a0": 1027,
"576a581d2459771e7b1bc4f1": 324,
"579204f224597773d619e051": 138,
"59f98b4986f7746f546d2cef": 3,
"5a17f98cfcdbcb0980087290": 27,
"5e81c3cbac2bb513793cdc75": 63,
"602a9740da11d6478d5a06dc": 4,
"624c2e8614da335f1e034d8c": 26,
"64748cb8de82c85eaf0a273a": 2
},
"Pockets": {
"557ffd194bdc2d28148b457f": 1
},
"Scabbard": {
"54491bb74bdc2d09088b4567": 5,
"57e26ea924597715ca604a09": 5,
"57e26fc7245977162a14b800": 5,
"5bc9c1e2d4351e00367fbcf0": 1,
"5c07df7f0db834001b73588a": 2
"54491bb74bdc2d09088b4567": 897,
"57e26ea924597715ca604a09": 5906,
"57e26fc7245977162a14b800": 16315,
"5bc9c1e2d4351e00367fbcf0": 316,
"5c07df7f0db834001b73588a": 303
},
"SecondPrimaryWeapon": {},
"SecuredContainer": {
"5c0a794586f77461c458f892": 1
},
"TacticalVest": {
"572b7adb24597762ae139821": 2,
"5929a2a086f7744f4b234d43": 2,
"592c2d1a86f7746dbe2af32a": 2,
"59e7643b86f7742cbf2c109a": 2,
"5ab8dab586f77441cd04f2a2": 2,
"5c0e446786f7742013381639": 1,
"5c0e6a1586f77404597b4965": 2,
"5ca20abf86f77418567a43f2": 2,
"5d5d646386f7742797261fd9": 1,
"5e4abfed86f77406a2713cf7": 2,
"5fd4c4fa16cac650092f6771": 2,
"5fd4c5477a8d854fa0105061": 2,
"5fd4c60f875c30179f5d04c2": 2,
"6034cf5fffd42c541047f72e": 2,
"6034d0230ca681766b6a0fb5": 2,
"603648ff5a45383c122086ac": 2,
"6040dd4ddcf9592f401632d2": 2,
"64be7110bf597ba84a0a41ea": 1
"572b7adb24597762ae139821": 7097,
"5929a2a086f7744f4b234d43": 1460,
"592c2d1a86f7746dbe2af32a": 103,
"59e7643b86f7742cbf2c109a": 3576,
"5ab8dab586f77441cd04f2a2": 757,
"5c0e446786f7742013381639": 909,
"5c0e6a1586f77404597b4965": 145,
"5ca20abf86f77418567a43f2": 1298,
"5d5d646386f7742797261fd9": 678,
"5e4abfed86f77406a2713cf7": 1488,
"5fd4c4fa16cac650092f6771": 794,
"5fd4c5477a8d854fa0105061": 6558,
"5fd4c60f875c30179f5d04c2": 129,
"6034cf5fffd42c541047f72e": 2147,
"6034d0230ca681766b6a0fb5": 495,
"603648ff5a45383c122086ac": 1213,
"6040dd4ddcf9592f401632d2": 415,
"64be7110bf597ba84a0a41ea": 1924
}
},
"items": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -386,7 +386,7 @@
"DEFAULT_BEAR_BEHAVIOUR": "Attack",
"DEFAULT_ENEMY_BEAR": true,
"DEFAULT_ENEMY_USEC": true,
"DEFAULT_SAVAGE_BEHAVIOUR": "Warn",
"DEFAULT_SAVAGE_BEHAVIOUR": "Attack",
"DEFAULT_USEC_BEHAVIOUR": "Attack",
"DIST_TO_ENEMY_YO_CAN_HEAL": 130,
"DIST_TO_FOUND_SQRT": 400,
@ -897,7 +897,7 @@
"DEFAULT_BEAR_BEHAVIOUR": "Attack",
"DEFAULT_ENEMY_BEAR": true,
"DEFAULT_ENEMY_USEC": true,
"DEFAULT_SAVAGE_BEHAVIOUR": "Warn",
"DEFAULT_SAVAGE_BEHAVIOUR": "Attack",
"DEFAULT_USEC_BEHAVIOUR": "Attack",
"DIST_TO_ENEMY_YO_CAN_HEAL": 130,
"DIST_TO_FOUND_SQRT": 400,
@ -1408,7 +1408,7 @@
"DEFAULT_BEAR_BEHAVIOUR": "Attack",
"DEFAULT_ENEMY_BEAR": true,
"DEFAULT_ENEMY_USEC": true,
"DEFAULT_SAVAGE_BEHAVIOUR": "Warn",
"DEFAULT_SAVAGE_BEHAVIOUR": "Attack",
"DEFAULT_USEC_BEHAVIOUR": "Attack",
"DIST_TO_ENEMY_YO_CAN_HEAL": 130,
"DIST_TO_FOUND_SQRT": 400,
@ -1919,7 +1919,7 @@
"DEFAULT_BEAR_BEHAVIOUR": "Attack",
"DEFAULT_ENEMY_BEAR": true,
"DEFAULT_ENEMY_USEC": true,
"DEFAULT_SAVAGE_BEHAVIOUR": "Warn",
"DEFAULT_SAVAGE_BEHAVIOUR": "Attack",
"DEFAULT_USEC_BEHAVIOUR": "Attack",
"DIST_TO_ENEMY_YO_CAN_HEAL": 130,
"DIST_TO_FOUND_SQRT": 400,
@ -2253,18 +2253,18 @@
"inventory": {
"Ammo": {
"Caliber762x39": {
"5656d7c34bdc2d9d198b4587": 1,
"59e0d99486f7744a32234762": 1,
"64b7af5a8532cf95ee0a0dbd": 1
"5656d7c34bdc2d9d198b4587": 410,
"59e0d99486f7744a32234762": 165,
"64b7af5a8532cf95ee0a0dbd": 386
},
"Caliber762x51": {
"5a6086ea4f39f99cd479502f": 1,
"5a608bf24f39f98ffc77720e": 1,
"5e023e53d4353e3302577c4c": 1
"5a6086ea4f39f99cd479502f": 166,
"5a608bf24f39f98ffc77720e": 211,
"5e023e53d4353e3302577c4c": 2440
},
"Caliber9x19PARA": {
"56d59d3ad2720bdb418b4577": 1,
"64b7bbb74b75259c590fa897": 1
"56d59d3ad2720bdb418b4577": 1891,
"64b7bbb74b75259c590fa897": 1887
}
},
"equipment": {
@ -2274,20 +2274,20 @@
"Earpiece": {},
"Eyewear": {},
"FaceCover": {
"5c1a1e3f2e221602b66cc4c2": 1,
"62963c18dbc8ab5f0d382d0b": 1
"5c1a1e3f2e221602b66cc4c2": 2,
"62963c18dbc8ab5f0d382d0b": 1887
},
"FirstPrimaryWeapon": {
"5dcbd56fdbd3d91b3e5468d5": 1,
"606587252535c57a13424cfd": 1,
"6165ac306ef05c2ce828ef74": 1
"5dcbd56fdbd3d91b3e5468d5": 1376,
"606587252535c57a13424cfd": 961,
"6165ac306ef05c2ce828ef74": 1441
},
"Headwear": {
"5a43957686f7742a2c2f11b0": 1
},
"Holster": {
"5a7ae0c351dfba0017554310": 1,
"5b1fa9b25acfc40018633c01": 1
"5a7ae0c351dfba0017554310": 2369,
"5b1fa9b25acfc40018633c01": 1409
},
"Pockets": {
"5af99e9186f7747c447120b8": 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -305,7 +305,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -786,7 +786,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -1267,7 +1267,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -1748,7 +1748,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -2178,8 +2178,8 @@
"5fc382a9d724d907e2077dab": 1
},
"Caliber9x21": {
"5a269f97c4a282000b151807": 1,
"5a26abfac4a28232980eabff": 1
"5a269f97c4a282000b151807": 13,
"5a26abfac4a28232980eabff": 968
}
},
"equipment": {
@ -2192,8 +2192,8 @@
"63626d904aa74b8fe30ab426": 1
},
"FirstPrimaryWeapon": {
"5c46fbd72e2216398b5a8c9c": 1,
"627e14b21713922ded6f2c15": 1
"5c46fbd72e2216398b5a8c9c": 968,
"627e14b21713922ded6f2c15": 13
},
"Headwear": {
"636270263f2495c26f00b007": 1
@ -2206,8 +2206,8 @@
},
"Scabbard": {},
"SecondPrimaryWeapon": {
"57dc2fa62459775949412633": 1,
"5ba26383d4351e00334c93d9": 1
"57dc2fa62459775949412633": 968,
"5ba26383d4351e00334c93d9": 13
},
"SecuredContainer": {
"5c0a794586f77461c458f892": 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"5fb53d0b7b5d1342ee24bd64": 1
},
"feet": {
"5fb535bd1c69e5198e234125": 1,
"5fb535bd1c69e5198e234125": 5,
"5fb535cf1c69e5198e234126": 1
},
"hands": [
@ -315,7 +315,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -793,7 +793,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -1271,7 +1271,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -1749,7 +1749,7 @@
"DIST_LAY_CHECK": 11,
"DIST_TO_COVER_TO_LAY": 3.5,
"DIST_TO_COVER_TO_LAY_SQRT": 12.25,
"IF_NO_ENEMY": true,
"IF_NO_ENEMY": false,
"LAY_AIM": 0.6,
"LAY_CHANCE_DANGER": 40,
"MAX_CAN_LAY_DIST": 200,
@ -2169,12 +2169,12 @@
"54527a984bdc2d4e668b4567": 1
},
"Caliber762x51": {
"5a6086ea4f39f99cd479502f": 1,
"5e023e53d4353e3302577c4c": 1
"5a6086ea4f39f99cd479502f": 13,
"5e023e53d4353e3302577c4c": 45
},
"Caliber762x54R": {
"560d61e84bdc2da74d8b4571": 1,
"5887431f2459777e1612938f": 1
"560d61e84bdc2da74d8b4571": 92,
"5887431f2459777e1612938f": 145
},
"Caliber9x19PARA": {
"56d59d3ad2720bdb418b4577": 1
@ -2183,23 +2183,23 @@
"equipment": {
"ArmBand": {},
"ArmorVest": {
"5e4abb5086f77406975c9342": 1,
"5fd4c474dd870108a754b241": 1
"5e4abb5086f77406975c9342": 13,
"5fd4c474dd870108a754b241": 9
},
"Backpack": {},
"Earpiece": {},
"Eyewear": {},
"FaceCover": {
"5ab8f4ff86f77431c60d91ba": 1,
"5b432b2f5acfc4771e1c6622": 1,
"635267ab3c89e2112001f826": 1
"5ab8f4ff86f77431c60d91ba": 1506,
"5b432b2f5acfc4771e1c6622": 1584,
"635267ab3c89e2112001f826": 997
},
"FirstPrimaryWeapon": {
"55801eed4bdc2d89578b4588": 1,
"5bfea6e90db834001b7347f3": 1,
"5c46fbd72e2216398b5a8c9c": 1,
"5df8ce05b11454561e39243b": 1,
"6176aca650224f204c1da3fb": 1
"55801eed4bdc2d89578b4588": 2465,
"5bfea6e90db834001b7347f3": 20,
"5c46fbd72e2216398b5a8c9c": 1564,
"5df8ce05b11454561e39243b": 13,
"6176aca650224f204c1da3fb": 25
},
"Headwear": {},
"Holster": {},
@ -2208,17 +2208,17 @@
},
"Scabbard": {},
"SecondPrimaryWeapon": {
"5447a9cd4bdc2dbd208b4567": 1,
"57dc2fa62459775949412633": 1,
"59984ab886f7743e98271174": 1
"5447a9cd4bdc2dbd208b4567": 90,
"57dc2fa62459775949412633": 1873,
"59984ab886f7743e98271174": 1133
},
"SecuredContainer": {
"5c0a794586f77461c458f892": 1
},
"TacticalVest": {
"544a5caa4bdc2d1a388b4568": 1,
"61bcc89aef0f505f0c6cd0fc": 1,
"63611865ba5b90db0c0399d1": 1
"544a5caa4bdc2d1a388b4568": 18,
"61bcc89aef0f505f0c6cd0fc": 59,
"63611865ba5b90db0c0399d1": 4010
}
},
"items": {

View File

@ -1,30 +1,30 @@
{
"appearance": {
"body": {
"5cc2e59214c02e000f16684e": 1,
"5cde9f337d6c8b0474535da8": 1,
"5d28ad6986f77429275dba22": 1,
"5d28ad7286f7742926686182": 1,
"5df8a10486f77412672a1e3a": 1,
"5e4bb3ee86f77406975c934e": 1,
"5e9da1d086f774054a667134": 1,
"5fd1eb3fbe3b7107d66cb645": 1,
"5fd22d311add82653b5a704c": 1,
"618d1af10a5a59657e5f56f3": 1,
"619238266c614e6d15792bca": 1,
"637df28ac22da5bb8d046935": 1
"5cc2e59214c02e000f16684e": 44,
"5cde9f337d6c8b0474535da8": 47,
"5d28ad6986f77429275dba22": 39,
"5d28ad7286f7742926686182": 52,
"5df8a10486f77412672a1e3a": 40,
"5e4bb3ee86f77406975c934e": 35,
"5e9da1d086f774054a667134": 61,
"5fd1eb3fbe3b7107d66cb645": 42,
"5fd22d311add82653b5a704c": 42,
"618d1af10a5a59657e5f56f3": 38,
"619238266c614e6d15792bca": 46,
"637df28ac22da5bb8d046935": 38
},
"feet": {
"5cc2e5d014c02e15d53d9c03": 1,
"5cde9fb87d6c8b0474535da9": 1,
"5d28af3486f774292364a6e7": 1,
"5df8a15186f77412640e2e6a": 1,
"5f5e410c6bdad616ad46d60b": 1,
"5f5e41366760b4138443b343": 1,
"5f5e41576760b4138443b344": 1,
"61922589bb2cea6f7a22d964": 1,
"6193be546e5968395b260157": 1,
"637df25a1e688345e1097bd4": 1
"5cc2e5d014c02e15d53d9c03": 70,
"5cde9fb87d6c8b0474535da9": 58,
"5d28af3486f774292364a6e7": 65,
"5df8a15186f77412640e2e6a": 53,
"5f5e410c6bdad616ad46d60b": 73,
"5f5e41366760b4138443b343": 64,
"5f5e41576760b4138443b344": 86,
"61922589bb2cea6f7a22d964": 48,
"6193be546e5968395b260157": 83,
"637df25a1e688345e1097bd4": 65
},
"hands": [
"5fd78fe9e3bfcf6cab4c9f54",
@ -2179,26 +2179,26 @@
"inventory": {
"Ammo": {
"Caliber12g": {
"560d5e524bdc2d25448b4571": 1,
"5d6e6806a4b936088465b17e": 1,
"5d6e6891a4b9361bd473feea": 1,
"5d6e68dea4b9361bcc29e659": 1,
"5d6e6911a4b9361bd5780d52": 1
"560d5e524bdc2d25448b4571": 181,
"5d6e6806a4b936088465b17e": 44,
"5d6e6891a4b9361bd473feea": 12,
"5d6e68dea4b9361bcc29e659": 26,
"5d6e6911a4b9361bd5780d52": 19
},
"Caliber20g": {
"5a38ebd9c4a282000d722a5b": 1
},
"Caliber366TKM": {
"59e6542b86f77411dc52a77a": 1,
"5f0596629e22f464da6bbdd9": 1
"59e6542b86f77411dc52a77a": 3,
"5f0596629e22f464da6bbdd9": 17
},
"Caliber545x39": {
"56dff3afd2720bba668b4567": 1
},
"Caliber556x45NATO": {
"54527a984bdc2d4e668b4567": 1,
"54527ac44bdc2d36668b4567": 1,
"5c0d5ae286f7741e46554302": 1
"54527a984bdc2d4e668b4567": 25,
"54527ac44bdc2d36668b4567": 7,
"5c0d5ae286f7741e46554302": 4
},
"Caliber762x25TT": {
"5736026a245977644601dc61": 1
@ -2207,8 +2207,8 @@
"5656d7c34bdc2d9d198b4587": 1
},
"Caliber762x51": {
"5e023e53d4353e3302577c4c": 1,
"5e023e6e34d52a55c3304f71": 1
"5e023e53d4353e3302577c4c": 29,
"5e023e6e34d52a55c3304f71": 39
},
"Caliber9x18PM": {
"573719762459775a626ccbc1": 1
@ -2220,86 +2220,86 @@
"equipment": {
"ArmBand": {},
"ArmorVest": {
"5648a7494bdc2d9d488b4583": 1,
"59e7635f86f7742cbf2c1095": 1,
"5ab8e4ed86f7742d8e50c7fa": 1,
"5ab8e79e86f7742d8b372e78": 1,
"5b44d22286f774172b0c9de8": 1,
"5c0e53c886f7747fa54205c7": 1,
"5c0e5edb86f77461f55ed1f7": 1,
"5df8a2ca86f7740bfe6df777": 1,
"609e8540d5c319764c2bc2e9": 1
"5648a7494bdc2d9d488b4583": 28,
"59e7635f86f7742cbf2c1095": 37,
"5ab8e4ed86f7742d8e50c7fa": 21,
"5ab8e79e86f7742d8b372e78": 23,
"5b44d22286f774172b0c9de8": 30,
"5c0e53c886f7747fa54205c7": 22,
"5c0e5edb86f77461f55ed1f7": 36,
"5df8a2ca86f7740bfe6df777": 43,
"609e8540d5c319764c2bc2e9": 28
},
"Backpack": {
"61b9e1aaef9a1b5d6a79899a": 1
},
"Earpiece": {},
"Eyewear": {
"5aa2b923e5b5b000137b7589": 1,
"5aa2b9aee5b5b00015693121": 1,
"5c1a1cc52e221602b3136e3d": 1,
"5d6d2ef3a4b93618084f58bd": 1,
"603409c80ca681766b6a0fb2": 1
"5aa2b923e5b5b000137b7589": 31,
"5aa2b9aee5b5b00015693121": 35,
"5c1a1cc52e221602b3136e3d": 15,
"5d6d2ef3a4b93618084f58bd": 22,
"603409c80ca681766b6a0fb2": 20
},
"FaceCover": {
"5c1a1e3f2e221602b66cc4c2": 1
},
"FirstPrimaryWeapon": {
"54491c4f4bdc2db1078b4568": 1,
"5644bd2b4bdc2d3b4c8b4572": 1,
"56dee2bdd2720bc8328b4567": 1,
"574d967124597745970e7c94": 1,
"576165642459773c7a400233": 1,
"57d14d2524597714373db789": 1,
"57dc2fa62459775949412633": 1,
"587e02ff24597743df3deaeb": 1,
"59d6088586f774275f37482f": 1,
"59e6152586f77473dc057aa1": 1,
"59e6687d86f77411d949b251": 1,
"59f9cabd86f7743a10721f46": 1,
"59ff346386f77477562ff5e2": 1,
"5a38e6bac4a2826c6e06d79b": 1,
"5ac4cd105acfc40016339859": 1,
"5ac66d9b5acfc4001633997a": 1,
"5c07c60e0db834002330051f": 1,
"5c501a4d2e221602b412b540": 1,
"606dae0ab0e443224b421bb7": 1
"54491c4f4bdc2db1078b4568": 10,
"5644bd2b4bdc2d3b4c8b4572": 6,
"56dee2bdd2720bc8328b4567": 24,
"574d967124597745970e7c94": 99,
"576165642459773c7a400233": 47,
"57d14d2524597714373db789": 11,
"57dc2fa62459775949412633": 49,
"587e02ff24597743df3deaeb": 97,
"59d6088586f774275f37482f": 35,
"59e6152586f77473dc057aa1": 46,
"59e6687d86f77411d949b251": 40,
"59f9cabd86f7743a10721f46": 39,
"59ff346386f77477562ff5e2": 15,
"5a38e6bac4a2826c6e06d79b": 22,
"5ac4cd105acfc40016339859": 32,
"5ac66d9b5acfc4001633997a": 14,
"5c07c60e0db834002330051f": 36,
"5c501a4d2e221602b412b540": 17,
"606dae0ab0e443224b421bb7": 26
},
"Headwear": {
"5a43943586f77416ad2f06e2": 1,
"5a43957686f7742a2c2f11b0": 1
"5a43943586f77416ad2f06e2": 337,
"5a43957686f7742a2c2f11b0": 328
},
"Holster": {
"56d59856d2720bd8418b456a": 1,
"56e0598dd2720bb5668b45a6": 1,
"571a12c42459771f627b58a0": 1,
"576a581d2459771e7b1bc4f1": 1,
"579204f224597773d619e051": 1,
"5a17f98cfcdbcb0980087290": 1
"56d59856d2720bd8418b456a": 148,
"56e0598dd2720bb5668b45a6": 58,
"571a12c42459771f627b58a0": 133,
"576a581d2459771e7b1bc4f1": 275,
"579204f224597773d619e051": 10,
"5a17f98cfcdbcb0980087290": 41
},
"Pockets": {
"557ffd194bdc2d28148b457f": 1
},
"Scabbard": {
"54491bb74bdc2d09088b4567": 1,
"57e26ea924597715ca604a09": 1,
"57e26fc7245977162a14b800": 1,
"5bc9c1e2d4351e00367fbcf0": 1
"54491bb74bdc2d09088b4567": 91,
"57e26ea924597715ca604a09": 215,
"57e26fc7245977162a14b800": 233,
"5bc9c1e2d4351e00367fbcf0": 8
},
"SecondPrimaryWeapon": {},
"SecuredContainer": {
"5c0a794586f77461c458f892": 1
},
"TacticalVest": {
"592c2d1a86f7746dbe2af32a": 1,
"59e7643b86f7742cbf2c109a": 1,
"5ab8dab586f77441cd04f2a2": 1,
"5c0e446786f7742013381639": 1,
"5c0e6a1586f77404597b4965": 1,
"5d5d646386f7742797261fd9": 1,
"5e4abfed86f77406a2713cf7": 1,
"5fd4c60f875c30179f5d04c2": 1,
"6040dd4ddcf9592f401632d2": 1
"592c2d1a86f7746dbe2af32a": 11,
"59e7643b86f7742cbf2c109a": 391,
"5ab8dab586f77441cd04f2a2": 25,
"5c0e446786f7742013381639": 70,
"5c0e6a1586f77404597b4965": 18,
"5d5d646386f7742797261fd9": 64,
"5e4abfed86f77406a2713cf7": 22,
"5fd4c60f875c30179f5d04c2": 14,
"6040dd4ddcf9592f401632d2": 50
}
},
"items": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
module.exports = {
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current"
}
}
],
"@babel/preset-typescript"
]
};

View File

@ -1,5 +1,5 @@
{
"$schema": "./node_modules/rome/configuration_schema.json",
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
"linter": {
"enabled": true,
"rules": {

View File

@ -12,7 +12,7 @@
},
"scripts": {
"check:circular": "madge --circular --extensions ts ./src/",
"lint": "rome ci src --formatter-enabled=false --max-diagnostics=200",
"lint": "biome ci src --formatter-enabled=false --max-diagnostics=200",
"lint:fix": "eslint --fix --ext .ts src/**",
"test:run": "jest --colors --runInBand",
"test:coverage": "jest --coverage --maxWorkers=1 --no-cache",
@ -42,8 +42,7 @@
"ws": "8.14.2"
},
"devDependencies": {
"@babel/preset-env": "7.23.2",
"@babel/preset-typescript": "7.23.2",
"@biomejs/biome": "1.3.3",
"@jest/globals": "29.7.0",
"@pnpm/exe": "8.9.0",
"@swc/cli": "0.1.62",
@ -67,7 +66,6 @@
"pkg": "5.8.1",
"pkg-fetch": "3.5.2",
"resedit": "2.0.0",
"rome": "12.1.3",
"ts-jest": "29.1.1",
"ts-node-dev": "2.0.0",
"tsconfig-paths": "4.2.0",

View File

@ -1,5 +0,0 @@
// eslint-disable-next-line @typescript-eslint/naming-convention
export const TYPES: {[name:string]: symbol} = {
PROGRAM: Symbol.for("PROGRAM"),
APP: Symbol.for("APP")
};

View File

@ -4,6 +4,7 @@ import { HideoutController } from "@spt-aki/controllers/HideoutController";
import { OnUpdate } from "@spt-aki/di/OnUpdate";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { IHandleQTEEventRequestData } from "@spt-aki/models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutCancelProductionRequestData } from "@spt-aki/models/eft/hideout/IHideoutCancelProductionRequestData";
import { IHideoutContinuousProductionStartRequestData } from "@spt-aki/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutImproveAreaRequestData } from "@spt-aki/models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutPutItemInRequestData } from "@spt-aki/models/eft/hideout/IHideoutPutItemInRequestData";
@ -129,6 +130,14 @@ export class HideoutCallbacks implements OnUpdate
return this.hideoutController.improveArea(sessionId, pmcData, request);
}
/**
* Handle client/game/profile/items/moving - HideoutCancelProductionCommand
*/
public cancelProduction(pmcData: IPmcData, request: IHideoutCancelProductionRequestData, sessionId: string): IItemEventRouterResponse
{
return this.hideoutController.cancelProduction(sessionId, pmcData, request);
}
public async onUpdate(timeSinceLastRun: number): Promise<boolean>
{
if (timeSinceLastRun > this.hideoutConfig.runIntervalSeconds)

View File

@ -12,6 +12,7 @@ import { Upd } from "@spt-aki/models/eft/common/tables/IItem";
import { HideoutUpgradeCompleteRequestData } from "@spt-aki/models/eft/hideout/HideoutUpgradeCompleteRequestData";
import { IHandleQTEEventRequestData } from "@spt-aki/models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutArea, Stage } from "@spt-aki/models/eft/hideout/IHideoutArea";
import { IHideoutCancelProductionRequestData } from "@spt-aki/models/eft/hideout/IHideoutCancelProductionRequestData";
import { IHideoutContinuousProductionStartRequestData } from "@spt-aki/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutImproveAreaRequestData } from "@spt-aki/models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutProduction } from "@spt-aki/models/eft/hideout/IHideoutProduction";
@ -125,7 +126,6 @@ export class HideoutController
}
const hideoutData = this.databaseServer.getTables().hideout.areas.find(area => area.type === request.areaType);
if (!hideoutData)
{
this.logger.error(this.localisationService.getText("hideout-unable_to_find_area_in_database", request.areaType));
@ -133,7 +133,6 @@ export class HideoutController
}
const ctime = hideoutData.stages[hideoutArea.level + 1].constructionTime;
if (ctime > 0)
{
const timestamp = this.timeUtil.getTimestamp();
@ -734,8 +733,8 @@ export class HideoutController
area.lastRecipe = request.recipeId;
counterHoursCrafting.value = hoursCrafting;
// Delete production now it's complete
delete pmcData.Hideout.Production[prodId];
// Null production data now it's complete - will be cleaned up later by update() process
pmcData.Hideout.Production[prodId] = null;
};
// Remove the old production from output object before its sent to client
@ -814,7 +813,9 @@ export class HideoutController
const callback = () =>
{
delete pmcData.Hideout.Production[prodId];
// Null production data now it's complete - will be cleaned up later by update() process
pmcData.Hideout.Production[prodId] = null;
};
return this.inventoryHelper.addItem(pmcData, newReq, output, sessionID, callback, true);
@ -832,7 +833,6 @@ export class HideoutController
return this.hideoutHelper.registerProduction(pmcData, request, sessionID);
}
/**
* Get quick time event list for hideout
* // TODO - implement this
@ -909,8 +909,8 @@ export class HideoutController
/**
* Handle client/game/profile/items/moving - HideoutImproveArea
* @param sessionId Session id
* @param pmcData profile to improve area in
* @param request improve area request data
* @param pmcData Profile to improve area in
* @param request Improve area request data
*/
public improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse
{
@ -980,6 +980,34 @@ export class HideoutController
return output;
}
/**
* Handle client/game/profile/items/moving HideoutCancelProductionCommand
* @param sessionId Session id
* @param pmcData Profile with craft to cancel
* @param request Cancel production request data
* @returns IItemEventRouterResponse
*/
public cancelProduction(sessionId: string, pmcData: IPmcData, request: IHideoutCancelProductionRequestData): IItemEventRouterResponse
{
const output = this.eventOutputHolder.getOutput(sessionId);
const craftToCancel = pmcData.Hideout.Production[request.recipeId];
if (!craftToCancel)
{
const errorMessage = `Unable to find craft ${request.recipeId} to cancel`;
this.logger.error(errorMessage);
return this.httpResponse.appendErrorToOutput(output, errorMessage);
}
// Null out production data so client gets informed when response send back
pmcData.Hideout.Production[request.recipeId] = null;
// TODO - handle timestamp somehow?
return output;
}
/**
* Function called every x seconds as part of onUpdate event
*/

View File

@ -185,7 +185,6 @@ import { RagfairServer } from "@spt-aki/servers/RagfairServer";
import { SaveServer } from "@spt-aki/servers/SaveServer";
import { WebSocketServer } from "@spt-aki/servers/WebSocketServer";
import { AkiHttpListener } from "@spt-aki/servers/http/AkiHttpListener";
import { HttpBufferHandler } from "@spt-aki/servers/http/HttpBufferHandler";
import { BotEquipmentFilterService } from "@spt-aki/services/BotEquipmentFilterService";
import { BotEquipmentModPoolService } from "@spt-aki/services/BotEquipmentModPoolService";
import { BotGenerationCacheService } from "@spt-aki/services/BotGenerationCacheService";
@ -630,8 +629,6 @@ export class Container
depContainer.register<RagfairServer>("RagfairServer", RagfairServer);
depContainer.register<SaveServer>("SaveServer", SaveServer, { lifecycle: Lifecycle.Singleton });
depContainer.register<ConfigServer>("ConfigServer", ConfigServer, { lifecycle: Lifecycle.Singleton });
depContainer.register<HttpBufferHandler>("HttpBufferHandler", HttpBufferHandler, {lifecycle: Lifecycle.Singleton});
}
private static registerControllers(depContainer: DependencyContainer): void

View File

@ -185,7 +185,7 @@ export class BotEquipmentModGenerator
const botWeaponSightWhitelist = this.botEquipmentFilterService.getBotWeaponSightWhitelist(botEquipmentRole);
const randomisationSettings = this.botHelper.getBotRandomizationDetails(botLevel, botEquipConfig);
// Iterate over mod pool and choose mods to add to item
// Iterate over mod pool and choose mods to attach
const sortedModKeys = this.sortModKeys(Object.keys(compatibleModsPool));
for (const modSlot of sortedModKeys)
{
@ -204,7 +204,7 @@ export class BotEquipmentModGenerator
continue;
}
const isRandomisableSlot = randomisationSettings?.randomisedWeaponModSlots?.includes(modSlot);
const isRandomisableSlot = randomisationSettings?.randomisedWeaponModSlots?.includes(modSlot) ?? false;
const modToAdd = this.chooseModToPutIntoSlot(modSlot, isRandomisableSlot, botWeaponSightWhitelist, botEquipBlacklist, compatibleModsPool, weapon, ammoTpl, parentTemplate);
// Compatible mod not found
@ -213,13 +213,12 @@ export class BotEquipmentModGenerator
continue;
}
const modToAddTemplate = modToAdd[1];
if (!this.isModValidForSlot(modToAdd, modsParentSlot, modSlot, parentTemplate))
{
continue;
}
const modToAddTemplate = modToAdd[1];
// Skip adding mod to weapon if type limit reached
if (this.botWeaponModLimitService.weaponModHasReachedLimit(botEquipmentRole, modToAddTemplate, modLimits, parentTemplate, weapon))
{
@ -386,13 +385,20 @@ export class BotEquipmentModGenerator
const sortedKeys: string[] = [];
const modRecieverKey = "mod_reciever";
const modMount001Key = "mod_mount_001";
const modGasBLockKey = "mod_gas_block";
const modGasBlockKey = "mod_gas_block";
const modPistolGrip = "mod_pistol_grip";
const modStockKey = "mod_stock";
const modBarrelKey = "mod_barrel";
const modHandguardKey = "mod_handguard";
const modMountKey = "mod_mount";
const modScopeKey = "mod_scope";
if (unsortedKeys.includes(modHandguardKey))
{
sortedKeys.push(modHandguardKey);
unsortedKeys.splice(unsortedKeys.indexOf(modHandguardKey), 1);
}
if (unsortedKeys.includes(modBarrelKey))
{
sortedKeys.push(modBarrelKey);
@ -417,10 +423,10 @@ export class BotEquipmentModGenerator
unsortedKeys.splice(unsortedKeys.indexOf(modPistolGrip), 1);
}
if (unsortedKeys.includes(modGasBLockKey))
if (unsortedKeys.includes(modGasBlockKey))
{
sortedKeys.push(modGasBLockKey);
unsortedKeys.splice(unsortedKeys.indexOf(modGasBLockKey), 1);
sortedKeys.push(modGasBlockKey);
unsortedKeys.splice(unsortedKeys.indexOf(modGasBlockKey), 1);
}
if (unsortedKeys.includes(modStockKey))
@ -555,6 +561,7 @@ export class BotEquipmentModGenerator
if (!modCompatibilityResult.incompatible)
{
found = true;
break;
}
}

View File

@ -528,10 +528,11 @@ export class BotLootGenerator
// only add if no upd or stack objects exist - preserves existing stack count
if (!ammoItem.upd?.StackObjectsCount)
{
const minStackSize = itemTemplate._props.StackMinRandom;
const maxStackSize = itemTemplate._props.StackMaxSize;
const randomSize = itemTemplate._props.StackMaxSize === 1
? 1
: this.randomUtil.getInt(itemTemplate._props.StackMinRandom, itemTemplate._props.StackMaxRandom);
ammoItem.upd = { "StackObjectsCount": this.randomUtil.getInt(minStackSize, maxStackSize) };
ammoItem.upd = { StackObjectsCount: randomSize };
}
}

View File

@ -660,12 +660,16 @@ export class LocationGenerator
// Item array to return
const itemWithMods: Item[] = [];
// Money/Ammo - don't rely on items in spawnPoint.template.Items so we can randomise it ourselves
if (this.itemHelper.isOfBaseclass(chosenTpl, BaseClasses.MONEY) || this.itemHelper.isOfBaseclass(chosenTpl, BaseClasses.AMMO))
{
const itemTemplate = this.itemHelper.getItem(chosenTpl)[1];
const stackCount = this.randomUtil.getInt(itemTemplate._props.StackMinRandom, itemTemplate._props.StackMaxRandom);
const stackCount = itemTemplate._props.StackMaxSize === 1
? 1
: this.randomUtil.getInt(itemTemplate._props.StackMinRandom, itemTemplate._props.StackMaxRandom);
itemWithMods.push(
{
_id: this.objectId.generate(),
@ -777,7 +781,10 @@ export class LocationGenerator
if (this.itemHelper.isOfBaseclass(tpl, BaseClasses.MONEY) || this.itemHelper.isOfBaseclass(tpl, BaseClasses.AMMO))
{
const stackCount = this.randomUtil.getInt(itemTemplate._props.StackMinRandom, itemTemplate._props.StackMaxRandom);
// Edge case - some ammos e.g. flares or M406 grenades shouldn't be stacked
const stackCount = itemTemplate._props.StackMaxSize === 1
? 1
: this.randomUtil.getInt(itemTemplate._props.StackMinRandom, itemTemplate._props.StackMaxRandom);
items[0].upd = { StackObjectsCount: stackCount };
}
// No spawn point, use default template

View File

@ -248,16 +248,17 @@ export class BotGeneratorHelper
// TODO: Can probably be optimized to cache itemTemplates as items are added to inventory
const equippedItems = items.map(i => this.databaseServer.getTables().templates.items[i._tpl]);
const itemToEquip = this.itemHelper.getItem(tplToCheck);
const item = this.itemHelper.getItem(tplToCheck);
const itemToCheck = item[1];
if (!itemToEquip[0])
if (!item[0])
{
this.logger.warning(this.localisationService.getText("bot-invalid_item_compatibility_check", {itemTpl: tplToCheck, slot: equipmentSlot}));
}
if (!itemToEquip[1]?._props)
if (!itemToCheck._props)
{
this.logger.warning(this.localisationService.getText("bot-compatibility_check_missing_props", {id: itemToEquip[1]._id, name: itemToEquip[1]._name, slot: equipmentSlot}));
this.logger.warning(this.localisationService.getText("bot-compatibility_check_missing_props", {id: itemToCheck._id, name: itemToCheck._name, slot: equipmentSlot}));
}
// Does an equipped item have a property that blocks the desired item - check for prop "BlocksX" .e.g BlocksEarpiece / BlocksFaceCover
@ -265,7 +266,7 @@ export class BotGeneratorHelper
if (blockingItem)
{
//this.logger.warning(`1 incompatibility found between - ${itemToEquip[1]._name} and ${blockingItem._name} - ${equipmentSlot}`);
return { incompatible: true, reason: `${tplToCheck} ${itemToEquip[1]._name} in slot: ${equipmentSlot} blocked by: ${blockingItem._id} ${blockingItem._name}` };
return { incompatible: true, reason: `${tplToCheck} ${itemToCheck._name} in slot: ${equipmentSlot} blocked by: ${blockingItem._id} ${blockingItem._name}` };
}
// Check if any of the current inventory templates have the incoming item defined as incompatible
@ -273,11 +274,11 @@ export class BotGeneratorHelper
if (blockingItem)
{
//this.logger.warning(`2 incompatibility found between - ${itemToEquip[1]._name} and ${blockingItem._props.Name} - ${equipmentSlot}`);
return { incompatible: true, reason: `${tplToCheck} ${itemToEquip[1]._name} in slot: ${equipmentSlot} blocked by: ${blockingItem._id} ${blockingItem._name}` };
return { incompatible: true, reason: `${tplToCheck} ${itemToCheck._name} in slot: ${equipmentSlot} blocked by: ${blockingItem._id} ${blockingItem._name}` };
}
// Check if the incoming item has any inventory items defined as incompatible
const blockingInventoryItem = items.find(x => itemToEquip[1]._props[`Blocks${x.slotId}`] || itemToEquip[1]._props.ConflictingItems?.includes(x._tpl));
const blockingInventoryItem = items.find(x => itemToCheck._props.ConflictingItems?.includes(x._tpl));
if (blockingInventoryItem)
{
//this.logger.warning(`3 incompatibility found between - ${itemToEquip[1]._name} and ${blockingInventoryItem._tpl} - ${equipmentSlot}`)

View File

@ -227,6 +227,11 @@ export class HideoutHelper
for (const prodId in pmcData.Hideout.Production)
{
const craft = pmcData.Hideout.Production[prodId];
if (!craft)
{
// Craft value is null, get rid of it (could be from cancelling craft that needs cleaning up)
delete pmcData.Hideout.Production[prodId];
}
// Craft complete, skip processing (Don't skip continious crafts like bitcoin farm)
if (craft.Progress >= craft.ProductionTime && prodId !== HideoutHelper.bitcoinFarm)

View File

@ -45,7 +45,7 @@ export class WeightedRandomHelper
{
if (items.length !== weights.length)
{
throw new Error("Items and weights must be of the same size");
throw new Error("Items and weight inputs must be of the same length");
}
if (!items.length)

View File

@ -383,7 +383,7 @@ export interface Productive
ProductionTime?: number
GivenItemsInStart?: string[]
Interrupted?: boolean
/** Used in hideout prodiction.json */
/** Used in hideout production.json */
needFuelForAllProductionTime?: boolean
/** Used when sending data to client */
NeedFuelForAllProductionTime?: boolean

View File

@ -0,0 +1,6 @@
export interface IHideoutCancelProductionRequestData
{
Action: "HideoutCancelProductionCommand"
recipeId: string
timestamp: number
}

View File

@ -10,5 +10,6 @@ export enum HideoutEventActions
HIDEOUT_CONTINUOUS_PRODUCTION_START = "HideoutContinuousProductionStart",
HIDEOUT_TAKE_PRODUCTION = "HideoutTakeProduction",
HIDEOUT_RECORD_SHOOTING_RANGE_POINTS = "RecordShootingRangePoints",
HIDEOUT_IMPROVE_AREA = "HideoutImproveArea"
HIDEOUT_IMPROVE_AREA = "HideoutImproveArea",
HIDEOUT_CANCEL_PRODUCTION_COMMAND = "HideoutCancelProductionCommand"
}

View File

@ -153,8 +153,14 @@ export class EventOutputHolder
{
for (const productionKey in productions)
{
// Skip completed
const production = productions[productionKey];
if (!production)
{
// Could be cancelled production, skip item to save processing
continue;
}
// Skip completed
if (!production.inProgress)
{
continue;

View File

@ -29,7 +29,8 @@ export class HideoutItemEventRouter extends ItemEventRouterDefinition
new HandledRoute(HideoutEventActions.HIDEOUT_CONTINUOUS_PRODUCTION_START, false),
new HandledRoute(HideoutEventActions.HIDEOUT_TAKE_PRODUCTION, false),
new HandledRoute(HideoutEventActions.HIDEOUT_RECORD_SHOOTING_RANGE_POINTS, false),
new HandledRoute(HideoutEventActions.HIDEOUT_IMPROVE_AREA, false)
new HandledRoute(HideoutEventActions.HIDEOUT_IMPROVE_AREA, false),
new HandledRoute(HideoutEventActions.HIDEOUT_CANCEL_PRODUCTION_COMMAND, false)
];
}
@ -59,6 +60,8 @@ export class HideoutItemEventRouter extends ItemEventRouterDefinition
return this.hideoutCallbacks.recordShootingRangePoints(pmcData, body, sessionID);
case HideoutEventActions.HIDEOUT_IMPROVE_AREA:
return this.hideoutCallbacks.improveArea(pmcData, body, sessionID);
case HideoutEventActions.HIDEOUT_CANCEL_PRODUCTION_COMMAND:
return this.hideoutCallbacks.cancelProduction(pmcData, body, sessionID);
}
}
}

View File

@ -192,11 +192,11 @@ export class SaveServer
for (const callback in this.onBeforeSaveCallbacks)
{
const previous = this.profiles[sessionID];
try
try
{
this.profiles[sessionID] = this.onBeforeSaveCallbacks[callback](this.profiles[sessionID]);
}
catch (error)
catch (error)
{
this.logger.error(this.localisationService.getText("profile_save_callback_error", { callback, error }));
this.profiles[sessionID] = previous;
@ -210,7 +210,7 @@ export class SaveServer
this.saveMd5[sessionID] = String(fmd5);
// save profile to disk
this.vfs.writeFile(filePath, jsonProfile);
this.logger.info(this.localisationService.getText("profile_saved", sessionID));
this.logger.debug(this.localisationService.getText("profile_saved", sessionID), true);
}
}

View File

@ -5,7 +5,6 @@ import { inject, injectAll, injectable } from "tsyringe";
import { Serializer } from "@spt-aki/di/Serializer";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { HttpRouter } from "@spt-aki/routers/HttpRouter";
import { HttpBufferHandler } from "@spt-aki/servers/http/HttpBufferHandler";
import { IHttpListener } from "@spt-aki/servers/http/IHttpListener";
import { LocalisationService } from "@spt-aki/services/LocalisationService";
import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil";
@ -22,20 +21,18 @@ export class AkiHttpListener implements IHttpListener
@inject("RequestsLogger") protected requestsLogger: ILogger,
@inject("JsonUtil") protected jsonUtil: JsonUtil,
@inject("HttpResponseUtil") protected httpResponse: HttpResponseUtil,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("HttpBufferHandler") protected httpBufferHandler: HttpBufferHandler
@inject("LocalisationService") protected localisationService: LocalisationService
)
{
}
public canHandle(_: string, req: IncomingMessage): boolean
public canHandle(_: string, req: IncomingMessage): boolean
{
return req.method === "GET" || req.method === "PUT" || req.method === "POST";
return ["GET", "PUT", "POST"].includes(req.method);
}
public handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void
{
// TODO: cleanup into interface IVerbHandler
switch (req.method)
{
case "GET":
@ -44,63 +41,68 @@ export class AkiHttpListener implements IHttpListener
this.sendResponse(sessionId, req, resp, null, response);
break;
}
// these are handled almost identically.
case "POST":
{
req.on("data", (data: any) =>
{
const value = (req.headers["debug"] === "1") ? data.toString() : zlib.inflateSync(data);
const response = this.getResponse(sessionId, req, value);
this.sendResponse(sessionId, req, resp, value, response);
});
break;
}
case "PUT":
{
req.on("data", (data) =>
// Data can come in chunks. Notably, if someone saves their profile (which can be
// kinda big), on a slow connection. We need to re-assemble the entire http payload
// before processing it.
const requestLength = parseInt(req.headers["content-length"]);
const buffer = Buffer.alloc(requestLength);
let written = 0;
req.on("data", (data: any) =>
{
// receive data
if ("expect" in req.headers)
{
const requestLength = parseInt(req.headers["content-length"]);
if (!this.httpBufferHandler.putInBuffer(req.headers.sessionid, data, requestLength))
{
resp.writeContinue();
}
}
data.copy(buffer, written, 0);
written += data.length;
});
req.on("end", async () =>
req.on("end", () =>
{
const data = this.httpBufferHandler.getFromBuffer(sessionId);
this.httpBufferHandler.resetBuffer(sessionId);
let value = zlib.inflateSync(data);
if (!value)
// Contrary to reasonable expectations, the content-encoding is _not_ actually used to
// determine if the payload is compressed. All PUT requests are, and POST requests without
// debug = 1 are as well. This should be fixed.
// let compressed = req.headers["content-encoding"] === "deflate";
const compressed = req.method === "PUT" || req.headers["debug"] !== "1";
const value = compressed ? zlib.inflateSync(buffer) : buffer;
if (req.headers["debug"] === "1")
{
value = data;
this.logger.debug(value.toString(), true);
}
const response = this.getResponse(sessionId, req, value);
this.sendResponse(sessionId, req, resp, value, response);
});
break;
}
default:
{
this.logger.warning(this.localisationService.getText("unknown_request"));
this.logger.warning(`${this.localisationService.getText("unknown_request")}: ${req.method}`);
break;
}
}
}
/**
* Send http response to the client
* @param sessionID Player id
* @param req Incoming request
* @param resp Outgoing response
* @param body Buffer
* @param output Server generated response data
*/
public sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): void
{
const info = this.getBodyInfo(body);
let handled = false;
// Check if this is a debug request, if so just send the raw response without transformation.
if (req.headers["debug"] === "1")
// Check if this is a debug request, if so just send the raw response without transformation
if (req.headers["debug"] === "1")
{
this.sendJson(resp, output, sessionID);
}
@ -127,7 +129,7 @@ export class AkiHttpListener implements IHttpListener
this.requestsLogger.info(`RESPONSE=${this.jsonUtil.serialize(log)}`);
}
}
public getResponse(sessionID: string, req: IncomingMessage, body: Buffer): string
{
const info = this.getBodyInfo(body, req.url);
@ -141,7 +143,7 @@ export class AkiHttpListener implements IHttpListener
const log = new Request(req.method, new RequestData(req.url, req.headers, data));
this.requestsLogger.info(`REQUEST=${this.jsonUtil.serialize(log)}`);
}
let output = this.httpRouter.getResponse(req, info, sessionID);
/* route doesn't exist or response is not properly set up */
if (!output)
@ -192,10 +194,10 @@ class Request
public type: string,
public req: RequestData
)
{}
{}
}
class Response
class Response
{
constructor(
public type: string,

View File

@ -1,36 +0,0 @@
import { injectable } from "tsyringe";
@injectable()
export class HttpBufferHandler
{
protected buffers = {};
public resetBuffer(sessionID: string): void
{
this.buffers[sessionID] = undefined;
}
public putInBuffer(sessionID: any, data: any, bufLength: number): boolean
{
if (this.buffers[sessionID] === undefined || this.buffers[sessionID].allocated !== bufLength)
{
this.buffers[sessionID] = {
written: 0,
allocated: bufLength,
buffer: Buffer.alloc(bufLength)
};
}
const buf = this.buffers[sessionID];
data.copy(buf.buffer, buf.written, 0);
buf.written += data.length;
return buf.written === buf.allocated;
}
public getFromBuffer(sessionID: string): any
{
return this.buffers[sessionID].buffer;
}
}

View File

@ -465,7 +465,7 @@ export class FenceService
}
/**
* Get stack size ofr a singular item (no mods)
* Get stack size of a singular item (no mods)
* @param itemDbDetails item being added to fence
* @returns Stack size
*/
@ -478,11 +478,12 @@ export class FenceService
return this.randomUtil.getInt(overrideValues.min, overrideValues.max);
}
// Fence doesn't sell ammo by default, but handle it as players mod fence
if (this.itemHelper.isOfBaseclass(itemDbDetails._id, BaseClasses.AMMO))
{
// No override, use stack max size from item db
return this.randomUtil.getInt(1, itemDbDetails._props.StackMaxSize);
return itemDbDetails._props.StackMaxSize === 1
? 1
: this.randomUtil.getInt(itemDbDetails._props.StackMinRandom, itemDbDetails._props.StackMaxRandom);
}
return 1;