Merge branch 'develop'

This commit is contained in:
Refringe
2025-05-01 09:46:20 -04:00
466 changed files with 159999 additions and 129003 deletions
+4 -1
View File
@@ -13,7 +13,10 @@ indent_size = 4
trim_trailing_whitespace = true
[*.json]
ij_formatter_enabled = false
ij_formatter_enabled = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# C# files
[*.cs]
+25
View File
@@ -0,0 +1,25 @@
# This workflow prevents pull requests from targeting the 'main' branch.
name: Prevent PRs Targeting Main
on:
pull_request:
types:
- opened
- reopened
- synchronize
- edited
jobs:
check_base_branch:
name: Check Target Branch
runs-on: ubuntu-latest
steps:
- name: Target Branch Check
if: github.event.pull_request.base.ref == 'main'
run: |
echo "::error::Pull requests targeting the 'main' branch are not allowed."
echo "Please change the target branch of this PR to 'develop' or a feature branch."
exit 1
- name: Target branch is allowed
if: github.event.pull_request.base.ref != 'main'
run: |
echo "Target branch (${{ github.event.pull_request.base.ref }}) is allowed. We good."
exit 0
+5 -5
View File
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\Build.props" />
<Import Project="..\Build.props"/>
<PropertyGroup>
<OutputType>Exe</OutputType>
@@ -9,10 +9,10 @@
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.14.0"/>
<ProjectReference Include="..\Libraries\SPTarkov.Server.Core\SPTarkov.Server.Core.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.Server.Assets\SPTarkov.Server.Assets.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.Common\SPTarkov.Common.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.DI\SPTarkov.DI.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.Server.Core\SPTarkov.Server.Core.csproj"/>
<ProjectReference Include="..\Libraries\SPTarkov.Server.Assets\SPTarkov.Server.Assets.csproj"/>
<ProjectReference Include="..\Libraries\SPTarkov.Common\SPTarkov.Common.csproj"/>
<ProjectReference Include="..\Libraries\SPTarkov.DI\SPTarkov.DI.csproj"/>
</ItemGroup>
<ItemGroup>
+3 -3
View File
@@ -10,17 +10,17 @@ namespace Benchmarks;
[MemoryDiagnoser]
public class ClonerBenchmarks
{
private Templates? _templates;
private ICloner _fastCloner;
private ICloner _jsonCloner;
private ICloner _reflectionsCloner;
private ICloner _fastCloner;
private Templates? _templates;
[GlobalSetup]
public void Setup()
{
var jsonUtil = new JsonUtil();
var importer = new ImporterUtil(new MockLogger<ImporterUtil>(), new FileUtil(new MockLogger<FileUtil>()),
var importer = new ImporterUtil(new MockLogger<ImporterUtil>(), new FileUtil(),
jsonUtil);
var loadTask = importer.LoadRecursiveAsync<Templates>("./Assets/database/templates/");
loadTask.Wait();
+16
View File
@@ -41,6 +41,17 @@ public class MockLogger<T> : ISptLogger<T>
Console.WriteLine(data);
}
public void Log(
LogLevel level,
string data,
LogTextColor? textColor = null,
LogBackgroundColor? backgroundColor = null,
Exception? ex = null
)
{
throw new NotImplementedException();
}
public void WriteToLogFile(string body, LogLevel level = LogLevel.Info)
{
throw new NotImplementedException();
@@ -51,6 +62,11 @@ public class MockLogger<T> : ISptLogger<T>
return false;
}
public void DumpAndStop()
{
throw new NotImplementedException();
}
public void LogWithColor(
string data,
Exception? ex = null,
@@ -1,18 +1,17 @@
using Microsoft.Extensions.Primitives;
namespace SPTarkov.Common.Extensions
{
public static class HttpContextExtensions
{
public static StringValues? GetHeaderIfExists(this HttpContext context, string key)
{
context.Request.Headers.TryGetValue(key, out var value);
if (string.IsNullOrEmpty(value))
{
return null;
}
namespace SPTarkov.Common.Extensions;
return value;
public static class HttpContextExtensions
{
public static StringValues? GetHeaderIfExists(this HttpContext context, string key)
{
context.Request.Headers.TryGetValue(key, out var value);
if (string.IsNullOrEmpty(value))
{
return null;
}
return value;
}
}
@@ -5,18 +5,18 @@ namespace SPTarkov.Common.Extensions;
public static class StringExtensions
{
private static readonly Dictionary<string, Regex> RegexCache = new();
private static readonly Lock RegexCacheLock = new();
private static readonly Dictionary<string, Regex> _regexCache = new();
private static readonly Lock _regexCacheLock = new();
public static string RegexReplace(this string source, [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, string newValue)
{
Regex regex;
lock (RegexCacheLock)
lock (_regexCacheLock)
{
if (!RegexCache.TryGetValue(regexString, out regex))
if (!_regexCache.TryGetValue(regexString, out regex))
{
regex = new Regex(regexString);
RegexCache[regexString] = regex;
_regexCache[regexString] = regex;
}
}
@@ -26,12 +26,12 @@ public static class StringExtensions
public static bool RegexMatch(this string source, [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, out Match? matchedString)
{
Regex regex;
lock (RegexCacheLock)
lock (_regexCacheLock)
{
if (!RegexCache.TryGetValue(regexString, out regex))
if (!_regexCache.TryGetValue(regexString, out regex))
{
regex = new Regex(regexString);
RegexCache[regexString] = regex;
_regexCache[regexString] = regex;
}
}
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\Build.props" />
<Import Project="..\..\Build.props"/>
<PropertyGroup>
<PackageId>SPTarkov.Common</PackageId>
<Authors>Single Player Tarkov</Authors>
@@ -16,11 +16,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SemanticVersioning" Version="3.0.0" />
<PackageReference Include="SemanticVersioning" Version="3.0.0"/>
</ItemGroup>
<ItemGroup>
<None Include="..\..\LICENSE" Pack="true" Visible="false" PackagePath="" />
<None Include="..\..\LICENSE" Pack="true" Visible="false" PackagePath=""/>
</ItemGroup>
</Project>
@@ -20,8 +20,7 @@ public static class DependencyInjectionRegistrator
public static void RegisterComponents(IServiceCollection builderServices, IEnumerable<Type> types)
{
var groupedTypes = types.SelectMany(
t =>
var groupedTypes = types.SelectMany(t =>
{
var attributes = (Injectable[]) Attribute.GetCustomAttributes(t, typeof(Injectable));
var registerableType = t;
@@ -45,7 +44,7 @@ public static class DependencyInjectionRegistrator
return registerableComponents;
}
)
.GroupBy(t => t.RegistrableInterface.FullName);
.GroupBy(t => $"{t.RegistrableInterface.Namespace}.{t.RegistrableInterface.Name}");
// We get all injectable services to register them on our services
foreach (var groupedInjectables in groupedTypes)
{
@@ -74,21 +73,20 @@ public static class DependencyInjectionRegistrator
{
_allLoadedTypes ??= AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).ToList();
}
catch(ReflectionTypeLoadException ex)
catch (ReflectionTypeLoadException ex)
{
Console.WriteLine($"COULD NOT LOAD TYPE: {ex}");
}
_allConstructors ??= _allLoadedTypes.SelectMany(t => t.GetConstructors()).ToList();
var typeName = $"{valueTuple.RegistrableInterface.Namespace}.{valueTuple.RegistrableInterface.Name}";
try
{
var matchedConstructors = _allConstructors.Where(
c => c.GetParameters()
.Any(
p => p.ParameterType.IsGenericType &&
p.ParameterType.GetGenericTypeDefinition().FullName == typeName
)
var matchedConstructors = _allConstructors.Where(c => c.GetParameters()
.Any(p => p.ParameterType.IsGenericType &&
p.ParameterType.GetGenericTypeDefinition().FullName == typeName
)
);
var constructorInfos = matchedConstructors.ToList();
@@ -100,7 +98,7 @@ public static class DependencyInjectionRegistrator
foreach (var matchedConstructor in constructorInfos)
{
var constructorParams = matchedConstructor.GetParameters();
foreach (var parameterInfo in constructorParams.Where(x => IsMatchingGenericType(x,typeName)))
foreach (var parameterInfo in constructorParams.Where(x => IsMatchingGenericType(x, typeName)))
{
var parameters = parameterInfo.ParameterType.GetGenericArguments();
var typedGeneric = valueTuple.TypeToRegister.MakeGenericType(parameters);
@@ -159,10 +157,7 @@ public static class DependencyInjectionRegistrator
RegisterComponents(
builderServices,
serverLauncherAssembly.GetTypes().Where(type => Attribute.IsDefined(type, typeof(Injectable)))
);
RegisterComponents(
builderServices,
coreAssembly.GetTypes().Where(type => Attribute.IsDefined(type, typeof(Injectable)))
.Concat(coreAssembly.GetTypes().Where(type => Attribute.IsDefined(type, typeof(Injectable))))
);
}
+3 -3
View File
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\Build.props" />
<Import Project="..\..\Build.props"/>
<PropertyGroup>
<PackageId>SPTarkov.DI</PackageId>
@@ -16,11 +16,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.1"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SPTarkov.Common\SPTarkov.Common.csproj" />
<ProjectReference Include="..\SPTarkov.Common\SPTarkov.Common.csproj"/>
</ItemGroup>
<ItemGroup>
@@ -1,7 +1,7 @@
{
"sptVersion": "4.0.0",
"projectName": "SPT",
"compatibleTarkovVersion": "0.16.0.36217",
"compatibleTarkovVersion": "0.16.0.36625",
"serverName": "SPT Server",
"profileSaveIntervalSeconds": 15,
"sptFriendNickname": "SPT",
@@ -177,6 +177,7 @@
"laboratory": true,
"rezervbase": true,
"sandbox": true,
"sandbox_high": true,
"labyrinth": true
},
"containerTypesToNotRandomise": [
@@ -263,7 +263,7 @@
"min": 7
},
"pack": {
"chancePercent": 6,
"chancePercent": 0.5,
"itemCountMax": 17,
"itemCountMin": 4,
"itemTypeWhitelist": [
@@ -269,7 +269,7 @@
"CanGrenade": true,
"CanRun": true,
"DamageCoeff": 1,
"GainSightCoef": 1.2,
"GainSightCoef": 2,
"HearingSense": 2.9,
"PistolFireDistancePref": 35,
"RifleFireDistancePref": 100,
@@ -532,7 +532,6 @@
"gifter"
],
"REVENGE_FOR_SAVAGE_PLAYERS": false,
"SDIST_TO_DELIVER_INFO_WHEN_ENEMY": 10000,
"SEARCH_TARGET": true,
"SEC_TO_MORE_DIST_TO_RUN": 10,
"SHOOT_INSTEAD_DOG_FIGHT": 9,
@@ -646,7 +645,6 @@
"CHANCE_TO_CHANGE_WEAPON_WITH_HELMET": 40,
"DELAY_BEFORE_EXAMINE_MALFUNCTION": 0.5,
"DELAY_BEFORE_FIX_MALFUNCTION": 0.5,
"DITANCE_TO_OFF_AUTO_FIRE": 95,
"FAR_DIST_ENEMY": 20,
"FAR_DIST_ENEMY_SQR": 400,
"FAR_DIST_TO_CHANGE_WEAPON": 30,
@@ -794,7 +792,7 @@
"CanGrenade": true,
"CanRun": true,
"DamageCoeff": 1,
"GainSightCoef": 1.2,
"GainSightCoef": 2,
"HearingSense": 1.25,
"PistolFireDistancePref": 35,
"RifleFireDistancePref": 100,
@@ -967,8 +965,8 @@
"MAX_DISTANCE_VISIBILITY_CHANGE_SPEED_K": 0.3,
"MAX_VISION_GRASS_METERS": 0.8,
"MAX_VISION_GRASS_METERS_FLARE": 8,
"MAX_VISION_GRASS_METERS_FLARE_OPT": 0.125,
"MAX_VISION_GRASS_METERS_OPT": 0.9090909,
"MAX_VISION_GRASS_METERS_FLARE_OPT": 0.125,
"MIDDLE_DIST": 90,
"MIDDLE_DIST_CAN_SHOOT_HEAD": false,
"MIN_LOOK_AROUD_TIME": 20,
@@ -1057,7 +1055,6 @@
"gifter"
],
"REVENGE_FOR_SAVAGE_PLAYERS": false,
"SDIST_TO_DELIVER_INFO_WHEN_ENEMY": 10000,
"SEARCH_TARGET": true,
"SEC_TO_MORE_DIST_TO_RUN": 10,
"SHOOT_INSTEAD_DOG_FIGHT": 9,
@@ -1171,7 +1168,6 @@
"CHANCE_TO_CHANGE_WEAPON_WITH_HELMET": 40,
"DELAY_BEFORE_EXAMINE_MALFUNCTION": 0.5,
"DELAY_BEFORE_FIX_MALFUNCTION": 0.5,
"DITANCE_TO_OFF_AUTO_FIRE": 95,
"FAR_DIST_ENEMY": 20,
"FAR_DIST_ENEMY_SQR": 400,
"FAR_DIST_TO_CHANGE_WEAPON": 30,
@@ -1319,7 +1315,7 @@
"CanGrenade": true,
"CanRun": true,
"DamageCoeff": 1,
"GainSightCoef": 1.2,
"GainSightCoef": 2,
"HearingSense": 1.25,
"PistolFireDistancePref": 35,
"RifleFireDistancePref": 100,
@@ -1581,7 +1577,6 @@
"gifter"
],
"REVENGE_FOR_SAVAGE_PLAYERS": false,
"SDIST_TO_DELIVER_INFO_WHEN_ENEMY": 10000,
"SEARCH_TARGET": true,
"SEC_TO_MORE_DIST_TO_RUN": 10,
"SHOOT_INSTEAD_DOG_FIGHT": 0.5,
@@ -1693,7 +1688,6 @@
"CHANCE_TO_CHANGE_WEAPON_WITH_HELMET": 40,
"DELAY_BEFORE_EXAMINE_MALFUNCTION": 0.5,
"DELAY_BEFORE_FIX_MALFUNCTION": 0.5,
"DITANCE_TO_OFF_AUTO_FIRE": 95,
"FAR_DIST_ENEMY": 20,
"FAR_DIST_ENEMY_SQR": 400,
"FAR_DIST_TO_CHANGE_WEAPON": 30,
@@ -1841,7 +1835,7 @@
"CanGrenade": true,
"CanRun": true,
"DamageCoeff": 1,
"GainSightCoef": 1.2,
"GainSightCoef": 2,
"HearingSense": 2.9,
"PistolFireDistancePref": 35,
"RifleFireDistancePref": 100,
@@ -2104,7 +2098,6 @@
"gifter"
],
"REVENGE_FOR_SAVAGE_PLAYERS": false,
"SDIST_TO_DELIVER_INFO_WHEN_ENEMY": 10000,
"SEARCH_TARGET": true,
"SEC_TO_MORE_DIST_TO_RUN": 10,
"SHOOT_INSTEAD_DOG_FIGHT": 5,
@@ -2218,7 +2211,6 @@
"CHANCE_TO_CHANGE_WEAPON_WITH_HELMET": 40,
"DELAY_BEFORE_EXAMINE_MALFUNCTION": 0.5,
"DELAY_BEFORE_FIX_MALFUNCTION": 0.5,
"DITANCE_TO_OFF_AUTO_FIRE": 95,
"FAR_DIST_ENEMY": 20,
"FAR_DIST_ENEMY_SQR": 400,
"FAR_DIST_TO_CHANGE_WEAPON": 30,
@@ -2452,7 +2444,6 @@
"Borkel",
"Helldiver",
"Sanote",
"ViolentAmbush",
"Jeo",
"Dirtbikercj",
"svbtext",
@@ -2638,7 +2629,6 @@
"SilverParsnip",
"nader",
"IsaacSin",
"Kaeno",
"TheSparta",
"Akiw",
"Capital_Grin",
@@ -2740,7 +2730,6 @@
"devilwalker",
"Fatheals",
"HereticJ",
"InternalError_",
"jayy",
"JP21",
"Juniper",
@@ -2753,7 +2742,152 @@
"The_Antman",
"worshipme",
"Myksa",
"weeny"
"weeny",
"3xtremehamster",
"AcidMC",
"AcksBerg",
"adishee",
"Affengeneral",
"ALameLlama",
"alta1r",
"AmsPhysics",
"APerson",
"AT233",
"BababooeyRatatouille",
"BigTastyNugz",
"Blackleaf420",
"Blahaj Enjoyer",
"BubbaGMobile",
"cabanyakeglya",
"CausingAphid01",
"ChooChoo",
"Colobos9mm",
"Cougarinou",
"CptMoreGun",
"cybensis",
"CZPZ",
"DarkEsteves",
"DeadW0Lf",
"Delod",
"DrunkGeko",
"ehaugw",
"EpicRangeTime",
"FlatCult",
"flir",
"Flowless",
"FriedEngineer",
"Fums",
"garlicbreadtcg",
"GeneralGoon",
"GhostFenixx",
"Gipphe",
"Golani",
"GromAV",
"h3ticnade",
"Hauzman",
"Hjal",
"Hood",
"Hooshu",
"HOT DOG",
"ImBenCole",
"ItsReaperGirl",
"J0nathan550",
"JankyTheClown",
"JonBons",
"jordanbr",
"Josh Mate",
"K.V'7K'PVRIS",
"KaikiNoodles",
"KappaCam",
"knon",
"konstantin90s",
"Kopat1ch",
"kyoukopan",
"LeftHandedCat",
"LightoftheWorld",
"Lily Potter",
"Local Crew",
"madmanbeavis",
"MAGICERASER",
"Magyeong",
"MakerMacher",
"Marine",
"matsix",
"MDZZWOC",
"melonyninja",
"MiseryMachinery",
"mpstark",
"MrUlfen",
"MT_Militia",
"Murasame_chan",
"mynamealien",
"NanamiTV",
"NateDog",
"Navi",
"netVnum",
"Nicholas",
"NoNeedName",
"November75",
"OperatorD9",
"OptimusChad",
"Peepo",
"pein",
"penguingreentea",
"Pizza_rat",
"Praxideke",
"prezidento23",
"privateryan",
"Provocator",
"PulledP0rk",
"PureRussianVodka",
"Qwertyalex",
"Radzig",
"RagingBeardo",
"ragnaroks",
"Randomizzatore",
"Rising_Star",
"RivviN",
"rodentmessiah",
"rzambol",
"S3NN0M0",
"saintdeer",
"SashaSwan",
"Schrader",
"ScottieKnowz",
"Sever12",
"sgt_dogwater",
"sgtlaggy",
"Shibdib",
"Sianyde",
"Skulltag",
"Sneaky_Weasel",
"Solethia",
"stckytwl",
"sugonyak",
"Szonszczyk",
"szszss",
"Tadikas",
"TakiiiNotFound",
"techy",
"TeejayMerks",
"TexaHans",
"TheDevilsrevenge",
"Therkelsen",
"trap",
"Troike",
"turbodestroyer",
"Turok",
"UnderdomeRiot",
"Vesuvius1300",
"viniHNS",
"VioletAmbush",
"ViP3R_76",
"Vortania",
"watsy",
"WispsFlame",
"WUVGAWORE",
"YukoVR",
"ZenosBleed"
],
"generation": {
"items": {
File diff suppressed because it is too large Load Diff
@@ -23670,6 +23670,32 @@
"_parent": "676408beba9ecbb20a005306",
"_type": "Preset"
},
"67a328326e3613a197068d05": {
"_changeWeaponName": false,
"_encyclopedia": "676bf44c5539167c3603e869",
"_id": "67a328326e3613a197068d05",
"_items": [
{
"_id": "67a328326e3613a197068d08",
"_tpl": "676bf44c5539167c3603e869",
"upd": {
"Repairable": {
"Durability": 100,
"MaxDurability": 100
}
}
},
{
"_id": "67a328326e3613a197068d09",
"_tpl": "67446fdd752be02c220f27b3",
"parentId": "67a328326e3613a197068d08",
"slotId": "patron_in_weapon"
}
],
"_name": "rshg2_std",
"_parent": "67a328326e3613a197068d08",
"_type": "Preset"
},
"67c86f58179c494df00eedf6": {
"_changeWeaponName": false,
"_encyclopedia": "67ab2f28dafe3b22670c9116",
@@ -29767,6 +29793,7 @@
}
},
"PmcBotKillStandingMultiplier": 1,
"ScavEquipmentChancePercentThreshold": 5,
"paidExitStandingNumerator": 0.2
},
"FractureCausedByBulletHit": {
@@ -32426,6 +32453,7 @@
},
"LegsOverdamage": 1,
"LoadTimeSpeedProgress": 1,
"MailItemsExpirationTimeLimitWarning": 24,
"Malfunction": {
"AllowMalfForBots": false,
"AmmoFeedWt": 0.2,
@@ -34725,6 +34753,11 @@
"MaxInLobby": 0,
"MaxInRaid": 0,
"TemplateId": "67ea616a74f765cefd009fb7"
},
{
"MaxInLobby": 2,
"MaxInRaid": 2,
"TemplateId": "676bf44c5539167c3603e869"
}
],
"RunddansSettings": {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -92,31 +92,7 @@
],
"BossLocationSpawn": [
{
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"regular",
"pve"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 30,
"BossChance": 20,
"BossDifficult": "normal",
"BossEscortAmount": "2",
"BossEscortDifficult": "normal",
@@ -188,6 +164,30 @@
{
"BossChance": 15,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"regular",
"pve"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 20,
"BossDifficult": "normal",
"BossEscortAmount": "4",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
@@ -425,11 +425,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -472,11 +472,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -584,8 +584,8 @@
"VisibleDistance": 1
},
"BotMarksman": 20,
"BotMax": 19,
"BotMaxPlayer": 9,
"BotMax": 30,
"BotMaxPlayer": 0,
"BotMaxPvE": 30,
"BotMaxTimePlayer": 0,
"BotNormal": 50,
@@ -10025,6 +10025,10 @@
{
"TemplateId": "675aaab74bca0b001d02f356",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -10100,9 +10104,27 @@
"users_spawn_seconds_n2": 200,
"users_summon_seconds": 0,
"waves": [
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve",
"regular"
],
"SpawnPoints": "ZoneScavBase",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 2,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10118,14 +10140,16 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneDormitory",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 2,
"slots_max": 3,
"slots_max": 2,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -10133,21 +10157,24 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneGasStation",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 3,
"slots_max": 2,
"slots_min": 0,
"slots_max": 3,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10155,14 +10182,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 4,
"slots_max": 3,
"slots_min": 0,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10178,21 +10206,24 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneOldAZS",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 6,
"slots_max": 0,
"slots_min": 0,
"slots_max": 3,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10208,6 +10239,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10216,13 +10248,14 @@
"isPlayers": false,
"number": 8,
"slots_max": 1,
"slots_min": 0,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10238,6 +10271,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10253,6 +10287,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10268,6 +10303,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10283,6 +10319,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10298,6 +10335,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10313,6 +10351,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10328,6 +10367,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10340,24 +10380,10 @@
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"SpawnMode": [
"pve"
],
"SpawnPoints": "",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 3,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10365,7 +10391,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 3,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -227,11 +227,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -274,11 +274,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -5044,6 +5044,10 @@
{
"TemplateId": "675aaaf674a7619a5304c233",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -5100,6 +5104,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5116,6 +5121,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5132,6 +5138,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5148,6 +5155,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5164,6 +5172,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5180,6 +5189,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5196,6 +5206,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5212,6 +5223,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -350,17 +350,17 @@
]
}
],
"DistToActivate": 100,
"DistToActivatePvE": 100,
"DistToActivate": 140,
"DistToActivatePvE": 140,
"DistToPersueAxemanCoef": 0.9,
"DistToSleep": 120,
"DistToSleepPvE": 120,
"DistToSleep": 150,
"DistToSleepPvE": 150,
"FogVisibilityDistanceCoef": 1,
"FogVisibilitySpeedCoef": 1,
"GainSight": 1,
"KhorovodChance": 0,
"LockSpawnCheckRadius": 150,
"LockSpawnCheckRadiusPvE": 150,
"LockSpawnCheckRadius": 120,
"LockSpawnCheckRadiusPvE": 120,
"LockSpawnStartTime": 10,
"LockSpawnStartTimePvE": 10,
"LockSpawnStepTime": 50,
@@ -377,9 +377,9 @@
"VisibleDistance": 1
},
"BotMarksman": 0,
"BotMax": 16,
"BotMax": 20,
"BotMaxPlayer": 0,
"BotMaxPvE": 22,
"BotMaxPvE": 20,
"BotMaxTimePlayer": 0,
"BotNormal": 0,
"BotSpawnCountStep": 3,
@@ -5132,6 +5132,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5148,6 +5149,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5164,6 +5166,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5180,6 +5183,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5196,6 +5200,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5212,6 +5217,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5228,6 +5234,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -5244,6 +5251,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
@@ -253,11 +253,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -300,11 +300,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -7670,6 +7670,10 @@
{
"TemplateId": "634959225289190e5e773b3b",
"Value": 7
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -7720,6 +7724,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7735,21 +7740,24 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneCenterBot",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 1,
"slots_max": 2,
"slots_min": 0,
"slots_max": 3,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7765,6 +7773,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7780,6 +7789,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7795,6 +7805,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7810,6 +7821,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7825,6 +7837,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -7840,6 +7853,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -9,6 +9,13 @@
"AveragePlayTime": 30,
"AveragePlayerLevel": 45,
"Banners": [
{
"id": "67d1ad1b5df2d64de808e1da",
"pic": {
"path": "CONTENT/banners/banner_laboratory.jpg",
"rcid": ""
}
},
{
"id": "5805f617245977100b2c1f41",
"pic": {
@@ -489,11 +496,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -536,11 +543,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -577,8 +584,8 @@
"FogVisibilitySpeedCoef": 1,
"GainSight": 1,
"KhorovodChance": 0,
"LockSpawnCheckRadius": 150,
"LockSpawnCheckRadiusPvE": 150,
"LockSpawnCheckRadius": 120,
"LockSpawnCheckRadiusPvE": 120,
"LockSpawnStartTime": 10,
"LockSpawnStartTimePvE": 10,
"LockSpawnStepTime": 50,
@@ -588,7 +595,7 @@
"MaxExfiltrationTime": 1800,
"MinExfiltrationTime": 1200,
"NonWaveSpawnBotsLimitPerPlayer": 10,
"NonWaveSpawnBotsLimitPerPlayerPvE": 15,
"NonWaveSpawnBotsLimitPerPlayerPvE": 10,
"RainVisibilityDistanceCoef": 1,
"RainVisibilitySpeedCoef": 1,
"Scattering": 1,
@@ -773,7 +780,7 @@
"NewSpawnForPlayers": false,
"NonWaveGroupScenario": {
"Chance": 50,
"Enabled": false,
"Enabled": true,
"MaxToBeGroup": 3,
"MinToBeGroup": 2
},
@@ -5733,6 +5740,10 @@
{
"TemplateId": "5c0530ee86f774697952d952",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -74,7 +74,7 @@
"TriggerName": ""
},
{
"BossChance": 30,
"BossChance": 15,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
@@ -98,7 +98,7 @@
"TriggerName": "botEvent"
},
{
"BossChance": 30,
"BossChance": 20,
"BossDifficult": "normal",
"BossEscortAmount": "2",
"BossEscortDifficult": "normal",
@@ -555,11 +555,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -602,11 +602,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -8408,6 +8408,10 @@
{
"TemplateId": "675aaa8f7f3c962069072b27",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -8467,6 +8471,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8474,7 +8479,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 1,
"slots_max": 3,
"slots_max": 2,
"slots_min": 0,
"time_max": -1,
"time_min": -1
@@ -8482,6 +8487,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8497,6 +8503,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8512,6 +8519,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8519,7 +8527,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 3,
"slots_max": 3,
"slots_max": 2,
"slots_min": 0,
"time_max": -1,
"time_min": -1
@@ -8527,14 +8535,16 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "Zone_Rocks",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 4,
"slots_max": 0,
"slots_max": 2,
"slots_min": 0,
"time_max": -1,
"time_min": -1
@@ -8542,8 +8552,10 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "Zone_Chalet",
"WildSpawnType": "assault",
@@ -8557,6 +8569,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8572,6 +8585,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8587,14 +8601,16 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "Zone_LongRoad",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 8,
"slots_max": 0,
"slots_max": 2,
"slots_min": 0,
"time_max": -1,
"time_min": -1
@@ -8602,6 +8618,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8617,6 +8634,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8632,6 +8650,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -8647,6 +8666,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -116,7 +116,7 @@
"TriggerName": ""
},
{
"BossChance": 25,
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "2,2,2,2,3",
"BossEscortDifficult": "normal",
@@ -138,7 +138,7 @@
"TriggerName": "interactObject"
},
{
"BossChance": 25,
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "2,2,2,2,3",
"BossEscortDifficult": "normal",
@@ -160,7 +160,7 @@
"TriggerName": "interactObject"
},
{
"BossChance": 25,
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "2,2,2,2,3",
"BossEscortDifficult": "normal",
@@ -363,11 +363,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -410,11 +410,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -6672,6 +6672,10 @@
{
"TemplateId": "675aaa003107dac10006332f",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -6731,6 +6735,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6747,6 +6752,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6763,6 +6769,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6779,22 +6786,24 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
],
"SpawnPoints": "",
"SpawnPoints": "ZoneSubStorage",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 4,
"slots_max": 3,
"slots_min": 1,
"time_max": 300,
"time_min": 100
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6811,6 +6820,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6827,6 +6837,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6843,6 +6854,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6859,6 +6871,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6875,6 +6888,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6891,6 +6905,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6907,22 +6922,24 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"regular",
"pve"
],
"SpawnPoints": "",
"SpawnPoints": "ZoneBarrack",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 12,
"slots_max": 3,
"slots_min": 1,
"time_max": 1400,
"time_min": 900
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6939,6 +6956,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -6955,6 +6973,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -18,7 +18,29 @@
"Area": 0,
"AveragePlayTime": 35,
"AveragePlayerLevel": 40,
"Banners": [],
"Banners": [
{
"id": "67d1ac822b87c1a5a30e5ae8",
"pic": {
"path": "CONTENT/banners/banner_Sandbox.jpg",
"rcid": ""
}
},
{
"id": "63a9c1f5662a5b0a2c7fbde5",
"pic": {
"path": "CONTENT/banners/banner_City_final.jpg",
"rcid": ""
}
},
{
"id": "64c0acf85174e095610734a0",
"pic": {
"path": "CONTENT/banners/banner_sherpa.jpg",
"rcid": ""
}
}
],
"BossLocationSpawn": [
{
"BossChance": 30,
@@ -228,11 +250,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -275,11 +297,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 70,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -311,7 +333,7 @@
"DistToActivatePvE": 260,
"DistToSleep": 300,
"DistToSleepPvE": 300,
"FogVisibilityDistanceCoef": -1.6,
"FogVisibilityDistanceCoef": 0,
"FogVisibilitySpeedCoef": 0,
"GainSight": 1,
"LockSpawnCheckRadius": 150,
@@ -324,7 +346,7 @@
"MaxExfiltrationTime": 1500,
"MinExfiltrationTime": 1200,
"NonWaveSpawnBotsLimitPerPlayer": 10,
"NonWaveSpawnBotsLimitPerPlayerPvE": 15,
"NonWaveSpawnBotsLimitPerPlayerPvE": 10,
"RainVisibilityDistanceCoef": 0.35,
"RainVisibilitySpeedCoef": 0,
"Scattering": 1,
@@ -6517,6 +6539,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -6532,6 +6555,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -6547,6 +6571,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -6562,6 +6587,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -6577,6 +6603,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -71,30 +71,6 @@
"TriggerId": "",
"TriggerName": ""
},
{
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"pve",
"regular"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 30,
"BossDifficult": "normal",
@@ -168,6 +144,30 @@
{
"BossChance": 15,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"pve",
"regular"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 40,
"BossDifficult": "normal",
"BossEscortAmount": "3,4",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
@@ -454,11 +454,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -501,11 +501,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -9945,6 +9945,10 @@
{
"TemplateId": "675aab0d6b6addc02a08f097",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -10007,6 +10011,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10022,6 +10027,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10037,6 +10043,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10052,6 +10059,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10067,6 +10075,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10082,6 +10091,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10097,6 +10107,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10112,6 +10123,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10127,6 +10139,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10142,6 +10155,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10157,6 +10171,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10172,6 +10187,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10187,6 +10203,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10202,6 +10219,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10217,10 +10235,12 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "",
"SpawnPoints": "ZoneSmuglers",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 15,
@@ -10232,6 +10252,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10247,6 +10268,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10262,6 +10284,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10277,6 +10300,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10292,6 +10316,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10307,6 +10332,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10322,6 +10348,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10337,6 +10364,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10352,6 +10380,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10367,6 +10396,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10382,6 +10412,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"pve"
],
@@ -10397,8 +10428,10 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneSanatorium1",
"WildSpawnType": "assault",
@@ -10412,8 +10445,10 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneSanatorium2",
"WildSpawnType": "assault",
@@ -425,11 +425,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -472,11 +472,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -14161,6 +14161,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14169,14 +14170,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 4,
"slots_min": 3,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14185,14 +14187,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 1,
"slots_max": 3,
"slots_min": 2,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14201,14 +14204,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 2,
"slots_max": 4,
"slots_min": 3,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14225,6 +14229,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14233,14 +14238,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 4,
"slots_max": 4,
"slots_min": 2,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14257,6 +14263,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14265,14 +14272,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 6,
"slots_max": 3,
"slots_min": 2,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14289,6 +14297,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14305,6 +14314,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14313,7 +14323,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 9,
"slots_max": 4,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -14321,6 +14331,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14329,7 +14340,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 10,
"slots_max": 4,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -14337,6 +14348,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14345,14 +14357,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 11,
"slots_max": 3,
"slots_min": 2,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"SpawnMode": [
"regular",
"pve"
@@ -14361,8 +14374,8 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 12,
"slots_max": 4,
"slots_min": 2,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
}
@@ -100,27 +100,5 @@
"Id": "Terminal",
"_Id": "5704e5a4d2720bb45b8b4567",
"Loot": [],
"Banners": [
{
"id": "5464e0404bdc2d2a708b4567",
"pic": {
"path": "CONTENT/banners/banner_usec.jpg",
"rcid": ""
}
},
{
"id": "5c1b857086f77465f465faa4",
"pic": {
"path": "CONTENT/banners/banner_scavraider.jpg",
"rcid": ""
}
},
{
"id": "5464c4344bdc2d98698b4567",
"pic": {
"path": "CONTENT/banners/banner_hotkeys_1.png",
"rcid": "RCID_hotkeys_1"
}
}
]
}
"Banners": []
}
@@ -50,31 +50,7 @@
],
"BossLocationSpawn": [
{
"BossChance": 30,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"regular",
"pve"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 30,
"BossChance": 20,
"BossDifficult": "normal",
"BossEscortAmount": "2",
"BossEscortDifficult": "normal",
@@ -146,6 +122,30 @@
{
"BossChance": 15,
"BossDifficult": "normal",
"BossEscortAmount": "0",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
"BossName": "bossPartisan",
"BossPlayer": false,
"BossZone": "",
"Delay": 0,
"DependKarma": true,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"SpawnMode": [
"regular",
"pve"
],
"Supports": null,
"Time": -1,
"TriggerId": "PARTISAN_TRIGGER",
"TriggerName": "botEvent"
},
{
"BossChance": 20,
"BossDifficult": "normal",
"BossEscortAmount": "4",
"BossEscortDifficult": "normal",
"BossEscortType": "sectantWarrior",
@@ -337,9 +337,19 @@
"BossName": "arenaFighterEvent",
"BossPlayer": false,
"BossZone": "ZoneMiniHouse,ZoneClearVill,ZoneRoad,ZoneBrokenVill,ZoneScavBase2",
"Delay": 0,
"DependKarma": false,
"DependKarmaPVE": false,
"ForceSpawn": false,
"IgnoreMaxBots": true,
"RandomTimeSpawn": false,
"Supports": [],
"Time": -1
"SpawnMode": [
"pve"
],
"Supports": null,
"Time": -1,
"TriggerId": "",
"TriggerName": ""
}
],
"BotAssault": 80,
@@ -375,11 +385,11 @@
"BotRole": "pmcBEAR",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -422,11 +432,11 @@
"BotRole": "pmcUSEC",
"ChancedEnemies": [
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "assault"
},
{
"EnemyChance": 80,
"EnemyChance": 100,
"Role": "marksman"
},
{
@@ -790,7 +800,7 @@
"y": 0,
"z": 0
},
"Radius": 55
"Radius": 70
}
},
"CorePointId": 0,
@@ -1009,7 +1019,7 @@
"CorePointId": 0,
"DelayToCanSpawnSec": 4,
"Id": "0629d023-ea80-45cb-8376-9ea211e740f9",
"Infiltration": "Old Station",
"Infiltration": "House",
"Position": {
"x": -63.1000061,
"y": 9.763999,
@@ -1675,7 +1685,7 @@
"CorePointId": 0,
"DelayToCanSpawnSec": 4,
"Id": "191b6c5a-0fb7-40b2-95b4-3a33397eb872",
"Infiltration": "Old Station",
"Infiltration": "House",
"Position": {
"x": -54.1099854,
"y": 8.883999,
@@ -3315,7 +3325,7 @@
"CorePointId": 0,
"DelayToCanSpawnSec": 4,
"Id": "43598be9-9042-4e06-8ee9-11a3d346d570",
"Infiltration": "Old Station",
"Infiltration": "House",
"Position": {
"x": -63.6699829,
"y": 9.714,
@@ -7538,7 +7548,7 @@
"y": 0,
"z": 0
},
"Radius": 55
"Radius": 70
}
},
"CorePointId": 0,
@@ -7719,7 +7729,7 @@
"y": 0,
"z": 0
},
"Radius": 55
"Radius": 70
}
},
"CorePointId": 0,
@@ -8543,7 +8553,7 @@
"y": 0,
"z": 0
},
"Radius": 55
"Radius": 70
}
},
"CorePointId": 0,
@@ -8609,7 +8619,7 @@
"CorePointId": 0,
"DelayToCanSpawnSec": 4,
"Id": "ceb25518-5a40-42cd-b57d-076d40d29890",
"Infiltration": "Old Station",
"Infiltration": "House",
"Position": {
"x": -60.97,
"y": 9.24399948,
@@ -9033,7 +9043,7 @@
"CorePointId": 0,
"DelayToCanSpawnSec": 4,
"Id": "da22cead-d753-44c4-b44e-131a3d9690b7",
"Infiltration": "Old Station",
"Infiltration": "House",
"Position": {
"x": -59.6399841,
"y": 9.093999,
@@ -10400,7 +10410,7 @@
"y": 0,
"z": 0
},
"Radius": 55
"Radius": 70
}
},
"CorePointId": 0,
@@ -10735,7 +10745,7 @@
"y": 0,
"z": 0
},
"Radius": 40
"Radius": 80
}
},
"CorePointId": 7,
@@ -11183,6 +11193,10 @@
{
"TemplateId": "675aaa9a3107dac100063331",
"Value": 2
},
{
"TemplateId": "676bf44c5539167c3603e869",
"Value": 0
}
],
"sav_summon_seconds": 60,
@@ -11254,6 +11268,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11262,7 +11277,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 3,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -11270,6 +11285,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11278,7 +11294,7 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 1,
"slots_max": 3,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
@@ -11286,22 +11302,25 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": true,
"OpenZones": "",
"SpawnMode": [
"pve"
"pve",
"regular"
],
"SpawnPoints": "ZoneScavBase2",
"WildSpawnType": "assault",
"isPlayers": false,
"number": 2,
"slots_max": 3,
"slots_min": 1,
"slots_max": 2,
"slots_min": 0,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11318,6 +11337,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11334,6 +11354,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11350,6 +11371,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11366,6 +11388,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11382,6 +11405,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11398,6 +11422,7 @@
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11414,6 +11439,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11430,6 +11456,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11446,6 +11473,7 @@
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11462,6 +11490,7 @@
{
"BotPreset": "easy",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11470,14 +11499,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 3,
"slots_min": 0,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "normal",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -11486,14 +11516,15 @@
"WildSpawnType": "assault",
"isPlayers": false,
"number": 0,
"slots_max": 3,
"slots_min": 0,
"slots_max": 1,
"slots_min": 1,
"time_max": -1,
"time_min": -1
},
{
"BotPreset": "hard",
"BotSide": "Savage",
"KeepZoneOnSpawn": false,
"OpenZones": "",
"SpawnMode": [
"pve"
@@ -2293,12 +2293,12 @@
"availableInGameEditions": [],
"illustrationConfig": null,
"isHidden": false,
"target": "67f6c20924d8a61dbd09dbcf",
"target": "68110661cafbcd69bd0c68d2",
"loyaltyLevel": 4,
"traderId": "5c0647fdd443bc2504c2d371",
"items": [
{
"_id": "67f6c20924d8a61dbd09dbcf",
"_id": "68110661cafbcd69bd0c68d2",
"_tpl": "674fe9a75e51f1c47c04ec23",
"upd": {
"Repairable": {
@@ -2308,87 +2308,87 @@
}
},
{
"_id": "67f6c20924d8a61dbd09dbd0",
"_id": "68110661cafbcd69bd0c68d3",
"_tpl": "674fe57721a9aa6be6045b96",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_handguard"
},
{
"_id": "67f6c20924d8a61dbd09dbd1",
"_id": "68110661cafbcd69bd0c68d4",
"_tpl": "5c1cd46f2e22164bef5cfedb",
"parentId": "67f6c20924d8a61dbd09dbd0",
"parentId": "68110661cafbcd69bd0c68d3",
"slotId": "mod_foregrip"
},
{
"_id": "67f6c20924d8a61dbd09dbd2",
"_id": "68110661cafbcd69bd0c68d5",
"_tpl": "674fe89a4472d471fb0f07d8",
"parentId": "67f6c20924d8a61dbd09dbd0",
"parentId": "68110661cafbcd69bd0c68d3",
"slotId": "mod_mount"
},
{
"_id": "67f6c20924d8a61dbd09dbd3",
"_id": "68110661cafbcd69bd0c68d6",
"_tpl": "674fe8dd362ea1f88b0e2792",
"parentId": "67f6c20924d8a61dbd09dbd2",
"parentId": "68110661cafbcd69bd0c68d5",
"slotId": "mod_sight_front"
},
{
"_id": "67f6c20924d8a61dbd09dbd4",
"_id": "68110661cafbcd69bd0c68d7",
"_tpl": "674fe8b9362ea1f88b0e278d",
"parentId": "67f6c20924d8a61dbd09dbd2",
"parentId": "68110661cafbcd69bd0c68d5",
"slotId": "mod_mount"
},
{
"_id": "67f6c20924d8a61dbd09dbd5",
"_id": "68110661cafbcd69bd0c68d8",
"_tpl": "59f9d81586f7744c7506ee62",
"parentId": "67f6c20924d8a61dbd09dbd4",
"parentId": "68110661cafbcd69bd0c68d7",
"slotId": "mod_scope"
},
{
"_id": "67f6c20924d8a61dbd09dbd6",
"_id": "68110661cafbcd69bd0c68d9",
"_tpl": "674fe8cf4472d471fb0f07df",
"parentId": "67f6c20924d8a61dbd09dbd4",
"parentId": "68110661cafbcd69bd0c68d7",
"slotId": "mod_sight_rear"
},
{
"_id": "67f6c20924d8a61dbd09dbd7",
"_id": "68110661cafbcd69bd0c68da",
"_tpl": "59fb137a86f7740adb646af1",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_muzzle"
},
{
"_id": "67f6c20924d8a61dbd09dbd8",
"_id": "68110661cafbcd69bd0c68db",
"_tpl": "6087e663132d4d12c81fd96b",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_pistol_grip"
},
{
"_id": "67f6c20924d8a61dbd09dbd9",
"_id": "68110661cafbcd69bd0c68dc",
"_tpl": "676017fe8cfeeba9f707c8d6",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_reciever"
},
{
"_id": "67f6c20924d8a61dbd09dbda",
"_id": "68110661cafbcd69bd0c68dd",
"_tpl": "5ac78eaf5acfc4001926317a",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_stock"
},
{
"_id": "67f6c20924d8a61dbd09dbdb",
"_id": "68110661cafbcd69bd0c68de",
"_tpl": "59ecc3dd86f7746dc827481c",
"parentId": "67f6c20924d8a61dbd09dbda",
"parentId": "68110661cafbcd69bd0c68dd",
"slotId": "mod_stock"
},
{
"_id": "67f6c20924d8a61dbd09dbdc",
"_id": "68110661cafbcd69bd0c68df",
"_tpl": "674fe8f6f34d761ab8020cc8",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_magazine"
},
{
"_id": "67f6c20924d8a61dbd09dbdd",
"_id": "68110661cafbcd69bd0c68e0",
"_tpl": "6130ca3fd92c473c77020dbd",
"parentId": "67f6c20924d8a61dbd09dbcf",
"parentId": "68110661cafbcd69bd0c68d2",
"slotId": "mod_charge"
}
],
@@ -4642,12 +4642,12 @@
"availableInGameEditions": [],
"illustrationConfig": null,
"isHidden": false,
"target": "67f6c20924d8a61dbd09dbde",
"target": "68110661cafbcd69bd0c68e1",
"loyaltyLevel": 4,
"traderId": "54cb50c76803fa8b248b4571",
"items": [
{
"_id": "67f6c20924d8a61dbd09dbde",
"_id": "68110661cafbcd69bd0c68e1",
"_tpl": "674fe9a75e51f1c47c04ec23",
"upd": {
"Repairable": {
@@ -4657,81 +4657,81 @@
}
},
{
"_id": "67f6c20924d8a61dbd09dbdf",
"_id": "68110661cafbcd69bd0c68e2",
"_tpl": "674fe57721a9aa6be6045b96",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_handguard"
},
{
"_id": "67f6c20924d8a61dbd09dbe0",
"_id": "68110661cafbcd69bd0c68e3",
"_tpl": "5c1bc5612e221602b5429350",
"parentId": "67f6c20924d8a61dbd09dbdf",
"parentId": "68110661cafbcd69bd0c68e2",
"slotId": "mod_foregrip"
},
{
"_id": "67f6c20924d8a61dbd09dbe1",
"_id": "68110661cafbcd69bd0c68e4",
"_tpl": "674fe89a4472d471fb0f07d8",
"parentId": "67f6c20924d8a61dbd09dbdf",
"parentId": "68110661cafbcd69bd0c68e2",
"slotId": "mod_mount"
},
{
"_id": "67f6c20924d8a61dbd09dbe2",
"_id": "68110661cafbcd69bd0c68e5",
"_tpl": "674fe8dd362ea1f88b0e2792",
"parentId": "67f6c20924d8a61dbd09dbe1",
"parentId": "68110661cafbcd69bd0c68e4",
"slotId": "mod_sight_front"
},
{
"_id": "67f6c20924d8a61dbd09dbe3",
"_id": "68110661cafbcd69bd0c68e6",
"_tpl": "674fe8b9362ea1f88b0e278d",
"parentId": "67f6c20924d8a61dbd09dbe1",
"parentId": "68110661cafbcd69bd0c68e4",
"slotId": "mod_mount"
},
{
"_id": "67f6c20924d8a61dbd09dbe4",
"_id": "68110661cafbcd69bd0c68e7",
"_tpl": "58491f3324597764bc48fa02",
"parentId": "67f6c20924d8a61dbd09dbe3",
"parentId": "68110661cafbcd69bd0c68e6",
"slotId": "mod_scope"
},
{
"_id": "67f6c20924d8a61dbd09dbe5",
"_id": "68110661cafbcd69bd0c68e8",
"_tpl": "674fe8cf4472d471fb0f07df",
"parentId": "67f6c20924d8a61dbd09dbe3",
"parentId": "68110661cafbcd69bd0c68e6",
"slotId": "mod_sight_rear"
},
{
"_id": "67f6c20924d8a61dbd09dbe6",
"_id": "68110661cafbcd69bd0c68e9",
"_tpl": "59fb137a86f7740adb646af1",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_muzzle"
},
{
"_id": "67f6c20924d8a61dbd09dbe7",
"_id": "68110661cafbcd69bd0c68ea",
"_tpl": "651580dc71a4f10aec4b6056",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_pistol_grip"
},
{
"_id": "67f6c20924d8a61dbd09dbe8",
"_id": "68110661cafbcd69bd0c68eb",
"_tpl": "676017fe8cfeeba9f707c8d6",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_reciever"
},
{
"_id": "67f6c20924d8a61dbd09dbe9",
"_id": "68110661cafbcd69bd0c68ec",
"_tpl": "5ac78eaf5acfc4001926317a",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_stock"
},
{
"_id": "67f6c20924d8a61dbd09dbea",
"_id": "68110661cafbcd69bd0c68ed",
"_tpl": "59ecc3dd86f7746dc827481c",
"parentId": "67f6c20924d8a61dbd09dbe9",
"parentId": "68110661cafbcd69bd0c68ec",
"slotId": "mod_stock"
},
{
"_id": "67f6c20924d8a61dbd09dbeb",
"_id": "68110661cafbcd69bd0c68ee",
"_tpl": "674fe8f6f34d761ab8020cc8",
"parentId": "67f6c20924d8a61dbd09dbde",
"parentId": "68110661cafbcd69bd0c68e1",
"slotId": "mod_magazine"
}
],
@@ -5524,13 +5524,13 @@
"availableInGameEditions": [],
"illustrationConfig": null,
"isHidden": false,
"target": "67f6c20924d8a61dbd09dbed",
"target": "68110661cafbcd69bd0c68f0",
"value": 1,
"isEncoded": false,
"findInRaid": true,
"items": [
{
"_id": "67f6c20924d8a61dbd09dbed",
"_id": "68110661cafbcd69bd0c68f0",
"_tpl": "67614b3ab8c060ebb204b106",
"upd": {
"SpawnedInSession": true,
@@ -5788,5 +5788,35 @@
"progressBarEnabled": false,
"side": "All",
"index": 9986
},
{
"id": "67c838a4c566b0028f0f2d07",
"imageUrl": "/files/achievement/67dad91e2af1a9900b0f06b1.png",
"assetPath": "",
"rewards": [],
"conditions": {
"availableForFinish": [
{
"id": "67c838e5bd695f000f3c8be8",
"index": 0,
"dynamicLocale": false,
"visibilityConditions": [],
"globalQuestCounterId": "",
"parentId": "",
"conditionType": "Block"
}
],
"fail": []
},
"instantComplete": false,
"showNotificationsInGame": false,
"showProgress": false,
"prefab": "",
"rarity": "Rare",
"hidden": false,
"showConditions": false,
"progressBarEnabled": false,
"side": "All",
"index": 3300
}
]
@@ -624,7 +624,7 @@
{
"Id": "5696686a4bdc2da3298b456a",
"ParentId": "5b5f78b786f77447ed5636af",
"Price": 125
"Price": 122
},
{
"Id": "572b7adb24597762ae139821",
@@ -4059,7 +4059,7 @@
{
"Id": "59faff1d86f7746c51718c9c",
"ParentId": "5b47574386f77428ca22b2f1",
"Price": 1072442
"Price": 1279290
},
{
"Id": "5aa66a9be5b5b0214e506e89",
@@ -21540,6 +21540,36 @@
"Id": "67cad3226bf74131800752b7",
"ParentId": "5b47574386f77428ca22b2f4",
"Price": 0
},
{
"Id": "676bf44c5539167c3603e869",
"ParentId": "5b5f79eb86f77447ed5636b7",
"Price": 42500
},
{
"Id": "67b49e7335dec48e3e05e057",
"ParentId": "5b5f7a2386f774093f2ed3c4",
"Price": 7300
},
{
"Id": "67f90180f07898267b0a4ed7",
"ParentId": "5b47574386f77428ca22b32f",
"Price": 44300
},
{
"Id": "67f924a9154a04c33b0a3c57",
"ParentId": "5b47574386f77428ca22b2f4",
"Price": 100000
},
{
"Id": "67f924adb45d94a2600a8cc8",
"ParentId": "5b47574386f77428ca22b2f4",
"Price": 100000
},
{
"Id": "67f924b1b07831a6ef0ce317",
"ParentId": "5b47574386f77428ca22b2f4",
"Price": 100000
}
]
}
File diff suppressed because it is too large Load Diff
@@ -1,18 +1,18 @@
{
"started": {},
"success": {
"676d24d1798491c5260f5def": "5ac3475486f7741d6224abd3",
"676d24ce798491c5260f5d2c": "5a68665c86f774255929b4c7",
"676d24ce798491c5260f5d32": "5a68661a86f774500f48afb0",
"676d24cf798491c5260f5d41": "6179afd0bca27a099552e040",
"676d24cf798491c5260f5d74": "6179ad56c760af5ad2053587",
"676d24ce798491c5260f5d11": "5968eb3186f7741dde183a4d",
"676d24ce798491c5260f5d02": "596760e186f7741e11214d58",
"676d24ce798491c5260f5d35": "59689ee586f7740d1570bbd5",
"676d24cf798491c5260f5d5c": "5c0d0d5086f774363760aef2",
"676d24d1798491c5260f5de0": "64f3176921045e77405d63b5",
"67e50e6d4e0adf4dec0eb284": "67a09673972c11a3f507731d",
"667eac90d135442276096594": "6672ec2a2b6f3b71be794cc5"
"6808bad7364a85cccb04b607": "596760e186f7741e11214d58",
"6808bad8364a85cccb04b634": "59689ee586f7740d1570bbd5",
"6808bad7364a85cccb04b625": "5968eb3186f7741dde183a4d",
"6808bad7364a85cccb04b619": "5a68661a86f774500f48afb0",
"6808bad8364a85cccb04b631": "5a68665c86f774255929b4c7",
"6808bada364a85cccb04b6eb": "5ac3475486f7741d6224abd3",
"6808bad8364a85cccb04b655": "5c0d0d5086f774363760aef2",
"6808bad9364a85cccb04b6ac": "6179ad56c760af5ad2053587",
"6808bad8364a85cccb04b64f": "6179afd0bca27a099552e040",
"6808bada364a85cccb04b6e5": "64f3176921045e77405d63b5",
"667eac90d135442276096594": "6672ec2a2b6f3b71be794cc5",
"6808bada364a85cccb04b700": "67a09673972c11a3f507731d"
},
"fail": {}
}
@@ -1,38 +1,38 @@
{
"started": {},
"success": {
"677536f27949f878820370a0": "5a27b87686f77460de0252a8",
"677537007949f878820374d0": "675c3582f6ddc329a90f9c6d",
"677536f27949f878820370ca": "5c0bdb5286f774166e38eed4",
"677536fd7949f8788203742b": "5c0d4c12d09282029f539173",
"677536f47949f87882037146": "5ac242ab86f77412464f68b4",
"677536f17949f87882037050": "6179b4f16e9dd54ac275e407",
"677536ee7949f87882036f97": "6179b4f16e9dd54ac275e407",
"677536f17949f8788203707a": "6179b4f16e9dd54ac275e407",
"677536f17949f8788203703c": "596b36c586f77450d6045ad2",
"677536f97949f878820372db": "596b36c586f77450d6045ad2",
"677536ef7949f87882036fc0": "5967725e86f774601a446662",
"677536fa7949f87882037392": "6179b5eabca27a099552e052",
"677536f27949f878820370b4": "596b43fb86f77457ca186186",
"677536f17949f8788203705e": "6193850f60b34236ee0483de",
"677536f07949f87882037022": "5979eee086f774311955e614",
"677536f97949f87882037300": "5a27d2af86f7744e1115b323",
"677536f77949f8788203727c": "596b455186f77457cb50eccb",
"677536f67949f878820371e6": "5b4794cb86f774598100d5d4",
"677536f17949f87882037081": "5c0bbaa886f7746941031d82",
"677536f67949f8788203722a": "5c0bbaa886f7746941031d82",
"677536fd7949f87882037428": "5c0bbaa886f7746941031d82",
"677536f77949f87882037253": "5b478ff486f7744d184ecbbf",
"677536f67949f878820371ff": "639873003693c63d86328f25",
"677536f37949f8788203710f": "64f6aafd67e11a7c6206e0d0",
"677536f77949f8788203725f": "64f5e20652fc01298e2c61e3",
"677536ff7949f8788203749c": "671a59e43d73dac1360765cc",
"677537007949f878820374b7": "671a49f77d49aea42c029b5f",
"677537037949f8788203754c": "6764174c86addd02bc033d68",
"6808bb0a364a85cccb04c746": "5967725e86f774601a446662",
"6808bb07364a85cccb04c66f": "596b36c586f77450d6045ad2",
"6808bb0e364a85cccb04c8da": "596b36c586f77450d6045ad2",
"6808bb0a364a85cccb04c770": "596b43fb86f77457ca186186",
"6808bb10364a85cccb04c955": "596b455186f77457cb50eccb",
"6808bb08364a85cccb04c6b8": "5979eee086f774311955e614",
"6808bb0a364a85cccb04c789": "5a27b87686f77460de0252a8",
"6808bb12364a85cccb04ca13": "5a27d2af86f7744e1115b323",
"6808bb0e364a85cccb04c89d": "5ac242ab86f77412464f68b4",
"6808bb10364a85cccb04c977": "5b478ff486f7744d184ecbbf",
"6808bb0e364a85cccb04c8b2": "5b4794cb86f774598100d5d4",
"6808bb0b364a85cccb04c7b6": "5c0bbaa886f7746941031d82",
"6808bb11364a85cccb04c9f9": "5c0bbaa886f7746941031d82",
"6808bb12364a85cccb04ca46": "5c0bbaa886f7746941031d82",
"6808bb0a364a85cccb04c77a": "5c0bdb5286f774166e38eed4",
"6808bb14364a85cccb04caf7": "5c0d4c12d09282029f539173",
"6808bb09364a85cccb04c731": "6179b4f16e9dd54ac275e407",
"6808bb09364a85cccb04c701": "6179b4f16e9dd54ac275e407",
"6808bb0a364a85cccb04c792": "6179b4f16e9dd54ac275e407",
"6808bb12364a85cccb04ca52": "6179b5eabca27a099552e052",
"6808bb08364a85cccb04c6a3": "6193850f60b34236ee0483de",
"6808bb10364a85cccb04c960": "639873003693c63d86328f25",
"6492e44bf4287b13040fccf6": "647710905320c660d91c15a5",
"64a8578f0e9876295f0f83ed": "649af47d717cb30e7e4b5e26",
"64a8578f0e9876295f0f83ee": "649af47d717cb30e7e4b5e26",
"64a8578f0e9876295f0f83ef": "649af47d717cb30e7e4b5e26"
"64a8578f0e9876295f0f83ef": "649af47d717cb30e7e4b5e26",
"6808bb11364a85cccb04ca0b": "64f5e20652fc01298e2c61e3",
"6808bb0c364a85cccb04c821": "64f6aafd67e11a7c6206e0d0",
"6808bb18364a85cccb04cc45": "671a49f77d49aea42c029b5f",
"6808bb17364a85cccb04cbea": "671a59e43d73dac1360765cc",
"6808bb16364a85cccb04cbcb": "675c3582f6ddc329a90f9c6d",
"6808bb16364a85cccb04cb7d": "6764174c86addd02bc033d68"
},
"fail": {}
}
@@ -1,47 +1,47 @@
{
"started": {},
"success": {
"676d24b2798491c5260f5080": "5a27b87686f77460de0252a8",
"676d24a3798491c5260f4a1c": "5a27b80086f774429a5d7e20",
"676d24ad798491c5260f4e58": "5a27bafb86f7741c73584017",
"676d24a4798491c5260f4aa5": "5a27bbf886f774333a418eeb",
"676d24ac798491c5260f4db8": "5a27bbf886f774333a418eeb",
"676d24af798491c5260f4ee5": "5a27bc3686f7741c73584026",
"676d24ac798491c5260f4de7": "5ac244c486f77413e12cf945",
"676d24a6798491c5260f4b4a": "5a27bc6986f7741c7358402b",
"676d24b2798491c5260f5089": "5a27bc6986f7741c7358402b",
"676d24a4798491c5260f4a9b": "5a27b7d686f77460d847e6a6",
"676d24a9798491c5260f4c65": "5a27b7d686f77460d847e6a6",
"676d24b1798491c5260f5019": "5a27bc8586f7741b543d8ea4",
"676d24a4798491c5260f4a84": "5edac020218d181e29451446",
"676d24ab798491c5260f4d59": "5edac020218d181e29451446",
"676d24b5798491c5260f51c2": "60e71ce009d7c801eb0c0ec6",
"676d24aa798491c5260f4cff": "5c0d4e61d09282029f53920e",
"676d24aa798491c5260f4cf6": "5c0d4e61d09282029f53920e",
"676d24a4798491c5260f4a51": "5c0d4e61d09282029f53920e",
"676d24a9798491c5260f4cd2": "5a27b75b86f7742e97191958",
"676d24a9798491c5260f4c90": "5a27b75b86f7742e97191958",
"676d24a6798491c5260f4b5e": "5a27bb3d86f77411ea361a21",
"676d24a8798491c5260f4c36": "6179b4d1bca27a099552e04e",
"676d24ab798491c5260f4daa": "6179b4d1bca27a099552e04e",
"676d24a9798491c5260f4cbe": "5a27bc1586f7741f6d40fa2f",
"676d24ab798491c5260f4da8": "639872fe8871e1272b10ccf6",
"676d24b0798491c5260f4f55": "5edac63b930f5454f51e128b",
"676d24b0798491c5260f4f94": "5a27b7a786f774579c3eb376",
"676d24af798491c5260f4ed7": "5a27b7a786f774579c3eb376",
"676d24a5798491c5260f4ade": "5a03173786f77451cb427172",
"676d24a5798491c5260f4b1f": "61958c366726521dd96828ec",
"676d24a7798491c5260f4be5": "5b477f7686f7744d1b23c4d2",
"676d24b2798491c5260f508d": "5b47825886f77468074618d3",
"676d24b4798491c5260f5176": "63967028c4a91c5cb76abd81",
"676d24b3798491c5260f5128": "63967028c4a91c5cb76abd81",
"676d24b6798491c5260f523d": "63967028c4a91c5cb76abd81",
"676d24aa798491c5260f4ceb": "6179aff8f57fb279792c60a1",
"676d24b5798491c5260f5215": "63a9b229813bba58a50c9ee5",
"676d24b0798491c5260f4f5b": "63a9b229813bba58a50c9ee5",
"676d24b6798491c5260f5271": "5c0bd01e86f7747cdd799e56",
"676d24b2798491c5260f50be": "639135f286e646067c176a87",
"676d24af798491c5260f4f0a": "639135f286e646067c176a87",
"6808babc364a85cccb04adee": "5a03173786f77451cb427172",
"6808babf364a85cccb04aecb": "5a27b75b86f7742e97191958",
"6808babf364a85cccb04aee6": "5a27b75b86f7742e97191958",
"6808bac6364a85cccb04b19a": "5a27b7a786f774579c3eb376",
"6808bac0364a85cccb04af21": "5a27b7a786f774579c3eb376",
"6808bab7364a85cccb04ac43": "5a27b7d686f77460d847e6a6",
"6808babe364a85cccb04aea4": "5a27b7d686f77460d847e6a6",
"6808bab9364a85cccb04ace9": "5a27b80086f774429a5d7e20",
"6808bac7364a85cccb04b1f4": "5a27b87686f77460de0252a8",
"6808bac0364a85cccb04af60": "5a27bafb86f7741c73584017",
"6808bab9364a85cccb04acd5": "5a27bb3d86f77411ea361a21",
"6808baba364a85cccb04ad27": "5a27bbf886f774333a418eeb",
"6808bac2364a85cccb04b016": "5a27bbf886f774333a418eeb",
"6808babf364a85cccb04aed6": "5a27bc1586f7741f6d40fa2f",
"6808bac8364a85cccb04b259": "5a27bc3686f7741c73584026",
"6808baba364a85cccb04ad1c": "5a27bc6986f7741c7358402b",
"6808bac5364a85cccb04b12d": "5a27bc6986f7741c7358402b",
"6808bac8364a85cccb04b278": "5a27bc8586f7741b543d8ea4",
"6808bac2364a85cccb04aff0": "5ac244c486f77413e12cf945",
"6808bab9364a85cccb04acc9": "5b477f7686f7744d1b23c4d2",
"6808bac6364a85cccb04b1a9": "5b47825886f77468074618d3",
"6808bace364a85cccb04b459": "5c0bd01e86f7747cdd799e56",
"6808babe364a85cccb04aeb3": "5c0d4e61d09282029f53920e",
"6808babe364a85cccb04aea1": "5c0d4e61d09282029f53920e",
"6808babc364a85cccb04addc": "5c0d4e61d09282029f53920e",
"6808baba364a85cccb04ad5a": "5edac020218d181e29451446",
"6808bac3364a85cccb04b096": "5edac020218d181e29451446",
"6808bac8364a85cccb04b26d": "5edac63b930f5454f51e128b",
"6808bacc364a85cccb04b3d9": "60e71ce009d7c801eb0c0ec6",
"6808babe364a85cccb04ae5c": "6179aff8f57fb279792c60a1",
"6808bab9364a85cccb04ad03": "6179b4d1bca27a099552e04e",
"6808bac1364a85cccb04afbf": "6179b4d1bca27a099552e04e",
"6808bab8364a85cccb04aca8": "61958c366726521dd96828ec",
"6808bac7364a85cccb04b21e": "639135f286e646067c176a87",
"6808bac7364a85cccb04b1f9": "639135f286e646067c176a87",
"6808bacb364a85cccb04b36f": "63967028c4a91c5cb76abd81",
"6808bacb364a85cccb04b36a": "63967028c4a91c5cb76abd81",
"6808bacb364a85cccb04b36d": "63967028c4a91c5cb76abd81",
"6808bac4364a85cccb04b0c5": "639872fe8871e1272b10ccf6",
"6808baca364a85cccb04b32e": "63a9b229813bba58a50c9ee5",
"6808bac8364a85cccb04b28b": "63a9b229813bba58a50c9ee5",
"656629d07cac3c3b160e63fb": "655e427b64d09b4122018228",
"656629d07cac3c3b160e63fc": "655e427b64d09b4122018228",
"656629d07cac3c3b160e63fd": "655e427b64d09b4122018228",
@@ -1,52 +1,52 @@
{
"started": {
"677536d0b06e57fd5c0e0c19": "5ac346cf86f7741d63233a02",
"677536cdb06e57fd5c0e0b13": "5b47926a86f7747ccc057c15"
"6808baf5364a85cccb04c05a": "5ac346cf86f7741d63233a02",
"6808baf5364a85cccb04c057": "5b47926a86f7747ccc057c15"
},
"success": {
"677536e9b06e57fd5c0e1285": "6744af0969a58fceba101fed",
"677536eab06e57fd5c0e129d": "6744af0969a58fceba101fed",
"677536eab06e57fd5c0e1291": "6745cbee909d2013670a4a55",
"677536ebb06e57fd5c0e12e8": "6745cbee909d2013670a4a55",
"677536e2b06e57fd5c0e1020": "5c1128e386f7746565181106",
"677536dcb06e57fd5c0e0e3d": "5c0be13186f7746f016734aa",
"677536d1b06e57fd5c0e0c96": "639872fa9b4fb827b200d8e5",
"677536dbb06e57fd5c0e0db4": "639872fa9b4fb827b200d8e5",
"677536d7b06e57fd5c0e0d74": "5ae327c886f7745c7b3f2f3f",
"677536e8b06e57fd5c0e122b": "676529af9c90953d090882e7",
"677536d2b06e57fd5c0e0cdb": "5c139eb686f7747878361a6f",
"677536d1b06e57fd5c0e0ca8": "5f04886a3937dc337a6b8238",
"677536ccb06e57fd5c0e0b06": "5c0bde0986f77479cf22c2f8",
"677536e7b06e57fd5c0e1175": "639670029113f06a7c3b2377",
"677536e5b06e57fd5c0e10e7": "5b477f7686f7744d1b23c4d2",
"677536ddb06e57fd5c0e0e64": "63987301e11ec11ff5504036",
"677536e0b06e57fd5c0e0f96": "63987301e11ec11ff5504036",
"677536e8b06e57fd5c0e121d": "6179b3bdc7560e13d23eeb8d",
"677536cbb06e57fd5c0e0a89": "6179b3a12153c15e937d52bc",
"677536e0b06e57fd5c0e0fab": "5b47825886f77468074618d3",
"677536e5b06e57fd5c0e1108": "63967028c4a91c5cb76abd81",
"677536d2b06e57fd5c0e0ced": "64f83bcdde58fc437700d8fa",
"677536e5b06e57fd5c0e10ed": "64f83bcdde58fc437700d8fa",
"677536cab06e57fd5c0e0a17": "5b47749f86f7746c5d6a5fd4",
"677536c8b06e57fd5c0e09cc": "5b47749f86f7746c5d6a5fd4",
"677536e3b06e57fd5c0e1085": "5b47749f86f7746c5d6a5fd4",
"677536e2b06e57fd5c0e1041": "5b47749f86f7746c5d6a5fd4",
"677536e6b06e57fd5c0e114c": "63966fbeea19ac7ed845db2e",
"677536cdb06e57fd5c0e0b34": "5b477b6f86f7747290681823",
"677536e5b06e57fd5c0e10d8": "5b477b6f86f7747290681823",
"677536e4b06e57fd5c0e109d": "64f83bd983cfca080a362c82",
"677536e7b06e57fd5c0e11cc": "64f83bd983cfca080a362c82",
"677536e4b06e57fd5c0e10ae": "64f83bb69878a0569d6ecfbe",
"677536cbb06e57fd5c0e0ab0": "5ac244eb86f7741356335af1",
"677536cfb06e57fd5c0e0c08": "5ac2428686f77412450b42bf",
"677536d9b06e57fd5c0e0d9f": "5ae3267986f7742a413592fe",
"677536cdb06e57fd5c0e0b53": "5ac23c6186f7741247042bad",
"677536e0b06e57fd5c0e0f9f": "6391372c8ba6894d155e77d7",
"677536e9b06e57fd5c0e1260": "6744ab1def61d56e020b5c56",
"6808baf1364a85cccb04be85": "5ac23c6186f7741247042bad",
"6808baf6364a85cccb04c0ba": "5ac2428686f77412450b42bf",
"6808baf5364a85cccb04c045": "5ac244eb86f7741356335af1",
"6808baf7364a85cccb04c0e6": "5ae3267986f7742a413592fe",
"6808baf5364a85cccb04c06e": "5ae327c886f7745c7b3f2f3f",
"6808baed364a85cccb04bd10": "5b47749f86f7746c5d6a5fd4",
"6808baee364a85cccb04bd5b": "5b47749f86f7746c5d6a5fd4",
"6808bafe364a85cccb04c3a5": "5b47749f86f7746c5d6a5fd4",
"6808bafe364a85cccb04c3dd": "5b47749f86f7746c5d6a5fd4",
"6808baf0364a85cccb04be34": "5b477b6f86f7747290681823",
"6808bafe364a85cccb04c39a": "5b477b6f86f7747290681823",
"6808bafc364a85cccb04c304": "5b477f7686f7744d1b23c4d2",
"6808bafa364a85cccb04c1f8": "5b47825886f77468074618d3",
"6808baf4364a85cccb04c016": "5c0bde0986f77479cf22c2f8",
"6808bafa364a85cccb04c237": "5c0be13186f7746f016734aa",
"6808bafe364a85cccb04c3c2": "5c1128e386f7746565181106",
"6808baf3364a85cccb04bf87": "5c139eb686f7747878361a6f",
"6808baf5364a85cccb04c048": "5f04886a3937dc337a6b8238",
"6808baf6364a85cccb04c0a8": "6179b3a12153c15e937d52bc",
"6808bb03364a85cccb04c58c": "6179b3bdc7560e13d23eeb8d",
"6808bafc364a85cccb04c2ef": "6391372c8ba6894d155e77d7",
"6808bb00364a85cccb04c46f": "63966fbeea19ac7ed845db2e",
"6808bb00364a85cccb04c443": "639670029113f06a7c3b2377",
"6808bb01364a85cccb04c4ae": "63967028c4a91c5cb76abd81",
"6808baf2364a85cccb04bf2a": "639872fa9b4fb827b200d8e5",
"6808baef364a85cccb04bdb0": "639872fa9b4fb827b200d8e5",
"6808baf8364a85cccb04c148": "63987301e11ec11ff5504036",
"6808baf7364a85cccb04c0fb": "63987301e11ec11ff5504036",
"64a2e6f09b9ad2b93b0cab9c": "64916da7ad4e722c106f2345",
"64a2e6f09b9ad2b93b0cab9d": "64916da7ad4e722c106f2345",
"64a2e6f09b9ad2b93b0cab9e": "64916da7ad4e722c106f2345",
"64a2e6f09b9ad2b93b0cab9f": "64916da7ad4e722c106f2345"
"64a2e6f09b9ad2b93b0cab9f": "64916da7ad4e722c106f2345",
"6808baff364a85cccb04c41c": "64f83bb69878a0569d6ecfbe",
"6808baf2364a85cccb04bf25": "64f83bcdde58fc437700d8fa",
"6808bb01364a85cccb04c49c": "64f83bcdde58fc437700d8fa",
"6808baff364a85cccb04c3f2": "64f83bd983cfca080a362c82",
"6808bb05364a85cccb04c635": "64f83bd983cfca080a362c82",
"6808bb02364a85cccb04c51c": "6744ab1def61d56e020b5c56",
"6808bb03364a85cccb04c567": "6744af0969a58fceba101fed",
"6808bb03364a85cccb04c581": "6744af0969a58fceba101fed",
"6808bb04364a85cccb04c612": "6745cbee909d2013670a4a55",
"6808bb04364a85cccb04c5ff": "6745cbee909d2013670a4a55",
"6808bb04364a85cccb04c60b": "676529af9c90953d090882e7"
},
"fail": {}
}
@@ -1,28 +1,28 @@
{
"started": {},
"success": {
"67877f6cecc0f80789060001": "5ae4499a86f77449783815db",
"67877f6becc0f8078905ff08": "5ae449d986f774453a54a7e1",
"67877f6aecc0f8078905fea4": "5ae449c386f7744bde357697",
"67877f6eecc0f807890600d3": "5ae449c386f7744bde357697",
"67877f67ecc0f8078905fd5a": "60e71d23c1bfa3050473b8e6",
"67877f6cecc0f8078905ffcc": "5b478d0f86f7744d190d91b5",
"67877f68ecc0f8078905fdae": "5b478b1886f7744d1b23c57d",
"67877f6decc0f807890600a1": "63966fccac6f8f3c677b9d89",
"67877f6eecc0f80789060131": "63966fd9ea19ac7ed845db30",
"67877f6becc0f8078905ff53": "5ae4493d86f7744b8e15aa8f",
"67877f6cecc0f8078905fff5": "5ae448f286f77448d73c0131",
"67877f6cecc0f8078905ffb4": "5ae4493486f7744efa289417",
"67877f6cecc0f8078905ffe9": "639135bbc115f907b14700a6",
"67877f6cecc0f8078905ffd9": "5c10f94386f774227172c572",
"67877f6aecc0f8078905feec": "5c112d7e86f7740d6f647486",
"67877f6aecc0f8078905feb8": "5e383a6386f77465910ce1f3",
"67877f6aecc0f8078905fe88": "638fcd23dc65553116701d33",
"67877f68ecc0f8078905fda5": "608974af4b05530f55550c21",
"67877f6eecc0f80789060129": "608974af4b05530f55550c21",
"67877f6cecc0f8078905ff89": "639135a7e705511c8a4a1b78",
"67e5337781a202dc180bc022": "67a096f605d1611ed90be75a",
"67eb506040b1947a72103c2e": "5e381b0286f77420e3417a74"
"6808bab3364a85cccb04aabe": "5ae448f286f77448d73c0131",
"6808bab3364a85cccb04aa67": "5ae4493486f7744efa289417",
"6808bab2364a85cccb04aa0a": "5ae4493d86f7744b8e15aa8f",
"6808bab3364a85cccb04aacd": "5ae4499a86f77449783815db",
"6808bab0364a85cccb04a904": "5ae449c386f7744bde357697",
"6808bab4364a85cccb04ab5e": "5ae449c386f7744bde357697",
"6808bab1364a85cccb04a975": "5ae449d986f774453a54a7e1",
"6808bab1364a85cccb04a94e": "5b478b1886f7744d1b23c57d",
"6808bab3364a85cccb04aa55": "5b478d0f86f7744d190d91b5",
"6808bab3364a85cccb04aa74": "5c10f94386f774227172c572",
"6808baaf364a85cccb04a87f": "5c112d7e86f7740d6f647486",
"6808baaf364a85cccb04a890": "5e381b0286f77420e3417a74",
"680496b2f9c573e9ef0ea5a1": "5e383a6386f77465910ce1f3",
"6808baae364a85cccb04a7f2": "608974af4b05530f55550c21",
"6808bab5364a85cccb04ab84": "608974af4b05530f55550c21",
"6808baae364a85cccb04a82c": "60e71d23c1bfa3050473b8e6",
"6808bab0364a85cccb04a8f0": "638fcd23dc65553116701d33",
"6808bab2364a85cccb04aa39": "639135a7e705511c8a4a1b78",
"6808bab3364a85cccb04aaa1": "639135bbc115f907b14700a6",
"6808bab4364a85cccb04ab2e": "63966fccac6f8f3c677b9d89",
"6808bab5364a85cccb04abad": "63966fd9ea19ac7ed845db30",
"6808bab5364a85cccb04abfd": "67a096f605d1611ed90be75a"
},
"fail": {}
}
@@ -1,36 +1,36 @@
{
"started": {},
"success": {
"677536b7b06e57fd5c0e0505": "597a0b2986f77426d66c0633",
"677536b6b06e57fd5c0e0490": "5ae3280386f7742a41359364",
"677536b7b06e57fd5c0e04f0": "5bc479e586f7747f376c7da3",
"677536b8b06e57fd5c0e0515": "5bc47dbf86f7741ee74e93b9",
"677536b6b06e57fd5c0e04c8": "5bc47dbf86f7741ee74e93b9",
"677536b8b06e57fd5c0e0520": "5bc480a686f7741af0342e29",
"677536b8b06e57fd5c0e051c": "5bc480a686f7741af0342e29",
"677536b7b06e57fd5c0e04f9": "5bc4826c86f774106d22d88b",
"677536b7b06e57fd5c0e0512": "5bc4836986f7740c0152911c",
"677536b8b06e57fd5c0e0523": "5bc4856986f77454c317bea7",
"677536b7b06e57fd5c0e04e9": "5bc4893c86f774626f5ebf3e",
"677536b7b06e57fd5c0e04ec": "5bc4893c86f774626f5ebf3e",
"677536c0b06e57fd5c0e07b3": "5bc4893c86f774626f5ebf3e",
"677536bfb06e57fd5c0e077b": "5c0bde0986f77479cf22c2f8",
"677536c1b06e57fd5c0e081b": "5d25b6be86f77444001e1b89",
"677536c2b06e57fd5c0e086c": "5d25c81b86f77443e625dd71",
"677536bab06e57fd5c0e05d4": "5d25e2ee86f77443e35162ea",
"677536bbb06e57fd5c0e064c": "5d25e2ee86f77443e35162ea",
"677536bcb06e57fd5c0e0668": "5d25e2ee86f77443e35162ea",
"677536bab06e57fd5c0e05f5": "5d25e2ee86f77443e35162ea",
"677536bcb06e57fd5c0e06ad": "5d25e45e86f77408251c4bfa",
"677536b9b06e57fd5c0e0592": "5d25e46e86f77409453bce7c",
"677536c1b06e57fd5c0e0802": "5d25e4ca86f77409dd5cdf2c",
"677536beb06e57fd5c0e0735": "600302d73b897b11364cd161",
"677536beb06e57fd5c0e0715": "63a511ea30d85e10e375b045",
"677536c0b06e57fd5c0e07e4": "63a9b36cc31b00242d28a99f",
"6808badf364a85cccb04b808": "597a0b2986f77426d66c0633",
"6808badd364a85cccb04b72a": "5ae3280386f7742a41359364",
"6808bae0364a85cccb04b862": "5bc479e586f7747f376c7da3",
"6808bae0364a85cccb04b849": "5bc47dbf86f7741ee74e93b9",
"6808badf364a85cccb04b815": "5bc47dbf86f7741ee74e93b9",
"6808badf364a85cccb04b805": "5bc480a686f7741af0342e29",
"6808badf364a85cccb04b7fe": "5bc480a686f7741af0342e29",
"6808badf364a85cccb04b824": "5bc4826c86f774106d22d88b",
"6808badf364a85cccb04b81e": "5bc4836986f7740c0152911c",
"6808badf364a85cccb04b7f4": "5bc4856986f77454c317bea7",
"6808bae0364a85cccb04b843": "5bc4893c86f774626f5ebf3e",
"6808bae0364a85cccb04b83f": "5bc4893c86f774626f5ebf3e",
"6808bae3364a85cccb04b9dc": "5bc4893c86f774626f5ebf3e",
"6808bae4364a85cccb04b9de": "5c0bde0986f77479cf22c2f8",
"6808bae8364a85cccb04bbae": "5d25b6be86f77444001e1b89",
"6808bae9364a85cccb04bbb3": "5d25c81b86f77443e625dd71",
"6808bae2364a85cccb04b943": "5d25e2ee86f77443e35162ea",
"6808bae1364a85cccb04b8ed": "5d25e2ee86f77443e35162ea",
"6808bae3364a85cccb04b9aa": "5d25e2ee86f77443e35162ea",
"6808bae3364a85cccb04b96f": "5d25e2ee86f77443e35162ea",
"6808bae5364a85cccb04ba62": "5d25e45e86f77408251c4bfa",
"6808bae2364a85cccb04b923": "5d25e46e86f77409453bce7c",
"6808bae9364a85cccb04bbbf": "5d25e4ca86f77409dd5cdf2c",
"6808bae5364a85cccb04ba52": "600302d73b897b11364cd161",
"6808bae6364a85cccb04bae4": "63a511ea30d85e10e375b045",
"6808bae7364a85cccb04bb29": "63a9b36cc31b00242d28a99f",
"6492e44bf4287b13040fcd1e": "64764abcd125ab430a14ccb5",
"677536c3b06e57fd5c0e08b2": "64e7b971f9d6fa49d6769b44",
"677536c4b06e57fd5c0e08ce": "64ee99639878a0569d6ec8c9",
"677536c4b06e57fd5c0e0902": "66b38e144f2ab7cc530c3fe7"
"6808bae7364a85cccb04bb07": "64e7b971f9d6fa49d6769b44",
"6808bae8364a85cccb04bb86": "64ee99639878a0569d6ec8c9",
"6808baeb364a85cccb04bc8a": "66b38e144f2ab7cc530c3fe7"
},
"fail": {}
}
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\Build.props" />
<Import Project="..\..\Build.props"/>
<PropertyGroup>
<PackageId>SPTarkov.Server.Assets</PackageId>
@@ -1,7 +1,7 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,10 +1,10 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Context;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Bot;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Match;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,9 +1,9 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Builds;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.PresetBuild;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,7 +1,7 @@
using SPTarkov.Server.Core.Loaders;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Loaders;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -20,7 +20,7 @@ public class BundleCallbacks(
}
/// <summary>
/// TODO: what does it do
/// TODO: what does it do
/// </summary>
/// <returns></returns>
public string GetBundle(string url, object info, string sessionID)
@@ -1,12 +1,11 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Models.Spt.Logging;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Server;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Models.Enums;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,10 +1,10 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Customization;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,11 +1,10 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Request;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Dialog;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -73,7 +72,7 @@ public class DialogueCallbacks(
/// <summary>
/// Handle client/mail/dialog/list
/// TODO: request properties are not handled
/// TODO: request properties are not handled
/// </summary>
/// <returns></returns>
public virtual string GetMailDialogList(string url, GetMailDialogListRequestData request, string sessionID)
@@ -1,11 +1,11 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Request;
using SPTarkov.Server.Core.Models.Eft.Game;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,6 +1,6 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,10 +1,10 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Health;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,3 +1,4 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
@@ -5,7 +6,6 @@ using SPTarkov.Server.Core.Models.Eft.Hideout;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -172,7 +172,7 @@ public class HideoutCallbacks(
}
/// <summary>
/// Handle client/game/profile/items/moving - hideoutCustomizationSetMannequinPose
/// Handle client/game/profile/items/moving - hideoutCustomizationSetMannequinPose
/// </summary>
/// <returns></returns>
public ItemEventRouterResponse HideoutCustomizationSetMannequinPose(PmcData pmcData, HideoutCustomizationSetMannequinPoseRequest request, string sessionId)
@@ -1,7 +1,7 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Context;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.InRaid;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,4 +1,5 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Insurance;
@@ -7,7 +8,6 @@ using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,9 +1,9 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Inventory;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Quests;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -274,7 +274,7 @@ public class InventoryCallbacks(
}
/// <summary>
/// Handle game/profile/items/moving SetFavoriteItems
/// Handle game/profile/items/moving SetFavoriteItems
/// </summary>
/// <param name="pmcData">Players PMC profile</param>
/// <param name="info"></param>
@@ -1,8 +1,8 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Routers;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,9 +1,9 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Launcher;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Launcher;
using SPTarkov.Server.Core.Models.Spt.Launcher;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Location;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,9 +1,9 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Match;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
using static SPTarkov.Server.Core.Services.MatchLocationService;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Notes;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,3 +1,4 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Common;
@@ -5,7 +6,6 @@ using SPTarkov.Server.Core.Models.Eft.Common.Request;
using SPTarkov.Server.Core.Models.Eft.Notifier;
using SPTarkov.Server.Core.Models.Utils;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -17,12 +17,11 @@ public class NotifierCallbacks(
HttpServerHelper httpServerHelper
)
{
/// <summary>
/// If we don't have anything to send, it's ok to not send anything back
/// because notification requests can be long-polling. In fact, we SHOULD wait
/// until we actually have something to send because otherwise we'd spam the client
/// and the client would abort the connection due to spam.
/// If we don't have anything to send, it's ok to not send anything back
/// because notification requests can be long-polling. In fact, we SHOULD wait
/// until we actually have something to send because otherwise we'd spam the client
/// and the client would abort the connection due to spam.
/// </summary>
public void SendNotification(string sessionID, HttpRequest req, HttpResponse resp, object data)
{
@@ -40,12 +39,11 @@ public class NotifierCallbacks(
/// <summary>
/// TODO: removed from client?
/// Handle push/notifier/get
/// Handle push/notifier/getwebsocket
/// TODO: removed from client?
/// Handle push/notifier/get
/// Handle push/notifier/getwebsocket
/// </summary>
/// <returns></returns>
public string GetNotifier(string url, IRequestData info, string sessionID)
{
return _httpResponseUtil.EmptyArrayResponse();
@@ -1,6 +1,6 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Prestige;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,3 +1,4 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Common;
@@ -5,7 +6,6 @@ using SPTarkov.Server.Core.Models.Eft.Launcher;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -18,7 +18,7 @@ public class ProfileCallbacks(
)
{
/// <summary>
/// Handle client/game/profile/create
/// Handle client/game/profile/create
/// </summary>
/// <returns></returns>
public string CreateProfile(string url, ProfileCreateRequestData info, string sessionID)
@@ -33,8 +33,8 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/list
/// Get the complete player profile (scav + pmc character)
/// Handle client/game/profile/list
/// Get the complete player profile (scav + pmc character)
/// </summary>
/// <returns></returns>
public string GetProfileData(string url, EmptyRequestData _, string sessionID)
@@ -43,9 +43,9 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/savage/regenerate
/// Handle the creation of a scav profile for player
/// Occurs post-raid and when profile first created immediately after character details are confirmed by player
/// Handle client/game/profile/savage/regenerate
/// Handle the creation of a scav profile for player
/// Occurs post-raid and when profile first created immediately after character details are confirmed by player
/// </summary>
/// <returns></returns>
public string RegenerateScav(string url, EmptyRequestData _, string sessionID)
@@ -59,7 +59,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/voice/change event
/// Handle client/game/profile/voice/change event
/// </summary>
/// <returns></returns>
public string ChangeVoice(string url, ProfileChangeVoiceRequestData info, string sessionID)
@@ -69,8 +69,8 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/nickname/change event
/// Client allows player to adjust their profile name
/// Handle client/game/profile/nickname/change event
/// Client allows player to adjust their profile name
/// </summary>
/// <returns></returns>
public string ChangeNickname(string url, ProfileChangeNicknameRequestData info, string sessionID)
@@ -92,7 +92,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/nickname/validate
/// Handle client/game/profile/nickname/validate
/// </summary>
/// <returns></returns>
public string ValidateNickname(string url, ValidateNicknameRequestData info, string sessionID)
@@ -113,7 +113,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/nickname/reserved
/// Handle client/game/profile/nickname/reserved
/// </summary>
/// <returns></returns>
public string GetReservedNickname(string url, EmptyRequestData _, string sessionID)
@@ -128,8 +128,8 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/profile/status
/// Called when creating a character when choosing a character face/voice
/// Handle client/profile/status
/// Called when creating a character when choosing a character face/voice
/// </summary>
/// <returns></returns>
public string GetProfileStatus(string url, EmptyRequestData _, string sessionID)
@@ -138,8 +138,8 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/profile/view
/// Called when viewing another players profile
/// Handle client/profile/view
/// Called when viewing another players profile
/// </summary>
/// <returns></returns>
public string GetOtherProfile(string url, GetOtherProfileRequest request, string sessionID)
@@ -148,7 +148,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/profile/settings
/// Handle client/profile/settings
/// </summary>
/// <returns></returns>
public string GetProfileSettings(string url, GetProfileSettingsRequest info, string sessionID)
@@ -157,7 +157,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle client/game/profile/search
/// Handle client/game/profile/search
/// </summary>
/// <returns></returns>
public string SearchProfiles(string url, SearchProfilesRequestData info, string sessionID)
@@ -166,7 +166,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle launcher/profile/info
/// Handle launcher/profile/info
/// </summary>
/// <returns></returns>
public string GetMiniProfile(string url, GetMiniProfileRequestData info, string sessionID)
@@ -175,7 +175,7 @@ public class ProfileCallbacks(
}
/// <summary>
/// Handle /launcher/profiles
/// Handle /launcher/profiles
/// </summary>
/// <returns></returns>
public string GetAllMiniProfiles(string url, EmptyRequestData _, string sessionID)
@@ -1,9 +1,9 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Quests;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,3 +1,4 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
@@ -7,7 +8,6 @@ using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Repair;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Trade;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,10 +1,10 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,7 +1,7 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -1,8 +1,8 @@
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
using SPTarkov.Server.Core.Models.Eft.Wishlist;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Callbacks;
@@ -0,0 +1,16 @@
namespace SPTarkov.Server.Core.Constants;
public static class BodyParts
{
public const string Head = "Head";
public const string LeftArm = "LeftArm";
public const string RightArm = "RightArm";
public const string Chest = "Chest";
public const string Stomach = "Stomach";
public const string LeftLeg = "LeftLeg";
public const string RightLeg = "RightLeg";
// quest data
public const string Legs = "Legs";
public const string Arms = "Arms";
}
@@ -1,5 +1,4 @@
using System.Collections.Concurrent;
using SPTarkov.Common.Annotations;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Models.Utils;
namespace SPTarkov.Server.Core.Context;
@@ -7,20 +6,18 @@ namespace SPTarkov.Server.Core.Context;
[Injectable(InjectionType.Singleton)]
public class ApplicationContext
{
protected const short MaxSavedValues = 10;
protected readonly ConcurrentDictionary<ContextVariableType, LinkedList<ContextVariable>> variables = new();
private const short MaxSavedValues = 10;
private static ApplicationContext? _applicationContext;
private readonly ISptLogger<ApplicationContext> _logger;
private readonly Dictionary<ContextVariableType, LinkedList<ContextVariable>> _variables = new();
private readonly Lock _lockObject = new();
/// <summary>
/// When ApplicationContext gets created by the DI container we store the singleton reference so we can provide it
/// statically for harmony patches!
/// When ApplicationContext gets created by the DI container we store the singleton reference so we can provide it
/// statically for harmony patches!
/// </summary>
public ApplicationContext
(
ISptLogger<ApplicationContext> logger
)
public ApplicationContext(ISptLogger<ApplicationContext> logger)
{
_logger = logger;
_applicationContext = this;
@@ -33,49 +30,61 @@ public class ApplicationContext
public ContextVariable? GetLatestValue(ContextVariableType type)
{
if (variables.TryGetValue(type, out var savedValues))
lock (_lockObject)
{
return savedValues.Last!.Value;
}
if (_variables.TryGetValue(type, out var savedValues))
{
return savedValues.Last!.Value;
}
return null;
return null;
}
}
public ICollection<ContextVariable> GetValues(ContextVariableType type)
{
var values = new List<ContextVariable>();
if (variables.TryGetValue(type, out var savedValues))
lock (_lockObject)
{
values.AddRange(savedValues);
}
var values = new List<ContextVariable>();
if (_variables.TryGetValue(type, out var savedValues))
{
values.AddRange(savedValues);
}
return values;
return values;
}
}
public void AddValue(ContextVariableType type, object value)
{
if (!variables.TryGetValue(type, out var savedValues))
lock (_lockObject)
{
savedValues = [];
if (!variables.TryAdd(type, savedValues))
if (!_variables.TryGetValue(type, out var savedValues))
{
_logger.Error($"Unable to add context variable type: {type}");
savedValues = [];
if (!_variables.TryAdd(type, savedValues))
{
_logger.Error($"Unable to add context variable type: {type}");
}
}
}
if (savedValues.Count >= MaxSavedValues)
{
savedValues.RemoveFirst();
}
if (savedValues.Count >= MaxSavedValues)
{
savedValues.RemoveFirst();
}
savedValues.AddLast(new ContextVariable(value, type));
savedValues.AddLast(new ContextVariable(value, type));
}
}
public void ClearValues(ContextVariableType type)
{
if (!variables.Remove(type, out _))
lock (_lockObject)
{
_logger.Error($"Unable to clear context variable type: {type}");
if (!_variables.Remove(type, out _))
{
_logger.Error($"Unable to clear context variable type: {type}");
}
}
}
}
@@ -1,9 +1,9 @@
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Common.Annotations;
namespace SPTarkov.Server.Core.Controllers;
@@ -17,7 +17,7 @@ public class AchievementController(
protected CoreConfig coreConfig = configServer.GetConfig<CoreConfig>();
/// <summary>
/// Get base achievements
/// Get base achievements
/// </summary>
/// <param name="sessionID">Session/player id</param>
/// <returns></returns>
@@ -30,7 +30,7 @@ public class AchievementController(
}
/// <summary>
/// Shows % of 'other' players who've completed each achievement
/// Shows % of 'other' players who've completed each achievement
/// </summary>
/// <param name="sessionId">Session/Player id</param>
/// <returns>CompletedAchievementsResponse</returns>
@@ -40,9 +40,11 @@ public class AchievementController(
var profiles = profileHelper.GetProfiles();
var achievements = databaseService.GetAchievements();
foreach (var achievementId in achievements.Select(achievement => achievement.Id).Where(achievementId => !string.IsNullOrEmpty(achievementId))) {
foreach (var achievementId in achievements.Select(achievement => achievement.Id).Where(achievementId => !string.IsNullOrEmpty(achievementId)))
{
var percentage = 0;
foreach (var (profileId, profile) in profiles) {
foreach (var (profileId, profile) in profiles)
{
if (coreConfig.Features.AchievementProfileIdBlacklist.Contains(profileId))
{
continue;
@@ -61,10 +63,13 @@ public class AchievementController(
percentage++;
}
percentage = (percentage / profiles.Count) * 100;
percentage = percentage / profiles.Count * 100;
stats.Add(achievementId, percentage);
}
return new CompletedAchievementsResponse{ Elements = stats };
return new CompletedAchievementsResponse
{
Elements = stats
};
}
}
@@ -1,5 +1,6 @@
using System.Diagnostics;
using System.Text.Json.Serialization;
using SPTarkov.Common.Annotations;
using SPTarkov.Server.Core.Context;
using SPTarkov.Server.Core.Generators;
using SPTarkov.Server.Core.Helpers;
@@ -15,7 +16,6 @@ using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using SPTarkov.Server.Core.Utils.Cloners;
using SPTarkov.Common.Annotations;
using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel;
namespace SPTarkov.Server.Core.Controllers;
@@ -39,15 +39,15 @@ public class BotController(
{
private readonly BotConfig _botConfig = _configServer.GetConfig<BotConfig>();
private readonly PmcConfig _pmcConfig = _configServer.GetConfig<PmcConfig>();
private static readonly Lock _botListLock = new();
/// <summary>
/// Return the number of bot load-out varieties to be generated
/// Return the number of bot load-out varieties to be generated
/// </summary>
/// <param name="type">bot Type we want the load-out gen count for</param>
/// <returns>number of bots to generate</returns>
public int GetBotPresetGenerationLimit(string type)
{
if (!_botConfig.PresetBatch.TryGetValue(type, out var limit))
{
_logger.Warning(_localisationService.GetText("bot-bot_preset_count_value_missing", type));
@@ -56,12 +56,11 @@ public class BotController(
}
return limit;
}
/// <summary>
/// Handle singleplayer/settings/bot/difficulty
/// Get the core.json difficulty settings from database/bots
/// Handle singleplayer/settings/bot/difficulty
/// Get the core.json difficulty settings from database/bots
/// </summary>
/// <returns></returns>
public Dictionary<string, object> GetBotCoreDifficulty()
@@ -70,8 +69,8 @@ public class BotController(
}
/// <summary>
/// Get bot difficulty settings
/// Adjust PMC settings to ensure they engage the correct bot types
/// Get bot difficulty settings
/// Adjust PMC settings to ensure they engage the correct bot types
/// </summary>
/// <param name="type">what bot the server is requesting settings for</param>
/// <param name="diffLevel">difficulty level server requested settings for</param>
@@ -100,7 +99,7 @@ public class BotController(
}
/// <summary>
/// Handle singleplayer/settings/bot/difficulties
/// Handle singleplayer/settings/bot/difficulties
/// </summary>
/// <returns></returns>
public Dictionary<string, Dictionary<string, DifficultyCategories>> GetAllBotDifficulties()
@@ -160,7 +159,7 @@ public class BotController(
}
/// <summary>
/// Generate bots for a wave
/// Generate bots for a wave
/// </summary>
/// <param name="sessionId">Session/Player id</param>
/// <param name="request"></param>
@@ -173,7 +172,7 @@ public class BotController(
}
/// <summary>
/// Generate bots for passed in wave data
/// Generate bots for passed in wave data
/// </summary>
/// <param name="request"></param>
/// <param name="pmcProfile">Player generating bots</param>
@@ -193,17 +192,21 @@ public class BotController(
Task.WaitAll((request.Conditions ?? [])
.Select(condition => Task.Factory.StartNew(() =>
{
var botWaveGenerationDetails = GetBotGenerationDetailsForWave(
condition,
pmcProfile,
allPmcsHaveSameNameAsPlayer,
raidSettings,
Math.Max(GetBotPresetGenerationLimit(condition.Role), condition.Limit), // Choose largest between value passed in from request vs what's in bot.config
_botHelper.IsBotPmc(condition.Role));
{
var botWaveGenerationDetails = GetBotGenerationDetailsForWave(
condition,
pmcProfile,
allPmcsHaveSameNameAsPlayer,
raidSettings,
Math.Max(GetBotPresetGenerationLimit(condition.Role),
condition.Limit), // Choose largest between value passed in from request vs what's in bot.config
_botHelper.IsBotPmc(condition.Role));
result.AddRange(GenerateBotWave(condition, botWaveGenerationDetails, sessionId));
})).ToArray());
lock (_botListLock)
{
result.AddRange(GenerateBotWave(condition, botWaveGenerationDetails, sessionId));
}
})).ToArray());
stopwatch.Stop();
if (_logger.IsLogEnabled(LogLevel.Debug))
@@ -215,7 +218,7 @@ public class BotController(
}
/// <summary>
/// Generate bots for a single wave request
/// Generate bots for a single wave request
/// </summary>
/// <param name="generateRequest"></param>
/// <param name="botGenerationDetails"></param>
@@ -255,8 +258,9 @@ public class BotController(
}
results.Add(bot);
// Store bot details in cache so post-raid PMC messages can use data
_matchBotDetailsCacheService.CacheBot(_cloner.Clone(bot));
_matchBotDetailsCacheService.CacheBot(bot);
}
catch (Exception e)
{
@@ -276,7 +280,7 @@ public class BotController(
}
/// <summary>
/// Pull raid settings from Application context
/// Pull raid settings from Application context
/// </summary>
/// <returns>GetRaidConfigurationRequestData if it exists</returns>
protected GetRaidConfigurationRequestData? GetMostRecentRaidSettings()
@@ -294,7 +298,7 @@ public class BotController(
}
/// <summary>
/// Get min/max level range values for a specific map
/// Get min/max level range values for a specific map
/// </summary>
/// <param name="location">Map name e.g. factory4_day</param>
/// <returns>MinMax values</returns>
@@ -304,7 +308,7 @@ public class BotController(
}
/// <summary>
/// Create a BotGenerationDetails for the bot generator to use
/// Create a BotGenerationDetails for the bot generator to use
/// </summary>
/// <param name="condition">Data from client defining bot type and difficulty</param>
/// <param name="pmcProfile">Player who is generating bots</param>
@@ -339,8 +343,8 @@ public class BotController(
}
/// <summary>
/// Get the max number of bots allowed on a map
/// Looks up location player is entering when getting cap value
/// Get the max number of bots allowed on a map
/// Looks up location player is entering when getting cap value
/// </summary>
/// <param name="location">The map location cap was requested for</param>
/// <returns>bot cap for map</returns>
@@ -350,6 +354,7 @@ public class BotController(
{
return _botConfig.MaxBotCap["default"];
}
if (location == "default")
{
_logger.Warning(
@@ -361,7 +366,7 @@ public class BotController(
}
/// <summary>
/// Get weights for what each bot type should use as a brain - used by client
/// Get weights for what each bot type should use as a brain - used by client
/// </summary>
/// <returns></returns>
public AiBotBrainTypes GetAiBotBrainTypes()

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