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

Squashed 22 commits in an attempt to fix Gitea object bloat

This commit is contained in:
Dev 2023-03-03 17:53:28 +00:00 committed by Terkoiz
parent e25f38c9f6
commit 3d849b427b
57 changed files with 85074 additions and 84755 deletions

View File

@ -5,6 +5,14 @@ Modding framework for Escape From Tarkov
[![Build Status](https://drone.sp-tarkov.com/api/badges/SPT-AKI/Server/status.svg?ref=refs/heads/development)](https://drone.sp-tarkov.com/SPT-AKI/Server)
[![Quality Gate Status](https://sonar.sp-tarkov.com/api/project_badges/measure?project=AKI&metric=alert_status&token=d3b87ff5fac591c1f49a57d4a2883c92bfe6a77f)](https://sonar.sp-tarkov.com/dashboard?id=AKI)
## Privacy
SPT is an open source project. Your commit credentials as author of a commit will be visible by anyone. Please make sure you understand this before submitting a PR.
Feel free to use a "fake" username and email on your commits by using the following commands:
```bash
git config --local user.name "USERNAME"
git config --local user.email "USERNAME@SOMETHING.com"
```
## Requirements
- NodeJS (with npm)

View File

@ -1,16 +1,16 @@
{
"looseLootMultiplier": {
"bigmap": 1.2,
"bigmap": 1,
"develop": 1,
"factory4_day": 1.2,
"factory4_night": 1.2,
"interchange": 1.2,
"factory4_day": 1,
"factory4_night": 1,
"interchange": 1,
"laboratory": 1,
"rezervbase": 1.2,
"shoreline": 1.2,
"woods": 1.3,
"rezervbase": 1,
"shoreline": 1,
"woods": 1,
"hideout": 0,
"lighthouse": 1.2,
"lighthouse": 1,
"privatearea": 1,
"suburbs": 1,
"tarkovstreets": 1,
@ -288,8 +288,8 @@
"laboratory": [{
"sptId": "sptBearLabsZoneFloor1NormalSpawn",
"BossName": "sptBear",
"BossChance": 15,
"BossZone": "BotZoneFloor1",
"BossChance": 15,
"BossZone": "BotZoneFloor1",
"BossDifficult": "normal",
"BossEscortAmount": "1",
"BossEscortDifficult": "normal",
@ -309,7 +309,7 @@
"sptId": "sptBearLabsZoneFloor2NormalSpawn",
"BossChance": 15,
"BossName": "sptBear",
"BossZone": "BotZoneFloor2",
"BossZone": "BotZoneFloor2",
"BossDifficult": "normal",
"BossEscortAmount": "1",
"BossEscortDifficult": "normal",
@ -407,7 +407,7 @@
"RandomTimeSpawn": false
}
],
"interchange": [{
"interchange": [{
"sptId": "sptBearInterchangeNormalSpawn",
"BossName": "sptBear",
"BossChance": 15,
@ -447,7 +447,8 @@
}
],
"RandomTimeSpawn": false
}]
}
]
},
"normal": {
"factory4_day": [{
@ -645,5 +646,6 @@
"fixEmptyBotWavesSettings": {
"enabled": true,
"ignoreMaps": ["base", "develop", "hideout", "privatearea", "suburbs", "terminal", "town"]
}
},
"fitLootIntoContainerAttempts": 2
}

View File

@ -13,8 +13,9 @@
"FirstPrimaryWeapon": true,
"SecondPrimaryWeapon": true,
"Scabbard": false,
"Pockets": false,
"SecuredContainer": false
},
"loot": true,
"questItems": true
"questItems": true,
"specialSlotItems": false
}

View File

@ -583,7 +583,7 @@
"max": 2
}
},
"labsAccessCardChancePercent": 2
"labsAccessCardChancePercent": 3
},
"2": {
"botTypeForLoot": "assault",
@ -648,7 +648,7 @@
"max": 2
}
},
"labsAccessCardChancePercent": 5
"labsAccessCardChancePercent": 6
},
"3": {
"botTypeForLoot": "assault",
@ -713,7 +713,7 @@
"max": 2
}
},
"labsAccessCardChancePercent": 10
"labsAccessCardChancePercent": 11
},
"4": {
"botTypeForLoot": "assault",
@ -778,7 +778,7 @@
"max": 3
}
},
"labsAccessCardChancePercent": 15
"labsAccessCardChancePercent": 17
},
"5": {
"botTypeForLoot": "assault",
@ -843,7 +843,7 @@
"max": 3
}
},
"labsAccessCardChancePercent": 20
"labsAccessCardChancePercent": 22
},
"6": {
"botTypeForLoot": "assault",
@ -908,7 +908,7 @@
"max": 4
}
},
"labsAccessCardChancePercent": 25
"labsAccessCardChancePercent": 27
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -125,8 +125,8 @@
"Ammo": {
"Caliber556x45NATO": {
"59e690b686f7746c9f75e848": 1,
"59e6906286f7746c9f75e847": 1,
"5c0d5ae286f7741e46554302": 1,
"59e6906286f7746c9f75e847": 1,
"59e6920f86f77411d82aa167": 1
},
"Caliber762x25TT": {
@ -425,17 +425,17 @@
"62987dfc402c7f69bf010923",
"5926c3b286f774640d189b6b",
"6193d3149fb0c665d5490e32",
"5eff09cd30a7dc22fd1ddfed",
"5c0548ae0db834001966a3c2",
"59faff1d86f7746c51718c9c",
"5eff09cd30a7dc22fd1ddfed",
"602286df23506e50807090c6",
"5df8f541c41b2312ea3335e3",
"5937ee6486f77408994ba448",
"5913915886f774123603c392",
"5a351711c4a282000b1521a4",
"61a64428a8c6aa1b795f0ba1",
"5c94bbff86f7747ee735c08f",
"5d80cb3886f77440556dbf09",
"5c94bbff86f7747ee735c08f",
"5ad5d20586f77449be26d877",
"593858c486f774253a24cb52",
"63a39e1d234195315d4020bd",
@ -486,7 +486,12 @@
"5913877a86f774432f15d444",
"5da5cdcd86f774529238fb9b",
"63a39c7964283b5e9c56b280",
"5d80ccdd86f77474f7575e02"
"5d80ccdd86f77474f7575e02",
"5a145d4786f7744cbb6f4a12",
"61aa5aed32a4743c3453d319",
"63a39ce4cd6db0635c1975fa",
"5a0ee34586f774023b6ee092",
"5a0eebed86f77461230ddb3d"
],
"Backpack": [
"5c1d0d6d86f7744bb2683e1f",
@ -546,8 +551,8 @@
"5d6e68c4a4b9361b93413f79",
"56d59d3ad2720bdb418b4577",
"5e81f423763d9f754677bf2e",
"59e6906286f7746c9f75e847",
"5c0d5ae286f7741e46554302",
"59e6906286f7746c9f75e847",
"5e023e53d4353e3302577c4c",
"5c0d56a986f774449d5de529",
"5a608bf24f39f98ffc77720e",
@ -2510,9 +2515,9 @@
},
"chances": {
"equipment": {
"Headwear": 24,
"Headwear": 23,
"Earpiece": 0,
"FaceCover": 5,
"FaceCover": 4,
"ArmorVest": 0,
"Eyewear": 44,
"ArmBand": 0,
@ -2529,7 +2534,7 @@
"mod_launcher": 0,
"mod_muzzle": 51,
"mod_reciever": 100,
"mod_sight_rear": 25,
"mod_sight_rear": 26,
"mod_stock": 100,
"mod_magazine": 100,
"mod_mount_000": 8,
@ -2539,13 +2544,13 @@
"mod_tactical": 0,
"mod_mount_001": 0,
"mod_mount_002": 0,
"mod_sight_front": 71,
"mod_foregrip": 86,
"mod_sight_front": 72,
"mod_foregrip": 85,
"mod_tactical_002": 0,
"mod_tactical_000": 0,
"mod_tactical_001": 0,
"mod_mount": 0,
"mod_tactical_003": 60
"mod_tactical_003": 64
}
},
"generation": {

View File

@ -94,8 +94,8 @@
"equipment": {
"Headwear": {
"5a16bb52fcdbcb001a3b00dc": 1,
"5c066ef40db834001966a595": 1,
"5a43957686f7742a2c2f11b0": 1,
"5c066ef40db834001966a595": 1,
"5ea17ca01412a1425304d1c0": 1,
"5b432d215acfc4771e1c6624": 1,
"61bca7cda0eae612383adf57": 1,
@ -112,8 +112,8 @@
"ArmorVest": {},
"Eyewear": {
"603409c80ca681766b6a0fb2": 1,
"5d6d2e22a4b9361bd5780d05": 1,
"5d5fca1ea4b93635fd598c07": 1,
"5d6d2e22a4b9361bd5780d05": 1,
"61c18d83b00456371a66814b": 1,
"5d6d2ef3a4b93618084f58bd": 1,
"5aa2b986e5b5b00014028f4c": 1,
@ -121,9 +121,9 @@
},
"ArmBand": {},
"TacticalVest": {
"5c0e722886f7740458316a57": 1,
"544a5caa4bdc2d1a388b4568": 1,
"61bc85697113f767765c7fe7": 1,
"5c0e722886f7740458316a57": 1,
"5c0e746986f7741453628fe5": 1,
"5b44cad286f77402a54ae7e5": 1,
"5f5f41f56760b4138443b352": 1,
@ -135,17 +135,17 @@
},
"Backpack": {},
"FirstPrimaryWeapon": {
"5cadfbf7ae92152ac412eeef": 1,
"5aafa857e5b5b00018480968": 1
"5aafa857e5b5b00018480968": 1,
"5cadfbf7ae92152ac412eeef": 1
},
"SecondPrimaryWeapon": {
"59984ab886f7743e98271174": 1
},
"Holster": {
"602a9740da11d6478d5a06dc": 1,
"5f36a0e5fbf956000b716b65": 1,
"5a17f98cfcdbcb0980087290": 1,
"5e81c3cbac2bb513793cdc75": 1,
"5f36a0e5fbf956000b716b65": 1,
"602a9740da11d6478d5a06dc": 1,
"6193a720f8ee7e52e42109ed": 1,
"5abccb7dd8ce87001773e277": 1
},
@ -158,16 +158,9 @@
}
},
"Ammo": {
"Caliber127x55": {
"5cadf6eeae921500134b2799": 1,
"5cadf6ddae9215051e1c23b2": 1
},
"Caliber9x18PM": {
"573719762459775a626ccbc1": 1
},
"Caliber762x51": {
"5a6086ea4f39f99cd479502f": 1,
"58dd3ad986f77403051cba8f": 1,
"5a6086ea4f39f99cd479502f": 1,
"5efb0c1bd79ff02a1f5e68d9": 1
},
"Caliber9x19PARA": {
@ -175,67 +168,19 @@
"5c0d56a986f774449d5de529": 1,
"5efb0da7a29a85116f6ea05f": 1
},
"Caliber127x55": {
"5cadf6ddae9215051e1c23b2": 1,
"5cadf6eeae921500134b2799": 1
},
"Caliber1143x23ACP": {
"5e81f423763d9f754677bf2e": 1,
"5efb0cabfb3e451d70735af5": 1
},
"Caliber9x18PM": {
"573719762459775a626ccbc1": 1
}
},
"mods": {
"5cadfbf7ae92152ac412eeef": {
"mod_sight_front": [
"5caf16a2ae92152ac412efbc"
],
"mod_handguard": [
"5cdaa99dd7f00c002412d0b2"
],
"mod_muzzle": [
"5caf187cae92157c28402e43",
"5caf17c9ae92150b30006be1"
],
"mod_scope": [
"5caf1691ae92152ac412efb9",
"5c0517910db83400232ffee5",
"584924ec24597768f12ae244"
],
"mod_magazine": [
"5caf1109ae9215753c44119f"
]
},
"5cdaa99dd7f00c002412d0b2": {
"mod_foregrip": [
"5cda9bcfd7f00c0c0b53e900"
]
},
"5a17f98cfcdbcb0980087290": {
"mod_magazine": [
"5a17fb03fcdbcbcae668728f"
],
"mod_pistol_grip": [
"5a17fc70fcdbcb0176308b3d"
],
"mod_sight_front": [
"5aba62f8d8ce87001943946b"
],
"mod_sight_rear": [
"5aba637ad8ce87001773e17f"
]
},
"5a16bb52fcdbcb001a3b00dc": {
"mod_nvg": [
"5a16b8a9fcdbcb00165aa6ca"
]
},
"5a16b8a9fcdbcb00165aa6ca": {
"mod_nvg": [
"5a16b93dfcdbcbcae6687261",
"5c0695860db834001b735461"
]
},
"5a16b93dfcdbcbcae6687261": {
"mod_nvg": [
"57235b6f24597759bf5a30f1"
]
},
"5aafa857e5b5b00018480968": {
"mod_stock": [
"5addc7005acfc4001669f275"
@ -247,8 +192,8 @@
"5aaf8a0be5b5b00015693243"
],
"patron_in_weapon": [
"5a6086ea4f39f99cd479502f",
"58dd3ad986f77403051cba8f",
"5a6086ea4f39f99cd479502f",
"5efb0c1bd79ff02a1f5e68d9"
]
},
@ -280,13 +225,8 @@
},
"5addbac75acfc400194dbc56": {
"mod_muzzle": [
"5c7954d52e221600106f4cc7",
"5d026791d7ad1a04a067ea63"
]
},
"5c7954d52e221600106f4cc7": {
"mod_muzzle": [
"5c7955c22e221644f31bfd5e"
"5d026791d7ad1a04a067ea63",
"5c7954d52e221600106f4cc7"
]
},
"59984ab886f7743e98271174": {
@ -338,6 +278,116 @@
"560d657b4bdc2da74d8b4572"
]
},
"602a9740da11d6478d5a06dc": {
"mod_barrel": [
"602a95edda11d6478d5a06da"
],
"mod_reciever": [
"60228924961b8d75ee233c32"
],
"mod_magazine": [
"602286df23506e50807090c6"
]
},
"60228924961b8d75ee233c32": {
"mod_sight_rear": [
"60229948cacb6b0506369e27"
],
"mod_sight_front": [
"60228a76d62c9b14ed777a66"
]
},
"5a16bb52fcdbcb001a3b00dc": {
"mod_nvg": [
"5a16b8a9fcdbcb00165aa6ca"
]
},
"5a16b8a9fcdbcb00165aa6ca": {
"mod_nvg": [
"5a16b93dfcdbcbcae6687261",
"5c0695860db834001b735461"
]
},
"5a16b93dfcdbcbcae6687261": {
"mod_nvg": [
"57235b6f24597759bf5a30f1"
]
},
"5cadfbf7ae92152ac412eeef": {
"mod_sight_front": [
"5caf16a2ae92152ac412efbc"
],
"mod_handguard": [
"5cdaa99dd7f00c002412d0b2"
],
"mod_muzzle": [
"5caf187cae92157c28402e43",
"5caf17c9ae92150b30006be1"
],
"mod_scope": [
"5c0517910db83400232ffee5",
"5caf1691ae92152ac412efb9",
"584924ec24597768f12ae244"
],
"mod_magazine": [
"5caf1109ae9215753c44119f"
]
},
"5cdaa99dd7f00c002412d0b2": {
"mod_foregrip": [
"5cda9bcfd7f00c0c0b53e900"
]
},
"5f36a0e5fbf956000b716b65": {
"mod_barrel": [
"5f3e7801153b8571434a924c"
],
"mod_pistol_grip": [
"5f3e778efcd9b651187d7201"
],
"mod_reciever": [
"5f3e7823ddc4f03b010e2045"
],
"mod_magazine": [
"5f3e77b26cda304dcc634057"
],
"mod_trigger": [
"5f3e772a670e2a7b01739a52"
],
"mod_hammer": [
"5f3e76d86cda304dcc634054"
],
"mod_catch": [
"5f3e777688ca2d00ad199d25"
]
},
"5f3e7823ddc4f03b010e2045": {
"mod_sight_rear": [
"5f3e7897ddc4f03b010e204a"
],
"mod_sight_front": [
"5f3e78a7fbf956000b716b8e"
]
},
"5a17f98cfcdbcb0980087290": {
"mod_magazine": [
"5a17fb03fcdbcbcae668728f"
],
"mod_pistol_grip": [
"5a17fc70fcdbcb0176308b3d"
],
"mod_sight_front": [
"5aba62f8d8ce87001943946b"
],
"mod_sight_rear": [
"5aba637ad8ce87001773e17f"
]
},
"5c7954d52e221600106f4cc7": {
"mod_muzzle": [
"5c7955c22e221644f31bfd5e"
]
},
"5e81c3cbac2bb513793cdc75": {
"mod_barrel": [
"5e81c519cb2b95385c177551"
@ -374,56 +424,6 @@
"5c066e3a0db834001b7353f0"
]
},
"5f36a0e5fbf956000b716b65": {
"mod_barrel": [
"5f3e7801153b8571434a924c"
],
"mod_pistol_grip": [
"5f3e778efcd9b651187d7201"
],
"mod_reciever": [
"5f3e7823ddc4f03b010e2045"
],
"mod_magazine": [
"5f3e77b26cda304dcc634057"
],
"mod_trigger": [
"5f3e772a670e2a7b01739a52"
],
"mod_hammer": [
"5f3e76d86cda304dcc634054"
],
"mod_catch": [
"5f3e777688ca2d00ad199d25"
]
},
"5f3e7823ddc4f03b010e2045": {
"mod_sight_rear": [
"5f3e7897ddc4f03b010e204a"
],
"mod_sight_front": [
"5f3e78a7fbf956000b716b8e"
]
},
"602a9740da11d6478d5a06dc": {
"mod_barrel": [
"602a95edda11d6478d5a06da"
],
"mod_reciever": [
"60228924961b8d75ee233c32"
],
"mod_magazine": [
"602286df23506e50807090c6"
]
},
"60228924961b8d75ee233c32": {
"mod_sight_rear": [
"60229948cacb6b0506369e27"
],
"mod_sight_front": [
"60228a76d62c9b14ed777a66"
]
},
"6193a720f8ee7e52e42109ed": {
"mod_barrel": [
"6194f017ed0429009f543eaa"
@ -455,17 +455,6 @@
"6194f3286db0f2477964e67d"
]
},
"5b432d215acfc4771e1c6624": {
"mod_nvg": [
"5a16b8a9fcdbcb00165aa6ca",
"5c0558060db834001b735271"
]
},
"5c0695860db834001b735461": {
"mod_nvg": [
"5c0696830db834001d23f5da"
]
},
"5caf1691ae92152ac412efb9": {
"mod_scope": [
"591c4efa86f7741030027726"
@ -491,6 +480,17 @@
"5abcc328d8ce8700194394f3"
]
},
"5b432d215acfc4771e1c6624": {
"mod_nvg": [
"5a16b8a9fcdbcb00165aa6ca",
"5c0558060db834001b735271"
]
},
"5c0695860db834001b735461": {
"mod_nvg": [
"5c0696830db834001d23f5da"
]
},
"5ea17ca01412a1425304d1c0": {
"mod_nvg": [
"5ea18c84ecf1982c7712d9a2"
@ -499,25 +499,25 @@
},
"items": {
"TacticalVest": [
"5caf1109ae9215753c44119f",
"5710c24ad2720bc3458b45a3",
"5448be9a4bdc2dfd2f8b456a",
"5aaf8a0be5b5b00015693243",
"599860ac86f77436b225ed1a",
"58d3db5386f77426186285a0"
"5710c24ad2720bc3458b45a3",
"5caf1109ae9215753c44119f",
"58d3db5386f77426186285a0",
"5448be9a4bdc2dfd2f8b456a"
],
"Pockets": [
"5a17fb03fcdbcbcae668728f",
"602286df23506e50807090c6",
"590c678286f77426c9660122",
"5df8a77486f77412672a1e3f",
"5e81c4ca763d9f754677befa",
"5f3e77b26cda304dcc634057",
"5938144586f77473c2087145",
"602286df23506e50807090c6",
"5a17fb03fcdbcbcae668728f",
"5df8a77486f77412672a1e3f",
"5e81c4ca763d9f754677befa",
"6193d3149fb0c665d5490e32",
"5c1e2d1f86f77431e9280bee",
"5df8a72c86f77412640e2e83",
"5913915886f774123603c392",
"5df8a72c86f77412640e2e83",
"5c94bbff86f7747ee735c08f",
"5df8a6a186f77412640e2e80",
"591afe0186f77431bd616a11",
@ -528,19 +528,19 @@
"5a0ee30786f774023b6ee08f",
"5938994586f774523a425196",
"5913611c86f77479e0084092",
"5a145d4786f7744cbb6f4a12",
"5938504186f7740991483f30",
"5a145d4786f7744cbb6f4a12",
"5937ee6486f77408994ba448",
"5c0e531d86f7747fa23f4d42",
"5c1e495a86f7743109743dfb",
"63a39cb1c9b3aa4b61683ee2",
"5ede7a8229445733cb4c18e2",
"63a39cb1c9b3aa4b61683ee2",
"5913651986f774432f15d132",
"5780cfa52459777dfb276eb1",
"6391fcf5744e45201147080f",
"5780cfa52459777dfb276eb1",
"61aa5aed32a4743c3453d319",
"63a39f08cd6db0635c197600",
"5ad5db3786f7743568421cce",
"63a39f08cd6db0635c197600",
"5a0eebed86f77461230ddb3d",
"5d947d4e86f774447b415895",
"5914578086f774123569ffa4",
@ -566,12 +566,12 @@
"5780cf9e2459777df90dcb73",
"59136f6f86f774447a1ed173",
"5ad7247386f7747487619dc3",
"637b620db7afa97bfc3d7009",
"591ae8f986f77406f854be45",
"5ed515ece452db0eb56fc028",
"637b620db7afa97bfc3d7009",
"5a0eff2986f7741fd654e684",
"5c1d0d6d86f7744bb2683e1f",
"5c0e531286f7747fa54205c2",
"5c1d0d6d86f7744bb2683e1f",
"63a39e49cd6db0635c1975fc",
"59387a4986f77401cc236e62",
"593aa4be86f77457f56379f8",
@ -644,9 +644,15 @@
"61a64428a8c6aa1b795f0ba1",
"5a0ee72c86f77436955d3435",
"61aa5b518f5e7a39b41416e2",
"5a0eec9686f77402ac5c39f2",
"59148f8286f7741b951ea113",
"5a13ef0686f7746e5a411744"
"5a0eec9686f77402ac5c39f2",
"5a13ef0686f7746e5a411744",
"5fca13ca637ee0341a484f46",
"5a13eebd86f7746fd639aa93",
"63a39f6e64283b5e9c56b289",
"637b60c3b7afa97bfc3d7001",
"5d8e0db586f7744450412a42",
"5ed51652f6c34d2cc26336a1"
],
"Backpack": [
"5c1d0d6d86f7744bb2683e1f",
@ -700,14 +706,14 @@
"5a0eee1486f77402aa773226"
],
"SecuredContainer": [
"58dd3ad986f77403051cba8f",
"5a3c16fe86f77452b62de32a",
"5c0d56a986f774449d5de529",
"5cadf6ddae9215051e1c23b2",
"5e81f423763d9f754677bf2e",
"5cadf6eeae921500134b2799",
"573719762459775a626ccbc1",
"5a6086ea4f39f99cd479502f",
"5a3c16fe86f77452b62de32a",
"5e81f423763d9f754677bf2e",
"5cadf6ddae9215051e1c23b2",
"58dd3ad986f77403051cba8f",
"5c0d56a986f774449d5de529",
"5efb0c1bd79ff02a1f5e68d9",
"5efb0cabfb3e451d70735af5",
"5efb0da7a29a85116f6ea05f"
@ -2944,8 +2950,8 @@
"chances": {
"equipment": {
"Headwear": 100,
"Earpiece": 15,
"FaceCover": 11,
"Earpiece": 16,
"FaceCover": 10,
"ArmorVest": 0,
"Eyewear": 77,
"ArmBand": 0,
@ -2959,25 +2965,25 @@
"SecuredContainer": 100
},
"mods": {
"mod_muzzle": 89,
"mod_sight_rear": 61,
"mod_magazine": 100,
"mod_sight_front": 100,
"mod_handguard": 100,
"mod_scope": 67,
"mod_sight_rear": 61,
"mod_mount": 0,
"mod_scope": 66,
"mod_tactical_000": 0,
"mod_tactical_001": 49,
"mod_tactical_002": 37,
"mod_foregrip": 100,
"mod_stock": 84,
"mod_nvg": 79,
"mod_mount": 0,
"mod_tactical_003": 0,
"mod_muzzle": 89,
"mod_stock": 84,
"mod_charge": 100,
"mod_reciever": 100,
"mod_mount_000": 47,
"mod_mount_001": 0,
"mod_foregrip": 100,
"mod_tactical": 0,
"mod_sight_front": 100,
"mod_nvg": 79,
"mod_handguard": 100,
"mod_mount_000": 46,
"mod_mount_001": 0,
"mod_equipment_000": 0,
"mod_equipment_001": 0,
"mod_equipment_002": 0

View File

@ -123,8 +123,8 @@
"Eyewear": {},
"ArmBand": {},
"TacticalVest": {
"5c0e9f2c86f77432297fe0a3": 1,
"5ca20abf86f77418567a43f2": 1
"5ca20abf86f77418567a43f2": 1,
"5c0e9f2c86f77432297fe0a3": 1
},
"Backpack": {},
"FirstPrimaryWeapon": {
@ -148,8 +148,8 @@
},
"Ammo": {
"Caliber545x39": {
"56dff026d2720bb8668b4567": 1,
"5c0d5e4486f77478390952fe": 1,
"56dff026d2720bb8668b4567": 1,
"56dff061d2720bb5668b4567": 1
},
"Caliber762x25TT": {
@ -176,8 +176,8 @@
"5beec3e30db8340019619424"
],
"mod_barrel": [
"5beec2820db834001b095426",
"5beec1bd0db834001e6006f3"
"5beec1bd0db834001e6006f3",
"5beec2820db834001b095426"
],
"mod_reciever": [
"5beec91a0db834001961942d"
@ -199,16 +199,15 @@
"5beecbb80db834001d2c465e"
]
},
"5beec2820db834001b095426": {
"5beec1bd0db834001e6006f3": {
"mod_muzzle": [
"564caa3d4bdc2d17108b458e",
"5cc9a96cd7f00c011c04e04a"
"5beec3420db834001b095429"
]
},
"5beec91a0db834001961942d": {
"mod_scope": [
"5c0505e00db834001b735073",
"584984812459776a704a82a6"
"584984812459776a704a82a6",
"5c0505e00db834001b735073"
],
"mod_sight_rear": [
"5beec9450db83400970084fd"
@ -236,9 +235,10 @@
"5c0e842486f77443a74d2976"
]
},
"5beec1bd0db834001e6006f3": {
"5beec2820db834001b095426": {
"mod_muzzle": [
"5beec3420db834001b095429"
"564caa3d4bdc2d17108b458e",
"5cc9a96cd7f00c011c04e04a"
]
},
"59ff346386f77477562ff5e2": {
@ -361,8 +361,8 @@
"5780cfa52459777dfb276eb1",
"5913877a86f774432f15d444",
"62987cb98081af308d7558c8",
"5a13f24186f77410e57c5626",
"5df8a6a186f77412640e2e80",
"5a13f24186f77410e57c5626",
"62a9cb937377a65d7b070cef",
"591383f186f7744a4c5edcf3",
"5780cf942459777df90dcb72",
@ -391,8 +391,8 @@
"5780cda02459777b272ede61",
"5e42c83786f7742a021fdf3c",
"591afe0186f77431bd616a11",
"5913915886f774123603c392",
"5a0eeb8e86f77461257ed71a",
"5913915886f774123603c392",
"5ad5cfbd86f7742c825d6104",
"59136e1e86f774432f15d133",
"5e42c81886f7742a01529f57",
@ -448,7 +448,15 @@
"5a0f006986f7741ffd2fe484",
"5a0f045e86f7745b0f0d0e42",
"5da743f586f7744014504f72",
"62987da96188c076bc0d8c51"
"62987da96188c076bc0d8c51",
"63a71ed21031ac76fe773c7f",
"5d8e0db586f7744450412a42",
"5a0eee1486f77402aa773226",
"5d80ccdd86f77474f7575e02",
"61aa81fcb225ac1ead7957c3",
"5d80c93086f7744036212b41",
"5a0f068686f7745b0d4ea242",
"5751a89d24597722aa0e8db0"
],
"Backpack": [
"5c1d0d6d86f7744bb2683e1f",
@ -502,9 +510,9 @@
"5a0eee1486f77402aa773226"
],
"SecuredContainer": [
"56dff026d2720bb8668b4567",
"5736026a245977644601dc61",
"5c0d5e4486f77478390952fe",
"5736026a245977644601dc61",
"56dff026d2720bb8668b4567",
"56dff061d2720bb5668b4567",
"59e4cf5286f7741778269d8a",
"5c925fa22e221601da359b7b",
@ -2457,7 +2465,7 @@
"FirstPrimaryWeapon": 100,
"SecondPrimaryWeapon": 0,
"Holster": 100,
"Scabbard": 14,
"Scabbard": 15,
"Pockets": 100,
"SecuredContainer": 100
},
@ -2469,7 +2477,7 @@
"mod_stock": 100,
"mod_mount_000": 100,
"mod_mount_001": 83,
"mod_scope": 40,
"mod_scope": 39,
"mod_foregrip": 9,
"mod_tactical_000": 0,
"mod_muzzle": 95,

View File

@ -233,28 +233,6 @@
"5a7d9104159bd400134c8c21"
]
},
"5a7ae0c351dfba0017554310": {
"mod_barrel": [
"5a6b5b8a8dc32e001207faf3"
],
"mod_reciever": [
"5a71e4f48dc32e001207fb26"
],
"mod_magazine": [
"5a7ad2e851dfba0016153692"
]
},
"5a71e4f48dc32e001207fb26": {
"mod_sight_rear": [
"5a71e0fb8dc32e00094b97f2"
],
"mod_sight_front": [
"5a71e0048dc32e000c52ecc8"
],
"mod_scope": [
"5a32aa8bc4a2826c6e06d737"
]
},
"5dcbd56fdbd3d91b3e5468d5": {
"mod_pistol_grip": [
"5c48a2c22e221602b313fb6c"
@ -314,6 +292,28 @@
"5dfa3d2b0dee1b22f862eade"
]
},
"5a7ae0c351dfba0017554310": {
"mod_barrel": [
"5a6b5b8a8dc32e001207faf3"
],
"mod_reciever": [
"5a71e4f48dc32e001207fb26"
],
"mod_magazine": [
"5a7ad2e851dfba0016153692"
]
},
"5a71e4f48dc32e001207fb26": {
"mod_sight_rear": [
"5a71e0fb8dc32e00094b97f2"
],
"mod_sight_front": [
"5a71e0048dc32e000c52ecc8"
],
"mod_scope": [
"5a32aa8bc4a2826c6e06d737"
]
},
"606587252535c57a13424cfd": {
"mod_pistol_grip": [
"57af48872459771f0b2ebf11"
@ -396,26 +396,26 @@
],
"Pockets": [
"590c678286f77426c9660122",
"63a39fd1c9b3aa4b61683efb",
"5c1e2a1e86f77431ea0ea84c",
"5df8a6a186f77412640e2e80",
"63a39fd1c9b3aa4b61683efb",
"5710c24ad2720bc3458b45a3",
"59148f8286f7741b951ea113",
"5938144586f77473c2087145",
"62a09ec84f842e1bd12da3f2",
"5df8a72c86f77412640e2e83",
"62a09ec84f842e1bd12da3f2",
"5c94bbff86f7747ee735c08f",
"5d80c88d86f77440556dbf07",
"5938603e86f77435642354f4",
"591afe0186f77431bd616a11",
"5938603e86f77435642354f4",
"5df8a77486f77412672a1e3f",
"593858c486f774253a24cb52",
"637b60c3b7afa97bfc3d7001",
"63a39df18a56922e82001f25",
"5938504186f7740991483f30",
"591383f186f7744a4c5edcf3",
"5ad5d49886f77455f9731921",
"57a349b2245977762b199ec7",
"5ad5d49886f77455f9731921",
"5c1d0d6d86f7744bb2683e1f",
"5fca13ca637ee0341a484f46",
"5937ee6486f77408994ba448",
@ -429,15 +429,15 @@
"5e42c83786f7742a021fdf3c",
"5ad5ccd186f774446d5706e9",
"5a0ea69f86f7741cd5406619",
"59136e1e86f774432f15d133",
"63a3a93f8a56922e82001f5d",
"61a64428a8c6aa1b795f0ba1",
"59136e1e86f774432f15d133",
"5913877a86f774432f15d444",
"5a0dc95c86f77452440fc675",
"5d80c6c586f77440351beef1",
"591382d986f774465a6413a7",
"5c1d0f4986f7744bb01837fa",
"5d80c6c586f77440351beef1",
"5913915886f774123603c392",
"5c1d0f4986f7744bb01837fa",
"5a0f075686f7745bcc42ee12",
"5938994586f774523a425196",
"61aa5aed32a4743c3453d319",
@ -460,8 +460,8 @@
"5ed515e03a40a50460332579",
"5d80cb8786f774405611c7d9",
"5ed5160a87bb8443d10680b5",
"59136a4486f774447a1ed172",
"5780cf692459777de4559321",
"59136a4486f774447a1ed172",
"5780d07a2459777de4559324",
"5c0e533786f7747fa23f4d47",
"5ad5d20586f77449be26d877",
@ -527,7 +527,12 @@
"5da5cdcd86f774529238fb9b",
"62a9cb937377a65d7b070cef",
"5a0ec70e86f7742c0b518fba",
"63a39f6e64283b5e9c56b289"
"63a39f6e64283b5e9c56b289",
"5ed51652f6c34d2cc26336a1",
"5a0f0f5886f7741c4e32a472",
"637b620db7afa97bfc3d7009",
"5a0eeb1a86f774688b70aa5c",
"5a144dfd86f77445cb5a0982"
],
"Backpack": [],
"SecuredContainer": [
@ -2606,16 +2611,16 @@
"mod_sight_rear": 100,
"mod_sight_front": 69,
"mod_tactical_000": 100,
"mod_mount_001": 26,
"mod_mount_001": 27,
"mod_mount_002": 0,
"mod_mount": 17,
"mod_muzzle": 33,
"mod_mount": 16,
"mod_muzzle": 32,
"mod_foregrip": 100,
"mod_stock_002": 100,
"mod_stock": 39,
"mod_pistol_grip": 38,
"mod_tactical": 62,
"mod_mount_000": 57,
"mod_tactical": 61,
"mod_mount_000": 56,
"mod_flashlight": 100
}
},

View File

@ -154,7 +154,8 @@
"56dff338d2720bbd668b4569": 1,
"56dff2ced2720bb4668b4567": 1,
"56dff4a2d2720bbd668b456a": 1,
"56dff026d2720bb8668b4567": 1
"56dff026d2720bb8668b4567": 1,
"56dfef82d2720bbd668b4567": 1
},
"Caliber762x39": {
"5656d7c34bdc2d9d198b4587": 1
@ -186,7 +187,8 @@
"5c0d5ae286f7741e46554302": 1
},
"Caliber9x39": {
"5c0d668f86f7747ccb7f13b2": 1
"5c0d668f86f7747ccb7f13b2": 1,
"5c0d688c86f77413ae3407b2": 1
}
},
"mods": {
@ -628,7 +630,27 @@
"57372bd3245977670b7cd243",
"61bf83814088ec1a363d7097",
"61a64492ba05ef10d62adcc1",
"5a0eb38b86f774153b320eb0"
"5a0eb38b86f774153b320eb0",
"59e35cbb86f7741778269d83",
"5bc9c049d4351e44f824d360",
"5d80cbd886f77470855c26c2",
"5f745ee30acaeb0d490d8c5b",
"573474f924597738002c6174",
"577e1c9d2459773cd707c525",
"5913611c86f77479e0084092",
"5737292724597765e5728562",
"5d03794386f77420415576f5",
"5a0ec6d286f7742c0b518fb5",
"5a144dfd86f77445cb5a0982",
"57372ac324597767001bc261",
"62a0a043cf4a99369e2624a5",
"5da5cdcd86f774529238fb9b",
"5a0ee30786f774023b6ee08f",
"5c1260dc86f7746b106e8748",
"5da743f586f7744014504f72",
"5672cb304bdc2dc2088b456a",
"61aa5aed32a4743c3453d319",
"5d6fc78386f77449d825f9dc"
],
"SecuredContainer": [
"59e77a2386f7742ee578960a",
@ -2640,7 +2662,7 @@
"Eyewear": 0,
"ArmBand": 0,
"TacticalVest": 0,
"Backpack": 91,
"Backpack": 92,
"FirstPrimaryWeapon": 100,
"SecondPrimaryWeapon": 100,
"Holster": 0,

View File

@ -447,7 +447,14 @@
"5d40419286f774318526545f",
"5751a89d24597722aa0e8db0",
"5c06782b86f77426df5407d2",
"57347c77245977448d35f6e2"
"57347c77245977448d35f6e2",
"59faf98186f774067b6be103",
"5909e99886f7740c983b9984",
"5e2af00086f7746d3f3c33f7",
"5e2af02c86f7746d420957d4",
"56742c284bdc2d98058b456d",
"5b43575a86f77424f443fe62",
"59faf7ca86f7740dbe19f6c2"
],
"SecuredContainer": [
"5e99711486f7744bfc4af328",
@ -2527,9 +2534,9 @@
"equipment": {
"Headwear": 0,
"Earpiece": 26,
"FaceCover": 23,
"FaceCover": 24,
"ArmorVest": 0,
"Eyewear": 32,
"Eyewear": 31,
"ArmBand": 0,
"TacticalVest": 0,
"Backpack": 100,

View File

@ -109,8 +109,8 @@
},
"Earpiece": {},
"FaceCover": {
"60a7ad2a2198820d95707a2e": 1,
"60a7ad3a0c5cb24b0134664a": 1
"60a7ad3a0c5cb24b0134664a": 1,
"60a7ad2a2198820d95707a2e": 1
},
"ArmorVest": {},
"Eyewear": {},
@ -140,8 +140,8 @@
},
"Ammo": {
"Caliber12g": {
"5d6e68b3a4b9361bca7e50b5": 1,
"5d6e68d1a4b93622fe60e845": 1,
"5d6e68b3a4b9361bca7e50b5": 1,
"5d6e68a8a4b9360b6c0d54e2": 1,
"5d6e6806a4b936088465b17e": 1,
"5c0d591486f7744c505b416f": 1,
@ -164,12 +164,12 @@
"57a9b9ce2459770ee926038d"
],
"mod_handguard": [
"6086b5731246154cad35d6c7",
"58272b392459774b4c7b3ccd"
"58272b392459774b4c7b3ccd",
"6086b5731246154cad35d6c7"
],
"mod_pistol_grip": [
"5649ae4a4bdc2d1b2b8b4588",
"5649ade84bdc2d1b2b8b4587"
"5649ade84bdc2d1b2b8b4587",
"5649ae4a4bdc2d1b2b8b4588"
],
"mod_muzzle": [
"58272d7f2459774f6311ddfd",
@ -182,27 +182,14 @@
"5cf8f3b0d7f00c00217872ef"
]
},
"6086b5731246154cad35d6c7": {
"mod_mount_001": [
"6086b5392535c57a13424d70"
"58272b392459774b4c7b3ccd": {
"mod_scope": [
"591c4efa86f7741030027726"
],
"mod_mount_002": [
"6086b5392535c57a13424d70"
],
"mod_mount_003": [
"6086b5392535c57a13424d70"
]
},
"6086b5392535c57a13424d70": {
"mod_tactical": [
"mod_tactical_001": [
"5a5f1ce64f39f90b401987bc"
]
},
"57616ca52459773c69055192": {
"mod_stock": [
"5a0c59791526d8dba737bba7"
]
},
"583990e32459771419544dd2": {
"mod_pistol_grip": [
"5649ae4a4bdc2d1b2b8b4588"
@ -259,14 +246,27 @@
"57fd23e32459772d0805bcf1"
]
},
"58272b392459774b4c7b3ccd": {
"mod_scope": [
"591c4efa86f7741030027726"
"6086b5731246154cad35d6c7": {
"mod_mount_001": [
"6086b5392535c57a13424d70"
],
"mod_tactical_001": [
"mod_mount_002": [
"6086b5392535c57a13424d70"
],
"mod_mount_003": [
"6086b5392535c57a13424d70"
]
},
"6086b5392535c57a13424d70": {
"mod_tactical": [
"5a5f1ce64f39f90b401987bc"
]
},
"57616ca52459773c69055192": {
"mod_stock": [
"5a0c59791526d8dba737bba7"
]
},
"5beed0f50db834001c062b12": {
"mod_pistol_grip": [
"5beec8ea0db834001a6f9dbf"
@ -358,8 +358,8 @@
"5710c24ad2720bc3458b45a3",
"5a0c27731526d80618476ac4",
"5ed515e03a40a50460332579",
"5755383e24597772cb798966",
"5aaa4194e5b5b055d06310a5",
"5755383e24597772cb798966",
"5a966f51a2750c00156aacf6",
"55d482194bdc2d1d4e8b456b",
"5c94bbff86f7747ee735c08f"
@ -375,23 +375,23 @@
"5913915886f774123603c392",
"5df8a77486f77412672a1e3f",
"5937ee6486f77408994ba448",
"5938144586f77473c2087145",
"5d235b4d86f7742e017bc88a",
"5a13ef0686f7746e5a411744",
"591383f186f7744a4c5edcf3",
"5a0ee4b586f7743698200d22",
"5a13ef0686f7746e5a411744",
"5d235b4d86f7742e017bc88a",
"5df8a72c86f77412640e2e83",
"5938144586f77473c2087145",
"63a39f6e64283b5e9c56b289",
"63a39cb1c9b3aa4b61683ee2",
"5df8a72c86f77412640e2e83",
"5734758f24597738025ee253",
"63a39cb1c9b3aa4b61683ee2",
"59faf7ca86f7740dbe19f6c2",
"63a39dfe3901f439517cafba",
"59136a4486f774447a1ed172",
"593858c486f774253a24cb52",
"5780cf722459777a5108b9a1",
"5a144dfd86f77445cb5a0982",
"5c0d591486f7744c505b416f",
"59136e1e86f774432f15d133",
"5a144dfd86f77445cb5a0982",
"5e54f62086f774219b0f1937",
"5780d0652459777df90dcb74",
"5d6e6911a4b9361bd5780d52",
@ -406,25 +406,25 @@
"573478bc24597738002c6175",
"591ae8f986f77406f854be45",
"5780d07a2459777de4559324",
"63a71e781031ac76fe773c7d",
"61a64428a8c6aa1b795f0ba1",
"63a71e781031ac76fe773c7d",
"5d80c88d86f77440556dbf07",
"5d6e68dea4b9361bcc29e659",
"544fb3f34bdc2d03748b456a",
"5938603e86f77435642354f4",
"63a39f18c2d53c2c6839c1d3",
"5ad7242b86f7740a6a3abd43",
"5a0eecf686f7740350630097",
"591382d986f774465a6413a7",
"5ad7242b86f7740a6a3abd43",
"59e3658a86f7741776641ac4",
"5913611c86f77479e0084092",
"5a0eecf686f7740350630097",
"63a39e1d234195315d4020bd",
"591afe0186f77431bd616a11",
"63a71eb5b7f4570d3a29316b",
"5a0ea69f86f7741cd5406619",
"61aa81fcb225ac1ead7957c3",
"5a0ec70e86f7742c0b518fba",
"62987dfc402c7f69bf010923",
"5a0ec70e86f7742c0b518fba",
"63a39f08cd6db0635c197600",
"5af0548586f7743a532b7e99",
"5d235a5986f77443f6329bc6",
@ -481,7 +481,13 @@
"5c1d0f4986f7744bb01837fa",
"5a13ee1986f774794d4c14cd",
"5d80cbd886f77470855c26c2",
"5d80cb3886f77440556dbf09"
"5d80cb3886f77440556dbf09",
"5d8e0db586f7744450412a42",
"5ad5cfbd86f7742c825d6104",
"5d8e15b686f774445103b190",
"5a0f0f5886f7741c4e32a472",
"5d947d3886f774447b415893",
"5a13f24186f77410e57c5626"
],
"Backpack": [
"5c1d0d6d86f7744bb2683e1f",
@ -535,9 +541,9 @@
"5a0eee1486f77402aa773226"
],
"SecuredContainer": [
"5d6e68b3a4b9361bca7e50b5",
"56dff061d2720bb5668b4567",
"5d6e68d1a4b93622fe60e845",
"56dff061d2720bb5668b4567",
"5d6e68b3a4b9361bca7e50b5",
"5d6e68a8a4b9360b6c0d54e2",
"5c0d5e4486f77478390952fe",
"5d6e6806a4b936088465b17e",
@ -2601,15 +2607,15 @@
"mod_stock": 100,
"mod_magazine": 100,
"mod_charge": 33,
"mod_scope": 87,
"mod_foregrip": 46,
"mod_tactical_000": 36,
"mod_tactical_001": 43,
"mod_tactical_002": 0,
"mod_tactical": 100,
"mod_mount_001": 100,
"mod_mount_002": 100,
"mod_mount_003": 100,
"mod_tactical": 100,
"mod_scope": 87,
"mod_foregrip": 46,
"mod_tactical_000": 35,
"mod_tactical_001": 44,
"mod_tactical_002": 0,
"mod_stock_001": 100,
"mod_mount": 100,
"mod_sight_front": 0

File diff suppressed because it is too large Load Diff

View File

@ -109,16 +109,16 @@
"5a43957686f7742a2c2f11b0": 1
},
"Earpiece": {
"628e4e576d783146b124c64d": 1,
"5645bcc04bdc2d363b8b4572": 1
"5645bcc04bdc2d363b8b4572": 1,
"628e4e576d783146b124c64d": 1
},
"FaceCover": {
"62a61bbf8ec41a51b34758d2": 1
},
"ArmorVest": {},
"Eyewear": {
"62a61c988ec41a51b34758d5": 1,
"603409c80ca681766b6a0fb2": 1
"603409c80ca681766b6a0fb2": 1,
"62a61c988ec41a51b34758d5": 1
},
"ArmBand": {},
"TacticalVest": {
@ -129,9 +129,9 @@
"5fbcc1d9016cce60e8341ab3": 1
},
"SecondPrimaryWeapon": {
"5e81ebcd8e146c7080625e15": 1,
"5a7828548dc32e5a9c28b516": 1,
"6275303a9f372d6ea97f9ec7": 1
"6275303a9f372d6ea97f9ec7": 1,
"5e81ebcd8e146c7080625e15": 1
},
"Holster": {
"5f36a0e5fbf956000b716b65": 1
@ -151,16 +151,16 @@
"619636be6db0f2477964e710": 1,
"5fd20ff893a8961fc660a954": 1
},
"Caliber40x46": {
"5ede474b0c226a66f5402622": 1,
"5f0c892565703e5c461894e9": 1
"Caliber12g": {
"5d6e6911a4b9361bd5780d52": 1
},
"Caliber1143x23ACP": {
"5efb0cabfb3e451d70735af5": 1,
"5e81f423763d9f754677bf2e": 1
},
"Caliber12g": {
"5d6e6911a4b9361bd5780d52": 1
"Caliber40x46": {
"5f0c892565703e5c461894e9": 1,
"5ede474b0c226a66f5402622": 1
}
},
"mods": {
@ -246,15 +246,36 @@
"57d17c5e2459775a5c57d17d"
]
},
"5e81ebcd8e146c7080625e15": {
"mod_pistol_grip": [
"571659bb2459771fb2755a12"
"5a7828548dc32e5a9c28b516": {
"mod_barrel": [
"5a787fdfc5856700142fdd9a"
],
"mod_handguard": [
"5a788089c5856700142fdd9c"
],
"mod_stock": [
"5bfe86a20db834001d23e8f7"
],
"mod_mount": [
"5a7893c1c585673f2b5c374d"
],
"mod_magazine": [
"5a7882dcc5856700177af662"
]
},
"5bfe86a20db834001d23e8f7": {
"mod_stock": [
"5bfe86bd0db83400232fe959"
]
},
"5a7893c1c585673f2b5c374d": {
"mod_scope": [
"6284bd5f95250a29bc628a30"
],
"patron_in_weapon": [
"5ede474b0c226a66f5402622"
"5a33b2c9c4a282000c5a9511"
]
},
"5a33b2c9c4a282000c5a9511": {
"mod_scope": [
"5a32aa8bc4a2826c6e06d737"
]
},
"5f36a0e5fbf956000b716b65": {
@ -288,38 +309,6 @@
"5f3e78a7fbf956000b716b8e"
]
},
"5a7828548dc32e5a9c28b516": {
"mod_barrel": [
"5a787fdfc5856700142fdd9a"
],
"mod_handguard": [
"5a788089c5856700142fdd9c"
],
"mod_stock": [
"5bfe86a20db834001d23e8f7"
],
"mod_mount": [
"5a7893c1c585673f2b5c374d"
],
"mod_magazine": [
"5a7882dcc5856700177af662"
]
},
"5bfe86a20db834001d23e8f7": {
"mod_stock": [
"5bfe86bd0db83400232fe959"
]
},
"5a7893c1c585673f2b5c374d": {
"mod_scope": [
"5a33b2c9c4a282000c5a9511"
]
},
"5a33b2c9c4a282000c5a9511": {
"mod_scope": [
"5a32aa8bc4a2826c6e06d737"
]
},
"6275303a9f372d6ea97f9ec7": {
"mod_pistol_grip": [
"5bb20e18d4351e00320205d5"
@ -353,28 +342,39 @@
"camora_005": [
"5f0c892565703e5c461894e9"
]
},
"5e81ebcd8e146c7080625e15": {
"mod_pistol_grip": [
"571659bb2459771fb2755a12"
],
"mod_scope": [
"6284bd5f95250a29bc628a30"
],
"patron_in_weapon": [
"5ede474b0c226a66f5402622"
]
}
},
"items": {
"TacticalVest": [
"5c6d46132e221601da357d56",
"5ede474b0c226a66f5402622",
"5ef3448ab37dfd6af863525c",
"544fb45d4bdc2dee738b4568",
"619256e5f8af2c1a4e1f5d92",
"5d1340cad7ad1a0b0b249869",
"5f0c892565703e5c461894e9"
"5f0c892565703e5c461894e9",
"5ef3448ab37dfd6af863525c",
"5ede474b0c226a66f5402622"
],
"Pockets": [
"5ede474b0c226a66f5402622",
"5d6e6911a4b9361bd5780d52",
"5ef3448ab37dfd6af863525c",
"58d3db5386f77426186285a0",
"5913915886f774123603c392",
"5f0c892565703e5c461894e9",
"5ede474b0c226a66f5402622",
"544fb3f34bdc2d03748b456a",
"5448be9a4bdc2dfd2f8b456a",
"57514643245977207f2c2d09",
"5913915886f774123603c392",
"5f0c892565703e5c461894e9",
"5672c92d4bdc2d180f8b4567",
"5755383e24597772cb798966",
"57a349b2245977762b199ec7",
@ -382,18 +382,18 @@
"5df8a6a186f77412640e2e80",
"5780cf692459777de4559321",
"5780d0532459777a5108b9a2",
"5a0ee76686f7743698200d5c",
"5e42c83786f7742a021fdf3c",
"5938144586f77473c2087145",
"5a0ee76686f7743698200d5c",
"5c1d0dc586f7744baf2e7b79",
"5938144586f77473c2087145",
"5780cf942459777df90dcb72",
"5913651986f774432f15d132",
"544fb37f4bdc2dee738b4567",
"5c94bbff86f7747ee735c08f",
"5938603e86f77435642354f4",
"5c94bbff86f7747ee735c08f",
"63a39ce4cd6db0635c1975fa",
"5e42c81886f7742a01529f57",
"591afe0186f77431bd616a11",
"5e42c81886f7742a01529f57",
"63a39e1d234195315d4020bd",
"5c1d0d6d86f7744bb2683e1f",
"5ad5d20586f77449be26d877",
@ -464,16 +464,21 @@
"63a39fd1c9b3aa4b61683efb",
"5a145d4786f7744cbb6f4a12",
"5d95d6fa86f77424484aa5e9",
"62987e26a77ec735f90a2995"
"62987e26a77ec735f90a2995",
"5ad5d64486f774079b080af8",
"5d80c60f86f77440373c4ece",
"5a0eeb8e86f77461257ed71a",
"59136a4486f774447a1ed172",
"5d8e3ecc86f774414c78d05e"
],
"Backpack": [],
"SecuredContainer": [
"619636be6db0f2477964e710",
"5ede474b0c226a66f5402622",
"5efb0cabfb3e451d70735af5",
"5d6e6911a4b9361bd5780d52",
"5efb0cabfb3e451d70735af5",
"5fd20ff893a8961fc660a954",
"5f0c892565703e5c461894e9",
"5ede474b0c226a66f5402622",
"5e81f423763d9f754677bf2e"
],
"SpecialLoot": []
@ -2427,7 +2432,7 @@
"equipment": {
"Headwear": 100,
"Earpiece": 100,
"FaceCover": 50,
"FaceCover": 49,
"ArmorVest": 0,
"Eyewear": 100,
"ArmBand": 0,

View File

@ -115,8 +115,8 @@
"628bc7fb408e2b2e9c0801b1": 1
},
"FirstPrimaryWeapon": {
"5df8ce05b11454561e39243b": 1,
"5bfea6e90db834001b7347f3": 1,
"5df8ce05b11454561e39243b": 1,
"5a367e5dc4a282000e49738f": 1
},
"SecondPrimaryWeapon": {
@ -135,8 +135,8 @@
},
"Ammo": {
"Caliber762x51": {
"58dd3ad986f77403051cba8f": 1,
"5a6086ea4f39f99cd479502f": 1,
"58dd3ad986f77403051cba8f": 1,
"5e023e53d4353e3302577c4c": 1,
"5efb0c1bd79ff02a1f5e68d9": 1
},
@ -188,79 +188,56 @@
}
},
"mods": {
"5df8ce05b11454561e39243b": {
"mod_pistol_grip": [
"57af48872459771f0b2ebf11"
"5bfea6e90db834001b7347f3": {
"mod_stock": [
"5cde739cd7f00c0010373bd3"
],
"mod_barrel": [
"5bfebc320db8340019668d79"
],
"mod_mount": [
"5cde7b43d7f00c000d36b93e"
],
"mod_magazine": [
"5d25a6538abbc306c62e630d"
]
},
"5cde739cd7f00c0010373bd3": {
"mod_stock": [
"5649be884bdc2d79388b4577"
],
"mod_reciever": [
"5df8e4080b92095fd441e594"
"mod_pistol_grip": [
"5a339805c4a2826c6e06d73d"
],
"mod_charge": [
"5df8e085bb49d91fb446d6a8"
],
"mod_magazine": [
"5df8f541c41b2312ea3335e3"
"mod_handguard": [
"5cde7afdd7f00c000d36b89d"
]
},
"5649be884bdc2d79388b4577": {
"mod_stock_000": [
"5fc2369685fd526b824a5713",
"5d4406a8a4b9361e4f6eb8b7",
"5d135ecbd7ad1a21c176542e",
"5d4406a8a4b9361e4f6eb8b7"
"5fc2369685fd526b824a5713"
]
},
"5df8e4080b92095fd441e594": {
"mod_scope": [
"618bab21526131765025ab3f"
],
"mod_barrel": [
"5df917564a9f347bc92edca3"
],
"mod_handguard": [
"5df916dfbb49d91fb446d6b9"
],
"mod_sight_rear": [
"5dfa3d7ac41b2312ea33362a"
]
},
"618bab21526131765025ab3f": {
"mod_scope": [
"618ba27d9008e4636a67f61d"
],
"mod_mount": [
"618ba92152ecee1505530bd3"
]
},
"618ba92152ecee1505530bd3": {
"mod_scope": [
"5a32aa8bc4a2826c6e06d737"
]
},
"5df917564a9f347bc92edca3": {
"5bfebc320db8340019668d79": {
"mod_muzzle": [
"6130c43c67085e45ef1405a1"
],
"mod_gas_block": [
"5dfa3d45dfc58d14537c20b0"
"5d1f819086f7744b355c219b"
]
},
"6130c43c67085e45ef1405a1": {
"5d1f819086f7744b355c219b": {
"mod_muzzle": [
"5dfa3d2b0dee1b22f862eade"
"5cff9e84d7ad1a049e54ed55"
]
},
"5df916dfbb49d91fb446d6b9": {
"mod_tactical": [
"544909bb4bdc2d6f028b4577"
],
"mod_sight_front": [
"5dfa3d950dee1b22f862eae0"
],
"mod_foregrip": [
"57cffcd624597763133760c5"
"5cde7b43d7f00c000d36b93e": {
"mod_scope": [
"5aa66a9be5b5b0214e506e89"
]
},
"5aa66a9be5b5b0214e506e89": {
"mod_scope": [
"61714eec290d254f5e6b2ffc"
]
},
"5447a9cd4bdc2dbd208b4567": {
@ -364,49 +341,72 @@
"5cadd919ae921500126a77f3"
]
},
"5bfea6e90db834001b7347f3": {
"mod_stock": [
"5cde739cd7f00c0010373bd3"
"5df8ce05b11454561e39243b": {
"mod_pistol_grip": [
"57af48872459771f0b2ebf11"
],
"mod_barrel": [
"5bfebc320db8340019668d79"
],
"mod_mount": [
"5cde7b43d7f00c000d36b93e"
],
"mod_magazine": [
"5d25a6538abbc306c62e630d"
]
},
"5cde739cd7f00c0010373bd3": {
"mod_stock": [
"5649be884bdc2d79388b4577"
],
"mod_pistol_grip": [
"5a339805c4a2826c6e06d73d"
"mod_reciever": [
"5df8e4080b92095fd441e594"
],
"mod_charge": [
"5df8e085bb49d91fb446d6a8"
],
"mod_magazine": [
"5df8f541c41b2312ea3335e3"
]
},
"5df8e4080b92095fd441e594": {
"mod_scope": [
"618bab21526131765025ab3f"
],
"mod_barrel": [
"5df917564a9f347bc92edca3"
],
"mod_handguard": [
"5cde7afdd7f00c000d36b89d"
"5df916dfbb49d91fb446d6b9"
],
"mod_sight_rear": [
"5dfa3d7ac41b2312ea33362a"
]
},
"5bfebc320db8340019668d79": {
"mod_muzzle": [
"5d1f819086f7744b355c219b"
]
},
"5d1f819086f7744b355c219b": {
"mod_muzzle": [
"5cff9e84d7ad1a049e54ed55"
]
},
"5cde7b43d7f00c000d36b93e": {
"618bab21526131765025ab3f": {
"mod_scope": [
"5aa66a9be5b5b0214e506e89"
"618ba27d9008e4636a67f61d"
],
"mod_mount": [
"618ba92152ecee1505530bd3"
]
},
"5aa66a9be5b5b0214e506e89": {
"618ba92152ecee1505530bd3": {
"mod_scope": [
"61714eec290d254f5e6b2ffc"
"5a32aa8bc4a2826c6e06d737"
]
},
"5df917564a9f347bc92edca3": {
"mod_muzzle": [
"6130c43c67085e45ef1405a1"
],
"mod_gas_block": [
"5dfa3d45dfc58d14537c20b0"
]
},
"6130c43c67085e45ef1405a1": {
"mod_muzzle": [
"5dfa3d2b0dee1b22f862eade"
]
},
"5df916dfbb49d91fb446d6b9": {
"mod_tactical": [
"544909bb4bdc2d6f028b4577"
],
"mod_sight_front": [
"5dfa3d950dee1b22f862eae0"
],
"mod_foregrip": [
"57cffcd624597763133760c5"
]
},
"5a367e5dc4a282000e49738f": {
@ -480,9 +480,9 @@
},
"items": {
"TacticalVest": [
"5df8f541c41b2312ea3335e3",
"5d1340b3d7ad1a0b52682ed7",
"5d25a6538abbc306c62e630d",
"5d1340b3d7ad1a0b52682ed7",
"5df8f541c41b2312ea3335e3",
"5a3501acc4a282000d72293a",
"59c1383d86f774290a37e0ca"
],
@ -493,21 +493,21 @@
"5df8a77486f77412672a1e3f"
],
"Backpack": [
"5649ed104bdc2d3d1c8b458b",
"5d0375ff86f774186372f685",
"590c31c586f774245e3141b2",
"59e3596386f774176c10a2a2",
"590a3efd86f77437d351a25b",
"5d0379a886f77420407aa271",
"5649ed104bdc2d3d1c8b458b",
"5913611c86f77479e0084092",
"59136a4486f774447a1ed172",
"5737339e2459776af261abeb",
"5c06779c86f77426e00dd782",
"573478bc24597738002c6175",
"62a0a098de7ac8199358053b",
"5c06782b86f77426df5407d2",
"5d1b2ffd86f77425243e8d17",
"5c94bbff86f7747ee735c08f",
"5737339e2459776af261abeb",
"5c06779c86f77426e00dd782",
"573478bc24597738002c6175",
"5937ee6486f77408994ba448",
"590a3c0a86f774385a33c450",
"5e2af51086f7746d3f3c3402",
@ -524,48 +524,48 @@
"5d1b3f2d86f774253763b735",
"5780cda02459777b272ede61",
"57372fc52459776998772ca1",
"5a0eecf686f7740350630097",
"573726d824597765d96be361",
"5f745ee30acaeb0d490d8c5b",
"5e2af22086f7746d3f3c33fa",
"590c346786f77423e50ed342",
"59e35cbb86f7741778269d83",
"5938603e86f77435642354f4",
"5a0eecf686f7740350630097",
"57347cd0245977445a2d6ff1",
"5e54f62086f774219b0f1937",
"62a09cb7a04c0c5c6e0a84f8",
"5938603e86f77435642354f4",
"61bf7b6302b3924be92fa8c3",
"593aa4be86f77457f56379f8",
"59148f8286f7741b951ea113",
"5e2af37686f774755a234b65",
"619cbf476b8a1b37a54eebf8",
"5c1265fc86f7743f896a21c2",
"5d1b313086f77425227d1678",
"593aa4be86f77457f56379f8",
"59148f8286f7741b951ea113",
"57372e4a24597768553071c2",
"5e2aee0a86f774755a234b62",
"5938994586f774523a425196",
"573475fb24597737fb1379e1",
"57347c93245977448d35f6e3",
"5bc9c377d4351e3bac12251b",
"5d1c819a86f774771b0acd6c",
"573475fb24597737fb1379e1",
"57347c93245977448d35f6e3",
"591382d986f774465a6413a7",
"5bc9c049d4351e44f824d360",
"619cc01e0a7c3a1a2731940c",
"5672cb304bdc2dc2088b456a",
"591382d986f774465a6413a7",
"56742c284bdc2d98058b456d",
"5e2af4a786f7746d3f3c3400",
"5e2af47786f7746d404f3aaa",
"57372deb245977685d4159b3",
"63a39e1d234195315d4020bd",
"573725b0245977612125bae2",
"59e35de086f7741778269d84",
"5d95d6be86f77424444eb3a7",
"5ad5d7d286f77450166e0a89",
"573725b0245977612125bae2",
"59e35de086f7741778269d84",
"5b43575a86f77424f443fe62",
"59faf7ca86f7740dbe19f6c2",
"59136f6f86f774447a1ed173",
"5737273924597765dd374461",
"591383f186f7744a4c5edcf3",
"59136f6f86f774447a1ed173",
"57a349b2245977762b199ec7",
"5914578086f774123569ffa4",
"5d80ca9086f774403a401e40",
@ -592,14 +592,14 @@
"5da5cdcd86f774529238fb9b",
"5a13f35286f77413ef1436b0",
"5d235b4d86f7742e017bc88a",
"57372db0245977685d4159b2",
"590c2e1186f77425357b6124",
"57372db0245977685d4159b2",
"57372bd3245977670b7cd243",
"5c12619186f7743f871c8a32",
"61aa5ba8018e9821b7368da9",
"60b0f561c4449e4cb624c1d7",
"5d6fc78386f77449d825f9dc",
"5733279d245977289b77ec24",
"5c12619186f7743f871c8a32",
"61aa5ba8018e9821b7368da9",
"59e35ef086f7741777737012",
"5e2af02c86f7746d420957d4",
"5672c92d4bdc2d180f8b4567",
@ -653,16 +653,16 @@
"5bc9b9ecd4351e3bac122519",
"59e3556c86f7741776641ac2",
"5780cfa52459777dfb276eb1",
"5eff09cd30a7dc22fd1ddfed",
"59136e1e86f774432f15d133",
"5ad5db3786f7743568421cce",
"5eff09cd30a7dc22fd1ddfed",
"590a3cd386f77436f20848cb",
"63a71e781031ac76fe773c7d",
"63a39df18a56922e82001f25",
"5d80cb3886f77440556dbf09",
"5d80c95986f77440351beef3",
"63a39fc0af870e651d58e6ae",
"5d1b3a5d86f774252167ba22",
"63a39fc0af870e651d58e6ae",
"5a0ee4b586f7743698200d22",
"590a3d9c86f774385926e510",
"590c2c9c86f774245b1f03f2",
@ -681,10 +681,10 @@
"5a144bdb86f7741d374bbde0",
"5ede7a8229445733cb4c18e2",
"59e3658a86f7741776641ac4",
"590a386e86f77429692b27ab",
"5e2af29386f7746d4159f077",
"5a0ee34586f774023b6ee092",
"590a386e86f77429692b27ab",
"5d80c78786f774403a401e3e",
"5a0ee34586f774023b6ee092",
"5a13ef7e86f7741290491063",
"5737256c2459776125652acd",
"5e2af4d286f7746d4159f07a",
@ -785,8 +785,8 @@
"57372c89245977685d4159b1",
"5ad7247386f7747487619dc3",
"63a39dfe3901f439517cafba",
"5c1d0efb86f7744baf2e7b7b",
"5a0ea64786f7741707720468",
"5c1d0efb86f7744baf2e7b7b",
"5d1b385e86f774252167b98a",
"5d8e15b686f774445103b190",
"5d80c88d86f77440556dbf07",
@ -809,13 +809,23 @@
"590c5bbd86f774785762df04",
"60b0f7057897d47c5b04ab94",
"59387a4986f77401cc236e62",
"5d80c6fc86f774403a401e3c"
"5d80c6fc86f774403a401e3c",
"5d0378d486f77420421a5ff4",
"63a39ce4cd6db0635c1975fa",
"5a0f0f5886f7741c4e32a472",
"5d63d33b86f7746ea9275524",
"5c12620d86f7743f8b198b72",
"5da743f586f7744014504f72",
"5d40419286f774318526545f",
"5d947d4e86f774447b415895",
"57372e73245977685d4159b4",
"5d235a5986f77443f6329bc6"
],
"SecuredContainer": [
"58dd3ad986f77403051cba8f",
"5a6086ea4f39f99cd479502f",
"54527ac44bdc2d36668b4567",
"56d59d3ad2720bdb418b4577",
"5a6086ea4f39f99cd479502f",
"58dd3ad986f77403051cba8f",
"5e023e53d4353e3302577c4c",
"5efb0c1bd79ff02a1f5e68d9",
"60194943740c5d77f6705eea",
@ -2841,19 +2851,19 @@
},
"mods": {
"mod_magazine": 100,
"mod_stock_000": 100,
"mod_scope": 75,
"mod_sight_rear": 78,
"mod_muzzle": 78,
"mod_tactical": 89,
"mod_mount_000": 50,
"mod_mount_002": 0,
"mod_sight_front": 78,
"mod_foregrip": 88,
"mod_mount_001": 0,
"mod_tactical_000": 0,
"mod_mount": 100,
"mod_stock": 100,
"mod_stock_000": 100,
"mod_mount_000": 50,
"mod_mount_001": 0,
"mod_mount_002": 0,
"mod_tactical_000": 0,
"mod_sight_front": 78,
"mod_foregrip": 88,
"mod_muzzle": 78,
"mod_scope": 75,
"mod_sight_rear": 78,
"mod_tactical": 89,
"mod_mount_003": 0,
"mod_mount_004": 0,
"mod_scope_000": 100,

View File

@ -430,7 +430,10 @@
"62a09cfe4f842e1bd12da3e4",
"590de7e986f7741b096e5f32",
"5d235a5986f77443f6329bc6",
"5bc9bdb8d4351e003562b8a1"
"5bc9bdb8d4351e003562b8a1",
"59e3658a86f7741776641ac4",
"5734758f24597738025ee253",
"5bc9bc53d4351e00367fbcee"
],
"SecuredContainer": [
"56dff061d2720bb5668b4567",
@ -2397,16 +2400,16 @@
"equipment": {
"Headwear": 83,
"Earpiece": 0,
"FaceCover": 17,
"ArmorVest": 76,
"FaceCover": 16,
"ArmorVest": 77,
"Eyewear": 62,
"ArmBand": 0,
"TacticalVest": 100,
"Backpack": 23,
"Backpack": 24,
"FirstPrimaryWeapon": 100,
"SecondPrimaryWeapon": 0,
"Holster": 0,
"Scabbard": 5,
"Scabbard": 6,
"Pockets": 100,
"SecuredContainer": 100
},
@ -2426,7 +2429,7 @@
"mod_equipment": 15,
"mod_sight_front": 0,
"mod_mount_001": 0,
"mod_mount_002": 67,
"mod_mount_002": 66,
"mod_mount": 0,
"mod_nvg": 0,
"mod_tactical": 68

View File

@ -639,7 +639,20 @@
"5d1b32c186f774252167a530",
"5d40425986f7743185265461",
"590c595c86f7747884343ad7",
"5734781f24597737e04bf32a"
"5734781f24597737e04bf32a",
"5d0377ce86f774186372f689",
"5bc9c049d4351e44f824d360",
"590c2b4386f77425357b6123",
"59faf98186f774067b6be103",
"637b60c3b7afa97bfc3d7001",
"63a0b208f444d32d6f03ea1e",
"5e54f62086f774219b0f1937",
"577e1c9d2459773cd707c525",
"5bc9b720d4351e450201234b",
"590c2d8786f774245b1f03f3",
"590c661e86f7741e566b646a",
"590a3efd86f77437d351a25b",
"573478bc24597738002c6175"
],
"SecuredContainer": [
"5e023e88277cce2b522ff2b1",
@ -2658,7 +2671,7 @@
"Eyewear": 0,
"ArmBand": 0,
"TacticalVest": 100,
"Backpack": 88,
"Backpack": 87,
"FirstPrimaryWeapon": 100,
"SecondPrimaryWeapon": 93,
"Holster": 0,
@ -2678,11 +2691,11 @@
"mod_tactical_002": 16,
"mod_tactical_003": 0,
"mod_scope": 56,
"mod_tactical_000": 63,
"mod_tactical_000": 64,
"mod_nvg": 100,
"mod_mount_001": 8,
"mod_mount_001": 9,
"mod_stock": 100,
"mod_mount_002": 72,
"mod_mount_002": 71,
"mod_sight_front": 56,
"mod_foregrip": 0,
"mod_charge": 0,

File diff suppressed because it is too large Load Diff

View File

@ -180,8 +180,8 @@
"5fd4c60f875c30179f5d04c2": 1,
"5f5f41f56760b4138443b352": 1,
"61bc85697113f767765c7fe7": 1,
"60a3c68c37ea821725773ef5": 1,
"60a621c49c197e4e8c4455e6": 1,
"60a3c68c37ea821725773ef5": 1,
"639343fce101f4caa40a4ef3": 1,
"628d0618d1ba6e4fa07ce5a4": 1
},
@ -1200,6 +1200,11 @@
"5a32aa8bc4a2826c6e06d737"
]
},
"5cf67cadd7f00c065a5abab7": {
"mod_muzzle": [
"5cc9ad73d7f00c000e2579d4"
]
},
"5bb2475ed4351e00853264e3": {
"mod_pistol_grip": [
"57af48872459771f0b2ebf11"
@ -1252,11 +1257,6 @@
"5bb20e70d4351e0035629f8f"
]
},
"5cf67cadd7f00c065a5abab7": {
"mod_muzzle": [
"5cc9ad73d7f00c000e2579d4"
]
},
"5bd70322209c4d00d7167b8f": {
"mod_muzzle": [
"5ba26acdd4351e003562908e"
@ -1779,13 +1779,13 @@
"5aa2a7e8e5b5b00016327c16",
"5df8a72c86f77412640e2e83",
"573478bc24597738002c6175",
"5aaf8a0be5b5b00015693243",
"5ae30bad5acfc400185c2dc4",
"5e00c1ad86f774747333222c",
"5b7be4575acfc400161d0832",
"5bed61680db834001d2c45ab",
"5a16ba61fcdbcb098008728a",
"5b4326435acfc433000ed01d",
"5aaf8a0be5b5b00015693243",
"5ae30bad5acfc400185c2dc4",
"5b432be65acfc433000ed01f",
"61c18d83b00456371a66814b",
"5e01ef6886f77445f643baa4",
@ -1876,9 +1876,9 @@
"5b7d645e5acfc400170e2f90",
"59ecc3dd86f7746dc827481c",
"5c0e53c886f7747fa54205c7",
"591c4e1186f77410354b316e",
"5ed515ece452db0eb56fc028",
"59e7635f86f7742cbf2c1095",
"591c4e1186f77410354b316e",
"5abcd472d8ce8700166032ae",
"5c4ee3d62e2216152006f302",
"5bb20dadd4351e00367faeff",
@ -1890,10 +1890,10 @@
"57cffb66245977632f391a99",
"5a16bb52fcdbcb001a3b00dc",
"5943eeeb86f77412d6384f6b",
"5ea17ca01412a1425304d1c0",
"62a5c41e8ec41a51b34739c3",
"5a7b4900e899ef197b331a2a",
"5c05293e0db83400232fff80",
"5ea17ca01412a1425304d1c0",
"62a5c41e8ec41a51b34739c3",
"5e54f62086f774219b0f1937",
"607d5a891246154cad35d6aa",
"5bed625c0db834001c062946",
@ -1920,12 +1920,12 @@
"611a30addbdd8440277441dc",
"5926f2e086f7745aae644231",
"5ae30db85acfc408fb139a05",
"5b40e61f5acfc4001a599bec",
"5a7dbfc1159bd40016548fde",
"6194f5a318a3974e5e7421eb",
"5c503ac82e221602b21d6e9a",
"59e89d0986f77427600d226e",
"62a5c333ec21e50cad3b5dc6",
"5b40e61f5acfc4001a599bec",
"62a09cfe4f842e1bd12da3e4",
"62a61c988ec41a51b34758d5",
"59ccfdba86f7747f2109a587",
@ -1978,7 +1978,18 @@
"62e7e7bbe6da9612f743f1e0",
"5fb655b748c711690e3a8d5a",
"5a7b4960e899ef197b331a2d",
"5c052a900db834001a66acbd"
"5c052a900db834001a66acbd",
"5bb20e70d4351e0035629f8f",
"5b7d68af5acfc400170e30c3",
"5d19cd96d7ad1a4a992c9f52",
"5aa2b9ede5b5b000137b758b",
"59f99a7d86f7745b134aa97b",
"58949dea86f77409483e16a8",
"5cf518cfd7f00c065b422214",
"638db77630c4240f9e06f8b6",
"5c6d11072e2216000e69d2e4",
"637b6251104668754b72f8f9",
"59e7711e86f7746cae05fbe1"
],
"SecuredContainer": [
"5a3c16fe86f77452b62de32a",
@ -2003,12 +2014,12 @@
"54527ac44bdc2d36668b4567",
"5c0d668f86f7747ccb7f13b2",
"56dff061d2720bb5668b4567",
"5c0d5e4486f77478390952fe",
"5c0d5ae286f7741e46554302",
"5efb0e16aeb21837e749c7ff",
"5ba26835d4351e0035628ff5",
"57a0e5022459774d1673f889",
"5efb0c1bd79ff02a1f5e68d9",
"5c0d5e4486f77478390952fe",
"56dfef82d2720bbd668b4567",
"5e023e53d4353e3302577c4c",
"5fbe3ffdf8b6a877a729ea82",
@ -2077,11 +2088,11 @@
"Ворон",
"Барс",
"Крачун",
"Орел",
"Ягуар",
"Каракурт",
"Тайпан",
"Дикобраз",
"Орел",
"Гепард",
"Ирбис",
"Манул"
@ -4028,10 +4039,10 @@
"chances": {
"equipment": {
"Headwear": 90,
"Earpiece": 53,
"FaceCover": 64,
"Earpiece": 52,
"FaceCover": 65,
"ArmorVest": 35,
"Eyewear": 78,
"Eyewear": 77,
"ArmBand": 0,
"TacticalVest": 100,
"Backpack": 46,
@ -4051,11 +4062,11 @@
"mod_sight_front": 85,
"mod_mount_000": 17,
"mod_mount_001": 48,
"mod_mount_002": 14,
"mod_mount_002": 15,
"mod_foregrip": 27,
"mod_muzzle": 36,
"mod_mount": 37,
"mod_tactical_001": 39,
"mod_tactical_001": 40,
"mod_reciever": 100,
"mod_tactical": 45,
"mod_equipment_000": 1,
@ -4071,11 +4082,11 @@
"mod_tactical_003": 0,
"mod_handguard": 100,
"mod_mount_004": 66,
"mod_equipment": 17,
"mod_muzzle_000": 50,
"mod_equipment": 15,
"mod_muzzle_000": 47,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_equipment_002": 10
"mod_equipment_002": 8
}
},
"generation": {

View File

@ -414,17 +414,17 @@
"5938504186f7740991483f30",
"5d80c60f86f77440373c4ece",
"5a351711c4a282000b1521a4",
"59136f6f86f774447a1ed173",
"5d80c88d86f77440556dbf07",
"593858c486f774253a24cb52",
"59136f6f86f774447a1ed173",
"5ede7a8229445733cb4c18e2",
"593aa4be86f77457f56379f8",
"590c37d286f77443be3d7827",
"62987da96188c076bc0d8c51",
"5a0060fc86f7745793204432",
"5a0ea69f86f7741cd5406619",
"5d80c62a86f7744036212b3f",
"5a0dc95c86f77452440fc675",
"5d80c62a86f7744036212b3f",
"5780cf7f2459777de4559322",
"5ad5d49886f77455f9731921",
"5780cf692459777de4559321",
@ -443,14 +443,14 @@
"5913611c86f77479e0084092",
"5780cf942459777df90dcb72",
"5a13ee1986f774794d4c14cd",
"5a0ea64786f7741707720468",
"5c1e2a1e86f77431ea0ea84c",
"5a0ea64786f7741707720468",
"5d80ccdd86f77474f7575e02",
"5a0eed4386f77405112912aa",
"5a13f35286f77413ef1436b0",
"5a0f0f5886f7741c4e32a472",
"61a64492ba05ef10d62adcc1",
"5a13f35286f77413ef1436b0",
"5a0ee4b586f7743698200d22",
"61a64492ba05ef10d62adcc1",
"5d80c8f586f77440373c4ed0",
"590c651286f7741e566b6461",
"5d9f1fa686f774726974a992",
@ -523,8 +523,8 @@
"5c1e2d1f86f77431e9280bee",
"62987cb98081af308d7558c8",
"5d95d6be86f77424444eb3a7",
"63a39fdf1e21260da44a0256",
"63a71ed21031ac76fe773c7f",
"63a39fdf1e21260da44a0256",
"63a39df18a56922e82001f25",
"5a0eecf686f7740350630097",
"5a0ee34586f774023b6ee092",
@ -565,7 +565,12 @@
"62a9cb937377a65d7b070cef",
"5a0f068686f7745b0d4ea242",
"62a0a16d0b9d3c46de5b6e97",
"5780d07a2459777de4559324"
"5780d07a2459777de4559324",
"5a145d7b86f7744cbb6f4a13",
"5913651986f774432f15d132",
"59148f8286f7741b951ea113",
"5ed515ece452db0eb56fc028",
"5c0e531286f7747fa54205c2"
],
"Backpack": [],
"SecuredContainer": [
@ -2586,7 +2591,7 @@
"equipment": {
"Headwear": 24,
"Earpiece": 0,
"FaceCover": 14,
"FaceCover": 15,
"ArmorVest": 0,
"Eyewear": 0,
"ArmBand": 0,
@ -2611,13 +2616,13 @@
"mod_stock": 100,
"mod_charge": 0,
"mod_reciever": 100,
"mod_mount_000": 21,
"mod_mount_000": 20,
"mod_tactical": 0,
"mod_sight_rear": 48,
"mod_sight_rear": 47,
"mod_sight_front": 32,
"mod_mount_001": 74,
"mod_mount_001": 71,
"mod_mount_002": 100,
"mod_foregrip": 21
"mod_foregrip": 20
}
},
"generation": {

View File

@ -632,11 +632,11 @@
"mod_muzzle": [
"5a0d63621526d8dba31fe3bf"
],
"mod_magazine": [
"59d625f086f774661516605d"
],
"mod_mount_000": [
"5a7c74b3e899ef0014332c29"
],
"mod_magazine": [
"59d625f086f774661516605d"
]
},
"628b9c37a733087d0d7fe84b": {
@ -982,19 +982,7 @@
"57347ca924597744596b4e71",
"5d1b2ffd86f77425243e8d17",
"590a386e86f77429692b27ab",
"5672cb124bdc2d1a0f8b4568",
"59e36c6f86f774176c10a2a7",
"63a39fdf1e21260da44a0256",
"5938504186f7740991483f30",
"5e2af4d286f7746d4159f07a",
"5d6fc78386f77449d825f9dc",
"59e35de086f7741778269d84",
"63a39cb1c9b3aa4b61683ee2",
"5d1b313086f77425227d1678",
"57347c2e24597744902c94a1",
"5938994586f774523a425196",
"5d1b3f2d86f774253763b735",
"590a3d9c86f774385926e510",
"619cbf476b8a1b37a54eebf8",
"590c35a486f774273531c822",
"5672cb304bdc2dc2088b456a",
@ -1010,16 +998,28 @@
"5734758f24597738025ee253",
"590c5a7286f7747884343aea",
"5d0377ce86f774186372f689",
"5d1b313086f77425227d1678",
"57347c2e24597744902c94a1",
"5c10c8fd86f7743d7d706df3",
"56742c324bdc2d150f8b456d",
"5c06779c86f77426e00dd782",
"5734779624597737e04bf329",
"590c5c9f86f77477c91c36e7",
"5672cb124bdc2d1a0f8b4568",
"59e36c6f86f774176c10a2a7",
"63a39fdf1e21260da44a0256",
"5938504186f7740991483f30",
"5d6fc78386f77449d825f9dc",
"59e35de086f7741778269d84",
"63a39cb1c9b3aa4b61683ee2",
"5938994586f774523a425196",
"5d1b3f2d86f774253763b735",
"590a3d9c86f774385926e510",
"577e1c9d2459773cd707c525",
"5c13cef886f774072e618e82",
"5c06782b86f77426df5407d2",
"590a3efd86f77437d351a25b",
"56742c324bdc2d150f8b456d",
"59148f8286f7741b951ea113",
"5c06779c86f77426e00dd782",
"5734779624597737e04bf329",
"590c5c9f86f77477c91c36e7",
"590a373286f774287540368b",
"60391b0fb847c71012789415",
"57a349b2245977762b199ec7",
@ -1028,19 +1028,21 @@
"56742c284bdc2d98058b456d",
"59e35cbb86f7741778269d83",
"5780cda02459777b272ede61",
"5e2af02c86f7746d420957d4",
"5d03775b86f774203e7e0c4b",
"590a391c86f774385a33c404",
"5734770f24597738025ee254",
"62987c658081af308d7558c6",
"5e2af41e86f774755a234b67",
"5780d0652459777df90dcb74",
"5e2af02c86f7746d420957d4",
"5d03775b86f774203e7e0c4b",
"5734770f24597738025ee254",
"62987c658081af308d7558c6",
"59e361e886f774176c10a2a5",
"590de71386f774347051a052",
"591383f186f7744a4c5edcf3",
"5a0ea69f86f7741cd5406619",
"590c346786f77423e50ed342",
"5914578086f774123569ffa4",
"5e2af51086f7746d3f3c3402",
"59e366c186f7741778269d85",
"5d0375ff86f774186372f685",
"5d1b304286f774253763a528",
"62987e26a77ec735f90a2995",
@ -1049,8 +1051,6 @@
"5780cfa52459777dfb276eb1",
"5d03794386f77420415576f5",
"6389c70ca33d8c4cdf4932c6",
"5e2af51086f7746d3f3c3402",
"59e366c186f7741778269d85",
"5bc9bc53d4351e00367fbcee",
"5c05308086f7746b2101e90b",
"5d1b3a5d86f774252167ba22",
@ -1058,41 +1058,41 @@
"5c13cd2486f774072c757944",
"5d0378d486f77420421a5ff4",
"59e3596386f774176c10a2a2",
"5d40412b86f7743cb332ac3a",
"5d1b2fa286f77425227d1674",
"59136e1e86f774432f15d133",
"5d6fc87386f77449db3db94e",
"59faff1d86f7746c51718c9c",
"62a9cb937377a65d7b070cef",
"5bc9b355d4351e6d1509862a",
"5733279d245977289b77ec24",
"5d40412b86f7743cb332ac3a",
"5d1b2fa286f77425227d1674",
"59136e1e86f774432f15d133",
"5d235b4d86f7742e017bc88a",
"591382d986f774465a6413a7",
"5ad5d49886f77455f9731921",
"5d1b2f3f86f774252167a52c",
"5780d0532459777a5108b9a2",
"61a64492ba05ef10d62adcc1",
"5a0eee1486f77402aa773226",
"591382d986f774465a6413a7",
"5ad5d49886f77455f9731921",
"59e3606886f77417674759a5",
"61bf7b6302b3924be92fa8c3",
"63a39f18c2d53c2c6839c1d3",
"5d1b32c186f774252167a530",
"5a0eee1486f77402aa773226",
"5e54f62086f774219b0f1937",
"59e3658a86f7741776641ac4",
"62a0a043cf4a99369e2624a5",
"62a09ee4cf4a99369e262453",
"5ad5d20586f77449be26d877",
"5938603e86f77435642354f4",
"5e54f62086f774219b0f1937",
"59e3658a86f7741776641ac4",
"5e2aef7986f7746d3f3c33f5",
"59faf98186f774067b6be103",
"593858c486f774253a24cb52",
"62a09e73af34e73a266d932a",
"590c2c9c86f774245b1f03f2",
"63a0b208f444d32d6f03ea1e",
"573474f924597738002c6174",
"63a0b208f444d32d6f03ea1e",
"5b4335ba86f7744d2837a264",
"5d0376a486f7747d8050965c",
"59e3647686f774176a362507",
"5d0376a486f7747d8050965c",
"5ed515e03a40a50460332579",
"62a08f4c4f842e1bd12d9d62",
"5e54f6af86f7742199090bf3",
@ -1113,8 +1113,8 @@
"5d1b317c86f7742523398392",
"5913611c86f77479e0084092",
"5a13ee1986f774794d4c14cd",
"60391afc25aff57af81f7085",
"5d4041f086f7743cac3f22a7",
"60391afc25aff57af81f7085",
"590c595c86f7747884343ad7",
"62a0a0bb621468534a797ad5",
"5a0ee34586f774023b6ee092",
@ -1140,9 +1140,9 @@
"62987dfc402c7f69bf010923",
"5d63d33b86f7746ea9275524",
"5c1d0efb86f7744baf2e7b7b",
"5d40425986f7743185265461",
"56742c2e4bdc2d95058b456d",
"62a091170b9d3c46de5b6cf2",
"5d40425986f7743185265461",
"61a6444b8c141d68246e2d2f",
"5c1d0d6d86f7744bb2683e1f",
"5c0e530286f7747fa1419862",
@ -1155,10 +1155,10 @@
"5c0e533786f7747fa23f4d47",
"5a0dc95c86f77452440fc675",
"5a144dfd86f77445cb5a0982",
"5e2af29386f7746d4159f077",
"5af04b6486f774195a3ebb49",
"5da5cdcd86f774529238fb9b",
"5ed515c8d380ab312177c0fa",
"5e2af29386f7746d4159f077",
"590c2e1186f77425357b6124",
"590c645c86f77412b01304d9",
"590c2d8786f774245b1f03f3",
@ -1192,8 +1192,8 @@
"5448ba0b4bdc2d02308b456c",
"62a0a098de7ac8199358053b",
"5c052f6886f7746b1e3db148",
"5a0ee76686f7743698200d5c",
"5c1e2d1f86f77431e9280bee",
"5a0ee76686f7743698200d5c",
"5c1d0c5f86f7744bb2683cf0",
"5e2af37686f774755a234b65",
"5d9f1fa686f774726974a992",
@ -1264,7 +1264,14 @@
"63a39f6e64283b5e9c56b289",
"59136f6f86f774447a1ed173",
"63a397d3af870e651d58e65b",
"5a13f46386f7741dd7384b04"
"5a13f46386f7741dd7384b04",
"5a13f24186f77410e57c5626",
"5a0eb38b86f774153b320eb0",
"5a1452ee86f7746f33111763",
"5a0ee72c86f77436955d3435",
"5d8e0e0e86f774321140eb56",
"62987cb98081af308d7558c8",
"5c1e495a86f7743109743dfb"
],
"SecuredContainer": [
"5c925fa22e221601da359b7b",
@ -1277,10 +1284,10 @@
"5e81f423763d9f754677bf2e",
"56dff026d2720bb8668b4567",
"56dff3afd2720bba668b4567",
"5a3c16fe86f77452b62de32a",
"56dff061d2720bb5668b4567",
"5c0d5e4486f77478390952fe",
"5a3c16fe86f77452b62de32a",
"5efb0da7a29a85116f6ea05f",
"5c0d5e4486f77478390952fe",
"5efb0e16aeb21837e749c7ff",
"56d59d3ad2720bdb418b4577",
"57a0dfb82459774d3078b56c",
@ -3320,14 +3327,14 @@
"mod_muzzle": 100,
"mod_reciever": 100,
"mod_sight_rear": 64,
"mod_scope": 11,
"mod_scope": 10,
"mod_mount_000": 31,
"mod_mount_002": 24,
"mod_mount": 10,
"mod_sight_front": 50,
"mod_mount_001": 46,
"mod_sight_front": 49,
"mod_mount_001": 47,
"mod_tactical": 5,
"mod_foregrip": 14,
"mod_foregrip": 13,
"mod_mount_003": 0,
"mod_tactical_000": 9,
"mod_stock_000": 100,

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -114,6 +114,7 @@
"modloader-missing_package_json": "В моде (%s) отсутствует package.json",
"modloader-missing_package_json_property": "В моде {{modName}} файл package.json требует следующее свойство: {{prop}} ",
"modloader-mod_incompatible": "Загрузчик модов: Мод (%s) несовместим, он должен наследовать как минимум один из интерфейсов: IPostAkiLoadMod, IPostDBLoadMod, IPreAkiLoadMod",
"modloader-async_mod_error": "Загрузчик модов: Ошибка при загрузке асинхронного мода: %s",
"modloader-no_mods_loaded": "Были обнаружены ошибки в модах, МОДЫ НЕ БУДУТ ЗАГРУЖЕНЫ",
"modloader-outdated_akiversion_field": "Мод %s не совместим с текущей версией AKI. Возможны проблемы - поддержки не будет!",
"modloader-outdated_dependency": "Мод {{mod}} требует {{modDependency}} версии {{requiredVersion}}. Текущая установленная версия - {{currentVersion}}",
@ -134,6 +135,7 @@
"quest-compare_operator_unhandled": "loyaltyRequirementCheck() оператор %s не обрабатывается, возврат к значению false по умолчанию",
"quest-item_not_found_in_inventory": "changeItemStack() Предмет с _id: %s не найден в инвентаре",
"quest-no_skill_found": "Навык %s не найден",
"quest-handover_wrong_item": "Невозможно сдать предмет для задания {{questId}}, ожидаемый tpl: {{requiredTpl}}, но передан: {{handedInTpl}}",
"quest-reward_type_not_handled": "Тип награды за квест: {{rewardType}} не обработан для квеста: {{questId}} название: {{questName}}",
"ragfair-invalid_player_offer_request": "Невозможно разместить предложение, запрос недействителен",
"ragfair-missing_barter_scheme": "generateFleaOffersForTrader() Не получилось найти barterScheme для предмета с id: {{itemId}} tpl: {{tpl}} на {{name}}",

View File

@ -121,11 +121,17 @@ export class InraidController
pmcData = this.inRaidHelper.setInventory(sessionID, pmcData, offraidData.profile);
this.healthHelper.saveVitality(pmcData, offraidData.health, sessionID);
// remove inventory if player died and send insurance items
// TODO: dump of prapor/therapist dialogues that are sent when you die in lab with insurance.
// Remove inventory if player died and send insurance items
if (insuranceEnabled)
{
this.insuranceService.storeLostGear(pmcData, offraidData, preRaidGear, sessionID);
this.insuranceService.storeLostGear(pmcData, offraidData, preRaidGear, sessionID, isDead);
}
else
{
if (locationName === "Laboratory")
{
// TODO: dump of prapor/therapist dialogues that are sent when you die in lab with insured items
}
}
if (isDead)
@ -164,8 +170,8 @@ export class InraidController
{
for (const questItem of postRaidSaveRequest.profile.Stats.CarriedQuestItems)
{
const findItemConditionId = this.questHelper.getFindItemIdForQuestHandIn(questItem);
this.profileHelper.resetProfileQuestCondition(sessionID, findItemConditionId);
const findItemConditionIds = this.questHelper.getFindItemIdForQuestHandIn(questItem);
this.profileHelper.resetProfileQuestCondition(sessionID, findItemConditionIds);
}
pmcData.Stats.CarriedQuestItems = [];

View File

@ -100,7 +100,7 @@ export class InventoryController
return this.httpResponseUtil.appendErrorToOutput(output, this.localisationService.getText("inventory-edit_trader_item"), 228);
}
this.inventoryHelper.moveItemInternal(items.from, moveRequest);
this.inventoryHelper.moveItemInternal(pmcData, items.from, moveRequest);
}
else
{
@ -436,17 +436,25 @@ export class InventoryController
};
}
public bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse
/**
* Bind an inventory item to the quick access menu at bottom of player screen
* @param pmcData Player profile
* @param bindRequest Reqeust object
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
public bindItem(pmcData: IPmcData, bindRequest: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse
{
for (const index in pmcData.Inventory.fastPanel)
{
if (pmcData.Inventory.fastPanel[index] === body.item)
if (pmcData.Inventory.fastPanel[index] === bindRequest.item)
{
pmcData.Inventory.fastPanel[index] = "";
}
}
pmcData.Inventory.fastPanel[body.index] = body.item;
pmcData.Inventory.fastPanel[bindRequest.index] = bindRequest.item;
return this.eventOutputHolder.getOutput(sessionID);
}

View File

@ -192,6 +192,11 @@ export class BotGenerator
// Simulate bot looking like a Player scav with the pmc name in brackets
if (botRole === "assault" && this.randomUtil.getChance100(this.botConfig.chanceAssaultScavHasPlayerScavName))
{
if (isPlayerScav)
{
return name;
}
const pmcNames = [...this.databaseServer.getTables().bots.types["usec"].firstName, ...this.databaseServer.getTables().bots.types["bear"].firstName];
return `${name} (${this.randomUtil.getArrayValue(pmcNames)})`;

View File

@ -460,41 +460,40 @@ export class BotWeaponGenerator
/**
* Fill existing magazines to full, while replacing their contents with specified ammo
* @param weaponMods
* @param magazine
* @param ammoTpl
* @param weaponMods Weapon with children
* @param magazine Magazine item
* @param cartridgeTpl Cartridge to insert into magazine
*/
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, cartridgeTpl: string): void
{
const modTemplate = this.itemHelper.getItem(magazine._tpl)[1];
if (!modTemplate)
const magazineTemplate = this.itemHelper.getItem(magazine._tpl)[1];
if (!magazineTemplate)
{
this.logger.error(this.localisationService.getText("bot-unable_to_find_magazine_item", magazine._tpl));
return;
}
const parentItem = this.itemHelper.getItem(modTemplate._parent)[1];
const fullStackSize = modTemplate._props.Cartridges[0]._max_count;
const parentItem = this.itemHelper.getItem(magazineTemplate._parent)[1];
// the revolver shotgun uses a magazine with chambers, not cartridges ("camora_xxx")
// Exchange of the camora ammo is not necessary we could also just check for stackSize > 0 here
// and remove the else
if (this.botWeaponGeneratorHelper.magazineIsCylinderRelated(parentItem._name))
{
this.fillCamorasWithAmmo(weaponMods, magazine._id, ammoTpl);
this.fillCamorasWithAmmo(weaponMods, magazine._id, cartridgeTpl);
}
else
{
this.addOrUpdateMagazinesChildWithAmmo(weaponMods, magazine, ammoTpl, fullStackSize);
this.addOrUpdateMagazinesChildWithAmmo(weaponMods, magazine, cartridgeTpl, magazineTemplate);
}
}
/**
* Add desired ammo tpl as item to weaponmods array, placed as child to UBGL
* @param weaponMods
* @param ubglMod
* @param ubglAmmoTpl
* @param weaponMods Weapon with children
* @param ubglMod UBGL item
* @param ubglAmmoTpl Grenade ammo tpl
*/
protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void
{
@ -510,30 +509,29 @@ export class BotWeaponGenerator
/**
* Add cartridge item to weapon Item array, if it already exists, update
* @param weaponMods Weapon items array to amend
* @param weaponWithMods Weapon items array to amend
* @param magazine magazine item details we're adding cartridges to
* @param chosenAmmo cartridge to put into the magazine
* @param chosenAmmoTpl cartridge to put into the magazine
* @param newStackSize how many cartridges should go into the magazine
* @param magazineTemplate magazines db template
*/
protected addOrUpdateMagazinesChildWithAmmo(weaponMods: Item[], magazine: Item, chosenAmmo: string, newStackSize: number): void
protected addOrUpdateMagazinesChildWithAmmo(weaponWithMods: Item[], magazine: Item, chosenAmmoTpl: string, magazineTemplate: ITemplateItem): void
{
const magazineCartridgeChildItem = weaponMods.find(m => m.parentId === magazine._id && m.slotId === "cartridges");
if (!magazineCartridgeChildItem) // magazine doesn't have a child item with the ammo inside it, create one
const magazineCartridgeChildItem = weaponWithMods.find(m => m.parentId === magazine._id && m.slotId === "cartridges");
if (magazineCartridgeChildItem)
{
weaponMods.push({
_id: this.hashUtil.generate(),
_tpl: chosenAmmo,
parentId: magazine._id,
slotId: "cartridges",
upd:
{ StackObjectsCount: newStackSize }
});
}
else // magazine has cartridge stack, amend details
{
magazineCartridgeChildItem._tpl = chosenAmmo;
magazineCartridgeChildItem.upd = { "StackObjectsCount": newStackSize };
// Easier to delete and create below instaed of modifying existing item
weaponWithMods = weaponWithMods.slice(weaponWithMods.indexOf(magazineCartridgeChildItem), 1);
}
// Create array with just magazine
const magazineWithCartridges = [magazine];
// Add full cartridge child items to above array
this.itemHelper.fillMagazineWithCartridge(magazineWithCartridges, magazineTemplate, chosenAmmoTpl, 1);
// Replace existing magazine with above array of mag + cartridge stacks
weaponWithMods.splice(weaponWithMods.indexOf(magazine), 1, ...magazineWithCartridges);
}
/**

View File

@ -54,6 +54,15 @@ export class LocationGenerator
this.locationConfig = this.configServer.getConfig(ConfigTypes.LOCATION);
}
/**
* Choose loot to put into a static container
* @param containerIn
* @param staticForced
* @param staticLootDist
* @param staticAmmoDist
* @param locationName Name of the map to generate static loot for
* @returns IStaticContainerProps
*/
public generateContainerLoot(
containerIn: IStaticContainerProps,
staticForced: IStaticForcedProps[],
@ -102,6 +111,7 @@ export class LocationGenerator
// Draw random loot
// money spawn more than once in container
let failedToFitCount = 0;
const locklist = [Money.ROUBLES, Money.DOLLARS, Money.EUROS];
const tplsDraw = itemDistribution.draw(numberItems, false, locklist);
const tpls = tplsForced.concat(tplsDraw);
@ -112,10 +122,20 @@ export class LocationGenerator
const width = created.width;
const height = created.height;
// look for open slot to put chosen item into
const result = this.containerHelper.findSlotForItem(container2D, width, height);
if (!result.success)
{
break;
// 2 attempts to fit an item, container is probably full, stop trying to add more
if (failedToFitCount >= this.locationConfig.fitLootIntoContainerAttempts)
{
break;
}
// Can't fit item, skip
failedToFitCount++;
continue;
}
container2D = this.containerHelper.fillContainerMapWithItem(container2D, result.x, result.y, width, height, result.rotation);
@ -130,6 +150,7 @@ export class LocationGenerator
container.Items.push(item);
}
}
return container;
}
@ -455,23 +476,18 @@ export class LocationGenerator
// it can handle revolver ammo (it's not restructured to be used here yet.)
// General: Make a WeaponController for Ragfair preset stuff and the generating weapons and ammo stuff from
// BotGenerator
const mag = items.filter(x => x.slotId === "mod_magazine")[0];
const magazine = items.filter(x => x.slotId === "mod_magazine")[0];
// some weapon presets come without magazine; only fill the mag if it exists
if (mag)
if (magazine)
{
const weapTemplate = this.itemHelper.getItem(rootItem._tpl)[1];
// we can't use weaponTemplate's "_props.ammoCaliber" directly since there's a weapon ("weapon_zmz_pp-9_9x18pmm")
// with non-existing ammoCaliber: Caliber9x18PMM -> We get the Caliber from the weapons' default ammo
const defAmmoTemplate = this.itemHelper.getItem(weapTemplate._props.defAmmo)[1];
const magTemplate = this.itemHelper.getItem(mag._tpl)[1];
items.push(
this.itemHelper.createRandomMagCartridges(
magTemplate,
mag._id,
staticAmmoDist,
defAmmoTemplate._props.Caliber
)
);
const magTemplate = this.itemHelper.getItem(magazine._tpl)[1];
// Create array with just magazine
const magazineWithCartridges = [magazine];
this.itemHelper.fillMagazineWithRandomCartridge(magazineWithCartridges, magTemplate, staticAmmoDist);
// Replace existing magazine with above array
items.splice(items.indexOf(magazine), 1, ...magazineWithCartridges);
}
const size = this.itemHelper.getItemSize(items, rootItem._id);
@ -485,7 +501,12 @@ export class LocationGenerator
}
else if (this.itemHelper.isOfBaseclass(tpl, BaseClasses.MAGAZINE))
{
items.push(this.itemHelper.createRandomMagCartridges(itemTemplate, items[0]._id, staticAmmoDist));
// Create array with just magazine
const magazineWithCartridges = [items[0]];
this.itemHelper.fillMagazineWithRandomCartridge(magazineWithCartridges, itemTemplate, staticAmmoDist);
// Replace existing magazine with above array
items.splice(items.indexOf(items[0]), 1, ...magazineWithCartridges);
}
return {

View File

@ -323,12 +323,9 @@ export class InRaidHelper
public deleteInventory(pmcData: IPmcData, sessionID: string): void
{
const toDelete = [];
const itemsInPocketsRigBackpack = this.getBaseItemsInRigPocketAndBackpack(pmcData);
const lootItemIds = itemsInPocketsRigBackpack.map(x => x._id);
for (const item of pmcData.Inventory.items)
{
if (this.isItemKeptAfterDeath(pmcData, item, lootItemIds))
if (this.isItemKeptAfterDeath(pmcData, item))
{
continue;
}
@ -340,20 +337,9 @@ export class InRaidHelper
toDelete.push(item._id);
}
// Remove items in pockets
if (item.slotId === "Pockets")
if (item.slotId.startsWith("pocket"))
{
for (const itemInPocket of pmcData.Inventory.items.filter(x => x.parentId === item._id))
{
// Don't delete items in special slots
// Can be special slot 1, 2 or 3
if (itemInPocket.slotId.includes("SpecialSlot"))
{
continue;
}
toDelete.push(itemInPocket._id);
}
toDelete.push(item._id);
}
}
@ -388,22 +374,27 @@ export class InRaidHelper
* Does the provided items slotId mean its kept on the player after death
* @pmcData Player profile
* @itemToCheck Item to check should be kept
* @lootItemTpls Array of item Ids that are inside player rig/backpack/pocket
* @returns true if item is kept after death
*/
protected isItemKeptAfterDeath(pmcData: IPmcData, itemToCheck: Item, lootItemIds: string[]): boolean
protected isItemKeptAfterDeath(pmcData: IPmcData, itemToCheck: Item): boolean
{
// No parentid means its a base inventory item, always keep
if (!itemToCheck.parentId)
{
return true;
}
// Is item equipped on player
if (itemToCheck.parentId === pmcData.Inventory.equipment)
{
// Check slot id against config, true = delete, false = keep
const keep = !this.lostOnDeathConfig.equipment[itemToCheck.slotId];
if (keep === undefined)
// Check slot id against config, true = delete, false = keep, undefined = delete
const discard = this.lostOnDeathConfig.equipment[itemToCheck.slotId];
if (discard === undefined)
{
return false;
}
return keep;
return !discard;
}
// Is quest item + quest item not lost on death
@ -412,8 +403,8 @@ export class InRaidHelper
return true;
}
// Is loot item + not lost on death
if (!this.lostOnDeathConfig.loot && lootItemIds.includes(itemToCheck._id))
// special slots are always kept after death
if (itemToCheck.slotId?.includes("SpecialSlot") && this.lostOnDeathConfig.specialSlotItems)
{
return true;
}

View File

@ -849,31 +849,34 @@ export class InventoryHelper
/**
* Internal helper function to move item within the same profile_f.
*/
public moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void
public moveItemInternal(pmcData: IPmcData, inventoryItems: Item[], moveRequest: IInventoryMoveRequestData): void
{
this.handleCartridges(inventoryItems, body);
this.handleCartridges(inventoryItems, moveRequest);
for (const inventoryItem of inventoryItems)
{
// Find item we want to 'move'
if (inventoryItem._id && inventoryItem._id === body.item)
if (inventoryItem._id && inventoryItem._id === moveRequest.item)
{
this.logger.debug(`${body.Action} item: ${body.item} from slotid: ${inventoryItem.slotId} to container: ${body.to.container}`);
this.logger.debug(`${moveRequest.Action} item: ${moveRequest.item} from slotid: ${inventoryItem.slotId} to container: ${moveRequest.to.container}`);
// don't move shells from camora to cartridges (happens when loading shells into mts-255 revolver shotgun)
if (inventoryItem.slotId.includes("camora_") && body.to.container === "cartridges")
if (inventoryItem.slotId.includes("camora_") && moveRequest.to.container === "cartridges")
{
this.logger.warning(this.localisationService.getText("inventory-invalid_move_to_container", {slotId: inventoryItem.slotId, container: body.to.container}));
this.logger.warning(this.localisationService.getText("inventory-invalid_move_to_container", {slotId: inventoryItem.slotId, container: moveRequest.to.container}));
return;
}
// Edit items details to match its new location
inventoryItem.parentId = body.to.id;
inventoryItem.slotId = body.to.container;
inventoryItem.parentId = moveRequest.to.id;
inventoryItem.slotId = moveRequest.to.container;
if ("location" in body.to)
this.updateFastPanelBinding(pmcData, inventoryItem);
if ("location" in moveRequest.to)
{
inventoryItem.location = body.to.location;
inventoryItem.location = moveRequest.to.location;
}
else
{
@ -887,6 +890,32 @@ export class InventoryHelper
}
}
/**
* Update fast panel bindings when an item is moved into a container that doesnt allow quick slot access
* @param pmcData Player profile
* @param itemBeingMoved item being moved
*/
protected updateFastPanelBinding(pmcData: IPmcData, itemBeingMoved: Item): void
{
// Find matching itemid in fast panel
for (const itemKey in pmcData.Inventory.fastPanel)
{
if (pmcData.Inventory.fastPanel[itemKey] === itemBeingMoved._id)
{
// Get moved items parent
const itemParent = pmcData.Inventory.items.find(x => x._id === itemBeingMoved.parentId);
// Empty out id if item is moved to a container other than pocket/rig
if (itemParent && !(itemParent.slotId?.startsWith("Pockets") || itemParent.slotId === "TacticalVest"))
{
pmcData.Inventory.fastPanel[itemKey] = "";
}
break;
}
}
}
/**
* Internal helper function to handle cartridges in inventory if any of them exist.
*/

View File

@ -663,9 +663,9 @@ class ItemHelper
/**
* WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do
* @param {string} tpl
* @param {Array} tplsToCheck
* @returns boolean
* @param {string} tpl Items tpl to check parents of
* @param {Array} tplsToCheck Tpl values to check if parents of item match
* @returns boolean Match found
*/
public doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean
{
@ -702,9 +702,9 @@ class ItemHelper
}
/**
* Return true if item is a quest item
* @param {string} tpl
* @returns boolean
* Check if item is quest item
* @param tpl Items tpl to check quest status of
* @returns true if item is flagged as quest item
*/
public isQuestItem(tpl: string): boolean
{
@ -720,7 +720,7 @@ class ItemHelper
/**
* Get the inventory size of an item
* @param items
* @param items Item with children
* @param rootItemId
* @returns ItemSize object (width and height)
*/
@ -770,8 +770,8 @@ class ItemHelper
/**
* Get a random cartridge from an items Filter property
* @param item
* @returns
* @param item Db item template to look up Cartridge filter values from
* @returns Caliber of cartridge
*/
public getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string
{
@ -816,22 +816,71 @@ class ItemHelper
}
}
public createRandomMagCartridges(
/**
* Add child items (cartridges) to a magazine
* @param magazine Magazine to add child items to
* @param magTemplate Db template of magazine
* @param staticAmmoDist Cartridge distribution
* @param caliber Caliber of cartridge to add to magazine
* @param minSizePercent % the magazine must be filled to
*/
public fillMagazineWithRandomCartridge(
magazine: Item[],
magTemplate: ITemplateItem,
parentId: string,
staticAmmoDist: Record<string,
IStaticAmmoDetails[]>,
caliber: string = undefined
): Item
staticAmmoDist: Record<string, IStaticAmmoDetails[]>,
caliber: string = undefined,
minSizePercent = 0.25
): void
{
// no caliber defined, choose one
if (!caliber)
{
caliber = this.getRandomValidCaliber(magTemplate);
}
const ammoTpl = this.drawAmmoTpl(caliber, staticAmmoDist);
const maxCount = magTemplate._props.Cartridges[0]._max_count;
const stackCount = this.randomUtil.getInt(Math.round(0.25 * maxCount), maxCount);
return this.createCartridges(parentId, ammoTpl, stackCount, 0);
// Chose a randomly weighted cartridge that fits
const cartridgeTpl = this.drawAmmoTpl(caliber, staticAmmoDist);
this.fillMagazineWithCartridge(magazine, magTemplate, cartridgeTpl, minSizePercent);
}
/**
* Add child items to a magazine of a specific cartridge
* @param magazine Magazine to add child items to
* @param magTemplate Db template of magazine
* @param cartridgeTpl Cartridge to add to magazine
* @param minSizePercent % the magazine must be filled to
*/
public fillMagazineWithCartridge(
magazine: Item[],
magTemplate: ITemplateItem,
cartridgeTpl: string,
minSizePercent = 0.25
): void
{
// Get cartrdge properties and max allowed stack size
const cartridgeDetails = this.getItem(cartridgeTpl);
const cartridgeMaxStackSize = cartridgeDetails[1]._props.StackMaxSize;
// Get max number of cartridges in magazine, choose random value between min/max
const magazineCartridgeMaxCount = magTemplate._props.Cartridges[0]._max_count;
const stackCount = this.randomUtil.getInt(Math.round(minSizePercent * magazineCartridgeMaxCount), magazineCartridgeMaxCount);
// Loop over cartridge count and add stacks to magazine
let currentStoredCartridgeCount = 0;
let location = 0;
while (currentStoredCartridgeCount < stackCount)
{
// Get stack size of cartridges
const cartridgeCountToAdd = (stackCount <= cartridgeMaxStackSize)
? stackCount
: cartridgeMaxStackSize;
// Add cartridge item object into items array
magazine.push(this.createCartridges(magazine[0]._id, cartridgeTpl, cartridgeCountToAdd, location));
currentStoredCartridgeCount += cartridgeCountToAdd;
location ++;
}
}
protected getRandomValidCaliber(magTemplate: ITemplateItem): string

View File

@ -29,20 +29,36 @@ export class ProfileHelper
)
{ }
public resetProfileQuestCondition(sessionID: string, conditionId: string): void
/**
* Remove/reset started quest condtions in player profile
* @param sessionID Session id
* @param conditionIds Condition ids that need to be reset/removed
*/
public resetProfileQuestCondition(sessionID: string, conditionIds: string[]): void
{
// Get all quests in progress
const startedQuests = this.getPmcProfile(sessionID).Quests.filter(q => q.status === QuestStatus.Started);
for (const quest of startedQuests)
{
const index = quest.completedConditions.indexOf(conditionId);
let matchingConditionId: string;
for (const conditionId of conditionIds)
{
if (quest.completedConditions.includes(conditionId))
{
matchingConditionId = conditionId;
break;
}
}
// Find index of condition in array
const index = quest.completedConditions.indexOf(matchingConditionId);
if (index > -1)
{
// Remove condition
quest.completedConditions.splice(index, 1);
}
}
}
}
/**
* Get all profiles from server

View File

@ -706,16 +706,19 @@ export class QuestHelper
* @param itemTpl item tpl to look for
* @returns 'FindItem' condition id
*/
public getFindItemIdForQuestHandIn(itemTpl: string): string
public getFindItemIdForQuestHandIn(itemTpl: string): string[]
{
const result: string[] = [];
for (const quest of this.getQuestsFromDb())
{
const condition = quest.conditions.AvailableForFinish.find(c => c._parent === "FindItem" && c._props?.target?.includes(itemTpl));
if (condition)
{
return condition._props.id;
result.push(condition._props.id);
}
}
return result;
}
/**

View File

@ -147,12 +147,9 @@ export interface Inventory
sortingTable: string
questRaidItems: string
questStashItems: string
fastPanel: FastPanel
fastPanel: Record<string, string>
}
export interface FastPanel
{ }
export interface Skills
{
Common: Common[]

View File

@ -14,6 +14,8 @@ export interface ILocationConfig extends IBaseConfig
openZones: Record<string, string[]>
/** Key = map id, value = item tpls that should only have one forced loot spawn position */
forcedLootSingleSpawnById: Record<string, string[]>
/** How many attempts should be taken to fit an item into a container before giving up */
fitLootIntoContainerAttempts: number;
}
export interface IFixEmptyBotWavesSettings

View File

@ -4,7 +4,7 @@ export interface ILostOnDeathConfig extends IBaseConfig
{
kind: "aki-lostondeath"
equipment: Equipment
loot: boolean
specialSlotItems: boolean;
questItems: boolean
}

View File

@ -177,11 +177,12 @@ export class InsuranceService
* @param offraidData post-raid request object
* @param preRaidGear gear player wore prior to raid
* @param sessionID Session id
* @param playerDied did the player die in raid
*/
public storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void
public storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string, playerDied: boolean): void
{
const preRaidGearHash: Record<string, Item> = {};
const offRaidGearHash = {};
const offRaidGearHash: Record<string, Item> = {};
const gears = [];
// Build a hash table to reduce loops
@ -198,13 +199,13 @@ export class InsuranceService
for (const insuredItem of pmcData.InsuredItems)
{
// Check insured item was on player during raid
if (preRaidGearHash[insuredItem.itemId])
{
// This item exists in preRaidGear, meaning we brought it into the raid...
// Check if we brought it out of the raid
if (!offRaidGearHash[insuredItem.itemId])
// This item exists in preRaidGear, meaning we brought it into the raid
// Check if item missing OR player died with item on
if (!offRaidGearHash[insuredItem.itemId] || playerDied)
{
// We didn't bring this item out! We must've lost it.
gears.push({
"pmcData": pmcData,
"insuredItem": insuredItem,
@ -215,6 +216,7 @@ export class InsuranceService
}
}
// Process all insured items lost in-raid
for (const gear of gears)
{
this.addGearToSend(gear.pmcData, gear.insuredItem, gear.item, gear.sessionID);

View File

@ -2,26 +2,39 @@ import "reflect-metadata";
import { beforeEach, describe, expect, it } from "@jest/globals";
import { BotDifficultyHelper } from "@spt-aki/helpers/BotDifficultyHelper";
import { BotHelper } from "@spt-aki/helpers/BotHelper";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LocalisationService } from "@spt-aki/services/LocalisationService";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { MockHelper } from "./common/MockHelper";
import { TestHelper } from "./common/TestHelper";
const testHelper = new TestHelper();
const mockHelper = new MockHelper();
let testHelper: TestHelper;
let logger: ILogger;
let jsonUtil: JsonUtil;
let randomUtil: RandomUtil;
let configServer: ConfigServer;
let localisationService: LocalisationService;
let databaseServer: DatabaseServer;
let botHelper: BotHelper;
const logger = testHelper.getTestLogger();
describe("BotHelper", () => {
beforeAll(async () => {
testHelper = await TestHelper.fetchTestHelper();
logger = testHelper.getTestLogger();
jsonUtil = testHelper.getTestJsonUtil();
randomUtil = testHelper.getTestRandomUtil();
configServer = testHelper.getTestConfigServer();
localisationService = testHelper.getTestLocalisationService();
databaseServer = testHelper.getTestDatabaseServer();
botHelper = testHelper.getTestBotHelper();
})
const jsonUtil = testHelper.getTestJsonUtil();
const randomUtil = testHelper.getTestRandomUtil();
const configServer = testHelper.getTestConfigServer();
const botHelper = testHelper.getTestBotHelper();
const localisationService = testHelper.getTestLocalisationService();
const databaseServer = testHelper.getTestDatabaseServer();
describe("BotHelper", () =>
{
let botDifficultyHelper: BotDifficultyHelper;
beforeEach(() =>
{

View File

@ -2,25 +2,36 @@ import "reflect-metadata";
import { beforeEach, describe, expect, it } from "@jest/globals";
import { BotHelper } from "@spt-aki/helpers/BotHelper";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LocalisationService } from "@spt-aki/services/LocalisationService";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TestHelper } from "./common/TestHelper";
const testHelper = new TestHelper();
let testHelper: TestHelper;
let logger: ILogger;
let jsonUtil: JsonUtil;
let randomUtil: RandomUtil;
let configServer: ConfigServer;
let localisationService: LocalisationService;
let databaseServer: DatabaseServer;
const logger = testHelper.getTestLogger();
const jsonUtil = testHelper.getTestJsonUtil();
const randomUtil = testHelper.getTestRandomUtil();
const configServer = testHelper.getTestConfigServer();
describe("BotHelper", () => {
beforeAll(async () => {
testHelper = await TestHelper.fetchTestHelper();
logger = testHelper.getTestLogger();
jsonUtil = testHelper.getTestJsonUtil();
randomUtil = testHelper.getTestRandomUtil();
configServer = testHelper.getTestConfigServer();
localisationService = testHelper.getTestLocalisationService();
databaseServer = testHelper.getTestDatabaseServer();
})
const localisationService = testHelper.getTestLocalisationService();
const databaseServer = testHelper.getTestDatabaseServer();
describe("BotHelper", () =>
{
let helper: BotHelper;
beforeEach(() =>
{
beforeEach(() => {
helper = new BotHelper(logger, jsonUtil, databaseServer, randomUtil, localisationService, configServer);
});

View File

@ -3,23 +3,36 @@ import "reflect-metadata";
import { RepairHelper } from "@spt-aki/helpers/RepairHelper";
import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LocalisationService } from "@spt-aki/services/LocalisationService";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TestHelper } from "./common/TestHelper";
const testHelper = new TestHelper();
let testHelper: TestHelper;
let logger: ILogger;
let jsonUtil: JsonUtil;
let randomUtil: RandomUtil;
let configServer: ConfigServer;
let localisationService: LocalisationService;
let databaseServer: DatabaseServer;
let helper: RepairHelper;
const logger = testHelper.getTestLogger();
describe("BotHelper", () => {
const jsonUtil = testHelper.getTestJsonUtil();
const randomUtil = testHelper.getTestRandomUtil();
const configServer = testHelper.getTestConfigServer();
beforeAll(async () => {
testHelper = await TestHelper.fetchTestHelper();
logger = testHelper.getTestLogger();
jsonUtil = testHelper.getTestJsonUtil();
randomUtil = testHelper.getTestRandomUtil();
configServer = testHelper.getTestConfigServer();
localisationService = testHelper.getTestLocalisationService();
databaseServer = testHelper.getTestDatabaseServer();
})
const databaseServer = testHelper.getTestDatabaseServer();
describe("BotHelper", () =>
{
let helper: RepairHelper;
beforeEach(() =>
{
beforeEach(() => {
helper = new RepairHelper(
logger,
jsonUtil,

View File

@ -22,8 +22,7 @@ import { VFS } from "@spt-aki/utils/VFS";
import { MockHelper } from "./MockHelper";
import WinstonLogger from "./__mocks__/WinstonLogger";
export class TestHelper
{
export class TestHelper {
logger: ILogger;
asyncQueue: AsyncQueue;
uuidGenerator: UUidGenerator;
@ -45,10 +44,27 @@ export class TestHelper
itemBaseClassService: ItemBaseClassService;
botHelper: BotHelper;
constructor()
{
public static async fetchTestHelper() {
const initTestHelper = new TestHelper();
const mockHelper = new MockHelper();
const dbImporter = new DatabaseImporter(
initTestHelper.logger,
initTestHelper.vfs,
initTestHelper.jsonUtil,
initTestHelper.localisationService,
initTestHelper.databaseServer,
mockHelper.getMockImageRouter().object,
initTestHelper.encodingUtil,
initTestHelper.hashUtil,
initTestHelper.importerUtil
);
await dbImporter.onLoad();
return initTestHelper
}
constructor() {
this.logger = new WinstonLogger();
this.asyncQueue = new AsyncQueue();
this.uuidGenerator = new UUidGenerator();
@ -68,10 +84,6 @@ export class TestHelper
this.encodingUtil = new EncodingUtil();
this.importerUtil = new ImporterUtil(this.vfs, this.jsonUtil);
const dbImporter = new DatabaseImporter(this.logger, this.vfs, this.jsonUtil, this.localisationService, this.databaseServer, mockHelper.getMockImageRouter().object, this.encodingUtil, this.hashUtil, this.importerUtil);
dbImporter.onLoad();
this.handbookHelper = new HandbookHelper(this.databaseServer);
this.itemBaseClassService = new ItemBaseClassService(this.logger, this.localisationService, this.databaseServer);
this.itemHelper = new ItemHelper(this.logger, this.hashUtil, this.jsonUtil, this.randomUtil, this.objectId, this.mathUtil, this.databaseServer, this.handbookHelper, this.itemBaseClassService, this.localisationService, this.localeService);

View File

@ -7,10 +7,14 @@ import { BaseClasses } from "@spt-aki/models/enums/BaseClasses";
import { Money } from "@spt-aki/models/enums/Money";
import { TestHelper } from "../common/TestHelper";
const testHelper = new TestHelper();
let testHelper: TestHelper;
describe("test text", () =>
{
beforeAll(async () => {
testHelper = await TestHelper.fetchTestHelper();
})
let itemHelper: ItemHelper;
beforeEach(() =>
{