Updated Progressive Bot System

This commit is contained in:
2025-01-08 21:06:49 -05:00
parent 766b851cab
commit 26d2331891
148 changed files with 587732 additions and 526 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
[General]
gameName=spt
modid=0
version=d2025.1.7.0
version=d2025.1.8.0
newestVersion=
category="1,"
nexusFileStatus=1
@@ -15,9 +15,9 @@
// enableSafeGuard - Enables preventing weapon importing from bastardizing vanilla weapons. If you disable this, you will get cursed vanilla weapons.
// Higher weights = more often. Lower weights = less often. If you add a LOT of mod weapons, I suggest using a lower value.
// REVIEW THE APBS LOGS TO TUNE YOUR CONFIG. (\user\mods\acidphantasm-progressivebotsystem\logs)
"enableModdedWeapons": true,
"enableModdedEquipment": true,
"enableModdedClothing": true,
"enableModdedWeapons": false,
"enableModdedEquipment": false,
"enableModdedClothing": false,
"initalTierAppearance": 3,
"pmcWeaponWeights": 10,
"scavWeaponWeights": 1,
@@ -50,6 +50,12 @@
"disableBossFollowerTierGeneration": false,
"disableRaiderRogueTierGeneration": false,
// Enable/Disable bots having the chance to roll ammo choice for rig magazines after selecting ammo choice for weapon
// "enableBotsToRollAmmoAgain" If set to true, AI PMCs will roll their ammo choice for additional magazines based on the chance configured - if false all magazines will always have the same ammo selected for the weapon.
// "chanceToRollAmmoAgain" chance out of 100 that bot will roll ammo again for each subsequent additional magazine they spawn with in their rig.
"enableBotsToRollAmmoAgain": true,
"chanceToRollAmmoAgain": 50,
// Enable/Disable custom game version weights for AI PMCs
// If set to true, AI PMCs will roll their weights from the values below - if false will use SPT defaults.
// The values listed below ARE the SPT defaults (for reference)
@@ -169,10 +175,10 @@
// Explanation: "pmcMedRates": [ Chance for full resource value available, Minimum percent of item randomized between min and max resource ]
// Example.. "pmcMedRates": [ 65, 20 ] --- AFAK on a PMC has a 65% chance to be 400/400 and 35% chance to be between 0% and 80% used (it would spawn somewhere between 80/400 to 400/400).
"enableConsumableResourceRandomization": true,
"scavFoodRates": [ 25, 60 ],
"scavMedRates": [ 25, 60 ],
"pmcFoodRates": [ 65, 60 ],
"pmcMedRates": [ 65, 60 ],
"scavFoodRates": [ 10, 25 ],
"scavMedRates": [ 10, 25 ],
"pmcFoodRates": [ 10, 25 ],
"pmcMedRates": [ 10, 25 ],
// Blacklist specific ammo types from all AI -- USE "https://db.sp-tarkov.com/" to get the item _id
// Configure per tier blacklists
@@ -231,12 +237,12 @@
// IF YOU WANT EVERY TIER AT EVERY LEVEL, SET ALL OF THESE TO: [ 79, 79 ]
"enableCustomLevelDeltas": false,
"tier1LevelDelta": [ 10, 5 ],
"tier2LevelDelta": [ 15, 5 ],
"tier3LevelDelta": [ 25, 7 ],
"tier4LevelDelta": [ 35, 10 ],
"tier5LevelDelta": [ 45, 15 ],
"tier6LevelDelta": [ 55, 20 ],
"tier7LevelDelta": [ 60, 20 ],
"tier2LevelDelta": [ 10, 5 ],
"tier3LevelDelta": [ 15, 7 ],
"tier4LevelDelta": [ 20, 10 ],
"tier5LevelDelta": [ 30, 15 ],
"tier6LevelDelta": [ 40, 20 ],
"tier7LevelDelta": [ 50, 20 ],
// LevelDelta's are the lowest and highest levels that AI can spawn relative to the player's level.
// Examples:
@@ -246,12 +252,12 @@
// Default values below will always spawn scavs that are at least 1 tier below you unless you are Tier1.
"enableScavCustomLevelDeltas": false,
"tier1ScavLevelDelta": [ 10, 0 ],
"tier2ScavLevelDelta": [ 20, -10 ],
"tier3ScavLevelDelta": [ 30, -10 ],
"tier4ScavLevelDelta": [ 40, -10 ],
"tier5ScavLevelDelta": [ 50, -10 ],
"tier6ScavLevelDelta": [ 60, -10 ],
"tier7ScavLevelDelta": [ 70, -10 ],
"tier2ScavLevelDelta": [ 10, -10 ],
"tier3ScavLevelDelta": [ 15, -10 ],
"tier4ScavLevelDelta": [ 20, -10 ],
"tier5ScavLevelDelta": [ 30, -10 ],
"tier6ScavLevelDelta": [ 40, -10 ],
"tier7ScavLevelDelta": [ 50, -10 ],
// Enable/disable debug logging
"enableDebugLog": true
@@ -1,6 +1,6 @@
{
"name": "Acids Progressive Bot System",
"version": "1.4.0-alpha",
"version": "1.4.0",
"sptVersion": "~3.10",
"loadBefore": [],
"loadAfter": [
@@ -618,13 +618,11 @@
"grenades": {
"weights": {
"0": 70,
"1": 30,
"2": 0,
"3": 0,
"4": 0
"1": 30
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 3,
"619256e5f8af2c1a4e1f5d92": 3,
@@ -1319,13 +1317,11 @@
"grenades": {
"weights": {
"0": 70,
"1": 30,
"2": 0,
"3": 0,
"4": 0
"1": 30
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 3,
"619256e5f8af2c1a4e1f5d92": 3,
@@ -1988,14 +1984,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10282,7 +10284,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10576,7 +10578,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10629,7 +10631,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11822,7 +11824,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11975,7 +11977,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13735,7 +13737,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13786,7 +13788,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13837,7 +13839,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13888,7 +13890,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13939,7 +13941,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13990,7 +13992,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14041,7 +14043,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14092,7 +14094,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14143,7 +14145,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14194,7 +14196,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -619,9 +619,7 @@
"weights": {
"0": 60,
"1": 35,
"2": 5,
"3": 0,
"4": 0
"2": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1271,8 +1269,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1295,8 +1293,8 @@
},
"drink": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"5448fee04bdc2dbc018b4567": 5,
@@ -1325,9 +1323,7 @@
"weights": {
"0": 60,
"1": 35,
"2": 5,
"3": 0,
"4": 0
"2": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1998,14 +1994,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10292,7 +10294,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10586,7 +10588,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10639,7 +10641,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11832,7 +11834,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11985,7 +11987,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13745,7 +13747,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13796,7 +13798,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13847,7 +13849,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13898,7 +13900,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13949,7 +13951,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14000,7 +14002,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14051,7 +14053,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14102,7 +14104,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14153,7 +14155,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14204,7 +14206,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -566,8 +566,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -618,11 +618,10 @@
},
"grenades": {
"weights": {
"0": 35,
"0": 45,
"1": 35,
"2": 15,
"3": 5,
"4": 0
"3": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 10,
@@ -1277,8 +1276,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1329,11 +1328,10 @@
},
"grenades": {
"weights": {
"0": 35,
"0": 45,
"1": 35,
"2": 15,
"3": 5,
"4": 0
"3": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 10,
@@ -2008,14 +2006,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10302,7 +10306,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10596,7 +10600,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10649,7 +10653,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11842,7 +11846,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11995,7 +11999,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13755,7 +13759,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13806,7 +13810,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13857,7 +13861,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13908,7 +13912,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13959,7 +13963,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14010,7 +14014,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14061,7 +14065,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14112,7 +14116,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14163,7 +14167,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14214,7 +14218,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -10569,8 +10569,7 @@
"mod_stock": [
"5d25d0ac8abbc3054f3e61f7",
"5bfeb32b0db834001a6694d9",
"5cdeac22d7f00c000f26168f",
"5cf13123d7f00c1085616a50"
"5cdeac22d7f00c000f26168f"
]
},
"5bfea7ad0db834001c38f1ee": {
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -609,7 +609,7 @@
},
"grenades": {
"weights": {
"0": 25,
"0": 35,
"1": 25,
"2": 25,
"3": 10,
@@ -625,8 +625,7 @@
"618a431df1eb8e24b8741deb": 1,
"5a0c27731526d80618476ac4": 1,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 1
"617aa4dd8166f034d57de9c5": 1
}
},
"healing": {
@@ -1272,8 +1271,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1316,7 +1315,7 @@
},
"grenades": {
"weights": {
"0": 25,
"0": 35,
"1": 25,
"2": 25,
"3": 10,
@@ -1332,8 +1331,7 @@
"618a431df1eb8e24b8741deb": 1,
"5a0c27731526d80618476ac4": 1,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 1
"617aa4dd8166f034d57de9c5": 1
}
},
"healing": {
@@ -2000,14 +1998,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10294,7 +10298,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10588,7 +10592,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10641,7 +10645,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11834,7 +11838,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11987,7 +11991,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13747,7 +13751,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13798,7 +13802,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13849,7 +13853,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13900,7 +13904,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13951,7 +13955,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14002,7 +14006,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14053,7 +14057,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14104,7 +14108,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14155,7 +14159,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14206,7 +14210,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,10 +602,10 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 15,
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,10 +1302,10 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 15,
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10280,7 +10286,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10574,7 +10580,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10627,7 +10633,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11820,7 +11826,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11973,7 +11979,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13733,7 +13739,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13784,7 +13790,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13835,7 +13841,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13886,7 +13892,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13937,7 +13943,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13988,7 +13994,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14039,7 +14045,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14090,7 +14096,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14141,7 +14147,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14192,7 +14198,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,11 +602,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,11 +1302,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10280,7 +10286,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10574,7 +10580,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10627,7 +10633,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11820,7 +11826,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11973,7 +11979,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13733,7 +13739,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13784,7 +13790,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13835,7 +13841,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13886,7 +13892,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13937,7 +13943,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13988,7 +13994,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14039,7 +14045,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14090,7 +14096,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14141,7 +14147,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14192,7 +14198,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,11 +602,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,11 +1302,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10336,7 +10342,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10630,7 +10636,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10683,7 +10689,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11876,7 +11882,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -12029,7 +12035,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13789,7 +13795,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13840,7 +13846,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13891,7 +13897,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13942,7 +13948,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13993,7 +13999,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14044,7 +14050,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14095,7 +14101,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14146,7 +14152,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14197,7 +14203,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14248,7 +14254,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -47,7 +47,7 @@ export class BotConfigs
"543be5cb4bdc2deb348b4568": 2,
"5485a8684bdc2da71d8b4567": 2,
"5d650c3e815116009f6201d2": 2,
"543be6564bdc2df4348b4568": 1
"543be6564bdc2df4348b4568": 4
}
constructor(
@@ -497,7 +497,7 @@ export class BotConfigs
private removeScavLoot(): void
{
this.botConfig.disableLootOnBotTypes.push("assault", "marksman");
this.botConfig.disableLootOnBotTypes.push("assault", "marksman", "cursedassault", "assaultgroup", "crazyassaultevent");
}
private setIdenticalScavWeights(): void
@@ -41,7 +41,7 @@ import { ModInformation } from "../Globals/ModInformation";
import { APBSTester } from "../Utils/APBSTester";
import { vanillaButtpads } from "../Globals/VanillaItemLists";
import { APBSLogger } from "../Utils/APBSLogger";
import { Logging } from "../Enums/Logging";
import { RealismHelper } from "../Helpers/RealismHelper";
/** Handle profile related client events */
@injectable()
@@ -73,7 +73,8 @@ export class APBSBotEquipmentModGenerator extends BotEquipmentModGenerator
@inject("RaidInformation") protected raidInformation: RaidInformation,
@inject("ModInformation") protected modInformation: ModInformation,
@inject("APBSTester") protected apbsTester: APBSTester,
@inject("APBSLogger") protected apbsLogger: APBSLogger
@inject("APBSLogger") protected apbsLogger: APBSLogger,
@inject("RealismHelper") protected realismHelper: RealismHelper
)
{
super(logger,
@@ -111,7 +112,6 @@ export class APBSBotEquipmentModGenerator extends BotEquipmentModGenerator
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: generateModsForEquipment`);
spawnChances = settings.spawnChances;
compatibleModsPool = settings.modPool[parentTemplate._id];
actualModPool = settings.modPool;
@@ -128,6 +128,11 @@ export class APBSBotEquipmentModGenerator extends BotEquipmentModGenerator
{
if (modSlotName === "mod_equipment_000" && this.raidInformation.nightTime) continue;
if (modSlotName === "mod_equipment" && this.realismHelper.gasMasks.includes(parentTemplate._id) && this.realismHelper.realismDetected == true)
{
forceSpawn = true;
}
const itemSlotTemplate = this.getModItemSlotFromDb(modSlotName, parentTemplate);
if (!itemSlotTemplate)
{
@@ -118,7 +118,6 @@ export class APBSBotInventoryGenerator extends BotInventoryGenerator
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: generateInventory`);
this.generateAndAddWeaponsToBot(templateInventory, wornItemChances, sessionId, botInventory, botRole, isPmc, itemGenerationLimitsMinMax, botLevel);
this.botLootGenerator.generateLoot(sessionId, botJsonTemplate, isPmc, botRole, botInventory, botLevel);
@@ -152,7 +151,6 @@ export class APBSBotInventoryGenerator extends BotInventoryGenerator
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: generateEquipment`);
equipmentPool = settings.rootEquipmentPool;
randomisationDetails = settings.randomisationDetails;
wornItemChances = settings.spawnChances;
@@ -355,7 +353,18 @@ export class APBSBotInventoryGenerator extends BotInventoryGenerator
);
botInventory.items.push(...generatedWeapon.weapon);
if (this.raidInformation.isBotEnabled(botRole) && ModConfig.config.enableBotsToRollAmmoAgain)
{
this.apbsBotWeaponGenerator.apbsAddExtraMagazinesToInventory(
generatedWeapon,
itemGenerationWeights.items.magazines,
botInventory,
botRole,
botLevel
);
return;
}
this.botWeaponGenerator.addExtraMagazinesToInventory(
generatedWeapon,
itemGenerationWeights.items.magazines,
@@ -160,7 +160,6 @@ export class APBSBotLootCacheService extends BotLootCacheService
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: addLootToCache`);
realWhitelist = botJsonTemplate.generation.items;
}
@@ -91,7 +91,6 @@ export class APBSBotLootGenerator extends BotLootGenerator
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: generateLoot`);
itemCounts = botJsonTemplate.generation.items;
useOriginalLootCache = true;
}
@@ -4,7 +4,8 @@ import { DatabaseService } from "@spt/services/DatabaseService";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { APBSLogger } from "../Utils/APBSLogger";
import { BotWeaponGenerator } from "@spt/generators/BotWeaponGenerator";
import { IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IGenerationData, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { APBSTierGetter } from "../Utils/APBSTierGetter";
import { ILogger } from "@spt/models/spt/utils/ILogger";
@@ -29,6 +30,9 @@ import { APBSTester } from "../Utils/APBSTester";
import { ModInformation } from "../Globals/ModInformation";
import { Money } from "@spt/models/enums/Money";
import { APBSBotEquipmentModGenerator } from "./APBSBotEquipmentModGenerator";
import { APBSInventoryMagGen } from "../InventoryMagGen/APBSInventoryMagGen";
import { APBSIInventoryMagGen } from "../InventoryMagGen/APBSIInventoryMagGen";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
/** Handle profile related client events */
@injectable()
@@ -56,7 +60,8 @@ export class APBSBotWeaponGenerator extends BotWeaponGenerator
@inject("APBSEquipmentGetter") protected apbsEquipmentGetter: APBSEquipmentGetter,
@inject("APBSTester") protected apbsTester: APBSTester,
@inject("APBSBotEquipmentModGenerator") protected apbsBotEquipmentModGenerator: APBSBotEquipmentModGenerator,
@inject("ModInformation") protected modInformation: ModInformation
@inject("ModInformation") protected modInformation: ModInformation,
@injectAll("APBSInventoryMagGen") protected apbsInventoryMagGenComponents: APBSIInventoryMagGen[]
)
{
super(logger,
@@ -88,7 +93,6 @@ export class APBSBotWeaponGenerator extends BotWeaponGenerator
// Check if bot disabled, if it is - use SPT code
if (!this.raidInformation.isBotEnabled(botRole))
{
this.apbsLogger.log(Logging.DEBUG, `${botRole} is disabled - TRACE: generateRandomWeapon`);
const weaponTpl = this.pickWeightedWeaponTplFromPool(equipmentSlot, botTemplateInventory);
return this.generateWeaponByTpl(sessionId, weaponTpl, equipmentSlot, botTemplateInventory, weaponParentId, modChances, botRole, isPmc, botLevel);
}
@@ -329,4 +333,62 @@ export class APBSBotWeaponGenerator extends BotWeaponGenerator
weaponTemplate: weaponItemTemplate
};
}
}
public apbsAddExtraMagazinesToInventory(
generatedWeaponResult: IGenerateWeaponResult,
magWeights: IGenerationData,
inventory: PmcInventory,
botRole: string,
botLevel: number
): void
{
const weaponAndMods = generatedWeaponResult.weapon;
const weaponTemplate = generatedWeaponResult.weaponTemplate;
const magazineTpl = this.getMagazineTplFromWeaponTemplate(weaponAndMods, weaponTemplate, botRole);
const magTemplate = this.itemHelper.getItem(magazineTpl)[1];
if (!magTemplate)
{
this.logger.error(this.localisationService.getText("bot-unable_to_find_magazine_item", magazineTpl));
return;
}
const ammoTemplate = this.itemHelper.getItem(generatedWeaponResult.chosenAmmoTpl)[1];
if (!ammoTemplate)
{
this.logger.error(
this.localisationService.getText("bot-unable_to_find_ammo_item", generatedWeaponResult.chosenAmmoTpl)
);
return;
}
// Has an UBGL
if (generatedWeaponResult.chosenUbglAmmoTpl)
{
this.addUbglGrenadesToBotInventory(weaponAndMods, generatedWeaponResult, inventory);
}
const apbsInventoryMagGenModel = new APBSInventoryMagGen(
magWeights,
magTemplate,
weaponTemplate,
ammoTemplate,
inventory,
botRole,
botLevel
);
this.apbsInventoryMagGenComponents
.find((v) => v.canHandleInventoryMagGen(apbsInventoryMagGenModel))
.process(apbsInventoryMagGenModel);
// Add x stacks of bullets to SecuredContainer (bots use a magic mag packing skill to reload instantly)
this.addAmmoToSecureContainer(
this.botConfig.secureContainerAmmoStackCount,
generatedWeaponResult.chosenAmmoTpl,
ammoTemplate._props.StackMaxSize,
inventory
);
}
}
@@ -53,6 +53,8 @@ export interface Config
disableBossTierGeneration: boolean,
disableBossFollowerTierGeneration: boolean,
disableRaiderRogueTierGeneration: boolean,
enableBotsToRollAmmoAgain: boolean,
chanceToRollAmmoAgain: number,
gameVersionWeight: boolean,
standard: number,
left_behind: number,
@@ -60,54 +60,54 @@ export class TierInformation
tier: 2,
playerMinimumLevel: 11,
playerMaximumLevel: 20,
botMinLevelVariance: 15,
botMinLevelVariance: 10,
botMaxLevelVariance: 5,
scavMinLevelVariance: 15,
scavMinLevelVariance: 10,
scavMaxLevelVariance: 5
},
{
tier: 3,
playerMinimumLevel: 21,
playerMaximumLevel: 30,
botMinLevelVariance: 25,
botMinLevelVariance: 15,
botMaxLevelVariance: 7,
scavMinLevelVariance: 25,
scavMinLevelVariance: 15,
scavMaxLevelVariance: 7
},
{
tier: 4,
playerMinimumLevel: 31,
playerMaximumLevel: 40,
botMinLevelVariance: 35,
botMinLevelVariance: 20,
botMaxLevelVariance: 10,
scavMinLevelVariance: 35,
scavMinLevelVariance: 20,
scavMaxLevelVariance: 10
},
{
tier: 5,
playerMinimumLevel: 41,
playerMaximumLevel: 50,
botMinLevelVariance: 45,
botMinLevelVariance: 30,
botMaxLevelVariance: 15,
scavMinLevelVariance: 45,
scavMinLevelVariance: 30,
scavMaxLevelVariance: 15
},
{
tier: 6,
playerMinimumLevel: 51,
playerMaximumLevel: 60,
botMinLevelVariance: 55,
botMinLevelVariance: 40,
botMaxLevelVariance: 20,
scavMinLevelVariance: 55,
scavMinLevelVariance: 40,
scavMaxLevelVariance: 20
},
{
tier: 7,
playerMinimumLevel: 61,
playerMaximumLevel: 100,
botMinLevelVariance: 60,
botMinLevelVariance: 50,
botMaxLevelVariance: 20,
scavMinLevelVariance: 60,
scavMinLevelVariance: 50,
scavMaxLevelVariance: 20
}
]
@@ -3,9 +3,6 @@ export const vanillaButtpads = [
"5a0c59791526d8dba737bba7",
"5bbde409d4351e003562b036",
"5d120a28d7ad1a1c8962e295",
"606ef0812535c57a13424d20",
"606f262c6d0bd7580617bafa",
"606f263a8900dc2d9a55b68d",
"611a31ce5b7ffe001b4649d1",
"618167616ef05c2ce828f1a8",
"6516e9bc5901745209404287",
@@ -15,6 +15,8 @@ export class RealismHelper
)
{}
public realismDetected: boolean = false;
public gasMasks = [
"5b432c305acfc40019478128",
"60363c0c92ec1c31037959f5"
@@ -22,6 +24,7 @@ export class RealismHelper
public initialize():void
{
this.realismDetected = true;
this.addGasMasksToBots();
}
@@ -55,6 +55,11 @@ import { APBSTester } from "./Utils/APBSTester";
import { APBSAttachmentChecker } from "./Utils/APBSAttachmentChecker";
import { APBSBotLootCacheService } from "./ClassExtensions/APBSBotLootCacheService";
import { APBSPlayerScavGenerator } from "./ClassExtensions/APBSPlayerScavGenerator";
import { APBSExternalInventoryMagGen } from "./InventoryMagGen/APBSExternalInventoryMagGen";
import { APBSMethodHolder } from "./InventoryMagGen/APBSMethodHolder";
import { APBSBarrelInventoryMagGen } from "./InventoryMagGen/APBSBarrelInventoryMagGen";
import { APBSInternalMagazineInventoryMagGen } from "./InventoryMagGen/APBSInternalMagazineInventoryMagGen";
import { APBSUbglExternalMagGen } from "./InventoryMagGen/APBSUbglExternalMagGen";
export class InstanceManager
{
@@ -103,6 +108,8 @@ export class InstanceManager
public jsonHelper: JSONHelper;
public modConfig: ModConfig;
public apbsTester: APBSTester;
public apbsExternalInventoryMagGen: APBSExternalInventoryMagGen;
public apbsMethodHolder: APBSMethodHolder;
//#endregion
//#region accessible in or after postDBLoad
@@ -176,6 +183,22 @@ export class InstanceManager
this.jsonHelper = container.resolve<JSONHelper>("JSONHelper");
this.container.register<APBSAttachmentChecker>("APBSAttachmentChecker", APBSAttachmentChecker, { lifecycle: Lifecycle.Singleton })
this.apbsAttachmentChecker = container.resolve<APBSAttachmentChecker>("APBSAttachmentChecker");
this.container.register<APBSMethodHolder>("APBSMethodHolder", APBSMethodHolder, { lifecycle: Lifecycle.Singleton });
this.apbsMethodHolder = container.resolve<APBSMethodHolder>("APBSMethodHolder");
this.container.register<RealismHelper>("RealismHelper", { useClass: RealismHelper })
this.container.register<APBSBotWeaponGenerator>("APBSBotWeaponGenerator", APBSBotWeaponGenerator);
this.container.register<APBSBarrelInventoryMagGen>("APBSBarrelInventoryMagGen", { useClass: APBSBarrelInventoryMagGen })
this.container.register<APBSExternalInventoryMagGen>("APBSExternalInventoryMagGen", { useClass: APBSExternalInventoryMagGen })
this.container.register<APBSInternalMagazineInventoryMagGen>("APBSInternalMagazineInventoryMagGen", { useClass: APBSInternalMagazineInventoryMagGen })
this.container.register<APBSUbglExternalMagGen>("APBSUbglExternalMagGen", { useClass: APBSUbglExternalMagGen })
this.container.registerType("APBSInventoryMagGen", "APBSBarrelInventoryMagGen");
this.container.registerType("APBSInventoryMagGen", "APBSExternalInventoryMagGen");
this.container.registerType("APBSInventoryMagGen", "APBSInternalMagazineInventoryMagGen");
this.container.registerType("APBSInventoryMagGen", "APBSUbglExternalMagGen");
// Class Extension Override
this.container.register<APBSBotGenerator>("APBSBotGenerator", APBSBotGenerator);
@@ -190,8 +213,9 @@ export class InstanceManager
this.container.register("BotLootCacheService", { useToken: "APBSBotLootCacheService" });
this.container.register<APBSBotLootGenerator>("APBSBotLootGenerator", APBSBotLootGenerator);
this.container.register("BotLootGenerator", { useToken: "APBSBotLootGenerator" });
this.container.register<APBSBotWeaponGenerator>("APBSBotWeaponGenerator", APBSBotWeaponGenerator);
this.container.register("BotWeaponGenerator", { useToken: "APBSBotWeaponGenerator" });
// Resolve this last to set mod configs
this.container.register<ModConfig>("ModConfig", ModConfig, { lifecycle: Lifecycle.Singleton })
@@ -0,0 +1,51 @@
import { IInventoryMagGen } from "@spt/generators/weapongen/IInventoryMagGen";
import { InventoryMagGen } from "@spt/generators/weapongen/InventoryMagGen";
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { inject, injectable } from "tsyringe";
import { APBSIInventoryMagGen } from "./APBSIInventoryMagGen";
import { APBSInventoryMagGen } from "./APBSInventoryMagGen";
@injectable()
export class APBSBarrelInventoryMagGen implements APBSIInventoryMagGen
{
constructor(
@inject("RandomUtil") protected randomUtil: RandomUtil,
@inject("BotWeaponGeneratorHelper") protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper
)
{}
getPriority(): number
{
return 50;
}
canHandleInventoryMagGen(inventoryMagGen: APBSInventoryMagGen): boolean
{
return inventoryMagGen.getWeaponTemplate()._props.ReloadMode === "OnlyBarrel";
}
process(inventoryMagGen: APBSInventoryMagGen): void
{
// Can't be done by _props.ammoType as grenade launcher shoots grenades with ammoType of "buckshot"
let randomisedAmmoStackSize: number;
if (inventoryMagGen.getAmmoTemplate()._props.StackMaxRandom === 1)
{
// doesnt stack
randomisedAmmoStackSize = this.randomUtil.getInt(3, 6);
}
else
{
randomisedAmmoStackSize = this.randomUtil.getInt(
inventoryMagGen.getAmmoTemplate()._props.StackMinRandom,
inventoryMagGen.getAmmoTemplate()._props.StackMaxRandom
);
}
this.botWeaponGeneratorHelper.addAmmoIntoEquipmentSlots(
inventoryMagGen.getAmmoTemplate()._id,
randomisedAmmoStackSize,
inventoryMagGen.getPmcInventory()
);
}
}
@@ -0,0 +1,203 @@
import { IInventoryMagGen } from "@spt/generators/weapongen/IInventoryMagGen";
import { InventoryMagGen } from "@spt/generators/weapongen/InventoryMagGen";
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
import { ItemAddedResult } from "@spt/models/enums/ItemAddedResult";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { LocalisationService } from "@spt/services/LocalisationService";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { inject, injectable } from "tsyringe";
import { APBSIInventoryMagGen } from "./APBSIInventoryMagGen";
import { APBSInventoryMagGen } from "./APBSInventoryMagGen";
import { APBSEquipmentGetter } from "../Utils/APBSEquipmentGetter";
import { APBSTierGetter } from "../Utils/APBSTierGetter";
import { APBSMethodHolder } from "./APBSMethodHolder";
import { BaseClasses } from "@spt/models/enums/BaseClasses";
import { ModConfig } from "../Globals/ModConfig";
@injectable()
export class APBSExternalInventoryMagGen implements APBSIInventoryMagGen
{
constructor(
@inject("PrimaryLogger") protected logger: ILogger,
@inject("ItemHelper") protected itemHelper: ItemHelper,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("BotWeaponGeneratorHelper") protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper,
@inject("BotGeneratorHelper") protected botGeneratorHelper: BotGeneratorHelper,
@inject("RandomUtil") protected randomUtil: RandomUtil,
@inject("APBSEquipmentGetter") protected apbsEquipmentGetter: APBSEquipmentGetter,
@inject("APBSTierGetter") protected apbsTierGetter: APBSTierGetter,
@inject("APBSMethodHolder") protected apbsMethodHolder: APBSMethodHolder
)
{}
getPriority(): number
{
return 99;
}
canHandleInventoryMagGen(inventoryMagGen: APBSInventoryMagGen): boolean
{
if (inventoryMagGen.getWeaponTemplate()._props.ReloadMode === "OnlyBarrel") return false;
if (inventoryMagGen.getMagazineTemplate()._props.ReloadMagType === "InternalMagazine") return false;
if (inventoryMagGen.getWeaponTemplate()._parent === BaseClasses.UBGL) return false;
return true; // Fallback, if code reaches here it means no other implementation can handle this type of magazine
}
process(inventoryMagGen: APBSInventoryMagGen): void
{
// Cout of attempts to fit a magazine into bot inventory
let fitAttempts = 0;
// Magazine Db template
let magTemplate = inventoryMagGen.getMagazineTemplate();
let magazineTpl = magTemplate._id;
const weapon = inventoryMagGen.getWeaponTemplate();
const attemptedMagBlacklist: string[] = [];
const defaultMagazineTpl = this.botWeaponGeneratorHelper.getWeaponsDefaultMagazineTpl(weapon);
const randomizedMagazineCount = Number(
this.botWeaponGeneratorHelper.getRandomizedMagazineCount(inventoryMagGen.getMagCount())
);
const tierInfo = this.apbsTierGetter.getTierByLevel(inventoryMagGen.getBotLevel());
const ammoTable = this.apbsEquipmentGetter.getAmmoByBotRole(inventoryMagGen.getBotRole(), tierInfo)
for (let i = 0; i < randomizedMagazineCount; i++)
{
let selectedAmmoForMag = inventoryMagGen.getAmmoTemplate()._id;
if (ModConfig.config.enableBotsToRollAmmoAgain && this.randomUtil.getChance100(ModConfig.config.chanceToRollAmmoAgain))
{
selectedAmmoForMag = this.apbsMethodHolder.getWeightedCompatibleAmmo(ammoTable, weapon);
}
const magazineWithAmmo = this.botWeaponGeneratorHelper.createMagazineWithAmmo(
magazineTpl,
selectedAmmoForMag,
magTemplate
);
const fitsIntoInventory = this.botGeneratorHelper.addItemWithChildrenToEquipmentSlot(
[EquipmentSlots.TACTICAL_VEST, EquipmentSlots.POCKETS],
magazineWithAmmo[0]._id,
magazineTpl,
magazineWithAmmo,
inventoryMagGen.getPmcInventory()
);
if (fitsIntoInventory === ItemAddedResult.NO_CONTAINERS)
{
// No containers to fit magazines, stop trying
break;
}
// No space for magazine and we haven't reached desired magazine count
if (fitsIntoInventory === ItemAddedResult.NO_SPACE && i < randomizedMagazineCount)
{
// Prevent infinite loop by only allowing 5 attempts at fitting a magazine into inventory
if (fitAttempts > 5)
{
this.logger.debug(
`Failed ${fitAttempts} times to add magazine ${magazineTpl} to bot inventory, stopping`
);
break;
}
/* We were unable to fit at least the minimum amount of magazines,
* so we fallback to default magazine and try again.
* Temporary workaround to Killa spawning with no extra mags if he spawns with a drum mag */
if (magazineTpl === defaultMagazineTpl)
{
// We were already on default - stop here to prevent infinite looping
break;
}
// Add failed magazine tpl to blacklist
attemptedMagBlacklist.push(magazineTpl);
// Set chosen magazine tpl to the weapons default magazine tpl and try to fit into inventory next loop
magazineTpl = defaultMagazineTpl;
magTemplate = this.itemHelper.getItem(magazineTpl)[1];
if (!magTemplate)
{
this.logger.error(
this.localisationService.getText("bot-unable_to_find_default_magazine_item", magazineTpl)
);
break;
}
// Edge case - some weapons (SKS) have an internal magazine as default, choose random non-internal magazine to add to bot instead
if (magTemplate._props.ReloadMagType === "InternalMagazine")
{
const result = this.getRandomExternalMagazineForInternalMagazineGun(
inventoryMagGen.getWeaponTemplate()._id,
attemptedMagBlacklist
);
if (!result?._id)
{
this.logger.debug(
`Unable to add additional magazine into bot inventory for weapon: ${weapon._name}, attempted: ${fitAttempts} times`
);
break;
}
magazineTpl = result._id;
magTemplate = result;
fitAttempts++;
}
// Reduce loop counter by 1 to ensure we get full cout of desired magazines
i--;
}
if (fitsIntoInventory === ItemAddedResult.SUCCESS)
{
// Reset fit counter now it succeeded
fitAttempts = 0;
}
}
}
/**
* Get a random compatible external magazine for a weapon, exclude internal magazines from possible pool
* @param weaponTpl Weapon to get mag for
* @returns tpl of magazine
*/
protected getRandomExternalMagazineForInternalMagazineGun(
weaponTpl: string,
magazineBlacklist: string[]
): ITemplateItem | undefined
{
// The mag Slot data for the weapon
const magSlot = this.itemHelper.getItem(weaponTpl)[1]._props.Slots.find((x) => x._name === "mod_magazine");
if (!magSlot)
{
return undefined;
}
// All possible mags that fit into the weapon excluding blacklisted
const magazinePool = magSlot._props.filters[0].Filter.filter((x) => !magazineBlacklist.includes(x)).map(
(x) => this.itemHelper.getItem(x)[1]
);
if (!magazinePool)
{
return undefined;
}
// Non-internal magazines that fit into the weapon
const externalMagazineOnlyPool = magazinePool.filter((x) => x._props.ReloadMagType !== "InternalMagazine");
if (!externalMagazineOnlyPool || externalMagazineOnlyPool?.length === 0)
{
return undefined;
}
// Randomly chosen external magazine
return this.randomUtil.getArrayValue(externalMagazineOnlyPool);
}
}
@@ -0,0 +1,8 @@
import { APBSInventoryMagGen } from "./APBSInventoryMagGen";
export interface APBSIInventoryMagGen
{
getPriority(): number;
canHandleInventoryMagGen(inventoryMagGen: APBSInventoryMagGen): boolean;
process(inventoryMagGen: APBSInventoryMagGen): void;
}
@@ -0,0 +1,70 @@
import { IInventoryMagGen } from "@spt/generators/weapongen/IInventoryMagGen";
import { InventoryMagGen } from "@spt/generators/weapongen/InventoryMagGen";
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
import { inject, injectable } from "tsyringe";
import { APBSIInventoryMagGen } from "./APBSIInventoryMagGen";
import { APBSInventoryMagGen } from "./APBSInventoryMagGen";
import { APBSEquipmentGetter } from "../Utils/APBSEquipmentGetter";
import { APBSTierGetter } from "../Utils/APBSTierGetter";
import { APBSMethodHolder } from "./APBSMethodHolder";
import { ModConfig } from "../Globals/ModConfig";
import { RandomUtil } from "@spt/utils/RandomUtil";
@injectable()
export class APBSInternalMagazineInventoryMagGen implements APBSIInventoryMagGen
{
constructor(
@inject("BotWeaponGeneratorHelper") protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper,
@inject("RandomUtil") protected randomUtil: RandomUtil,
@inject("APBSEquipmentGetter") protected apbsEquipmentGetter: APBSEquipmentGetter,
@inject("APBSTierGetter") protected apbsTierGetter: APBSTierGetter,
@inject("APBSMethodHolder") protected apbsMethodHolder: APBSMethodHolder
)
{}
public getPriority(): number
{
return 0;
}
public canHandleInventoryMagGen(inventoryMagGen: APBSInventoryMagGen): boolean
{
return inventoryMagGen.getMagazineTemplate()._props.ReloadMagType === "InternalMagazine";
}
public process(inventoryMagGen: APBSInventoryMagGen): void
{
let bulletCount = this.botWeaponGeneratorHelper.getRandomizedBulletCount(
inventoryMagGen.getMagCount(),
inventoryMagGen.getMagazineTemplate()
);
if (ModConfig.config.enableBotsToRollAmmoAgain && this.randomUtil.getChance100(ModConfig.config.chanceToRollAmmoAgain))
{
const weapon = inventoryMagGen.getWeaponTemplate();
const tierInfo = this.apbsTierGetter.getTierByLevel(inventoryMagGen.getBotLevel());
const ammoTable = this.apbsEquipmentGetter.getAmmoByBotRole(inventoryMagGen.getBotRole(), tierInfo)
const rerolledAmmo = this.apbsMethodHolder.getWeightedCompatibleAmmo(ammoTable, weapon);
if (bulletCount > 20)
{
bulletCount = this.randomUtil.getInt(10, bulletCount);
}
this.botWeaponGeneratorHelper.addAmmoIntoEquipmentSlots(
rerolledAmmo,
bulletCount,
inventoryMagGen.getPmcInventory()
);
}
this.botWeaponGeneratorHelper.addAmmoIntoEquipmentSlots(
inventoryMagGen.getAmmoTemplate()._id,
bulletCount,
inventoryMagGen.getPmcInventory()
);
}
}
@@ -0,0 +1,52 @@
import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IGenerationData } from "@spt/models/eft/common/tables/IBotType";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
export class APBSInventoryMagGen
{
constructor(
private magCounts: IGenerationData,
private magazineTemplate: ITemplateItem,
private weaponTemplate: ITemplateItem,
private ammoTemplate: ITemplateItem,
private pmcInventory: IInventory,
private botRole: string,
private botLevel: number
)
{}
public getMagCount(): IGenerationData
{
return this.magCounts;
}
public getMagazineTemplate(): ITemplateItem
{
return this.magazineTemplate;
}
public getWeaponTemplate(): ITemplateItem
{
return this.weaponTemplate;
}
public getAmmoTemplate(): ITemplateItem
{
return this.ammoTemplate;
}
public getPmcInventory(): IInventory
{
return this.pmcInventory;
}
public getBotRole(): string
{
return this.botRole;
}
public getBotLevel(): number
{
return this.botLevel;
}
}
@@ -0,0 +1,116 @@
import { ItemHelper } from "@spt/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IGenerationData } from "@spt/models/eft/common/tables/IBotType";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { LocalisationService } from "@spt/services/LocalisationService";
import { inject, injectable } from "tsyringe";
@injectable()
export class APBSMethodHolder
{
constructor(
@inject("PrimaryLogger") protected logger: ILogger,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("WeightedRandomHelper") protected weightedRandomHelper: WeightedRandomHelper,
@inject("ItemHelper") protected itemHelper: ItemHelper
)
{}
public getWeightedCompatibleAmmo(
cartridgePool: Record<string, Record<string, number>>,
weaponTemplate: ITemplateItem
): string
{
const desiredCaliber = this.getWeaponCaliber(weaponTemplate);
const cartridgePoolForWeapon = cartridgePool[desiredCaliber];
if (!cartridgePoolForWeapon || cartridgePoolForWeapon?.length === 0)
{
this.logger.debug(
this.localisationService.getText("bot-no_caliber_data_for_weapon_falling_back_to_default", {
weaponId: weaponTemplate._id,
weaponName: weaponTemplate._name,
defaultAmmo: weaponTemplate._props.defAmmo
})
);
// Immediately returns, default ammo is guaranteed to be compatible
return weaponTemplate._props.defAmmo;
}
// Get cartridges the weapons first chamber allow
const compatibleCartridgesInTemplate = this.getCompatibleCartridgesFromWeaponTemplate(weaponTemplate);
if (!compatibleCartridgesInTemplate)
{
// No chamber data found in weapon, send default
return weaponTemplate._props.defAmmo;
}
// Inner join the weapons allowed + passed in cartridge pool to get compatible cartridges
const compatibleCartridges = Object.keys(cartridgePoolForWeapon)
.filter((cartridge) => compatibleCartridgesInTemplate.includes(cartridge))
.reduce((acc, key) => ({ ...acc, [key]: cartridgePoolForWeapon[key] }), {});
if (!compatibleCartridges)
{
// No compatible cartridges, use default
return weaponTemplate._props.defAmmo;
}
return this.weightedRandomHelper.getWeightedValue<string>(compatibleCartridges);
}
public getWeaponCaliber(weaponTemplate: ITemplateItem): string
{
if (weaponTemplate._props.Caliber)
{
return weaponTemplate._props.Caliber;
}
if (weaponTemplate._props.ammoCaliber)
{
// 9x18pmm has a typo, should be Caliber9x18PM
return weaponTemplate._props.ammoCaliber === "Caliber9x18PMM"
? "Caliber9x18PM"
: weaponTemplate._props.ammoCaliber;
}
if (weaponTemplate._props.LinkedWeapon)
{
const ammoInChamber = this.itemHelper.getItem(
weaponTemplate._props.Chambers[0]._props.filters[0].Filter[0]
);
if (!ammoInChamber[0])
{
return;
}
return ammoInChamber[1]._props.Caliber;
}
}
public getCompatibleCartridgesFromWeaponTemplate(weaponTemplate: ITemplateItem): string[]
{
let cartridges = weaponTemplate._props.Chambers[0]?._props?.filters[0]?.Filter;
if (!cartridges)
{
// Fallback to the magazine if possible, e.g. for revolvers
// Grab the magazines template
const firstMagazine = weaponTemplate._props.Slots.find((slot) => slot._name === "mod_magazine");
const magazineTemplate = this.itemHelper.getItem(firstMagazine._props.filters[0].Filter[0]);
// Get the first slots array of cartridges
cartridges = magazineTemplate[1]._props.Slots[0]?._props.filters[0].Filter;
if (!cartridges)
{
// Normal magazines
// None found, try the cartridges array
cartridges = magazineTemplate[1]._props.Cartridges[0]?._props.filters[0].Filter;
}
}
return cartridges;
}
}
@@ -0,0 +1,68 @@
import { IInventoryMagGen } from "@spt/generators/weapongen/IInventoryMagGen";
import { InventoryMagGen } from "@spt/generators/weapongen/InventoryMagGen";
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
import { BaseClasses } from "@spt/models/enums/BaseClasses";
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
import { inject, injectable } from "tsyringe";
import { APBSIInventoryMagGen } from "./APBSIInventoryMagGen";
import { APBSInventoryMagGen } from "./APBSInventoryMagGen";
import { ModConfig } from "../Globals/ModConfig";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { APBSEquipmentGetter } from "../Utils/APBSEquipmentGetter";
import { APBSTierGetter } from "../Utils/APBSTierGetter";
import { APBSMethodHolder } from "./APBSMethodHolder";
@injectable()
export class APBSUbglExternalMagGen implements APBSIInventoryMagGen
{
constructor(
@inject("BotWeaponGeneratorHelper") protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper,
@inject("RandomUtil") protected randomUtil: RandomUtil,
@inject("APBSEquipmentGetter") protected apbsEquipmentGetter: APBSEquipmentGetter,
@inject("APBSTierGetter") protected apbsTierGetter: APBSTierGetter,
@inject("APBSMethodHolder") protected apbsMethodHolder: APBSMethodHolder
)
{}
public getPriority(): number
{
return 1;
}
public canHandleInventoryMagGen(inventoryMagGen: APBSInventoryMagGen): boolean
{
return inventoryMagGen.getWeaponTemplate()._parent === BaseClasses.UBGL;
}
public process(inventoryMagGen: APBSInventoryMagGen): void
{
const bulletCount = this.botWeaponGeneratorHelper.getRandomizedBulletCount(
inventoryMagGen.getMagCount(),
inventoryMagGen.getMagazineTemplate()
);
if (ModConfig.config.enableBotsToRollAmmoAgain && this.randomUtil.getChance100(ModConfig.config.chanceToRollAmmoAgain))
{
const weapon = inventoryMagGen.getWeaponTemplate();
const tierInfo = this.apbsTierGetter.getTierByLevel(inventoryMagGen.getBotLevel());
const ammoTable = this.apbsEquipmentGetter.getAmmoByBotRole(inventoryMagGen.getBotRole(), tierInfo)
const rerolledAmmo = this.apbsMethodHolder.getWeightedCompatibleAmmo(ammoTable, weapon);
this.botWeaponGeneratorHelper.addAmmoIntoEquipmentSlots(
rerolledAmmo,
bulletCount,
inventoryMagGen.getPmcInventory()
);
}
this.botWeaponGeneratorHelper.addAmmoIntoEquipmentSlots(
inventoryMagGen.getAmmoTemplate()._id,
bulletCount,
inventoryMagGen.getPmcInventory(),
[EquipmentSlots.TACTICAL_VEST]
);
}
}
@@ -561,12 +561,7 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 1
},
"whitelist": {}
},
@@ -618,13 +618,11 @@
"grenades": {
"weights": {
"0": 70,
"1": 30,
"2": 0,
"3": 0,
"4": 0
"1": 30
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 3,
"619256e5f8af2c1a4e1f5d92": 3,
@@ -1319,13 +1317,11 @@
"grenades": {
"weights": {
"0": 70,
"1": 30,
"2": 0,
"3": 0,
"4": 0
"1": 30
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 3,
"619256e5f8af2c1a4e1f5d92": 3,
@@ -1988,14 +1984,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10282,7 +10284,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10576,7 +10578,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10629,7 +10631,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11822,7 +11824,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11975,7 +11977,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13735,7 +13737,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13786,7 +13788,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13837,7 +13839,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13888,7 +13890,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13939,7 +13941,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13990,7 +13992,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14041,7 +14043,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14092,7 +14094,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14143,7 +14145,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14194,7 +14196,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -619,9 +619,7 @@
"weights": {
"0": 60,
"1": 35,
"2": 5,
"3": 0,
"4": 0
"2": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1271,8 +1269,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1295,8 +1293,8 @@
},
"drink": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"5448fee04bdc2dbc018b4567": 5,
@@ -1325,9 +1323,7 @@
"weights": {
"0": 60,
"1": 35,
"2": 5,
"3": 0,
"4": 0
"2": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1998,14 +1994,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10292,7 +10294,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10586,7 +10588,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10639,7 +10641,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11832,7 +11834,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11985,7 +11987,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13745,7 +13747,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13796,7 +13798,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13847,7 +13849,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13898,7 +13900,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13949,7 +13951,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14000,7 +14002,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14051,7 +14053,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14102,7 +14104,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14153,7 +14155,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14204,7 +14206,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -566,8 +566,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -618,11 +618,10 @@
},
"grenades": {
"weights": {
"0": 35,
"0": 45,
"1": 35,
"2": 15,
"3": 5,
"4": 0
"3": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 10,
@@ -1277,8 +1276,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 80,
"1": 20
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1329,11 +1328,10 @@
},
"grenades": {
"weights": {
"0": 35,
"0": 45,
"1": 35,
"2": 15,
"3": 5,
"4": 0
"3": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 10,
@@ -2008,14 +2006,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10302,7 +10306,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10596,7 +10600,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10649,7 +10653,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11842,7 +11846,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11995,7 +11999,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13755,7 +13759,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13806,7 +13810,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13857,7 +13861,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13908,7 +13912,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13959,7 +13963,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14010,7 +14014,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14061,7 +14065,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14112,7 +14116,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14163,7 +14167,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14214,7 +14218,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -10569,8 +10569,7 @@
"mod_stock": [
"5d25d0ac8abbc3054f3e61f7",
"5bfeb32b0db834001a6694d9",
"5cdeac22d7f00c000f26168f",
"5cf13123d7f00c1085616a50"
"5cdeac22d7f00c000f26168f"
]
},
"5bfea7ad0db834001c38f1ee": {
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -609,7 +609,7 @@
},
"grenades": {
"weights": {
"0": 25,
"0": 35,
"1": 25,
"2": 25,
"3": 10,
@@ -625,8 +625,7 @@
"618a431df1eb8e24b8741deb": 1,
"5a0c27731526d80618476ac4": 1,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 1
"617aa4dd8166f034d57de9c5": 1
}
},
"healing": {
@@ -1272,8 +1271,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347da92459774491567cf5": 5,
@@ -1316,7 +1315,7 @@
},
"grenades": {
"weights": {
"0": 25,
"0": 35,
"1": 25,
"2": 25,
"3": 10,
@@ -1332,8 +1331,7 @@
"618a431df1eb8e24b8741deb": 1,
"5a0c27731526d80618476ac4": 1,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 1
"617aa4dd8166f034d57de9c5": 1
}
},
"healing": {
@@ -2000,14 +1998,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10294,7 +10298,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10588,7 +10592,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10641,7 +10645,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11834,7 +11838,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11987,7 +11991,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13747,7 +13751,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13798,7 +13802,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13849,7 +13853,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13900,7 +13904,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13951,7 +13955,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14002,7 +14006,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14053,7 +14057,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14104,7 +14108,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14155,7 +14159,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14206,7 +14210,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,10 +602,10 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 15,
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,10 +1302,10 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 15,
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10280,7 +10286,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10574,7 +10580,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10627,7 +10633,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11820,7 +11826,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11973,7 +11979,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13733,7 +13739,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13784,7 +13790,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13835,7 +13841,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13886,7 +13892,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13937,7 +13943,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13988,7 +13994,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14039,7 +14045,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14090,7 +14096,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14141,7 +14147,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14192,7 +14198,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,11 +602,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,11 +1302,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10280,7 +10286,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10574,7 +10580,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10627,7 +10633,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11820,7 +11826,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -11973,7 +11979,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13733,7 +13739,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13784,7 +13790,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13835,7 +13841,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13886,7 +13892,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13937,7 +13943,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13988,7 +13994,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14039,7 +14045,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14090,7 +14096,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14141,7 +14147,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14192,7 +14198,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -565,8 +565,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -602,11 +602,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1265,8 +1265,8 @@
},
"food": {
"weights": {
"0": 50,
"1": 50
"0": 75,
"1": 25
},
"whitelist": {
"57347d692459774491567cf1": 10,
@@ -1302,11 +1302,11 @@
},
"grenades": {
"weights": {
"0": 20,
"1": 20,
"2": 20,
"3": 20,
"4": 20
"0": 30,
"1": 30,
"2": 25,
"3": 10,
"4": 5
},
"whitelist": {
"5710c24ad2720bc3458b45a3": 5,
@@ -1986,14 +1986,20 @@
},
"grenades": {
"weights": {
"0": 8,
"1": 6,
"2": 2,
"3": 1,
"4": 0,
"5": 0
"0": 50,
"1": 40,
"2": 7,
"3": 3
},
"whitelist": {}
"whitelist": {
"5710c24ad2720bc3458b45a3": 3,
"5448be9a4bdc2dfd2f8b456a": 3,
"58d3db5386f77426186285a0": 3,
"5a0c27731526d80618476ac4": 7,
"619256e5f8af2c1a4e1f5d92": 1,
"617aa4dd8166f034d57de9c5": 1,
"5a2a57cfc4a2826c6e06d44a": 7
}
},
"healing": {
"weights": {
@@ -10336,7 +10342,7 @@
"mod_muzzle": 50,
"mod_muzzle_000": 100,
"mod_muzzle_001": 100,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10630,7 +10636,7 @@
"mod_muzzle": 78,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -10683,7 +10689,7 @@
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip": 100,
"mod_pistolgrip_000": 0,
"mod_reciever": 0,
"mod_scope": 100,
@@ -11876,7 +11882,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -12029,7 +12035,7 @@
"mod_muzzle": 93,
"mod_muzzle_000": 0,
"mod_muzzle_001": 0,
"mod_pistol_grip": 0,
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 0,
"mod_pistolgrip": 0,
"mod_pistolgrip_000": 0,
@@ -13789,7 +13795,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13840,7 +13846,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13891,7 +13897,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13942,7 +13948,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -13993,7 +13999,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14044,7 +14050,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14095,7 +14101,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14146,7 +14152,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14197,7 +14203,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,
@@ -14248,7 +14254,7 @@
"mod_pistol_grip": 100,
"mod_pistol_grip_akms": 50,
"mod_pistolgrip": 50,
"mod_pistolgrip_000": 50,
"mod_pistolgrip_000": 100,
"mod_reciever": 100,
"mod_scope": 88,
"mod_scope_000": 100,